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 |
| Schema versions | Snapshots, diff between any two points, branching, and scheduled auto-snapshots | Not built in |
| Database import | Import from PostgreSQL, MySQL, a SQLite file, MongoDB, Firestore or DynamoDB — plan → run, resume/cancel, `--since` delta re-sync | Migrations from Firebase, Supabase, NHost and other Appwrite projects |
| 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 — ~149 tools (protocol 2025-11-25) over collections, vector & admin; OAuth 2.1 so hosted clients connect with no API key (bearer `pak_` keys still work for headless 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) |
| Extensions | Install admin panels, field editors & hooks from npm or an upload; hooks run sandboxed on events or on the cron tick | Custom logic via Functions; no console extension API |
| Dashboards / BI | Insights — dashboards over collections, six chart types, grouping, public iframe embed token | Usage charts in the console; BI via external tools |
| 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 |
| Spreadsheet grid + Kanban | Editable grid — cell selection, copy/paste, fill-down, undo — plus a Kanban board grouped by status | Console table view; grid editing / Kanban not built in |
| Live collaboration | Presence + field-level awareness on the item form and rows table, with an optimistic-concurrency guard on PATCH | Realtime API as a primitive; build presence yourself |
| 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 |
| Content localization | Per-field translations sidecar (any field type), side-by-side locale editing, compare mode, AI auto-translate of missing keys | Locale API for the user's locale; content translations are DIY |
| Public forms | Drag-block, multi-step form builder — share a link or embed script, anonymous uploads via signed tickets, conditions + per-locale copy; submissions land in a collection | Not built in (third-party form tools) |
| Advisor | Schema, permissions & config linter with a score and deep links to each fix | Not built in |
| Tracing + usage metering | W3C `traceparent` propagation, an admin Traces panel, OTLP export; per-key usage ledger with limits | Usage metrics in the console; tracing via your own APM |
| 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.