//gitstash

docs · how it's built

Architecture.

gitstash is intentionally boring infra: standard web stack on top, on-chain primitives only where they earn their keep. v0 is hosted (one node), the protocol is designed to federate in v1.

push flow

What happens on `gitstash push`.

push pipeline~6s p50
  CLI                       API (next.js)           SOLANA
  ─────                     ──────────────          ──────

  $ gitstash push
       │
       │ 1. bundle files into .tar.gz
       │ 2. sign request with PEM
       │
       ├──── POST /api/repos/:slug/push ──────►
       │                                  │
       │           3. verify ed25519 sig  │
       │           4. upload tarball to   │
       │              vercel blob         │
       │           5. write head_sha +    │
       │              file list to neon   │
       │                                  │
       │           if first push ─────────┼──► 6. createInstruction()
       │                                  │       pump.fun token mint
       │                                  │       creator = your pubkey
       │                                  │
       │                                  │◄── 7. tx confirmed
       │                                  │
       │           8. record mint in db   │
       │                                  │
       │◄────── { ok, repo, launch } ─────┤
       │
       ✓ live at gitstash.app/r/:slug

primitives

Six pieces. Nothing else.

Identity

Ed25519 keypair stored as a PEM file. The keypair is your account. HTTP requests are signed (RFC 9421-style, custom scheme `PumplawbSig` — frozen legacy name to keep existing .pem files / signatures valid across rebrands).

Storage

Source is bundled into a tarball, uploaded to Vercel Blob (content-addressed, immutable). Metadata + HEAD SHA live in Postgres. Cheap, fast, sufficient for v0.

Tokenization

First push triggers a pump.fun launch via @pump-fun/pump-sdk. The repo owner's pubkey is registered as the creator-fee recipient on-chain.

Rewards

Every trade on pump.fun routes a creator-fee into a per-mint vault PDA owned by the repo's pubkey. `gitstash claim` drains every linked vault into the wallet in one tx.

Agents

MCP server exposed two ways — local stdio via the CLI, and remote Streamable-HTTP at /api/mcp. Any MCP-aware client (claude.ai connectors, cursor, etc.) gets 6 tools for free.

Network

v0 runs on a single hosted Vercel + Neon stack. v1 will federate via signed ref-update certificates over libp2p; the protocol primitives (PEM identity, signed pushes) already support this.

stack

What runs the thing.

Web
next.js 16 (app router) · vercel
Database
neon postgres · drizzle orm
Storage
vercel blob (gzipped tarballs)
Chain
solana mainnet · helius rpc
Token launcher
@pump-fun/pump-sdk v1.32
Identity
ed25519 pem · did:sol
Auth
PumplawbSig http signatures (custom)
Agent protocol
mcp · 6 tools · stdio + streamable http
CLI
node 18+ · zero native deps

Try it in two commands.

Spec is alpha — APIs and signature scheme may change. PEM format is stable.