Skip to content

Releases: 0xMiden/miden-client

v0.14.0-alpha.1

06 Mar 18:44
13c317b

Choose a tag to compare

v0.14.0-alpha.1 Pre-release
Pre-release

0.14.0-alpha.1 (2026-03-06)

Enhancements

  • Updated the GrpcClient to fetch the RPC limits from the node (#1724) (#1737, #1809).
  • Added typed error parsing for node RPC endpoints, enabling programmatic error handling instead of string parsing (#1734).
  • Added --rpc-status flag to miden-client info command to display RPC node status information including node version, genesis commitment, store status, and block producer status; also added get_status_unversioned to NodeRpcClient trait (#1742).
  • Prevent a potential unwrap panic in insert_storage_map_nodes_for_map (#1750).
  • Changed the StateSync::sync_state() to take a reference of the MMR (#1764).
  • Account storage restructured into latest/historical tables for efficient delta writes and simpler pruning (#1775).
  • Remove unnecessary clones of NoteInclusionProof and NoteMetadata in note import and sync paths (#1787).
  • [FEATURE][web] WebClient now automatically syncs state before account creation when the client has never been synced, preventing a slow full-chain scan on the next sync (#1704).
  • Added NoteScreener constructor via Client::note_screener() and improved note consumability checks with batch note screening support (#1803, #1814).
  • [FEATURE][web] Added getAccountProof method to the web client's RpcClient, allowing lightweight retrieval of account header, storage slot values, and code via a single RPC call. Refactored the NodeRpcClient::get_account_proof signature to allow requesting just private account proofs (#1794, #1814).
  • Added getAccountByKeyCommitment method to WebClient for retrieving accounts by public key commitment (#1729).

Changes

  • [BREAKING] Incremented MSRV to 1.91(#1798).
  • [BREAKING] Replaced AuthFalcon512Rpo/AuthEcdsaK256Keccak with unified AuthSingleSig, changed StorageMapKey from a type alias to a newtype, renamed note constructors to associated methods (P2idNote::create, SwapNote::create, P2ideNote::create), and started requiring AccountComponentMetadata in AccountComponent::new(#1798).
  • Included Partial states in NoteFilter::Unspent for output notes (#1817).
  • [BREAKING][arch][web] Replaced the WebClient class with a new MidenClient resource-based API as the primary web SDK entry point. WebClient is still available as WasmWebClient for low-level access but is no longer part of the public API. All documentation has been updated to use MidenClient. Migration: replace WebClient.createClient(rpcUrl, noteTransportUrl, seed, storeName) with MidenClient.create({ rpcUrl, noteTransportUrl, seed, storeName }), and replace direct method calls (e.g. client.newWallet(...), client.submitNewTransaction(...), client.getAccounts()) with resource methods (e.g. client.accounts.create(), client.transactions.send(...), client.accounts.list()). (#1762).
  • [BREAKING][type][web] AccountId.fromHex() now returns Result (throws on invalid hex) instead of silently panicking via unwrap(). (#1762).
  • [BREAKING] Added a AccountReader accessible through Client::account_reader to read account data without needing to load the whole Account (#1713, #1716).
  • [BREAKING] Added Keystore trait that extends TransactionAuthenticator to provide a unified interface for key storage, retrieval, and account-key mapping, enabling custom keystore implementations. Keystore replaces TransactionAuthenticator in Client and provides a way to map from account IDs to public keys (registering them separately is not required anymore). (#1726).
  • Refactored integration tests binary with subprocess-per-test execution; added automatic retry of failed tests (--retry-count), captured stdout/stderr per test, and tracing support via RUST_LOG (#1743).
  • Improved integration test logging with a --verbose flag for info-level tracing, routed tracing output to stderr to avoid corrupting subprocess JSON, and added tracing::info! instrumentation to test helpers (#1816).
  • Added implementation for the get_public_key method on the FilesystemKeystore and WebKeystore (#1731).
  • [BREAKING] Made the nullifiers sync optional on the StateSync component (#1756).
  • [BREAKING] Added SyncStateInputs to bundle the parameters needed to perform the sync state (#1778).
  • [BREAKING][type][web] AuthSecretKey.getRpoFalcon512SecretKeyAsFelts() and getEcdsaK256KeccakSecretKeyAsFelts() now return Result<Vec<Felt>, JsValue> instead of panicking on key type mismatch (#1833).
  • [BREAKING][rename][cli] Renamed CliConfig::from_system() to CliConfig::load() and CliClient::from_system_user_config() to CliClient::new() for better discoverability (#1848).
  • Removed SmtForest empty-root workaround in AccountSmtForest::safe_pop_smts, now that the upstream fix has landed in miden-crypto v0.19.7 (#1864).

Features

  • [FEATURE][web] New MidenClient class with resource-based API (client.accounts, client.transactions, client.notes, client.tags, client.settings). Provides high-level transaction helpers (send, mint, consume, swap, consumeAll), transaction dry-runs via preview(), confirmation polling via waitFor(), and flexible account/note references that accept hex strings, bech32 strings, or WASM objects interchangeably (AccountRef, NoteInput types). Factory methods: MidenClient.create(), MidenClient.createTestnet(), MidenClient.createMock(). (#1762)
  • [FEATURE][web] Added TransactionId.fromHex() static constructor for creating transaction IDs from hex strings. (#1762)
  • [FEATURE][web] Added standalone tree-shakeable note utilities (createP2IDNote, createP2IDENote, buildSwapTag) usable without a client instance. (#1762)

Fixes

  • [FIX][rust] Replaced .expect() panics on RPC response data with proper error propagation (#1833).

v0.13.2

26 Feb 16:26
6cfc289

Choose a tag to compare

0.13.2 (2026-02-26)

  • Updated to miden-crypto v0.19.5 (#1813).
  • [FIX] Stopped including unnecessary storage map data when loading existing accounts for transaction execution. New accounts (nonce == 0) still get full storage maps as needed for kernel validation (#1832).
  • [FIX][web] Added missing attachment() getter to NoteMetadata WASM binding (#1810).
  • [FIX][web] Fixed transaction execution failures after reopening a browser extension by always persisting MMR authentication nodes during sync, even for blocks with no relevant notes. Previously, closing and reopening the extension lost in-memory MMR state and the store was missing nodes needed for Merkle authentication paths. Also surfaces a distinct PartialBlockchainNodeNotFound error instead of a confusing deserialization crash when nodes are missing (#1789).

v0.13.1

13 Feb 18:03
8707554

Choose a tag to compare

0.13.1 (2026-02-13)

  • Added the @miden-sdk/react hooks library (see its own changelog) (#1711).
  • Fixed WASM bindings consuming JS objects: RpcClient and WebClient methods now take references (&AccountId, &Word) instead of owned values, so callers can reuse objects after passing them (#1765).
  • Fixed AccountSmtForest pruning shared SMT roots between old and new account states, which caused MerkleError::RootNotInStore during note screening after sync_state() (#1771).
  • [FEATURE][web] Added setupLogging(level) and logLevel parameter on createClient to route Rust tracing output to the browser console with configurable verbosity (#1669).

v0.13.0

28 Jan 19:53
4ec4ed1

Choose a tag to compare

0.13.0 (2026-01-28)

Enhancements

  • Improved auth scheme handling across the Rust and web clients (typed build_wallet_id, unified transaction tests, new shared getPublicKeyAsWord binding, and refreshed typedoc output) (#1556).
  • Added the --remote-prover-timeout configuration to the CLI (#1551).
  • Added pagination handling for sync_storage_maps and sync_account_vault RPC endpoints.
  • Added RPC limit handling for sync_nullifiers endpoint (#1590).
  • Incremented the limits for various RPC calls to accommodate larger data sets (#1621).
  • Added submit_new_transaction_with_prover to the Rust client and submitNewTransactionWithProver to the WebClient(#1622).
  • Added WebClient bindings and RPC helpers for additional account, note, and validation workflows (#1638).
  • Expanded the GrpcClient API with methods to fetch account proofs and rebuild the slots for an account (#1591).
  • Added CliClient wrapper and CliConfig::from_system() to allow creating a CLI-configured client programmatically (#1642).
  • Added sync lock to coordinate concurrent syncState() calls in the WebClient using the Web Locks API, with coalescing behavior where concurrent callers share results from an in-progress sync (#1690).

Changes

  • Changed blockNum type from string to number in WebClient transaction interfaces for better type safety and consistency (#1528).
  • Consolidated FetchedNote fields into NoteHeader (#1536).
  • Tied the web client's IndexedDB schema to the running package version, automatically recreating or wiping stale stores and applying the same guard to forceImportStore (#1576).
  • Added doc_cfg as top level cfg_attr to turn on feature annotations in docs.rs and added make targets to serve the docs (#1543).
  • Updated DataStore implementation to prevent retrieving whole vault and storage (#1419)
  • Added a convenience function fromBech32 to turn a bech32 string into an AccountId (#1607).
  • Updated SqliteStore: replaced MerkleStore with SmtForest and introduced AccountSmtForest; simplified queries (#1526, #1663).
  • Added filter to store query to improve how the MMR is built (#1681).
  • [BREAKING] Removed getRpoFalcon512PublicKeyAsWord and getEcdsaK256KeccakPublicKeyAsWord in AuthSecretKey
  • [BREAKING] Typed the auth_scheme plumbing across the Rust WebClient ID-building helpers and aligned the WebClient bindings with the native enum to avoid passing raw identifiers (#1546).
  • [BREAKING] WebClient AccountComponent.createAuthComponentFromCommitment now takes AuthScheme (enum) instead of a numeric scheme id. The old AccountComponent.createAuthComponent method was removed; use createAuthComponentFromSecretKey instead (#1578).
  • [BREAKING] Refactored the fields in retrieved notes in the WebClient: now the inclusion proof has been factored out and is always accessible (#1606).
  • [BREAKING] Renamed NodeRpcClient::get_account_proofs to NodeRpcClient::get_account_proof & added account_state parameter (block at which we want to retrieve the proof) (#1616).
  • [BREAKING] Refactored NetworkId to allow custom networks (#1612).
  • [BREAKING] Removed toBech32Custom and implemented custom id conversion for wasm derived class NetworkId (#1612).
  • [BREAKING] Remove SecretKey model and consolidated functionality into AuthSecretKey (#1592)
  • [BREAKING] Introduced named storage slots, changed FilesystemKeystore to not be generic over RNG (#1626).
  • [BREAKING] Modified JS binding for AccountComponent::compile which now takes an AccountComponentCode built with the newly added binding CodeBuilder::compile_account_component_code (#1627).
  • [BREAKING] WebClient.addAccountSecretKeyToWebStore now takes an additional parameter: an account ID. This will link the ID with the secret key in the WebStore. Added WebClient.getPublicKeyCommitmentsOfAccount method that will return a list of related public key commitments for the given account ID (#1608).
  • [BREAKING] Added naming to IndexedDB store to allow multiple WebClient instances to run in the same browser; WebClient.createClient now takes an optional DB name (otherwise defaults to name based on the endpoint/network) (#1645).
  • [BREAKING] Simplified the NoteScreener API, removing NoteRelevance in favor of NoteConsumptionStatus; exposed JS bindings for consumption check results (#1630).
  • [BREAKING] Replaced TransactionRequestBuilder::unauthenticated_input_notes & TransactionRequestBuilder::authenticated_input_notes for TransactionRequestBuilder::input_notes, now the user passes a list of notes which the Client itself determines the authentication status of (#1624).
  • [BREAKING] Required the client RNG to be Send + Sync (via the ClientFeltRng marker and ClientRngBox alias) so Client can be Send + Sync (#1677).
  • [BREAKING] Updated BlockNumber IndexedDB type: changed from string to number (#1684).
  • [BREAKING] Upgraded to protocol 0.13: exposed and aligned note-related structs to WebClient; NoteTag and NoteAttachment APIs updated renamed NoteTag.fromAccountId to withAccountTarget, added withCustomAccountTarget; added NoteAttachmentScheme wrapper and content accessors (asWord, asArray) to NoteAttachment; removed NoteExecutionMode (#1685).
  • [BREAKING] Removed the payback_note_type field from the swap command (#1700).

Fixes

  • Surface WASM worker errors to the JS wrapper with their original stacks for clearer diagnostics (#1565).
  • Fixed MMR reconstruction code and fixed how block authentication paths are adjusted (#1633).
  • Fixed a race condition in pruneIrrelevantBlocks that could delete the current block header when multiple tabs share IndexedDB, causing sync to panic (#1650).
  • Fixed a race condition where concurrent sync operations could cause sync height to go backwards, leading to block header deletion and subsequent panics (#1650).
  • Changed get_current_partial_mmr to return a StoreError::BlockHeaderNotFound error instead of panicking when the block header is missing (#1650).

v0.12.6

09 Jan 17:27
afe8127

Choose a tag to compare

  • Enabled Workers with createClientWithExternalKeystore via callbacks (#1569).
  • Added executeForSummary method to WebClient that executes a transaction and returns a TransactionSummary, handling both authorized and unauthorized transactions (#1620).
  • Added WebClient bindings for the RPO Falcon512 multisig auth component (#1620).

Full Changelog: v0.12.5...v0.12.6

v0.12.5

04 Dec 17:26
d89a820

Choose a tag to compare

What's Changed

Full Changelog: v0.12.3...v0.12.5

v0.12.3

17 Nov 06:33
f24f1ec

Choose a tag to compare

  • Retrieve inclusion proofs for fetched notes from the Note Transport layer (#1495).
  • Added recoverFrom() function to WASM PublicKey and added back TransactionSummary back to index.d.ts (#1513).
  • Added hasProcedure to AccountCode and getProcedures to AccountComponent in the WebClient (#1517).
  • Added ECDSA auth component to the rust-client & web-client (#1527).

v0.12.2

12 Nov 22:29
07837e8

Choose a tag to compare

  • Allowed new-account command to create accounts with non-Falcon auth components (#1443).
  • Added new .miden directory for configuration files at the client CLI (#1464).
  • Added prover() setter to ClientBuilder to allow configuring custom transaction provers (#1499).
  • Added AccountStorageMode getters for Account and AccountId. (#1509).
  • Exposed all auth packages from miden-base: no-auth, multisig-auth, and acl-auth components are now available in the CLI under packages/auth/ subdirectory (#1132).

v0.12.0

10 Nov 11:06
e4830fc

Choose a tag to compare

Features

  • Added support for getting specific vault and storage elements from Store along with their proofs (#1164).
  • Implemented functions for lazy loading on webstore (#1184).
  • Separated migrations and settings tables (#1287).
  • Added single default address on account creation (#1308).
  • Added a GetNoteScriptByRoot call to the RpcClient (#1311).
  • Implemented account lazy loading with more granular account data getters (#1321).
  • Added NoAuth component to the web client (#1330).
  • Implemented shared source manager for better error reporting (#1275).
  • Added getMapEntries method to AccountStorage in web client for iterating storage map entries (#1323).
  • Added Address addition and removal for accounts (#1367).
  • Refactored code into their own files and added ProvenTransaction and TransactionStoreUpdate bindings for the WebClient (#1408).
  • Added NoteFile type, used for exporting and importing Notes(#1378).
  • Build IndexedDB code from a build.rs instead of pushing artifacts to the repo (#1409).
  • Implemented missing RPC endpoints: /SyncStorageMaps, /SyncAccountVault & /SyncTransactions (#1362).
  • Updated submit_proven_transaction() to include TransactionInputs for validator (#1421).
  • [BREAKING] Replaced AccountComponentTemplates for Packages for account creation (#1313).
  • Added support for silently initializing the client CLI (#1424).
  • Started allowing for note ID prefixes in CLI notes --send (#1433).
  • Refactored note scripts to be pre-loaded into the store instead of providing them through advice inputs (#1426).
  • [BREAKING] Refactored client transaction APIs and the new TransactionResult type (#1407).
  • Added ability to create AccountComponent from a Package and StorageSlot array in the Web Client (#1469).

Changes

  • [BREAKING] Incremented MSRV to 1.90.
  • Added typed arrays for each public web-client model/struct (#1292)
  • [BREAKING] Unified chain tip and block number types to use BlockNumber instead of u32 (#1415).
  • Modified the RPC client to avoid reconnection when setting commitment header (#1166).
  • [BREAKING] Moved SqliteStore and WebStore into their own separate crates (#1253).
  • [BREAKING] Added block_to parameter to NodeRpcClient::sync_nullifiers for better pagination control (#1309).
  • [BREAKING] Removed web-tonic feature (#1268).
  • [BREAKING] Updated Web Client account store functions from insert to upsert (#1274).
  • [BREAKING] Added connectivity to the Transport Layer, adding a new Client field and Store methods (#1296).
  • Removed miden-lib and miden-objects dependencies from web client & cli (#1333).
  • Add more context to errors when deserializing objects (#1336)
  • [BREAKING] Renamed TonicRpcClient to GrpcClient and tonic_rpc_client() method to grpc_client() (#1360).
  • [BREAKING] Removed WebClient's compileNoteScript method and both TransactionScript and NoteScript compile methods; the new ScriptBuilder should be used instead (#1331).
  • [BREAKING] Implemented AccountFile in the WebClient (#1258).
  • [BREAKING] Added remote key storage and signature requesting to the WebKeyStore (#1371).
  • Added sqlite_store under ClientBuilderSqliteExt method to the ClientBuilder (#1416).
  • [BREAKING] Updated the Web Client to integrate Note Transport (#1374).
  • [BREAKING] Refactored transaction APIs to support more granular updates in the transaction lifecycle (#1407).
  • Updated Dexie indexes and SQL schema; fixed sync-related transaction state bug (#1452).
  • Started syncing output note nullifiers by default, to track when they are consumed (#1452).
  • Expanded some ClientError variants to contain explanations and hints about the errors (#1462).

v0.11.11

20 Oct 02:11
b701db4

Choose a tag to compare

  • Added Missing Details to SigningInputs Object to Fetch Underlying Data Type (#1389).