Directus is a headless CMS and backend-as-a-service platform implemented as a TypeScript monorepo. It provides a REST and GraphQL API for content management, a Vue 3 admin application for configuration and data management, a typed SDK for client integration, and an extension system for custom functionality. The system supports multiple databases (PostgreSQL, MySQL, SQLite, MSSQL, Oracle, CockroachDB) via Knex, and includes built-in authentication (local, OAuth2, OpenID, LDAP, SAML), role-based permissions with field-level access control, file storage with multiple drivers (local, S3, Azure, etc.), and a flows automation engine. Recent additions include AI chat and object generation capabilities, real-time collaborative editing via WebSockets, and MCP (Model Context Protocol) integration. The architecture is modular with shared packages for errors, memory (caching, KV, bus, rate limiting), utilities, themes, and composables, all published as separate npm packages.
Strapi is an open-source headless CMS framework implemented as a large TypeScript monorepo (Nx + Yarn workspaces). In production it runs a Koa-based Node.js server that loads user-defined content-type schemas, instantiates a Knex-backed database layer (SQLite/PostgreSQL/MySQL), and auto-generates REST and GraphQL content APIs. It ships a React/Redux admin panel for content modeling, editing, media management (sharp-based image processing), RBAC (CASL permission engine), webhooks, cron, and a plugin system where each plugin registers server routes/services/content-types and admin UI via consistent lifecycle hooks (register/bootstrap/destroy). Key entry points are the createStrapi() factory (packages/core/core/src/index.ts), the strapi CLI (packages/core/strapi/bin/strapi.js), renderAdmin() (packages/core/strapi/src/admin.ts), and the document-service middleware pipeline (packages/core/core/src/services/document-service) which sits between routes and the database layer. Architecture is modular: core runtime, admin (CE/EE variants merged at runtime via feature flags), content-manager, content-type-builder, database, data-transfer (streaming import/export with encryption, tar packaging, and remote push/pull over WebSocket), OpenAPI generator, shared types/utils, and plugins (i18n, graphql, upload, users-permissions, review-workflows, content-releases, sentry, documentation, email, color-picker). The primary data flow is HTTP (REST/GraphQL) → controllers → document service middleware → entity service → database layer with subscriber-based lifecycle hooks; a parallel flow handles data-transfer streaming of entities, links, and assets between instances or to files. Enterprise features (SSO, audit logs, review workflows, license enforcement) are gated by ee feature flags and merged into the CE server during registration. Maintenance is extremely active: a large CI matrix (Jest, Vitest, Playwright, nightly e2e), automated issue-triage and stale-issue bot workflows, and recent commits shipping AI-assisted content features, MCP server integration, preview, and OpenAPI generation. Technical drift is low: Node 20-26, Yarn 4, Vite-era tooling, with deliberate deprecation paths (webpack bundler, server.globalProxy, admin.autoOpen) rather than abandoned code. Internal debts include the global global.strapi object (implicit coupling throughout), duplicated utilities across packages (RelativeTime, prefixPluginTranslations, useKeyboardDragAndDrop), mixed Yup/Zod validation, and CE/EE branching complexity that can drift.
Payload CMS is a headless content management system framework built on Next.js and TypeScript. It functions as a full-stack application generator, allowing developers to define content schemas (collections, globals) which automatically produce an admin UI, REST/GraphQL APIs, and database schemas. The architecture is a monorepo utilizing pnpm workspaces, with distinct packages for core logic (packages/payload), the admin interface (packages/ui), and database/storage adapters (packages/drizzle, packages/db-mongodb, packages/storage-*). It heavily leverages Next.js App Router and React Server Components for data fetching and rendering. The system supports polyglot persistence through adapters for PostgreSQL (via Drizzle ORM), MongoDB (via Mongoose), SQLite, and Cloudflare D1. It also abstracts file storage across providers like S3, Azure, GCS, and Vercel Blob. A significant portion of the codebase involves complex integration with the Lexical rich text editor and a robust plugin ecosystem for features like SEO, Ecommerce, and Multi-tenancy. The framework emphasizes developer experience through CLI tools, codemods for version upgrades, and extensive type generation. Maintenance is active with frequent commits and a large test suite covering integration and E2E scenarios. However, the complexity of maintaining multiple database and storage adapters alongside rapid Next.js ecosystem changes introduces a medium level of technical drift risk. Generated files in the admin UI and API routes require careful handling to avoid conflicts during framework updates, and the sheer number of open issues (846) suggests ongoing technical debt management.
Keystone 6 is a powerful, schema-driven headless CMS and application framework for Node.js. It allows developers to define their data model in TypeScript, from which it automatically generates a full GraphQL API, a Prisma ORM layer, and a beautiful React-based Admin UI. The framework excels in its extensibility, offering a rich document editor with custom component blocks, granular access control, flexible authentication strategies, and deep integration with modern frameworks like Next.js, Remix, and Astro. This monorepo contains the core packages, a comprehensive set of examples, and extensive integration tests. While the codebase is actively maintained and demonstrates high craftsmanship, its sheer size and explicit internal instability markers indicate a medium level of technical drift in some areas.
MarkdownDB is a JavaScript library and CLI tool that parses markdown files to extract structured data (frontmatter, tags, links, tasks) and stores it in a queryable SQLite database (or JSON files). It provides a lightweight Node.js API for querying the indexed data and includes a command-line tool for indexing folders and executing scripts. The architecture follows a modular design with clear separation between markdown parsing, processing, storage, and querying layers. The system uses remark-family tools for markdown parsing, Knex.js for database operations, and Zod for schema validation. Key entry points are the CLI (`src/bin/index.js`) and Node.js API (`src/index.ts`).
ApostropheCMS is a full-stack content management system built with Node.js, MongoDB, and Vue.js. It provides a modular architecture with extendable content types (pages, pieces, widgets), a rich admin UI with in-context editing, headless API support via Astro integration, and extensive internationalization and permission systems. The monorepo contains the core CMS package, CLI tools, database adapters, file storage abstraction, AI content generation helpers, import/export utilities, and many first-party modules for SEO, forms, events, and more. The codebase is large and well-tested, with a strong emphasis on security (prototype pollution guards, permission regression tests) and developer experience (scaffolding, OpenAPI generation). However, it shows signs of technical drift in some legacy packages and a complex build pipeline.
This repository implements the Ghost CLI, a command-line tool for installing, configuring, updating, and managing Ghost CMS instances on Linux servers (Ubuntu). The system is a monolithic Node.js application with a plugin architecture. Its core responsibilities include: (1) resolving and downloading Ghost versions from the npm registry, (2) setting up required infrastructure (MySQL, nginx, systemd), (3) managing instance lifecycle (start/stop/restart), (4) handling content migration and import/export via the Ghost Admin API, (5) running health checks via the doctor command, and (6) handling major version upgrades with rollback support. Architecturally, the CLI is composed of a Command base class with yargs integration, a layered task system using listr2 for sequential/parallel operations, and an extension system that allows built-in plugins (nginx, systemd, MySQL) to inject commands, setup steps, doctor checks, and custom process managers. Configuration is managed via JSON files, and dependencies are installed using either yarn or pnpm. The codebase is well-structured with clear separation of concerns: commands in lib/commands/, tasks in lib/tasks/, utilities in lib/utils/, and extensions in extensions/. The tool depends on external services: npm registry for version resolution, Ghost Admin API for import/export, system tools (nginx, systemd, MySQL) for production setups, and acme.sh for SSL certificate management. It supports local development (direct node process) and production (systemd service). The codebase is actively maintained, with support for Ghost versions 1.x through 6.x, Node.js 22/24, and MySQL 5.6 through 9.4. While there is some legacy code for older Ghost versions, the overall architecture is modern, testable, and modular.
This repository powers the tina.io website: a marketing, blog, changelog, and documentation hub for TinaCMS (an open-source Git-backed headless CMS). Built with Next.js 14 (App Router), TypeScript, Tailwind CSS, and TinaCMS itself as the content management system, it dogfoods the product. Content is stored as JSON (structured pages with block-based templates) and MDX (blog posts with rich components). The site features internationalization (English/Chinese with automated translation workflows), Algolia search indexing, API routes for Mailchimp, SendGrid, GitHub, and YouTube integrations, OG image generation via Satori/resvg, visual regression testing with Playwright, and a comprehensive UI component library. The architecture is a standard Next.js monolith with a block-based page builder and a custom TinaCMS schema defining 12 content collections. While the codebase is well-organized and actively maintained, it exhibits some technical debt: mixed styling systems (styled-components and Tailwind), TypeScript strict mode disabled, and a large block template set that may become unwieldy. The i18n implementation relies on duplicated route trees, which a design document aims to refactor.
This is the Builder.io monorepo, a comprehensive headless CMS and visual page builder platform. It provides multi-framework SDKs (React, Angular, Vue, Svelte, Qwik, Solid, React Native, etc.) for fetching and rendering Builder.io content, a plugin ecosystem for extending the visual editor with custom components and data sources (commerce, CMS, media), CLI tools for project scaffolding and space management, and numerous example applications. The core SDK uses Mitosis for code generation to produce framework-specific implementations, and includes features like A/B testing, personalization, localization, visual editing, and server-side rendering. The repository also contains a Gatsby source plugin, a plugin loader, and integration plugins for Shopify, Contentful, Cloudinary, and others. While the codebase is large and actively maintained, it exhibits some technical drift with legacy Gen1 SDKs, duplicated configurations, and outdated dependencies in examples.
This repository implements a headless CMS architecture using Nuxt.js (v2.15) as the frontend and a full WordPress installation (v4.9.8) as the backend content source. The Nuxt application consumes WordPress REST API endpoints (extended by plugins like ACF to REST API, WP API Menus, and Contact Form 7) to render pages statically or server-side. The frontend includes custom Vue components for navigation, lazy-loaded images, a carousel slider, contact forms, and a deferred rendering mixin for performance. The WordPress backend is fully vendored within the repository, including core files, a custom theme that redirects WordPress routes to the Vue app, and numerous plugins for custom fields, user roles, SVG uploads, and CORS support. The project appears to be a starter template or production site for a headless WordPress + Nuxt stack, but the vendored WordPress core and outdated dependencies (WordPress 4.9.8, Nuxt 2.15, deprecated node-sass) indicate significant technical drift and maintenance challenges.