# Strapi

Open-core headless CMS: content types in the admin, auto-generated REST and GraphQL APIs, env-file config.

Strapi is a Node.js headless CMS: model content types visually, get REST and GraphQL endpoints for each, with draft and publish, media library, i18n, and roles. The Community core is MIT; features under ee/ are commercially licensed and Strapi Cloud is the hosted edition. Configuration is config/*.js plus .env. The official REST API is how an agent creates, publishes, and uploads; no Strapi-org MCP was found.

Alternative to: Contentful, Sanity

- Capabilities: adaptable, operable
- Vertical: content-publishing
- Shape: business-app
- Form factor: web-app
- Execution model: deterministic
- Provenance: human-written (recorded, never ranked)
- Repo: https://github.com/strapi/strapi (MIT core with EE license under ee/ (GitHub NOASSERTION)), 73062 stars, last commit 2026-09-02
- Last activity: 2026-09-02
- Page: apps/strapi--strapi.html
- JSON: apps/strapi--strapi.json

## Use it when

- I need a content API for a site or app fast, and editors who want a normal CMS screen
- I want my agent to push entries and media through a documented API while the content model stays under my control

## Gotchas

- Open-core: anything under ee/ is not MIT; the license file also says a registered Cloud account changes the terms
- All content types are private by default; grant public access or use an API token before the API answers
- No official Docker image; generate one with npx @strapi-community/dockerize
- Content types cannot be created through the API; define them in the admin or as schema.json files

## Editions

- Community: Free, open source
  - source: https://github.com/strapi/strapi
  - installable: npx create-strapi@latest my-project
- Growth and Enterprise (self-hosted): Free, closed source
  - hosted: https://strapi.io/pricing
- Strapi Cloud Starter: $35 per month, closed source
  - hosted: https://strapi.io/pricing
- Strapi Cloud Pro: $90 per month, closed source
- Strapi Cloud Business: $450 per month, closed source

## Adaptable: make it yours

Effort: light-edit (24 things to edit), surface kind deployment-plus-code

The named .env vars (HOST, PORT, APP_KEYS, *_SALT, *_SECRET, DATABASE_*) and config/server.js, database.js, admin.js are deployment configuration. Adapting Strapi to a business means defining content types, which the admin Content-Type Builder writes as src/api/&lt;type>/content-types/&lt;type>/schema.json in development mode only, then editing code in src/api/&lt;type>/controllers, services, routes and policies, lifecycle hooks, and config/plugins.js and config/middlewares.js.

- Env vars: HOST, PORT, APP_KEYS, API_TOKEN_SALT, ADMIN_JWT_SECRET, JWT_SECRET, TRANSFER_TOKEN_SALT, DATABASE_CLIENT, DATABASE_FILENAME, ADMIN_PATH, STRAPI_ADMIN_BACKEND_URL, NODE_ENV, STRAPI_LICENSE
- Config files: .env, config/server.js, config/database.js, config/admin.js, config/plugins.js, config/middlewares.js, config/env/&lt;environment>/, src/api/*/content-types/*/schema.json, src/api/*/routes/, src/api/*/controllers/, src/api/*/services/
- Prompt files: none
- Accounts you'll need: Strapi Cloud (hosted edition only)

## Operable: what an agent can drive

Operability: official. Interface: api at https://docs.strapi.io/cms/api/rest (published by the builder, both).

### Reach (partial coverage)

- Create, read, update, and delete entries: reachable. REST API documents CRUD by documentId
- Save drafts and publish: reachable. REST API ?status=draft with Draft & Publish enabled
- Upload media: reachable. Upload API at /api/upload
- Populate relations and filter queries: reachable. REST API populate, filters, sort, pagination parameters
- Query over GraphQL: reachable. official GraphQL plugin
- Manage end users and permissions: reachable. Users & Permissions plugin exposes its own API endpoints
- Localize entries per locale: undetermined. i18n is core; locale parameter not confirmed on the fetched page
- Define content types and components: not reachable. REST docs: content types are built in the admin Content-Type Builder; components have no endpoints
- Manage admin roles and API tokens: not reachable. admin panel only
- Customize the admin panel: not reachable. code in src/admin

## Code stack

- Languages: TypeScript, JavaScript
- Frameworks: Node.js, Koa, React (admin)
- Package manager: npm or yarn
- Database: SQLite, PostgreSQL, MySQL, MariaDB
- Hosting target: any Node host, Docker (community dockerize), Strapi Cloud

## Skills

contributor: One repo tooling skill covering git conventions for Strapi contributors.
- Paths: .ai/skills/git-conventions/SKILL.md

## Evidence and confidence

- formFactor: README: self-hosted Node.js CMS with admin panel and generated APIs (confidence 0.95)
- executionModel: no model at runtime; Strapi AI is an optional cloud add-on (confidence 0.9)
- operability: docs.strapi.io/cms/api/rest (Builder domain) documents CRUD, draft and publish, upload, API tokens; GitHub search of the strapi org found no MCP repo (confidence 0.9)
- effort: docs.strapi.io/cms/configurations/environment lists the env vars and config/ files (confidence 0.85)
- editions: LICENSE: MIT Expat for the Community Edition, EE license under ee/; strapi.io/pricing: Cloud Starter $35, Pro $90, Business $450 per month (confidence 0.8)
- active: pushedAt 2026-09-02
- provenance: Strapi Solutions SAS since 2015; no vibe-coded claim (confidence 0.9)
- reach:  (confidence 0.85)

## Open questions

- Growth and Enterprise self-hosted license prices
- Does the REST API accept a locale parameter for i18n entries (not on the fetched page)?

## Sources

- https://github.com/strapi/strapi (sourcing:content-publishing:curated)
- https://docs.strapi.io/cms/api/rest (analysis:content-publishing)
- https://docs.strapi.io/cms/configurations/environment (analysis:content-publishing)
- https://strapi.io/pricing (analysis:content-publishing)
