
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 localnet, today
Everything below is a real run from scripts/demo.sh against a local Agave 4.2 validator with the SIMD-0385 feature gate active from slot 0.
- 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. - Boot a v1 world.
solana-test-validator(Agave 4.2) activates every feature at genesis, sotxv1aq4pp281K9um3tnPgkfX8UqtFT6wcVW3hNezGLLis live from slot 0. - Deploy. The waxels program (Anchor v2, SBPF v3) lands 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. - 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
Four waxels minted in the demo — each one a complete image inside its own account, each minted in a single v1 transaction.

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
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
38ZUxkPYsbpUs8jesMNZfiFZrjTMfLtzaJe8qC5WAXEL
$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.
the road to mainnet
Everything you just saw runs on localnet today because Agave 4.2 already carries the v1 transaction feature behind gate txv1aq4pp281K9um3tnPgkfX8UqtFT6wcVW3hNezGLL. Feature gates roll out the way all Solana upgrades do: testnet → devnet → mainnet-beta activation.
The program has no localnet-only tricks — it never parses transactions, so it doesn't care which version carried its instructions. The client already speaks wire-format v1. The moment the gate activates on mainnet-beta, waxels ships — same program, same client, same weasel. Until then: legacy 1,232-byte transactions can still mint waxels in a few strokes; v1 just makes it one.