KeystoneJS
TypeScript-first Node.js CMS and application framework with a code-defined schema, auto-generated GraphQL API, and a polished admin UI. Built for developers who want a programmable content backend without writing CRUD from scratch
Quick Start
npm create keystone-app@latest my-project && cd my-project && npm run dev Overview
KeystoneJS is a TypeScript-first CMS framework for Node.js. You define your content schema in code — TypeScript files that describe your data types, their fields, their relationships, and their access control rules. Keystone takes that schema and generates a GraphQL API and a working admin UI. The result is a content backend where the data model is a first-class part of your codebase rather than a configuration file in a database.
The schema-in-code approach is the defining characteristic. Adding a new content type means writing a TypeScript list definition, committing it, and restarting the server. The API updates automatically. Every schema change is tracked in git, can be reviewed in a pull request, and benefits from TypeScript’s type checking. For development teams who treat infrastructure as code, this is a natural fit.
The document field is worth calling out specifically. Rather than storing rich text as raw HTML, Keystone’s document field uses a structured format based on Slate.js. The editor is block-based and extensible — you define which block types are available, what inline elements are permitted, and how relationships to other content types are embedded. The output is portable JSON that any frontend can render.
The GraphQL API includes filtering, sorting, and pagination on every list, and nested queries traverse relationships across content types in a single request. For frontends built on Next.js, Remix, or any React-based framework, this gives a typed data layer that integrates naturally with modern data-fetching patterns.
KeystoneJS suits teams who want a programmable content backend without building one from scratch. It is not the right choice for non-technical content managers who need to modify the schema, or for teams that need a REST API without additional work.
KeystoneJS: Pros & Cons
| Pros (The Wins) | Cons (The Friction) |
|---|---|
| Schema in TypeScript: Version-controlled, type-safe, refactorable with IDE. | Developer only: Schema changes require code edits and restarts. |
| Auto GraphQL API: Filtering, sorting, pagination generated from schema. | GraphQL first: REST support requires custom work. |
| Rich document field: Structured JSON storage; extensible block editor. | PostgreSQL required: SQLite dev only; no MySQL support. |
| 9.9k stars: Actively maintained by Thinkmill; regular releases. | GraphQL learning curve: Steeper than Strapi for teams new to GraphQL. |
Use Cases
Specific ways to use KeystoneJS for your workflow.
Deployment Strategy
Recommended ways to host KeystoneJS in your own environment.