A productive week headlined by rippled's version bump to 3.3.0-rc1 (merged to develop) alongside 29 total PRs merged — including a Batch transaction ID refactor, strengthened Clawback invariant checks for MPT balances, a fix for a silent data durability gap in online delete rotation, and a massive Doxygen style unification across 653 files. Across SDKs, xrpl.js merged BatchV1_1 (XLS-56) signing and Dynamic MPT (XLS-94) support, xrpl-py merged Batch V1_1 signing, and xrpl4j merged Dynamic MPT test coverage — all pending release. The developer portal merged 6 PRs including API call deduplication, community sample apps, and pagination documentation. XRPL-Standards merged 5 PRs including Smart Escrow and XLS-94 spec updates.
This week's core development was focused on getting the XRPL server software (rippled) ready for a new release candidate — version 3.3.0-rc1. While this isn't a production release, it's a milestone that signals the code is being stabilized for testing. Alongside the version bump, developers fixed a data integrity issue in how the server handles database cleanup — previously, certain pieces of ledger data could silently disappear from disk during routine maintenance if they happened to be stored on a database partition that was being rotated out. The fix ensures those data nodes are copied forward before the old partition is discarded, which is particularly important for validators and node operators who rely on continuous data availability.
On the SDK front, all three major client libraries — JavaScript, Python, and Java — received updates related to Batch transactions (XLS-56). Batch allows multiple transactions to be bundled and submitted together, and the V1_1 update changes how signatures work to prevent signature replay attacks. The JavaScript SDK also merged support for Dynamic Multi-Purpose Tokens (XLS-94), which allow token issuers to modify certain properties after creation. None of these SDK changes are available to application developers yet — they've merged into each library's main branch but haven't been published to package managers (npm, PyPI, Maven Central). Notably, Confidential MPT support — which would allow token balances and transfers to be verified without revealing the actual amounts — had new PRs opened simultaneously across all three SDKs, suggesting a coordinated push toward that feature.
The developer documentation site (xrpl.org) received quality-of-life improvements, including a fix that reduced the number of API calls the Known Amendments page makes from ~99 per page load to just one, making the page load much faster. The specification repository was also active, with updates to the Smart Escrow, Dynamic MPT, and vault lending specs.
For the latest updates, follow @XRPLF and @RippleXDev on X, or browse the XRPLF repos directly.
Note: All rippled changes below were merged to the develop branch and are not yet live on the network. A tagged release is required for any change to reach production.
Note: SDK PRs below were merged to each library's main branch. They become available to application developers only after a tagged release is published (npm for xrpl.js, Maven Central for xrpl4j, PyPI for xrpl-py). If no corresponding SDK release appears in the data, treat the feature as merged-but-pending-release and phrase availability accordingly.
3.3.0-rc1 in anticipation of the final release. This is a release candidate on the develop branch — not a production release.account_tx RPC (labeled API Change): rippled#6126 (+646/−4 across 8 files) adds a new delegate filter parameter to the account_tx RPC, enabling callers to filter transactions by delegator or delegatee role. Approved by two core team reviewers.CheckID values in CheckCancel and CheckCash at preflight with temMALFORMED, gated behind the fixCleanup3_3_0 amendment. Previously these passed preflight and only failed later during ledger lookup.getKeys() outside the lock in TaggedCache, reducing contention on large caches. Approved by 3 reviewers.kMaxRep: rippled#7389 (+945/−202 across 8 files) improves arithmetic rounding accuracy for values near the maximum representable mantissa (2^63-1), treating the gap between kMaxRep and the next representable value as fractional rather than integer.ValidClawback invariant to validate before/after IOU and MPT holder balance changes, and renames ValidMPTPayment to ValidMPTBalanceChanges. Adds regression coverage for invalid clawback deltas.InvariantChecker::visitEntry and adds an explicit assertion.base_uint tests that were held back from 3.1.3, now safe to make public with fixCleanup_313 enabled.Loan SLE directly instead of long parameter lists, with no behavior change. Reviewed and approved by core team.transactions.macro.jss.h include moved out of Indexes.h: rippled#7799 (+20/−16) moves the instantiation of kDirectAccountKeylets from the header to the .cpp file, improving compile time.nodestore timing test to a proper microbenchmark suite with statistical machinery, replacing the hand-rolled Timing_test.rust-toolchain.toml specifying the Rust toolchain and components for CI, while rippled#7571 (+209/−15) adds Rust to the Nix Docker image used by CI.readability clang-tidy checks — a net reduction of 785 lines.Ready to merge or Full CI build, saving compute on work-in-progress PRs. A follow-up fix (rippled#7812, +13/−24) prevents label events from canceling unrelated builds.IgnoreConflicts label is applied.{amendment-disclaimer} component now fires a single API request per page load instead of one per invocation, cutting ~99 redundant calls on the Known Amendments page..md export, and a Python script for fetching amendment data snapshots.validated, closing a long-standing issue (#1755).tmfMPTClear mutable flags from the Dynamic MPT spec. Issuance flags can now only be enabled once if set as mutable during issuance, then remain immutable.Account, Sequence, and BatchSigner account, preventing signature replay. Closes #3370. Merged but pending release — JavaScript developers will get this in the next npm release.encode_for_signing_batch and sign_multiaccount_batch. Merged but pending release.fixCleanup3_2_0) test coverage: xrpl4j#806 (+323/−0) adds integration tests verifying that negative MPT amounts return temBAD_AMOUNT under the fixCleanup3_2_0 amendment. Merged but pending release.rippled — Performance fix for extreme exponents (rippled#7825, +110/−55) — Addresses a report that a JSON string with an out-of-range exponent (e.g. 1e2000000000) could tie up a node for 1–2 seconds. Short-circuits the digit-dropping loop when the smaller value has no remaining significant digits. Approved by AI reviewer. This is a performance-sensitive fix worth tracking.
rippled — Vault rounding fix (rippled#7824, +289/−14) — Under fixCleanup3_3_0, rounds vault share↔asset conversions in the pool's favor to prevent shareholder dilution. Community member submission.
rippled — Split LoanSet and LoanAccept (rippled#7820, +1,728/−239 across 25 files) — Splits the LoanSet transaction into separate LoanSet and LoanAccept transactions. Has one AI reviewer approval but earlier reviews flagged issues. Active development.
rippled — MPT transfer fee escrow rounding fix (rippled#7821, +392/−35) — Prevents bypassing MPT transfer fees via small-amount escrow rounding.
rippled — Pathfinding 2.0 (rippled#7392, +5,932/−2,204 across 39 files) — Replaces BFS-based pathfinding with a Dijkstra/Yen's K-Shortest algorithm on a persistent, incrementally-updated asset-exchange graph. Large community contribution; has conflicts.
rippled — Protocol version 2.3 (LedgerNodeDepth) (rippled#6353, +786/−176 across 21 files) — Replaces 32-byte node IDs with 2-byte depth values in TMLedgerNode messages. Long-running PR with 153 reviews.
rippled — OpenTelemetry Phase 1a (rippled#6436, +3,771/−3 across 11 files) — Architecture documentation for distributed tracing. Has 4 approvals; has conflicts.
Clio — MPToken UInt64 serialization fix (clio#3139, +233/−41) — Changes MPToken amount fields from JSON numbers to base-10 strings to avoid IEEE-754 precision loss for values above 2^53. Changes requested by core team (use std::pow).
Clio — MPT issuance history migration backfill (clio#3128, +1,580/−109) — Adds a Cassandra migration to backfill historical MPT issuance transactions.
xrpl.js — Confidential MPT (XLS-96) (xrpl.js#3364, +4,471/−2 across 62 files) — Wire-format definitions, transaction models, and field definitions for Confidential MPT.
xrpl4j — Batch V1.1 (XLS-56) (xrpl4j#808, +1,314/−289) — Draft; blocked until xrpld 3.3.0 is released for integration testing.
xrpl4j — Confidential MPT (XLS-96) (xrpl4j#810, +11,670/−1,455 across 143 files) — Includes cryptographic proof generation/verification via a native library. Approved.
xrpl-dev-portal — Known Amendments updates (xrpl-dev-portal#3785, +48/−1) — Adds BatchV1_1, LendingProtocolV1_1, and fixCleanup3_3_0 to the "Amendments in Development" table.
xrpl-dev-portal — TypeScript tutorial (xrpl-dev-portal#3749, +709/−0) — Approved by a core reviewer; needs conflict resolution. Closes long-standing request #1208.
xrpl-dev-portal — Clio 2.7.1 release blog post (xrpl-dev-portal#3783) — Draft; Clio release planned for July 20.
XRPL-Standards — LendingProtocolV1_1 accounting (XRPL-Standards#582, +118/−1) — Defines principal-only tracking for Vault.AssetsTotal and LoanBroker.DebtTotal under LendingProtocolV1_1.
XRPL-Standards — DynamicMPT opt-in-immutable (XRPL-Standards#583, +168/−196) — Proposes making DynamicMPT (XLS-94) opt-in-immutable.
Community member @SAY-5 submitted two null-safety PRs to rippled: asserting that PeerReservationTable is loaded before mutation (rippled#7828, closes #7509) and guarding against null SLEs in NoRippleCheck and GatewayBalances callbacks (rippled#7827, closes #7510). Both have unsigned-commit warnings that need to be resolved before merge.
Community member @muhammadsalah submitted a vault rounding fix (rippled#7824) to prevent shareholder dilution through deposit/withdraw conversions.
Community member @ChrisCarini opened a dependency fix in xrpl-py (xrpl-py#1018) to remove the upper bound on httpx and move types-Deprecated to dev dependencies, unblocking consumers that need newer httpx versions.
New issue — Silent flag encoding in xrpl-py (xrpl-py#1016): Community member @RaymondSeven reported that unrecognized flag names in dict-style transaction construction silently encode as Flags: 0 instead of raising an error — a fail-open condition that could result in transactions being submitted without intended flags.
New issue — xrpld 3.2.0 on Windows (rippled#7815): A user reported that xrpld 3.2.0 never advances past STATE->connected on Windows 10/WSL2. A core team member confirmed that Windows is unsupported.
NFToken Collection Offers discussion (XRPL-Standards#584): A new XLS proposal for "Collection Offers" — allowing buy offers against an entire NFT collection (Issuer+Taxon) rather than individual tokens.
Contributor @mathbunnyru continued a prolific modernization campaign with 8 rippled PRs merged this week — Doxygen unification, pre-commit hooks, clang-tidy checks, and CI optimization.
Compared to last week (July 6–12, 2026):
| Metric | This Week | Last Week | Change |
| Repos with activity | 8 | 8 | flat |
| rippled PRs merged | 29 | 50 | ↓21 |
| rippled PRs opened | 26 | 27 | ↓1 |
| rippled new issues | 1 | 1 | flat |
| rippled releases | 0 | 0 | flat |
| rippled commits | 29 | 13 | ↑16 |
| xrpl.js PRs merged | 2 | 1 | ↑1 |
| xrpl.js PRs opened | 3 | 6 | ↓3 |
| xrpl.js closed issues | 1 | 0 | ↑1 |
| xrpl-py PRs merged | 1 | 0 | ↑1 |
| xrpl-py PRs opened | 4 | 5 | ↓1 |
| xrpl-py new issues | 1 | 1 | flat |
| xrpl4j PRs merged | 1 | 1 | flat |
| xrpl4j PRs opened | 7 | 4 | ↑3 |
| xrpl-dev-portal PRs merged | 6 | 9 | ↓3 |
| xrpl-dev-portal PRs opened | 12 | 29 | ↓17 |
| xrpl-dev-portal commits | 7 | 13 | ↓6 |
| Clio PRs merged | 1 | 9 | ↓8 |
| Clio PRs opened | 2 | 4 | ↓2 |
| Clio releases | 1 | 2 | ↓1 |
| XRPL-Standards PRs merged | 5 | 1 | ↑4 |
| XRPL-Standards PRs opened | 9 | 5 | ↑4 |
| opensource.ripple.com PRs merged | 1 | 0 | ↑1 |
| opensource.ripple.com PRs opened | 1 | 1 | flat |
| Releases (total) | 1 | 2 | ↓1 |
rippled's merge count dropped from 50 to 29 as the intense Sponsor (XLS-68) follow-up churn from last week subsided — this week's focus shifted toward the 3.3.0-rc1 cut, with bug fixes, test infrastructure, and code quality improvements dominating. The commit count rebounded (13→29). XRPL-Standards saw a significant increase (1→5 merges), reflecting spec maturation for Smart Escrow, Dynamic MPT, and vault features. The xrpl-dev-portal opened-PR count returned to normal (29→12) after last week's Dependabot spike. All three client SDKs had merges this week (xrpl.js: 2, xrpl-py: 1, xrpl4j: 1), driven by the coordinated Batch V1_1 and Dynamic MPT SDK rollout. Clio activity was quiet (9→1 merge) with the team preparing for the 2.7.1 release next week. Items tracked as "In Progress" last week that merged this week include the Doxygen unification (rippled#7776), the Batch transaction ID refactor (rippled#7736), and the xrpl.js BatchV1_1 support (xrpl.js#3371).