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 drift threshold
Decides when a difference is worth trading, so tiny price wiggles don't burn more in swap fees than they correct.
Default 2%
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. The excess is sold once, and the proceeds fund three buys that total exactly the same amount. Anything inside the 2% drift threshold is left alone.
- 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%
Manual mode
No wallet key configured.
Every order becomes a prefilled Jupiter link. Copy the amount, sign in your own wallet, tick it off, press Apply. Your key never leaves your wallet and nothing the app runs can move funds.
Automated mode
Dedicated wallet key on your server.
The server quotes Jupiter, signs, sends, and polls the signature until Solana confirms. Sells run first and sequentially, slippage capped at 1%.
Dry run
On by default, stays on.
Real Jupiter quotes for every order, logged in full, signed and sent for none of them. Watch several complete daily cycles before you turn it off.
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.
23
tests covering weighting, 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.