BlockchainAppMaker

NFT

Building NFTs on the Flow Blockchain

Flow is a layer-1 blockchain created by Dapper Labs for consumer apps such as NBA Top Shot. Its NFTs are written in Cadence, a resource-oriented language in which a token is an object that lives in the owner's account storage, rather than an entry in a contract's ownership table. That model changes how you write, transfer and secure NFTs.

Why Flow NFTs work differently

On Ethereum, an ERC-721 contract keeps a mapping from token ID to owner. "Owning" an NFT means the contract's ledger says so. On Flow, an NFT is a resource: a typed object that can only exist in one place, cannot be copied, and cannot be silently dropped. Collectors keep NFTs in a Collection resource stored in their own account. Transferring moves the object out of one collection and into another.

Practical consequences:

  • Accidental duplication or loss is prevented by the type system; the Cadence compiler rejects code that would lose a resource.
  • A user must have a collection set up in their account before receiving an NFT from your contract. Transactions often handle that setup automatically.
  • Access is controlled through capabilities: an account publishes a limited reference (for example, "anyone can deposit into my collection") without giving away withdraw rights.
  • Accounts pay for storage by holding a minimum FLOW balance proportional to the data they store.

The standards to implement

Flow NFTs follow the NonFungibleToken contract interface, which defines the NFT resource, the Collection resource and deposit and withdraw functions. Alongside it, MetadataViews defines standard views (display name and thumbnail, royalties, editions, traits, external URL, collection display) that wallets and marketplaces read. Implementing the common views is what makes an NFT show up correctly across Flow apps. The official Flow developer documentation has the current interfaces and examples.

The Crescendo network upgrade in 2024 brought Cadence 1.0, which changed access control syntax (entitlements replaced some older patterns) and required existing contracts to be updated. If you are reading tutorials, make sure they target Cadence 1.0.

Flow's architecture, briefly

Flow splits validator work across specialized node roles: collection nodes gather transactions, consensus nodes order them, execution nodes run them, and verification nodes check the execution. The goal was high throughput without sharding, so that apps share one composable state. For NFT builders this mainly means low fees and fast finality, which suit high-volume drops and pack openings.

Flow EVM

Since Crescendo, Flow also runs an EVM environment alongside Cadence. Solidity contracts, including standard ERC-721 and ERC-1155, deploy there with familiar tooling, and Cadence can call into EVM. This gives you a choice:

Cadence NFTFlow EVM NFT
LanguageCadenceSolidity
Ownership modelResource in user's accountMapping in contract
ToolingFlow CLI, emulator, FCLHardhat, Foundry, viem, MetaMask
Ecosystem fitNative Flow marketplaces and Dapper-style appsEVM wallets, bridges and marketplaces
Main advantageSafety from the type system, rich metadata viewsPortability and hiring pool

Flow provides a bridge between Cadence and EVM NFTs, but treat bridging as added complexity. If your team only knows Solidity and you do not need Cadence-specific features, Flow EVM is the shorter path, though at that point you should also compare Flow with other EVM chains; see multi-chain NFT support.

Onboarding: Flow's real strength

Flow accounts are separate from keys. An account can have several keys with weights, keys can be rotated, and an app can create accounts for users. Combined with account linking (sometimes called hybrid custody), an app can give a user a custodial account at sign-up, with email login and no seed phrase, and later let them link it to a self-custody wallet that gains control. Transactions can also have a separate payer, so the app can sponsor fees. This is why Flow was popular for mainstream collectibles: users can buy with a card without knowing a blockchain is involved.

Building a Flow NFT project

  1. Install the Flow CLI and run the local emulator.
  2. Write the NFT contract implementing NonFungibleToken and the key MetadataViews.
  3. Write transactions for collection setup, minting and transfer, and scripts for reading.
  4. Test with the Cadence testing framework, then deploy to testnet.
  5. Integrate a front end with the Flow Client Library (FCL) for wallet discovery and signing.
  6. Decide whether you will run your own storefront or use the NFT storefront contract so existing Flow marketplaces can show listings.
  7. Have the contracts reviewed; Cadence reduces some bug classes but not logic errors.

The broader marketplace architecture is covered in NFT marketplace development, and sports-licensed collectibles in NBA Top Shot-like marketplaces.

Honest trade-offs

Flow's NFT activity peaked with the 2021 Top Shot boom and declined sharply with the wider market. The ecosystem is smaller than Ethereum's or Solana's, Cadence developers are scarce, and liquidity on Flow marketplaces is thin outside a few licensed brands. Choose Flow when your product targets mainstream users who will never touch a wallet, and when you value its account model and fee sponsorship. Choose elsewhere if you need deep secondary liquidity or a large crypto-native audience.

Frequently asked questions

Is Cadence hard to learn for Solidity developers?

The syntax is approachable, but the resource and capability model takes adjustment. Expect a few weeks before a Solidity developer is comfortable writing secure Cadence.

Can Flow NFTs be traded on Ethereum marketplaces?

Not directly. Cadence NFTs live on Flow. They can be bridged to Flow EVM, where EVM tooling applies, but Ethereum mainnet marketplaces do not list Flow assets natively.

Do Flow NFTs support royalties?

Yes, through the Royalties metadata view, which marketplaces read to pay creators. As on other chains, enforcement depends on the marketplace honoring it.

What does it cost to mint on Flow?

Transaction fees are a small fraction of a cent in normal conditions, plus the storage reserve in FLOW that accounts must hold for the data they store.