Best Headless CMS by Technology Stack: .NET, PHP (Laravel), JavaScript (2026)
Your team's primary language isn't a minor detail — it determines how fast you ship, how maintainable your content platform stays at scale, and how much friction your editors face daily. There is no single "best headless CMS." The right choice depends on your stack, your DevOps maturity, and the workflows your content team actually needs.
This guide takes a stack-first approach. Instead of ranking CMS platforms in a vacuum, it maps technology ecosystems to CMS archetypes, frontend frameworks, and full reference stacks — with concrete criteria you can validate in a proof-of-concept before committing.
How to read this article: start with the quick decision matrix for a high-level match, then dive into your stack's dedicated section for checklists and integration patterns. The best frontend and best stack sections apply across all stacks. The FAQ at the end covers the questions that come up most during CMS evaluations.
Quick decision matrix
Before you evaluate specific platforms, identify your CMS archetype. The table below maps technology focus to CMS category, frontend pairing, and the AI capabilities worth validating — along with the red flags that signal a poor fit.
Technology focus | CMS archetype | Examples | Best-fit frontend | Where AI adds value | Red flags |
|---|---|---|---|---|---|
.NET / Azure-first | Enterprise SaaS or self-host with .NET SDK | Contentful, Umbraco Heartcore, Optimizely CMS | Next.js (ISR on Azure Static Web Apps) | Auto-tagging via Azure AI, content QA pipelines, SEO metadata generation | No .NET SDK (just a REST wrapper); missing Azure Marketplace listing; no environment promotion |
PHP / Laravel | Self-host open-source or Laravel-native | Statamic, Strapi, Directus | Next.js or Nuxt (SSG + ISR) | Draft generation via Laravel queues + LLM API, media auto-captioning | No Composer install path; vendor lock-in on media storage; no queue driver support |
JS / TypeScript | API-first SaaS or self-host Node.js | Sanity, Payload, Contentful, Hygraph | Next.js, Astro, Remix | Real-time content QA, schema validation, AI-powered semantic search | No TypeScript types for content models; no local dev experience; "headless" without preview API |
Mixed stack (platform team + FE guild) | SaaS with multi-SDK + GraphQL | Contentful, Hygraph, Storyblok | Next.js as standard, others for islands | Cross-platform content reuse scoring, automated translation | One SDK significantly weaker than others; no GraphQL option; single-language docs |
This matrix is a starting point. The sections below unpack each stack in detail with checklists, integration patterns, and PoC validation steps.
Best headless CMS for .NET developers
What matters for .NET teams
- Enterprise auth integration — Entra ID (formerly Azure AD) via OIDC or SAML, RBAC with custom roles beyond admin/editor/viewer, and an audit trail with configurable retention policy. If your CMS can't plug into your identity plane, you're maintaining a parallel user directory.
- Typed .NET SDK — A proper SDK means auto-generated models from content types, separate clients for Management API, Delivery API, and Preview API. A thin REST wrapper that returns
dynamicobjects doesn't count. - Hosting flexibility — Self-host on Azure App Service or AKS for data residency, or enterprise SaaS with SOC 2 Type II and ISO 27001 certifications. Verify the compliance certs actually cover the CMS product, not just the vendor's corporate infrastructure.
- Content modeling rigor — Strong field validation, environment promotion (dev → staging → prod with content diff), and content type versioning. Without environments, every content change is a production deployment.
- Async integration patterns — Webhooks are table stakes. For enterprise workflows, you need integration with Azure Service Bus or Event Grid for reliable, ordered event processing — not just fire-and-forget HTTP callbacks.
- Media pipeline — DAM integration or a built-in image API with CDN delivery and on-the-fly transformations (resize, format conversion, quality optimization). Serving original 8MB PNGs through your CMS API is not a media strategy.
- Localization architecture — Field-level i18n with locale fallback chains, not just "create a separate entry per language." Verify the API supports querying by locale without N+1 requests.
- Preview infrastructure — Dedicated preview endpoint with token-based auth, separate from the delivery API. "Just use the draft API" is not a preview strategy — it leaks unpublished content if misconfigured.
Integration architecture for .NET
A production-grade .NET + headless CMS setup separates concerns across four layers:
[CMS API] → [Azure API Management / Gateway] → [Next.js on Azure SWA]
↓
[Azure Function: webhook handler]
↓
[Azure Service Bus topic]
↓ ↓
[AI enrichment job] [Search index update] (tagging, summaries) (Azure AI Search)
- API Gateway caching — Reduces CMS API calls by 60–80%. Set TTL per content type: 5 minutes for articles, 1 hour for navigation, 24 hours for config. Invalidate via webhook-triggered cache purge.
- Preview pipeline — Deploy a separate Azure SWA slot that reads from the CMS preview API using a scoped token. Editors get instant preview without touching the production deployment.
- AI enrichment — Background jobs triggered by content publish events. The webhook handler drops a message on Service Bus; a consumer function calls Azure OpenAI for auto-tagging, summarization, or SEO metadata — then writes results back via the CMS Management API.
- Search sync — Webhook → queue → indexer pattern. Never call a search indexer directly from a webhook handler — if the indexer is slow or down, you lose the event. The queue gives you retries and dead-letter handling.
.NET readiness checklist
Requirement | Why it matters | CMS-side capability | Frontend impact | Azure ops impact |
|---|---|---|---|---|
Entra ID SSO | Single identity plane, conditional access policies | OIDC/SAML provider configuration, group mapping | N/A (CMS-only auth) | App registration, redirect URIs, conditional access rules |
Typed .NET SDK | Compile-time safety, IntelliSense, fewer runtime bugs | Auto-generated models from content types | N/A (backend integration concern) | NuGet package versioning, CI restore |
Environment promotion | Safe content staging without production risk | Dev → staging → prod with visual diff and approval workflow | Preview URL switches per environment | Deployment slot alignment, environment variables per slot |
Webhook reliability | Zero missed content updates across the pipeline | Configurable retry policy, dead-letter queue, event filtering | ISR revalidation triggers on content publish | Service Bus topic per event type, monitoring alerts |
Content versioning | Audit compliance, safe rollback for editors | Entry-level versioning with side-by-side compare | Version selector in preview interface | Backup retention policy alignment |
Media CDN delivery | Performance, cost efficiency, global reach | Signed URLs, on-the-fly transformation API |
| CDN profile configuration, WAF rules for media endpoints |
Red flags for .NET CMS selection
- The .NET SDK is a thin REST wrapper without typed models — you'll end up writing and maintaining your own SDK layer.
- "Azure integration" means only blob storage support — check for Service Bus, Key Vault, and Managed Identity support before committing.
- No environment promotion — every content change goes straight to production, and your editors will break things.
- Preview requires using the vendor's hosted UI with no API access — your editors are locked into the vendor's workflow.
- Audit log retention is capped at 30 days — you won't pass enterprise compliance reviews.
- Webhook delivery is fire-and-forget with no retry mechanism — you will lose content update events under load.
Best PHP headless CMS (including best Laravel headless CMS)
Best PHP headless CMS — selection criteria
The PHP ecosystem offers strong self-hosted options where you control the infrastructure, the data, and the update cycle. Here's what separates a capable PHP headless CMS from a legacy monolith with an API bolted on:
- Self-host friendly — Docker Compose for local dev, straightforward deployment to bare metal or Kubernetes. Database migrations through CLI (not a web installer), automated backup support, and clear upgrade paths between versions.
- Granular role system — Custom roles beyond admin/editor/viewer. Field-level permissions, API token scoping per role, and the ability to restrict access by content type or locale. If RBAC means "two roles and a checkbox," it's not enterprise-ready.
- Queue integration — Background job support for media processing, webhook dispatch, and AI tasks. If image resizing blocks the HTTP response, your editors are waiting 8 seconds to save a page.
- Flexible content structures — Repeatable component blocks, nested groups, JSON fields with schema validation, and polymorphic relationships. Flat field lists with "text/textarea/image" types won't model real-world content.
- Localization workflow — Locale-aware API routing, per-locale draft/review/publish states, and fallback chains. Translation should be a first-class workflow, not "duplicate the entry and change the slug."
- Media storage abstraction — S3-compatible storage driver as the default, not local filesystem. CDN-friendly URL structure, image transformation API, and configurable upload limits. Migrating media later is painful.
- Plugin architecture — Lifecycle hooks, custom API endpoints, and event-driven extensibility. "Extensible" should mean your team writes PHP classes, not that you fork the CMS codebase.
- Maintenance cadence — Regular releases, timely security patches, and migration guides between major versions. Check the git commit history and issue response time, not just the marketing site.
Best Laravel headless CMS — what "Laravel-native" means
When we say "Laravel-native CMS," we mean the CMS is built on Laravel's conventions and can be extended using standard Laravel tools — not just that it's written in PHP:
- Auth through Laravel guards and policies — The CMS uses Laravel's authentication system, not a parallel auth implementation. Your existing middleware, gates, and policies apply to CMS routes.
- Eloquent models for content — Content entries are queryable like any Eloquent model. You can write scopes, use relationships, and integrate content queries into your existing application logic without a separate API client.
- Events and queues — Content publish fires a Laravel event. You dispatch queue jobs for downstream processing (webhooks, AI enrichment, cache invalidation) using Laravel's queue system — not a proprietary job runner.
- Blade or Livewire admin panel — The editorial interface is built with Laravel's view layer and can be extended using the same tools your team already knows. Adding a custom dashboard widget shouldn't require learning a different framework.
- Composer-first distribution — Install, update, and extend through Composer. Dependency management follows PHP ecosystem standards, not a custom installer or zip download.
- Preview through Laravel routes — Draft content is accessible through signed URLs or middleware-protected routes that you define. Preview is part of your application routing, not a separate vendor-hosted interface.
CMS platforms to evaluate (in context, not ranked):
- Statamic — The closest to a "true Laravel CMS." Flat-file or Eloquent storage driver, Antlers templating or Blade, and deep Laravel integration. Best for teams that want CMS features inside an existing Laravel application.
- Filament with CMS plugins — Not a CMS out of the box, but a Laravel-native admin panel with community CMS addons. Best for teams that want to build a custom content management layer on Laravel conventions.
- October CMS — Laravel-based with a plugin marketplace. Evaluate the headless API quality and community activity before committing — maturity varies across plugins.
- Directus — Not PHP-native (Node.js), but database-first with excellent support for existing MySQL/Postgres schemas. Consider if your team already has a database schema and wants a CMS layer on top.
- Strapi — Also not PHP, but frequently compared in PHP team evaluations. Worth considering if the team is flexible on backend language and values the admin UI and plugin ecosystem.
Laravel-first CMS vs SaaS headless CMS
Dimension | Laravel-first CMS | SaaS headless CMS | When to pick Laravel | When to pick SaaS | Key risks |
|---|---|---|---|---|---|
Total cost of ownership | Server infrastructure + DevOps hours + update maintenance | Monthly subscription + API call metering | ≤5 content editors, strong DevOps team, existing Laravel infra | >10 editors, no dedicated DevOps capacity, need SLA guarantees | Laravel: unplanned server scaling costs; SaaS: API overage billing surprises |
Time to first content | 1–3 days (install, model, seed, configure) | 1–4 hours (signup, define model, start editing) | Team already maintains a Laravel application | Greenfield project where speed-to-market matters most | Laravel: scope creep adding "just one more custom feature"; SaaS: content model lock-in |
Customization depth | Unlimited — it's your codebase | Limited to the platform's extension API and marketplace | Complex domain logic tightly coupled to content (e.g., pricing rules, compliance checks) | Standard marketing site or blog content | Laravel: every customization is maintenance; SaaS: hitting walls on day 60 |
Editorial UX / preview | Build and maintain your own preview routes and UI | Built-in, usually polished and tested across browsers | Developers are available to build and iterate on editorial tooling | Editors need self-service preview and workflow tooling today | Laravel: poor preview UX = editor frustration and workarounds; SaaS: locked into vendor's editorial opinions |
Security and compliance | You own patching, hardening, and audit certification | Vendor manages SOC 2, ISO 27001, penetration testing | Strict data residency requirements that exclude SaaS providers | Need vendor-managed compliance certifications for client or regulatory requirements | Laravel: missed security patches = breach exposure; SaaS: trusting the vendor's security posture |
Scalability model | Horizontal scaling with Laravel Octane, Redis, load balancers | Vendor-managed auto-scaling, globally distributed | Predictable traffic patterns, cost optimization priority | Traffic spikes from campaigns, events, or viral content | Laravel: scaling expertise required on your team; SaaS: rate throttling during peak |
Data portability | Full database access, export Eloquent models, own your schema | Export via API (check if bulk export exists and what format) | Full data ownership is a hard requirement | Acceptable vendor dependency with contractual data export guarantees | Laravel: migrating means migrating the framework too; SaaS: verify API export completeness before signing |
Red flags for PHP / Laravel CMS selection
- "Laravel-based" but no Composer install path — it's a custom fork, not an ecosystem participant. You'll fight updates.
- No queue driver support — media processing and webhook dispatch block HTTP requests. Editors wait, timeouts happen.
- Admin panel is a React SPA with its own auth system — you're now maintaining two authentication layers and two session stores. Security gap guaranteed.
- No database migration support — schema changes require manual SQL. One missed migration in production and you're debugging at 2 AM.
- Flat-file storage only with no database option — doesn't scale beyond ~1,000 entries without performance degradation.
- API documentation is auto-generated Swagger with no request/response examples — your frontend team will reverse-engineer the API through trial and error.
Best JavaScript headless CMS
When JS-native CMS wins
JavaScript and TypeScript teams have the unique advantage of running the same language across the entire stack — from content model definition to API consumption to frontend rendering. A JS-native CMS amplifies this advantage:
- TypeScript end-to-end — Content types defined in code generate TypeScript interfaces automatically. Those types flow into frontend components, API responses, and validation logic. One type system, zero manual synchronization.
- Editor UI customization — Custom fields, sidebar plugins, workflow widgets, and dashboard components — all built with React or Vue using the same toolchain your frontend team already maintains. No context-switching to a different language or framework.
- Vercel and Netlify native integration — Built-in deploy hooks, automatic preview deployments per branch, ISR and on-demand revalidation support, and edge middleware compatibility. The deployment pipeline is a first-class feature, not an afterthought.
- Composable content blocks — Slices (Prismic), portable text (Sanity), custom blocks (Payload) — granular content modeling that maps directly to React/Vue components. Editors compose pages from typed building blocks.
- Real-time collaboration — Operational transform or CRDT-based concurrent editing (Sanity Studio, TinaCMS). Multiple editors work on the same document simultaneously without conflict resolution headaches.
- Monorepo compatibility — CMS configuration as code sits alongside frontend code and shared type definitions in a single repository. One PR changes a content model, updates the types, and adjusts the frontend component.
- Local development parity — The CMS runs locally with hot reload and seed data. Your development environment matches production behavior — no "it works on the staging dashboard" debugging.
- Content-as-code workflows — Git-backed content (TinaCMS) or API-backed with schema versioning and CI validation. Content model changes go through code review, just like application code.
AI workflow patterns for JS CMS
AI capabilities in a headless CMS are only valuable if you can integrate them into your existing pipelines. The patterns below work across most JS-native CMS platforms — what matters is API access, webhook reliability, and write-back capability:
- Auto-tagging pipeline — Content publish webhook triggers a serverless function. The function sends content to an embedding API, matches against your taxonomy via vector similarity, and writes tags back through the CMS Management API. Result: consistent taxonomy without manual tagging.
- Draft generation with guardrails — An editor provides a content brief (topic, audience, tone, length). A queue job sends the brief to an LLM API, receives a draft, runs it through schema validation (required fields, max lengths, link format), and creates a draft entry for human review. The editor refines and publishes — the LLM never publishes directly.
- Content QA automation — A pre-publish hook runs checks: broken internal links, missing alt text on images, SEO meta completeness, reading level score, and content model schema compliance. If checks fail, the publish action is blocked with a specific error message. Editors fix issues before content goes live.
- Semantic search enrichment — A scheduled job generates vector embeddings for all published content and stores them in a vector database (Pinecone, Weaviate, or pgvector). A "related content" API endpoint returns semantically similar entries — far more accurate than tag-based matching.
- Translation acceleration — Source content is sent to an LLM for initial translation. The output enters a human review workflow with side-by-side comparison. Reviewers edit and approve per locale. This pattern reduces translation cost by 40–60% while maintaining quality through human oversight.
CMS platforms to evaluate:
- Sanity — Real-time editing, GROQ query language, portable text for rich content, and deep Studio customization. Strong for teams that want maximum editorial UI flexibility.
- Payload — Self-hosted, TypeScript-native with code-first configuration. Access control defined in code, not a dashboard. Best for teams that want full control and treat CMS config as part of the codebase.
- Contentful — Market-leading SaaS with Compose and Launch for editorial workflows. Extensive App Framework for custom integrations. Best for organizations that need a mature ecosystem and vendor support.
- Hygraph — GraphQL-native with content federation for multi-source architectures. Best for teams building a unified content layer across multiple backend systems.
- TinaCMS — Git-backed with visual editing and MDX support. Best for documentation sites and developer-oriented content where content lives in the repository.
- KeystoneJS — Prisma-based, excellent for applications that need CMS capabilities alongside custom business logic. Best when the CMS is part of a larger Node.js application.
JS CMS DX scorecard
Criteria | What "good" looks like | How to validate in a PoC | Warning signs |
|---|---|---|---|
TypeScript support | Auto-generated types from content models; typed SDK; typed configuration files | Define 3 content types → verify TS interfaces auto-generate → consume in a Next.js component with full IntelliSense | Manual type definitions required; SDK responses typed as |
Preview experience | Sub-second preview updates; side-by-side editor and preview; shareable preview links with expiration | Create a draft → change a text field → measure time until preview reflects the change. Target: <1 second | Preview requires a full rebuild; no draft API endpoint; preview is a separate deployment |
Content modeling depth | Nested blocks, typed references, conditional fields, custom validation rules, polymorphic content | Model a complex page: hero + FAQ accordion + CTA + nested author references → verify all relationships resolve in API | Flat field list only; no nested structures; validation limited to "required" checkbox |
Plugin / extension API | Custom field types, sidebar widgets, workflow hooks, dashboard widgets, all via documented API | Build a simple custom field (color picker or JSON editor) → measure effort. Target: <2 hours | "Plugins" means only a pre-built marketplace; no API for custom development |
API performance | <100ms p95 for delivery API; field selection to avoid over-fetching; pagination with cursors | Send 50 concurrent requests for a complex content type → measure p95 latency | No field selection (returns everything); >500ms p95; no pagination or only offset-based |
Migration tooling | CLI for import/export; content model migration scripts; rollback capability | Export all content → import into a fresh instance → diff for data integrity | No bulk export; manual migration only; no content model versioning |
Local development | CMS runs locally with hot reload; seed data scripts; behavior matches production | Run | "Use our cloud dashboard" for all development; no local option; env parity issues |
Webhook reliability | Configurable retry policy; typed event payloads; payload signing for verification; dead-letter handling | Trigger 100 publish events → verify all received; simulate a failure → verify retry fires | Fire-and-forget delivery; no retries; no payload signing; no way to replay missed events |
Red flags for JS CMS selection
- "TypeScript support" means the SDK is written in TypeScript, but content model types are
Record<string, any>— you get zero type safety where it matters most. - No local development experience — all content modeling and testing happens through a cloud dashboard. You can't work offline or run integration tests locally.
- Preview requires a separate build and deployment — editors wait minutes instead of seeing changes instantly.
- GraphQL schema is auto-generated with no customization — you're stuck with the CMS's query structure, over-fetching data you don't need.
- "AI-powered" appears on the marketing page but there's no API for custom AI pipelines — you can't integrate your own models or workflows.
- Content export is only available through a support ticket — you won't discover this lock-in until you try to migrate.
Best frontend for headless CMS
Frontend framework options
The frontend framework choice depends on three factors: your team's rendering strategy requirements, existing framework expertise, and the performance characteristics your content demands. There is no universally "best frontend" — only the best match for your specific scenario.
- Next.js — Supports ISR, SSG, and SSR in a single framework with the largest ecosystem of CMS integrations, middleware for edge logic, and strong enterprise adoption. The default choice when you need one framework for everything. Trade-off: Vercel platform affinity adds soft lock-in; the framework's growing feature surface increases complexity.
- Nuxt — The right choice if your team is a Vue organization. Hybrid rendering modes, auto-imports, excellent developer experience, and a mature module ecosystem. Trade-off: smaller enterprise adoption footprint than Next.js; fewer CMS-specific SDK integrations available.
- Astro — Purpose-built for content-heavy sites with minimal client-side JavaScript. Islands architecture means only interactive components ship JS to the browser. Outstanding Core Web Vitals out of the box. Trade-off: not suited for app-like interactive experiences; preview integration less mature than Next.js.
- Remix — Data-driven nested routing with progressive enhancement and SSR-first rendering. Strong for applications where content and dynamic data coexist. Trade-off: smaller CMS integration ecosystem; more manual setup for preview and caching.
- SvelteKit — Consistently praised for developer experience and raw performance. Compiles away the framework at build time. Trade-off: smallest talent pool among major frameworks; fewest CMS SDKs available; evaluate ecosystem maturity for your scale.
Frontend chooser
Use case | Best frontend | Why | Preview strategy | Caching strategy | Consider if... |
|---|---|---|---|---|---|
Marketing site + blog (SEO-critical) | Astro or Next.js (SSG mode) | Minimal JS = faster load, better Core Web Vitals scores | On-demand ISR revalidation or dev-mode preview route with draft API | CDN edge cache with stale-while-revalidate; webhook-triggered purge | >500 pages, content updates less than once per day |
E-commerce storefront | Next.js | ISR for catalog pages, SSR for cart/checkout, middleware for A/B testing | Draft mode with preview cookies scoped to editor sessions | Edge cache with tag-based invalidation per product/collection | Personalization requirements, complex routing logic |
SaaS documentation site | Astro or Next.js | MDX support, fast builds, strong search integration (Algolia, DocSearch) | Git-based preview via PR preview deployments | Long TTL (hours/days), invalidate on merge to main branch | >200 pages, structured content with versioning |
Member portal or dashboard | Next.js or Remix | SSR for auth-gated content, API routes for backend logic, session management | Auth-aware preview with session tokens, role-based preview access | No edge cache for personalized content; server-side cache with user-segment keys | User-specific content, forms, transactional features |
Multi-language content hub | Nuxt or Next.js | Built-in i18n routing, locale-aware static generation, hreflang automation | Per-locale preview URLs with locale switcher in preview toolbar | Per-locale cache keys; independent invalidation per language | >5 locales, frequent translation updates |
Campaign landing pages | Astro | Fast build times, minimal overhead, component islands for interactive elements | Visual editing integration (TinaCMS, Storyblok Visual Editor) | Aggressive CDN cache with manual purge on campaign publish | Short-lived pages, rapid design iteration, performance-critical |
Red flags for frontend selection
- Choosing a framework because it's trending without running a PoC on your actual content — what performs well for a demo app may struggle with your 2,000-page site.
- Preview strategy is an afterthought — editors working blind leads to content errors that reach production.
- No ISR or revalidation strategy — you're stuck choosing between stale content and full site rebuilds on every edit.
- Your chosen framework has no SDK for your CMS — you'll build and maintain a custom integration layer indefinitely.
- Selecting SSR-everywhere when 90% of your pages are static — you're paying for server compute that delivers worse performance than a CDN-cached static page.
Best stack for headless CMS
A headless CMS is one layer in a larger architecture. The stack around it — search, auth, media, hosting, observability — determines whether the system scales, stays secure, and remains maintainable. Below are reference stacks for common organizational models.
Reference stacks
1. Enterprise + Compliance stack For regulated industries with SOC 2 / ISO 27001 requirements, 50+ content editors, and multi-stage approval workflows.
2. Startup speed stack For MVPs shipping in 2–4 weeks with fewer than 10 editors, prioritizing iteration speed over long-term infrastructure optimization.
3. Media-heavy stack For video and podcast platforms, image-heavy editorial sites, and any property where media delivery cost and performance are primary concerns.
4. Intranet / employee portal stack For internal knowledge bases with permissions-aware search, SCIM provisioning from corporate IdP, and audit requirements for internal content access.
5. Gov / regulated stack For public-sector projects requiring WCAG 2.2 AA accessibility compliance, immutable audit logs, multi-stage content approvals, and data residency guarantees.
6. Multi-brand / multi-tenant stack For agencies or brand houses managing multiple properties on shared infrastructure with isolated content spaces, shared component libraries, and centralized governance.
Stack blueprint
Layer | Enterprise + Compliance | Startup Speed | Media-heavy | Intranet / Portal | Gov / Regulated | Multi-brand |
|---|---|---|---|---|---|---|
CMS | Contentful or Optimizely | Sanity or Payload | Sanity + Mux | Contentful or SharePoint headless | Strapi (self-host) or Payload | Contentful (spaces) or Storyblok |
Frontend | Next.js (SSR + ISR) | Astro or Next.js | Next.js (image/video optimization) | Next.js (SSR, auth-gated) | Next.js or Astro (a11y focus) | Next.js (monorepo, shared components) |
Search | Algolia or Azure AI Search | Typesense or Algolia free tier | Algolia + vector search | Algolia (secured API keys per role) | Typesense (self-host) | Algolia (multi-index per brand) |
Auth | Entra ID or Okta | Auth.js or Clerk | Auth.js + signed media URLs | Entra ID + SCIM provisioning | Keycloak (self-host) | Auth0 (multi-tenant) |
Media / CDN | Cloudinary + Akamai | Cloudflare R2 + Images | Mux (video) + Cloudinary (images) | Cloudinary (internal DAM) | Self-host media + Cloudflare CDN | Cloudinary (shared DAM, per-brand folders) |
Hosting | Azure or AWS (dedicated infra) | Vercel or Netlify | Vercel + dedicated media origin | Azure or AWS (internal network) | Gov cloud (AWS GovCloud, Azure Gov) | Vercel (per-brand projects) |
Observability | Datadog or Grafana Cloud | Vercel Analytics + Sentry | Vercel + Mux Data + Sentry | Datadog (internal SLA dashboards) | Self-host Grafana + Loki | Datadog (per-brand dashboards) |
CI/CD | Azure DevOps or GitHub Enterprise | GitHub Actions + Vercel auto-deploy | GitHub Actions + media pipeline | Azure DevOps (internal) | GitHub Enterprise + gated deploys | GitHub Actions (monorepo triggers) |
AI layer | Azure OpenAI + custom pipelines | OpenAI API (direct) | Whisper (transcripts) + LLM summaries | Azure OpenAI (internal content tagging) | Self-host LLM or Azure OpenAI (Gov) | Shared AI pipeline, per-brand config |
For a detailed feature-by-feature comparison of the CMS platforms mentioned above, see the platform comparison page on this site.
Red flags for stack decisions
- All components from a single vendor — single point of failure and zero negotiation leverage when contracts renew.
- Choosing Kubernetes for a three-page marketing site — the infrastructure complexity will cost more than the project itself.
- No observability layer — you'll discover performance problems and outages from user complaints, not dashboards.
- "We'll build our own search" — six months later it's still worse than a free-tier Algolia implementation.
- Media files stored in CMS blob storage — no CDN delivery, no on-the-fly transformations, no signed URLs for access control.
- Skipping the auth layer decision — bolting on authentication after launch is the most expensive integration change you can make.