Skip to main content

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 zswapMerkleTreeCollapsedUpdate query (#982) and the Zswap Merkle tree root on Block (#988)
  • Added efficient dust wallet synchronisation endpoints (#980) with per-generation capacity calculation and cursor pagination (#997)
  • Added the shieldedNullifierTransactions subscription (#996)
  • Added a fee field on transactions and deprecated estimatedFees and the fees wrapper (#1036); fees are computed with the ledger's Transaction::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 dustCommitmentMerkleTreeUpdate with the zswapMerkleTreeCollapsedUpdate pattern (#1023)
  • Logged the wallet ID on connect and disconnect mutations (#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.
  • estimatedFees and the fees wrapper are deprecated in favour of fee. 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_period to the PostgreSQL healthcheck in docker-compose (#936)
  • Avoided unnecessary scans of shielded transactions (#1039)