Skip to content

Documentation

Competitive Comparison

A strategic, EU-compliant buyer's guide comparing SveltyCMS with Payload CMS, Strapi, and Directus across total cost of ownership, compliance readiness, and time-to-market.

10/19/2026
35 min read Edit on GitHub

This guide is written for CTOs, lead architects, and agency owners evaluating a content platform — not for a feature-list debate. Instead of comparing how the engines work, it compares what each platform lets your team do:

  • What it costs to run (total cost of ownership)
  • How fast you can ship (time-to-market)
  • Whether you pass the security review (compliance readiness)
  • What is included versus what is paid (free core vs. paid tiers)

We compare SveltyCMS with Payload CMS, Strapi, and Directus based on publicly available documentation and pricing pages as of July 2026, on a like-for-like basis: SveltyCMS’s free core is compared against each platform’s free/community edition, with paid-tier availability noted separately. Where a competitor offers something we include for free in paid tiers, we say so. Where a competitor is genuinely stronger — a bigger marketplace, a deeper React integration — the Verdict section says that too.

This page follows EU Directive 2006/114/EC and German UWG §6 requirements for comparative advertising: all claims are date-stamped, based on verifiable public sources, and written in neutral, descriptive language. See Sources and Methodology for details.

Decision snapshot (facts, not pitch)

What differs in public product packaging and our self-measured stack (not a ranking of which vendor is “best”):

Decision factor SveltyCMS (self-hosted core) Payload CMS Strapi Directus
SSO / SAML / OIDC Documented in core Plugin / Enterprise SAML (public docs) Pro / Enterprise (public pricing) Built-in (OIDC / LDAP / SAML)
SCIM 2.0 Documented in core Enterprise (public docs) Enterprise (public docs) Enterprise module (public docs)
Audit logs Crypto-chained logs in core (self-described) Enterprise (public docs) Plugin / Enterprise (public docs) Activity log; audit module Enterprise
Multi-tenancy Native tenantId isolation in core Not documented as built-in (as of July 2026 public docs) Not documented as built-in Enterprise plan (public docs)
Cold start ~2.0s boot / ~1.4s respawn (self-measured, SQLite, 2026-09-18; SQLite ledger) ~3–5s (figures from public write-ups; not same harness) ~4–8s (public write-ups) ~3–6s (public write-ups)
Admin UI runtime model Svelte 5 compile (no React VDOM in admin) React VDOM React admin Vue reactivity
i18n Paraglide compile-time; EN/DE shipped; extra locales GUI + machine-translate then human review; field-level content translations via per-field toggle in Collection Builder (self-described, Sept 2026) i18next runtime; 30+ admin languages in @payloadcms/translations (public docs) Admin locales via config.locales (code); content locales from a predefined list (public docs) vue-i18n runtime; Data Studio languages via Crowdin (public docs)
Out-of-the-box API REST + GraphQL + OpenAPI 3.1 REST + GraphQL REST + GraphQL REST + GraphQL
Developer Tools In-app OpenAPI + GraphQL Playground in core Separate Swagger / GraphQL plugins Separate Swagger / GraphQL plugins Built-in GraphQL / REST app
Schema Authoring Visual GUI + Live Split-View + SQL Ingestion + Code-First Code-first TS files only (public docs) Visual Content-Type Builder (GUI only) Visual Data Model Builder on SQL
Editorial Workflows Multi-stage FSM + RBAC review gates in core Draft/Publish in Community; Workflows in Enterprise (docs) Draft/Publish in Community; Workflows in Enterprise (pricing) Custom status flows in core
Multi-environment sync Hybrid TS schemas + 4 safety modes + PII-safe sync (core) Code-first schemas + DB migrations Data transfer CLI / plugins CLI schema sync (d6s sync) (v12.3)
Field-level encryption Native AES-256-GCM in core Hooks / marketplace plugin (public docs) Marketplace plugin (public docs) Client-responsible / extensions
Rate limiting & DoS Token-Bucket (Redis/local memory in core) Not documented as built-in Plugin-based (public docs) Plugin-based (public docs)
Translation Cockpit Dual-lens studio (UI chrome + content readiness) + 1-click AI in core External TMS / community translations Plugin or external TMS Crowdin / runtime strings
Smart Table & Bulk Edit Omni-surface drag resize, saved views, sticky columns, Alt+E bulk edit in core Basic table views / custom components Plugin / Enterprise views Custom layouts / basic bulk edit

Competitor cold-start numbers are not measured with our suite. Treat them as orientation only. Verify current tiers on each vendor’s pricing page.

Total Cost of Ownership: Free Core vs. Paid Tiers

A meaningful difference in this comparison is where enterprise-grade capabilities sit. In SveltyCMS they are part of the free core; in several alternatives they are offered only in paid tiers. The table below compares like for like — the capabilities themselves, and where each platform places them.

Capability Typical placement in alternatives In SveltyCMS
SSO / SAML / OIDC Paid tiers (Strapi, Payload); built-in (Directus) Included in core, free
SCIM 2.0 provisioning Paid tiers / enterprise modules (Payload, Strapi, Directus) Included in core, free
Compliance-grade audit logs Enterprise tiers (Payload, Directus); plugin-based (Strapi) Included in core, free
Multi-stage review workflows Enterprise tiers (Strapi, Contentful, Sanity; public docs) Included in core, free
Developer & API Playground External tooling / separate plugins (public docs Sept 2026) Included in core, free
Polymorphic Block Builder Core/custom components or paid blocks (public docs Sept 2026) Included in core, free
Visual Schema Split-View Separate / partial implementations (public docs Sept 2026) Included in core, free
Database DDL/Schema Ingest Custom migration scripts / manual SQL (public docs Sept 2026) Included in core, free
Multi-tenancy Custom implementation or enterprise plans Included in core, free
Secure media sharing Plugin-based or separate tooling Included in core, free
DAM analytics Plugins / enterprise modules Included in core, free
Field-level encryption Hooks / marketplace plugins (public docs as of Sept 2026) Included in core, free
Rate limiting Plugin-based or reverse-proxy configurations Included in core, free
Collection ETag / 304 App- or CDN-level HTTP caching (public docs as of Sept 2026) Included in core, free
Streamed collection export REST/CLI export (often fully buffered; public docs Sept 2026) Included in core, free
Translation Cockpit & AI External TMS / third-party plugins (public docs Sept 2026) Included in core, free
Smart Table & Bulk Edit Basic tables / custom plugins / enterprise extensions Included in core, free

Whether a capability is “free core” vs “paid tier” is a packaging difference on public pricing pages — not proof of implementation quality. Always re-check each vendor’s current tier matrix.

Note on methodology: Tier information is based on public pricing pages and documentation as of July 2026. Vendor pricing and tiering change frequently — verify against current pricing pages before a final decision.

Performance & Architecture: What the Admin Costs You {#performance—architecture-what-the-admin-costs-you}

Every CMS admin panel carries a cost: cold-start latency, server memory, and runtime shipped to visitors. The difference between platforms is where that cost is paid — and who pays it.

Capability SveltyCMS Payload CMS Strapi Directus
Stack SvelteKit 2 + Svelte 5 (Runes) Next.js + React Koa + React admin Vue 3 + Express
Admin UI model Svelte 5 compile React VDOM React admin Vue reactivity
Cold start ~2.0s boot / ~1.4s respawn (self-measured, SQLite, 2026-09-18) ~3–5s (public write-ups) ~4–8s ~3–6s
i18n Paraglide (compile-time); extra locales start as machine-translate drafts i18next (runtime); community language modules Plugin / config.locales (runtime) vue-i18n (runtime); Crowdin
Type safety TypeScript + Valibot Zod (common) Partial Partial
Production DBs MongoDB, MariaDB, PostgreSQL, SQLite MongoDB, PostgreSQL SQLite, PostgreSQL, MySQL, MariaDB PostgreSQL, MySQL, SQLite, MSSQL

Cold start and admin model affect your compute and UX; competitor cold-start numbers are not same-harness comparisons.

List / count product layer (self-measured, 2026-08-04)

Optional dual-query list paths (findMany + exact count) vs shared findPage / count modes. Numbers are adapter-layer averages on one machine — not HTTP E2E, not competitor benches.

Engine LIST+COUNT (legacy) findPage (hasMore) vs legacy Count estimate (unfiltered) Count exact (filtered) L1 count cache hit
SQLite 0.192 ms 0.086 ms ~2.2× 0.023 ms 0.120 ms ~0.024 ms
PostgreSQL 2.233 ms 1.008 ms ~2.2× 0.745 ms 2.197 ms ~0.024 ms
MariaDB 1.086 ms 0.664 ms ~1.6× 0.502 ms 0.936 ms ~0.029 ms
MongoDB 4.925 ms 0.867 ms ~5.7× 0.492 ms 3.817 ms ~0.025 ms

What this is not: “0.024 ms list responses.” That figure is repeat count L1 hits only. Full list rows still cost ~findPage (+ HTTP/compression). Networked raw CRUD remains ~0.5–2 ms RTT-bound.

In-repo competitive replica (PostgreSQL networked, SQLite entry)

SQLite is the embedded / entry adapter. The competitive HTTP replica is PostgreSQL, self-measured on this host with the in-repo replica (production Node, full security stack, 10,000 documents, 8 workers). No competitor RPS and no external harness columns.

Docker Desktop on Windows is not a production PostgreSQL host; these RPS are this machine’s networked adapter.

PostgreSQL (self-measured, 2026-09-20)

Warm concurrent 8-worker HTTP (SVELTY_BENCHMARK_SERVER_MODE=production, BENCH_DOCS=10000, BENCH_ROUNDS=3, Postgres 18 container sveltycms-postgresql):

Workload RPS Avg (ms) p95 (ms)
findById 4,555 1.75 2.45
findByIdRandom 1,987 4.00 5.67
listPlain 5,404 1.46 1.82
listFilterSort 5,713 1.38 1.67
listLarge 3,843 2.05 2.67
findMissing 5,941 1.33 2.48
graphql 2,828 2.79 3.51
create 1,259 6.31 8.28
update 1,300 6.07 7.94
mixed 1,774 4.37 9.65

60-second soak (same 8 workers): 2,020 avg RPS (min 1,826, max 2,224, instability 17.9%).

The Architectural Paradox: Why SveltyCMS is Both Faster AND More Secure

In conventional architectures, security and performance stand in opposition: adding authentication, authorization, CSRF protection, and audit logging slows down request execution. SveltyCMS resolves this trade-off through architectural design:

  1. Compiled ORM vs. Runtime AST Construction: Drizzle ORM prepared statements eliminate the per-query AST allocation and type parsing required by Knex.js in Strapi and Directus.
  2. Single-Pass SQL Batching vs. N+1 Cascade: Relational lookups (author) execute in a single SQL join rather than recursive populate loops, avoiding database connection pool exhaustion under load.
  3. Synchronous In-Memory Security Checks: Bitmask-based RBAC, token resolution, and in-memory SHA-256 audit chaining execute in microseconds without synchronous per-request database I/O, keeping the full enterprise security stack active while outperforming unauthenticated or minimally gated community editions.

Versus the raw PostgreSQL ceiling (same host, 2026-10-10, raw-db-ceiling.ts --db=postgresql, 100k rows, 8-worker). CMS ÷ driver is not a competitor column; turbo-HIT lists can exceed an uncached HTTP floor.

Op (8-worker) CMS replica RPS Raw HTTP floor Raw driver (100k) CMS / floor CMS / driver
findById 8,527 7.5k 12.2k 114% 70%
listPlain 7,679 3.6k 6.6k 213% 116%
create 2,950 6.3k 10.8k 47% 27%
update 3,678 6.5k 10.6k 57% 35%
seedBurst 13,120 docs/s n/a 10.8k n/a 122%

Hardware and Energy Efficiency (Green Compute)

Beyond raw request throughput, SveltyCMS optimizes compute resource utilization on the underlying host:

  1. Reduced CPU Cycles per Mutation: Zero-copy response pipelines (skipReturning: true omitting unnecessary JSON deserialization and double-parsing) reduce per-mutation V8 CPU time by over 50%.
  2. Pipelining and Connection Coalescing: Native TCP socket pipelining batches multi-row inserts, dramatically cutting network syscalls and context switches.
  3. Non-blocking Microsecond Security: Cryptographic SHA-256 audit chaining runs synchronously in memory without blocking I/O threads, preventing server thread pool starvation.
  4. Lower Power Footprint: By achieving 2,950+ write RPS on a single 8-worker host where legacy architectures require multi-node clusters, SveltyCMS delivers higher operational throughput per watt.

Reproduce (PostgreSQL):

docker compose -f tests/docker-compose.yml --profile postgresql up -d
COMPILE_ALL_ADAPTERS=true NODE_ENV=production bun run build
SVELTY_BENCHMARK_SERVER_MODE=production BENCHMARK=true DB_TYPE=postgresql BENCH_DOCS=10000 BENCH_ROUNDS=3 BENCH_SOAK_SECONDS=60 bun test tests/benchmarks/competitive-workload-replica.test.ts
bun run scripts/benchmark-matrix/raw-db-ceiling.ts --db=postgresql

SQLite (entry / embedded adapter)

Same replica protocol on SQLite, this host, 2026-09-20 (local/dev orientation, not the enterprise comparison). Warm concurrent 8-worker HTTP (10,000 documents, 3 rounds, SVELTY_BENCHMARK_SERVER_MODE=production):

Workload RPS Avg (ms) p95 (ms)
findById 2,121 3.76 5.01
findByIdRandom 1,783 4.45 8.26
listPlain 3,061 2.58 3.28
listFilterSort 2,890 2.72 3.86
listLarge 2,987 2.64 3.16
findMissing (404) 3,877 2.03 2.26
create 1,871 4.24 4.82
update 1,686 4.71 4.84
graphql 2,761 2.89 4.02
mixed (read/write) 1,447 5.47 10.79

60-second SQLite soak (same 8 workers): 1,362 avg RPS (min 573, max 1,469). Entry-adapter soak, not the PostgreSQL competitive row.

Versus the raw SQLite ceiling (entry adapter, same host, same day)

The ceiling probe measures the engine without the CMS (native driver) and a raw HTTP floor (driver + node:http + JSON, no CMS). CMS ÷ HTTP floor is the honest middleware tax. Driver RPS is unreachable over HTTP.

Op (8-worker) CMS replica RPS Raw HTTP floor CMS / floor Raw driver (100k rows)
findById 2,121 32.4k 6.5% 242.1k
listPlain 3,061 12.6k 24% 27.7k
create 1,871 8.4k 22% 11.1k
update 1,686 8.6k 20% 10.9k

Methodology: production index.cjs, BENCHMARK=true, Node NODE_OPTIONS=--max-semi-space-size=64 --max-old-space-size=1024 (same V8 young-gen as the production Dockerfile). Single-entry PATCH/PUT now invalidates only that document’s turbo key plus list/GraphQL keys — sibling findById hits stay warm. Self-measured; no third-party audit. Complies with EU Directive 2006/114/EC and German UWG §6 (no competitor RPS from a different harness).

Reproduce (SQLite entry):

SVELTY_BENCHMARK_SERVER_MODE=production BENCH_DOCS=10000 BENCH_SOAK_SECONDS=60 BENCH_ROUNDS=3 bun test tests/benchmarks/competitive-workload-replica.test.ts
bun run scripts/benchmark-matrix/raw-db-ceiling.ts --db=sqlite

Methodology: benchmarks · detail: Performance Architecture.

Servers / containers needed for 10,000 RPS (derived, PostgreSQL replica)

Arithmetic ceil(10,000 ÷ req/s) on the PostgreSQL mixed/findById/listPlain/create rows above. It assumes linear horizontal scaling and ignores database saturation — orientation, not a capacity plan.

xychart-beta title "SveltyCMS containers for 10,000 RPS (PostgreSQL self-measured replica)" x-axis ["mixed", "findById", "listPlain", "create"] y-axis "Containers (rounded up)" 0 --> 10 bar [6, 3, 2, 8]
Workload PostgreSQL replica RPS (2026-09-20) Containers for 10k RPS (ceil)
mixed 1,774 6
findById 4,555 3
listPlain 5,404 2
create 1,259 8

Methodology: derived from this host’s self-measured PostgreSQL 8-worker replica, containers = ceil(10,000 ÷ req/s). Linear-scaling assumption; no third-party audit. This is not a claim that a single container serves 10,000 RPS. SQLite is the entry adapter and is not used in this table.

Media & Digital Asset Management

For agencies and media teams, the DAM is where hours disappear. These are the operations that typically cost time and money — and who supports them out of the box.

Capability SveltyCMS Payload CMS Strapi Directus
Large-file uploads Dedicated streaming path; default upload buffered with a 15 MB ceiling Buffer-based Buffer-based Buffer-based
Duplicate storage costs SHA-256 content-addressable deduplication Not documented as built-in Plugin-based Not documented as built-in
Secure external sharing Per-link-salted scrypt passwords, expiring tokens, optional signed URLs Standard auth only Plugin-based Standard auth only
Per-file version history Diff / compare / restore per file Not documented as built-in Not documented as built-in Content revisions only
Safe deletion (reference protection) Reverse-index + publish-state gate (409 Conflict) Not documented as built-in Not documented as built-in Not documented as built-in
DAM analytics Built-in usage, folder, and quota insights Not documented as built-in Plugin-based Insights module
Bulk operations Selection toolbar, 4× concurrency, publish-state gate Not documented as built-in Plugin-based Built-in
Signed URLs HMAC-SHA256, timing-safe, tenant-scoped Not documented as built-in Plugin-based Not documented as built-in
Pre-upload optimization Canvas 2D client-side compression (1920×1080 clamp, WebP) Not documented as built-in Not documented as built-in Not documented as built-in
Storage backends Local, S3, R2, Cloudinary (pluggable adapters) S3 plugin Upload providers Storage adapters
Media type safety Discriminated unions + exhaustive type guards Basic discrimination Media library plugin File library

Why this matters: content-addressable deduplication and client-side compression can reduce storage and bandwidth costs; signed, password-protected links let editors share assets with clients and partners without standing up a separate file-drop service.

Security & Compliance: The Audit-Ready Checklist

SOC 2, HIPAA, and GDPR reviews ask the same handful of questions: Who accessed what? How are sessions protected? Can logs be tampered with? How do users authenticate and deprovision? Every row below is a question your auditor will ask — and what each platform answers out of the box.

Compliance question SveltyCMS Payload CMS Strapi Directus
Who changed what? (audit logs) Built-in & tamper-evident — SHA-256 chained (Core, free) Enterprise tier Plugin-based / Enterprise tier Native activity log; audit module in Enterprise tier
How do users sign in? (SSO/SAML/OIDC) Built-in — all 3 logout flows (RP-initiated, front-channel, back-channel) Plugin-based; SAML in Enterprise tier Paid Pro / Enterprise tier Built-in SSO
How are users provisioned? (SCIM 2.0) Native endpoints (RFC 7644), Core, free Enterprise tier Enterprise tier Enterprise module
Are permission changes instant? (RBAC) Cache dropped on the role write path (invalidateRolesCache + invalidatePermissionCache) — no TTL wait; no latency figure published TTL-based caching TTL-based caching TTL-based caching
Where are secrets stored? Bootstrap secrets in config/private.ts; other secrets DB-driven Settings UI Environment variables (common) Environment variables Environment variables
Session & CSRF hardening __Host- cookie prefix + per-origin tokens Built-in Built-in Built-in
Rate limiting Built-in Token-Bucket (Redis L2 + local memory fallback + tiers) Not documented as built-in Rate limit plugin Rate limit plugin
Field-level encryption (ALE) Native AES-256-GCM in core (< 18 µs, < 3% write impact, zero-tax) Hooks / marketplace plugin Marketplace plugin Client-responsible / extensions
Path traversal protection Dual guard: string check + path.resolve() prefix Not documented as built-in Partial Partial
SVG sanitization Iterative XML scrubbing + attribute validation Not documented as built-in Not documented as built-in Not documented as built-in
API key security HMAC-SHA-256 with server secret (v2 format) SHA-256 hashing SHA-256 hashing SHA-256 hashing
CORS policy Origin allowlist — no reflection with credentials Configurable Configurable Configurable
MIME enforcement & nosniff Unified allowlist + write-time magic-byte agreement + remote-asset resolve + universal nosniff (self-described, September 2026) Default-only coverage (based on publicly available documentation, September 2026) Default-only coverage (based on publicly available documentation, September 2026) Default-only coverage (based on publicly available documentation, September 2026)
GraphQL hardening Introspection blocked unconditionally in production; CSRF gate on every authenticated POST (parity with REST, 2026-09-24, self-described) Configurable Configurable Configurable
Secret scanning in CI 6-rule static analysis + 5 architecture rules Not documented as built-in Not documented as built-in Not documented as built-in
Clickjacking protection X-Frame-Options: DENY + CSP frame-ancestors: none X-Frame-Options only X-Frame-Options only X-Frame-Options only
Session performance at scale 10,000 hot sessions (LRU + TTL) Default Default Default

Compliance takeaway: SveltyCMS documents audit trails, SSO, and RBAC as core features. That can reduce paid add-ons versus some vendors’ public tier maps — it is not a SOC 2 / HIPAA certification claim. Always map controls to your auditor’s checklist.

RBAC invalidation, precisely: role and permission writes drop the in-process role cache and the permission cache synchronously (invalidateRolesCache + invalidatePermissionCache in cms.auth.updateRoles; the config-import path does the same), so the next request re-reads roles instead of waiting for a TTL. No invalidation latency has been measured and none is claimed, and automating the per-role bitset refresh (invalidateRoleBitset) is still tracked on the roadmap.

Developer Experience: Time-to-Market

Time-to-market depends on the platform your team can ship with today. This is how each option gets you from content model to production API.

Capability SveltyCMS Payload CMS Strapi Directus
Schema definition Hybrid — code + GUI with bi-directional sync Code-first GUI-first GUI-first + code extensions
Local development In-process LocalCMS (bypasses HTTP; ~0.001 ms warm findById, self-measured) Local API Not documented as built-in Not documented as built-in
API surface REST + GraphQL + OpenAPI 3.1.0 REST + GraphQL REST + GraphQL REST + GraphQL
Real-time & collaboration SSE + WebSocket (Yjs collaboration) Not documented as built-in WebSocket plugin WebSocket + SSE
Extensibility Built-in theme/plugin catalog Plugin directory Plugin marketplace — one of the largest of the four, to our knowledge Marketplace

A note on Strapi’s marketplace: Strapi’s plugin marketplace is one of the largest of the four, to our knowledge — a real strength if you need a mature off-the-shelf integration, and a reason Strapi remains a strong default for teams that assemble integrations.

Multi-Environment Synchronization: Schema as Code & Content Promotion

Moving configuration and content across dev, staging, and production environments is a critical workflow for enterprise delivery pipelines. Each platform takes a distinct architectural approach:

Capability SveltyCMS Payload CMS Strapi Directus
Schema definition model Hybrid — native TypeScript (config/collections/*.ts) + GUI with bi-directional sync Code-first (TypeScript configs) GUI-first (schema files generated) GUI-first + code extensions
Configuration sync workflow ConfigPromotionService (/api/config/*) with 4 safety modes (add, merge, mirror, replace) Git repo commits + database migrations Data transfer CLI (strapi transfer) / community sync plugins @directus/cli (d6s sync pull/diff/push)
Drift detection Deterministic SHA-256 checksums + plan preview before apply Custom / Drizzle migration checks CLI data transfer diff JSON diff preview (d6s sync diff)
Content movement between envs Channel-based push/pull (/api/content-sync/*) + NDJSON packages Custom migration scripts / REST export strapi transfer (content & files) Directus sync / API export
PII anonymization on sync Deterministic PII scrubbing on pull (Core, free) Not documented as built-in Not documented as built-in Not documented as built-in
Audit logging for sync Tamper-evident SHA-256 chained audit ledger Enterprise tier Plugin / Enterprise tier Enterprise module

Workflow comparison:

  • SveltyCMS maintains schemas as native TypeScript files on disk (config/collections/*.ts), ensuring compile-time type safety. Platform configuration (roles, permissions, settings, automations) is exported to deterministic JSON bundles in config/sync/ for Git promotion. Content sync operates over dedicated channels with native PII anonymization.
  • Directus 12.3 introduced Environment Sync via @directus/cli (d6s), which exports schema and configuration to JSON files in Git and provides sync pull, sync diff, and sync push commands for multi-environment delivery.
  • Payload CMS uses a code-first model where schemas live directly in TypeScript files in Git, relying on standard Git pull requests and database migrations across environments.
  • Strapi provides strapi transfer (Data Transfer) for pushing and pulling schemas, content, and files between instances via CLI transfer tokens.

Accessibility: Compliance for Every User

Accessibility is a procurement requirement in public-sector and enterprise deals. WCAG conformance should be designed in, not retrofitted.

Capability SveltyCMS Payload CMS Strapi Directus
Accessibility target WCAG 2.2 AA / ATAG 2.0 / WCAG 3.0-ready No published conformance target No published conformance target No published conformance target
RTL support Tailwind v4 logical properties Partial Partial Partial
Keyboard navigation Full keyboard support + ARIA-live regions Partial Partial Partial

Common Scenarios

Scenario A — The Edge-Deployed Global App

The problem. You are shipping a customer-facing site to users on three continents. Latency on customer-facing pages can measurably affect conversions, and serverless cold starts can interrupt the experience.

What you need. Edge-friendly deployment, i18n that doesn’t add runtime to pages, cold-boot and respawn times published as self-measured ledger rows, and media delivered from object storage close to users.

Why SveltyCMS. The admin compiles away to zero runtime, Paraglide i18n compiles to a zero-runtime bundle, cold boot and steady-state respawn are published as self-measured ledger rows (~2.0s / ~1.4s, SQLite, 2026-09-18), and the R2/S3 storage adapters plus signed URLs support global media delivery. The stack deploys to edge runtimes as SvelteKit.

How the alternatives compare. React-based alternatives include runtime admin overhead and runtime i18n on pages; published benchmarks place their cold starts in the seconds range on edge/serverless runtimes.

Scenario B — The B2B SaaS Provider

The problem. You sell software to enterprises that run a security review before closing. SSO, SCIM, and audit logs are on the checklist — and so is the vendor’s price tag.

What you need. SAML/OIDC SSO, SCIM provisioning, tamper-evident audit logs, and multi-tenancy so each customer’s data stays isolated.

Why SveltyCMS may fit. Public docs place SSO, SCIM, chained audit logs, and multi-tenancy in core. That can reduce paid-tier dependencies versus some alternatives — still map controls to your auditor; not a certification claim.

How the alternatives compare. In Strapi and Payload, SSO, SCIM, and audit logs are offered in paid enterprise tiers; in Directus, compliance-grade audit logs and SCIM are enterprise modules. Custom implementation is possible but represents additional engineering effort.

Scenario C — The Media-Heavy Agency

The problem. You run client sites with large media libraries. Uploads can time out, duplicates inflate storage bills, and sharing assets with clients often means standing up a separate service.

What you need. A large-file streaming path, deduplication, secure client sharing, per-file version history, and usage analytics.

Why SveltyCMS may fit. A dedicated streaming path for large files (default uploads buffered with a 15 MB ceiling), content-hash dedup, per-link-salted share passwords, per-file history, and DAM analytics in core (verify current docs for your release).

How the alternatives compare. Alternatives typically rely on buffer-based uploads and plugin-based workflows for sharing, deduplication, and analytics, or on separate file-sharing tooling.

Commerce packaging

Like-for-like notes on documented store capabilities. The SveltyCMS column matches this tree on 11 October 2026. The Payload column is from public documentation, an RFC, and the templates/ecommerce README reviewed in August 2026 and re-checked on 11 October 2026. Not a ranking. Verify current vendor docs before a purchase decision.

Area SveltyCMS (self-hosted, 5 October 2026) Payload CMS ecommerce plugin (public docs / RFC, August 2026)
Catalog (products, variants, categories) Preset collections. Catalog prices are gross plain numbers. Documented native
Catalog import (Woo / Shopify) Smart Importer (--format=woocommerce / shopify) Documented import paths vary by plugin
Admin dashboard (orders / inventory) Freemium widgets, 14-day trial (dashboard:commerce-*) Admin UI is documented as part of the ecommerce plugin
Reviews Preset product_reviews Not listed as a native plugin feature
Carts / orders Opt-in Commerce plugin: guest cart and checkout (/api/commerce/*), plus /shop, /cart, /checkout, and /widerruf Documented native
Coupons / shipping / tax data Preset tables, applied at quote time. The wizard seeds one tax row for the country on the form (Germany, 19% and 7%, when left as-is). A blank rate seeds the shipping zone only. TaxJar and the UPS/FedEx/DHL plugins apply a sandbox rate from settings. Shipping, taxes, discount codes documented as native gaps or RFC
Totals / PaymentIntent amount VAT is extracted from the gross amount, so the charged total stays that gross amount. Stripe uses the server grandTotal. Checkout stays closed until trader identity is set. Open issue: adapter uses cart.subtotal as PaymentIntent amount
Checkout robustness (concurrency / retries) Per-product serialized stock decrement (no oversell under concurrent orders) and Idempotency-Key replay on /api/commerce/checkout and /pay Not listed in the template README (2026-10-11)
Subscriptions / gift cards / bundles Gift cards, bundles, custom checkout panes, and store analytics are Commerce Pro-gated. subscribe returns 501. Stripe Billing is not connected. Documented native gaps / RFC
Multi-tenancy on commerce data tenantId on every commerce query Not documented as built-in

Product map: E-Commerce Overview. Withdrawal, the invoice snapshot, and the VIES check when an order is placed are described there. They are not compared in the Payload column above.

SEO, GEO & AI Visibility: What Mature CMS Ecosystems Teach

Assessment date: 2026-10-08. This is a pattern study of what mature CMS ecosystems ship in public documentation — WordPress (core + the Yoast/RankMath/AIOSEO plugin ecosystem), Drupal (Metatag, Simple XML Sitemap, Redirect, Schema.org modules), TYPO3 (core seo system extension), Craft CMS (SEOmatic), and Statamic (SEO Pro / Aardvark SEO addons) — not a ranking. Each row names the publicly documented source of the pattern. Where SveltyCMS already ships the pattern, the module is named; gaps are listed for the roadmap.

The recurring patterns

  1. Configuration cascade with per-entry overrides. Drupal’s Metatag module applies per-content-type defaults that individual nodes override; TYPO3 inherits SEO settings from site configuration down the page tree; Craft SEOmatic composes per-section token templates; Statamic’s SEO addons cascade global → collection → entry. (Sources: Drupal Metatag module docs; TYPO3 SEO documentation; SEOmatic docs; Statamic SEO Pro docs.)
  2. Tokenized title/description templates. The same four ecosystems compose meta titles from field tokens with fallbacks rather than asking editors to hand-write every title. (Sources as above.)
  3. Schema.org generated per content type, not hand-pasted. Yoast attaches Article/WebPage/Organization markup automatically; Drupal ships the Schema.org Metatag module; Craft emits WebSite/WebPage/MainEntity identity markup; Ghost themes auto-generate Article + WebSite JSON-LD. (Sources: Yoast structured data docs; Drupal Schema.org Metatag module page; SEOmatic docs; Ghost theme documentation.)
  4. Breadcrumbs automation. Yoast Breadcrumb, Craft’s navigation-derived breadcrumbs, and TYPO3’s menu-based breadcrumbs all derive breadcrumb markup from the site structure instead of authoring it per page. (Sources as above.)
  5. Redirects on URL change, with 404 tracking that becomes the fix list. Drupal’s Redirect module records 404s and offers one-click redirect creation; WordPress redirect plugins and Craft SEOmatic create 301s when slugs change and track hits. (Sources: Drupal Redirect module page; SEOmatic docs.)
  6. Sitemaps as configurable surfaces. TYPO3 configures the sitemap per page type; Craft generates per-section sitemaps including image and news variants; WordPress core ships wp-sitemap.xml with per-content-type toggles in plugins. (Sources: TYPO3 XML sitemap documentation; SEOmatic sitemap docs; WordPress core developer documentation.)
  7. hreflang derived from site languages. TYPO3 generates hreflang including x-default from its site language configuration; Craft does the same from multi-site setups. (Sources: TYPO3 hreflang documentation; SEOmatic multi-site docs.)
  8. Readability and keyword analysis inside the editor. Yoast popularized live readability + focus-keyword scoring; the pattern is reimplemented across ecosystems (e.g. the Real-time SEO for Drupal module). (Sources: Yoast readability analysis docs; Real-time SEO for Drupal module page.)
  9. IndexNow on publish. Yoast added IndexNow in 2021 and RankMath followed; the protocol (indexnow.org) is the Bing/Yandex/Seznam/Naver equivalent of instant URL submission. Google does not participate — its sitemap ping endpoint was deprecated in June 2023, which is why no ping is sent. (Sources: Yoast IndexNow announcement; indexnow.org; Google Search Central deprecation notice.)
  10. Auto-generated social share images. Statamic’s SEO addons generate OG images automatically from templates (screenshot-based); Ghost auto-generates social cards from featured images. This is the pattern with the highest implementation cost in this list. (Sources: Statamic SEO Pro / Aardvark SEO docs; Ghost social card documentation.)

The GEO / AI-visibility layer (newer than the classic stacks)

GEO — optimizing content to be cited by generative engines (AI Overviews, ChatGPT, Perplexity) — adds a second audience to classic SEO. The documented, dated signals so far:

  • Citation-worthiness techniques. The 2024 “GEO: Generative Engine Optimization” study (Aggarwal et al., KDD 2024) reports that adding statistics, quotations and fluency optimizations measurably improved visibility in their experimental setting; those findings are from a controlled study, not a ranking-engine guarantee. (Source: arXiv preprint, KDD 2024.)
  • LLM-crawler control via robots directives. OpenAI documents separate crawlers (GPTBot for training, OAI-SearchBot for ChatGPT Search), and states that blocking GPTBot does not remove a site from ChatGPT Search; Google documents Google-Extended as the control for Gemini training while keeping the site in Google Search; Anthropic documents ClaudeBot. (Sources: OpenAI crawler documentation; Google Search Central AI documentation; Anthropic crawler documentation.)
  • llms.txt. The llmstxt.org convention (introduced September 2024) is the emerging machine-readable site guide for LLMs and agents; a number of CMS ecosystems began shipping generators for it during 2025. (Source: llmstxt.org.)
  • ChatGPT Search visibility guidance. OpenAI’s published site-owner guidance recommends the same crawlability primitives Google documents — sitemaps, structured data, OG tags — for appearing in ChatGPT Search. (Source: OpenAI “making your site appear in ChatGPT search” documentation.)

Where SveltyCMS stands against the patterns

Pattern Status SveltyCMS module / note
Config cascade (site → collection → entry) ⬜ Roadmap Widget-level {{tokens}} only today
Tokenized title templates 🏗️ Partial SEO widget modifyRequest resolves tokens per entry
Schema per content type (auto) 🏗️ Partial WebSite + BreadcrumbList auto-generated (2026-10-08); no per-type Article/WebPage auto markup yet
Breadcrumbs automation ✅ Shipped seo-head.ts derives BreadcrumbList from the URL hierarchy
Redirect on slug change + 404 tracking ✅ Shipped redirect-manager plugin (autoRedirectOnSlugChange) + 404_logs
Sitemap as configurable surface 🏗️ Partial Paginated sitemap + hreflang; no image/news variants
hreflang from site languages ✅ Shipped Head + sitemap alternates with x-default
Readability + keyword analysis in editor ✅ Shipped Widget analyzer + link suggestions API
IndexNow on publish ✅ Shipped (premium, 2026-10-08) indexnow.server.ts — fire-and-forget ping; key at /indexnow.txt
Auto-generated social images ⬜ Roadmap Highest-effort item; see roadmap
AI-crawler robots directives ✅ Shipped (2026-10-08) AI_CRAWLER_POLICY setting → robots.txt per-crawler groups
llms.txt ✅ Shipped (2026-10-08) /llms.txt generated from published collections
GEO citation support 🏗️ Partial FAQ/Article JSON-LD via the widget; no auto FAQ schema from Q&A fields

Honest read

The mature stacks win on editorial ergonomics accumulated over a decade (cascade defaults, one-click 404 fixes, per-type auto markup); SveltyCMS already covers the technical crawlability surface (canonical, robots, sitemap, hreflang, redirects, 404 logs, breadcrumbs, llms.txt, IndexNow, AI-crawler directives) and leads on AI-visibility basics by shipping llms.txt natively. The measurable gaps are the cascade/defaults system, auto-generated social images, sitemap variants, and per-type auto schema — in that order of effort. Nothing above should be read as a claim that any single pattern guarantees rankings or generative citations; the ecosystems themselves document these as hygiene and eligibility work.

Verdict

No CMS wins every evaluation — and claiming otherwise is how trust gets lost. Here is our honest read:

  • Choose SveltyCMS when you need enterprise-grade security and compliance (SSO, SCIM, tamper-evident audit logs) without enterprise pricing; you need Git-driven Schema as Code with native TypeScript and PII-safe multi-environment sync in core; you’re building performance-sensitive or edge-deployed products; you run multi-tenant SaaS; your team is already SvelteKit or wants a single coherent stack rather than a separate admin framework layered on the front end; or your workloads are media-heavy.
  • Choose Payload CMS when your team is React/Next.js and wants to share components between the admin and the front end, or when a code-first model deeply integrated with Next.js outweighs the cost of composing plugins for SSO, audit, and rate limiting.
  • Choose Strapi when the plugin marketplace is your priority — one of the largest ecosystems of the four, to our knowledge, suited to teams that ship by assembling integrations — and your security requirements fit within its free tier; SSO, SCIM, and audit logs are offered in paid tiers.
  • Choose Directus when you want to manage an existing SQL database with a powerful admin UI, you want to use the Directus 12.3 CLI (d6s) for JSON-based environment sync, you’re data-first rather than content-first, or you need MSSQL support. Budget for enterprise modules if compliance-grade audit logging or SCIM are on your checklist.

Sources and Methodology

  • Date of assessment: July 2026 (list/count adapter numbers refreshed 2026-08-04; Payload commerce column 2026-08-19, not re-checked on 2026-10-05; SveltyCMS commerce column refreshed 2026-10-05; PostgreSQL competitive replica + soak 2026-09-20; SQLite entry replica 2026-09-20; cold-start ledger rows 2026-09-18). Vendor docs and pricing change; re-check before purchase decisions.
  • Like-for-like basis: SveltyCMS free core vs each platform’s free/community edition where applicable; paid tiers noted separately. Self-hosted deployments. HTTP competitive replica is self-measured PostgreSQL; SQLite is labeled entry/embedded.
  • Performance figures: HTTP RPS and soak are self-measured with tests/benchmarks/competitive-workload-replica.test.ts (production Node, DB_TYPE=postgresql). Competitor cold starts are public write-ups, not our harness. No third-party audit. No competitor RPS from a different harness.
  • What we avoid: Absolute speed rankings, “only platform,” or “0.024 ms list responses” without defining the exact operation (count L1 vs full list vs HTTP).
  • Primary sources:
  • SEO/GEO pattern-study sources (assessed 2026-10-08): Drupal Metatag, Redirect, Schema.org Metatag and Real-time SEO module pages; TYPO3 SEO documentation; Craft SEOmatic docs; Statamic SEO Pro and Aardvark SEO addon pages; WordPress core sitemaps developer docs; Yoast structured data and IndexNow documentation; indexnow.org; Google Search Central sitemap ping deprecation; OpenAI crawler and ChatGPT Search documentation; Google Google-Extended; Anthropic ClaudeBot documentation; llmstxt.org; Aggarwal et al., “GEO: Generative Engine Optimization” (arXiv:2311.09735, KDD 2024).
  • Legal basis: This comparison is prepared in accordance with EU Directive 2006/114/EC on misleading and comparative advertising (EUR-Lex) and German UWG §6 (Unfair Competition Act). Feature-tier claims are verifiable against the vendor documentation and pricing pages listed above.

Related

comparisonbuyers-guidetcocompliancepayloadstrapidirectusseogeoai-visibility
Was this page helpful?