PocketBase vs Appwrite
PocketBase is a whole backend in one Go file: embedded SQLite, auth, files, realtime over Server-Sent Events and an admin UI compiled into the binary. Appwrite is a full backend-as-a-service platform: a PHP monolith on Swoole with PostgreSQL and Redis, isolated function runtimes, and generated SDKs for many platforms.
- PocketBase
- Go · MIT
- Appwrite
- PHP · BSD-3-Clause
- Updated
- 2026-09-25
Which one should you pick?
- You want to deploy one binary with no external database
- Your app fits a single SQLite database
- You want to extend the backend with Go or JavaScript hooks (Goja)
- You need functions, messaging, static sites and storage in one platform
- You want REST, GraphQL and realtime APIs with generated SDKs for web, mobile and server
- You are ready to run a multi-container stack with PostgreSQL and Redis
Side by side
| Attribute | PocketBase | Appwrite |
|---|---|---|
| Written in | GoJavaScriptCSS | PHPTypeScript |
| License | MIT | BSD-3-Clause |
| Frontend | JavaScriptViteLeaflet | none |
| Backend & APIs | GoGoja | PHPSwooleUtopia PHP framework familyGraphQL |
| Data & persistence | SQLiteS3 | PostgreSQLRedis |
| Infrastructure & deploy | GoReleaser | DockerTraefik |
| Key decisions |
|
|
| Audited | 5cec579 · 2026-09-17 | 7ae78b5 · 2026-09-17 |
How they differ
One binary vs a platform
PocketBase compiles everything into a Go binary: a pure Go SQLite driver (no CGO), its own router instead of a third-party HTTP framework, the admin UI embedded at build time, and a Goja JavaScript VM for hooks. Appwrite is one PHP monolith running on Swoole and built from small utopia-php packages, fronted by Traefik, with Sites and Functions executed in isolated runtimes outside the API process.
Data
PocketBase stores data in SQLite and can put files on S3. Appwrite’s database and cache are pluggable but default to PostgreSQL and Redis.
Clients
Appwrite generates its client and server SDKs rather than hand-writing one per platform. PocketBase ships a JavaScript admin UI and relies on its REST and SSE APIs.
Architecture diagrams
Frequently asked questions
Does PocketBase need a separate database?
No. PocketBase embeds SQLite through a pure Go driver, so the whole backend runs as one file. Appwrite defaults to PostgreSQL and Redis.
How does realtime work in PocketBase and Appwrite?
PocketBase uses Server-Sent Events for its realtime subscription channels. Appwrite exposes a realtime API alongside REST and GraphQL.
More architecture comparisons
View allAFFiNE vs AppFlowy
AFFiNE vs AppFlowy compared on architecture: React + Yjs vs Flutter + Rust, local-first storage, sync servers, native code and local AI.
Appsmith vs ToolJet vs Budibase
Appsmith, ToolJet and Budibase compared on architecture: Java vs NestJS vs Koa, MongoDB vs PostgreSQL vs CouchDB, sandboxing, plugins and deployment.
Authelia vs authentik vs Logto
Authelia, authentik and Logto compared on architecture: Go vs Django vs Koa, storage, OIDC providers, protocol support and how each fits a self-hosted stack.
Axum vs Actix Web
Axum vs Actix Web compared on architecture: Hyper and Tower vs an own HTTP stack, routing, middleware, crates in the workspace and who uses each.