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 |
| Schema versions | Snapshots, diff between any two points, branching, and scheduled auto-snapshots | Content-type schema files live in code, versioned with git |
| Database import | Import from PostgreSQL, MySQL, a SQLite file, MongoDB, Firestore or DynamoDB — plan → run, resume/cancel, `--since` delta re-sync | `strapi transfer` between Strapi instances; other sources DIY |
| 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 — ~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 | 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) |
| Extensions | Install admin panels, field editors & hooks from npm or an upload; hooks run sandboxed on events or on the cron tick | Plugin system + marketplace (plugins run in the Node process) |
| Dashboards / BI | Insights — dashboards over collections, six chart types, grouping, public iframe embed token | Not built in (external BI) |
| 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 |
| Spreadsheet grid + Kanban | Editable grid — cell selection, copy/paste, fill-down, undo — plus a Kanban board grouped by status | List view; grid / Kanban via plugins |
| Live collaboration | Presence + field-level awareness on the item form and rows table, with an optimistic-concurrency guard on PATCH | Not built in |
| 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) |
| Content localization | Per-field translations sidecar (any field type), side-by-side locale editing, compare mode, AI auto-translate of missing keys | i18n — per-locale entries with fields marked localized |
| 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 (community plugins / third-party forms) |
| 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 | Not built in (bring 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 | 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.