XLS-20: How XRPL NFT Minting Actually Works
On 31 October 2022 the NonFungibleTokensV1 amendment activated and the XRP Ledger got NFTs as first-class ledger objects — not trustline tricks, not smart contracts. This is what the standard actually does, verified against the rippled source, and what four years of it look like in our index.
An NFT as a ledger primitive
XLS-20 added five native transaction types: NFTokenMint, NFTokenBurn, NFTokenCreateOffer, NFTokenAcceptOffer and NFTokenCancelOffer. There is no contract to deploy and no code to audit — minting is a single transaction, and every rule below is enforced by the ledger itself, identically for everyone.
The ID is the NFT's passport: issuer, collection, royalty and permissions are all readable from the identifier alone and immutable from the moment of minting.
The three design wins
Protocol.h: kDirMaxTokensPerPage = 32. The reserve is charged per page, not per token — the change that made million-item collections possible.Protocol royalties. The TransferFee field pays the issuer on every secondary sale, up to 50% (kMaxTransferFee = 50000, in units of 0.001%). No marketplace can skip it — a transaction that ignores the royalty simply does not validate.
Brokered sales without escrow. A marketplace matches a buy offer and a sell offer in one NFTokenAcceptOffer transaction, taking its cut atomically. The NFT never leaves the seller's account until the exact moment payment arrives — there is nothing to custody and nothing to rug.
Its predecessor XLS-14 had none of these: one reserve per NFT, no royalties, no offers, and metadata that died with its hosts.
Four years, measured from our index
Trading is real but concentrated: 1.29 million sales moved 50.3 million XRP lifetime across 20,196 collections, with a few hundred collections carrying most of the volume.
Set a SourceTag — the attribution your mints will want later
A recommendation born from indexing all 8.56 million of these: put a consistent SourceTag on your NFTokenMint transactions. The NFTokenID records the issuer forever, but nothing on-chain records the platform or tool that minted it — indexers reconstruct that from circumstantial evidence, and when a creator mints through their own wallet the trail is simply gone. Whole marketplaces are unattributable today for exactly this reason.
A SourceTag is one integer field, costs nothing, and makes attribution permanent: xrp.cafe stamps 101102979 on its mints and every indexer credits them automatically — years later, regardless of which wallet submitted. Pick one number, publish it, use it on every mint.
Use XLS-24 for your metadata
The mint transaction only stores a URI — what that URI serves is up to you, and XLS-24 (status: Final) is the ecosystem's answer: a JSON document declaring a schema URI and an nftType (art.v0 for artwork, extending base.v0), alongside the familiar name, description, image and attributes. The schema reference makes your metadata machine-validatable — an indexer or marketplace can verify the shape before trusting a single field.
This is not aspirational: measured across our index, 41.3% of all NFTs with metadata already ship full XLS-24 (schema + nftType). Following it means every explorer parses your names, artwork and traits the same way on the first try — from indexing 8.56 million NFTs we can attest that nonstandard metadata is the single biggest reason art renders blank or traits fail to filter. Pin the JSON on IPFS, follow XLS-24, and your metadata outlives your hosting.
Minting one, practically
One NFTokenMint transaction: a URI pointing at your metadata (IPFS pins outlive hosted domains — the number one lesson of the XLS-14 era), a taxon shared by your collection, a TransferFee if you want royalties, and the burnable/transferable flags you can never change later. Fee: 12 drops. No contract, no gas auction, no approval transactions.
Full minting guide · browse live collections · the prequel: XLS-14