{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"simpleXRPL","siteUrl":"https://opensource.ripple.com/","meta":[{"name":"google-site-verification","content":"bLwyBi1imklcIuQxZ7JeI_kRF5Mg7yfr6arpEQV2nsE"}],"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]},"description":"simpleXRPL is an opinionated TypeScript SDK that lets institutional developers express XRP Ledger operations as business intent and route them through the custodians they already use."},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"simplexrpl","__idx":0},"children":["simpleXRPL"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://github.com/ripple/simpleXRPL"},"children":["[Source]"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simpleXRPL"]}," is an opinionated TypeScript SDK for the XRP Ledger, built for institutional developers who interact with the ledger through a custodian. It raises the level of your code from XRPL protocol mechanics to business operations that the SDK routes through your institutional custodians. Concretely, this means:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simpleXRPL"]}," defines the shape of business operations, handling the underlying XRPL transactions and custodian API calls."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Your code doesn't change even if you switch custodians or operate across several at once."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"warning","name":"Caution"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simpleXRPL"]}," is pre-1.0. The public API may change between releases and no sandbox exists yet to test native custodian operations."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-it-works","__idx":1},"children":["How It Works"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simpleXRPL"]}," is built around four concepts:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Clients"]},": Establish the network connection and the connector configuration. Both are immutable for a client's lifetime; to change either, you create a new client."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Connectors"]},": Make up the execution model that determines ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["how"]}," operations run and ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["who"]}," holds account keys. Each connector exposes a uniform interface to the rest of the SDK, so the same code runs across all of them."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Accounts"]},": XRPL ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"https://xrpl.org/docs/concepts/accounts"},"children":["accounts"]},", each paired with the connector that signs for it."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Verticals"]},": Domain-specific classes and methods that group related business operations."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"operation-execution","__idx":2},"children":["Operation Execution"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For every operation, on every connector, ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simpleXRPL"]}," has a statically defined routing decision that it reports at initialization:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Native"]},": Maps onto an endpoint a custodian exposes and natively handles."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Raw Signing"]},": For an operation the custodian exposes no native support for, the SDK builds the underlying XRPL transactions, the custodian signs the raw bytes, then the SDK submits them to the XRPL directly. Raw signing is off by default and enabled per connector; once on, it covers every operation that connector can't handle natively."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Unavailable"]},": The custodian doesn't expose a native endpoint and raw signing isn't enabled on the connector, so this operation is rejected."]}]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info","name":"Note"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For a complete list of supported operations by connector, see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/simplexrpl/references/connectors/connector-routing"},"children":["Connector Routing"]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"see-also","__idx":3},"children":["See Also"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"a","attributes":{"href":"/docs/simplexrpl/get-started"},"children":["Get Started"]}]}]}]},"headings":[{"value":"simpleXRPL","id":"simplexrpl","depth":1},{"value":"How It Works","id":"how-it-works","depth":2},{"value":"Operation Execution","id":"operation-execution","depth":2},{"value":"See Also","id":"see-also","depth":2}],"frontmatter":{"seo":{"description":"simpleXRPL is an opinionated TypeScript SDK that lets institutional developers express XRP Ledger operations as business intent and route them through the custodians they already use.","title":"simpleXRPL"},"labels":["simpleXRPL","SDK"]},"editPage":{"to":"https://github.com/ripple/opensource.ripple.com/tree/main/docs/simpleXRPL/index.md"},"lastModified":"2026-07-27T23:46:11.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/simplexrpl","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}