How ZigBase compares

Last reviewed: August 2026

This comparison is maintained by the ZigBase project. We've tried to be fair; corrections welcome via GitHub issue.

ZigBase is built for individuals and small teams who want integrated application services, custom logic in Zig, and explicit control over resources and deployment. Write the application directly or work with a coding agent. Its combination of an embeddable framework, resource tooling, and a single binary is the reason to evaluate it. Read Why ZigBase for the design rationale. The table below is a dated feature comparison, not a performance ranking; evaluate capacity against your own workload.

Comparison table

Dimension ZigBase PocketBase TrailBase Supabase Firebase
Model Self-hosted single binary Self-hosted single binary Self-hosted single binary Hosted platform; self-host possible (multi-service) Hosted only
Database Embedded SQLite; PostgreSQL opt-in (verified TLS by default) Embedded SQLite Embedded SQLite; Postgres experimental PostgreSQL Proprietary (Firestore)
Scale path Opt-in Postgres build; migrate-db for data migration; review SQL, shared files, and jobs before adding replicas Single node (SQLite) Single node (SQLite); experimental Postgres backend Postgres-native scaling Managed
Migrating in Declarative schema apply, whole-dataset import --manifest in relation order, bcrypt password import (rehashed to argon2id on first login), parity-replay harness Collection schema JSON import/export; JS/Go migrations SQL migrations CLI dump/restore; the wider Postgres ecosystem Managed import/export
Agent operability init scaffolding with a generated AGENTS.md, self-backgrounding serve, --json CLI output, frozen error codes + explain-code, /api/meta probe, published llms.txt — — MCP server; AI assistant (hosted) MCP server (CLI); Gemini in Firebase (hosted)
SPA hosting Zero-config .spa marker fallback for client-routed apps, plus comptime static_routes match→serve maps in custom builds Built-in --indexFallback on the static handler (default on) Built-in --spa flag on --public-dir serving No built-in static hosting product — pair with Netlify/Vercel/etc. Firebase Hosting rewrites (the reference implementation for this)
Extension model Compiled, typed Zig (comptime-checked hooks/routes/jobs) Go framework, or embedded JS (goja) via the optional jsvm plugin WASM runtime (Wasmtime) — currently JS/TS and Rust guest languages SQL/RLS + Deno edge functions JS Cloud Functions
Auth Password, magic-link, OTP, passkeys/WebAuthn, OAuth2+PKCE Password, email OTP, OAuth2, optional MFA (2 of the above) — no passkeys Password/username, OAuth2 (PKCE), anonymous sign-in — no passkeys Full GoTrue incl. SAML SSO (Pro plan and above) Broad incl. phone/SMS auth
Authorization Rules + relationship abilities + first-class multi-tenancy, fail-closed Rule expressions Access-rule expressions Postgres RLS Security rules
Realtime WebSocket + SSE record subs + custom broadcast; record subs cross-instance on PG Server-Sent Events (SSE) record/collection subscriptions Realtime record subscriptions CDC + broadcast + presence Native listeners
Search Built-in FTS (+ opt-in vector) Filter queries only — no built-in full-text index Vector search built-in (bundled sqlite-vec); no first-party full-text feature PG FTS + pgvector Text search requires Firestore Enterprise edition; no native search on standard tier
Jobs/queues Built-in durable queues, retries, webhooks Cron (cronAdd) only — no built-in queue Cron jobs (incl. via WASM components) — no queue yet (on roadmap) pg_cron + Queues (built on pgmq) Cloud Tasks/Scheduler
Email Built-in templates + SES/Postmark/SMTP, suppression SMTP (self-configured) Auth emails: sendmail by default, configurable SMTP Built-in sender capped at 2 msg/hour; custom SMTP required for production Via extensions (e.g. Trigger Email + a 3rd-party SMTP provider)
Analytics Built-in event capture + rollups — — — (external) Google Analytics
Admin UI Embedded SPA at /_/ Embedded Embedded, incl. a mobile-friendly layout Hosted studio Console
Client SDKs TypeScript, Dart, Python, Kotlin — each with typed codegen from your schema JavaScript + Dart JS/TS, Dart, Rust, C#/.NET, Swift, Kotlin, Go, Python Many Many
Platforms Linux & macOS binaries · Docker (no native Windows) Linux/macOS/Windows Linux/macOS/Windows n/a (hosted) / Docker for self-host n/a
Maturity Pre-1.0 (v0.13.0) Pre-1.0 (v0.39.x) Alpha, pre-1.0 (v0.32.x) GA hosted GA
Resource footprint Single ~7 MB binary, ~29 MB RSS idle, zero external services (measured, ReleaseSafe) Single Go binary (~31 MB; ~12 MB zipped), zero external services Single Rust binary, zero external services Self-host: multi-service Docker Compose (Postgres, Auth, Storage, Realtime, PostgREST, Studio, Kong, and more — 13 containers) n/a — fully hosted, no footprint to operate
License / cost Apache-2.0, free MIT, free OSL-3.0 (core, copyleft scoped to TrailBase itself); Apache-2.0 client libraries Apache-2.0 core; hosted tiers Proprietary, usage-billed

Different constraints, different tools

Choose ZigBase if you want one self-hosted binary, a typed compiled extension surface, and a SQLite→Postgres scale path without a rewrite — and you're on Linux or macOS. Also if you're pointing a coding agent at your backend, or moving an existing app onto one: the CLI, error codes, and migration tooling are built to be driven rather than clicked through.

Choose PocketBase if you want Windows support or a JS extension surface, or its larger community and ecosystem.

Choose TrailBase if you want a Rust core with a WebAssembly extension runtime (JS/TS or Rust), the widest first-party client SDK spread, and Windows support.

Choose Supabase or Firebase if you want a managed platform and don't want to operate a server at all.