Release Notes

v2.29.0

Release date: Oct 16, 2025

New features

Anchor forwarding strategies

Added new ledger configuration options for anchor forwarding, providing fine-grained control over how anchor operations are forwarded:

  • forward.anchor.strategy: Global forwarding strategy for anchors. Supported values: none, proxy, fallback, validate.
  • Per-operation forwarding strategies: forward.anchor.create.strategy, forward.anchor.update.strategy, forward.anchor.drop.strategy, forward.anchor.get.strategy, forward.anchor.sign.strategy, forward.anchor.findAll.strategy.

These options enable proxying, fallback, or validation-based interoperability with other external alias directories proxied via bridges.

Described in detail at About Anchor Forwarding

Balance reservation and release in DTC

Added balance reservation and release in DTC. Balances are reserved for all source wallets when intent is pending and kept reserved until intent is cleared or aborted. A newly created core signer appends a proof for each resolution proof and signs intent when being cleared or aborted.

Controlled by flags:

  • dtc.intentInfoResolutionFromProofs
  • dtc.claimResolutionProofs
  • dtc.balancesMovementWhenCommitted
  • dtc.balancesReservation (NEW!)

Described in detail at About Balance Reservations

Background webhook delivery (STG)

Effects can now be scheduled for delivery in a different transaction from the request. Added scheduler handler for effect delivery and allow effects to be processed in background. This behavior is controlled through the effect.scheduleWebhookDeliveries flag, which is now enabled for staging environments.

Bridge authentication header support

Added support for header schema in bridges' secure property, defining one or more auth headers to be sent on requests to bridge.

Described in detail at Header Authentication chapter of About Bridges

Access Policies redesign

Redesigned access policies page in Studio, for now the feature is on technical preview and will be further extended and then released to all clients.

Improvements

Documentation

Studio UX

  • Show proper feedback for combobox assignation component when it's empty, instead of showing a blank space.
  • Added "Add bridge" button in wallets table for wallets without an assigned bridge. Button is only visible to users with wallet update permissions.
  • Added security feature where accounts get locked after x amount of failed logins in a row.
  • Allow any signer schema to be used for creating "signer" when creating a bridge in the "Wizard". Previously it was hardcoded to "bridge".
  • Added base record schema for different record types to render default form when schema is not defined.

CLI

  • Changed wallet balance command to present the reserved amount for each symbol (omitted when it's 0).
  • Changed ledger update command to allow migration from policy-based to record-based access strategy.
  • Changed ledger create command to allow selecting ledger's access strategy. record-based is the default.

Ledger

  • Changed API spec to constrain the absolute value of amount of intent claims to be lower than Number.MAX_SAFE_INTEGER (9007199254740991), to provide better feedback to API users in case of errors.
  • Changed ledger to allow migration from policy-based to record-based access strategy. See more at Policy based ledgers
  • Support to filter anchors by data.schema.

BigQuery Reporting Bridge

  • Enabled BQRB in all PRD environments.

Fixes

Studio

  • Fixed breadcrumb navigation in detail pages (Intents, Policies, Reports) to be clickable and preserve filters, pagination, and schema selection when navigating back to list pages.
  • Properly filter anchors by data.schema when schema from tabs is specified.

Layouts

  • Remove AccessRecord.Server from RTP layouts. This record was assigned to access rules because layouts were using $in: AccessRecord.filter((r) => [...FORBIDDEN_RECORDS].includes(r)), and AccessRecord.Server was not blacklisted. Now, layouts are using $nin: [FORBIDDEN_RECORDS] with AccessRecord.Server explicitly forbidden.

Ledger

  • Fixed intent resolution logic to throw when source, routed source, target or routed target doesn't resolve to a wallet in ledger.
  • Fixed race conditions in status/labels resolution of records by locking the record before calculations. This makes concurrent requests await for lock releasing before appending proofs and making status/labels changes derived from proofs.
  • Fixed performance issue with $regex operator for claims.target.handle and claims.source.handle properties when filtering intents.
  • Many non-client-facing fixes