unsubbed.co

Apostrophe

Apostrophe is a self-hosted content management tool that provides full-featured, Node.js-based content management framework.

Open-source CMS, honestly reviewed. No marketing fluff, just what you get when you self-host it.

TL;DR

  • What it is: Open-source (MIT) full-stack CMS built on Node.js and MongoDB, with in-context page editing and optional headless REST API [README].
  • Who it’s for: Development agencies and software teams building bespoke sites for non-technical clients. Content editors who need to edit live pages without touching an admin panel. Enterprise teams managing dozens of sites via a single dashboard [website].
  • Cost savings: Contentful’s paid plans start at $300/mo, Sanity at $99/mo. ApostropheCMS core is MIT-licensed and self-hosted on any $10–20/mo VPS. You trade monthly SaaS fees for one-time setup cost [README][website].
  • Key strength: The in-context editing experience — editors click on live page text and edit it in place, not in a disconnected admin interface. For agencies managing clients who complain about WordPress’s block editor, this is a genuine selling point [website].
  • Key weakness: This is a developer tool, not a no-code platform. MongoDB is a mandatory dependency — not optional. Pro features (advanced permissions, document versions, automated translations) are paywalled at undisclosed pricing. The GitHub star count of 4,538 signals a significantly smaller ecosystem than WordPress or even Ghost.

What is Apostrophe

ApostropheCMS is a full-stack content management system built on Node.js and MongoDB. It takes a different architectural bet than most modern CMSes: rather than splitting into a separate headless API and a frontend, it ships as a unified server-side application that renders pages while also exposing REST endpoints. The pitch is that you get in-context editing — editors click on visible page content and modify it directly, without navigating to a separate admin panel — while developers can also decouple the frontend and consume content headlessly via any JavaScript framework [README][website].

The project has been around long enough to have enterprise case studies. Michelin chose it for a platform that will eventually power over 400 websites across dozens of languages. Kimpton Hotels uses it to manage restaurant websites with differentiated branding from a single dashboard [website]. These are not small deployments. The “Assembly” multisite product — a fleet-management layer over core ApostropheCMS — exists specifically for organizations running many sites.

The tech stack is opinionated: Node.js 20+, MongoDB 6+, npm 10+, Vite for builds, Vue.js in the admin interface, ESM modules throughout [README]. If your team already lives in this stack, that’s a feature. If you’re a PHP shop or a team that finds MongoDB unfamiliar, that’s overhead you need to budget.

At 4,538 GitHub stars, it is a real project with real adoption — but it is an order of magnitude smaller than WordPress’s mindshare and notably smaller than newer headless competitors like Strapi (~65K stars) or Directus (~30K stars). The community Discord is active, and the core team responds to issues [README].


Why people choose it

The honest answer is that most teams choosing ApostropheCMS are making a specific trade: they want the editor experience of a traditional CMS (edit on the live page, see it immediately) combined with the developer experience of a modern Node.js application (npm packages, ESM modules, version-controlled content types, REST API).

WordPress has the largest ecosystem and the most content editors who already know it, but extending WordPress in 2026 means navigating PHP, Gutenberg’s block editor, and a plugin marketplace full of abandoned or upsell-heavy tools. ApostropheCMS is a clean-slate Node.js application where content types are JavaScript modules and the extension pattern is consistent and documented [README].

Ghost is the nearest Node.js alternative for publishing use cases, but Ghost is laser-focused on blogging and newsletters — it doesn’t try to be a general-purpose web application framework. ApostropheCMS is intentionally more general: it handles pages, arbitrary content types (“pieces”), relations between content, and now headless delivery via REST API [README].

For the specific use case of digital agencies building custom sites for non-technical clients, the in-context editing argument is strong. Agencies repeatedly cite the client editing experience as a differentiator in demos. The live-page editing means clients don’t need to learn a separate admin interface for routine content updates.

The Astro integration is the most interesting recent addition: you can build the frontend entirely in Astro while keeping the full ApostropheCMS admin for editors, and in-context editing still works through the Astro layer [website]. That unlocks the performance benefits of static site generation without sacrificing the editor experience.


Features

Core CMS:

  • In-context visual editing — click on live page elements to edit directly [website]
  • Pieces system — define arbitrary content types (blog posts, team members, events) as reusable items [README]
  • Pages with a tree structure and drag-and-drop page management [README]
  • Media library with image manipulation [README]
  • Relationship fields between content types [README]
  • Localization and multisite via Assembly tier [website]
  • Document versioning (via Pro extension — not in the free tier) [website]

Headless / API:

  • REST API for all content types — pages and pieces [README][2]
  • Astro integration with in-context editing preserved [website]
  • Compatible with React, Vue, Svelte, or any frontend consuming REST [website]
  • 4.8.0 improved rich text widget import via REST — if you send HTML with <img> tags pointing to existing images, it auto-imports them and rewrites to correct figure markup [5]

Developer experience:

  • Modular architecture — every feature is a module, everything can be overridden [website]
  • npm package ecosystem for extensions [2][README]
  • MongoDB schema migrations handled automatically — new fields get default values applied to existing documents without manual migration scripts [5]
  • Vite-powered dev server with fast builds [README]
  • ESM-native, modern JavaScript throughout [README]

Editor experience:

  • Mobile preview mode — breakpoint toggles in the admin bar so editors can preview mobile layout without leaving the interface [5]
  • Smart schema defaults — new fields appear with correct defaults in existing documents automatically [5]
  • Draft/publish workflow (via Pro) [website]

Pro-gated features (paid, pricing not published):

  • Advanced permissions and RBAC
  • Document versions
  • Draft sharing
  • Automated translations
  • AI helpers [website]

Assembly (multisite, separate product):

  • Fleet management dashboard across multiple sites
  • No-code site factory with custom configurations [website]

Pricing: SaaS vs self-hosted math

ApostropheCMS core (self-hosted):

  • License: MIT — free to use, modify, deploy, and embed in commercial projects [README]
  • VPS cost: $10–20/mo on Hetzner or DigitalOcean with enough RAM for Node.js + MongoDB

Apostrophe Pro:

  • Paid extensions tier. Pricing is not listed on the website — you navigate to the pricing page and see a “Contact us” path for Pro and Assembly. This is a meaningful gap for anyone trying to budget a project. You need to have a sales conversation before knowing what advanced permissions or document versioning costs.

Managed hosting:

  • Available via ApostropheCMS’s own platform built on AWS + MongoDB Atlas [website]
  • Pricing not publicly listed

Comparison to SaaS CMS alternatives:

  • Contentful: Developer tier free, Team plan $300/mo, Scale plan custom
  • Sanity: Free hobby tier, Growth $99/mo, custom enterprise
  • Prismic: Free tier, Starter $9/mo per user, scales upward

For a solo developer or small agency building one or two client sites, the self-hosted ApostropheCMS core is essentially free infrastructure cost. The case breaks down slightly because MongoDB adds operational complexity — you need either MongoDB Atlas (free for small instances, paid past a certain size) or a self-managed MongoDB instance alongside your application.

Realistic annual math for a typical agency site:

  • Self-hosted on $20/mo VPS + $15/mo MongoDB Atlas M10 cluster ≈ $420/yr
  • Contentful Team plan ≈ $3,600/yr
  • Sanity Growth at $99/mo ≈ $1,188/yr

The savings are real, especially at agency scale across multiple client projects. The tradeoff is the MongoDB operational overhead and the fact that Pro features — which you likely need for any serious content workflow — have undisclosed pricing.


Deployment reality check

ApostropheCMS is not a one-click install. It requires Node.js 20+, MongoDB 6+, and npm 10+ running together. The fastest path is a VPS with both Node and MongoDB, or a VPS plus MongoDB Atlas for the database layer [README].

What you actually need:

  • Linux VPS with at least 2–4GB RAM (Node.js + MongoDB, even lightly loaded)
  • Node.js 20+ installed (nvm recommended)
  • MongoDB 6+ — either local install or Atlas free tier for small projects
  • A domain and reverse proxy (nginx or Caddy) for HTTPS
  • npm to manage the project

What the setup looks like: The CLI (npm install -g @apostrophecms/cli) creates a project scaffold in minutes. Running apos create my-website gives you a working local instance at http://localhost:3000. The challenge isn’t initial setup — it’s production deployment, where you’re responsible for process management (pm2 or similar), MongoDB backups, SSL renewal, and version upgrades [README].

Realities to expect:

  • MongoDB is a genuine operational dependency. If you’ve never maintained a MongoDB instance, budget time to learn it — or use Atlas and accept the additional monthly cost.
  • The Pro features require a support agreement before pricing is clear. For agencies trying to quote client projects, this is friction.
  • The ecosystem is smaller than WordPress. If you need a specific integration — payment processor, email marketing, booking system — you’re more likely to build it than find a ready-made module.
  • The Astro integration is well-documented and the starter kits are production-quality [website]. For headless deployments, this is the smoothest path.
  • The admin interface is Vue.js. If your team needs to customize the admin itself, that’s a Vue codebase to maintain alongside your Node.js backend.

Time estimates:

  • Experienced Node.js developer, following docs: 1–2 hours to working local instance, 4–8 hours to production with SSL and a real domain.
  • Agency developer familiar with the stack, deploying a client site from a starter kit: 1–2 days to something presentable.
  • Non-technical founder without developer help: this is not realistic without assistance.

Pros and Cons

Pros

  • MIT license. The core is genuinely open source — no “fair-code” restrictions, no commercial licensing for self-hosting [README]. Agencies can build client products on it, resell, or embed it without legal review.
  • In-context editing is the real thing. Editors modify content on the live rendered page. This is genuinely different from WordPress’s block editor or a headless CMS where editors work in a separate admin UI. For clients who struggle with disconnected interfaces, this matters.
  • Full-stack JavaScript. One language — Node.js — from database layer to admin interface to frontend templates. No PHP, no polyglot stack overhead [README].
  • Enterprise case studies. Michelin and Kimpton are not hobbyist deployments. The platform handles real scale [website].
  • Astro integration. In-context editing with a static-capable frontend is rare. The ApostropheCMS + Astro combination solves a real problem for agencies who want performance and editor experience simultaneously [website].
  • Automatic schema migrations. New fields apply defaults to existing documents automatically, eliminating a painful category of deployment bugs [5].
  • Mobile preview in admin. Breakpoint toggles in the admin bar — content editors can verify mobile layout without opening browser DevTools [5].

Cons

  • MongoDB is mandatory. There is no PostgreSQL or SQLite option. For teams or hosting environments where MongoDB adds cost or operational complexity, this is a hard constraint.
  • Pro pricing is opaque. Advanced permissions, document versioning, draft sharing — core workflow features for any serious content team — are behind a sales conversation. This makes budgeting harder than it needs to be.
  • 4,538 stars is small for a general-purpose CMS. The plugin/module ecosystem reflects this. Expect to build integrations your team needs rather than finding them in a marketplace.
  • Not a no-code platform. A non-technical founder cannot deploy this without developer involvement. The editor experience is excellent once deployed; getting there requires Node.js and MongoDB competence.
  • Assembly multisite is a separate paid product. If you came for the fleet-management use case, pricing is unclear until you talk to sales.
  • REST API improvements are ongoing. The 4.8.0 notes cite “rich text REST API improvements” as a headline feature [5], which implies prior pain. The API surface is functional but still maturing.
  • Smaller community than alternatives. GitHub Discussions and Discord are active, but the volume of community answers for edge cases is lower than you’d find for WordPress or even Strapi.

Who should use this / who shouldn’t

Use ApostropheCMS if:

  • You’re a Node.js development agency building custom sites for clients who need to manage content themselves. The in-context editing story is genuinely strong in sales demos.
  • Your client or team is currently paying $100–$300/mo for Contentful or Sanity, and you have someone who can manage a Node.js deployment.
  • You need both headless API delivery and in-context editing — the Astro integration handles this better than most alternatives.
  • You’re building a multi-site platform for a brand with many properties. Assembly is designed for this exact problem.
  • You’re comfortable with MongoDB and want a CMS that fits natively into a full-stack JavaScript environment.

Consider Ghost instead if:

  • Your primary use case is blogging, newsletters, or a publication. Ghost is simpler, purpose-built, and has first-class membership/subscription tooling.

Consider Strapi or Directus instead if:

  • You want headless-first with a larger community, broader database support (PostgreSQL, MySQL), and don’t need in-context editing.
  • Your team wants to choose their own frontend without caring about the admin editing experience.

Consider WordPress instead if:

  • Your content editors already know it and you don’t want to retrain them.
  • You need a deep plugin ecosystem covering e-commerce, booking, SEO, membership, and dozens of other verticals out of the box.

Don’t use this if:

  • You’re a non-technical founder without a developer. Deployment requires Node.js and MongoDB knowledge.
  • Your compliance or infrastructure team won’t approve MongoDB.
  • You need transparent, published pricing for Pro features before committing.

Alternatives worth considering

  • Ghost — Node.js, MIT (core), excellent for publishing. No in-context editing. Managed Ghost(Pro) starts at $9/mo; self-hosted is free. Simpler stack: SQLite or MySQL, no MongoDB.
  • Strapi — headless-first, open source (MIT + commercial tiers), broader community (~65K stars), PostgreSQL/MySQL support. Less mature editor experience, no in-context editing.
  • Directus — headless, wraps any SQL database, strong REST + GraphQL APIs. Excellent for developer-driven content APIs; no in-context editing.
  • Payload CMS — newer Node.js CMS (TypeScript-first), PostgreSQL support, growing fast. Worth evaluating for teams that find ApostropheCMS’s MongoDB requirement a blocker.
  • WordPress — the incumbent. PHP, massive ecosystem, WooCommerce, enormous talent pool. Block editor is divisive. Self-hosted is free; quality managed hosting runs $20–100/mo.
  • Contentful / Sanity — polished SaaS headless CMSes. Zero maintenance, strong developer experience, real pricing at scale ($99–$300+/mo).

For agencies building bespoke client sites on Node.js, the realistic shortlist is ApostropheCMS vs Payload CMS for in-house development, and Ghost if the use case is primarily publishing. Contentful and Sanity make sense when operations are the bottleneck, not cost.


Bottom line

ApostropheCMS has a genuine differentiator: in-context editing on a modern Node.js stack with an MIT license. For agencies building client sites where “the client can manage their own content” is a requirement, it solves a real problem — and the Astro integration makes it viable in modern frontend workflows. The MongoDB requirement, the opaque Pro pricing, and the smaller ecosystem compared to WordPress or Strapi are real costs you need to budget. This is a tool for development teams, not solo non-technical founders. If you have a Node.js developer and a client paying $200+/mo for a headless CMS, the math for self-hosting ApostropheCMS is straightforward. If you don’t, it’s not the right tool.


Sources

  1. ApostropheCMS — SEO Tools Extension page. https://apostrophecms.com/extensions/seo

  2. Bob Means, ApostropheCMS Blog“Apostrophe 4.8.0 Mobile Preview, rich text REST API improvements, UI refinements, and fixes” (Oct 3, 2024). https://apostrophecms.com/blog/apostrophe-4-8-0-mobile-preview-rich-text-rest-api-improvements-ui-refinements-and-fixes

Primary sources:

Features

Integrations & APIs

  • Plugin / Extension System
  • REST API

Automation & Workflows

  • Workflows