Live $WRAITH token live on Nad.Fun CA0x7E8BDf7D262a6e4ff9302Af49F2CdB022B587777 Buy on nad.fun →
starting at the very top of the document with its box overlapping the header — and at equal z-index the later element in the DOM wins. main painted over the header and ate every click on it: the download button, the X link and the nav all looked dead while being perfectly good markup. */ main, footer { position: relative; z-index: 1; } header { z-index: 10; } .sheet { z-index: 20; } .wrap { width: min(1140px, 100% - 2.5rem); margin-inline: auto; } section { padding-block: clamp(5rem, 11vw, 9rem); } /* Anchor links land under a fixed header without this, so every nav click appeared to jump to the wrong place. */ section[id] { scroll-margin-top: 76px; } /* ============================================================== type */ h2 { font: 400 clamp(2.1rem, 5.4vw, 4rem)/0.98 var(--display); letter-spacing: -0.015em; text-transform: uppercase; text-wrap: balance; margin: 0 0 1.5rem; } h3 { font: 700 1.2rem/1.3 var(--sans); letter-spacing: -0.01em; margin: 0 0 .6rem; } p { max-width: 62ch; margin: 0 0 1rem; } .eyebrow { font: 600 .72rem/1 var(--mono); letter-spacing: .28em; text-transform: uppercase; color: var(--green); margin: 0 0 1.2rem; display: flex; align-items: center; gap: .8rem; } .eyebrow::after { content: ""; height: 1px; flex: 1; background: linear-gradient(90deg, var(--green-dim), transparent); } .lede { font-size: clamp(1.05rem, 1.9vw, 1.32rem); color: #A9C6B7; } /* ============================================================== header */ header { position: fixed; top: 0; left: 0; right: 0; display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .75rem clamp(1rem, 3vw, 2rem); background: rgba(4, 9, 6, 0.86); background: color-mix(in srgb, var(--void) 82%, transparent); backdrop-filter: blur(14px); border-bottom: 1px solid transparent; transition: border-color .3s ease, background .3s ease; } header.stuck { border-bottom-color: var(--edge); } header img { height: 34px; width: auto; display: block; } /* Below 860px the inline nav is replaced by a sheet, not deleted. The first build simply hid it, which left phones — most of the traffic for a link posted on X — with no navigation at all. */ .nav { display: none; gap: 1.6rem; } @media (min-width: 860px) { .nav { display: flex; } .menu-btn { display: none; } } .menu-btn { display: grid; place-items: center; width: 38px; height: 38px; background: none; border: 1px solid var(--edge); color: var(--bone); cursor: pointer; padding: 0; } .menu-btn:hover { border-color: var(--green-dim); color: var(--green); } .sheet { position: fixed; inset: 0; background: rgba(4, 9, 6, 0.97); display: grid; place-content: center; gap: 1.5rem; text-align: center; z-index: 20; opacity: 0; pointer-events: none; transition: opacity .25s ease; } .sheet.open { opacity: 1; pointer-events: auto; } .sheet a { color: var(--bone); text-decoration: none; font: 400 1.6rem/1 var(--display); text-transform: uppercase; letter-spacing: -0.02em; } .sheet a:hover { color: var(--green); } .nav a { color: var(--moss); text-decoration: none; font: 600 .8rem/1 var(--mono); letter-spacing: .12em; text-transform: uppercase; transition: color .2s ease; } .nav a:hover { color: var(--green); } .hdr-right { display: flex; align-items: center; gap: .75rem; } .xlink { display: grid; place-items: center; width: 38px; height: 38px; color: var(--moss); border: 1px solid var(--edge); transition: color .2s ease, border-color .2s ease, transform .2s ease; } .xlink:hover { color: var(--green); border-color: var(--green-dim); transform: translateY(-2px); } /* ============================================================== buttons */ .btn { position: relative; display: inline-grid; place-items: center; gap: .3rem; font: 700 .95rem/1 var(--sans); letter-spacing: .02em; text-transform: uppercase; text-decoration: none; padding: 1rem 1.7rem; color: var(--void); background: var(--green); border: 0; clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px); transition: transform .15s cubic-bezier(.3,1.4,.5,1), box-shadow .25s ease; } .btn:hover { transform: translateY(-3px) scale(1.02); box-shadow: 0 12px 40px -8px var(--green); } .btn.small { padding: .7rem 1.1rem; font-size: .78rem; } .btn.ghost { background: transparent; color: var(--green); box-shadow: inset 0 0 0 2px var(--green-dim); } .btn.ghost:hover { box-shadow: inset 0 0 0 2px var(--green), 0 12px 40px -14px var(--green); } .btn.huge { padding: 1.35rem 3rem; font-size: clamp(1.05rem, 2.2vw, 1.35rem); box-shadow: 0 0 60px -12px var(--green); animation: cta-breathe 3.6s ease-in-out infinite; } .btn.huge:hover { animation-play-state: paused; } @keyframes cta-breathe { 0%, 100% { box-shadow: 0 0 60px -14px var(--green); } 50% { box-shadow: 0 0 90px -8px var(--green); } } .btn-sub { font: 500 .68rem/1 var(--mono); letter-spacing: .14em; opacity: .74; } a:focus-visible, .btn:focus-visible { outline: 3px solid var(--green-hi); outline-offset: 4px; } /* ============================================================== hero */ .hero { min-height: 100svh; display: grid; place-items: center; text-align: center; padding-block: 7rem 4rem; } /* The hero token: large enough to lead, small enough that the headline and the download button are both above the fold on a laptop. */ .hero-coin { margin-bottom: .5rem; } .hero-coin .coin { width: min(300px, 62vw); } /* The mascot poster, closing the page above the FAQ. */ .mascot { width: min(900px, 94vw); height: auto; display: block; margin: 0 auto 3.5rem; filter: drop-shadow(0 0 80px #2FE38A33); } .tag { font: 400 clamp(2.6rem, 9vw, 6.5rem)/0.92 var(--display); letter-spacing: -0.02em; text-transform: uppercase; margin: 1.5rem 0 1rem; text-wrap: balance; } .tag em { font-style: normal; background: linear-gradient(100deg, var(--green-hi), var(--green) 40%, var(--sol-hi)); -webkit-background-clip: text; background-clip: text; color: transparent; } .cta-row { display: flex; flex-wrap: wrap; gap: .9rem; justify-content: center; margin-top: 2rem; } .dl-note { font: 500 .78rem/1.6 var(--mono); color: var(--moss); margin: 1.2rem auto 0; } /* loading bar + rotating phrase, carried over from the boot screen */ .bar { width: min(380px, 74vw); height: 4px; margin: 2.2rem auto .8rem; background: #10201800; box-shadow: inset 0 0 0 1px var(--edge); overflow: hidden; } .bar i { display: block; height: 100%; width: 0; background: linear-gradient(90deg, var(--green-dim), var(--green-hi)); animation: fill 3.6s cubic-bezier(.2,.8,.3,1) forwards; } @keyframes fill { to { width: 100%; } } #phrase { font: 500 .74rem/1 var(--mono); letter-spacing: .24em; text-transform: uppercase; color: var(--moss); min-height: 1em; } /* ============================================================== marquee */ .marquee { border-block: 1px solid var(--edge); background: rgba(10, 21, 15, 0.72); background: color-mix(in srgb, var(--panel) 70%, transparent); overflow: hidden; padding-block: .9rem; display: flex; } /* Two identical tracks side by side. One track animating to -100% scrolls itself off and leaves a blank gap before it loops; the second track is what occupies the screen while the first resets. */ .marquee div { display: flex; gap: 3rem; padding-right: 3rem; white-space: nowrap; flex: none; animation: slide 38s linear infinite; font: 700 .8rem/1 var(--mono); letter-spacing: .2em; text-transform: uppercase; color: var(--moss); } .marquee b { color: var(--green); font-weight: 700; } @keyframes slide { to { transform: translateX(-100%); } } /* ============================================================== reveal */ .rv { opacity: 0; transform: translateY(28px); transition: opacity .8s cubic-bezier(.2,.7,.3,1), transform .8s cubic-bezier(.2,.7,.3,1); } .rv.in { opacity: 1; transform: none; } /* ============================================================== panels */ .grid { display: grid; gap: 1.25rem; } @media (min-width: 780px) { .grid.three { grid-template-columns: repeat(3, 1fr); } } .cell { position: relative; background: rgba(10, 21, 15, 0.9); background: linear-gradient(160deg, color-mix(in srgb, var(--panel) 88%, transparent), transparent); border: 1px solid var(--edge); padding: 1.9rem; overflow: hidden; transition: border-color .3s ease, transform .3s ease; } .cell:hover { border-color: var(--green-dim); transform: translateY(-4px); } /* A hairline that lights along the top edge on hover — the panel reacting, rather than a whole card changing colour. */ .cell::before { content: ""; position: absolute; inset: 0 auto auto 0; height: 1px; width: 100%; background: linear-gradient(90deg, transparent, var(--green), transparent); transform: translateX(-100%); transition: transform .6s ease; } .cell:hover::before { transform: translateX(100%); } .step-n { font: 700 .7rem/1 var(--mono); letter-spacing: .22em; color: var(--green); display: block; margin-bottom: 1rem; } .code { background: #05100A; border: 1px solid var(--edge); padding: 1rem 1.1rem; overflow-x: auto; /* long commands scroll here, not the page */ margin: 1rem 0 0; } .code code { font: 500 .82rem/1.7 var(--mono); color: var(--green-hi); white-space: pre; } code { font: 500 .88em/1.4 var(--mono); color: var(--green-hi); background: #05100A; padding: .1em .35em; } /* ============================================================== reel */ .reel { width: 100%; max-width: 960px; display: block; margin: 3rem auto 0; border: 1px solid var(--edge); background: #000; box-shadow: 0 40px 120px -40px #2FE38A55; } .reel-cap { font: 500 .72rem/1.6 var(--mono); letter-spacing: .18em; text-transform: uppercase; color: var(--moss); text-align: center; margin: 1rem auto 0; } /* ============================================================== promos */ .promos { display: grid; gap: 1.25rem; margin-top: 3rem; } @media (min-width: 780px) { .promos { grid-template-columns: repeat(3, 1fr); } } .promos img { width: 100%; height: auto; display: block; border: 1px solid var(--edge); transition: transform .5s cubic-bezier(.2,.7,.3,1), box-shadow .5s ease; } .promos img:hover { transform: translateY(-8px) scale(1.015); box-shadow: 0 30px 80px -30px #2FE38A66; } /* ============================================================== coin */ .coin-stage { perspective: 1400px; display: grid; place-items: center; margin-bottom: 2.5rem; } /* A flat image spinning a full 360deg goes invisible edge-on twice a turn and shows a mirrored face for half of it. This tilts and floats instead: the coin reads as an object without ever presenting a back it does not have. */ .coin { width: min(230px, 55vw); animation: coin-float 7s ease-in-out infinite; transform-style: preserve-3d; filter: drop-shadow(0 0 50px #2FE38A55); } .coin img { width: 100%; height: auto; display: block; border-radius: 50%; } @keyframes coin-float { 0%, 100% { transform: rotateY(-16deg) rotateX(6deg) translateY(0); } 50% { transform: rotateY(16deg) rotateX(-4deg) translateY(-14px); } } /* ============================================================== modes */ .modes { display: grid; gap: 1.25rem; margin-top: 3rem; } @media (min-width: 780px) { .modes { grid-template-columns: 1fr 1fr; } } .mode { background: rgba(10, 21, 15, 0.92); background: linear-gradient(160deg, color-mix(in srgb, var(--panel) 90%, transparent), transparent); border: 1px solid var(--edge); padding: 2.2rem; } .mode h3 { font-size: 1.7rem; text-transform: uppercase; letter-spacing: -0.02em; } .price { font: 400 2.6rem/1 var(--display); letter-spacing: -0.04em; color: var(--green); margin: .3rem 0 1.4rem; text-transform: uppercase; } /* The unshipped mode reads as unshipped. Presenting it identically to the working one would be a promise the machine cannot keep today. */ .mode.soon { border-style: dashed; border-color: #24402F; } .mode.soon .price { color: var(--sol-hi); font-size: 2rem; } .mode.soon h3::after { content: "SOON"; font: 700 .58rem/1 var(--mono); letter-spacing: .2em; vertical-align: middle; margin-left: .8rem; padding: .4rem .55rem; border: 1px solid var(--sol); color: var(--sol-hi); } .mode ul { list-style: none; padding: 0; margin: 0; display: grid; gap: .7rem; } .mode li { display: flex; gap: .7rem; align-items: baseline; color: #A9C6B7; } .mode li::before { content: "▸"; color: var(--green-dim); flex: none; } /* ============================================================== faq */ details { border-bottom: 1px solid var(--edge); padding: 1.3rem 0; } summary { cursor: pointer; font: 700 1.08rem/1.35 var(--sans); list-style: none; display: flex; justify-content: space-between; gap: 1rem; transition: color .2s ease; } summary:hover { color: var(--green); } summary::-webkit-details-marker { display: none; } summary::after { content: "+"; color: var(--green); font-family: var(--mono); flex: none; } details[open] summary::after { content: "–"; } details p { margin: .9rem 0 0; color: #A9C6B7; } /* ============================================================== footer */ footer { border-top: 1px solid var(--edge); padding-block: 3.5rem; color: var(--moss); font-size: .9rem; } .warn { border: 1px solid var(--green-dim); background: #2FE38A0A; padding: 1.2rem 1.35rem; margin-bottom: 2.2rem; color: var(--bone); font-family: var(--mono); font-size: .82rem; line-height: 1.7; } @media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } .bar i { width: 100%; animation: none; } .btn, .btn.huge, .coin, .marquee div, .cell, .promos img { animation: none !important; transition: none !important; } .rv { opacity: 1; transform: none; transition: none; } }
Pump OS
Pump OS
LOADING BAGS

Boot into
the pump

An immutable OS stored on chain. Boot a clean machine off a USB stick — Phantom already installed, pump.fun already open. Trade. Pull the stick. It forgets you existed.

Flash it to any USB stick. Boot. That's the whole install.

The situation

You sign transactions on a computer
that runs a cracked game from 2019

Forty browser extensions. A "free" mod menu. That one PDF from Discord. Your seed phrase is in there somewhere, and so is everybody else's malware.

Nobody is auditing your daily driver. You just hope. Hope is not a security model — it's the thing people say right before the post that starts "guys I got drained".

Immutable by construction

The OS lives on chain.
Nobody can edit it. Not even us.

Pump-OS is not a file on a server that could be swapped out one quiet Tuesday. The system is published on chain, where it is permanent and public, and your stick only carries a loader and a fingerprint.

Checked before it runs

Every byte is verified against a fingerprint pinned on the stick before the system is allowed to start. One wrong byte and it refuses to boot. A tampered image cannot run — it can only fail loudly.

Nothing can rot it

There is no install to decay, no update that quietly changes what you trust, and no writable copy sitting on a disk waiting to be infected. The same verified system, assembled fresh, every single boot.

Nothing lives past power off

Everything runs in memory. Nothing is written down and nothing carries over, so the machine you switch on tomorrow is the same clean system you switched on today.

A clean system from start to finish. Not "cleaned" — clean, because it is built from scratch and checked against the chain every time you switch the machine on.

How it works

Three steps, one of which is trading

STEP 01

Plug it in

Any x86-64 laptop. Yours, a friend's, the sad one in the corner. Boot from USB.

STEP 02

Watch it build

A fresh operating system assembles itself in front of you, then checks itself against a fingerprint before it's allowed to run.

STEP 03

Ape responsibly*

Phantom's installed, pump.fun is the homepage. *Responsibly is doing enormous work in that sentence.

Nothing touches the host

The machine's own disk is never written to. Not a file, not a log, not a swap page. Its hard drive might as well not be plugged in.

Clean every single boot

The OS isn't sitting on the stick collecting damage. It's rebuilt from scratch each time, verified, then run.

Your keys stay yours

Non-custodial, obviously. We never see a key, a seed, or a balance. There is nowhere for us to see it from.

An actual boot, filmed start to finish. Not a mockup.

Boot into the pump Trade memecoins faster A trading OS for Solana

The part nobody expects

It's faster than the computer you already own

Not a marketing sentence. There is simply less machine in the way, and you feel it on every click.

It runs in RAM

Once verified, the whole system is copied into memory and runs from there. Not off the stick, not off a disk. Nothing you click is waiting on storage — because there isn't any.

It's a small Linux

A few hundred megabytes, total. Your desktop OS is measured in tens of gigabytes and most of it is not for you.

Nothing runs behind you

No antivirus mid-scan. No search indexer. No update service picking a fight during a launch. No telemetry taking a core. Just the browser.

Being honest about it: the browser is the same Chromium you already use, so a heavy page is still a heavy page. The difference is that nothing else on the machine is competing with it — and pulling a stick out of a laptop is a faster reset than any antivirus has ever managed.

Install

Two minutes, one USB stick

There is no installer and nothing to uninstall. You write one image to a stick and boot from it. The machine you write it on is not modified.

WINDOWS

Rufus

Open Rufus, pick the stick, select pump-os.img, hit START. Choose "Write in DD Image mode" if it asks.

MAC / LINUX

Balena Etcher

Open Etcher, select the image, select the stick, Flash. It handles the rest and verifies the write itself.

TERMINAL

dd

sudo dd if=pump-os.img of=/dev/sdX bs=4M status=progress conv=fsync

Check the letter twice. The wrong /dev/sdX overwrites the wrong disk, and dd will not ask you if you meant it.

Verify what you downloaded

This is an operating system you will hold keys in. Check that the file you got is the file we built — the hash is published at /download/SHA256SUMS.

# Windows (PowerShell)
Get-FileHash .\pump-os.img -Algorithm SHA256

# macOS / Linux
shasum -a 256 pump-os.img

If it does not match, delete it and download again. A mismatch means the file is damaged or it is not ours — and there is no third option worth risking a wallet on.

Then reboot and press the boot-menu key — usually F12, sometimes F11, ESC or F9 depending on the machine — and pick the USB stick.

Two ways to run it

Free. The one that remembers you is on the way

Burner

$0
  • Boots clean, forgets everything
  • Nothing written to the stick or the host
  • Import a wallet each session
  • No account, no email, no KYC, no nothing
  • This is the default and always will be

Saved

after bond
  • Your wallet is still there next boot
  • Wallet data only — no history, no cookies, no browsing
  • Encrypted on the machine before it goes anywhere
  • Because typing a seed phrase daily is how seeds leak
  • Not live yet. Switches on once the token bonds — the fees pay for the infrastructure, so you don't

Questions you were going to ask anyway

FAQ

Are you pump.fun?

No. Enormous fans, zero affiliation. Pump-OS is an independent project, not built by, endorsed by, or connected to pump.fun in any way. We just set it as the homepage, which is a thing anyone is allowed to do with a browser.

Is there a token?

Not yet. When there is, it launches on pump.fun like everything else — no presale, no whitelist, no private round, no "DM for allocation". It will be announced here first, and anything claiming otherwise before then is someone stealing from you.

Saved mode switches on once it bonds. The fees cover the infrastructure that stores your wallet, which is why you're not being charged for it.

Will you ever ask for my seed phrase?

Never. Not on this site, not in the OS, not in a DM, not "for verification". Nobody legitimate ever will. If anything claiming to be us asks for a seed phrase, it is not us and you are being robbed.

Does this make me a better trader?

Absolutely not. It makes you a harder target. Your entries remain entirely your own problem and, statistically, they are a problem.

What if I lose the stick?

Then someone finds a USB stick. There are no keys on it — the burner keeps nothing, and a saved wallet is encrypted with a passphrase that also isn't on the stick. Losing it costs you a USB stick.

Do I need to be technical?

You need to be able to plug in a USB and press a key at startup. If you've ever reinstalled Windows to make a game run, you're wildly overqualified.

Is it actually secure or is that just the pitch?

The honest version: a clean, throwaway machine removes a whole category of risk — the malware already living on your daily driver. It does not make you immune to approving a malicious transaction, and nothing can. You can still rug yourself. Most people do.