A prolific week in rippled with 37 PRs merged to develop — headlined by a new closed-ended vault feature (XLS-65), key rotation for MPTokenIssuanceSet, a comprehensive MPT/DEX fix bundle, a full boost::filesystem → std::filesystem migration, and the removal of protocol version 2.1. In xrpl.js, ripple-binary-codec@2.9.0 shipped with BatchV1_1 and Dynamic MPT (XLS-94) support. xrpl4j merged Sponsored Fees and Reserves (XLS-68) support and xrpl-py merged Dynamic MPT (XLS-94) support — both pending release. Clio cut release candidate 2.8.0-rc5 and updated to libxrpl 3.3.0. The developer portal updated the MPT tutorial for mutable/immutable properties, and opensource.ripple.com removed docs for amendments now shipped in rippled 3.3.0.
This was one of the busiest weeks for the XRP Ledger's core server software, with 37 changes merged to rippled's development branch. The headline feature is a new type of vault called a "closed-ended vault." Think of existing vaults as open-ended savings accounts where you can deposit and withdraw freely. The new closed-ended vault works more like a term deposit or a bond fund — it has three phases: a subscription period where people can invest, an investment period where capital is locked and earning returns, and a redemption period where investors can withdraw. This gives vault operators a way to offer structured financial products on-chain with predictable timelines.
Another significant batch of changes addressed issues found during security audits of the Multi-Purpose Token (MPT) system and its integration with the decentralized exchange. These fixes prevent edge cases where rounding errors could let someone claw back zero tokens while still burning another user's liquidity pool shares, or where transfer fees could overflow during offer crossing. The team also did a major spring-cleaning of the codebase, replacing dozens of legacy Boost C++ library calls with modern standard library equivalents. This doesn't change what the software does, but makes it easier to maintain, faster to compile, and better at catching errors during development rather than at runtime. Protocol version 2.1, which has been unused for years, was formally retired.
On the SDK side, the JavaScript binary codec released version 2.9.0, which developers can install now from npm — it adds support for the Batch and Dynamic MPT features. The Java library merged support for the Sponsored Fees and Reserves feature (which lets one account pay fees on behalf of another), and the Python library merged Dynamic MPT support — both will become available once their next releases are published to Maven Central and PyPI respectively. The Clio API server released its fifth release candidate for version 2.8.0, moving closer to a production release with database retry improvements and libxrpl 3.3.0 compatibility. Meanwhile, community members contributed valuable bug reports from production validators, identifying issues with fee adjustment logic and fee change notification scheduling.
For the latest updates, follow @XRPLF and @RippleXDev on X, and explore the repos directly at github.com/XRPLF.
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.
MPTokenIssuanceSet.AMMClawback with OverrideFreeze to bypass individual/deep freeze on AMM trust lines, fixing a freeze/clawback deadlock for AMM issuers.fixCleanup3_4_0.ValidatorListPropagation/v1 TMValidatorList message path.account_lines peer field type: rippled#7728 (+53/−0) adds missing isString() check on the peer parameter, returning rpcINVALID_PARAMS instead of a crash. Closes rippled#7507. Community contributor @BraedonKlock.gateway_balances account/ident type: rippled#7655 (+47/−0) adds type validation, returning rpcINVALID_PARAMS instead of rpcINTERNAL. Closes rippled#6758. Community contributor @luisfernandomendozav.associateAsset calls from loan delete paths that ran after view.erase.boost::filesystem → std::filesystem: rippled#7012 (+383/−370, 38 files) migrates ~137 usages across ~30 files, reducing the Boost dependency surface. Closes rippled#7011.boost::format → std::format: rippled#7996 (+286/−182, 21 files) converts all 37 boost::format call sites to std::format, gaining compile-time format string validation.xrpl::toLower and reroutes 15 scattered Boost call sites.boost::lexical_cast: rippled#7991 (+18/−39, 6 files) uses std::to_string and existing helpers.operator!= overloads: rippled#7994 (+16/−362, 39 files) deletes 40 redundant overloads and collapses SHAMapNodeID's relational operators into operator<=>.TODO/FIXME comments now unblocked by the C++23 toolchain.Transactor::operator() to early-return: rippled#8003 (+72/−64) renames applied → canApply and restructures the function for clarity.JLOG with UNREACHABLE in provably unreachable code paths. Closes rippled#7648.std::string::starts_with/ends_with: rippled#7992 (+26/−33) replaces Boost equivalents in test code.sample_chart.doc and a 385 KB NodeStore case study PDF last modified in 2018.Buffer.cpp's single 230-line test into per-behavior cases, taking the suite from 867 to 887 tests.develop.rippleci/xrpld:develop. AI review config: xrpl4j#815 and xrpl4j#816 add repo-specific review guidelines and CodeRabbit configuration.rippled — Compile-time RPC dispatch tables (rippled#8006, +876/−604, 20 files) — Builds both RPC dispatch tables as constexpr arrays with static_assert invariants, replacing runtime initialization. Approved by 3 reviewers. Likely close to merging.
rippled — Performance fix for extreme exponents (rippled#7825, +234/−58) — Short-circuits the digit-dropping loop when operands have drastically different exponents, addressing a scenario where crafted JSON exponents (e.g., 1e2000000000) could stall a node for 1–2 seconds. Approved by 3 reviewers, minor assert message fixes requested. Has been "In Progress" for four consecutive weeks.
rippled — Eliminate cross-scale arithmetic in Loan paths (rippled#8002, +330/−29) — Base of the vault dust-custody stack. Routes vault balance mutations through asset-typed STAmount under fixCleanup3_4_0. Approved by 3 reviewers (including @gregtatcam).
rippled — Enforce MPT balance invariants under fixCleanup3_4_0 (rippled#7889, +290/−51) — Makes ValidMPTBalanceChanges and ValidMPTTransfer invariant checks active protections instead of advisory-only. Approved.
rippled — Optimize MPT freeze checks (rippled#7411, +215/−26) — Adds SLE-based isFrozen() overloads to avoid redundant state reads. Approved and labeled "Ready to merge."
rippled — Enforce MPT CanTransfer on AMM LPTokens (rippled#7418, +202/−0) — When a pool asset is an MPT without lsfMPTCanTransfer, LPToken transfers are blocked. Approved and labeled "Ready to merge."
rippled — Remove pinned credentials on pseudo-accounts (rippled#7877, +404/−1, 12 files) — Amendment-gated cleanup of credentials stuck on Vault/LoanBroker/AMM pseudo-accounts. Approved by 3 reviewers.
rippled — Extend locked-MPToken unauthorize check (rippled#8004, +69/−16) — Extends the guard to also fire under fixCleanup3_4_0. Approved, labeled "Ready to merge."
rippled — Pause online delete during ledger gaps (rippled#5531, +426/−51) — Long-running PR. Approved by 3 reviewers. Prevents persistent ledger gaps when online delete runs during sync issues.
Clio — RPC spec migration — A multi-PR series is in flight: clio#3169 (handler registry), clio#3171 (introduce xrpl-rpc-spec dependency), clio#3173 (use shared error types), clio#3174 (shared ledger/tx type tables), clio#3175 (follow-up cleanup). This progressively moves Clio's RPC layer to a shared spec library.
xrpl-dev-portal — Sponsored Fees tutorials (xrpl-dev-portal#3835, +2661/−4, 20 files) — JS and Python tutorials for co-signing, pre-funded pools, pool management, and reserve transfer. Waiting on SDK version tags.
xrpl-dev-portal — Confidential Transfers tutorials (xrpl-dev-portal#3823, +3281/−0, 19 files) — JS and Python tutorials. Waiting on SDK version tags.
xrpl-dev-portal — Ruby SDK tutorial (xrpl-dev-portal#3837, +328/−49) — Adds first-class Ruby examples to the developer portal, contributed by community member @AlexanderBuzz.
constexpr arrays — a meaningful architecture improvement that prevents handler table drift.Community contributor @rippleitinnz filed two issues and companion PRs this week: rippled#8038 reporting that LoadManager::run() fee adjustment logic executes only on shutdown (with fix PR rippled#8039), and rippled#8008 reporting a data race in reportFeeChange() causing excessive clientFeeChange jobs (with fix PR rippled#8009 backed by 48 hours of monitoring data). Both issues were observed on production validators.
Community contributor @Krypto-Whitehat filed XRPL-Standards#600 noting that XLS-0085 (Token Escrow, status Final) says tecFROZEN for locked MPTs, but the implementation returns tecLOCKED, and opened a documentation-only fix PR XRPL-Standards#601.
Community contributor @JasonColapietro opened xrpl.js#3430 fixing VaultCreate autofill to use the base fee instead of the owner reserve.
xrpl.js issue #3435: Community member @kpitapeersyst reported that OracleSet validation rejects valid Scale values 11–20 — the client-side SCALE_MAX is set to 10, but the network accepts values up to 20 per XLS-47 and rippled.
Community contributor @shortthefomo filed rippled#8021 requesting a CONFIG-CHANGELOG.md to complement the existing API-CHANGELOG.md.
Community contributor @pete-csyn opened xrpl-dev-portal#3822 proposing to update the peer connectivity docs to recommend configuring multiple public hubs instead of one.
Compared to last week (August 3–9, 2026):
| Metric | This Week | Last Week | Change |
| Repos with activity | 8 | 8 | flat |
| rippled PRs merged | 37 | 20 | ↑17 |
| rippled PRs opened | 27 | 23 | ↑4 |
| rippled new issues | 7 | 1 | ↑6 |
| rippled closed issues | 4 | 5 | ↓1 |
| rippled releases | 0 | 1 | ↓1 |
| rippled commits | 35 | 22 | ↑13 |
| xrpl.js PRs merged | 3 | 1 | ↑2 |
| xrpl.js PRs opened | 7 | 11 | ↓4 |
| xrpl.js new issues | 9 | — | — |
| xrpl.js releases | 3 | 2 | ↑1 |
| xrpl-py PRs merged | 2 | 0 | ↑2 |
| xrpl-py PRs opened | 5 | 6 | ↓1 |
| xrpl-py new issues | 6 | — | — |
| xrpl4j PRs merged | 4 | 3 | ↑1 |
| xrpl4j PRs opened | 1 | 5 | ↓4 |
| xrpl-dev-portal PRs merged | 1 | 16 | ↓15 |
| xrpl-dev-portal PRs opened | 16 | 12 | ↑4 |
| xrpl-dev-portal commits | 1 | 49 | ↓48 |
| Clio PRs merged | 3 | 5 | ↓2 |
| Clio PRs opened | 8 | 4 | ↑4 |
| Clio releases | 2 | 1 | ↑1 |
| XRPL-Standards PRs merged | 2 | 4 | ↓2 |
| XRPL-Standards PRs opened | 6 | 21 | ↓15 |
| XRPL-Standards new issues | 1 | — | — |
| opensource.ripple.com PRs merged | 1 | 1 | flat |
| Total PRs merged (all repos) | 53 | 50 | ↑3 |
| Total releases | 5 | 5 | flat |
The standout shift this week is rippled's merge volume nearly doubling (20→37), driven by a concentrated push to modernize the codebase — replacing Boost with standard library equivalents, C++20/23 cleanups, and landing major feature work (closed-ended vaults, MPT/DEX audit fixes, key rotation). The dev portal swung in the opposite direction (16→1 merges), having completed the 3.3.0 documentation wave last week. SDK merges picked up across all three libraries as XLS-68 (xrpl4j) and XLS-94 (xrpl-py) support landed. Notable carryovers from last week: the closed-ended vault (rippled#7921) and the extreme-exponent performance fix (rippled#7825) — the former merged, the latter remains in progress. Clio is preparing for the 2.8.0 release with RC5 published and the RPC spec migration series underway.