Repository navigation
v0.18.0
First stable release on the Miden 0.17 line. It consolidates the 0.18.0-rc.1, rc.2 and rc.3 pre-releases; the notes below cover everything since v0.17.0. It publishes the server image (ghcr.io/openzeppelin/guardian:v0.18.0), the Rust crates and the npm packages (dist-tag latest).
⚠️ Breaking changes
This release is not backwards compatible with v0.17.x servers, SDKs, or existing multisig accounts. Servers and all SDK packages (Rust and npm) must be upgraded together to v0.18.0. Deploy the server before rolling out the SDKs: the 0.18.0 SDKs call an endpoint that v0.17.x servers do not serve.
- Miden 0.17 (stable). Pins
miden-protocol/miden-standards/miden-client0.17.0 and@miden-sdk/miden-sdk0.17.0. Requires a node on 0.17.0 (devnet is; testnet still runs Miden 0.16 and stays on v0.17.0). A node accepts a client only when the pre-release label matches, so this build rejects anrcnode and vice versa (accept header validation failed). See docs/MIDEN_COMPATIBILITY.md. - Accounts must be recreated. Account, delta and transaction-summary encodings are versioned, procedure ordering and commitments changed, and the multisig auth argument is now a three-word commitment, so nothing created or signed under 0.16 verifies on 0.17. The first 0.18.x server start runs the irreversible migration
2026-09-22-000001_miden_017_irreversible_reset, which deletes all stored Miden account data (EVM accounts survive). Operator steps in docs/PRODUCTION.md. - Client stores must be recreated. Rust SQLite and browser IndexedDB stores created under 0.16 do not open under 0.17. The 0.18.0 release candidates are not supported, and stores they wrote do not open either.
- TypeScript:
Multisig.syncState()returnsSyncStateResult, either{ source: 'guardian', state }or{ source: 'local', localNonce, guardianNonce }. Against a server without the canonical nonce endpoint, sync fails instead of falling back. - TypeScript SDK runs only on the supplied
MidenClient.WasmWebClientis no longer accepted bycreateMultisigAccount, thebuild*TransactionRequestbuilders orexecuteForSummary*, andmidenRpcEndpointis removed from those helpers and fromSignatureOptions. Browser clients needuseWorker: falseuntil the web SDK fixes worker mode. - Proposals execute at the chain tip. The SDK syncs before it verifies, signs or executes; a client behind the proposal's bound block fails with the retryable
MultisigError::ChainBehindBoundBlock/ChainBehindBoundBlockError. Rustproposal_auth_args(client, summary)no longer takes aChainAnchor. - Private note relay requires inclusion proofs. Rust
send_private_note_with_proof, TypeScriptnotes.sendPrivate({ inclusionProof })ornotes.sendPrivateOutput. - Custom-proposal producers must serialize
TransactionRequests with a client on the 0.17.0 pins. A request that binds a block without declaring it is refused withMultisigError::BoundBlockNotDeclared/BoundBlockNotDeclaredError. - Rust:
ClientBuilder::rngis available only under thetestingfeature; the SDK no longer supplies its own random generator. - Install pins.
npm install @openzeppelin/miden-multisig-client@0.18.0 @miden-sdk/miden-sdk@0.17.0. Rust:miden-multisig-client = "=0.18.0"withmiden-client = "=0.17.0".
Highlights
- Proposals stay executable after the node prunes old state (#462). Cosigners verify, sign and execute at the chain tip instead of re-executing at the anchor block, which failed with
block N has been prunedonce the node dropped that block's account state (about 50 blocks on devnet). See Tip execution and the bound block. - Canonical nonce endpoint and sync pre-check (#487).
GET /state/nonceand gRPCGetCanonicalNoncereturn the latest canonical{ account_id, nonce, commitment }without the state blob; both SDKs skip the full state fetch when GUARDIAN is not ahead. The migration2026-09-30-000001_state_nonceis additive. - Chain-driven release sweep (#484). The old GUARDIAN releases accounts whose
SwitchGuardiandelta never reached it. Its settings are reported in the dashboard server info asreleaseSweep. - TypeScript SDK uses the supplied
MidenClient(#503), so SDK reads and syncs no longer drift from the caller's client. - Stricter ECDSA lookup signatures (#508). Lookup auth accepts only 65-byte ECDSA signatures.
What's Changed
- chore(deps-dev): bump baseline-browser-mapping from 2.10.21 to 2.11.21 in /examples/operator-smoke-web by @dependabot[bot] in #466
- chore(deps): bump nanoid in /examples/web by @dependabot[bot] in #456
- chore(deps-dev): bump browserslist from 4.28.2 to 4.28.9 in /examples/evm-smoke-web by @dependabot[bot] in #447
- chore(deps): bump nanoid in /examples/smoke-web by @dependabot[bot] in #445
- chore(deps): bump nanoid from 3.3.11 to 3.3.18 in /examples/operator-smoke-web by @dependabot[bot] in #446
- chore(deps): bump @vitest/mocker and vitest in /packages by @dependabot[bot] in #459
- fix(multisig-client): authenticate consume-notes input notes before every summary (#409) by @haseebrabbani in #460
- chore(deps-dev): bump vite from 5.4.21 to 6.4.3 in /packages by @dependabot[bot] in #467
- fix(multisig-client): list unverifiable proposals instead of failing the whole listing (#462) by @haseebrabbani in #463
- chore(deps): bump postcss from 8.5.10 to 8.5.28 in /examples/operator-smoke-web by @dependabot[bot] in #470
- chore(deps): bump brace-expansion from 5.0.6 to 5.0.9 in /examples/_shared/multisig-browser by @dependabot[bot] in #472
- chore(deps): bump postcss from 8.4.49 to 8.5.28 in /examples/smoke-web by @dependabot[bot] in #471
- chore(deps): bump brace-expansion from 5.0.5 to 5.0.9 in /examples/operator-smoke-web by @dependabot[bot] in #473
- feat: Add production guide / production improvements by @zeljkoX in #302
- feat(infra): route CloudWatch alarms to per-environment Slack channels by @haseebrabbani in #474
- fix(multisig-client): reconcile the proposal cache with GUARDIAN on sync by @zeljkoX in #458
- feat(infra): alarm on ERROR-level server log lines via CloudWatch Logs metric filters by @haseebrabbani in #475
- fix(multisig-client): bind the endpoint commitment check to the account's scheme by @zeljkoX in #479
- feat(dashboard): bounded
GET /dashboard/statsfor account and Miden vault aggregates (#371) by @haseebrabbani in #469 - chore: Update subdomain references to match newly provisioned ones by @zeljkoX in #468
- infra: manage the AWS Deploy workflow's GitHub OIDC roles in this repo by @haseebrabbani in #477
- feat(qualification): black-box end-to-end qualification suite by @zeljkoX in #478
- feat: Support Miden v0.17. rc version by @zeljkoX in #485
- chore(release): v0.18.0-rc.1 by @zeljkoX in #492
- ci(publish): prebuild the multisig SDK example fixtures before the package tests by @haseebrabbani in #493
- feat: migrate to miden-client / web SDK 0.17.0-rc.4 and execute multisig proposals at the chain tip by @haseebrabbani in #498
- chore(release): v0.18.0-rc.2 by @haseebrabbani in #499
- feat(server): chain-driven release sweep for guardian switches that never reached the push path (#434) by @haseebrabbani in #484
- chore(deps): bump brace-expansion from 5.0.4 to 5.0.12 in /examples/smoke-web by @dependabot[bot] in #490
- chore(deps): bump postcss from 8.5.6 to 8.5.28 in /examples/web by @dependabot[bot] in #489
- ci(publish): build guardian-operator-client before the multisig SDK tests by @haseebrabbani in #494
- chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /packages by @dependabot[bot] in #506
- chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /examples/_shared/multisig-browser by @dependabot[bot] in #505
- feat: canonical nonce endpoint and sync pre-check by @haseebrabbani in #487
- ci(docker): build each platform natively and merge into one manifest list by @haseebrabbani in #496
- fix(multisig-client): use the supplied MidenClient instead of a second WASM client on its store by @haseebrabbani in #503
- fix(server): only accept 65-byte ECDSA lookup signatures by @haseebrabbani in #508
- chore(deps): bump Miden to protocol 0.17.0-rc.9, client and web SDK 0.17.0-rc.5 by @zeljkoX in #511
- chore(release): v0.18.0-rc.3 by @zeljkoX in #513
- chore(deps): bump brace-expansion from 5.0.9 to 5.0.12 in /examples/operator-smoke-web by @dependabot[bot] in #515
- chore: Fix operator client readme by @zeljkoX in #516
- chore: Bump miden deps by @zeljkoX in #520
- chore(release): v0.18.0 by @zeljkoX in #521
Full Changelog: v0.17.0...v0.18.0