Metaplex Core
Metaplex Core is the modern Solana NFT standard: each asset lives in a single Asset account with optional plugins (royalties, attributes, collection linking). Lower account count means lower rent and simpler mental model than legacy Token Metadata.
Recipe
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { create } from "@metaplex-foundation/mpl-core";
const umi = createUmi("https://api.devnet.solana.com");
// create(umi, { asset, name, uri, ... }).sendAndConfirm(umi)// On-chain: validate Core asset owner via mpl-core account layout in custom programs
pub const MPL_CORE: Pubkey = anchor_lang::solana_program::pubkey!("CoREENxT6tW1HoK8yfYWXSzaXUcGUimvH2vQJ55jEo");When to reach for this:
- New NFT collections in 2026
- 1/1 art and generative collections without mass compression
- Plugins for royalties, attributes, and permanent transfer rules
- Integrations with marketplaces supporting Core
Working Example
import { createUmi } from "@metaplex-foundation/umi-bundle-defaults";
import { mplCore } from "@metaplex-foundation/mpl-core";
import { generateSigner, keypairIdentity } from "@metaplex-foundation/umi";
import { create, fetchAsset } from "@metaplex-foundation/mpl-core";
const umi = createUmi("https://api.devnet.solana.com").use(mplCore());
const payer = generateSigner(umi);
umi.use(keypairIdentity(payer));
const asset = generateSigner(umi);
await create(umi, {
asset,
name: "Core Demo",
uri: "https://arweave.net/example-metadata.json",
}).sendAndConfirm(umi);
const fetched = await fetchAsset(umi, asset.publicKey);
console.log(fetched.name, fetched.uri);What this demonstrates:
- Asset keypair address is the NFT identifier users see
uripoints to off-chain JSON metadata- Umi SDK handles instruction building and signing
Deep Dive
How It Works
- Program ID:
CoREENxT6tW1HoK8yfYWXSzaXUcGUimvH2vQJ55jEo - Asset account holds name, uri, update authority, owner
- Plugins extend behavior:
Royalties,Attributes,PermanentFreeze, etc. - Transfers update
ownerfield on Asset account (not SPL token account)
Core vs Token Metadata
| Aspect | Core | Token Metadata |
|---|---|---|
| Accounts per NFT | 1 (+ collection) | 3+ |
| Program | mpl-core | token-metadata |
| Mass scale | Moderate | Moderate |
| Legacy market support | Growing | Extensive |
TypeScript Notes
// Collection: create Collection account, then mint assets with collection plugin
// Always pin metadata to Arweave/IPFS before setting uriGotchas
- Treating Core asset as SPL mint - wrong transfer path. Fix: use mpl-core transfer instructions.
- Mutable URI without plan - metadata hijack if update authority compromised. Fix: revoke update authority after reveal.
- Missing collection plugin - assets not grouped in DAS/marketplaces. Fix: attach verified collection at mint.
- Assuming all marketplaces list Core - verify target venues before launch.
- Skipping DAS verification - custom parsers lag Core schema. Fix: test
getAsseton provider DAS.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
| Token Metadata | Legacy marketplace requirement | Greenfield Core-ready stack |
| cNFT (Bubblegum) | Millions of items | Full on-chain 1/1 art |
| Token-2022 NFT-like mint | Minimal tooling | Rich NFT marketplace features |
FAQs
What is Metaplex Core?
Single-account NFT standard with plugin system replacing legacy Token Metadata for new projects.
What is the program ID?
CoREENxT6tW1HoK8yfYWXSzaXUcGUimvH2vQJ55jEo.
How do users hold Core NFTs?
Asset account owner field points to wallet pubkey - no separate SPL token account required.
What are plugins?
Optional extensions on asset: royalties, attributes, freeze, collection membership, etc.
How to transfer?
mpl-core transfer instruction via Umi or manual instruction building.
Does DAS support Core?
Yes - getAsset returns Core assets with interface: MplCoreAsset style fields.
Update authority?
Can change name/uri while retained - revoke for immutability after reveal.
Royalties on Core?
Royalties plugin sets basis points; marketplaces enforce per their rules.
Devnet testing?
Same program on devnet; fund payer with devnet SOL before create.
Anchor integration?
Custom programs read Asset account data or CPI mpl-core for composed flows.
Collection account?
Separate Collection account groups assets via collection plugin.
Migration from Token Metadata?
New mint on Core - no automatic upgrade; snapshot holders and re-issue if needed.
Related
- NFT Basics on Solana - standards overview
- Collections & Verification - grouping
- Reading NFTs (DAS API) - fetch assets
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.