What is a Dynamic NFT?
Learn what a dynamic NFT is, how mutable NFT metadata works, which standards support it, and the trust, storage, and update tradeoffs involved.

Introduction
Dynamic NFT means an NFT whose metadata can change after minting. The important part is not that the token stops being unique or that ownership becomes fluid; it is that the token’s identity stays fixed while its description, media, or attributes can update in response to rules, events, or outside data. That small shift turns an NFT from a static certificate into something more like a stateful digital object.
This matters because ordinary NFTs are good at proving that a specific token exists and who owns it, but many real assets and digital experiences do not stay still. A game item levels up. A membership badge reflects status. A collectible tied to an athlete changes when the athlete’s statistics change. A token representing a house may need metadata about the house to change over time. The ERC-721 specification itself explicitly allows this by saying the token URI may be mutable.
The interesting question is not whether dynamic NFTs are possible. They are. The real question is what exactly is changing, how that change is represented, and what trust assumptions come with it. Once those pieces are clear, the idea becomes much less mysterious.
What is a dynamic NFT’s stable identity and how can its metadata change?
A dynamic NFT works by separating two things that are often mentally lumped together: the NFT’s on-chain identity and the NFT’s metadata.
In ERC-721, every NFT has a tokenId, and the pair (contract address, tokenId) uniquely identifies that token. The standard says that identifier must not change for the life of the contract. That is the stable part. It is the anchor for ownership, transfer history, approvals, and provenance.
What can change is the information associated with that identity. Under the ERC-721 metadata extension, a contract may expose tokenURI(tokenId), which returns a URI for the token’s metadata. That metadata commonly contains fields like name, description, image, and attributes. Crucially, the ERC-721 spec states: “The URI MAY be mutable.” That single sentence is the formal opening for dynamic NFTs.
So the simplest definition is this: a dynamic NFT is an NFT with a stable token identifier and mutable metadata. Sometimes the metadata itself changes. Sometimes the URI changes to point at new metadata. Sometimes the URI stays the same but the server or on-chain logic behind it returns different JSON over time. In all three cases, the token remains the same token, but its visible representation changes.
That is the compression point that makes the concept click. A dynamic NFT is not a different kind of ownership primitive. It is an NFT whose state is allowed to evolve.
When should you use a dynamic NFT instead of a static NFT?
If an NFT’s metadata were fixed forever, then the token could only represent assets whose meaningful properties never change. That is a narrow class.
The problem appears as soon as the NFT is meant to track something living, progressing, expiring, or reacting. In a game, a sword that gains power after battles is not well described by immutable metadata. In a ticketing or membership system, access status may need to change after a date or after a specific action. In a real-world asset context, metadata about the represented object may naturally need updates. The ERC-721 authors used the example of a house: the token might still represent the same house, while facts about the house may change.
This is why dynamic NFTs exist. They solve a mismatch between fixed token identity and changing asset state. Static NFTs are well suited to artifacts where permanence is the point. Dynamic NFTs are suited to objects whose meaning depends on time, events, progress, or external reality.
That does not mean dynamic is always better. It means mutability is useful when the represented thing itself is not static. The cost of that usefulness is that the reader must care about update authority, data sourcing, and authenticity in a way that a purely frozen NFT may avoid.
How do dynamic NFTs implement mutable metadata in practice?
At a high level, a dynamic NFT has three moving parts. There is the token contract, which holds ownership and exposes a metadata interface. There is some state transition logic, which decides when the NFT should change. And there is a metadata resolution layer, which turns the current state into JSON and media that wallets and marketplaces can display.
The contract side is familiar. An ERC-721 contract may implement tokenURI(tokenId). An ERC-1155 contract may implement uri(id) through the optional metadata extension. These functions are the standard doors through which clients discover what the token is supposed to look like.
The dynamic behavior begins behind that door. One design stores mutable per-token URIs on-chain and updates them when the token changes. OpenZeppelin’s ERC721URIStorage is an example of this pattern: it stores token-specific URIs and provides an internal _setTokenURI function. This is flexible because each token can point to a different new location, but it is more expensive because the contract stores more data.
Another design computes the metadata URI from a base URI and the token ID. That is cheaper, because the contract can derive tokenURI by concatenating a base path and the token ID. A project can then update what the endpoint returns for that token. This lowers on-chain storage cost, but pushes more trust and availability assumptions into the external metadata service.
A third design keeps the metadata generation on-chain. Instead of returning an HTTP or IPFS URL, the contract can return a data: URI containing Base64-encoded JSON, and that JSON can itself embed an SVG image generated from current on-chain state. In that model, the token is dynamic because the contract reads evolving state variables and produces different metadata when queried. The Chainlink tutorial demonstrates this pattern: the contract updates internal state from a price feed and randomness, then returns JSON and SVG assembled on-chain.
These designs feel different, but the mechanism is the same. The NFT’s displayed form is a function of some state, and that state can change.
How can the same NFT change appearance without being reminted?
Imagine an NFT that represents a character in a game. When it is minted, it has level 1, a plain background, and a short list of attributes. The contract records ownership in the usual way, and the token gets a stable tokenId, say 17. Nothing about transfer or identity is unusual.
What makes it dynamic is that the contract, or a trusted external system connected to the contract, also keeps track of the character’s experience points. At first, token 17 has xp = 0. When a player completes a quest, a transaction updates that value to xp = 100. The token itself has not been replaced. No new NFT was minted. Ownership did not change. What changed is the state that the metadata logic reads.
Now a wallet or marketplace asks for tokenURI(17). If the metadata is generated on-chain, the contract may return JSON showing level 2 and a new image assembled from current state. If the metadata is off-chain, the URI may resolve to a JSON document whose attributes and image now reflect level 2. In both cases, the same token now appears different because the descriptive layer has changed.
For the user, it feels like the NFT evolved. Mechanically, that evolution is just **a new answer to the question “what metadata corresponds to token 17 right now?” **
This example also reveals where misunderstandings happen. People sometimes say “the NFT changed,” as if ownership structure itself mutated. Usually that is not what happened. The token’s legal and technical identity remained the same; the metadata-rendered state changed.
What sources drive state changes in dynamic NFTs (on‑chain, oracles, APIs)?
The source of change matters because it determines what the NFT can truthfully represent.
Sometimes the state is entirely on-chain. A game contract may increment a level counter after a successful action. A vesting or membership NFT may change status based on block timestamp or internal rules. An on-chain generative artwork may vary according to state stored in the contract. In these cases, the blockchain itself contains the inputs that drive the dynamic behavior.
Sometimes the state depends on off-chain facts. A sports collectible may update when an athlete wins an award. A weather-linked NFT may change based on temperature data. A finance-themed NFT may react to an asset price. Blockchains cannot natively fetch this information on their own, so they need an external data path. This is where oracles become relevant.
A common architecture is: external data source -> oracle network or service -> smart contract state update -> metadata refresh. Chainlink describes this pattern directly: a dynamic NFT often combines an NFT contract, a way to connect to external data, and an automation mechanism to trigger updates. Data Feeds, custom API access, verifiable randomness, and automated execution can all become inputs to state changes.
This is the point where a dynamic NFT stops being just “mutable metadata” and becomes a broader systems design problem. The token is only as trustworthy as the process that determines when it changes.
How do wallets and marketplaces detect metadata updates for dynamic NFTs?
| Method | Standard | Client action | Refresh guarantee | Best when |
|---|---|---|---|---|
| Metadata event | EIP-4906 | Listen and re-query | High if supported | Off-chain JSON updates |
| URI event | ERC-1155 | Listen and re-query | High for uri-changes | Batchable token ranges |
| No event (dynamic) | None / dynamic endpoint | Poll or fetch on demand | Depends on client behaviour | Programmatic metadata endpoints |
There is an annoying practical problem with dynamic NFTs: even if the metadata has changed, wallets and marketplaces may continue showing the old version unless they know to refresh it.
Standards partially solve this. In ERC-1155, metadata changes can be signaled with a URI event when the change can be expressed as an event. The standard also recognizes that some URIs are dynamic or programmatic, in which case a per-change event may not make sense. In ERC-721, the original standard allows mutable token URIs but does not define a standard event for metadata updates.
That gap is why ERC-4906 exists. It adds MetadataUpdate(tokenId) and BatchMetadataUpdate(fromTokenId, toTokenId) events for ERC-721 NFTs. The purpose is simple: third parties such as marketplaces can listen for these events and know they should re-query tokenURI and reload the JSON metadata. The event does not carry the new metadata payload. By design, consumers are expected to fetch the updated metadata through the normal URI mechanism.
This distinction matters. A dynamic NFT is not only about being able to change; it is also about being observable as changed by the tools users rely on. If metadata updates happen silently, the NFT may be dynamic in theory but stale in practice.
Even then, refresh is not guaranteed to be immediate. Indexers, wallets, and marketplaces often cache metadata. Some platforms require manual refresh actions or periodic re-indexing. So there is a difference between the source of truth changing and the user interface reflecting that change.
ERC‑721 vs ERC‑1155: which standard fits dynamic NFT use cases?
Dynamic NFTs are often discussed as if they were an ERC-721 feature, but the underlying idea is broader. What matters is not the specific standard name; it is whether the token standard provides a stable token identifier plus a metadata access path.
ERC-721 does this with per-token identity and optional tokenURI(tokenId). It is a natural fit for one-of-one assets and unique collectibles, so many dynamic NFT examples are framed there.
ERC-1155 also supports dynamic NFTs through its optional uri(id) metadata extension. Because ERC-1155 can represent fungible, non-fungible, and semi-fungible assets in one contract, it is often attractive for games or systems where many token types share logic. The standard defines client-side {id} substitution in URIs and specifies a URI event for discoverable metadata changes when applicable.
The difference is not “ERC-721 can be dynamic, ERC-1155 cannot.” Both can. The real design choice is whether your asset model is primarily unique-item oriented or multi-token oriented, and how you want indexing, batching, and storage to behave.
How do on‑chain, IPFS/Arweave, and HTTP metadata compare for trust and availability?
| Model | Tamper resistance | Cost | Availability | Best for |
|---|---|---|---|---|
| On-chain | Strongest tamper resistance | High gas cost | Always on-chain | Permanent provenance |
| Decentralized (IPFS/Arweave) | High tamper resistance | Moderate storage cost | Depends on pinning/replication | Long-term resilience |
| Centralized HTTP | Low tamper resistance | Low operational cost | Depends on operator uptime | Easy updates and hosting |
Dynamic NFTs are easiest to misunderstand when people speak about them as though “metadata changes” were a single thing. Mechanically, there are several trust models hiding under that phrase.
If metadata and media are fully on-chain, integrity is strongest. The blockchain itself stores the content or enough data to generate it. This is expensive, but it minimizes dependence on outside servers. OpenSea’s own help documentation treats fully on-chain storage as the most permanent form.
If metadata is on IPFS or Arweave, the trust model changes. The content is not on the token contract itself, but it is still stored in decentralized networks designed to avoid a single point of failure. This can preserve tamper resistance better than a normal web server, though practical availability still depends on pinning, replication, or persistence arrangements.
If metadata lives on a conventional HTTP server, mutability is operationally easy but trust is weakest. The server operator can change the JSON, move files, let hosting lapse, or serve inconsistent content. Security analyses from NIST and academic work both emphasize that off-chain pointers create an extra attack surface. In many NFT systems, what is on-chain is not the artwork or even the metadata itself, but a pointer to a mutable external table that maps token IDs to asset URLs.
This is not merely a storage preference. It changes the answer to a basic question: when the NFT changes, who should the user trust? The chain, a decentralized content network, or a server admin are not equivalent.
How does CCIP Read and off‑chain retrieval work for dynamic NFT metadata?
There is also a more advanced pattern where off-chain data is not just used to update state periodically, but is fetched in a standardized way during contract reads. ERC-3668, known as CCIP Read, defines a mechanism for smart contracts to request off-chain data by reverting with an OffchainLookup error that tells the client where to fetch data and how to call back.
For dynamic NFTs, this can be useful when metadata or supporting proofs are too expensive or impractical to keep entirely on-chain. The contract can effectively say: “to answer this query, fetch data from this gateway, then bring it back so I can validate it.” The important part is that validation is application-specific. The standard does not solve trust by itself; contract authors must include enough context in extraData and verify the returned data correctly.
This pattern is powerful, but it sharpens the trust question rather than removing it. A gateway can be malicious or unavailable. Clients must support the protocol. Privacy can also be affected because users may make HTTP requests to contract-specified endpoints. So CCIP Read expands the design space for dynamic NFTs, especially those tied to large or external datasets, but it does not eliminate the need for careful validation and client support.
What are the main risks and failure modes of dynamic NFTs?
The most important failure mode is confusing mutable presentation with trustless truth.
A dynamic NFT can honestly reflect game progress if that progress is tracked on-chain by transparent rules. It can also merely reflect whatever a privileged operator decides to serve from a web server. Both are dynamic, but the second is much closer to a normal database entry with a token attached.
This is why access control matters. The standards allow mutability, but they do not define who is authorized to change metadata. If a contract exposes a setter for token URIs, someone controls that setter. If an oracle updates state, someone controls oracle configuration. If the contract is upgradeable, someone may be able to change the rules later. Those governance choices are not incidental. They are part of the asset.
Availability is the next failure mode. If the metadata server goes down, the NFT may still exist on-chain but become visually broken or semantically incomplete. If the content-addressed asset is no longer pinned, decentralized storage may still fail in practice. Centralization studies of NFT metadata have found substantial reliance on centralized hosting among prominent NFTs, which means collectors often inherit hosting risk without realizing it.
There is also the issue of stale displays. A token may have changed, but platforms may cache old metadata. ERC-4906 and ERC-1155 URI events help, but they do not force every client to refresh immediately or correctly.
And there is a conceptual risk: some buyers hear “NFT” and assume permanence. Dynamic NFTs deliberately relax permanence at the metadata layer. That is not inherently bad, but it must be understood. If the value proposition depends on fixed traits, dynamic behavior may undermine it. If the value proposition depends on evolution, then mutability is the feature.
How should you evaluate a dynamic NFT before buying or approving it?
| Question | What to check | Why it matters |
|---|---|---|
| Source of state | On-chain rules or oracle details | Determines verifiability |
| How updates are signaled | ERC-4906/URI events or polling | Affects UI freshness |
| Where metadata lives | On-chain, IPFS, or HTTP server | Affects tamper risk and uptime |
| Who can update | Contract setters, oracle admins, governance | Risk of unauthorized changes |
When you look at a dynamic NFT, the first useful question is not “what does it show right now?” but “what mechanism determines what it shows?”
If the answer is on-chain rules, you can inspect those rules. If the answer is an oracle, you should ask what data source it uses and how updates are triggered. If the answer is a centralized API, then the NFT is only as credible as that operator. If the answer is upgradeable contract logic, then governance is part of the trust model.
The next question is how metadata changes are signaled. Does the contract emit ERC-4906 metadata update events? Does an ERC-1155 implementation emit URI events where appropriate? Or are users expected to rely on marketplace-specific refresh behavior?
Then ask where the metadata and media live. Fully on-chain, IPFS or Arweave, and centralized HTTP hosting are not cosmetic differences. They determine permanence, censorship resistance, and operational risk.
Finally, ask what exactly is fundamental and what is conventional. The token’s identity and ownership are on-chain facts. The image, traits, and status shown in an interface may be generated, cached, interpreted, or served through layers of software around that fact. Dynamic NFTs are powerful precisely because they make that distinction visible.
Conclusion
A dynamic NFT is best understood as a stable on-chain token whose metadata can evolve. The token keeps its identity; the description of the token changes as state changes.
That idea unlocks NFTs for games, memberships, live collectibles, and assets tied to changing conditions. But it also shifts attention from simple ownership to the harder questions of data sourcing, update authority, signaling, storage, and trust.
If you remember one thing tomorrow, remember this: a dynamic NFT is not “an NFT that moves.” It is an NFT whose current meaning depends on a changing state; and the real design question is who controls that state and how others can verify it.
How do you evaluate a token before using or buying it?
To evaluate a dynamic NFT before buying or approving it, check who controls its metadata, where the metadata and media live, and how updates are signaled. Use public contract inspection and event logs, then complete the purchase workflow on Cube Exchange once you confirm the trust model and availability.
- Inspect the token contract on a block explorer: confirm the token standard (ERC‑721 or ERC‑1155), look for mutable tokenURI logic, and note any proxy/upgradeable patterns.
- Verify metadata and media hosting: check whether metadata is returned as on‑chain data:, an IPFS/Arweave CID, or an HTTP URL and note any pinning or persistence claims.
- Check access control and update sources: identify who can call setters, the oracle operator addresses (if any), and whether the contract emits ERC‑4906 or ERC‑1155 URI events for updates.
- Review recent event logs and off‑chain feeds: search for MetadataUpdate/URI events, oracle updates, or admin changes to see how often and how reliably state has changed.
- If satisfied, fund your Cube Exchange account and place a limit or market order for the NFT; prefer a limit order if you need price control and set a buyer protection (stop or review) before confirming.
Frequently Asked Questions
- If an NFT's appearance or attributes change, does that mean a new token was minted or ownership changed? +
- A dynamic NFT keeps the same on‑chain identifier (contract address + tokenId) while its metadata or media can change; the token is not re‑minted or replaced — only the descriptive layer that clients fetch is allowed to evolve.
- What technical architectures do projects use to make NFT metadata change over time? +
- Common patterns are (1) storing and updating per‑token URIs on‑chain (e.g., OpenZeppelin's ERC721URIStorage), (2) using a base URI and changing the off‑chain endpoint's response, and (3) generating JSON/media on‑chain (returning data: URIs or SVG built from contract state); each trades off on‑chain cost, trust, and availability.
- How do wallets and marketplaces learn that a dynamic NFT's metadata has been updated so they can refresh their display? +
- Clients rely on on‑chain signals: ERC‑1155 defines a URI event for changes, and ERC‑4906 adds MetadataUpdate(tokenId) and BatchMetadataUpdate events for ERC‑721 so marketplaces can re‑query tokenURI; however many clients still cache metadata and refresh timing is not guaranteed.
- Is metadata stored on‑chain, on IPFS/Arweave, or on a web server equally trustworthy for dynamic NFTs? +
- On‑chain metadata (or on decentralized storage like IPFS/Arweave) provides the strongest integrity guarantees; fully off‑chain HTTP hosting is operationally easiest but is weakest for tamper‑resistance and availability — each model implies different trust assumptions.
- What role do oracles and CCIP Read play in dynamic NFTs, and do they remove trust concerns? +
- Oracles provide off‑chain facts to smart contracts (external data -> oracle -> contract update) and CCIP Read (EIP‑3668) lets a contract request off‑chain data during reads, but validation of returned data is application‑specific and clients must support the protocol; neither automatically eliminates trust or availability risks.
- Who is authorized to update a dynamic NFT's metadata, and how can I check it? +
- Who can change metadata depends on the contract and surrounding services: a contract setter, an oracle operator, or an upgradeable manager might control updates — the ERC specs allow mutable URIs but do not mandate access‑control rules, so you should inspect the implementation and oracle governance.
- What can go wrong with dynamic NFTs that buyers or developers should watch out for? +
- Major failure modes include mistaking mutable presentation for on‑chain truth (an operator could arbitrarily change off‑chain JSON), availability loss if hosting or pinning fails, stale displays from client caching, and governance/upgrade risks if contract logic can be changed later.
Related reading