Most NFTs are a picture with a list of traits attached. The traits are just words in a metadata file: a hat, a background, a colour. You cannot take the hat off, because there is no hat. There is only a line of text that says there is one, and an image where somebody already drew it on.
A composable NFT is the other thing. The parts are real tokens, separate from the character, and the character is assembled from them. Take the hat off and you still own the hat. Sell it, and someone else can wear it.
This post explains how that works, which standards exist, and where each is worth using. At the end there is a worked example from the collection we build, because an explainer with no working code in it is a guess.
The short version
Why anyone bothers
Three reasons, in the order they usually matter.
The character stops being disposable. If the only way to get a rarer look is to buy a different NFT, then every holder's upgrade path is "sell this one". If parts are tokens, the upgrade path is "improve this one", and people keep what they have.
A parts market appears. One collection becomes two markets: whole characters, and the pieces they are made of. A part that only a few hundred people hold has its own price, and someone who does not want the character can still want the part.
Games can read it. A game that wants to know what you are carrying can ask the chain instead of trusting a server. If the sword is a token in a slot, the rules can depend on the sword.
And the honest cost: it is harder. Every extra contract is extra surface to get wrong, assembling costs gas that a static PFP never pays, and marketplaces show a composed character less gracefully than a flat image.
The standards, and what each is for
ERC-998: an NFT that owns other tokens
ERC-998 was the first attempt, back in 2018. It lets one NFT own other NFTs and other tokens, so a character could literally hold its equipment.
It never caught on. It is complicated to implement, marketplace support never arrived, and most teams who needed composability built something narrower themselves. Worth knowing as history and as vocabulary rather than as a live recommendation.
EIP-6220: equippable parts with slots
EIP-6220, which came out of the RMRK work, is the standard that matches what people usually mean by "equippable". It defines parts, fixed and slotted, and rules about which part may go in which slot, so a chest piece cannot be equipped where a helmet goes.
If you want the full catalogue-and-slot model and you want it standardised, this is the specification to read first.
ERC-6551: give every NFT its own wallet
ERC-6551 takes a different angle. Instead of teaching the NFT to own things, it gives each NFT a smart account, a token-bound account, that the NFT's owner controls. The account can hold anything: tokens, other NFTs, whatever.
This is the one with real adoption, and it is deployed on Robinhood Chain. It is the right choice when a character should carry a bag of arbitrary things. It is heavier than you need when a character has a fixed set of slots and nothing else.
Or: build the slots yourself
Plenty of teams write their own. The pattern is simple enough to state in one line: make the parts fungible-per-type tokens (ERC-1155), make the character an ERC-721, and let the character contract hold the parts while they are equipped.
You lose the standard, so no marketplace will understand your slots for free. You gain a system small enough to audit in an afternoon, with exactly the rules your game needs.
A worked example: an eight-slot Cub
This is our own collection, so treat it as an example rather than as a recommendation. Everything below is in the deployed contracts on Robinhood Chain, chain ID 4663.
The pieces.
- Orbs are an ERC-721 collection. This is what people mint.
- Parts are an ERC-1155 collection. Every trait artwork is a token type, and copies of the same artwork are interchangeable.
- Cubs are an ERC-721 collection. A Cub is the assembled character.
The flow. Opening an Orb burns it and mints seven random parts to your wallet, or eight from a Gold, Diamond or Sapphire Orb. Parts are yours immediately: transferable, sellable, usable in any combination. To form a Cub you assemble one part into each of eight slots: background, body, equipped, eyes, face, inventory, mane and tail. The Cub contract receives those eight part tokens and holds them for as long as they are equipped, which is why the Cub's art is the truth about what it is wearing rather than a claim about it.
What the contract lets you do. The Cub contract exposes assemble, swapPart, disassemble and loadoutOf. In plain terms: build a Cub, change one slot without taking the rest apart, pull the whole thing back into loose parts, or read what a Cub is wearing right now. That last one matters more than it looks: anything else on chain, a game or a battle contract, can read a Cub's loadout without trusting us.
What that produces. There are 155 trait artworks across the eight slots, which multiply out to 13,250,591,640 possible Cubs. The number is a consequence of the system, not a marketing target: it is just what eight independent slots do.
The part nobody mentions in composability posts. Parts are finite. The whole drop is 3,333 Orbs at seven parts each, eight from gold upwards, so around 25,300 parts will ever exist, and every assembled Cub locks eight of them away. No single Orb fills a Cub, and that puts a hard ceiling of roughly 3,000 Cubs that can exist at one time. Disassembling returns the parts to circulation. A composable collection has a supply of characters that moves, which is unusual and worth designing for on purpose.
How to tell whether an NFT is really composable
Ask three questions before you believe the marketing.
- Can you see the parts in your wallet as separate tokens? If the parts only exist inside the project's website, they are database rows with a picture of decentralization.
- Can you sell one part without selling the character? If not, the parts are not really yours.
- Does the change happen in a transaction? Swapping a part should cost gas and show up on the explorer. If your character changes instantly and for free, a server changed it.
Everything above is checkable on the block explorer for whichever chain a project uses. That is the entire point of doing it on chain.
Where to look next
- Ethernal Cubs, the collection this example comes from: How to play, and how the free mint works.
- The chain it runs on: What is Robinhood Chain, an honest guide with the verified specs.
- The standards themselves: EIP-6220 and ERC-6551 both have public specifications, and both repay reading the text rather than a summary of it, including this one.