Metaplex NFT recipe

sunscreen scaffold metaplex-nft <NAME> --program <PROGRAM> [FLAGS]

Generates a Metaplex Token Metadata-compatible NFT mint slice.

Flags

FlagDefaultDescription
--program <name>requiredwhich program to scaffold into
--collection <name>noneoptional collection account name
--frontend-hookoffgenerate matching React/Solid hook
--dry-runoffprint plan only
--jsonoffsummary on stdout
--forceoffoverwrite marker content even on conflict

Generated files

For scaffold metaplex-nft MyNft --program app:

PathStatus
programs/app/src/state/my_nft.rscreated
programs/app/src/instructions/mint_my_nft.rscreated
programs/app/src/instructions/mod.rspatched
programs/app/src/lib.rspatched (dispatch)
programs/app/src/events.rspatched
programs/app/src/errors.rspatched
tests/my_nft.spec.tscreated

Generated instruction: mint_my_nft

Accounts:

[
  authority: Signer,
  mint: UncheckedAccount (init),
  token_account: Account<TokenAccount> (init_if_needed),
  metadata: UncheckedAccount (metaplex pda),
  master_edition: UncheckedAccount (metaplex pda),
  ... + system_program, token_program, associated_token_program, rent
]

Effect:

  1. Creates a mint with 0 decimals (NFT convention).
  2. Mints 1 token to the authority's associated token account.
  3. CPI to Metaplex Token Metadata to create metadata + master_edition.
  4. Emits NftMinted { mint, owner, uri }.

Generated events

  • NftMinted { mint, owner, uri }

Generated errors

  • MetadataUriTooLong
  • MintAuthorityMismatch

Frontend hook (--frontend-hook)

useMintMyNft({ authority, uri, name, symbol });

Builds, signs, and submits the transaction. Invalidates the useMyNftCollection query on success.

Notes

  • The recipe uses Metaplex Token Metadata via CPI. Your Cargo.toml gets mpl-token-metadata added as a dep on first scaffold.
  • --collection wires the minted NFT into a Metaplex collection account.

Exit codes

CodeWhen
0success
4preflight conflict
5not in a workspace