Releases: dever-labs/mockly
Releases · dever-labs/mockly
Release list
v0.13.1
v0.13.0
0.13.0 (2026-07-08)
Features
Bug Fixes
- ci: add missing release-please manifest at v0.12.4 (6008d70)
- ci: pin release-please-action to SHA for sha_pinning_required policy (3486218)
- ci: use PAT token for release-please PR creation (ebe57c3)
- devcontainer: add git configuration path to container environment (fcb09b6)
- install mockly-driver locally before building java testcontainers in CI (#115) (f9f4864)
- patch security vulnerabilities in go/testcontainers and java/testcontainers (#127) (eba8dcb)
- subscribe before fast-path check in WaitFor to avoid race (#126) (f944ef6)
- update .NET SDK version to 10 and bump Go module dependencies (2a2511e)
v0.12.4
v0.12.3
Bug Fixes
FaultConfig.status_overriderenamed tostatusacross all 6 drivers (Go, Node, Python, Rust, .NET, Java).POST /api/fault/httpdeserializes intoHTTPFaultwhich usesstatus—status_overridebelongs to the per-mockMockFaultstruct and was silently ignored by the server.
CI
- Removed deprecated
-Dgpg.passphraseCLI argument from Maven deploy commands;maven-gpg-plugin3.x readsMAVEN_GPG_PASSPHRASEenv var automatically, avoiding potential passphrase leakage in process listings.
v0.12.2
Bug Fixes
- Java Maven Central publish: Bumped
central-publishing-maven-pluginfrom0.7.0to0.11.0. The0.7.0version crashes withUnrecognizedPropertyException: warningsbecause Maven Central's API added awarningsfield that the old plugin cannot deserialise.
v0.12.1
Bug Fixes
setFaultwrong endpoint: All drivers were callingPOST /api/fault(which does not exist); corrected toPOST /api/fault/http(Go, Node, Python, Rust, .NET C#, Java, node-testcontainers)clearFaultwrong status: Python, Rust, and Java expected HTTP 200 fromDELETE /api/fault; server returns 204 No Content- Java CI
mvn verifyfailing: GPG signing plugin was bound to theverifyphase unconditionally, causing every test run to fail without a GPG key — moved into areleaseMaven profile, activated with-Preleaseonly during deploy
Documentation
- Updated all 6 client READMEs to show correct
POST /api/fault/httpendpoint forsetFault - Added
[Unreleased]→ now[v0.12.1]changelog entries documenting the fault fixes - Full client API reference docs updated for all 19 new methods added in v0.12.0
v0.12.0
What's Changed
Features
- Full API parity across all 6 client drivers (Go, Node/TypeScript, Python, Rust, .NET C#, Java)
- Added
getCalls,clearCalls,clearAllCalls,waitForCallsto all drivers - Added
listMocks,updateMock,patchMock(mock management) - Added
getState,setState,deleteState(state API) - Added
getLogs,clearLogs,getLogsCount(logs API) - Added full scenario CRUD:
listScenarios,createScenario,getScenario,updateScenario,deleteScenario,listActiveScenarios - New types:
CallEntry,CallSummary,MockResponsePatch,ActiveScenariosResponse
- Added
Bug Fixes
- Fixed
deleteMockacross Go, Java, Python, Rust (server returns 200, not 204) - Fixed Java
matchingBracketfailing on escaped backslashes in JSON strings - Fixed Python
waitForCalls408 timeout handling to avoid silent failures - Fixed Python
getCalls/clearCalls/waitForCallsmissing URL encoding on mock ID - Fixed sub-second timeout precision in Java and .NET (now uses milliseconds)
Tests
- Added comprehensive unit tests for all 19 new API methods across all 6 drivers
DevContainer
- Fixed .NET 9 SDK availability in all shell contexts (non-interactive, VS Code tasks)
- Removed broken
dotnet:2devcontainer feature; SDK now reliably on PATH via/etc/profile.d/dotnet.sh - Added
ms-dotnettools.csdevkitVS Code extension
CI/CD
- Fixed
cargo publishwith--allow-dirty(version bump modifies Cargo.toml without committing) - Fixed npm sigstore provenance by adding
repositoryURL tonode-testcontainers/package.json
v0.11.0
What's new in v0.11.0
✨ New features
HTTP Authentication Mocking
Add a typed auth: block to any HTTP mock to require valid credentials as a matching criterion. Supports five schemes:
| Scheme | Description |
|---|---|
bearer |
Match Authorization: Bearer <token> — exact, re:… regex, or * (any) |
basic |
Decode Basic credentials and compare username + password |
api_key |
Match a named request header or query parameter value |
ntlm |
Full 3-step NTLM challenge/response handshake (Windows-integrated auth) |
digest |
Require an Authorization: Digest … header |
Auth is entirely optional — omitting it leaves existing behaviour unchanged. When auth fails the mock is skipped; add a fallback mock without auth to return your preferred 401 response.
Also ships with a new ntlm preset (mockly preset use ntlm).
Header pattern matching
Header values in request.headers now support re:… regex and * wildcard patterns. Header key lookup is case-insensitive per the HTTP spec.
Testcontainers modules
First-class Testcontainers modules for all six language clients (Go, Python, .NET, Java, Node.js, Rust).
🐛 Bug fixes
- Security: Prevent reflected XSS in truncated HTTP response fallback path
- Security: Resolve vulnerabilities in transitive dependencies
- SNMP: Fix data race in
ServeForevergoroutine on shutdown
🔧 Dependency updates
- Bump
actions/setup-go6.4.0 → 6.5.0 - Bump
actions/setup-dotnet,setup-java,setup-python - Bump UI dependencies (
tailwindcss,@tailwindcss/vite,@tanstack/react-query,eslint,@types/node) - Bump various Go modules
v0.10.0
What's Changed
🚀 Features
Path matching
- Named path parameters —
{name}syntax captures a single path segment:path: /users/{id},path: /regions/{region}/emails - Mid-segment wildcards —
*now matches one segment anywhere in a path, not just as a trailing prefix:/regions/*/emails path_regexfield — dedicated regex field on HTTP and CoAP mocks as an alternative to there:inline prefix
Response templating
- New
{{.request.*}}namespace available in all response body and header templates{{.request.params.id}}— named path parameter captured by{id}{{.request.body.field}}— JSON field from the incoming request body{{.request.method}},{{.request.path}},{{.request.query.foo}},{{.request.headers.X-Foo}}
Cross-protocol improvements
- MQTT —
{name}topic segment captures (e.g.devices/{device_id}/cmd) available in response payload templates and log entries - CoAP — named path params,
path_regexfield, and response payload templating - SIP —
uri_regexfield and response body templating - WebSocket —
on_connect.sendandon_message.respondnow rendered as Go templates ({{.request.path}},{{.request.body}})
Logs API
GET /api/logs?matched_id=<id>— filter log entries by mock IDGET /api/logs/count— count all log entriesGET /api/logs/count?matched_id=<id>— per-mock hit count without fetching full log bodies
Full Changelog: v0.9.0...v0.10.0
v0.9.0
What's Changed
🚀 Features
- HTTP fault injection: Added
headersfield to inject custom response headers (e.g.Retry-After,WWW-Authenticate) via direct faults and per-mock faults - HTTP fault injection: Added
abortfield — hijacks the TCP connection and sends a RST reset, simulating a crashed server before any response - HTTP fault injection: Added
truncate_bodyfield — writes headers with an inflatedContent-Lengththen closes mid-transfer, simulating a partial response - HTTP fault injection: Support for any HTTP status code in faults (3xx, 4xx, 5xx) — 3xx redirects no longer incorrectly inject an error body
- Fault API:
GET /api/fault/{protocol}/effective— new endpoint returning the merged effective fault (direct injection + active scenario overrides) - Fault API:
POST /api/fault/{protocol}now echoes back the stored fault in the response body (was{"status":"ok"}) - Fault API:
GET /api/fault/{protocol}andDELETE /api/fault/{protocol}now return404for unknown protocol names
🐛 Bug Fixes
- Fixed: delay-only HTTP faults (
delayset, nostatus/body) were incorrectly overriding the response with a503 - Fixed: mutating API endpoints (
POST,PUT,DELETE,PATCH) for HTTP, WebSocket, gRPC, GraphQL, TCP, Redis, SMTP, and MQTT would panic with a nil pointer dereference when the protocol was not configured — now return503 - Fixed: all
DELETE /api/mocks/{protocol}/{id}endpoints returned200even when the ID did not exist — now return404 - Fixed:
PUT /api/scenarios/{id}silently upserted instead of returning404for unknown IDs - Fixed:
DELETE /api/scenarios/{id}/activate(deactivate) always returned200even for non-existent scenario IDs — now returns404 - Fixed:
POST /api/resetdid not restore SNMP traps to their initial config values - Fixed: CORS allowed methods list was missing
PATCH - Fixed: FTP root-level file listing bug — files at the root path were never listed
🔧 Dependency Updates
- Bump
github.com/go-chi/chi/v5from 5.2.5 to 5.3.0 - Bump
@tailwindcss/vite,tailwindcss,vite,react-dom,@tanstack/react-query,typescript-eslint,eslint(UI) - Bump
serde_json,reqwest(Rust client) - Bump
actions/checkout,actions/setup-dotnet(CI)
Full Changelog: v0.8.1...v0.9.0