A documentation-heavy week with 23 PRs merged on the developer portal — including content corrections for Permissioned Domains, confidential transfers, retired amendments, and a batch of dependency security patches. In xrpl.js, 3 PRs merged and two beta releases shipped (xrpl@5.4.0-beta.0 and ripple-binary-codec@2.12.0-beta.0) with Batch transaction fixes. In XRPL-Standards, the XLS-85 spec was updated to align MPT escrow error codes with the actual rippled implementation. In rippled, a wave of defensive-coding and robustness PRs were opened targeting SHAMap bounds, node store shutdown, and cache statistics — with only test and CI merges landing so far.
This week's XRP Ledger development was dominated by documentation improvements and preparation for upcoming changes. The developer website (xrpl.org) received its largest batch of updates in the comparison period — 23 pull requests merged — addressing everything from correcting outdated information to patching security vulnerabilities in the site's underlying software libraries. For anyone building on XRPL, the most notable content change was updating the Permissioned Domains page: it previously said Permissioned DEXes were "in development," but since this feature is now live on Mainnet, the docs now accurately reflect that. Several other corrections landed too, including clarifying that enabling confidential token balances after token creation requires an additional protocol amendment (DynamicMPT), and fixing an incorrect claim that a particular account setting couldn't be turned off.
On the JavaScript SDK side, two beta versions were published — xrpl@5.4.0-beta.0 and ripple-binary-codec@2.12.0-beta.0. The main xrpl package beta fixes issues with Batch transactions (the feature that lets users bundle multiple transactions together): it now correctly allows LastLedgerSequence in inner transactions and properly requires sponsor signatures. These are beta releases, so they're available for testing but not yet recommended for production applications. Separately, the library's WebSocket connection code now protects against a scenario where a server could inject messages that mimic internal events — a defensive improvement that will ship in the next stable npm release.
Behind the scenes in the core server code (rippled), while only two minor PRs merged this week, a wave of 26 new pull requests were opened — most from the same developer working through a systematic robustness review. These changes add safety checks and bounds throughout the system: capping how much data a node sends in peer replies, limiting the size of data structures, ensuring all pending operations complete cleanly during shutdown, and fixing cache statistics that weren't being tracked correctly. None of these change how the network behaves — they make the server software more resilient against edge cases. These will be reviewed and start merging in the coming weeks, eventually reaching node operators in a future release.
For the latest updates, follow @XRPLF and @RippleXDev on X, and explore the XRPLF repos directly for full development activity.
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.
ValidatorSite request-timeout test suite from ~35s to ~13.5s by reducing the built-in timeout from 12s, without changing production defaults. Approved by a core team member.actions/setup-python, docker/login-action, and Swatinem/rust-cache across CI workflows.A total of 23 PRs merged — a mix of documentation improvements, new content, and dependency security updates.
Content updates:
temMALFORMED and temREDUNDANT cases that exist in the implementation and XLS-68.asfAllowTrustLineLocking correction: xrpl-dev-portal#4007 — Removes incorrect claim that the flag cannot be disabled once enabled.[peer_private] check was unreliable because the peer crawler omits addresses for validators regardless of the private setting.New listings:
Dependency security patches (11 PRs): DOMPurify (#4039), electron (#4037), postcss-selector-parser (#4035), undici (#4034), simple-git + @redocly/realm (#4019), follow-redirects (#4015), source-map-js (#3994), brace-expansion (#3992), smol-toml (#3991), and ws in two code-sample directories (#3724, #3722).
Connection now blocks server-supplied data.type values that collide with internal events (connected, disconnected, error, reconnect, reconnecting). Such messages are dropped and surfaced as badMessage; unknown types are still forwarded. Closes #3318. Merged — pending npm release.signLoanSetByCounterparty and signAsSponsor prefix changes./batch-deps-upgrade skill now handles Semgrep tickets missing a fix version by falling back to the GitHub advisory.ca-certificates is installed in Debian/Docker packages.docker/login-action from 4.6.0 to 4.7.0.EscrowFinish) and §1.2.3 (EscrowCancel) to document tecNO_PERMISSION for the MPT missing-holding case, matching the current rippled implementation. Approved by a contributor who confirmed the code behavior.markdown requirement to permit 3.11.2.rippled — Defensive coding and robustness stack: A core collaborator opened eight PRs targeting SHAMap, node store, and cache internals:
TaggedPointer::getChildIndex — rippled#8661 (+8/−1, trivial)getNodeFat replies — rippled#8656 (+77/−7)SHAMapItem size to 16 MiB — rippled#8654 (+56/−3)rippled — Authorization and trust line fixes: Two stacked PRs by a contributor address unauthorized trust line bypasses — requiring authorization for both AMM pool assets before acquiring LPTokens (rippled#8648, +716/−18) and closing the zero-balance exemption for unauthorized trust lines (rippled#8650, +948/−57, closes #5450). Both have Copilot-suggested changes.
rippled — Validator key rotation fix: rippled#8540 (+519/−83) — Tracks validators by NodeID instead of signing key so that key rotation doesn't drop them from amendment votes and laggard counts. Closes #8534. Has outstanding change requests from @ximinez with "just a couple more tweaks."
rippled — TaggedCache sweep thread cap: rippled#8243 (+187/−88) — Caps sweep worker threads at 8 instead of spawning one per CPU core. Approved by 3 reviewers including @nbougalis ("a good but partial fix… should go in as-is"). Currently has merge conflicts.
rippled — Batch preflight performance: rippled#8627 (+29/−25) — Eliminates per-insertion heap allocations in Batch (XLS-56) preflight by switching to std::flat_set with inline storage.
rippled — LoadManager fee adjustment fix: rippled#8643 (+253/−23) — Fixes the fee adjustment block executing only on shutdown instead of every second. Closes #8038. By a community member; still has open review findings.
xrpl4j — Three open bug fixes: Defensive UnsignedByte copying (xrpl4j#857, approved, labeled bug), 2-byte variable-length decode fix (xrpl4j#858, labeled bug, companion test PR from maintainer), and XrpCurrencyAmountDeserializer tightening (xrpl4j#860, approved).
xrpl-py — BIP39 mnemonic support: xrpl-py#1069 (+208/−0) — Adds Wallet.from_mnemonic() for deriving wallets from BIP39 phrases using the BIP44 path. Addresses the longstanding #419 request. By a community member.
xrpl-dev-portal — Batch tutorial expansion: xrpl-dev-portal#4038 (+1,594/−564, 18 files) — Adds Python and Go examples to the Batch transaction tutorials.
XRPL-Standards — Two-step loan creation spec: XRPL-Standards#570 (+574/−0, 6 files) — Specifies two-step loan creation under LendingProtocolV1_2, adding Vault.AssetsReserved and a LoanSet/LoanAccept flow to XLS-65 and XLS-66. Approved by AI reviewer across 4 reviews.
UnsignedByte copy (#857), VL decode fix (#858), and drops deserializer tightening (#860) — are queued for xrpl4j. The VL decode bug has a companion test PR from the maintainer, suggesting merge is imminent.Community-contributed PRs: @FawwazLawal opened PRs across three repos this week — moving generateBlindingFactor() from protocol to test utilities in rippled (#8644, closes #7631), adding Wallet.from_mnemonic() to xrpl-py (#1069), fixing 2-byte VL decoding in xrpl4j (#858), and fixing broken links on opensource.ripple.com (#242). @rippleitinnz (community member) opened the LoadManager fee adjustment fix (rippled#8643). @SergeevDmitry (community member) contributed a fix to reject fractional drops in xrpl-py's drops_to_xrp (#1071) and filed a related issue about silent rounding in xrp_to_drops (#1072). @hmalinski (community member) opened a fix for out-of-range MPT amount encoding in xrpl.js (#3554), carrying forward @jarod-vyent's earlier work from #3410. @nabe3m contributed documentation fixes to xrpl-dev-portal (#4028, #4007), and @xVet contributed the Permissioned Domains update (#4031).
New issues: @interc0der reported that historical ledger 625681 returns an empty transaction list despite a non-zero transaction root on a full-history reporting node (rippled#8665). @gamween filed a Vault withdrawal invariant failure where fee-bearing IOU VaultWithdraw to a destination at a coarser scale fails with tecINVARIANT_FAILED on v3.5.0-rc1 (rippled#8664). @ckeshava documented a HashRouter caching bug where Rules-dependent tem results cause temBAD_SIGNATURE on resubmission (rippled#8647, labeled Bug). Automated security scans flagged dependency vulnerabilities in both xrpl@5.4.0-beta.0 (xrpl.js#3558) and ripple-binary-codec@2.12.0-beta.0 (xrpl.js#3559).
Standards discussions: @baali-who proposed a "Collateral Lock for Loans" amendment extending XLS-66 and XLS-85 — letting LoanSet pledge a borrower's token escrow so it cannot be released while a loan is unpaid (XRPL-Standards#676). @BraedonKlock proposed "Asset Spending Bounds" for restricting how accounts or delegated permissions can spend specific assets (XRPL-Standards#675). @Cavey773 proposed "Selective Blocking of NFT Offers" to let accounts block specific addresses from creating buy/sell offers (XRPL-Standards#674).
Compared to last week (October 19–25, 2026):
| Metric | This Week | Last Week | Change |
| Repos with activity | 8 | 7 | ↑1 |
| rippled PRs merged | 2 | 10 | ↓8 |
| rippled PRs opened | 26 | 16 | ↑10 |
| rippled new issues | 3 | 1 | ↑2 |
| rippled closed issues | 1 | 1 | flat |
| rippled releases | 0 | 0 | flat |
| rippled commits | 2 | 10 | ↓8 |
| xrpl.js PRs merged | 3 | 2 | ↑1 |
| xrpl.js PRs opened | 6 | 9 | ↓3 |
| xrpl.js new issues | 2 | 1 | ↑1 |
| xrpl.js closed issues | 1 | 0 | ↑1 |
| xrpl.js releases | 2 | 0 | ↑2 |
| xrpl.js commits | 3 | 2 | ↑1 |
| xrpl-py PRs merged | 0 | 0 | flat |
| xrpl-py PRs opened | 7 | 3 | ↑4 |
| xrpl-py new issues | 1 | 0 | ↑1 |
| xrpl-py releases | 0 | 0 | flat |
| xrpl-dev-portal PRs merged | 23 | 4 | ↑19 |
| xrpl-dev-portal PRs opened | 9 | 17 | ↓8 |
| xrpl-dev-portal new issues | 2 | 0 | ↑2 |
| xrpl-dev-portal commits | 25 | 6 | ↑19 |
| Clio PRs merged | 2 | 3 | ↓1 |
| Clio PRs opened | 1 | 0 | ↑1 |
| Clio releases | 1 | 1 | flat |
| Clio commits | 2 | 3 | ↓1 |
| XRPL-Standards PRs merged | 2 | 1 | ↑1 |
| XRPL-Standards PRs opened | 4 | 5 | ↓1 |
| XRPL-Standards commits | 2 | 1 | ↑1 |
| xrpl4j PRs merged | 0 | 4 | ↓4 |
| xrpl4j PRs opened | 4 | 2 | ↑2 |
| xrpl4j releases | 0 | 1 | ↓1 |
| Total PRs merged (all repos) | 32 | 24 | ↑8 |
| Total releases | 3 | 2 | ↑1 |
Carryovers from last week: The XLS-85 error code alignment PR (XRPL-Standards#671), noted as "In Progress" last week, merged on Monday. The Batch preflight performance PR (rippled#8627) and ApplyContext refactoring PR (rippled#8637) remain in progress. The dropsToXrp BigNumber PR (xrpl.js#3341) still has failing browser tests.
Trends: Total merges rose from 24 to 32, driven almost entirely by the developer portal's large batch of dependency security updates and content corrections (23 merges, up from 4). rippled merges dropped to just 2 (CI/test only), but opened PRs surged to 26 — a notable wave of robustness and defensive-coding work now queued for review. xrpl.js shipped its first beta releases since the previous period. The opensource.ripple.com repo appeared in activity for the first time in the comparison window. xrpl-py saw increased community engagement with 7 PRs opened (up from 3), though none merged yet.