DEV Community

Siddhant Chavan
Siddhant Chavan

Posted on

What I learned minting NFTs on Solana with Token Extensions #100DaysOfSolana

What I learned minting NFTs on Solana with Token Extensions

Before this week, I thought creating a Solana NFT meant using a marketplace stack or relying on a separate metadata program. I wanted to understand what actually happens underneath.

It turns out an NFT on Solana is still built from the same token primitives I had already been working with: a mint, a supply of one, zero decimals, and extensions that add meaning directly on-chain.

This week I went from creating a basic 1-of-1 token to building a complete NFT with metadata, collections, and on-chain verification using Token Extensions.

The mental model: what an NFT actually is on Solana

The biggest shift was realizing that an NFT is not a completely different asset type.

At the core, it is still a token mint.

The difference is:

  • Supply is exactly 1
  • Decimals are 0
  • Mint authority is disabled so no more copies can be created

In Web2 terms, imagine creating a database row where the ID is unique, the quantity can never increase, and ownership history is tracked publicly.

The first NFT I created started with a simple mint:

solana config set --url https://api.devnet.solana.com

spl-token create-token --decimals 0

spl-token create-account [YOUR_MINT_ADDRESS]

spl-token mint [YOUR_MINT_ADDRESS] 1

spl-token authorize [YOUR_MINT_ADDRESS] mint --disable
Enter fullscreen mode Exit fullscreen mode

After this, the token was technically an NFT, but it had no identity.

No name.
No image.
No metadata.

It was just an on-chain asset waiting for more information.

What I built: metadata, collections, and extensions

The next step was adding identity.

With Token Extensions, metadata can live directly with the mint account instead of depending on a separate metadata account.

The metadata extension allowed me to attach:

  • Name
  • Symbol
  • Image URI
  • Attributes

The flow looked like this:

spl-token create-token \
  --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
  --enable-metadata \
  --decimals 0

spl-token initialize-metadata \
  [YOUR_MINT_ADDRESS] \
  "First Light" \
  "LIGHT" \
  [YOUR_METADATA_URI]
Enter fullscreen mode Exit fullscreen mode

Seeing the NFT appear in Solana Explorer with its own metadata was the moment it stopped feeling like a token experiment and started feeling like an actual NFT.

The next challenge was collections.

A real NFT usually belongs to something bigger. A collection is basically another mint that acts as the parent.

The Group extension creates the collection:

spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb create-token \
  --decimals 0 \
  --enable-group
Enter fullscreen mode Exit fullscreen mode

Then member NFTs reference that group using the Member extension:

spl-token initialize-member MEMBER_ONE_MINT COLLECTION_MINT
Enter fullscreen mode Exit fullscreen mode

Now the relationship exists fully on-chain:

Collection → NFT members

Similar to a database foreign key connecting two tables.

The surprising part: what was different from Web2

Coming from Web2 development, I expected NFTs to be mostly application logic.

A database stores metadata.
A backend verifies ownership.
A frontend renders the result.

Solana flips a lot of that thinking.

The blockchain itself becomes the source of truth.

The mint account contains the structure.
Extensions define additional capabilities.
Explorer tools can directly read and display the data.

I also found it interesting that metadata is not just a static image attached forever.

The update authority can modify fields:

spl-token update-metadata [MINT_ADDRESS] name "Field Notes"

spl-token update-metadata [MINT_ADDRESS] rarity legendary

spl-token update-metadata [MINT_ADDRESS] rarity --remove
Enter fullscreen mode Exit fullscreen mode

This felt very similar to updating a database record, except the change happens through a blockchain transaction.

What I would build next

After understanding the building blocks, the next step would be building an actual NFT application around them.

Some ideas:

  • A Flutter mobile app that creates and manages NFTs
  • An NFT dashboard that reads extensions directly from Solana
  • A creator platform where users mint collections without writing CLI commands
  • AI-generated NFTs with dynamic metadata updates

The biggest lesson from this week:

NFTs are not magic objects. They are carefully designed token structures with rules, ownership, metadata, and relationships.

Understanding the primitives makes the whole ecosystem easier to build on.

This post is part of #100DaysOfSolana. Follow along or jump in any day.

Beginner #DEV

Top comments (0)