Both are open-source backends with auth, storage, functions, and an admin console. backlex adds edge deployment, runs on PostgreSQL/SQLite and adopts your existing tables, and ships built-in vector search with a runtime MCP server.
Appwrite is a popular open-source Firebase alternative — a self-hosted (Docker Compose) or cloud BaaS that bundles auth, a managed store, storage, functions, and realtime behind broad client SDKs. backlex covers the same surface but is built to run at the edge — the same codebase deploys to Cloudflare Workers, Vercel, Netlify, AWS Lambda, Google Cloud & Azure Functions, Deno Deploy, or your own server (Bun, Node, or Deno) — sits directly on your relational database, ships built-in semantic/vector search, and exposes a first-class runtime MCP server so AI agents can use your backend as a tool.
| backlex | Appwrite | |
|---|---|---|
| License | Apache-2.0 | BSD-3-Clause |
| Runtimes | 9 runtimes — Cloudflare Workers, Vercel, Netlify, AWS Lambda, Google Cloud & Azure Functions, Deno Deploy, or self-host on Bun/Node/Deno | Self-host via Docker Compose, or Appwrite Cloud |
| Edge-native | Runs inside the edge runtime | No — Docker / server containers |
| Database | PostgreSQL and SQLite / Cloudflare D1 | Appwrite-managed store (TablesDB) |
| Data model | Managed tables (dynamic, additive-only DDL) or adopt existing tables via a metadata row | Appwrite-managed collections — no adopting existing SQL tables |
| REST + GraphQL | Both, auto-generated; nested-relation filters, expand, aggregation | REST, GraphQL & Realtime APIs |
| Realtime | Live row changes streamed to clients over Server-Sent Events (SSE), permission-filtered | WebSocket subscriptions |
| Permissions | Role-based DSL: conditions + field-level allow-lists, one model across APIs + realtime | Per-document / collection permissions (roles, users, teams) |
| Multi-tenancy | First-class — workspaces with isolated data, end-users, auth, SSO & email; one deployment serves many, sessions pinned per tenant | Projects isolated; teams group users, but no per-tenant data isolation in one project |
| Vector search | Built in — pgvector or Cloudflare Vectorize; auto-embed on write | Not built in (integrate Pinecone, Qdrant, Weaviate, etc.) |
| Embedding models | OpenAI, Workers AI (bge-m3), or self-hosted TEI/Ollama/vLLM | — |
| AI agent runtime | Built in — define agents that reason over your data and call your tools (DSL-scoped) in a persisted thread, with per-thread vector memory + live step streaming | Not built in (build on Functions yourself) |
| MCP server | Built-in runtime MCP server — collections, vector & admin to agents, per-key tool allow-lists + read-only guards | Official MCP server (databases, functions, sites) |
| Storage + images | Files with ACLs, signed URLs; image transforms on Bun in-process or the Cloudflare edge | File storage with image transformations |
| Edge functions | Sandboxed functions — http / event / cron triggers | Functions (many runtimes, container-based) |
| Automation | Visual, no-code op-chains on item events | Event triggers / functions |
| Webhooks | Signed webhooks on item events | Webhooks on events |
| Auth providers | Email/password, OAuth, magic link, email-OTP, passkeys | Email/password, OAuth (many), phone, magic URL, anonymous |
| SSO | SAML 2.0 + LDAP/AD (per workspace) | OAuth / OpenID; SAML on Cloud (Enterprise) |
| Audit logs | Built-in activity trail + opt-in sensitive-read auditing + revisions | Activity / usage logs |
| Client SDKs | 11 first-party SDKs, hand-written & typed (TS, Python, Go, Rust, Swift, Kotlin, Dart, Java, .NET, Ruby, PHP) | Broad SDK matrix across many languages (code-generated) |
| Admin UI + CLI | Admin SPA and the `backlex` CLI (migrate, gen-types) | Console + CLI |
| Messaging (push + SMS) | Built in — FCM/APNs/Web Push + SMS (Twilio/Amazon SNS), per-tenant credentials, registries & templates | Messaging (push / SMS / email) |
| Batch / transactional writes | Bulk + opt-in atomic (all-or-nothing) writes over REST and GraphQL | Per-document writes (no atomic batch) |
| Background jobs | Durable queue — retry with backoff, dead-letter, delayed/scheduled | Functions (no durable retry / dead-letter queue) |
| Resumable uploads | TUS 1.0.0 chunked/resumable, native R2 / S3 multipart | Chunked uploads |
| Draft / publish | Built-in draft↔published status, dedicated publish permission, scheduled publishing | Not built in |
| Feature flags / remote config | Built in — rollout-% + permission-DSL targeting, evaluated per caller | Not built in |
| Offline-first sync | Incremental changefeed + tombstones + client store (IndexedDB) + offline write queue | Not built in |
| Auth hardening | Per-IP rate-limiting + account lockout, 2FA/TOTP, email verification | Built-in rate limits + abuse protection |
Appwrite manages its own store and exposes it through SDK collections — you don't point it at an existing SQL database. backlex runs directly on PostgreSQL or SQLite / Cloudflare D1: it can create managed tables with an additive-only DDL applier, or adopt an existing database by writing a metadata row, auto-detecting foreign keys as relations with no data migration. Your data stays in plain SQL tables you can query with anything.
backlex builds semantic search into the backend: flag a collection's
text fields and it auto-embeds on write and runs ANN search via
pgvector or
Cloudflare Vectorize,
with embeddings from OpenAI, Workers AI, or a self-hosted model — and
the same vectors reach agents through the vector.search MCP
tool and the Ask-AI / RAG page. Appwrite ships an official MCP server and
rich SDKs, but semantic/vector search isn't native — you connect an
external vector database such as Pinecone, Qdrant, or Weaviate.
See the backlex documentation or the source on GitHub to get started. backlex's core is free and open under Apache-2.0; the managed Cloud is optional.