
wax + pixels. crayon art melted permanently into Solana — the first NFT protocol where the entire image lives on chain, minted in a single transaction.

this exact drawing is 3,082 bytes and lives inside a Solana account. not a link. not a hash. the drawing.
your NFT is probably a URL
The industry's little secret: most NFTs store a pointer on chain and keep the actual image on IPFS, Arweave, or somebody's web server — alive only as long as someone keeps paying for pins, gateways, and hosting. If that stops, your art becomes a broken image icon that you own very cryptographically.
| regular NFT | waxel | |
|---|---|---|
| what's on chain | a URL | the image itself |
| if IPFS unpins it | 🪦 broken image | still there |
| if the startup dies | 🪦 broken image | still there |
| in 100 years | good luck | still there |
If Solana is running, your waxel renders. That's the whole dependency list.
what changed: SIMD-0385
Since genesis, Solana transactions were capped at 1,232 bytes — room for a pointer, never a picture. v1 transactions raise the limit to 4,096 bytes. That one number changes what an NFT can even be: for the first time, an entire image fits inside a single transaction — so mint + scribble + seal ride together in one signature, one slot, and the pixels land inside the account itself.
the journey: pixels → chain, on mainnet, today
Everything below is a real run from scripts/demo.sh against Solana mainnet-beta, where the SIMD-0385 feature gate activated at epoch 1035 (slot 447,120,000).
- Draw.
art/build.mjsrenders waxel the weasel with a zero-dependency crayon engine — coloring-book outlines, waxy strokes, paper grain — and hand-encodes a 4-bit indexed PNG: 3,082 bytes. - Mainnet is a v1 world. Agave 4.2 carried the feature and it activated on mainnet-beta at epoch 1035, so
txv1aq4pp281K9um3tnPgkfX8UqtFT6wcVW3hNezGLLis live for everyone. - Deploy. The waxels program (Anchor v2, SBPF v3) lands on mainnet at
6WGNQ6jzy7TyEPHAQZzKTjoWeVqW9ciWKGtHpjpXRCFt. - Plug in the fridge. One-time protocol init — a 250-byte v1 transaction. No admin keys; the curator is decorative.
- Mint in ONE transaction.
mint + scribble(3,082 bytes) + sealbatched into a single v1 transaction — 3,418 bytes on the wire, well under the 4,096 cap. The image is now account data, sealed, immutable forever — account38smDoPBKfQ58pHTsghP4XxSbMy1KurZ1i1EDSu4aeRL, transaction27yc2Bk3…bPRt1RgU. - Prove it. The client reads the account back and hashes the bytes:
minted file: 38ebf2f985ae555e734fe245773fe84b9ffb75758a05cfc75afda864b60ccc94 chain bytes: 38ebf2f985ae555e734fe245773fe84b9ffb75758a05cfc75afda864b60ccc94 ✓ identical. the drawing IS the account.
Then set_pfp hangs the weasel on the fridge door: a ["pfp", wallet] PDA any wallet or explorer can resolve to raw pixels. No metadata server, no CDN, no link rot.
the fridge gallery
Eight waxels minted on mainnet — each one a complete image inside its own account, each minted in a single v1 transaction. See them served live from the chain →

3,082 bytes on chain · 3,418-byte v1 tx

671 bytes on chain · 1,007-byte v1 tx

613 bytes on chain · 949-byte v1 tx

622 bytes on chain · 958-byte v1 tx

752 bytes on chain · 1,088-byte v1 tx

644 bytes on chain · 980-byte v1 tx

758 bytes on chain · 1,094-byte v1 tx

516 bytes on chain · 852-byte v1 tx
the protocol, in crayon
mint | pin a fresh 4,096-byte canvas to the fridge |
scribble | crayon bytes onto it — the whole image at once on v1 |
seal | melt the wax. immutable forever — no instruction can ever write to a sealed image |
give | hand your drawing to a friend |
set_pfp | hang it on the fridge door — on-chain pfp registry |
$WAXEL
AN8X2obouFLi9meq556k2crtDhVDfeSUPRMu8hiWAXEL
$WAXEL is the protocol token. The mainnet release ships interswapability between NFT and token, 404-style: melt a waxel into fungible $WAXEL, or crystallize $WAXEL back into a waxel. Two states of the same wax.
live on mainnet
SIMD-0385 activated on mainnet-beta at epoch 1035, and waxels shipped the same day — same program, same client, same weasel that ran on localnet, because the program never parses transactions and doesn't care which version carried its instructions. Program 6WGNQ6jzy7TyEPHAQZzKTjoWeVqW9ciWKGtHpjpXRCFt · fridge GtG657SfcA6JAzxZZPaGQE3f72vjPhR2Dw1KzUh8HCYq.
Legacy 1,232-byte transactions can still mint a waxel in a few strokes; v1 just makes it one. Browse every launch transaction and the live gallery →