{
  "version": "2",
  "generatedAt": "2026-11-03T22:49:39.280Z",
  "listing": {
    "slug": "strapi--strapi",
    "name": "Strapi",
    "tagline": "Open-core headless CMS: content types in the admin, auto-generated REST and GraphQL APIs, env-file config.",
    "shortTagline": "Open-core headless CMS",
    "description": "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.",
    "capabilities": [
      "adaptable",
      "operable"
    ],
    "vertical": "content-publishing",
    "alternativeTo": [
      "Contentful",
      "Sanity"
    ],
    "shape": "business-app",
    "formFactor": "web-app",
    "executionModel": "deterministic",
    "provenance": "human-written",
    "codeStack": {
      "languages": [
        "TypeScript",
        "JavaScript"
      ],
      "frameworks": [
        "Node.js",
        "Koa",
        "React (admin)"
      ],
      "packageManager": "npm or yarn",
      "database": [
        "SQLite",
        "PostgreSQL",
        "MySQL",
        "MariaDB"
      ],
      "hostingTarget": [
        "any Node host",
        "Docker (community dockerize)",
        "Strapi Cloud"
      ]
    },
    "modelStack": null,
    "repos": [
      {
        "url": "https://github.com/strapi/strapi",
        "owner": "strapi",
        "name": "strapi",
        "license": "MIT core with EE license under ee/ (GitHub NOASSERTION)",
        "stars": 73062,
        "lastCommit": "2026-09-02"
      }
    ],
    "interface": {
      "kind": "api",
      "url": "https://docs.strapi.io/cms/api/rest",
      "official": true,
      "hosted": "both"
    },
    "operability": "official",
    "recommendedWrapper": null,
    "reach": [
      {
        "job": "Create, read, update, and delete entries",
        "reachable": true,
        "evidence": "REST API documents CRUD by documentId"
      },
      {
        "job": "Save drafts and publish",
        "reachable": true,
        "evidence": "REST API ?status=draft with Draft & Publish enabled"
      },
      {
        "job": "Upload media",
        "reachable": true,
        "evidence": "Upload API at /api/upload"
      },
      {
        "job": "Populate relations and filter queries",
        "reachable": true,
        "evidence": "REST API populate, filters, sort, pagination parameters"
      },
      {
        "job": "Query over GraphQL",
        "reachable": true,
        "evidence": "official GraphQL plugin"
      },
      {
        "job": "Manage end users and permissions",
        "reachable": true,
        "evidence": "Users & Permissions plugin exposes its own API endpoints"
      },
      {
        "job": "Localize entries per locale",
        "reachable": null,
        "evidence": "i18n is core; locale parameter not confirmed on the fetched page"
      },
      {
        "job": "Define content types and components",
        "reachable": false,
        "evidence": "REST docs: content types are built in the admin Content-Type Builder; components have no endpoints"
      },
      {
        "job": "Manage admin roles and API tokens",
        "reachable": false,
        "evidence": "admin panel only"
      },
      {
        "job": "Customize the admin panel",
        "reachable": false,
        "evidence": "code in src/admin"
      }
    ],
    "editions": [
      {
        "name": "Community",
        "price": null,
        "open": true,
        "distributions": [
          {
            "kind": "source",
            "url": "https://github.com/strapi/strapi"
          },
          {
            "kind": "installable",
            "url": "https://docs.strapi.io/cms/installation/cli",
            "command": "npx create-strapi@latest my-project"
          }
        ]
      },
      {
        "name": "Growth and Enterprise (self-hosted)",
        "price": null,
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://strapi.io/pricing"
          }
        ]
      },
      {
        "name": "Strapi Cloud Starter",
        "price": {
          "amount": 35,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": [
          {
            "kind": "hosted",
            "url": "https://strapi.io/pricing"
          }
        ]
      },
      {
        "name": "Strapi Cloud Pro",
        "price": {
          "amount": 90,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": []
      },
      {
        "name": "Strapi Cloud Business",
        "price": {
          "amount": 450,
          "currency": "USD",
          "period": "month"
        },
        "open": false,
        "distributions": []
      }
    ],
    "skills": {
      "kind": "contributor",
      "paths": [
        ".ai/skills/git-conventions/SKILL.md"
      ],
      "install": null,
      "note": "One repo tooling skill covering git conventions for Strapi contributors."
    },
    "customization": {
      "summary": "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/<type>/content-types/<type>/schema.json in development mode only, then editing code in src/api/<type>/controllers, services, routes and policies, lifecycle hooks, and config/plugins.js and config/middlewares.js.",
      "envVars": [
        "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"
      ],
      "configFiles": [
        ".env",
        "config/server.js",
        "config/database.js",
        "config/admin.js",
        "config/plugins.js",
        "config/middlewares.js",
        "config/env/<environment>/",
        "src/api/*/content-types/*/schema.json",
        "src/api/*/routes/",
        "src/api/*/controllers/",
        "src/api/*/services/"
      ],
      "promptFiles": [],
      "effort": "light-edit",
      "surfaceKind": "deployment-plus-code",
      "editCount": 24
    },
    "useWhen": [
      "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"
    ],
    "accounts": [
      "Strapi Cloud (hosted edition only)"
    ],
    "active": true,
    "lastActivity": "2026-09-02",
    "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"
    ],
    "fit": {
      "adaptable": 3,
      "operable": 3
    },
    "evidence": {
      "formFactor": "README: self-hosted Node.js CMS with admin panel and generated APIs",
      "executionModel": "no model at runtime; Strapi AI is an optional cloud add-on",
      "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",
      "effort": "docs.strapi.io/cms/configurations/environment lists the env vars and config/ files",
      "editions": "LICENSE: MIT Expat for the Community Edition, EE license under ee/; strapi.io/pricing: Cloud Starter $35, Pro $90, Business $450 per month",
      "active": "pushedAt 2026-09-02",
      "provenance": "Strapi Solutions SAS since 2015; no vibe-coded claim"
    },
    "confidence": {
      "formFactor": 0.95,
      "executionModel": 0.9,
      "operability": 0.9,
      "effort": 0.85,
      "reach": 0.85,
      "editions": 0.8,
      "provenance": 0.9
    },
    "openQuestions": [
      "Growth and Enterprise self-hosted license prices",
      "Does the REST API accept a locale parameter for i18n entries (not on the fetched page)?"
    ],
    "sources": [
      {
        "url": "https://github.com/strapi/strapi",
        "foundBy": "sourcing:content-publishing:curated"
      },
      {
        "url": "https://docs.strapi.io/cms/api/rest",
        "foundBy": "analysis:content-publishing"
      },
      {
        "url": "https://docs.strapi.io/cms/configurations/environment",
        "foundBy": "analysis:content-publishing"
      },
      {
        "url": "https://strapi.io/pricing",
        "foundBy": "analysis:content-publishing"
      }
    ],
    "research": {
      "stage": "verified",
      "verdict": "dispute",
      "reason": "The create-strapi vanilla .env.example holds only HOST, PORT and seven secrets. Docs state the Content-Type Builder is available in the development environment only and writes schema.json; anything beyond the content model (validation, access, custom endpoints) is Koa controllers, services, routes and policies under src/api.",
      "disputed": [
        {
          "field": "customization.effort",
          "reason": "Env vars are secrets and ports; content model is admin-generated schema.json in dev mode and business logic is code in src/api controllers, services, routes and policies."
        }
      ]
    },
    "url": "apps/strapi--strapi.html",
    "coverage": "partial",
    "paid": true,
    "source": "research/verified/strapi--strapi.json"
  }
}
