Both give you an admin app and an instant API over your content. backlex adds edge deployment, a fully Apache-2.0 core (no Enterprise tier for SSO or audit logs), built-in vector search and realtime, and the ability to adopt your existing database.
Strapi is the most popular open-source headless CMS — a Node.js app where you define content types in an admin panel and serve them over REST or GraphQL. backlex shares the "instant API + admin" idea but is built as a data platform for 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), the whole core is Apache-2.0, and it ships realtime, vector search, and a first-class runtime MCP server so AI agents can use your backend as a tool.
| backlex | Strapi | |
|---|---|---|
| License | Apache-2.0 | MIT community core; SSO, audit logs & advanced RBAC are paid Enterprise |
| Runtimes | 9 runtimes — Cloudflare Workers, Vercel, Netlify, AWS Lambda, Google Cloud & Azure Functions, Deno Deploy, or self-host on Bun/Node/Deno | Node.js (self-host or Strapi Cloud) |
| Edge-native | Runs inside the edge runtime | No — Node server |
| Database | PostgreSQL and SQLite / Cloudflare D1 | PostgreSQL, MySQL, MariaDB, SQLite |
| Data model | Managed tables (dynamic, additive-only DDL) or adopt existing tables via a metadata row | Strapi-owned content types — it manages its own tables |
| REST + GraphQL | Both, auto-generated; nested-relation filters, expand, aggregation | REST built in; GraphQL via plugin |
| Realtime | Live row changes streamed to clients over Server-Sent Events (SSE), permission-filtered | Not built in |
| Permissions | Role-based DSL: conditions + field-level allow-lists, one model across APIs + realtime | Roles & permissions; field-level + advanced RBAC in Enterprise |
| Multi-tenancy | First-class — workspaces with isolated data, end-users, auth, SSO & email; one deployment serves many, sessions pinned per tenant | Not built in (DIY or separate instances) |
| Vector search | Built in — pgvector or Cloudflare Vectorize; auto-embed on write | Not built in (Meilisearch / external) |
| 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 (custom code / external) |
| MCP server | Built-in runtime MCP server — collections, vector & admin to agents, per-key tool allow-lists + read-only guards | MCP via community plugin (CMS content) |
| Storage + images | Files with ACLs, signed URLs; image transforms on Bun in-process or the Cloudflare edge | Media library with upload providers; image formats via sharp |
| Edge functions | Sandboxed functions — http / event / cron triggers | Lifecycle hooks, controllers & services (Node) |
| Automation | Visual, no-code op-chains on item events | Custom code / plugins |
| Webhooks | Signed webhooks on item events | Webhooks on content events |
| Auth providers | Email/password, OAuth, magic link, email-OTP, passkeys | Email/password + OAuth (Users & Permissions plugin) |
| SSO | SAML 2.0 + LDAP/AD (per workspace) | SAML / OIDC (Enterprise only) |
| Audit logs | Built-in activity trail + opt-in sensitive-read auditing + revisions | Enterprise only |
| Client SDKs | 11 first-party SDKs — TS, Python, Go, Rust, Swift, Kotlin, Dart, Java, .NET, Ruby, PHP | Strapi client (JS/TS) + REST/GraphQL |
| Admin UI + CLI | Admin SPA and the `backlex` CLI (migrate, gen-types) | Admin panel + CLI |
| Messaging (push + SMS) | Built in — FCM/APNs/Web Push + SMS (Twilio/Amazon SNS), per-tenant credentials, registries & templates | Not built in (community plugins) |
| Batch / transactional writes | Bulk + opt-in atomic (all-or-nothing) writes over REST and GraphQL | Limited (no atomic batch endpoint) |
| Background jobs | Durable queue — retry with backoff, dead-letter, delayed/scheduled | Not built in (cron plugin) |
| Resumable uploads | TUS 1.0.0 chunked/resumable, native R2 / S3 multipart | Not built in |
| Draft / publish | Built-in draft↔published status, dedicated publish permission, scheduled publishing | Draft & Publish (core) |
| 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 | Basic rate limiting (plugin) |
Strapi owns its schema: you model content types in the admin and Strapi manages the underlying tables. backlex can do the same with managed tables (a dynamic, additive-only DDL applier that never drops or rewrites columns), but it can also adopt an existing database — point it at a table and it writes a metadata row, auto-detecting foreign keys as relations, with no data migration. That makes backlex a fit for wrapping a database you already run, not just greenfield content.
Semantic search is part of
the backend in backlex, not a bolt-on. 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 are exposed to agents through the vector.search
MCP tool and the Ask-AI / RAG page. Strapi has no built-in semantic
search; you wire up Meilisearch or an external vector database.
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.