Copy with Context Test

Copy with Context Feature Test

This page demonstrates the new "Copy with Context" feature that allows users to copy either just the code snippet or the full runnable code with imports and setup.

How It Works

Look for the copy controls in the top-right of each code block:

  1. Snippet - Copies just the main code (the part you see)
  2. With imports - Copies full runnable code including:
    • Import statements
    • Setup/initialization code
    • Main code
    • Output/logging code

Try both modes and paste the result to see the difference!


Example 1: Create an Asset

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4
5// Initialize UMI
6const umi = createUmi('https://api.devnet.solana.com')
7 .use(mplCore())
8
9// Create a new NFT asset
10const asset = await create(umi, {
11 name: 'My NFT',
12 uri: 'https://example.com/metadata.json'
13}).sendAndConfirm(umi)
14
15console.log('Asset created:', asset.publicKey)

What you get when copying:

Snippet mode (just the main code):

// Create a new NFT asset
const asset = await create(umi, {
name: 'My NFT',
uri: 'https://example.com/metadata.json'
}).sendAndConfirm(umi)

With imports mode (full runnable code):

import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
import { create } from '@metaplex-foundation/mpl-core'
import { mplCore } from '@metaplex-foundation/mpl-core'
// Initialize UMI
const umi = createUmi('https://api.devnet.solana.com')
.use(mplCore())
// Create a new NFT asset
const asset = await create(umi, {
name: 'My NFT',
uri: 'https://example.com/metadata.json'
}).sendAndConfirm(umi)
console.log('Asset created:', asset.publicKey)

Example 2: Transfer an Asset

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { transfer } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4import { publicKey } from '@metaplex-foundation/umi'
5
6// Initialize UMI
7const umi = createUmi('https://api.devnet.solana.com')
8 .use(mplCore())
9
10// Transfer an existing NFT asset to a new owner
11const result = await transfer(umi, {
12 asset: publicKey('AssetAddressHere...'),
13 newOwner: publicKey('RecipientAddressHere...'),
14}).sendAndConfirm(umi)
15
16console.log('Asset transferred:', result.signature)

Only JavaScript Frameworks

1import { createUmi } from '@metaplex-foundation/umi-bundle-defaults'
2import { create } from '@metaplex-foundation/mpl-core'
3import { mplCore } from '@metaplex-foundation/mpl-core'
4
5// Initialize UMI
6const umi = createUmi('https://api.devnet.solana.com')
7 .use(mplCore())
8
9// Create a new NFT asset
10const asset = await create(umi, {
11 name: 'My NFT',
12 uri: 'https://example.com/metadata.json'
13}).sendAndConfirm(umi)
14
15console.log('Asset created:', asset.publicKey)

Only Rust Frameworks

1use mpl_core::instructions::TransferV1;
2use solana_sdk::{pubkey::Pubkey, signer::Signer};
3
4// Asset and recipient addresses
5let asset = Pubkey::from_str("AssetAddressHere...").unwrap();
6let new_owner = Pubkey::from_str("RecipientAddressHere...").unwrap();
7
8// Transfer an existing NFT asset to a new owner
9let transfer_ix = TransferV1 {
10 asset,
11 new_owner,
12 ..Default::default()
13};
14
15let instruction = transfer_ix.instruction();
16
17println!("Transfer instruction created");

Benefits

Beginner-friendly - Full context makes copy-paste work immediately Flexible - Advanced users can still copy just the snippet Time-saving - No need to hunt for imports and setup Learning aid - Seeing full context helps understanding

User Story

Before: Copy code snippet → Paste → Error: umi is not defined → Hunt through docs for imports → Hunt for setup → Finally works

After: Toggle "With imports" → Copy → Paste → Works immediately! ✨