Trellis
OverviewPrimerLabReadiness checkDocs
§D · docs · how the tools work

Docs

How to use the lab and the readiness check, the exact scoring formula, what stays on your device, and what the tools deliberately do not do. For the cryptography itself, read the primer.

§01

Overview

Trellis has two tools and a primer. The lab creates throwaway keys in your browser, signs and verifies with Ed25519 and the NIST post-quantum signatures, runs X25519 and ML-KEM-768 side by side, and includes a Devnet panel that sends a real Ed25519-signed Solana transaction. The readiness check is a 15-question self-assessment that scores how prepared a Solana team is to change its cryptography.

§02

Using the lab

Signatures and key exchange, classical next to post-quantum, with keys that never leave the tab.

  1. 1
    Choose a scheme. Click a card. The strip below it shows the standard, the key and signature sizes against Ed25519, and the size of the smallest transfer if that scheme signed it. Switching scheme throws away any keys and signatures.
  2. 2
    Generate a keypair. Creates a key in memory and records how long that took. The public key is shown in full. The secret key is shown only as its first and last bytes and its length. New keypair replaces it and discard drops it.
  3. 3
    Sign. Edit the message and press Sign. The scheme signs the exact UTF-8 bytes; the signature appears in hex with its size and signing time.
  4. 4
    Verify, and try to cheat. Verify checks the signature against the signed message and times it. It then checks the same signature against the message with one character added. That second check must fail; the chip reads edited message rejected when it does, and turns red if an edited message were ever accepted.
Schemes in the lab
SchemeStandardPubkeySignatureIn the lab
Ed25519RFC 803232 B64 Bruns
ML-DSA-44FIPS 204 (Dilithium)1,312 B2,420 Bruns
ML-DSA-65FIPS 204 (Dilithium)1,952 B3,309 Bruns
ML-DSA-87FIPS 204 (Dilithium)2,592 B4,627 Bruns
SLH-DSA-SHA2-128fFIPS 205 (SPHINCS+)32 B17,088 Bruns
Falcon-512FIPS 206 (draft)897 B666 Bsize only

The runnable schemes use the open-source @noble/curves (Ed25519, X25519) and @noble/post-quantum (ML-DSA, SLH-DSA, ML-KEM) libraries, which have been independently audited.

The smallest-transfer figure. The lab starts from a real 183-byte Ed25519 transfer to self (the transaction the Devnet panel sends), swaps in the scheme's signature, and adds its public key minus 32 bytes, because a 32-byte address cannot double as a larger verification key. The result is compared with Solana's 1,232-byte cap. It is a floor: real transactions carry more accounts and data.

Key exchange. Exchange keys creates X25519 keypairs for Alice and Bob and derives the shared secret on both sides. Encapsulate creates an ML-KEM-768 keypair, wraps a fresh secret to the 1,184-byte encapsulation key (giving a 1,088-byte ciphertext) and unwraps it. Tamper ciphertext flips one random bit and unwraps again; because of implicit rejection the result is an unrelated secret, not an error. Once both have run, the hybrid box shows HKDF-SHA256 over the ML-KEM secret followed by the X25519 secret. TLS uses the same order but its own key schedule, so treat the hybrid box as an illustration.

Timings are single runs in your browser. Use them to compare schemes on one machine; they are not benchmarks.

§03

The Devnet panel

Follow one real classical transaction, the path a post-quantum migration has to replace.

  1. 1
    Create a Devnet keypair. Makes a new Ed25519 Solana keypair in memory and shows its address. A new key discards the old one for good.
  2. 2
    Verify on Devnet, no SOL needed. Signs the 183-byte transfer to self and asks a Devnet validator to simulate it with signature checking on. The validator verifies the Ed25519 signature, then stops because the key holds no SOL (AccountNotFound). A copy with one signature bit flipped is checked too and must come back SignatureFailure. Nothing is sent or stored on chain.
  3. 3
    Get Devnet SOL. The site's own Devnet faucet sends the key 0.002 SOL, enough for hundreds of transfers, and waits for confirmation. If that faucet is empty, the request falls back to the public Devnet faucet. Devnet SOL has no value. Each key is funded once.
  4. 4
    Send 100 lamports to self. Builds a System Program transfer from the keypair to itself, signs it in the browser, submits it to Devnet and waits for confirmation. You get an explorer link, the exact size in bytes, and the size the same transfer would be with ML-DSA-44.
  • Devnet only. Requests go through this site's small server proxy, which only forwards a short list of read, send and status calls to a Devnet RPC. The panel never touches mainnet and never asks for a wallet.
  • Throwaway keys. The keypair lives in tab memory and disappears on reload. Don't send anything of value to it.
  • Classical on purpose. It signs with Ed25519 because that is the only scheme Solana verifies for transaction signers today.
§04

How the check scores

The formula in full. The tables below are generated from the same code that scores your answers.

There are 15 multiple-choice questions in 5 areas. Each option is worth a fixed number of points, shown next to it as +n, and the weakest option in each question is worth 0. Every question in a step must be answered before moving on.

Areas, weights and maximum points
AreaQsMax ptsWeightWeighted maxShare
Signing surface
Where classical signatures hold your product up.
318×1.01821.1%
Key custody
How keys are created, held, rotated and recovered.
317×1.01720.0%
Long-lived secrets
What someone recording your traffic today could read later.
316×0.812.815.0%
Swap-ability
How cheaply you can change an algorithm.
317×1.220.423.9%
Plan and people
Who owns the move, and when it happens.
317×1.01720.0%
Total1585—85.2100%
  1. 1
    Area percent. Points earned in an area divided by that area's maximum, rounded. This is the bar on each area card, and it is not weighted.
  2. 2
    Overall score. Each area's points are multiplied by its weight and summed, divided by the weighted maximum (85.2) and rounded to a whole number out of 100. An area's real influence depends on both its weight and its point total; the share column shows the combined effect.
  3. 3
    Band. The overall score maps to one of five bands.
Bands
BandScoreRoughly means
Unmapped0–19No real preparation yet. Begin with an inventory of keys and signatures.
Mapped20–39The risk is understood, but little has been built or written down.
Building40–59Inventory and ownership exist, and agility work has started.
Hardening60–79Abstractions, rotation and a plan are mostly in place.
Swap-ready80–100Answers sit at or near the top option in every area.

Next moves are attached to particular answer options and listed after scoring for each one you picked. Export JSON downloads the timestamp, score, band, per-area breakdown, the option you picked for each question and the next moves. The file is generated in your browser.

Bands describe answers, not outcomes. “Swap-ready” means your self-reported practice scores well against these questions. It does not mean a product is quantum-resistant, and it does not change the fact that Solana transaction signatures are Ed25519 today.

§05

Privacy

  • Nothing is stored. Every key in the lab and the Devnet panel is created in your browser and held only in page memory: no local storage, no cookies, no server. A reload wipes it.
  • Nothing you type is sent. Messages, keys, signatures and check answers are never transmitted or logged. The site loads no analytics or tracking scripts.
  • The one network call you trigger. The Devnet panel sends the throwaway public key and, when you press send, the signed Devnet transaction to this site's proxy, which passes them to a Devnet RPC to fund the key, read its balance and submit the transaction. Both become public on Devnet like any other. The proxy logs nothing; the secret key never leaves your browser.
  • Ordinary hosting logs. Like any website, the host may keep standard request logs such as IP address and page. They contain nothing you type into the tools.
§06

Limits

  • For learning, not production. The lab demonstrates sizes and behaviour. Don't use its keys or code to protect anything of value; whatever you ship needs its own review.
  • Not an audit. The readiness check is self-reported and its questions simplify a complex topic. A high score opens a conversation, it does not certify anything.
  • No post-quantum transactions on Solana. Solana accepts only Ed25519 transaction signers today. The Devnet panel is classical because it has to be.
  • A floor, not a forecast. The smallest-transfer figure uses a minimal one-signer transfer. Real transactions are larger.
  • Browser timings. Single runs of JavaScript. Native implementations are much faster.
  • Devnet can be flaky. Devnet is a test network and is sometimes slow, and the site faucet can run dry between top-ups. Failures there are not failures of the lab.
  • No predictions. Nothing on Trellis estimates when a cryptographically relevant quantum computer will exist.
§07

Official addresses

The only official token and deployer addresses are the ones in the token panel on the overview page. Copy them from there, and compare every character of any address posted elsewhere.

These docs describe the tools. Nothing here or in the primer is financial advice.

Go to the token panel
§08

FAQ

Does Trellis make my wallet or program quantum-safe?
No. It measures and explains. Nothing here changes how your wallet, program or the Solana network signs anything, and today every Solana transaction signer is still Ed25519.
Can I load my own key or seed phrase into the lab?
No, on purpose. The lab only creates throwaway keys. Never paste a real seed phrase or private key into any website, this one included.
Why does the Devnet panel sign with Ed25519 instead of ML-DSA?
Because Ed25519 is the only signature Solana accepts for transaction signers. The panel shows the real path a migration would have to replace, and then works out how large the same transfer would be with ML-DSA-44.
Why is Falcon-512 marked size only?
Falcon's signer needs constant-time Gaussian sampling, which is hard to implement safely, and its standard (FIPS 206, FN-DSA) is not final yet. The lab shows its published sizes for comparison and will run it once a final standard and a reviewed implementation exist.
Why are my timings different from published benchmarks, or from one run to the next?
They are single runs of JavaScript in your browser, measured with performance.now(). JIT warm-up, power saving, other tabs and the browser's timer rounding all move them. Use them to compare schemes on one machine, not as benchmarks.
Is my readiness score saved anywhere?
No. Answers live in the page's memory and are gone when you reload. The JSON export is built in your browser and downloaded directly; it is never uploaded.
Where do the byte sizes come from?
From the standards: RFC 8032 for Ed25519, FIPS 203 for ML-KEM, FIPS 204 for ML-DSA, FIPS 205 for SLH-DSA and the FIPS 206 work for Falcon. The lab also prints the actual length of every key and signature it creates, which matches.
Is there a $TRELLIS token?
Yes. The contract address is in the token panel on the overview page, which is the only official source.
Want the why? The primer explains the cryptography behind every number here, chapter by chapter, with sources.