Releases: 0xMiden/miden-client
Releases · 0xMiden/miden-client
v0.14.0-alpha.1
0.14.0-alpha.1 (2026-03-06)
Enhancements
- Updated the
GrpcClientto 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-statusflag tomiden-client infocommand to display RPC node status information including node version, genesis commitment, store status, and block producer status; also addedget_status_unversionedtoNodeRpcClienttrait (#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
NoteInclusionProofandNoteMetadatain 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
NoteScreenerconstructor viaClient::note_screener()and improved note consumability checks with batch note screening support (#1803, #1814). - [FEATURE][web] Added
getAccountProofmethod to the web client'sRpcClient, allowing lightweight retrieval of account header, storage slot values, and code via a single RPC call. Refactored theNodeRpcClient::get_account_proofsignature to allow requesting just private account proofs (#1794, #1814). - Added
getAccountByKeyCommitmentmethod toWebClientfor retrieving accounts by public key commitment (#1729).
Changes
- [BREAKING] Incremented MSRV to 1.91(#1798).
- [BREAKING] Replaced
AuthFalcon512Rpo/AuthEcdsaK256Keccakwith unifiedAuthSingleSig, changedStorageMapKeyfrom a type alias to a newtype, renamed note constructors to associated methods (P2idNote::create,SwapNote::create,P2ideNote::create), and started requiringAccountComponentMetadatainAccountComponent::new(#1798). - Included Partial states in
NoteFilter::Unspentfor output notes (#1817). - [BREAKING][arch][web] Replaced the
WebClientclass with a newMidenClientresource-based API as the primary web SDK entry point.WebClientis still available asWasmWebClientfor low-level access but is no longer part of the public API. All documentation has been updated to useMidenClient. Migration: replaceWebClient.createClient(rpcUrl, noteTransportUrl, seed, storeName)withMidenClient.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 returnsResult(throws on invalid hex) instead of silently panicking viaunwrap(). (#1762). - [BREAKING] Added a
AccountReaderaccessible throughClient::account_readerto read account data without needing to load the wholeAccount(#1713, #1716). - [BREAKING] Added
Keystoretrait that extendsTransactionAuthenticatorto provide a unified interface for key storage, retrieval, and account-key mapping, enabling custom keystore implementations.KeystorereplacesTransactionAuthenticatorinClientand 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 viaRUST_LOG(#1743). - Improved integration test logging with a
--verboseflag for info-level tracing, routed tracing output to stderr to avoid corrupting subprocess JSON, and addedtracing::info!instrumentation to test helpers (#1816). - Added implementation for the
get_public_keymethod on theFilesystemKeystoreandWebKeystore(#1731). - [BREAKING] Made the nullifiers sync optional on the
StateSynccomponent (#1756). - [BREAKING] Added
SyncStateInputsto bundle the parameters needed to perform the sync state (#1778). - [BREAKING][type][web]
AuthSecretKey.getRpoFalcon512SecretKeyAsFelts()andgetEcdsaK256KeccakSecretKeyAsFelts()now returnResult<Vec<Felt>, JsValue>instead of panicking on key type mismatch (#1833). - [BREAKING][rename][cli] Renamed
CliConfig::from_system()toCliConfig::load()andCliClient::from_system_user_config()toCliClient::new()for better discoverability (#1848). - Removed
SmtForestempty-root workaround inAccountSmtForest::safe_pop_smts, now that the upstream fix has landed in miden-crypto v0.19.7 (#1864).
Features
- [FEATURE][web] New
MidenClientclass 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 viapreview(), confirmation polling viawaitFor(), and flexible account/note references that accept hex strings, bech32 strings, or WASM objects interchangeably (AccountRef,NoteInputtypes). 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
0.13.2 (2026-02-26)
- Updated to
miden-cryptov0.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 toNoteMetadataWASM 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
PartialBlockchainNodeNotFounderror instead of a confusing deserialization crash when nodes are missing (#1789).
v0.13.1
0.13.1 (2026-02-13)
- Added the
@miden-sdk/reacthooks library (see its own changelog) (#1711). - Fixed WASM bindings consuming JS objects:
RpcClientandWebClientmethods now take references (&AccountId,&Word) instead of owned values, so callers can reuse objects after passing them (#1765). - Fixed
AccountSmtForestpruning shared SMT roots between old and new account states, which causedMerkleError::RootNotInStoreduring note screening aftersync_state()(#1771). - [FEATURE][web] Added
setupLogging(level)andlogLevelparameter oncreateClientto route Rust tracing output to the browser console with configurable verbosity (#1669).
v0.13.0
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 sharedgetPublicKeyAsWordbinding, and refreshed typedoc output) (#1556). - Added the
--remote-prover-timeoutconfiguration to the CLI (#1551). - Added pagination handling for
sync_storage_mapsandsync_account_vaultRPC endpoints. - Added RPC limit handling for
sync_nullifiersendpoint (#1590). - Incremented the limits for various RPC calls to accommodate larger data sets (#1621).
- Added
submit_new_transaction_with_proverto the Rust client andsubmitNewTransactionWithProverto the WebClient(#1622). - Added WebClient bindings and RPC helpers for additional account, note, and validation workflows (#1638).
- Expanded the
GrpcClientAPI with methods to fetch account proofs and rebuild the slots for an account (#1591). - Added
CliClientwrapper andCliConfig::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
blockNumtype fromstringtonumberin WebClient transaction interfaces for better type safety and consistency (#1528). - Consolidated
FetchedNotefields intoNoteHeader(#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
DataStoreimplementation to prevent retrieving wholevaultandstorage(#1419) - Added a convenience function
fromBech32to turn a bech32 string into an AccountId (#1607). - Updated
SqliteStore: replacedMerkleStorewithSmtForestand introducedAccountSmtForest; simplified queries (#1526, #1663). - Added filter to store query to improve how the MMR is built (#1681).
- [BREAKING] Removed
getRpoFalcon512PublicKeyAsWordandgetEcdsaK256KeccakPublicKeyAsWordinAuthSecretKey - [BREAKING] Typed the
auth_schemeplumbing 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.createAuthComponentFromCommitmentnow takesAuthScheme(enum) instead of a numeric scheme id. The oldAccountComponent.createAuthComponentmethod was removed; usecreateAuthComponentFromSecretKeyinstead (#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_proofstoNodeRpcClient::get_account_proof& addedaccount_stateparameter (block at which we want to retrieve the proof) (#1616). - [BREAKING] Refactored
NetworkIdto allow custom networks (#1612). - [BREAKING] Removed
toBech32Customand implemented custom id conversion for wasm derived classNetworkId(#1612). - [BREAKING] Remove
SecretKeymodel and consolidated functionality intoAuthSecretKey(#1592) - [BREAKING] Introduced named storage slots, changed
FilesystemKeystoreto not be generic over RNG (#1626). - [BREAKING] Modified JS binding for
AccountComponent::compilewhich now takes anAccountComponentCodebuilt with the newly added bindingCodeBuilder::compile_account_component_code(#1627). - [BREAKING]
WebClient.addAccountSecretKeyToWebStorenow takes an additional parameter: an account ID. This will link the ID with the secret key in the WebStore. AddedWebClient.getPublicKeyCommitmentsOfAccountmethod that will return a list of related public key commitments for the given account ID (#1608). - [BREAKING] Added naming to
IndexedDBstore to allow multiple WebClient instances to run in the same browser;WebClient.createClientnow takes an optional DB name (otherwise defaults to name based on the endpoint/network) (#1645). - [BREAKING] Simplified the
NoteScreenerAPI, removingNoteRelevancein favor ofNoteConsumptionStatus; exposed JS bindings for consumption check results (#1630). - [BREAKING] Replaced
TransactionRequestBuilder::unauthenticated_input_notes&TransactionRequestBuilder::authenticated_input_notesforTransactionRequestBuilder::input_notes, now the user passes a list of notes which theClientitself determines the authentication status of (#1624). - [BREAKING] Required the client RNG to be
Send + Sync(via theClientFeltRngmarker andClientRngBoxalias) soClientcan beSend + Sync(#1677). - [BREAKING] Updated
BlockNumberIndexedDB type: changed fromstringtonumber(#1684). - [BREAKING] Upgraded to protocol 0.13: exposed and aligned note-related structs to WebClient;
NoteTagandNoteAttachmentAPIs updated renamedNoteTag.fromAccountIdtowithAccountTarget, addedwithCustomAccountTarget; addedNoteAttachmentSchemewrapper and content accessors (asWord,asArray) toNoteAttachment; removedNoteExecutionMode(#1685). - [BREAKING] Removed the
payback_note_typefield 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
pruneIrrelevantBlocksthat 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_mmrto return aStoreError::BlockHeaderNotFounderror instead of panicking when the block header is missing (#1650).
v0.12.6
- Enabled Workers with
createClientWithExternalKeystorevia callbacks (#1569). - Added
executeForSummarymethod to WebClient that executes a transaction and returns aTransactionSummary, 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
What's Changed
- fix(miden-idxdb-store) fix insertAccountAddress by @saimeunt in #1532
- docs: Update
get_notes_by_iddescription by @mmagician in #1520 - refactor: use different iterator for upserting note scripts by @igamigo in #1540
- feat: add
fromPackageforNoteScript&TransactionScriptby @juan518munoz in #1550 - feat: non-breaking RPC limits for
check_nullifiersandget_notes_by_idby @TomasArrachea in #1558 - tests: test ecdsa signed transactions & update miden-node to 0.12.5 by @fkrause98 in #1554
- chore: Explain how to build the npm package by @WiktorStarczewski in #1561
- fix: sync after rollback by @TomasArrachea in #1567
- fix: update note transport layer default endpoint by @mmagician in #1574
- Add methods on
AccountComponentandAccountBuilderby @0xnullifier in #1568 - Fix #1568 Dont use AuthScheme in createAuthComponentFromCommitment by @0xnullifier in #1580
- Lazy load WASM in the web client by @WiktorStarczewski in #1585
- refactor: Use import-note on fetch notes, remove note transport update by @v0-e in #1579
Full Changelog: v0.12.3...v0.12.5
v0.12.3
- Retrieve inclusion proofs for fetched notes from the Note Transport layer (#1495).
- Added
recoverFrom()function to WASMPublicKeyand added backTransactionSummaryback toindex.d.ts(#1513). - Added
hasProceduretoAccountCodeandgetProcedurestoAccountComponentin the WebClient (#1517). - Added ECDSA auth component to the rust-client & web-client (#1527).
v0.12.2
- Allowed
new-accountcommand to create accounts with non-Falcon auth components (#1443). - Added new
.midendirectory for configuration files at the client CLI (#1464). - Added
prover()setter toClientBuilderto allow configuring custom transaction provers (#1499). - Added
AccountStorageModegetters forAccountandAccountId. (#1509). - Exposed all auth packages from
miden-base:no-auth,multisig-auth, andacl-authcomponents are now available in the CLI underpackages/auth/subdirectory (#1132).
v0.12.0
Features
- Added support for getting specific vault and storage elements from
Storealong with their proofs (#1164). - Implemented functions for lazy loading on webstore (#1184).
- Separated
migrationsandsettingstables (#1287). - Added single default address on account creation (#1308).
- Added a
GetNoteScriptByRootcall to theRpcClient(#1311). - Implemented account lazy loading with more granular account data getters (#1321).
- Added
NoAuthcomponent to the web client (#1330). - Implemented shared source manager for better error reporting (#1275).
- Added
getMapEntriesmethod toAccountStoragein web client for iterating storage map entries (#1323). - Added
Addressaddition and removal for accounts (#1367). - Refactored code into their own files and added
ProvenTransactionandTransactionStoreUpdatebindings for the WebClient (#1408). - Added
NoteFiletype, used for exporting and importingNotes(#1378). - Build
IndexedDBcode from abuild.rsinstead of pushing artifacts to the repo (#1409). - Implemented missing RPC endpoints:
/SyncStorageMaps,/SyncAccountVault&/SyncTransactions(#1362). - Updated
submit_proven_transaction()to includeTransactionInputsfor validator (#1421). - [BREAKING] Replaced
AccountComponentTemplatesforPackagesfor 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
TransactionResulttype (#1407). - Added ability to create
AccountComponentfrom aPackageandStorageSlotarray 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
BlockNumberinstead ofu32(#1415). - Modified the RPC client to avoid reconnection when setting commitment header (#1166).
- [BREAKING] Moved
SqliteStoreandWebStoreinto their own separate crates (#1253). - [BREAKING] Added
block_toparameter toNodeRpcClient::sync_nullifiersfor better pagination control (#1309). - [BREAKING] Removed
web-tonicfeature (#1268). - [BREAKING] Updated Web Client account store functions from insert to upsert (#1274).
- [BREAKING] Added connectivity to the Transport Layer, adding a new
Clientfield andStoremethods (#1296). - Removed
miden-libandmiden-objectsdependencies from web client & cli (#1333). - Add more context to errors when deserializing objects (#1336)
- [BREAKING] Renamed
TonicRpcClienttoGrpcClientandtonic_rpc_client()method togrpc_client()(#1360). - [BREAKING] Removed WebClient's
compileNoteScriptmethod and bothTransactionScriptandNoteScriptcompile methods; the newScriptBuildershould be used instead (#1331). - [BREAKING] Implemented
AccountFilein the WebClient (#1258). - [BREAKING] Added remote key storage and signature requesting to the
WebKeyStore(#1371). - Added
sqlite_storeunderClientBuilderSqliteExtmethod to theClientBuilder(#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
ClientErrorvariants to contain explanations and hints about the errors (#1462).