A major week for SDK releases: xrpl.js shipped v5.0.0 (a breaking release changing the default signing algorithm) along with five companion package releases, and xrpl-py published v5.0.0 with the same signing-algorithm fix. In rippled, 22 PRs merged to develop — highlighted by fee vote maxes for Smart Escrow, a zero NFT Offer ID validation fix, a unified entry point for host functions, and a major CI overhaul migrating to Nix-based images. Clio updated to libxrpl 3.2.0 and published release candidate 2.7.1-rc1. On the developer portal, a batch of 3.2.0 documentation PRs opened covering the rippled-to-xrpld rename, new reserve values, gRPC TLS support, and more.
This was a landmark week for the XRP Ledger's developer tools. Both the JavaScript library (xrpl.js) and the Python library (xrpl-py) published version 5.0.0 — major releases that include a breaking change to how wallets are created from seed phrases. Previously, if you used a secp256k1-type seed (the older format starting with "s"), both libraries would silently assume you wanted an ed25519 wallet, which meant you'd end up looking at the wrong account — your funds would appear to have "disappeared." The new versions now look at the seed's prefix to automatically pick the right algorithm. Anyone building applications with these libraries should upgrade, especially if they work with secp256k1 seeds. The JavaScript release also included fixes across five companion packages: the binary codec, address codec, keypairs library, secret numbers library, and the isomorphic utilities package.
On the core server side (rippled), 22 changes merged to the development branch. A new feature adds hard caps on how high certain fee parameters can go for the Smart Escrow feature, preventing misconfiguration. A validation fix now catches invalid zero-value NFT offer IDs early, preventing a potential assertion crash. For node operators specifically, the systemd service configuration was improved — the server now gets 5 minutes to shut down gracefully instead of being force-killed, the restart policy only triggers on failures (not clean exits), and the auto-update timer delay was shortened from 24 hours to 4 hours. Behind the scenes, a large effort migrated rippled's continuous integration infrastructure to Nix-based container images, which should make builds more reproducible and maintainable. The API server Clio updated its underlying library to version 3.2.0 and published a release candidate (2.7.1-rc1). Meanwhile, a wave of 16 documentation pull requests opened on the developer portal for the upcoming rippled 3.2.0 release, covering everything from the server rename (rippled → xrpld), updated reserve values (now 1 XRP base / 0.2 XRP per object), TLS support for gRPC connections, and new configuration options.
For the latest updates, follow @XRPLF and @RippleXDev on X, or browse the xrpl.js v5.0.0 release notes and xrpl-py v5.0.0 release notes for full details on the SDK releases.
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.
ttFEE transaction validation to prevent oversized fee parameters. rippled#7346 (+128/−25)FieldLocator object, switches from pointers to references, and caps parameters and sfData field size at 1 KB. rippled#7393 (+1,048/−2,446)Ledger::read() assertion. The fix catches it earlier in preflight, returning an error before it reaches the assertion path. rippled#7391 (+28/−2)TimeoutStopSec=300), changes restart policy to failure-only, reduces auto-update randomized delay from 24h to 4h, and stops auto-enabling the update timer on Debian installs. Operators running xrpld via systemd should note the new behavior when upgrading. rippled#7374 (+5/−4)FTL: Transaction has failed one or more global invariants log noise to a local capture in 8 test environments that intentionally trigger tecINVARIANT_FAILED. rippled#7379 (+22/−9)STLedgerEntry type aliases instead of std::shared_ptr: Replaces verbose std::shared_ptr and SLE alias equivalents with existing ::pointer, ::const_pointer, ::ref, and ::const_ref aliases across 273 files. Also updates the codegen template. rippled#7282 (+719/−1,475)intr_ptr::SharedPtr by SHAMapTreeNodePtr: Shortens a verbose type name across 14 files. rippled#7396 (+115/−131)void* to HostFunction reference, puts runtime into the base HostFunction class, switches from struct to classes, and divides a params helper into WasmParamsHelper and WasmImportHelper. rippled#7383 (+852/−1,125)xrpl_tests: Consolidates gtest suites into one binary, simplifying the test build. rippled#7327 (+60/−115)This week saw a significant CI modernization effort, largely driven by contributor @mathbunnyru, migrating rippled's CI infrastructure to Nix-based container images:
contains()). rippled#7412 (+1,402/−538)This week saw a coordinated release of six packages in the xrpl.js monorepo:
Wallet.fromSeed / Wallet.fromSecret now infers the signing algorithm from the seed prefix (sEd… → ed25519, s… → secp256k1) instead of silently defaulting to ed25519 for all seeds. This fixes a commonly reported issue where secp256k1 seed users derived the wrong account. The inference fix was merged in xrpl.js#3337 (+45/−14).Hash comparison operators, Amount non-numeric validation, negative-input guards in read/peek/skip, and an Amount.toJSON() mutation bug.arrayEqual method to guard against potential side-channel timing attacks for decodeSeed.@noble/hashes from 1.8.0 to 2.0.1.Additional merged PRs: Updated definitions.json to match latest rippled develop (xrpl.js#3344), dependency bumps for axios/nx (xrpl.js#3349), fast-uri (xrpl.js#3334), tmp (xrpl.js#3348), ip-address (xrpl.js#3333), and automated release PRs for each package.
Wallet.from_seed / Wallet.from_secret now infers the algorithm from the seed prefix, matching the xrpl.js change. The inference fix was merged in xrpl-py#999 (+32/−17).XrpCurrencyAmount.times() sign logic: The times() method was using || (logical OR) to determine the result sign, causing negative × negative to produce a negative instead of a positive. Fixed by replacing with ^ (XOR). xrpl4j#796 (+2/−2). Merged — pending Maven Central release.rippled — Disable transaction invariants (rippled#7409, +32/−22) — Temporarily disables transaction invariants due to a performance regression. The logic is commented out rather than reverted because the invariant PR touches every single transaction. Approved by @gregtatcam and @ximinez. Labeled "Ready to merge" — likely to land very soon.
rippled — Fix Number comparison operator (rippled#7406, +121/−18) — Fixes operator< returning the wrong result when two Numbers have the same exponent and are both negative. Approved by 3 reviewers, labeled "Ready to merge." Rebased onto the release/3.2.x branch, indicating it may target the 3.2.x release line directly.
rippled — Performance PRs from @bthomee: A series of performance-focused PRs are in review:
- Serialize nodes without copying (rippled#7421, +7/−8) — Eliminates per-node buffer copies in getNodeFat. Labeled "QE test desired."
- Deserialize received nodes once and only in job queue (rippled#7420, +58/−37) — Defers deserialization from the I/O thread to the job queue. Labeled "QE test desired."
- Always charge peer on strand (rippled#7422, +7/−1) — Ensures peer charges execute on the strand so a Drop disposition properly severs connections. Approved.
- Use const function arguments where possible (rippled#7423, +56/−52) — Const-correctness improvements. Approved.
rippled — Enforce MPT CanTransfer on AMM LPTokens transfers (rippled#7418, +205/−3) — When an AMM pool asset is an MPT, transfers of that AMM's LPToken between holders would now only be permitted if the MPT has lsfMPTCanTransfer set. Approved.
rippled — Optimize MPT freeze checks (rippled#7411, +181/−17) — Adds SLE-based overloads for isFrozen(), isGlobalFrozen(), and isIndividualFrozen() to avoid redundant MPToken lookups when callers already have the holder MPToken SLE. Approved by two reviewers.
rippled — XLS-68 Sponsored Fees & Reserves (Sponsor) (rippled#7350, +13,883/−1,098 across 185 files) — Full implementation of SponsorshipSet/SponsorshipTransfer transactions, a Sponsorship ledger object, and sponsor support across other transactions, letting one account cover another account's fees and reserves. Large XLS-68 implementation, still in review — not merged.
rippled — Untrusted Validator Squelching (rippled#5399, +3,379/−1,080) — Limits message propagation from untrusted validators via bounded slots selected by unique message frequency. Approved, awaiting merge.
rippled — Structured logging pulled from Clio (rippled#7055, +2,772/−0) — Adds an spdlog-backed Logger with JSON and text output modes. Has outstanding change requests regarding code duplication.
rippled — Permissioned Domain & Credential checks for the Lending Protocol (rippled#6517, +1,070/−3) — Adds credential-based access control to Lending Protocol transactions. Changes requested.
rippled — Replace node ID with depth in TMLedgerNode (rippled#6353, +754/−177) — Protocol-message change that cuts per-node sync bandwidth by sending a 2-byte depth instead of a 32-byte node ID for leaf nodes. Approved.
rippled — Other open PRs in review (not merged): second batch of audit/attackathon report fixes (#7334, +1,071/−111), amendment-table test migration to GoogleTest (#7380, +983/−1,247), TaggedCache const_cast removal (#5638, approved), pause online delete on ledger-history gaps (#5531), strengthen Clawback MPT invariant checks (#7285), vault sender freeze / checkDeepFrozen for VaultWithdraw under fixCleanup3_2_0 (#7382, +283/−27), improve ValidAMM invariant (#7295), the XRPL_ASSERT_IF macro (#7378), dispatch hasInvalidAmount() on type tag (#7402), use RocksDB includes only when available (#7381), invariant documentation (#7354), extracting a checkInvariants runner (draft, #7404), and comment-readability fixes (#7405).
rippled — Pathfinding 2.0 using Dijkstra's Algorithm (rippled#7392, +4,975/−1,955) — A community contributor proposes replacing the existing BFS-based pathfinder with a graph-based engine using Dijkstra/Yen's K-Shortest algorithm. The author claims microsecond-level performance for mainnet's ~500-vertex graph. Currently has unsigned commits and conflicts.
xrpl.js — Confidential Transfers for MPTs (XLS-0096) (xrpl.js#3364, +4,444/−1 across 61 files) — Adds wire-format definitions, transaction and ledger models, and field definitions for confidential MPT balances using EC-ElGamal ciphertexts and zero-knowledge proofs. Approved by the AI reviewer.
xrpl-py — Dynamic MPT (XLS-94d) support (xrpl-py#877, +1,176/−15) — Adds Python models for Dynamic Multi-Purpose Tokens. Approved by the AI reviewer.
xrpl4j — Multiple bug fix PRs from @cybele-ripple: LockedAmount base-10 serialization (xrpl4j#803), XrpCurrencyAmount.equals/hashCode sign fix (xrpl4j#800), HopType.toJson() field fix (xrpl4j#799), Math.abs(Long.MIN_VALUE) overflow guard (xrpl4j#798), AffectedNodeDeserializer NPE fix (xrpl4j#797), XLS-75 Permission Delegation support (xrpl4j#689), and XLS-68 Sponsored Fees support (xrpl4j#720).
xrpl-dev-portal — Agentic transactions section (xrpl-dev-portal#3663, +3,510/−1 across 22 files) — New documentation section covering agentic payments on the XRPL: x402, agent wallets, and payment skills. Approved; not yet merged.
xrpl-dev-portal — 3.2.0 documentation staging (xrpl-dev-portal#3665, +514/−14) — Umbrella branch for all 3.2.0 release documentation. Numerous sub-PRs have opened this week (see "What to Watch").
Clio — MPT issuance history backend (clio#3091, +891/−0) — Adds Cassandra tables and backend primitives for MPT transaction-history filtering. First PR in a broader plan; the storage layer is being landed before ETL indexing and the RPC handler.
release/3.2.x. This fixes a correctness bug in Number::operator< for negative values. Likely to land imminently, and its targeting of the release branch suggests it may be included in a 3.2.x release.Open NFT Issuer Registry proposal: Community member @eamwhite1 proposed a new standard (discussed as "XLS-d") for a public, verifiable mapping from organization identities to their XRPL NFT-minting wallets — Discussion #558. The proposal aims to close the trust gap between knowing which wallet minted an NFT and knowing who controls that wallet.
Credential error code fix: @PeterChen13579 opened a PR on XRPL-Standards to fix a credential error code in the spec — XRPL-Standards#557. In review with 4 review rounds.
SHAMap data race bug report: Contributor @vlntb filed rippled#7395 documenting six crashes in IntrusiveRefCounts::releaseStrongRef traced to a torn write in SHAMapInnerNode::partialDestructor and a raw-pointer escape, which can cause use-after-free. Peak-count instrumentation ruled out saturation — the asserting load is reading garbage memory.
WeakIntrusive copy assignment bug: Community member @TimothyBanks filed rippled#7415 noting that the WeakIntrusive copy assignment operator is not overwriting the ptr_ member.
Custom HTTP header support for xrpl-py: Community member @joshuahamsa continued work on xrpl-py#828, which adds support for custom HTTP headers (API keys, payment claims) when connecting to XRPL nodes requiring authentication. The PR now includes an XRPLAuthenticationException for 401/402/403 responses. 14 comments reflect active community iteration.
xrpl.js deep amount comparison fix: Community member @satyakwok opened xrpl.js#3338 fixing handleDeliverMax which used reference equality (!==) to compare IOU/MPT amounts — two distinct object literals with identical fields always compared not-equal, causing spurious validation errors.
Compared to last week (May 25–31, 2026):
| Metric | This Week | Last Week | Change |
| Repos with activity | 8 | 8 | flat |
| rippled PRs merged | 22 | 27 | ↓5 |
| rippled PRs opened | 17 | 20 | ↓3 |
| rippled new issues | 2 | 9 | ↓7 |
| xrpl.js PRs merged | 13 | 0 | ↑13 |
| xrpl.js PRs opened | 9 | 4 | ↑5 |
| xrpl.js releases | 6 | 0 | ↑6 |
| xrpl-py PRs merged | 2 | 2 | flat |
| xrpl-py PRs opened | 5 | 1 | ↑4 |
| xrpl-py releases | 1 | 0 | ↑1 |
| xrpl4j PRs merged | 1 | 1 | flat |
| xrpl4j PRs opened | 7 | 8 | ↓1 |
| xrpl-dev-portal PRs merged | 2 | 12 | ↓10 |
| xrpl-dev-portal PRs opened | 16 | 7 | ↑9 |
| xrpl-dev-portal commits | 4 | 10 | ↓6 |
| XRPL-Standards PRs merged | 0 | 12 | ↓12 |
| XRPL-Standards PRs opened | 1 | 4 | ↓3 |
| Clio PRs merged | 7 | 10 | ↓3 |
| Clio releases | 2 | 1 | ↑1 |
| opensource.ripple.com PRs merged | 1 | 0 | ↑1 |
| Releases (total) | 9 | 1 | ↑8 |
This was overwhelmingly a release week — 9 total releases versus 1 last week, driven by the coordinated xrpl.js v5.0.0 family (6 packages) and xrpl-py v5.0.0. xrpl.js went from 0 merged PRs last week to 13 this week as the release automation and dependency updates landed. The developer portal shifted from merging (12→2) to opening (7→16) as the 3.2.0 documentation wave began. Several items from last week's "In Progress" landed: the Wallet.fromSeed signing-algorithm inference fix that was open in xrpl.js last week (#3337) shipped in the v5.0.0 release. The single test binary PR (rippled#7327) — noted in last week's build section — also merged this week. Clio published both a release candidate (2.7.1-rc1) and a nightly build.