A public, live view of where SOL stake sits and where it is moving — native and liquid.
Every figure is read from the Solana chain, or from the stake pools' own on-chain lists, at request time. staked.so answers three questions no existing surface answers well: what just moved, who is quietly gaining or bleeding stake, and who actually stands behind a given validator.
Published by Hubra, which operates a Solana validator — its validator appears here exactly like every other one, with no special treatment. Live at staked.so.
- The real native/liquid split. Summing liquid-staking-token TVL puts liquid staking
at ~15% of Solana. That figure counts pool reserve SOL — deposited but delegated to
nobody, and therefore not staked. Reading what pools have actually delegated, from their
on-chain validator lists, puts liquid staking nearer 12%. Full working at
/distribution. - Stake in flight, per validator. Activating and deactivating stake, summed from a validator's own stake accounts — a figure no API reports per validator.
- The validator ↔ LST wire, both ways. Which tokens route stake to a given validator, and which validators sit behind a given token, including multi-validator pools.
- Search-first interface — arrive, type, land. Validators, LSTs, and stake accounts over an on-chain-derived index.
- Validator pages — metadata, stake map, stake history, APY, staker table, live stake states (active / activating / deactivating / inactive), and the wire to associated LSTs.
- LST pages — the liquid-staking catalogue backed by Sanctum, with per-token detail.
- Stake accounts, epochs, blocks — direct on-chain reads.
- Stake-movement feed — a live band of large stake changes.
- Agent-first / crawlable — every entity page has a plain-markdown mirror (
.mdappended to the URL), plus/llms.txt,sitemap.xml,robots.txt, and per-page OpenGraph images.
- Next.js 16 — App Router, Server Components, ISR/CDN, per-request rendering
- shadcn/ui + Tailwind CSS v4
- Helius RPC for on-chain data
- Sanctum for the LST catalogue
- Neon Postgres for the derived search index
- Vercel Runtime Cache + Next.js Data Cache (no external cache store required)
Requires Node.js 20+.
git clone https://github.com/Hubra-labs/staked.so.git
cd staked.so
npm install
cp .env.example .env.local # fill in the values documented below
npm run devOpen http://localhost:3000. A clean clone runs with no external cache configured — caching falls back to an in-memory map locally.
Every variable is documented inline in .env.example. In short:
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SOLANA_CLIENT_RPC |
yes | Browser-exposed Solana RPC endpoint (Helius). |
HELIUS_RPC_URL |
yes | Server-only Helius endpoint for crawl/SSR reads. Falls back to the client RPC if unset. |
SANCTUM_API_KEY |
for LSTs | Backs the LST catalogue. |
DATABASE_URL |
for search | Neon Postgres holding the disposable, rebuildable search index. |
CRON_SECRET |
in production | Bearer token guarding /api/cron/sync. The endpoint refuses to run unguarded in prod. |
CACHE_BYPASS |
no | Set to 1 to read/write no cache while debugging. |
| Command | Description |
|---|---|
npm run dev |
Start the dev server |
npm run build |
Production build |
npm run start |
Serve the production build |
npm run lint |
ESLint |
src/
app/ # routes: validators, lst, stake, epoch, block, distribution, move, search
api/ # cron/sync (index rebuild), search, move/events, md/* (markdown mirrors)
components/ # UI, home, block, seo, react-bits
lib/ # data layer, solana codecs, seo (sitemap/og/markdown), cache, search
- Licensed under the MIT License.
- Trademarks. The MIT license covers the source code only. The Hubra and staked.so
names, logos, and brand assets (e.g.
public/hubra.svg) are not licensed for reuse — if you fork this project, please replace the branding. - GSAP is used under the GSAP Standard ("no charge") license, not MIT.
- Animation components under
src/components/react-bits/are adapted from React Bits (MIT); attribution is retained in each file header.