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
- Restructured documentation URLs - removed
/ledger
prefix from all routes. Documentation now serves directly from root path/
instead of/ledger/*
. - Removed
/solutions
documentation route and all related pages. - Removed mentions of deprecated Intents
config.commit = manual
. - Added comprehensive reporting bridge 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 frompolicy-based
torecord-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
torecord-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))
, andAccessRecord.Server
was not blacklisted. Now, layouts are using$nin: [FORBIDDEN_RECORDS]
withAccessRecord.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 forclaims.target.handle
andclaims.source.handle
properties when filtering intents. - Many non-client-facing fixes