This week saw heavy refactoring and code-quality investment across rippled's develop branch, with 22 PRs merged — notably a major server_definitions enhancement (closing a long-standing feature request), a large-scale transaction folder restructure, and a tooling migration to gersemi for CMake formatting. In the Python SDK (xrpl-py), a serialization bug was fixed that was causing MutableFlags and StartDate fields to be encoded with wrong field codes, corrupting transactions. The developer portal (xrpl-dev-portal) shipped a significant tutorials information architecture overhaul touching 423 files, and Clio resolved a startup regression introduced in a recent release.
The biggest practical news this week for developers is a fix in the Python SDK (xrpl-py) that corrects how certain fields are encoded when building transactions. Specifically, a field called MutableFlags — used in the upcoming Dynamic Multi-Purpose Tokens feature — was being assigned the wrong internal number, meaning transactions built with xrpl-py would have silently misidentified fields, leading to corrupted or rejected transactions. A related field name was also corrected. This is a low-visibility bug with high impact: if you're using xrpl-py to build transactions for the Lending Protocol or Dynamic MPTs on a test network, you should update your library immediately.
On the rippled core software side (rippled is the reference implementation that validators run), this was a heavy week of structural cleanup rather than new features. The most significant functional change is that the server_definitions API endpoint — which client libraries use to understand what transaction types and fields the network supports — will now also return transaction format rules, ledger entry formats, and flag values. This has been a requested feature for years, and once it ships in a release, client libraries will be able to auto-discover the full structure of supported transactions without relying on separately maintained definition files. A related fix means that the gateway_balances RPC call now correctly ignores Multi-Purpose Token entries, since that endpoint only applies to the older IOU token system. Additionally, the Clio API server (the software many node operators use to serve read queries) had a startup bug fixed: a recent update accidentally broke Clio's ability to start fresh without an existing cache file on disk.
Finally, the XRPL developer portal saw its tutorials section substantially restructured, and a concern was flagged in a new issue: XRP Ledger nodes that are running old software and blocked from new amendments may crash in certain edge cases when the network advances. This affects a small number of operators in specific configurations; a fix is being developed. Follow @XRPLF and @RippleXDev on X for ongoing updates, and track the issue at github.com/XRPLF/rippled/issues/6492.
server_definitions now includes transaction and ledger entry formats (rippled#6321, +1,169/−503 across 29 files, merged to develop) — This closes rippled#5151, a feature request open since 2023. The server_definitions RPC endpoint will now return transaction formats, ledger entry formats, and flags alongside the existing field type information. This allows client libraries to automatically detect supported transaction types and their valid fields without maintaining separate out-of-band definitions. Tied to XLS-97 (Formats, Fields and Flags). This change is in develop and not yet released.
API change: gateway_balances now correctly skips MPT entries (rippled#6143, +44/−1 across 2 files, merged to develop, labeled API Change) — The gateway_balances RPC is IOU-only by design; previously it would encounter MPT-type token entries and behave incorrectly. This fix skips MPT entries. Callers who previously relied on any MPT-related output from gateway_balances will see a behavior change. Approved by a core team reviewer.
Defensive length check for WASM-produced sfData (rippled#6449, +5/−0 in 1 file, merged to develop) — Adds a bounds check in EscrowFinish::doApply() to prevent WASM-produced data exceeding the protocol's maximum allowed length from being written into an Escrow ledger entry. Labeled as a bug fix.
SAV/Lending transactions marked NotDelegable (open, approved — see In Progress) — Not yet merged, but worth noting: rippled#6489 is approved and marks new SingleAssetVault (XLS-65) and Lending Protocol (XLS-66) transactions as non-delegable under the Permission Delegation (XLS-75) amendment. Any new transaction type defaults to NotDelegable until delegation support is explicitly tested and confirmed.
Shared r value for ConfidentialMPTSend equality proofs (rippled#6496, +50/−52 across 5 files, merged to develop) — Adopts a shared r value in the equality proof for ConfidentialMPTSend, making the cryptographic proof more compact. Part of the ongoing XLS-96 Confidential MPT implementation.
Replay tests for Confidential MPT (rippled#6451, +306/−0 in 1 file, merged to develop) — Adds 306 lines of replay tests for the Confidential MPT feature.
Transaction folder restructure (rippled#6483, +222/−222 across 165 files, merged to develop) — Renames all tx/transactors subdirectories to lowercase/snake_case (AMM → amm, NFT → nft, PermissionedDomain → permissioned_domain, etc.) and merges the AMM and Offer directories. Pure refactor, no behavioral changes. Approved by a core team reviewer.
WASM module modularization (rippled#6441, +22/−36 across 20 files, merged to develop) — Separates the WASM module into individual modular components, reducing overall code size and improving maintainability.
Assorted Smart Escrow fixes (rippled#6376, +116/−60 across 8 files, merged to develop) — Improves comments, better SField error handling, removes the possibility of negative gas limits, and cleans up memory bounds error handling in the Smart Escrow / WASM execution paths.
PermissionedDomainDelete keylet refactor (rippled#6063, +2/−2 in 1 file, merged to develop) — Switches to explicitly use keylet::permissionedDomain in PermissionedDomainDelete processing. Trivial, no behavioral change.
Vault invariants: rounding tolerance (rippled#6217, +506/−74 across 8 files, merged to develop) — Relaxes Vault Deposit, Withdraw, and Clawback invariant checks to allow minimal floating-point discrepancy for IOUs (tolerance of 1×10⁻¹³). MPT/XRP invariants retain zero tolerance. This was merged despite having outstanding change requests from a reviewer, with the reviewer having separately created a follow-up PR to address the remaining concerns.
Migrate CMake formatting from cmake-format to gersemi (rippled#6486, +1,265/−1,076 across 28 files; clio#2980, +1,076/−989 across 34 files, both merged) — Replaces the older cmake-format tool with gersemi across both rippled and Clio for consistent CMake file formatting. Custom definitions added in companion PRs (rippled#6491, clio#2983).
Git info compiled into only one translation unit (rippled#6464, +131/−59 across 13 files, merged to develop) — Previously, Git commit information was injected at compile time into many translation units, causing large incremental rebuilds whenever the Git state changed (e.g., new commits). This change isolates it to a single file, speeding up incremental builds. Approved by 2 core team reviewers.
clang-tidy checks enabled (multiple PRs, merged to develop) — A series of new clang-tidy bugprone-* checks were enabled this week: rippled#6419 (bugprone-empty-catch, approved by 2), rippled#6457 (bugprone-move-forwarding-reference), rippled#6459 (bugprone-return-const-ref-from-parameter), rippled#6466 (bugprone-sizeof-expression), and rippled#6463 (fix clang-tidy errors). Pre-commit hooks were also updated (rippled#6460).
Docs CI fixes (rippled#6474, rippled#6482) — Stops committing generated docs to the repo to prevent bloat, and fixes docs deployment for pull requests. Both approved.
Fix: Clio now starts without a cache file (clio#2976, +435/−201 across 20 files, merged) — A regression introduced in a previous release (clio#2830) prevented Clio from starting when no cache file was present. This fix restores the expected startup behavior. Approved by a core team reviewer after initial change requests.
Code style unification (clio#2977, clio#2979) — Consistent style applied for !optional.has_value() patterns across 27 and 6 files respectively.
Internal refactor: sharedPtrBackend moved (clio#2974, +83/−82 across 40 files, merged) — Reorganizes internal backend pointer type for cleaner module boundaries.
Fix: Incorrect SField definitions for Lending and DynamicMPT (xrpl-py#918, +33/−16 across 2 files, merged) — Corrects two serialization errors in xrpl-py's definitions.json: sfMutableFlags had the wrong field code (nth=54 instead of nth=53), causing it to serialize using the code rippled assigns to sfStartDate, which would silently corrupt transactions on the write path. Also renames PreviousPaymentDate to PreviousPaymentDueDate to match the current spec. Developers using xrpl-py to construct DynamicMPT or Lending Protocol transactions should update immediately.
Tutorials information architecture overhaul (xrpl-dev-portal#3245, +5,921/−18,560 across 423 files, merged) — A major restructuring of the tutorials section on the developer portal, closing the tab-selection issue xrpl-dev-portal#3513. Approved by a core team maintainer.
Devnet ledger entry commands updated (xrpl-dev-portal#3533, +21/−17 across 2 files, merged) — Adds new devnet entries for Loan, LoanBroker, PermissionedDomain, and Vault ledger objects; removes the not-enabled tag from PermissionedDomain.
LLMs.txt file cleaned up (xrpl-dev-portal#3536, +75/−0 in 1 file, merged) — Restructures the llms.txt file that helps AI tools index portal content, reducing it from ~384k characters to ~116k characters for better fit within LLM context windows.
Confidential MPT spec updates — Three spec updates merged: audit no. 14 updates credential usage to Send operations (XRPL-Standards#491), audit no. 13 handles merging inbox with zero balance (XRPL-Standards#487), and invariant documentation added (XRPL-Standards#486). These are ongoing refinements to the XLS-96 Confidential MPT spec.
rippled — Remove ripplerpc RPC parameter (rippled#6498, +58/−324 across 17 files) — Removes the legacy ripplerpc JSON field from all RPC requests and responses as part of the XLS-95 rename of rippled to xrpld. The parameter was introduced 4 years ago and the newer behavior has been default since rippled 3.0. This is an API change for any client that still sends or reads the ripplerpc field. Under copilot review, no human approvals yet.
rippled — Split combined transactor files (rippled#6495, +2,568/−2,460 across 33 files) — Continues the transaction folder restructure by splitting files that contained multiple transactor classes (DID, Escrow, CrossChain, Payment, etc.) into one class per file. Large refactor, no behavioral changes. No reviews yet; follow-up to the merged rippled#6483.
rippled — SAV/Lending as NotDelegable (rippled#6489, +67/−148 across 3 files) — Approved by a core team reviewer; awaiting merge. Marks SingleAssetVault (XLS-65) and Lending Protocol (XLS-66) transactions as non-delegable under Permission Delegation (XLS-75).
rippled — getFeePayer refactor and mPriorBalance rename (rippled#6478, +85/−84 across 30 files) — Introduces a getFeePayer helper on STTx, removes mSourceBalance in favor of direct SLE lookups, and renames mPriorBalance to preFeeBalance. Simplifies Permission Delegation transactor code. Under copilot review.
rippled — Consolidate delegate permission checks into base Transactor (rippled#6480, +91/−83 across 11 files) — Extracts common delegate permission lookup boilerplate from Payment, SetAccount, SetTrust, and MPTokenIssuanceSet into a single Transactor::checkPermission template. No reviews yet.
rippled — Invariant architecture proposal (rippled#6477, +885/−0 in 1 file) — A work-in-progress design document proposing a new invariant architecture. Early/exploratory stage; no reviews yet.
rippled — WASM import/export section tests (rippled#6497, +5,258/−8,390 across 4 files) — Large test PR that cycles through every byte of WASM import/export sections to validate module loading. No reviews yet.
rippled — Distributed tracing phases 7 & 8 (rippled#6493, rippled#6494) — Draft PRs documenting phases 7 (migrating StatsD metrics to native OpenTelemetry) and 8 (log-trace correlation via Grafana Loki) of an observability overhaul. Both are labeled DraftRunCI and are plan documents rather than implementation PRs.
rippled — Multiple clang-tidy checks nearing merge — rippled#6470 (bugprone-optional-value-conversion, approved by a core team reviewer), rippled#6467 (bugprone-suspicious-stringview-data-usage, approved), rippled#6473 (bugprone-too-small-loop-variable, labeled Ready to merge), and rippled#6476 (bugprone-use-after-move, awaiting a specific reviewer). Several others are open without approvals.
clio — VaultList for Lending Protocol (clio#2972, +1,143/−0 across 7 files) — Implements the vault_list RPC method for the Lending Protocol in Clio. Under active review (12 review comments recorded); not yet approved.
clio — Remove copyright headers from all source files (clio#2975, +1/−15,078 across 795 files) — Proposes removing per-file copyright blocks (following a similar change in rippled) to reduce noise in AI code review contexts. Has outstanding change requests: a reviewer recommends adding // SPDX-License-Identifier: ISC as a machine-readable alternative rather than removing headers entirely.
xrpl-py — Confidential MPT support (xrpl-py#919, +10,763/−649 across 46 files) — Draft WIP PR adding full XLS-96 Confidential MPT support to the Python SDK. Very early stage; review is skipped on drafts per configuration.
xrpl-dev-portal — MPT DEX Integration docs (xrpl-dev-portal#3537, +547/−108 across 30 files) — Marked DO NOT MERGE until the release branch is known. Updates concept and reference docs for XLS-82 (MPT-DEX). Preview available.
xrpl-dev-portal — Account deletion tutorial (xrpl-dev-portal#3529, +786/−15 across 13 files) — Adds a new account deletion tutorial with JavaScript and Python samples, updating deletion requirements to cover NFT issuer restrictions and new deletion blocker types. Closes xrpl-dev-portal#3525.
xrpl.js — Multiple utility enhancements — An external contributor opened four PRs this week: enhanced parseTransactionFlags with string overload (xrpl.js#3224), currency name↔code conversion utilities (xrpl.js#3223), improved validation error messages (xrpl.js#3222), and an algorithm property on the Wallet class (xrpl.js#3220). All four close long-standing issues. Under automated review; no human approvals yet.
xrpl.js — Replace deprecated hex conversion functions (xrpl.js#3221, +38/−34 across 12 files) — Replaces internal usage of deprecated convertStringToHex/convertHexToString with stringToHex/hexToString from @xrplf/isomorphic, also re-exporting them from the top-level xrpl package for convenience. Closes xrpl.js#2698.
ripplerpc parameter (XLS-95): This is an API-breaking change for any client still sending or reading the ripplerpc field in JSON-RPC requests/responses. It's in active review and could land soon. Developers using raw JSON-RPC should audit their code for this field.std::runtime_error when forced to deserialize ledger entries containing fields introduced by newer amendments. The issue was originally discovered in Xahau; a fix is in progress there and may be ported. Operators running amendment-blocked nodes should be aware.Bug filed: Amendment-blocked nodes may crash during LCL JUMP (rippled#6492) — An external contributor filed this issue based on a reproduction in Xahau. The report notes rippled has the same code paths but the crash has not been tested on rippled. A core team member confirmed awareness and noted a WIP fix exists in Xahau that may be portable. Labeled Bug and Triaged.
Feature request: LoanPay should include delivered_amount (rippled#6500) — A community member filed a feature request noting that LoanPay's Amount field may differ from the actual applied amount (similar to the historical Payment ambiguity), and requesting a delivered_amount synthetic field analogous to what Payment provides. A core team reviewer raised a nuance: if broker fees are involved, there are two simultaneous transfers, complicating which amount to report. Discussion ongoing.
Why are payment path limits so low? (rippled#6499) — A community member raised a question about the hardcoded path limits (MaxPathSize = 6, MaxPathLength = 8), noting these may be insufficient when payments route through multiple AMM pools or DEX offers. A discrepancy with a separate limit of 4 in PathRequest.h was also flagged.
DeliverMax in server_definitions closed — Issues rippled#5506 and rippled#5151 were closed following the merge of rippled#6321. The DeliverMax question was resolved with the explanation that it is an alias for Amount, not a serializable field, and therefore cannot be included in server_definitions. The broader formats/flags request from issue #5151 is now addressed by #6321.
Blackholed accounts and Token Escrow (XRPL-Standards#488) — A community member asked whether blackholed accounts (accounts with no keys) will ever be able to use Token Escrow. Community responses note this would require a separate amendment and suggest making token escrow opt-in by default to preserve backwards compatibility.
xrpl.js utility burst from external contributor — A single external contributor opened 5 PRs against xrpl.js this week (#3220, #3221, #3222, #3223, #3224), all addressing long-standing open issues. None are yet approved by maintainers; maintainer review will determine whether these land.
Compared to last week (Feb 23 – Mar 1):
| Metric | This Week | Last Week | Change |
| Repos with activity | 6 | 7 | ↓1 |
| rippled PRs merged | 22 | 16 | ↑6 |
| rippled PRs opened | 15 | 0 | ↑15 |
| rippled commits | 17 | 10 | ↑7 |
| xrpl-dev-portal PRs merged | 4 | 10 | ↓6 |
| xrpl-dev-portal PRs opened | 6 | 4 | ↑2 |
| xrpl-dev-portal commits | 10 | 63 | ↓53 |
| xrpl.js PRs merged | 2 | 1 | ↑1 |
| xrpl.js PRs opened | 5 | 3 | ↑2 |
| xrpl.js commits | 2 | 1 | ↑1 |
| xrpl-py PRs merged | 1 | 3 | ↓2 |
| xrpl-py PRs opened | 1 | 0 | ↑1 |
| xrpl-py commits | 1 | 3 | ↓2 |
| XRPL-Standards PRs merged | 4 | 4 | flat |
| XRPL-Standards PRs opened | 2 | 5 | ↓3 |
| XRPL-Standards commits | 4 | 4 | flat |
| clio PRs merged | 11 | 6 | ↑5 |
| clio PRs opened | 2 | 0 | ↑2 |
| clio commits | 11 | 6 | ↑5 |
| Releases | 0 | 1 | ↓1 |
| New issues filed (rippled) | 2 | — | — |
Notable carryover: rippled#6321 (server_definitions formats/flags) was listed as "In Progress" last week and merged this week, closing two issues open since 2023. The portal tutorials IA overhaul (xrpl-dev-portal#3245) was also in flight last week and merged this week.