v0.11.4 · just shipped: MCP for AI agents (Claude / Cursor / ChatGPT) + browser SQL runner with intellisense

A self-hosted backend in a single binary.

Collections, REST API, auth, realtime, file uploads, server-side hooks, MCP for AI agents — all from one executable. Drop it on a server, run it, done.

Linux · macOS · Windows MIT licensed Zero native deps
~/projects/my-app
# install, build, run — three commands
$ bun install
$ bun run build → ./vaultbase
$ ./vaultbase

sqlite ready vaultbase.db
admin assets embedded 12.4 MB
4 hooks · 2 cron · 1 queue
serving on http://localhost:8091

# open http://localhost:8091/_/ → setup wizard
01 Why vaultbase

Three things that aren't true of anything else.

Most "backend-as-a-service" products force a tradeoff: hosted convenience for vendor lock-in. vaultbase is the opposite end of the dial.

One binary.

Compiled with bun build --compile. Cross-compiles to Linux x64, macOS arm64/x64, Windows x64. Zero native deps shipped alongside — the executable is genuinely self-contained.

Real SQL, not JSON blobs.

Each collection is a real SQLite table — vb_posts, vb_users. Hit them with sqlite3, run native indexes, do real schema migrations. No JSON1 acrobatics.

Edit logic in the browser.

Schema, API rules, hooks, custom HTTP routes, cron jobs, queue workers — all written in JavaScript directly in the admin UI, with Monaco autocomplete typed to your collection's actual record shape.

02 What it replaces

A typical small-app stack runs $80–$300/month. Now it runs on a $5 VPS.

For the kind of project where you spend a weekend wiring five managed services together, vaultbase is one process on one box.

Before · 5+ services

Managed Postgres $25/mo
Auth0 / Clerk / Cognito $23/mo
S3 + signed URLs $8/mo
Pusher / Ably $49/mo
Inngest / Trigger.dev $20/mo
A backend framework host $15/mo
BECOMES

After · 1 binary

./vaultbase
SQLite · Auth · Files · Realtime · Hooks · Queue · MCP
$5/mo VPS · one process · one port · one file you can scp as a backup
03 What's in the box

Eight pillars. All in the binary.

No add-ons, no plugins, no "Pro tier". Everything below ships in v0.11.4.

Collections + REST API

15 field types · 3 collection kinds

Real SQL tables, typed fields with validation, REST with filter / sort / expand / projection, ETag-aware optimistic concurrency, ALTER TABLE-style schema diffs when you edit fields.

  • text · number · bool · email
  • relation · select · json · file
  • password · editor · geoPoint · vector
  • base · auth · view collections

Auth, fully featured

10 OAuth2 providers

Email + password, OAuth2 with Google / GitHub / Apple / Microsoft / Discord / 5 more (PKCE-enabled, generic OIDC supported), OTP / magic-link, MFA / TOTP, anonymous sessions, admin impersonation.

  • JWT, configurable expiry
  • Recovery codes
  • No account-enumeration leaks
  • Multi-admin out of the box

Realtime

WebSocket + SSE

WebSocket endpoint with topic subscriptions — collection, record, child records, or * for everything. SSE fallback. Per-connection auth respects API rules.

  • Subscribe to a record
  • Subscribe to children
  • Wildcard topics
  • Auth-gated streams

Files

Local · S3 · R2

Local FS by default. One-click S3 / R2 presets via Bun's native client. On-the-fly thumbnails, MIME + size validation, and rule-based protection: per-field rule, one-time tokens, IP-bound, downloads audited.

  • ?thumb=300x200
  • Per-field viewRule
  • One-time + IP-bound tokens
  • files.download audit row

Server-side logic, in the browser

Hooks · Routes · Cron · Queues · Flags · Webhooks · Push

Six hook points (before/after × CRUD), custom HTTP routes, UTC cron, queue workers, outbound HMAC-signed webhooks on every record event. Built-in feature flags with targeting + rollout. Push notifications via OneSignal + FCM with one helpers.notify(userId, payload) call — drivers handle OAuth, dead-token cleanup, retries. Full typed standard library: db · fs · http · security · template · cron · mails · flags · webhooks · notify. Monaco autocomplete throughout.

  • Edit live, no redeploy
  • helpers.notify(userId, payload)
  • helpers.flags.isEnabled + targeting
  • helpers.http with retries + timeout

Operations & supply chain

Audit · Sessions · Cosign · SBOM

Request log viewer with rule-eval inspection. Admin audit log + UI. Per-collection record history + point-in-time restore. Backup CLI to S3/R2/B2. AES-GCM at rest. Active admin sessions + revoke + force-logout-all. Every release keyless-signed via Sigstore cosign with a CycloneDX SBOM.

  • Admin audit log + UI
  • Active sessions + revoke
  • vaultbase backup --to s3://
  • Sigstore keyless signatures

Security & observability

Lockout · CORS · HIBP · Metrics

Per-email + per-IP brute-force lockout. Configurable CORS allow-list. Password policy with optional Have-I-Been-Pwned k-anonymity check. Hook SSRF egress guard. Prometheus exposition at /api/v1/metrics with optional bearer auth. Update checker against GitHub releases.

  • Brute-force lockout
  • Password policy + HIBP
  • Prometheus /api/v1/metrics
  • Update checker (GitHub)

AI agents via MCP

First-party Model Context Protocol

Vaultbase ships an MCP server. Claude Desktop, Cursor, Continue, Cline, Zed, ChatGPT — any agent that speaks the protocol can browse collections, query / mutate records, read logs, run admin tasks. Tools auto-generated per collection, scope-gated via API tokens, every call audited. stdio + HTTP+SSE transports; stateless POST for cloud agents, npm bridge (@vaultbase/mcp) for stdio-only clients connecting to remote deployments. Prompt-injection markup on record content.

  • 5 tools per collection (auto)
  • Resources + prompts (Phase 3)
  • Scope-gated · audit-logged
  • Read-only mode for ad-hoc debugging
04 The admin UI

Schema, rules, and logic — all editable in the browser.

No CLI dance, no migrations folder, no redeploy. Edit a hook, save, the next request runs the new code.

DATA
Collections
Logs
API preview
LOGIC
Hooks · 4
Cron · 2
Queues · 1
P
posts
12 fields · 3 indexes
title text min 3, max 120 ● req
slug text unique · ^[a-z0-9-]+$ ● uniq
author relation → users · single ● req
status select draft / published / archived
cover file image/* · max 5MB · thumb=300x200
FIELD OPTIONS · text
NAME
title
VALIDATION
3
120
Required
Encrypted
05 Comparison

How vaultbase compares.

Honest table. We're a single-binary open-source backend for solo devs and small teams — not a globally distributed multi-region platform.

  vaultbase PocketBase Supabase Firebase
Single binary, self-hosted ● yes ● yes ● no (multi-service) ● no
Real SQL tables (not JSON blobs) ● yes (SQLite) ● yes (SQLite) ● yes (Postgres) ● no (Firestore)
Server-side logic editable in browser ● yes ● no (file-based JSVM) ● partial (Edge Fns) ● no (deploy only)
Built-in queue workers + cron ● yes (native) ● cron only (JSVM) ● via pg_cron + pgmq ● external (Cloud Tasks)
Realtime (WebSocket + SSE) ● yes (both) ● SSE only ● yes (WebSocket) ● yes (proprietary)
Record history + point-in-time restore ● yes (per-collection toggle) ● no ● no (DIY triggers) ● no
Optimistic concurrency (ETag) ● yes (auto in SDK) ● no ● manual (xmin) ● manual
Vector search (built-in) ● yes (vector field + nearVector) ● no ● yes (pgvector add-on) ● no
Typed end-to-end SDK ● yes (codegen + vb.q tag) ● no (stringly-typed) ● partial (gen-types) ● partial
Signed releases (cosign) + SBOM ● yes (keyless Sigstore) ● no ● managed by Supabase ● managed by Google
Built-in feature flags + targeting ● yes (UI + REST + sticky rollout) ● no ● no (use LaunchDarkly) ● yes (Remote Config)
First-party MCP server (AI agents) ● yes (stdio + HTTP+SSE, scoped tokens) ● no ● no ● no
Outbound webhooks (HMAC + retry) ● yes (built-in + admin UI) ● DIY (in JS hooks) ● DIY (pgnotify) ● yes (Cloud Functions)
Push notifications (OneSignal + FCM) ● yes (provider-agnostic helpers.notify) ● DIY (in JS hooks) ● DIY (Edge Fns + 3rd party) ● yes (FCM only)
Append-only admin audit log ● yes (UI + REST) ● no ● DIY (pgaudit) ● DIY (Cloud Audit)
Brute-force lockout (per-email + IP) ● yes (built-in) ● no ● DIY ● yes (App Check)
Per-field file rules (one-time + IP-bound) ● yes (UI + audit row) ● no (one global flag) ● DIY (RLS on storage) ● DIY (rules.txt)
Prometheus metrics endpoint ● yes (/api/v1/metrics) ● no ● via pgexporter / cloud ● via Cloud Monitoring
Open source license ● MIT ● MIT ● Apache 2.0 ● proprietary
Globally distributed multi-region ● no (single host) ● no ● yes ● yes
Free for self-host ● yes ● yes ● yes ● no (cloud only)
06 Install

Three commands. No setup.

The first run launches a setup wizard that creates the first admin account.

install · build · run
$ bun install
$ bun run build → ./vaultbase
$ ./vaultbase → :8091

# http://localhost:8091/_/ → setup wizard
one-shot install · signature-verified
$ curl -fsSL https://get.vaultbase.dev | sh

# or verify the cosign signature first:
$ curl -fsSL https://get.vaultbase.dev | sh -s -- --verify-sig

resolved tag v0.11.4
cosign verify-blob OK (Sigstore Fulcio)
installed → /usr/local/bin/vaultbase
07 Architecture

One process. Files on disk.

There is no second asset server, no native module, no companion daemon. Your data is files you can scp.

Inbound
HTTP · :8091
WebSocket · /realtime
Admin UI · /_/
./vaultbase
one process · ~38 MB
elysiadrizzlebun:sqlitereact adminqueue engineoauth2jwtaes-gcm
On disk
vaultbase.db
uploads/
logs/*.jsonl
08 Numbers

Specifics, not slogans.

1
binary, self-contained
14
field types
13
OAuth2 providers
6
record-event hook points
3
collection kinds
400+
server-side tests
09 Stack & scope

TypeScript end-to-end.

No native binaries shipped alongside the executable. The whole thing is one self-contained build.

The stack

Runtime Bun HTTP Elysia DB SQLite via bun:sqlite ORM Drizzle Admin React 19 + Vite Routing React Router v7 State Zustand Editor Monaco Build bun --compile

Not in scope for v1.0

  • Multi-region — single process on a single host
  • Horizontal scale — Phase 2 (Redis-backed queues + cache) is on the roadmap
  • A managed service — there is no vaultbase.cloud
  • Apps with 100k+ concurrent connections

If you have a dedicated platform team and run your own Postgres + Redis + S3 stack, vaultbase isn't for you. That's by design.

One binary. Five minutes.
Your backend.

Download v0.11.4, run ./vaultbase, walk away with your data whenever you want.