Midnight Indexer v4.1.0 release notes
For the complete documentation index, see llms.txt
- Version: v4.1.0
- Date: April 20, 2026
- Paired node: 1.0.0 (Node 0.20 and 0.21 support removed)
- Paired ledger: 8.1
- API version: v4
High-level summary
Midnight Indexer 4.1.0 is the first release on the development line that pairs with Node 1.0.0 and ledger 8.1. It adds the queries and subscriptions wallets need to sync shielded and DUST state efficiently, exposes a fee field on transactions (deprecating estimatedFees and the fees wrapper), introduces DataLoader batching for the most common lookups, and drops support for Node 0.20 and 0.21.
Operators on Node 0.22.x should stay on the 4.0.x maintenance line.
Audience
This release note is relevant for:
- Operators running the Midnight Indexer against Node 1.0.0
- Wallet developers syncing shielded and DUST state through the Indexer API
- DApp developers reading transaction fees from the Indexer API
What changed
- Added the
zswapMerkleTreeCollapsedUpdatequery (#982) and the Zswap Merkle tree root onBlock(#988) - Added efficient dust wallet synchronisation endpoints (#980) with per-generation capacity calculation and cursor pagination (#997)
- Added the
shieldedNullifierTransactionssubscription (#996) - Added a
feefield on transactions and deprecatedestimatedFeesand thefeeswrapper (#1036); fees are computed with the ledger'sTransaction::fees()API (#1031) - Supported Node 1.0 (#985) and ledger 8.1 (#1033); removed support for Node 0.20 and 0.21 (#986, #1042)
- Introduced DataLoader batching for block-by-hash, transactions-by-block, transaction-by-id and contract-actions-by-transaction lookups (#1018, #1022, #1027, #1030)
- Aligned
dustCommitmentMerkleTreeUpdatewith thezswapMerkleTreeCollapsedUpdatepattern (#1023) - Logged the wallet ID on
connectanddisconnectmutations (#935) and bridged async-graphql tracing to fastrace (#1037)
New features
Zswap Merkle tree collapsed update
The zswapMerkleTreeCollapsedUpdate query returns a collapsed Merkle tree update between two indexes, so a wallet can bring its local Zswap tree up to date without replaying every transaction. Block now also carries the Zswap Merkle tree root.
Dust wallet synchronisation endpoints
New endpoints let a wallet sync DUST generation state efficiently, with per-generation capacity calculation and cursor pagination.
shieldedNullifierTransactions subscription
Wallets can subscribe to transactions that spend nullifiers matching a set of prefixes, instead of scanning every shielded transaction.
fee on transactions
Transaction gains a fee field computed with the ledger's own fee API. estimatedFees and the fees wrapper are deprecated and remain available for one release cycle.
Breaking changes
- Node 0.20 and 0.21 are no longer supported. Operators on those node versions cannot run 4.1.0.
estimatedFeesand thefeeswrapper are deprecated in favour offee. They still resolve in this release.
Bug fixes
- Chain indexer falls back to the metadata of the parent block when a block carries none (#970)
- Standalone SQLite SPO queries match the PostgreSQL results (#977)
- Added
start_periodto the PostgreSQL healthcheck in docker-compose (#936) - Avoided unnecessary scans of shielded transactions (#1039)
Links and references
- GitHub release: v4.1.0 on GitHub
- Full changelog: CHANGELOG.md at v4.1.0
- Schema: Indexer API v4 schema
- API reference: Midnight Indexer API v4
- Docker images: Chain Indexer, Indexer API, Wallet Indexer, Indexer Standalone