Nomenclature Predictably Misunderstood

    TypeScript icon, indicating that this package has built-in type declarations

    0.2.1 • Public • Published

    XRPL Tagged Address Codec npm version

    Encode and Decode an XRPL account address and destination tag to/from X-formatted (tagged) address.

    Destination tags provide a way for exchanges, payment processors, corporates or entities which accept incoming payments, escrows, checks and similar transcations to use a single receiving wallet while being able to disambiguate incoming transactions by instructing the senders to include a destination tag.

    This package allows encoding and decoding from an XRPL address and destination tag to / from 'Tagged Addresses', containing both the destination account address and tag in one string. This way users can simply copy-paste the string, eliminating possible user error when copying / entering a numeric destination tag.

    Hopefully all exchanges, wallets & other software using destination tags will implement this address codec. A migration period will be required to allow users to enter both address formats.

    The website is available for users, exchanges and developers to provide some context and best practices.


    1. Import

    const {Encode, Decode} = require('xrpl-tagged-address-codec')

    ... and use: Encode() / Decode() or:

    const codec = require('xrpl-tagged-address-codec')

    ... and use: codec.Encode() / codec.Decode()

    import {Encode, Decode} from 'xrpl-tagged-address-codec'

    ... and use: Encode() / Decode() or:

    import * as codec from 'xrpl-tagged-address-codec'

    ... and use: codec.Encode() / codec.Decode()

    2. Encode / Decode

    Encode a separate account address and destination tag:

    const tagged = Encode({
      account: 'rPEPPER7kfTD9w2To4CQk6UCfuHM9c6GDY',
      tag: 1337,
      test: false

    The output will be a tagged address (string). The tag and test can be omitted, rendering tag to be null and test to be false.

    Decode a tagged address:

    const tagged = 'XVLhHMPHU98es4dbozjVtdWzVrDjtV8xvjGQTYPiAx6gwDC'
    const untagged = Decode(tagged)

    The output will be a destination object containing the untagged address (r....), the destination tag (null or a string containing the destination tag) and a test (bool) indicator.


    Run npm run prepublish to clean, lint, test and build. Or just run npm run build, npm run test or npm run lint.

    Tests are in ./test. Run tsc -w if you want are developing and want to auto-build to ./dist when you make changes on the fly.


    • Build: npm run build, output: ./dist
    • Test: npm run test
    • Lint: npm run lint
    • Clean, test, lint and build: npm run prepublish
    • Browserify: npm run browserify, output: dist/xrpl-tagged-address-codec-browser.js


    This concept is based on the concept from @nbougalis

    Big thanks to @sublimator for his fiddles, ideas and fixes and @intelliot for the idea of adding an X / T prefix for (new) address recognizability.


    npm i xrpl-tagged-address-codec

    DownloadsWeekly Downloads






    Unpacked Size

    13.3 kB

    Total Files


    Last publish


    • wietsewind