Index funds for
Solana memecoins
Pick a basket, set a weighting rule, deposit SOL. Pump Index sizes every buy, then rebalances back to target every day — trimming winners, topping up the rest.
Dry-run mode is on by default. Your keys never touch the browser.
Pump Blue Chips · market cap · cap 30%
10.482 SOL
Unrealised P&L
+0.482 SOL · +4.82%
Curated baskets
Four indexes ship with the app
Or build your own from any Solana token — up to 50 per index, with the same weighting engine and daily rebalancing.

Pump Blue Chips
10 tokensThe largest pump.fun graduates, market-cap weighted with a 30% cap on any one token.

Pump AI Agents
4 tokensAgent and framework tokens. √ market cap weighting compresses the spread.

Pump Zoo
4 tokensAnimal coins, equal weighted. Every token holds 1/n regardless of size.

Pump Degen Small Caps
4 tokensThe far end of the curve. Highest variance, rebalanced hardest.
Four building blocks
Every decision is a rule, not a judgement call
The index
A named list of token mints. Four curated baskets, or build your own from any Solana token — up to 50.
Blue Chips · AI Agents · Zoo · Degen Small Caps
The weighting rule
Market cap, √ market cap, equal weight, or custom percentages you type yourself.
40 / 20 / 20 / 10 / 5 / 5
The max-weight cap
Stops one token swallowing the index. PUMP would be ~65% of Blue Chips; the cap clips it to 30% and spreads the excess.
Default 30% · ignored for custom weights
The band, scaled to target
A band is a share of the target, not a flat number, so a 20% position and a 5% position trigger on the same relative move. Breaches trade back to the band edge, not the target — less turnover, no oscillation around the trigger.
Default 40% of target · floor 3 points · edge trades on
The cycle
From price feed to signed swap
Fetch live prices
All pools per token from DexScreener, batched 30 mints per request.
Keep only trusted quotes
SOL, USDC and USDT-quoted pools only. Exotic quote pools derive price through another token — that chain breaks.
Take the median
Across ~23 trusted PUMP pools all near $0.00181, one 5,000× outlier can't move the answer.
Size the orders
Weights are capped, normalised to 100%, converted to SOL, and dust below 0.02 SOL is re-spread.
Rebalance daily
A minute loop watches for UTC day rollover. Overweight sells first — the sells fund the buys.
Book the P&L
Cost basis is retired pro-rata per token, so realised profit stays correct after a full exit.
The rebalance queue
Sells before buys, because the sells fund the buys
A doubled PNUT position went from 20% to 29% of the basket, past its 8-point band. It's trimmed back to the band edge at 28%, not all the way to 20% — and the proceeds fund the buys. Every leg is quoted live before you tick it, and legs that cost more than the ceiling can't be ticked at all.
- Plans are marked consumed before the first swap goes out — a crash can't replay the queue.
- One execution per index at a time; concurrent attempts are rejected.
- Every order's outcome is recorded before anything else can throw.
PNUT
overweight 8.9%
FARTCOIN
underweight 4.0%
BILLY
underweight 3.0%
MICHI
underweight 1.9%
Phantom mode
Connect Phantom, swap in one click.
Each order is built as a real Jupiter swap, signed in Phantom and confirmed on-chain. Sells run before buys, slippage is your setting, and every confirmed swap books itself into your holdings and cost basis.
Manual mode
No wallet connected.
Every order becomes a prefilled Jupiter link. Copy the amount, swap wherever you like, tick it off, press Apply. Your keys never leave your wallet and the app can't move funds on its own.
Cost gate
On by every queue.
Check live costs pulls a fresh Jupiter quote per leg. Anything over your impact ceiling can't be swapped or ticked — it waits for the next cycle.
Self-hosted · no accounts
Run it on your own machine, with your own keys
React and Vite on the front, a small Express server that owns all state and does all the maths. The order queue is built server-side — the client can only flip a filled flag.
36
tests covering bands, orders and cost basis
1
JSON state file, written atomically
60s
scheduler loop watching for UTC rollover
Questions
Before you deposit
How is P&L calculated?+
Per token, not per portfolio. Sell a quarter of a 10 SOL position for 3 SOL and a quarter of the book cost — 2.5 SOL — is retired, leaving 7.5 SOL of basis and banking +0.5 SOL realised. Realised P&L stays on screen after a full exit, which is exactly when it matters.
Can two indexes claim the same tokens?+
No. Curated baskets deliberately overlap — BILLY and MICHI sit in two, ZEREBRO and PIPPIN in two others. One wallet backs all of them, so a shared balance is split proportionally across every index claiming it instead of being double-counted.
What if a token can't be priced?+
It's retried against its full pool list. If it still has no SOL, USDC or USDT-quoted pool, it is dropped rather than priced on unverifiable data, and the UI tells you it was excluded.
How do I build my own index?+
One search box handles a name or ticker (fuzzy search), a single contract address (exact match), or many addresses pasted at once. Every result shows the truncated mint and its DEX, because copycats with inflated stats rank above the real token.
How is the API secured?+
It binds to localhost by default and refuses to start when exposed without a 16+ character access key. Every route needs a bearer token compared in constant time, only allow-listed origins may call it, and the wallet key lives in a .env file that never reaches the browser.
What does it deliberately not do?+
It doesn't pick tokens for you, doesn't model slippage or fees in its estimates, and doesn't protect you from the asset class. It's a calculator and an execution queue — not advice.