Introduction
Overview
Last updated February 24, 2026
Summary
Bubblegum V2 (MPL-Bubblegum) is the Metaplex program for creating and managing compressed NFTs on Solana. It stores NFT data as hashed leaves in on-chain merkle trees, reducing minting costs by orders of magnitude compared to traditional NFTs.
- Mint millions of cNFTs for a fraction of the cost of standard Solana NFTs (~0.00001 SOL per cNFT in large trees)
- New in V2: freeze/thaw, soulbound NFTs, MPL-Core collections, royalty enforcement, permanent delegates
- Requires an RPC provider supporting the Metaplex DAS API for indexing and fetching cNFT data
- Uses LeafSchemaV2 with V2 Merkle Trees — not backward-compatible with V1 trees
Bubblegum V2 is the latest iteration of the Metaplex Protocol program for creating and interacting with compressed NFTs (cNFTs) on Solana. Built for large-scale operations, Bubblegum V2 preserves all the benefits of the original Bubblegum while introducing powerful new features. Compressed NFTs make it possible to scale the creation of NFTs to new orders of magnitude by rethinking the way we store data onchain.
Please note that certain Bubblegum V2 instructions will require protocol fees. Please review the Protocol Fees page for up-to-date information.
Getting Started
Find the language or library of your choice and get started with compressed NFTs.
API reference
Looking for something specific? Have a peak at our API References and find your answer.
What's New in Bubblegum V2
Bubblegum V2 builds on the foundation of the original Bubblegum program while introducing several powerful new features:
- Freeze and Thaw Functionality: Two types of freeze/thaw are available: 1) cNFT owners can delegate freeze authority to a leaf delegate for asset-level control, providing flexibility for various use cases such as preventing transfers during specific events or implementing vesting mechanics. 2) If the
PermanentFreezeDelegateplugin is enabled on collection creation, project creators can freeze and thaw cNFTs via the permanent freeze delegate for collection-wide control - MPL-Core Collections Integration: Bubblegum V2 NFTs can now be added to MPL-Core collections instead of being limited to token metadata collections, allowing for greater flexibility and integration with the broader Metaplex ecosystem.
- Royalty Enforcement: Since Bubblegum V2 is using MPL-Core Collections, it is possible to enforce royalties on cNFTs e.g. using a
ProgramDenyList. - Soulbound NFTs: cNFTs can now be made soulbound (non-transferrable), permanently binding them to their owner's wallet. This is perfect for credentials, proof of attendance, identity verification, and more. It requires the
PermanentFreezeDelegateplugin to be enabled when creating the collection. - Allow Permanent Transfer: The permanent transfer delegate can now transfer the cNFT to a new owner without interaction of the leaf owner if the
PermanentTransferDelegateplugin is enabled on the collection. - Burning by Authority: If the Collection has the
PermanentBurnDelegateplugin enabled, the delegate could burn the NFT without the leaf owner's signature. - Attributes: Attribute Data on collection level can be added using the MPL-Core
attributesplugin.
To allow the above features to work, Bubblegum V2 introduces a new leaf schema (LeafSchemaV2). To learn more what leaves are used in Bubblegum V2, check out the following sections.
LeafSchemaV2
Bubblegum V2 introduces a new leaf schema (LeafSchemaV2) which supports the additional features while maintaining backward compatibility. This new schema allows for:
- Integration with MPL-Core collections instead of traditional token metadata
- Supporting freezing/thawing functionality
- Enabling soulbound capabilities Projects can choose to use the original leaf Schema by using Legacy Bubblegum or the new v2 schema with Bubblegum V2 depending on their requirements.
To use the new LeafSchemaV2, a V2 Merkle Tree has to be used that needs to be created using the createTreeV2 instruction. V1 Merkle Trees do not support the new leaf schema and V2 Merkle Trees are not compatible with V1 leaves.
Merkle Trees, leaves and proofs
Compressed NFTs only exist in the context of a Merkle Tree. We explain in a dedicated advanced guide what Merkle Trees are but, for the sake of this overview, you can think of a Merkle Tree as a collection of hashes that we call Leaves. Each Leaf is obtained by hashing the data of the compressed NFT.
For each Leaf in the Merkle Tree, one can provide a list of hashes — called a Proof — that enables anyone to verify that the given Leaf is part of that tree. Whenever a compressed NFT is updated or transferred, its associated Leaf will change and so will its Proof.
As such, Merkle Trees act as an onchain structure that allows anyone to verify a given compressed NFT exist. They do this without storing any NFT data which makes them so scalable.
Which brings us to an important question: where is the NFT data stored?
Metaplex DAS API
When we mint a new compressed NFT, its data is hashed and added as a new Leaf in a Merkle Tree. But there's more. Additionally, the entire NFT data is stored in the transaction that created the compressed NFT. Similarly, when a compressed NFT is updated, its updated data is, once again, saved on the transaction as a changelog. So, while there aren't any accounts keeping track of that data, one can look at all previous transactions in the ledger and find that information.
Crawling through millions of transactions every time just to fetch the data of one NFT is admittedly not the best user experience. Therefore, compressed NFTs rely on some RPCs to index that information in real time to abstract this away from the end-user. We call the resulting RPC API, which enables fetching compressed NFTs, the Metaplex DAS API.
Note that not all RPCs support the DAS API. As such, you may be interested in the "Metaplex DAS API RPCs" page to select an appropriate RPC when using compressed NFTs in your application.
We talk about this in more detail in our advanced "Storing and indexing NFT data" guide.
Features
Even though NFT data does not live inside accounts, it is still possible to execute a variety of operations on compressed NFTs. This is possible by requesting the current NFT data and ensuring its hashed Leaf is valid on the Merkle Tree. As such, the following operations can be performed on compressed NFTs:
- Mint a cNFT with or without an associated collection.
- Transfer a cNFT.
- Update the data or collection of a cNFT.
- Burn a cNFT.
- Delegate a cNFT.
- Verify and unverify a cNFT collection.
- Verify and unverify the creators of a cNFT.
- Freeze and thaw a cNFT.
- Make a cNFT soulbound.
Quick Reference
| Item | Value |
|---|---|
| Program | MPL-Bubblegum (BGUMAp9Gq7iTEuizy4pqaxsTyUCBK68MDfK752saRPUY) |
| Compression Program | MPL Account Compression (fork of SPL Account Compression) |
| Key Accounts | Merkle Tree Account (owned by Compression Program), TreeConfigV2 (PDA owned by Bubblegum) |
| Leaf Schema | LeafSchemaV2 (id, owner, delegate, nonce, data_hash, creator_hash, collection_hash, asset_data_hash, flags) |
| JS SDK | @metaplex-foundation/mpl-bubblegum (npm) |
| Rust Crate | mpl-bubblegum (crates.io) |
| Source | GitHub |
Next steps
Now that we know how compressed NFTs work at a high level and what's new in Bubblegum V2, we recommend checking out our Getting Started page which enumerates the various languages/frameworks that one can use to interact with compressed NFTs. Afterward, the various feature pages can be used to learn more about the specific operations that can be performed on cNFTs. Finally, advanced guides are also available to deepen your knowledge of cNFTs and Merkle Trees.
FAQ
What is Bubblegum V2?
Bubblegum V2 is the latest Metaplex program for creating and managing compressed NFTs (cNFTs) on Solana. It uses merkle trees to store NFT data at a fraction of the cost of traditional NFTs, while adding new features like freeze/thaw, soulbound NFTs, and MPL-Core collection integration.
How much does it cost to mint a compressed NFT?
Costs depend on the merkle tree size. A tree holding ~1 million cNFTs costs approximately 8.5 SOL in rent, making each cNFT roughly 0.00001 SOL. A smaller tree of 16,384 cNFTs costs ~0.34 SOL. These costs are orders of magnitude cheaper than standard Solana NFTs (~0.0029 SOL per Core NFT).
What is the difference between Bubblegum V1 and V2?
Bubblegum V2 introduces freeze/thaw functionality, soulbound (non-transferable) NFTs, MPL-Core collection integration, royalty enforcement, permanent delegates (transfer, freeze, burn), and a new LeafSchemaV2 with collection hash, asset data hash, and flags fields.
Do I need a special RPC to use compressed NFTs?
Yes. Compressed NFTs require an RPC provider that supports the Metaplex DAS API for indexing and fetching cNFT data. Not all RPCs support this. See the RPC Providers page for a list of compatible providers.
Can compressed NFTs be used in collections?
Yes. Bubblegum V2 uses MPL-Core collections to group cNFTs. Collections enable features like royalty enforcement, freeze delegates, and soulbound NFTs. The collection must have the BubblegumV2 plugin enabled.
What is a merkle tree in the context of cNFTs?
A merkle tree is an on-chain data structure that stores hashes (called leaves) of cNFT data. It enables cryptographic verification of NFT ownership and data integrity without storing the full NFT data in on-chain accounts, which is what makes cNFTs so cost-effective.
Glossary
| Term | Definition |
|---|---|
| cNFT | Compressed NFT — an NFT stored as a hashed leaf in a merkle tree rather than in a dedicated on-chain account |
| Merkle Tree | A binary tree data structure where each leaf is a hash of data and each parent node is a hash of its children, enabling efficient cryptographic verification |
| Leaf | A leaf node in the merkle tree representing one compressed NFT's hashed data (LeafSchemaV2) |
| Proof | A list of sibling hashes along the path from a leaf to the root, used to verify a cNFT exists in the tree |
| Canopy | Cached upper nodes of the merkle tree stored on-chain to reduce proof sizes in transactions |
| DAS API | Digital Asset Standard API — an RPC extension for indexing and fetching compressed NFT data from transaction history |
| LeafSchemaV2 | The V2 data structure containing id, owner, delegate, nonce, data hash, creator hash, collection hash, asset data hash, and flags |
| TreeConfig | A PDA account derived from the merkle tree address that stores Bubblegum-specific configuration (creator, delegate, capacity, version) |
| Bubblegum Tree | The combination of a Merkle Tree account and its associated TreeConfigV2 PDA account |
| Soulbound | A non-transferable cNFT permanently bound to its owner's wallet, created via the permanent freeze delegate |
