Introducing NFT metadata on Flow

Hey everybody!

A group of developers, with help from the core Flow team, have been working on an extension to the Cadence NFT standard that adds support for on-chain NFT metadata. We’re excited to announce that it’s ready for use!

:warning: This is an evolving standard that will see many future updates and extensions.

You can implement it today, but if you want to make use of NFT royalties, we recommend waiting until the royalty view is implemented.

It’s been a few months, so here’s a recap:

Why is this standard important?

  • Ecosystem network effects – it’s time for Flow NFTs to come together. This standard allows all NFT projects to speak a common language, paving the way for powerful integrations. We’re all running on a shared computer, so let’s use it!
  • More utility for users – true ownership means a user should be able to use their NFTs anywhere. In the open world that we’re building, nobody wants to be stuck on an island.
  • Fewer headaches for developers – a common standard removes friction for developers, making it easier to create an NFT that can be used everywhere. No more special cases or hard coding!

There’s a growing NFT ecosystem on Flow made up of many independent projects. Each is awesome in its own right, but the true power of any system comes from the sum of its parts. The base NFT standard defines the mechanics of NFTs (minting, transferring, etc), but it doesn’t define how those NFTs should look and function across different applications.

We’re starting to see the first wave of applications that aggregate NFTs from multiple projects. Marketplaces like Blocto Bay, Gaia and Rarible now allow users to trade a variety of NFTs in a single place. The Alchemy NFT API provides an index of NFTs on Flow. Wallets like Blocto and Dapper are giving users a way to collect their NFTs, while Find lets a user add NFTs to their public profile. A metadata standard gives developers the power to define how their NFTs should be displayed across all of these applications.

How NFT metadata works on Flow

Flow was designed to support software composability: the ability for multiple applications to interact with and build upon one another. Blockchain systems provide a shared execution state where composable applications can flourish. For example on Flow, app-to-app communication happens in a Cadence function call rather than an HTTP request.

With that in mind, these were the high-level design goals for NFT metadata:

  • Important data should live directly on the chain. While it’s common to store large assets like images and videos in off-chain storage, other pieces of information (e.g. the traits of an NFT) are better suited for the chain. This allows another Cadence contract to build interesting logic on top of your NFTs (i.e. it’s built for composability).
  • Metadata should be flexible. There’s no way to anticipate all the future use cases of NFTs, so we defined a standard framework that can be easily extended as new use cases arise. Anybody can propose new metadata formats (called “views”).
  • The new standard should be non-breaking. The authors took special care to make sure this standard wouldn’t break existing NFT applications. You can upgrade your NFT contracts whenever you’re ready without breaking your current implementation.

How to implement the NFT metadata standard

We’ll be publishing a full development guide soon, but if you want to get a head start, take a look at the latest version of the Kitty Items sample app, which already implements the new metadata standard.

As mentioned above, you may want to wait for the royalty view before implementing this standard in a production application.

Join the conversation

As the standard evolves, new metadata views will be discussed in the Flow NFT repository. Feel free to join in on GitHub!


There are other views that have been suggested now aswell: