Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

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.


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




No releases published


No packages published