{"owner":"decaporg","repo":"decap-cms","hasSkills":true,"totalSkillsCount":43,"totalTokensCount":12286,"categories":["plugin-manifest"],"hasMcp":false,"mcpConfig":null,"found":["packages/decap-cms-app/README.md","packages/decap-cms-backend-aws-cognito-github-proxy/README.md","packages/decap-cms-backend-azure/README.md","packages/decap-cms-backend-bitbucket/README.md","packages/decap-cms-backend-git-gateway/README.md","packages/decap-cms-backend-github/README.md","packages/decap-cms-backend-gitlab/README.md","packages/decap-cms-backend-proxy/README.md","packages/decap-cms-backend-test/README.md","packages/decap-cms-backend-turbo-github/README.md","packages/decap-cms-backend-turbo-gitlab/README.md","packages/decap-cms-core/README.md","packages/decap-cms-editor-component-image/README.md","packages/decap-cms-lib-auth/README.md","packages/decap-cms-lib-util/README.md","packages/decap-cms-lib-widgets/README.md","packages/decap-cms-locales/README.md","packages/decap-cms-media-library-cloudinary/README.md","packages/decap-cms-media-library-s3/README.md","packages/decap-cms-media-library-uploadcare/README.md","packages/decap-cms-ui-auth/README.md","packages/decap-cms-ui-default/README.md","packages/decap-cms-widget-boolean/README.md","packages/decap-cms-widget-code/README.md","packages/decap-cms-widget-colorstring/README.md","packages/decap-cms-widget-datetime/README.md","packages/decap-cms-widget-file/README.md","packages/decap-cms-widget-image/README.md","packages/decap-cms-widget-list/README.md","packages/decap-cms-widget-map/README.md","packages/decap-cms-widget-markdown/README.md","packages/decap-cms-widget-number/README.md","packages/decap-cms-widget-object/README.md","packages/decap-cms-widget-relation/README.md","packages/decap-cms-widget-richtext/README.md","packages/decap-cms-widget-select/README.md","packages/decap-cms-widget-string/README.md","packages/decap-cms-widget-text/README.md","packages/decap-cms-widget-uuid/README.md","packages/decap-cms/README.md","packages/decap-server/README.md","packages/decap-turbo-api/README.md","packages/decap/README.md"],"skills":{"packages/decap-cms-app/README.md":"# Decap CMS App\n_For a Decap CMS overview, see the general [Decap CMS project README](https://github.com/decaporg/decap-cms)._\n\n## Purpose\nThis package is similar to the [`decap-cms`](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms/) package, but is designed for use with extensions. It serves that purpose in the following ways.\n\n- It does not automatically initialize - you must run the CMS `init` method.\n- It does not include `react` or `react-dom` - they are required as peer dependencies.\n- It does not include the following extensions:\n  - [`decap-cms-media-library-cloudinary`]\n  - [`decap-cms-media-library-uploadcare`]\n  \n## Usage\nInstall via script tag:\n\n```html\n<!-- Excluding `doctype` and `head` but you should add them -->\n<body>\n  <!-- Add these scripts to the bottom of the body -->\n  <script src=\"https://cdn.jsdelivr.net/npm/react@^18/umd/react.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/react-dom@^18/umd/react-dom.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/decap-cms-app/dist/decap-cms-app.js\"></script>\n  \n  <!-- Initialize the CMS -->\n  <script>\n    DecapCmsApp.init();\n  </script>\n</body>\n```\n\nInstall via npm:\n\n```\nnpm i react react-dom decap-cms-app\n```\n\n```js\nimport CMS from 'decap-cms-app';\n\nCMS.init();\n```\n","packages/decap-cms-backend-aws-cognito-github-proxy/README.md":"# GitHub backend\n\nAn abstraction layer between the CMS and a proxied version of [Github](https://docs.github.com/en/rest).\n\n## Code structure\n\n`Implementation` - wraps [Github Backend](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) for proxied version of Github.\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to create an AWS Cognito compatible generic Authentication page supporting PKCE.\n","packages/decap-cms-backend-azure/README.md":"# Azure backend\n\nAn abstraction layer between the CMS and [Azure DevOps](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for Azure DevOps REST API.\n\n`AuthenticationPage` - facilitates implicit authentication flow. Uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md).\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-bitbucket/README.md":"# Bitbucket backend\n\nAn abstraction layer between the CMS and [Bitbucket](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api` and `LargeMedia(LFS)`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses pull requests comments to track unpublished entries statuses.\n\n`Api` - A wrapper for Bitbucket REST API.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-git-gateway/README.md":"# Git Gateway\n\nNetlify's [gateway](https://github.com/netlify/git-gateway) to hosted git APIs.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` and `Implementation` from backend-[github](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-github/README.md)/[gitlab](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-gitlab/README.md)/[bitbacket](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-bitbacket/README.md) extended with Netlify-specific `LargeMedia(LFS)` and `JWT` auth.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements Netlify Identity authentication flow.\n\n`PKCEAuthenticationPage` = uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements OAuth2 PKCE authentication flow. Enabled if the config.auth_type is set to `pkce`.\n\nLook at tests or types for more info.\n\n## Debugging\n\nWhen debugging the CMS with Git Gateway you must:\n\n1. Have a Netlify site with [Git Gateway](https://docs.netlify.com/visitor-access/git-gateway/) and [Netlify Identity](https://docs.netlify.com/visitor-access/identity/) enabled. An easy way to create such a site is to use a [template](https://www.decapcms.org/docs/start-with-a-template/), for example the [Gatsby template](https://app.netlify.com/start/deploy?repository=https://github.com/decaporg/gatsby-starter-decap-cms&stack=cms)\n2. Tell the CMS the URL of your Netlify site using a local storage item. To do so:\n\n    1. Open `http://localhost:8080/` in the browser\n    2. Write the below command and press enter: `localStorage.setItem('netlifySiteURL', 'https://yourwebsiteurl.netlify.app/')`\n    3. To be sure, you can run this command as well: `localStorage.getItem('netlifySiteURL')`\n    4. Refresh the page\n    5. You should be able to log in via your Netlify Identity email/password\n\n## PKCE with custom Git-Gateway\n\nTo use a custom Git-Gateway implementation with PKCE authentication, use a configuration similar to the following:\n\n    backend:\n        name: git-gateway\n        # Enables PKCE authentication with the git-gateway backend. After auth,\n        # sends the access_token for all requests to the git-gateway host.\n        auth_type: pkce\n        # The base OAuth2 URL. Here is an obfuscated AWS Cognito example.\n        base_url: https://your-cognito-instance.auth.us-east-1.amazoncognito.com\n        # If you need to customize the authorize or token endpoints for PKCE, do that here\n        #auth_endpoint: oauth2/authorize\n        #auth_token_endpoint: oauth2/token\n        # The OAuth2 client ID\n        app_id: your-oauth2-client-id\n        # The base URL of your custom git-gateway. Note that the last part of the path\n        # should be \"bitbucket\", \"gitlab\", or \"github\", so the implementation can automatically\n        # determine which backend API to use when making requests.\n        gateway_url: https://your.gitgateway.host/git-gateway/bitbucket/\n        # Override the Netlify git-gateway status check\n        status_endpoint: https://your.gitgateway.host/api/v2/components.json\n        # Optional: defaults to \"master\"\n        branch: main\n","packages/decap-cms-backend-github/README.md":"# GitHub backend\n\nAn abstraction layer between the CMS and [GitHub](https://docs.github.com/en/rest)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for GitHub REST API.\n\n`GraphQLApi` - `Api` with `ApolloClient`. [Api docs](https://docs.github.com/en/graphql) and [netlify docs](https://www.decapcms.org/docs/beta-features/#github-graphql-api).\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\n`scripts` -  use `createFragmentTypes.js` to create GitHub GraphQL API fragment types.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-gitlab/README.md":"# GitLab backend\n\nAn abstraction layer between the CMS and [GitLab](https://docs.gitlab.com/ee/api/README.html)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses merge requests labels to track unpublished entries statuses.\n\n`Api` - A wrapper for GitLab REST API.\n\n`AuthenticationPage` - A component uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth, PKCE and implicit authentication.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-proxy/README.md":"# Proxy backend\n\nFacilitates [local development](https://www.decapcms.org/docs/beta-features/#working-with-a-local-git-repository).\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md). An `RPC` wrapper for `decap-server`.\n\n`AuthenticationPage` - a mock authentication page\n","packages/decap-cms-backend-test/README.md":"# Test backend\n\nThe backend behind https://demo.decapcms.org/.\nUsed for demo purposes only.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on simple JS objects:\n\n```js\nwindow.repoFiles // json file-system tree\nwindow.repoFilesUnpublished // flat file list\n```\n\n`AuthenticationPage` - A component which allow skip `login screen` for demo purposes.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-turbo-github/README.md":"# Decap CMS — Turbo GitHub Backend\n\n`turbo-github` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/). Content stays in your GitHub repository and every save is a commit, as with the `github` backend, but editors sign in with a Turbo account instead of a GitHub account, and GitHub is reached through Turbo's server-side proxy, which also caches the repository's content.\n\nIt extends `GitHubBackend` from `decap-cms-backend-github`. Anything not overridden here, including branching and the pull-request-based editorial workflow, behaves as it does there. The GitLab twin is [`decap-cms-backend-turbo-gitlab`](../decap-cms-backend-turbo-gitlab); code the two share lives in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo).\n\nProduct documentation: [overview](https://decapcms.org/docs/turbo-overview/), [getting started](https://decapcms.org/docs/turbo-getting-started/), [connecting a site](https://decapcms.org/docs/turbo-connecting-a-site/), [roles and members](https://decapcms.org/docs/turbo-roles-and-members/), [deploy status](https://decapcms.org/docs/turbo-deploy-status/), [CLI and agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Configuration\n\nThe backend is registered in the `decap-cms` and `decap-cms-app` bundles. [Create a site](https://decapcms.org/docs/turbo-getting-started/) in Turbo, then:\n\n```yaml\nbackend:\n  name: turbo-github\n  turbo_site_id: your-site-id\n```\n\n`turbo_site_id` is the only required key. Before the backend is constructed, its static `preloadConfig` hook fetches the rest from Turbo's `config` endpoint (Supabase project, anon key, `base_url`, `api_root`, `repo` and the default `branch`) and merges it into `backend`. Values in `config.yml` win, with one exception: `repo` always comes from the site in Turbo, because the proxy checks permissions against it.\n\n| Optional key | |\n|---|---|\n| `branch` | Branch to edit. Defaults to the site's branch in Turbo. Set it to let one site back several deploys of the same repo. |\n| `deploy_status` | `false`, or an object with `notifications`, `page` and `primary_target`. See [deploy status](https://decapcms.org/docs/turbo-deploy-status/). |\n| `editor_bridge` | `true` turns on the experimental [editor bridge](#editor-bridge). Off by default. |\n\n`use_graphql: true` is not supported and throws in the constructor: the GraphQL client builds its own transport, which would skip the per-site scoping (`x-site-id` header and `site_id` parameter) the proxy relies on.\n\n### Escape hatches\n\nFor running against a self-hosted control plane or working offline. The hosted product never needs them.\n\n| Key | |\n|---|---|\n| `turbo_config_url` | Config endpoint to fetch from, instead of `https://sb.decapcms.org/functions/v1/config`. |\n| `turbo_admin_url` | Turbo app that serves the login popup. Default `https://turbo.decapcms.org`. |\n| `supabase_app_id`, `supabase_anon_key` | Supabase project ref and anon key. The ref builds the auth and content cache URLs (`https://<ref>.supabase.co`). Setting both skips the fetch entirely, so `base_url`, `api_root` and `repo` must then be set too. Setting `supabase_app_id` alone throws. |\n| `base_url` | Supabase project URL, for the `permissions` and `telemetry` functions, deploy status, the editor bridge and media libraries. |\n| `api_root` | The `gh` proxy function, `<base_url>/functions/v1/gh`. |\n\n## How it works\n\n### Login\n\n\"Login with Turbo\" opens a popup on `turbo_admin_url`. The Turbo app sends the resulting Supabase session back with `postMessage`, and `AuthenticationPage.js` accepts it only when `event.origin` equals the origin of `turbo_admin_url`. That check is the security boundary of the flow and must never be relaxed. Links from the Turbo profile page carry a one-time code in the URL hash instead, which is redeemed for the session with a POST to the Turbo app's `/auth/exchange`.\n\nA session Turbo minted for this CMS alone is revoked server-side on logout. An older session shared with the Turbo dashboard is left alone, so logging out of one CMS does not sign the user out of Turbo.\n\n### Requests and token refresh\n\nThe Supabase access token is sent as a Bearer token to the `gh` proxy, which calls GitHub with the organization's GitHub App installation token. The CMS never holds a GitHub token.\n\nThe access token is refreshed before it expires, with retries for transient failures. Supabase refresh tokens are single-use, so refreshes take a lock shared by every tab on the origin, and a tab adopts a session another tab already rotated. A terminal refresh failure, or a 401 from the proxy that one forced refresh cannot fix, ends the session with \"Session expired. Please log in again.\" A 403 because the user is not a member of the site fails the login, or ends the session if it arrives later.\n\n### Content cache\n\nTurbo's server owns the cache. For each folder or files collection the backend calls `_content/sync`, which brings the cache up to the branch's current head, and reads the entries from `public.data` through PostgREST. The browser has read access only. Locale files of `multiple_files` i18n collections are synced in the background. Opening a single entry checks the cached row with `_content/entry` and reads from GitHub when it is stale.\n\nSaves go through `_content/commit`: one request that commits and updates the cache. Renames, saves to an entry already in editorial review, open authoring, and requests the endpoint refuses with 400, 404 or 413 fall back to the inherited REST sequence.\n\n### Permissions\n\nAfter login the backend fetches the user's per-collection permissions from the `permissions` function and attaches them to the user as `permissions.collections` (`edit`, `view` or `none`). Core hides `none` collections for any backend whose user carries that field. This is a UI convenience; the proxy enforces permissions on every request.\n\n### Commit attribution\n\nCommits are authored by the Turbo GitHub App. The proxy adds the editor in a `Co-authored-by` trailer, derived from the session rather than from anything the browser sends.\n\n### Deploy status\n\nAfter a save, the backend polls Turbo's `site_deployments` for a successful deploy whose commit contains the save, and tells the editor when the change is live. If nothing reports a deploy for the branch within two minutes, it stops silently. `deploy_status` turns the notifications and the Deploys page off.\n\n### Telemetry\n\nThe backend sends `cms_session_started` and `cms_entry_saved` to Turbo's `telemetry` function. The call is not awaited and swallows its own errors, so it cannot affect editing. Editors opt out of analytics on their Turbo profile, owners for the whole organization in its settings. Opting out is applied server-side; the save event that feeds the organization's Activity log is still recorded.\n\n### Editor bridge\n\nWith `editor_bridge: true`, the entry open in the CMS is synced to Turbo every few seconds, so an agent using [`decap mcp`](../decap) can propose field changes. They appear highlighted in the editor and are saved only when the editor saves. The bridge also adds an \"Ask Claude\" action beside each field and an \"Agent bridge on\" badge, whose × turns it off for the tab. It is experimental and may change.\n","packages/decap-cms-backend-turbo-gitlab/README.md":"# Decap CMS — Turbo GitLab Backend\n\n`turbo-gitlab` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/) for a repository on GitLab.com. It extends `GitLabBackend` from `decap-cms-backend-gitlab` the same way [`decap-cms-backend-turbo-github`](../decap-cms-backend-turbo-github) extends the GitHub backend, and shares its design, its config keys and the code in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo). Read that README for login, token refresh, the content cache, permissions, telemetry and the editor bridge. This one lists only the differences.\n\n```yaml\nbackend:\n  name: turbo-gitlab\n  turbo_site_id: your-site-id\n```\n\n## Differences from `turbo-github`\n\n- **Git access.** The `gl` proxy calls GitLab with the organization's GitLab connection: an OAuth token of the GitLab user who authorized it in Turbo. That token reaches every project the user can reach, so the organization's Turbo-side repo scope is the only per-project limit. See [connect your Git provider](https://decapcms.org/docs/turbo-getting-started/#connect-your-git-provider).\n- **Editorial workflow** uses merge requests, as in `decap-cms-backend-gitlab`.\n- **`currentUser` is synthesized.** There is no GitLab identity for the editor, so the user object is built locally from the Turbo session: `name`, `email` and avatar are the editor's, `username` is the repo owner, `id` is `0`. The backend never calls GitLab's user endpoint.\n- **Saves** go through GitLab's commits API, which already commits in one call, so there is no `_content/commit`. The cache picks the change up on the next `_content/sync`.\n- **Commit attribution.** The editor is the commit author (`author_name`, `author_email`); the committer is the GitLab user behind the connection.\n- **No deploy status.** `deploy_status` has no effect.\n- **Escape hatch `api_root`** points at the `gl` function, `<base_url>/functions/v1/gl`.\n- **`use_graphql: true`** throws, for the same reason as on GitHub.\n","packages/decap-cms-core/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-core/README.md)!\n","packages/decap-cms-editor-component-image/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-editor-component-image/README.md)!\n","packages/decap-cms-lib-auth/README.md":"# Lib Auth\n\nShared components to handle OAuth and implicit authentication flows.\n","packages/decap-cms-lib-util/README.md":"# Lib Util\n\nShared utilities to handle various `decap-cms-backend-*` backends operations.\n\n## Code structure\n\nThis structure should be the same for backends.\n\nAt first, look at `Implementation`. This is File Management System API and has factory method for `AuthComponent`.\n\n### File Management System API\n\nAn abstraction layer between the CMS and Git-repository manager API.\n\nUsed as backend in [cms-core](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core/README.md).\n\n### Low-level abstractions for Git-repository manager API:\n\n- `API` - used for Entry files\n- `git-lfs` - used for Media files\n- and more helpful utilities\n\n","packages/decap-cms-lib-widgets/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-lib-widgets/README.md)!\n","packages/decap-cms-locales/README.md":"# Decap CMS Locales\n\n## Default translations for Decap CMS\n\nThe English translation is loaded by default.\n\nTo register another locale you can use the following code:\n\n```js\nimport CMS from 'decap-cms-app';\nimport { de } from 'decap-cms-locales';\n\nCMS.registerLocale('de', de);\n```\n\n> When importing `decap-cms` all locales are registered by default.\n\nMake sure the specific locale exists in the package - unless we will happily accept a pull request for it.\n\nThe configured locale will be merge into the English one so don’t worry about missing some phrases.\n","packages/decap-cms-media-library-cloudinary/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-cloudinary/README.md)!\n","packages/decap-cms-media-library-s3/README.md":"# Decap CMS Media Library — S3-compatible storage\n\n> **Beta.** The configuration and behaviour of this package may change in a minor release. It will be replaced by a media library rebuilt inside Decap CMS core, and this package retired; the migration will be documented when that ships. Your files live in your own bucket and inserted URLs point at your public domain, so neither depends on this package.\n\nA media library for sites on [Decap Turbo](https://decapcms.org/docs/turbo-overview/) that stores uploads in an S3-compatible bucket: AWS S3, Cloudflare R2, Bunny Storage, Backblaze B2, DigitalOcean Spaces, Wasabi, MinIO and others. Requests go through Turbo's `integrations` edge function, which signs them with the site's credentials, so storage credentials never reach the browser.\n\nRequires the `turbo-github` or `turbo-gitlab` backend and a Turbo plan with the media library (Pro and above). Product documentation: [Media library](https://decapcms.org/docs/turbo-media-proxy/).\n\n## Setup\n\n### 1. Site variables\n\nOn the site's **Variables** tab in Turbo, not in `config.yml`:\n\n| Key | Secret | Value |\n|---|---|---|\n| `s3_endpoint` | No | S3 API endpoint, e.g. `https://<account-id>.r2.cloudflarestorage.com` or `https://s3.<region>.amazonaws.com` |\n| `s3_region` | No | Region to sign for; `auto` for R2 |\n| `s3_bucket` | No | Bucket name |\n| `s3_access_key_id` | No | Access key ID |\n| `s3_secret_access_key` | Yes | Secret access key |\n| `s3_force_path_style` | No | `true` for most providers, including R2, Bunny and MinIO; `false` usually works on AWS |\n\n### 2. A public URL for the bucket\n\nBuckets are private by default, and this library does not generate presigned URLs for viewing. Serve the bucket publicly through public read access, a custom domain (for example an R2 custom domain) or a CDN, and use that address as `public_url_prefix`.\n\n### 3. `config.yml`\n\n```yaml\nbackend:\n  name: turbo-github # or turbo-gitlab\n  turbo_site_id: your-site-id\n\nmedia_library:\n  name: s3\n  config:\n    public_url_prefix: https://media.example.com\n```\n\n| Option | Required | |\n|---|---|---|\n| `public_url_prefix` | Yes | Prefix for inserted asset URLs. Missing it throws on load. |\n| `root_path` | No | Folder the browser opens in. Default `/`. |\n| `max_file_size` | No | Upload limit in bytes. Default 50 MB. |\n| `multiple` | No | Allow inserting several files at once. Default `false`. |\n\n### 4. Registration\n\nThe `decap-cms` bundle (the script-tag build) registers this library already. With `decap-cms-app`, register it yourself:\n\n```js\nimport CMS from 'decap-cms-app';\nimport S3MediaLibrary from 'decap-cms-media-library-s3';\n\nCMS.registerMediaLibrary(S3MediaLibrary);\n```\n\n## How it works\n\nCore passes the library the backend config, the current access token and the site ID through `getMediaLibraryContext`. The library calls `<base_url>/functions/v1/integrations/s3/<key>` with `Authorization: Bearer <access token>` and `x-site-id: <site id>`; `base_url` comes from the Turbo backend's preloaded config. The function checks the user's site membership and plan, reads the site's `s3_*` variables, signs the request with SigV4 and forwards it. The destination host comes only from the site's own `s3_endpoint`, never from the request.\n\n- Listing uses `ListObjectsV2` with `delimiter=/` and follows continuation tokens until the listing is complete. Folders are key prefixes: deleting the last object in one makes it disappear, as in S3 itself.\n- Uploads are buffered in the edge function before forwarding, because S3 and R2 require a real `Content-Length` and reject chunked bodies with 411. `max_file_size` bounds the buffer.\n- An upload does not insert or close the dialog. New files are pre-selected, and **Insert** confirms them.\n\nSource: `src/index.js` (entry, context resolution), `src/api/client.ts` (HTTP and XML parsing), `src/api/fileManager.ts` (paths to keys, public URLs), `src/components/S3Widget.tsx` (the dialog).\n\n## Limitations\n\n- No search, image transformations, folder creation, move or rename.\n- Every upload passes through the edge function.\n- Requires a public URL for the bucket (see above).\n\n## Troubleshooting\n\n| Message | Cause |\n|---|---|\n| `public_url_prefix is required in media_library config` | Add it under `media_library.config`. |\n| `Session token not found. Please log in again.` | Log in again. |\n| `Active site id is missing in backend configuration.` | `turbo_site_id` is not set. |\n| `Backend base URL is missing. Configure backend.base_url.` | The backend is not a Turbo backend, or its config did not load. |\n| 403 with `media_proxy_requires_paid_plan` | The organization's plan does not include the media library. |\n| 403 otherwise | The user is not a member of the site. |\n| 500 `Missing S3 storage configuration for site` | One of `s3_endpoint`, `s3_bucket`, `s3_access_key_id`, `s3_secret_access_key` is not set. |\n| Inserted images do not load | The bucket is not publicly readable at `public_url_prefix`. |\n\n## Development\n\n```sh\npnpm exec jest packages/decap-cms-media-library-s3\n```\n\nWhen changing the client or the `s3` adapter, test browse (including a listing over 1,000 keys), upload at `max_file_size`, single and multiple insert, delete, and the error paths above against at least Cloudflare R2 (`s3_region: auto`) and a path-style provider such as MinIO. When reporting an issue, include the browser, the redacted media config, and the response from `/functions/v1/integrations/s3/*`.\n\n## License\n\nMIT\n","packages/decap-cms-media-library-uploadcare/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-uploadcare/README.md)!\n","packages/decap-cms-ui-auth/README.md":"# decap-cms-ui-auth\n\nAuthentication UI pages used by the decap-cms-backend-* packages.\n\n## Common Behavior\n\n* An authenticator must return the following fields:\n  * email\n  * token?\n  * expires?\n\n## Components\n\n* **NetlifyAuthenticationPage**\n    * Username and password fields that are passed to Netlify Identity.\n    * Requires a static `authClient` value set before login will work, expected to be set by the backend implementation.\n  * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type) from Netlify\n* **PKCEAuthenticationPage**\n    * OAuth2 PKCE flow with optional OIDC auto-configuration.\n    * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type), with additional data:\n        * token (part of Credentials definition): the access token\n        * idToken: if available\n        * claims: if available (decoded access token)\n        * idClaims: if available (decoded ID token)\n        * email: mapped email value from the token claims, if available\n        * user_metadata.full_name: mapped value from the token claims, if available\n        * user_metadata.avatar_url: mapped value from the token claims, if available\n\n","packages/decap-cms-ui-default/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-ui-default/README.md)!\n","packages/decap-cms-widget-boolean/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-boolean/README.md)!\n","packages/decap-cms-widget-code/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-code/README.md)!\n","packages/decap-cms-widget-colorstring/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-colorstring/README.md)!\n","packages/decap-cms-widget-datetime/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-datetime/README.md)!\n","packages/decap-cms-widget-file/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-file/README.md)!\n","packages/decap-cms-widget-image/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-image/README.md)!\n","packages/decap-cms-widget-list/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-list/README.md)!\n","packages/decap-cms-widget-map/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-map/README.md)!\n","packages/decap-cms-widget-markdown/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-markdown/README.md)!\n","packages/decap-cms-widget-number/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-number/README.md)!\n","packages/decap-cms-widget-object/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-object/README.md)!\n","packages/decap-cms-widget-relation/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-relation/README.md)!\n","packages/decap-cms-widget-richtext/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/master/packages/decap-cms-widget-markdown/README.md)!\n","packages/decap-cms-widget-select/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-select/README.md)!\n","packages/decap-cms-widget-string/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-string/README.md)!\n","packages/decap-cms-widget-text/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-text/README.md)!\n","packages/decap-cms-widget-uuid/README.md":"# decap-cms-widget-uuid\n\nUUID widget for Decap CMS.\n\n## Options\n\n- `read_only`: Prevent editing the generated UUID. Defaults to `true`.\n- `prefix`: String prepended to the generated UUID. Defaults to an empty string.\n- `use_b32_encoding`: Encode the UUID using unpadded, lowercase RFC 4648 Base32. Defaults to `false`.\n","packages/decap-cms/README.md":"# Decap CMS\n\nA CMS for static site generators. Give users a simple way to edit\nand add content to any site built with a static site generator.\n\n[decapcms.org](https://www.decapcms.org/) \n\n## Community Chat\n\n<a href=\"https://decapcms.org/chat\">Join us on Discord</a>\n\n## How It Works\n\nDecap CMS is a single-page app that you pull into the `/admin` part of your site.\n\nIt presents a clean UI for editing content stored in a Git repository.\n\nYou setup a YAML config to describe the content model of your site, and typically\ntweak the main layout of the CMS a bit to fit your own site.\n\nWhen a user navigates to `/admin/` they'll be prompted to log in, and once authenticated\nthey'll be able to create new content or edit existing content.\n\nRead more about Decap CMS [Core Concepts](https://www.decapcms.org/docs/intro/).\n\n## Installation and Configuration\n\nThe Decap CMS can be used in two different ways.\n\n* A Quick and easy install, that requires you to create a single HTML file and a configuration file. All the CMS JavaScript and CSS are loaded from a CDN.\n  To learn more about this installation method, refer to the [Quick Start Guide](https://www.decapcms.org/docs/quick-start/)\n* A complete, more complex install, that gives you more flexibility but requires that you use a static site builder with a build system that supports npm packages.\n\n## Contributing\n\nNew contributors are always welcome! Check out [CONTRIBUTING.md](https://github.com/decaporg/decap-cms/blob/main/CONTRIBUTING.md) to get involved.\n\n## Change Log\n\nThis project adheres to [Semantic Versioning](http://semver.org/).\nEvery release is documented on the GitHub [Releases](https://github.com/decaporg/decap-cms/releases) page.\n\n## License\n\nDecap CMS is released under the [MIT License](LICENSE).\nPlease make sure you understand its [implications and guarantees](https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html).\n\n## Maintainers\n\nMaintained with care by <a href=\"https://techhub.p-m.si/\">PM</a> & friends.\n","packages/decap-server/README.md":"# decap-server\n\nThe local proxy server for Decap CMS's `proxy` backend. Run it in the root of your site's repository and the CMS reads and writes files on disk instead of going through a git host:\n\n```sh\nnpx decap-server\n```\n\nThe CMS side needs only:\n\n```yaml\nlocal_backend: true\n```\n\nIt needs Node 20 or later.\n\nSettings are read from the environment, also from a `.env` file in the working directory: `PORT` (default 8081), `BIND_HOST`, `MODE` (`fs` or `git`, default `fs`), `GIT_REPO_DIRECTORY` (default the current directory), `ORIGIN` (default localhost and 127.0.0.1) and `LOG_LEVEL` (default `info`). In `git` mode changes are committed to the local repository and the editorial workflow works.\n\nTo mount the endpoints on your own Express app:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('decap-server/dist/middlewares');\n```\n\nSince 3.11.4 the server code lives in the internal `@decap/cli` package, which this package depends on and runs. Nothing changes for `npx decap-server` users.\n","packages/decap-turbo-api/README.md":"# decap-turbo-api\n\n> **Experimental.** Operations, input schemas and response types may change in any release, including a patch release, as the Turbo API evolves. Pin an exact version if you depend on it. Most people want the CLI, [`@decap/cli`](../decap), rather than this package.\n\nThe [Decap Turbo](https://decapcms.org/docs/turbo-cli-and-agents/) API contract: one definition per operation, with its HTTP method and path, the token scope it needs, a JSON Schema for its input, and the MCP tool and CLI command it is exposed as. Shared by `@decap/cli` and the Turbo server, so the two cannot disagree about the API.\n\nDependency-free. Input schemas are plain JSON Schema; `validateInput(schema, body)` checks a request body against one.\n\n```ts\nimport { operations, validateInput } from 'decap-turbo-api';\n\nconst result = validateInput(operations.cliToken.input, body);\nif (!result.ok) console.error(result.errors);\n```\n","packages/decap/README.md":"# @decap/cli\n\nThe Decap command line, installed as the `decap` command. It runs the local proxy server for editing a site on your own machine, manages [Decap Turbo](https://turbo.decapcms.org), and connects AI agents to Turbo over MCP. Turbo commands go through the Turbo API with a personal access token, so they can never do more than you can in the dashboard.\n\n> **Experimental.** `decap dev` is the stable replacement for `npx decap-server`. Everything else (`login`, `whoami`, `logout`, `mcp` and the Turbo commands) talks to the Decap Turbo API, which is in preview: commands, flags and output may change between releases without a major version bump. Pin an exact version in scripts and CI.\n\nRun it with `npx @decap/cli <command>`, or install it globally (`npm install -g @decap/cli`) to type `decap`. `npx decap` does not run this package; always name `@decap/cli`. It needs Node 20 or later. Product documentation: [CLI and AI agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Local development: `decap dev`\n\nRuns the proxy server for Decap's `proxy` backend, so the CMS reads and writes the repository on disk. This was `npx decap-server`, which still works and runs the same server.\n\n```sh\nnpx @decap/cli dev                 # serve the current directory on port 8081\nnpx @decap/cli dev --mode git      # commit changes, with editorial workflow support\nnpx @decap/cli dev --port 8082 --dir ../my-site\n```\n\nPoint the CMS at it:\n\n```yaml\nlocal_backend: true\n```\n\nor, explicitly:\n\n```yaml\nbackend:\n  name: proxy\n  proxy_url: http://localhost:8081/api/v1\n```\n\nEach flag overrides an environment variable, also read from a `.env` file in the working directory: `--port` (`PORT`, default 8081), `--host` (`BIND_HOST`), `--mode` (`MODE`: `fs` or `git`, default `fs`), `--dir` (`GIT_REPO_DIRECTORY`, default the current directory), `--origin` (`ORIGIN`, the CMS origin allowed to call the server, default localhost) and `--log-level` (`LOG_LEVEL`, default `info`).\n\nTo mount the proxy endpoints on your own Express app instead:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('@decap/cli/dev');\n\nawait registerLocalFs(app); // or registerLocalGit(app)\n```\n\n## Sign in\n\n```sh\nnpx @decap/cli login          # opens the browser; approve, and a token is stored\nnpx @decap/cli login --admin  # also request admin scope (manage sites and members)\nnpx @decap/cli whoami\nnpx @decap/cli logout         # revokes the token and forgets it\n```\n\nThe token is stored in `~/.config/decap/credentials.json` (mode 0600). In CI, set `DECAP_TOKEN` to a token created under **API tokens** in the dashboard instead. Set `DECAP_NO_BROWSER` to have `login` skip launching a browser, for a machine with none to open; it still prints the approval URL to copy elsewhere.\n\n## Manage Turbo\n\nEvery Turbo API operation is a command. `decap --help` lists them; `decap <command> --help` shows its flags.\n\n```sh\ndecap orgs list\ndecap sites list --org <org-id>\ndecap sites create --org <org-id> --name \"Marketing site\" --repo acme/marketing\ndecap sites update --site <site-id> --branch develop\ndecap cache clear --site <site-id>\ndecap deploys list --site <site-id> --limit 5\ndecap members invite --org <org-id> --email someone@example.com\ndecap members set-role --org <org-id> --member someone@example.com --role owner\ndecap site-members add --site <site-id> --member someone@example.com\n```\n\nMembers can be named by email or user id. Add `--json` for machine-readable output. Commands that change something need a token with admin scope (`decap login --admin`) and an organization owner behind it, the same as in the dashboard.\n\n## Edit the open entry\n\nWhen you have an entry open in a Turbo-backed CMS, an agent (or you) can change its fields there without saving: the change appears highlighted in your editor, for you to review and save.\n\n```sh\ndecap editor list                                  # entries you have open, with their fields and values\ndecap editor set --session <id> --fields '{\"title\": \"New title\", \"seo.description\": \"…\"}'\ndecap editor open --site <site-id> --collection posts --slug hello   # the CMS link for an entry\n```\n\nThe editor bridge is experimental and off by default: turn it on for a site with `editor_bridge: true` under `backend` in config.yml. While it is on, the CMS shows a small \"Agent bridge on\" badge while an entry is open; its × turns the bridge off for that tab.\n\n## Use it from an AI agent\n\n`decap mcp` is a local MCP server. Sign in once with `login`, then add it to your agent.\n\n**Claude Code**\n\n```sh\nclaude mcp add decap -- npx -y @decap/cli mcp\n```\n\n**Claude Desktop, Cursor, and other clients that take a JSON config**\n\n```json\n{\n  \"mcpServers\": {\n    \"decap\": { \"command\": \"npx\", \"args\": [\"-y\", \"@decap/cli\", \"mcp\"] }\n  }\n}\n```\n\n## Developing\n\nThe API contract (operations, input schemas, MCP tool metadata) is the [`decap-turbo-api`](../decap-turbo-api) package, shared with the Turbo server. It is bundled into `dist/cli.cjs` at build time, so the published CLI does not depend on it at runtime.\n\n```sh\npnpm install            # from the repository root\npnpm --filter @decap/cli build   # dist/cli.cjs\npnpm --filter @decap/cli test\npnpm run type-check     # from the repository root\n```\n\nAgainst a local Turbo (the Turbo app on port 4321):\n\n```sh\nnode dist/cli.cjs login --api-url http://localhost:4321\nnode dist/cli.cjs whoami\n```\n\nTo try changes to the CLI with an agent, point the agent at the local build. The stored credentials remember the API URL, so no extra env is needed:\n\n```sh\nclaude mcp add decap-local --scope user -- node /absolute/path/to/decap-cms/packages/decap/dist/cli.cjs mcp\n```\n\n`claude mcp add` defaults to the current project's scope; `--scope user` makes it available in every session. Start a new Claude Code session afterwards: MCP servers are loaded at startup.\n"},"files":{"packages/decap-cms-app/README.md":"# Decap CMS App\n_For a Decap CMS overview, see the general [Decap CMS project README](https://github.com/decaporg/decap-cms)._\n\n## Purpose\nThis package is similar to the [`decap-cms`](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms/) package, but is designed for use with extensions. It serves that purpose in the following ways.\n\n- It does not automatically initialize - you must run the CMS `init` method.\n- It does not include `react` or `react-dom` - they are required as peer dependencies.\n- It does not include the following extensions:\n  - [`decap-cms-media-library-cloudinary`]\n  - [`decap-cms-media-library-uploadcare`]\n  \n## Usage\nInstall via script tag:\n\n```html\n<!-- Excluding `doctype` and `head` but you should add them -->\n<body>\n  <!-- Add these scripts to the bottom of the body -->\n  <script src=\"https://cdn.jsdelivr.net/npm/react@^18/umd/react.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/react-dom@^18/umd/react-dom.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/decap-cms-app/dist/decap-cms-app.js\"></script>\n  \n  <!-- Initialize the CMS -->\n  <script>\n    DecapCmsApp.init();\n  </script>\n</body>\n```\n\nInstall via npm:\n\n```\nnpm i react react-dom decap-cms-app\n```\n\n```js\nimport CMS from 'decap-cms-app';\n\nCMS.init();\n```\n","packages/decap-cms-backend-aws-cognito-github-proxy/README.md":"# GitHub backend\n\nAn abstraction layer between the CMS and a proxied version of [Github](https://docs.github.com/en/rest).\n\n## Code structure\n\n`Implementation` - wraps [Github Backend](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) for proxied version of Github.\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to create an AWS Cognito compatible generic Authentication page supporting PKCE.\n","packages/decap-cms-backend-azure/README.md":"# Azure backend\n\nAn abstraction layer between the CMS and [Azure DevOps](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for Azure DevOps REST API.\n\n`AuthenticationPage` - facilitates implicit authentication flow. Uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md).\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-bitbucket/README.md":"# Bitbucket backend\n\nAn abstraction layer between the CMS and [Bitbucket](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api` and `LargeMedia(LFS)`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses pull requests comments to track unpublished entries statuses.\n\n`Api` - A wrapper for Bitbucket REST API.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-git-gateway/README.md":"# Git Gateway\n\nNetlify's [gateway](https://github.com/netlify/git-gateway) to hosted git APIs.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` and `Implementation` from backend-[github](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-github/README.md)/[gitlab](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-gitlab/README.md)/[bitbacket](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-bitbacket/README.md) extended with Netlify-specific `LargeMedia(LFS)` and `JWT` auth.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements Netlify Identity authentication flow.\n\n`PKCEAuthenticationPage` = uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements OAuth2 PKCE authentication flow. Enabled if the config.auth_type is set to `pkce`.\n\nLook at tests or types for more info.\n\n## Debugging\n\nWhen debugging the CMS with Git Gateway you must:\n\n1. Have a Netlify site with [Git Gateway](https://docs.netlify.com/visitor-access/git-gateway/) and [Netlify Identity](https://docs.netlify.com/visitor-access/identity/) enabled. An easy way to create such a site is to use a [template](https://www.decapcms.org/docs/start-with-a-template/), for example the [Gatsby template](https://app.netlify.com/start/deploy?repository=https://github.com/decaporg/gatsby-starter-decap-cms&stack=cms)\n2. Tell the CMS the URL of your Netlify site using a local storage item. To do so:\n\n    1. Open `http://localhost:8080/` in the browser\n    2. Write the below command and press enter: `localStorage.setItem('netlifySiteURL', 'https://yourwebsiteurl.netlify.app/')`\n    3. To be sure, you can run this command as well: `localStorage.getItem('netlifySiteURL')`\n    4. Refresh the page\n    5. You should be able to log in via your Netlify Identity email/password\n\n## PKCE with custom Git-Gateway\n\nTo use a custom Git-Gateway implementation with PKCE authentication, use a configuration similar to the following:\n\n    backend:\n        name: git-gateway\n        # Enables PKCE authentication with the git-gateway backend. After auth,\n        # sends the access_token for all requests to the git-gateway host.\n        auth_type: pkce\n        # The base OAuth2 URL. Here is an obfuscated AWS Cognito example.\n        base_url: https://your-cognito-instance.auth.us-east-1.amazoncognito.com\n        # If you need to customize the authorize or token endpoints for PKCE, do that here\n        #auth_endpoint: oauth2/authorize\n        #auth_token_endpoint: oauth2/token\n        # The OAuth2 client ID\n        app_id: your-oauth2-client-id\n        # The base URL of your custom git-gateway. Note that the last part of the path\n        # should be \"bitbucket\", \"gitlab\", or \"github\", so the implementation can automatically\n        # determine which backend API to use when making requests.\n        gateway_url: https://your.gitgateway.host/git-gateway/bitbucket/\n        # Override the Netlify git-gateway status check\n        status_endpoint: https://your.gitgateway.host/api/v2/components.json\n        # Optional: defaults to \"master\"\n        branch: main\n","packages/decap-cms-backend-github/README.md":"# GitHub backend\n\nAn abstraction layer between the CMS and [GitHub](https://docs.github.com/en/rest)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for GitHub REST API.\n\n`GraphQLApi` - `Api` with `ApolloClient`. [Api docs](https://docs.github.com/en/graphql) and [netlify docs](https://www.decapcms.org/docs/beta-features/#github-graphql-api).\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\n`scripts` -  use `createFragmentTypes.js` to create GitHub GraphQL API fragment types.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-gitlab/README.md":"# GitLab backend\n\nAn abstraction layer between the CMS and [GitLab](https://docs.gitlab.com/ee/api/README.html)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses merge requests labels to track unpublished entries statuses.\n\n`Api` - A wrapper for GitLab REST API.\n\n`AuthenticationPage` - A component uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth, PKCE and implicit authentication.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-proxy/README.md":"# Proxy backend\n\nFacilitates [local development](https://www.decapcms.org/docs/beta-features/#working-with-a-local-git-repository).\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md). An `RPC` wrapper for `decap-server`.\n\n`AuthenticationPage` - a mock authentication page\n","packages/decap-cms-backend-test/README.md":"# Test backend\n\nThe backend behind https://demo.decapcms.org/.\nUsed for demo purposes only.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on simple JS objects:\n\n```js\nwindow.repoFiles // json file-system tree\nwindow.repoFilesUnpublished // flat file list\n```\n\n`AuthenticationPage` - A component which allow skip `login screen` for demo purposes.\n\nLook at tests or types for more info.\n","packages/decap-cms-backend-turbo-github/README.md":"# Decap CMS — Turbo GitHub Backend\n\n`turbo-github` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/). Content stays in your GitHub repository and every save is a commit, as with the `github` backend, but editors sign in with a Turbo account instead of a GitHub account, and GitHub is reached through Turbo's server-side proxy, which also caches the repository's content.\n\nIt extends `GitHubBackend` from `decap-cms-backend-github`. Anything not overridden here, including branching and the pull-request-based editorial workflow, behaves as it does there. The GitLab twin is [`decap-cms-backend-turbo-gitlab`](../decap-cms-backend-turbo-gitlab); code the two share lives in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo).\n\nProduct documentation: [overview](https://decapcms.org/docs/turbo-overview/), [getting started](https://decapcms.org/docs/turbo-getting-started/), [connecting a site](https://decapcms.org/docs/turbo-connecting-a-site/), [roles and members](https://decapcms.org/docs/turbo-roles-and-members/), [deploy status](https://decapcms.org/docs/turbo-deploy-status/), [CLI and agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Configuration\n\nThe backend is registered in the `decap-cms` and `decap-cms-app` bundles. [Create a site](https://decapcms.org/docs/turbo-getting-started/) in Turbo, then:\n\n```yaml\nbackend:\n  name: turbo-github\n  turbo_site_id: your-site-id\n```\n\n`turbo_site_id` is the only required key. Before the backend is constructed, its static `preloadConfig` hook fetches the rest from Turbo's `config` endpoint (Supabase project, anon key, `base_url`, `api_root`, `repo` and the default `branch`) and merges it into `backend`. Values in `config.yml` win, with one exception: `repo` always comes from the site in Turbo, because the proxy checks permissions against it.\n\n| Optional key | |\n|---|---|\n| `branch` | Branch to edit. Defaults to the site's branch in Turbo. Set it to let one site back several deploys of the same repo. |\n| `deploy_status` | `false`, or an object with `notifications`, `page` and `primary_target`. See [deploy status](https://decapcms.org/docs/turbo-deploy-status/). |\n| `editor_bridge` | `true` turns on the experimental [editor bridge](#editor-bridge). Off by default. |\n\n`use_graphql: true` is not supported and throws in the constructor: the GraphQL client builds its own transport, which would skip the per-site scoping (`x-site-id` header and `site_id` parameter) the proxy relies on.\n\n### Escape hatches\n\nFor running against a self-hosted control plane or working offline. The hosted product never needs them.\n\n| Key | |\n|---|---|\n| `turbo_config_url` | Config endpoint to fetch from, instead of `https://sb.decapcms.org/functions/v1/config`. |\n| `turbo_admin_url` | Turbo app that serves the login popup. Default `https://turbo.decapcms.org`. |\n| `supabase_app_id`, `supabase_anon_key` | Supabase project ref and anon key. The ref builds the auth and content cache URLs (`https://<ref>.supabase.co`). Setting both skips the fetch entirely, so `base_url`, `api_root` and `repo` must then be set too. Setting `supabase_app_id` alone throws. |\n| `base_url` | Supabase project URL, for the `permissions` and `telemetry` functions, deploy status, the editor bridge and media libraries. |\n| `api_root` | The `gh` proxy function, `<base_url>/functions/v1/gh`. |\n\n## How it works\n\n### Login\n\n\"Login with Turbo\" opens a popup on `turbo_admin_url`. The Turbo app sends the resulting Supabase session back with `postMessage`, and `AuthenticationPage.js` accepts it only when `event.origin` equals the origin of `turbo_admin_url`. That check is the security boundary of the flow and must never be relaxed. Links from the Turbo profile page carry a one-time code in the URL hash instead, which is redeemed for the session with a POST to the Turbo app's `/auth/exchange`.\n\nA session Turbo minted for this CMS alone is revoked server-side on logout. An older session shared with the Turbo dashboard is left alone, so logging out of one CMS does not sign the user out of Turbo.\n\n### Requests and token refresh\n\nThe Supabase access token is sent as a Bearer token to the `gh` proxy, which calls GitHub with the organization's GitHub App installation token. The CMS never holds a GitHub token.\n\nThe access token is refreshed before it expires, with retries for transient failures. Supabase refresh tokens are single-use, so refreshes take a lock shared by every tab on the origin, and a tab adopts a session another tab already rotated. A terminal refresh failure, or a 401 from the proxy that one forced refresh cannot fix, ends the session with \"Session expired. Please log in again.\" A 403 because the user is not a member of the site fails the login, or ends the session if it arrives later.\n\n### Content cache\n\nTurbo's server owns the cache. For each folder or files collection the backend calls `_content/sync`, which brings the cache up to the branch's current head, and reads the entries from `public.data` through PostgREST. The browser has read access only. Locale files of `multiple_files` i18n collections are synced in the background. Opening a single entry checks the cached row with `_content/entry` and reads from GitHub when it is stale.\n\nSaves go through `_content/commit`: one request that commits and updates the cache. Renames, saves to an entry already in editorial review, open authoring, and requests the endpoint refuses with 400, 404 or 413 fall back to the inherited REST sequence.\n\n### Permissions\n\nAfter login the backend fetches the user's per-collection permissions from the `permissions` function and attaches them to the user as `permissions.collections` (`edit`, `view` or `none`). Core hides `none` collections for any backend whose user carries that field. This is a UI convenience; the proxy enforces permissions on every request.\n\n### Commit attribution\n\nCommits are authored by the Turbo GitHub App. The proxy adds the editor in a `Co-authored-by` trailer, derived from the session rather than from anything the browser sends.\n\n### Deploy status\n\nAfter a save, the backend polls Turbo's `site_deployments` for a successful deploy whose commit contains the save, and tells the editor when the change is live. If nothing reports a deploy for the branch within two minutes, it stops silently. `deploy_status` turns the notifications and the Deploys page off.\n\n### Telemetry\n\nThe backend sends `cms_session_started` and `cms_entry_saved` to Turbo's `telemetry` function. The call is not awaited and swallows its own errors, so it cannot affect editing. Editors opt out of analytics on their Turbo profile, owners for the whole organization in its settings. Opting out is applied server-side; the save event that feeds the organization's Activity log is still recorded.\n\n### Editor bridge\n\nWith `editor_bridge: true`, the entry open in the CMS is synced to Turbo every few seconds, so an agent using [`decap mcp`](../decap) can propose field changes. They appear highlighted in the editor and are saved only when the editor saves. The bridge also adds an \"Ask Claude\" action beside each field and an \"Agent bridge on\" badge, whose × turns it off for the tab. It is experimental and may change.\n","packages/decap-cms-backend-turbo-gitlab/README.md":"# Decap CMS — Turbo GitLab Backend\n\n`turbo-gitlab` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/) for a repository on GitLab.com. It extends `GitLabBackend` from `decap-cms-backend-gitlab` the same way [`decap-cms-backend-turbo-github`](../decap-cms-backend-turbo-github) extends the GitHub backend, and shares its design, its config keys and the code in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo). Read that README for login, token refresh, the content cache, permissions, telemetry and the editor bridge. This one lists only the differences.\n\n```yaml\nbackend:\n  name: turbo-gitlab\n  turbo_site_id: your-site-id\n```\n\n## Differences from `turbo-github`\n\n- **Git access.** The `gl` proxy calls GitLab with the organization's GitLab connection: an OAuth token of the GitLab user who authorized it in Turbo. That token reaches every project the user can reach, so the organization's Turbo-side repo scope is the only per-project limit. See [connect your Git provider](https://decapcms.org/docs/turbo-getting-started/#connect-your-git-provider).\n- **Editorial workflow** uses merge requests, as in `decap-cms-backend-gitlab`.\n- **`currentUser` is synthesized.** There is no GitLab identity for the editor, so the user object is built locally from the Turbo session: `name`, `email` and avatar are the editor's, `username` is the repo owner, `id` is `0`. The backend never calls GitLab's user endpoint.\n- **Saves** go through GitLab's commits API, which already commits in one call, so there is no `_content/commit`. The cache picks the change up on the next `_content/sync`.\n- **Commit attribution.** The editor is the commit author (`author_name`, `author_email`); the committer is the GitLab user behind the connection.\n- **No deploy status.** `deploy_status` has no effect.\n- **Escape hatch `api_root`** points at the `gl` function, `<base_url>/functions/v1/gl`.\n- **`use_graphql: true`** throws, for the same reason as on GitHub.\n","packages/decap-cms-core/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-core/README.md)!\n","packages/decap-cms-editor-component-image/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-editor-component-image/README.md)!\n","packages/decap-cms-lib-auth/README.md":"# Lib Auth\n\nShared components to handle OAuth and implicit authentication flows.\n","packages/decap-cms-lib-util/README.md":"# Lib Util\n\nShared utilities to handle various `decap-cms-backend-*` backends operations.\n\n## Code structure\n\nThis structure should be the same for backends.\n\nAt first, look at `Implementation`. This is File Management System API and has factory method for `AuthComponent`.\n\n### File Management System API\n\nAn abstraction layer between the CMS and Git-repository manager API.\n\nUsed as backend in [cms-core](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core/README.md).\n\n### Low-level abstractions for Git-repository manager API:\n\n- `API` - used for Entry files\n- `git-lfs` - used for Media files\n- and more helpful utilities\n\n","packages/decap-cms-lib-widgets/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-lib-widgets/README.md)!\n","packages/decap-cms-locales/README.md":"# Decap CMS Locales\n\n## Default translations for Decap CMS\n\nThe English translation is loaded by default.\n\nTo register another locale you can use the following code:\n\n```js\nimport CMS from 'decap-cms-app';\nimport { de } from 'decap-cms-locales';\n\nCMS.registerLocale('de', de);\n```\n\n> When importing `decap-cms` all locales are registered by default.\n\nMake sure the specific locale exists in the package - unless we will happily accept a pull request for it.\n\nThe configured locale will be merge into the English one so don’t worry about missing some phrases.\n","packages/decap-cms-media-library-cloudinary/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-cloudinary/README.md)!\n","packages/decap-cms-media-library-s3/README.md":"# Decap CMS Media Library — S3-compatible storage\n\n> **Beta.** The configuration and behaviour of this package may change in a minor release. It will be replaced by a media library rebuilt inside Decap CMS core, and this package retired; the migration will be documented when that ships. Your files live in your own bucket and inserted URLs point at your public domain, so neither depends on this package.\n\nA media library for sites on [Decap Turbo](https://decapcms.org/docs/turbo-overview/) that stores uploads in an S3-compatible bucket: AWS S3, Cloudflare R2, Bunny Storage, Backblaze B2, DigitalOcean Spaces, Wasabi, MinIO and others. Requests go through Turbo's `integrations` edge function, which signs them with the site's credentials, so storage credentials never reach the browser.\n\nRequires the `turbo-github` or `turbo-gitlab` backend and a Turbo plan with the media library (Pro and above). Product documentation: [Media library](https://decapcms.org/docs/turbo-media-proxy/).\n\n## Setup\n\n### 1. Site variables\n\nOn the site's **Variables** tab in Turbo, not in `config.yml`:\n\n| Key | Secret | Value |\n|---|---|---|\n| `s3_endpoint` | No | S3 API endpoint, e.g. `https://<account-id>.r2.cloudflarestorage.com` or `https://s3.<region>.amazonaws.com` |\n| `s3_region` | No | Region to sign for; `auto` for R2 |\n| `s3_bucket` | No | Bucket name |\n| `s3_access_key_id` | No | Access key ID |\n| `s3_secret_access_key` | Yes | Secret access key |\n| `s3_force_path_style` | No | `true` for most providers, including R2, Bunny and MinIO; `false` usually works on AWS |\n\n### 2. A public URL for the bucket\n\nBuckets are private by default, and this library does not generate presigned URLs for viewing. Serve the bucket publicly through public read access, a custom domain (for example an R2 custom domain) or a CDN, and use that address as `public_url_prefix`.\n\n### 3. `config.yml`\n\n```yaml\nbackend:\n  name: turbo-github # or turbo-gitlab\n  turbo_site_id: your-site-id\n\nmedia_library:\n  name: s3\n  config:\n    public_url_prefix: https://media.example.com\n```\n\n| Option | Required | |\n|---|---|---|\n| `public_url_prefix` | Yes | Prefix for inserted asset URLs. Missing it throws on load. |\n| `root_path` | No | Folder the browser opens in. Default `/`. |\n| `max_file_size` | No | Upload limit in bytes. Default 50 MB. |\n| `multiple` | No | Allow inserting several files at once. Default `false`. |\n\n### 4. Registration\n\nThe `decap-cms` bundle (the script-tag build) registers this library already. With `decap-cms-app`, register it yourself:\n\n```js\nimport CMS from 'decap-cms-app';\nimport S3MediaLibrary from 'decap-cms-media-library-s3';\n\nCMS.registerMediaLibrary(S3MediaLibrary);\n```\n\n## How it works\n\nCore passes the library the backend config, the current access token and the site ID through `getMediaLibraryContext`. The library calls `<base_url>/functions/v1/integrations/s3/<key>` with `Authorization: Bearer <access token>` and `x-site-id: <site id>`; `base_url` comes from the Turbo backend's preloaded config. The function checks the user's site membership and plan, reads the site's `s3_*` variables, signs the request with SigV4 and forwards it. The destination host comes only from the site's own `s3_endpoint`, never from the request.\n\n- Listing uses `ListObjectsV2` with `delimiter=/` and follows continuation tokens until the listing is complete. Folders are key prefixes: deleting the last object in one makes it disappear, as in S3 itself.\n- Uploads are buffered in the edge function before forwarding, because S3 and R2 require a real `Content-Length` and reject chunked bodies with 411. `max_file_size` bounds the buffer.\n- An upload does not insert or close the dialog. New files are pre-selected, and **Insert** confirms them.\n\nSource: `src/index.js` (entry, context resolution), `src/api/client.ts` (HTTP and XML parsing), `src/api/fileManager.ts` (paths to keys, public URLs), `src/components/S3Widget.tsx` (the dialog).\n\n## Limitations\n\n- No search, image transformations, folder creation, move or rename.\n- Every upload passes through the edge function.\n- Requires a public URL for the bucket (see above).\n\n## Troubleshooting\n\n| Message | Cause |\n|---|---|\n| `public_url_prefix is required in media_library config` | Add it under `media_library.config`. |\n| `Session token not found. Please log in again.` | Log in again. |\n| `Active site id is missing in backend configuration.` | `turbo_site_id` is not set. |\n| `Backend base URL is missing. Configure backend.base_url.` | The backend is not a Turbo backend, or its config did not load. |\n| 403 with `media_proxy_requires_paid_plan` | The organization's plan does not include the media library. |\n| 403 otherwise | The user is not a member of the site. |\n| 500 `Missing S3 storage configuration for site` | One of `s3_endpoint`, `s3_bucket`, `s3_access_key_id`, `s3_secret_access_key` is not set. |\n| Inserted images do not load | The bucket is not publicly readable at `public_url_prefix`. |\n\n## Development\n\n```sh\npnpm exec jest packages/decap-cms-media-library-s3\n```\n\nWhen changing the client or the `s3` adapter, test browse (including a listing over 1,000 keys), upload at `max_file_size`, single and multiple insert, delete, and the error paths above against at least Cloudflare R2 (`s3_region: auto`) and a path-style provider such as MinIO. When reporting an issue, include the browser, the redacted media config, and the response from `/functions/v1/integrations/s3/*`.\n\n## License\n\nMIT\n","packages/decap-cms-media-library-uploadcare/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-uploadcare/README.md)!\n","packages/decap-cms-ui-auth/README.md":"# decap-cms-ui-auth\n\nAuthentication UI pages used by the decap-cms-backend-* packages.\n\n## Common Behavior\n\n* An authenticator must return the following fields:\n  * email\n  * token?\n  * expires?\n\n## Components\n\n* **NetlifyAuthenticationPage**\n    * Username and password fields that are passed to Netlify Identity.\n    * Requires a static `authClient` value set before login will work, expected to be set by the backend implementation.\n  * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type) from Netlify\n* **PKCEAuthenticationPage**\n    * OAuth2 PKCE flow with optional OIDC auto-configuration.\n    * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type), with additional data:\n        * token (part of Credentials definition): the access token\n        * idToken: if available\n        * claims: if available (decoded access token)\n        * idClaims: if available (decoded ID token)\n        * email: mapped email value from the token claims, if available\n        * user_metadata.full_name: mapped value from the token claims, if available\n        * user_metadata.avatar_url: mapped value from the token claims, if available\n\n","packages/decap-cms-ui-default/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-ui-default/README.md)!\n","packages/decap-cms-widget-boolean/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-boolean/README.md)!\n","packages/decap-cms-widget-code/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-code/README.md)!\n","packages/decap-cms-widget-colorstring/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-colorstring/README.md)!\n","packages/decap-cms-widget-datetime/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-datetime/README.md)!\n","packages/decap-cms-widget-file/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-file/README.md)!\n","packages/decap-cms-widget-image/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-image/README.md)!\n","packages/decap-cms-widget-list/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-list/README.md)!\n","packages/decap-cms-widget-map/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-map/README.md)!\n","packages/decap-cms-widget-markdown/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-markdown/README.md)!\n","packages/decap-cms-widget-number/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-number/README.md)!\n","packages/decap-cms-widget-object/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-object/README.md)!\n","packages/decap-cms-widget-relation/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-relation/README.md)!\n","packages/decap-cms-widget-richtext/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/master/packages/decap-cms-widget-markdown/README.md)!\n","packages/decap-cms-widget-select/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-select/README.md)!\n","packages/decap-cms-widget-string/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-string/README.md)!\n","packages/decap-cms-widget-text/README.md":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-text/README.md)!\n","packages/decap-cms-widget-uuid/README.md":"# decap-cms-widget-uuid\n\nUUID widget for Decap CMS.\n\n## Options\n\n- `read_only`: Prevent editing the generated UUID. Defaults to `true`.\n- `prefix`: String prepended to the generated UUID. Defaults to an empty string.\n- `use_b32_encoding`: Encode the UUID using unpadded, lowercase RFC 4648 Base32. Defaults to `false`.\n","packages/decap-cms/README.md":"# Decap CMS\n\nA CMS for static site generators. Give users a simple way to edit\nand add content to any site built with a static site generator.\n\n[decapcms.org](https://www.decapcms.org/) \n\n## Community Chat\n\n<a href=\"https://decapcms.org/chat\">Join us on Discord</a>\n\n## How It Works\n\nDecap CMS is a single-page app that you pull into the `/admin` part of your site.\n\nIt presents a clean UI for editing content stored in a Git repository.\n\nYou setup a YAML config to describe the content model of your site, and typically\ntweak the main layout of the CMS a bit to fit your own site.\n\nWhen a user navigates to `/admin/` they'll be prompted to log in, and once authenticated\nthey'll be able to create new content or edit existing content.\n\nRead more about Decap CMS [Core Concepts](https://www.decapcms.org/docs/intro/).\n\n## Installation and Configuration\n\nThe Decap CMS can be used in two different ways.\n\n* A Quick and easy install, that requires you to create a single HTML file and a configuration file. All the CMS JavaScript and CSS are loaded from a CDN.\n  To learn more about this installation method, refer to the [Quick Start Guide](https://www.decapcms.org/docs/quick-start/)\n* A complete, more complex install, that gives you more flexibility but requires that you use a static site builder with a build system that supports npm packages.\n\n## Contributing\n\nNew contributors are always welcome! Check out [CONTRIBUTING.md](https://github.com/decaporg/decap-cms/blob/main/CONTRIBUTING.md) to get involved.\n\n## Change Log\n\nThis project adheres to [Semantic Versioning](http://semver.org/).\nEvery release is documented on the GitHub [Releases](https://github.com/decaporg/decap-cms/releases) page.\n\n## License\n\nDecap CMS is released under the [MIT License](LICENSE).\nPlease make sure you understand its [implications and guarantees](https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html).\n\n## Maintainers\n\nMaintained with care by <a href=\"https://techhub.p-m.si/\">PM</a> & friends.\n","packages/decap-server/README.md":"# decap-server\n\nThe local proxy server for Decap CMS's `proxy` backend. Run it in the root of your site's repository and the CMS reads and writes files on disk instead of going through a git host:\n\n```sh\nnpx decap-server\n```\n\nThe CMS side needs only:\n\n```yaml\nlocal_backend: true\n```\n\nIt needs Node 20 or later.\n\nSettings are read from the environment, also from a `.env` file in the working directory: `PORT` (default 8081), `BIND_HOST`, `MODE` (`fs` or `git`, default `fs`), `GIT_REPO_DIRECTORY` (default the current directory), `ORIGIN` (default localhost and 127.0.0.1) and `LOG_LEVEL` (default `info`). In `git` mode changes are committed to the local repository and the editorial workflow works.\n\nTo mount the endpoints on your own Express app:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('decap-server/dist/middlewares');\n```\n\nSince 3.11.4 the server code lives in the internal `@decap/cli` package, which this package depends on and runs. Nothing changes for `npx decap-server` users.\n","packages/decap-turbo-api/README.md":"# decap-turbo-api\n\n> **Experimental.** Operations, input schemas and response types may change in any release, including a patch release, as the Turbo API evolves. Pin an exact version if you depend on it. Most people want the CLI, [`@decap/cli`](../decap), rather than this package.\n\nThe [Decap Turbo](https://decapcms.org/docs/turbo-cli-and-agents/) API contract: one definition per operation, with its HTTP method and path, the token scope it needs, a JSON Schema for its input, and the MCP tool and CLI command it is exposed as. Shared by `@decap/cli` and the Turbo server, so the two cannot disagree about the API.\n\nDependency-free. Input schemas are plain JSON Schema; `validateInput(schema, body)` checks a request body against one.\n\n```ts\nimport { operations, validateInput } from 'decap-turbo-api';\n\nconst result = validateInput(operations.cliToken.input, body);\nif (!result.ok) console.error(result.errors);\n```\n","packages/decap/README.md":"# @decap/cli\n\nThe Decap command line, installed as the `decap` command. It runs the local proxy server for editing a site on your own machine, manages [Decap Turbo](https://turbo.decapcms.org), and connects AI agents to Turbo over MCP. Turbo commands go through the Turbo API with a personal access token, so they can never do more than you can in the dashboard.\n\n> **Experimental.** `decap dev` is the stable replacement for `npx decap-server`. Everything else (`login`, `whoami`, `logout`, `mcp` and the Turbo commands) talks to the Decap Turbo API, which is in preview: commands, flags and output may change between releases without a major version bump. Pin an exact version in scripts and CI.\n\nRun it with `npx @decap/cli <command>`, or install it globally (`npm install -g @decap/cli`) to type `decap`. `npx decap` does not run this package; always name `@decap/cli`. It needs Node 20 or later. Product documentation: [CLI and AI agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Local development: `decap dev`\n\nRuns the proxy server for Decap's `proxy` backend, so the CMS reads and writes the repository on disk. This was `npx decap-server`, which still works and runs the same server.\n\n```sh\nnpx @decap/cli dev                 # serve the current directory on port 8081\nnpx @decap/cli dev --mode git      # commit changes, with editorial workflow support\nnpx @decap/cli dev --port 8082 --dir ../my-site\n```\n\nPoint the CMS at it:\n\n```yaml\nlocal_backend: true\n```\n\nor, explicitly:\n\n```yaml\nbackend:\n  name: proxy\n  proxy_url: http://localhost:8081/api/v1\n```\n\nEach flag overrides an environment variable, also read from a `.env` file in the working directory: `--port` (`PORT`, default 8081), `--host` (`BIND_HOST`), `--mode` (`MODE`: `fs` or `git`, default `fs`), `--dir` (`GIT_REPO_DIRECTORY`, default the current directory), `--origin` (`ORIGIN`, the CMS origin allowed to call the server, default localhost) and `--log-level` (`LOG_LEVEL`, default `info`).\n\nTo mount the proxy endpoints on your own Express app instead:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('@decap/cli/dev');\n\nawait registerLocalFs(app); // or registerLocalGit(app)\n```\n\n## Sign in\n\n```sh\nnpx @decap/cli login          # opens the browser; approve, and a token is stored\nnpx @decap/cli login --admin  # also request admin scope (manage sites and members)\nnpx @decap/cli whoami\nnpx @decap/cli logout         # revokes the token and forgets it\n```\n\nThe token is stored in `~/.config/decap/credentials.json` (mode 0600). In CI, set `DECAP_TOKEN` to a token created under **API tokens** in the dashboard instead. Set `DECAP_NO_BROWSER` to have `login` skip launching a browser, for a machine with none to open; it still prints the approval URL to copy elsewhere.\n\n## Manage Turbo\n\nEvery Turbo API operation is a command. `decap --help` lists them; `decap <command> --help` shows its flags.\n\n```sh\ndecap orgs list\ndecap sites list --org <org-id>\ndecap sites create --org <org-id> --name \"Marketing site\" --repo acme/marketing\ndecap sites update --site <site-id> --branch develop\ndecap cache clear --site <site-id>\ndecap deploys list --site <site-id> --limit 5\ndecap members invite --org <org-id> --email someone@example.com\ndecap members set-role --org <org-id> --member someone@example.com --role owner\ndecap site-members add --site <site-id> --member someone@example.com\n```\n\nMembers can be named by email or user id. Add `--json` for machine-readable output. Commands that change something need a token with admin scope (`decap login --admin`) and an organization owner behind it, the same as in the dashboard.\n\n## Edit the open entry\n\nWhen you have an entry open in a Turbo-backed CMS, an agent (or you) can change its fields there without saving: the change appears highlighted in your editor, for you to review and save.\n\n```sh\ndecap editor list                                  # entries you have open, with their fields and values\ndecap editor set --session <id> --fields '{\"title\": \"New title\", \"seo.description\": \"…\"}'\ndecap editor open --site <site-id> --collection posts --slug hello   # the CMS link for an entry\n```\n\nThe editor bridge is experimental and off by default: turn it on for a site with `editor_bridge: true` under `backend` in config.yml. While it is on, the CMS shows a small \"Agent bridge on\" badge while an entry is open; its × turns the bridge off for that tab.\n\n## Use it from an AI agent\n\n`decap mcp` is a local MCP server. Sign in once with `login`, then add it to your agent.\n\n**Claude Code**\n\n```sh\nclaude mcp add decap -- npx -y @decap/cli mcp\n```\n\n**Claude Desktop, Cursor, and other clients that take a JSON config**\n\n```json\n{\n  \"mcpServers\": {\n    \"decap\": { \"command\": \"npx\", \"args\": [\"-y\", \"@decap/cli\", \"mcp\"] }\n  }\n}\n```\n\n## Developing\n\nThe API contract (operations, input schemas, MCP tool metadata) is the [`decap-turbo-api`](../decap-turbo-api) package, shared with the Turbo server. It is bundled into `dist/cli.cjs` at build time, so the published CLI does not depend on it at runtime.\n\n```sh\npnpm install            # from the repository root\npnpm --filter @decap/cli build   # dist/cli.cjs\npnpm --filter @decap/cli test\npnpm run type-check     # from the repository root\n```\n\nAgainst a local Turbo (the Turbo app on port 4321):\n\n```sh\nnode dist/cli.cjs login --api-url http://localhost:4321\nnode dist/cli.cjs whoami\n```\n\nTo try changes to the CLI with an agent, point the agent at the local build. The stored credentials remember the API URL, so no extra env is needed:\n\n```sh\nclaude mcp add decap-local --scope user -- node /absolute/path/to/decap-cms/packages/decap/dist/cli.cjs mcp\n```\n\n`claude mcp add` defaults to the current project's scope; `--scope user` makes it available in every session. Start a new Claude Code session afterwards: MCP servers are loaded at startup.\n"},"items":[{"name":"README.md","path":"packages/decap-cms-app/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-app/README.md","title":"decap-cms-app Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS App\n_For a Decap CMS overview, see the general [Decap CMS project README](https://github.com/decaporg/decap-cms)._\n\n## Purpose\nThis package is similar to the [`decap-cms`](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms/) package, but is designed for use with extensions. It serves that purpose in the following ways.\n\n- It does not automatically initialize - you must run the CMS `init` method.\n- It does not include `react` or `react-dom` - they are required as peer dependencies.\n- It does not include the following extensions:\n  - [`decap-cms-media-library-cloudinary`]\n  - [`decap-cms-media-library-uploadcare`]\n  \n## Usage\nInstall via script tag:\n\n```html\n<!-- Excluding `doctype` and `head` but you should add them -->\n<body>\n  <!-- Add these scripts to the bottom of the body -->\n  <script src=\"https://cdn.jsdelivr.net/npm/react@^18/umd/react.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/react-dom@^18/umd/react-dom.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/decap-cms-app/dist/decap-cms-app.js\"></script>\n  \n  <!-- Initialize the CMS -->\n  <script>\n    DecapCmsApp.init();\n  </script>\n</body>\n```\n\nInstall via npm:\n\n```\nnpm i react react-dom decap-cms-app\n```\n\n```js\nimport CMS from 'decap-cms-app';\n\nCMS.init();\n```\n","isInternal":false,"tokens":350,"sizeBytes":1316},{"name":"README.md","path":"packages/decap-cms-backend-aws-cognito-github-proxy/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-aws-cognito-github-proxy/README.md","title":"decap-cms-backend-aws-cognito-github-proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# GitHub backend\n\nAn abstraction layer between the CMS and a proxied version of [Github](https://docs.github.com/en/rest).\n\n## Code structure\n\n`Implementation` - wraps [Github Backend](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) for proxied version of Github.\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to create an AWS Cognito compatible generic Authentication page supporting PKCE.\n","isInternal":false,"tokens":126,"sizeBytes":512},{"name":"README.md","path":"packages/decap-cms-backend-azure/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-azure/README.md","title":"decap-cms-backend-azure Documentation","category":"plugin-manifest","format":"markdown","content":"# Azure backend\n\nAn abstraction layer between the CMS and [Azure DevOps](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for Azure DevOps REST API.\n\n`AuthenticationPage` - facilitates implicit authentication flow. Uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md).\n\nLook at tests or types for more info.\n","isInternal":false,"tokens":142,"sizeBytes":562},{"name":"README.md","path":"packages/decap-cms-backend-bitbucket/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-bitbucket/README.md","title":"decap-cms-backend-bitbucket Documentation","category":"plugin-manifest","format":"markdown","content":"# Bitbucket backend\n\nAn abstraction layer between the CMS and [Bitbucket](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api` and `LargeMedia(LFS)`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses pull requests comments to track unpublished entries statuses.\n\n`Api` - A wrapper for Bitbucket REST API.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\nLook at tests or types for more info.\n","isInternal":false,"tokens":191,"sizeBytes":775},{"name":"README.md","path":"packages/decap-cms-backend-git-gateway/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-git-gateway/README.md","title":"decap-cms-backend-git-gateway Documentation","category":"plugin-manifest","format":"markdown","content":"# Git Gateway\n\nNetlify's [gateway](https://github.com/netlify/git-gateway) to hosted git APIs.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` and `Implementation` from backend-[github](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-github/README.md)/[gitlab](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-gitlab/README.md)/[bitbacket](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-bitbacket/README.md) extended with Netlify-specific `LargeMedia(LFS)` and `JWT` auth.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements Netlify Identity authentication flow.\n\n`PKCEAuthenticationPage` = uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements OAuth2 PKCE authentication flow. Enabled if the config.auth_type is set to `pkce`.\n\nLook at tests or types for more info.\n\n## Debugging\n\nWhen debugging the CMS with Git Gateway you must:\n\n1. Have a Netlify site with [Git Gateway](https://docs.netlify.com/visitor-access/git-gateway/) and [Netlify Identity](https://docs.netlify.com/visitor-access/identity/) enabled. An easy way to create such a site is to use a [template](https://www.decapcms.org/docs/start-with-a-template/), for example the [Gatsby template](https://app.netlify.com/start/deploy?repository=https://github.com/decaporg/gatsby-starter-decap-cms&stack=cms)\n2. Tell the CMS the URL of your Netlify site using a local storage item. To do so:\n\n    1. Open `http://localhost:8080/` in the browser\n    2. Write the below command and press enter: `localStorage.setItem('netlifySiteURL', 'https://yourwebsiteurl.netlify.app/')`\n    3. To be sure, you can run this command as well: `localStorage.getItem('netlifySiteURL')`\n    4. Refresh the page\n    5. You should be able to log in via your Netlify Identity email/password\n\n## PKCE with custom Git-Gateway\n\nTo use a custom Git-Gateway implementation with PKCE authentication, use a configuration similar to the following:\n\n    backend:\n        name: git-gateway\n        # Enables PKCE authentication with the git-gateway backend. After auth,\n        # sends the access_token for all requests to the git-gateway host.\n        auth_type: pkce\n        # The base OAuth2 URL. Here is an obfuscated AWS Cognito example.\n        base_url: https://your-cognito-instance.auth.us-east-1.amazoncognito.com\n        # If you need to customize the authorize or token endpoints for PKCE, do that here\n        #auth_endpoint: oauth2/authorize\n        #auth_token_endpoint: oauth2/token\n        # The OAuth2 client ID\n        app_id: your-oauth2-client-id\n        # The base URL of your custom git-gateway. Note that the last part of the path\n        # should be \"bitbucket\", \"gitlab\", or \"github\", so the implementation can automatically\n        # determine which backend API to use when making requests.\n        gateway_url: https://your.gitgateway.host/git-gateway/bitbucket/\n        # Override the Netlify git-gateway status check\n        status_endpoint: https://your.gitgateway.host/api/v2/components.json\n        # Optional: defaults to \"master\"\n        branch: main\n","isInternal":false,"tokens":851,"sizeBytes":3381},{"name":"README.md","path":"packages/decap-cms-backend-github/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-github/README.md","title":"decap-cms-backend-github Documentation","category":"plugin-manifest","format":"markdown","content":"# GitHub backend\n\nAn abstraction layer between the CMS and [GitHub](https://docs.github.com/en/rest)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for GitHub REST API.\n\n`GraphQLApi` - `Api` with `ApolloClient`. [Api docs](https://docs.github.com/en/graphql) and [netlify docs](https://www.decapcms.org/docs/beta-features/#github-graphql-api).\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\n`scripts` -  use `createFragmentTypes.js` to create GitHub GraphQL API fragment types.\n\nLook at tests or types for more info.\n","isInternal":false,"tokens":202,"sizeBytes":793},{"name":"README.md","path":"packages/decap-cms-backend-gitlab/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-gitlab/README.md","title":"decap-cms-backend-gitlab Documentation","category":"plugin-manifest","format":"markdown","content":"# GitLab backend\n\nAn abstraction layer between the CMS and [GitLab](https://docs.gitlab.com/ee/api/README.html)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses merge requests labels to track unpublished entries statuses.\n\n`Api` - A wrapper for GitLab REST API.\n\n`AuthenticationPage` - A component uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth, PKCE and implicit authentication.\n\nLook at tests or types for more info.\n","isInternal":false,"tokens":185,"sizeBytes":744},{"name":"README.md","path":"packages/decap-cms-backend-proxy/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-proxy/README.md","title":"decap-cms-backend-proxy Documentation","category":"plugin-manifest","format":"markdown","content":"# Proxy backend\n\nFacilitates [local development](https://www.decapcms.org/docs/beta-features/#working-with-a-local-git-repository).\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md). An `RPC` wrapper for `decap-server`.\n\n`AuthenticationPage` - a mock authentication page\n","isInternal":false,"tokens":94,"sizeBytes":378},{"name":"README.md","path":"packages/decap-cms-backend-test/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-test/README.md","title":"decap-cms-backend-test Documentation","category":"plugin-manifest","format":"markdown","content":"# Test backend\n\nThe backend behind https://demo.decapcms.org/.\nUsed for demo purposes only.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on simple JS objects:\n\n```js\nwindow.repoFiles // json file-system tree\nwindow.repoFilesUnpublished // flat file list\n```\n\n`AuthenticationPage` - A component which allow skip `login screen` for demo purposes.\n\nLook at tests or types for more info.\n","isInternal":false,"tokens":119,"sizeBytes":502},{"name":"README.md","path":"packages/decap-cms-backend-turbo-github/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-turbo-github/README.md","title":"decap-cms-backend-turbo-github Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS — Turbo GitHub Backend\n\n`turbo-github` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/). Content stays in your GitHub repository and every save is a commit, as with the `github` backend, but editors sign in with a Turbo account instead of a GitHub account, and GitHub is reached through Turbo's server-side proxy, which also caches the repository's content.\n\nIt extends `GitHubBackend` from `decap-cms-backend-github`. Anything not overridden here, including branching and the pull-request-based editorial workflow, behaves as it does there. The GitLab twin is [`decap-cms-backend-turbo-gitlab`](../decap-cms-backend-turbo-gitlab); code the two share lives in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo).\n\nProduct documentation: [overview](https://decapcms.org/docs/turbo-overview/), [getting started](https://decapcms.org/docs/turbo-getting-started/), [connecting a site](https://decapcms.org/docs/turbo-connecting-a-site/), [roles and members](https://decapcms.org/docs/turbo-roles-and-members/), [deploy status](https://decapcms.org/docs/turbo-deploy-status/), [CLI and agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Configuration\n\nThe backend is registered in the `decap-cms` and `decap-cms-app` bundles. [Create a site](https://decapcms.org/docs/turbo-getting-started/) in Turbo, then:\n\n```yaml\nbackend:\n  name: turbo-github\n  turbo_site_id: your-site-id\n```\n\n`turbo_site_id` is the only required key. Before the backend is constructed, its static `preloadConfig` hook fetches the rest from Turbo's `config` endpoint (Supabase project, anon key, `base_url`, `api_root`, `repo` and the default `branch`) and merges it into `backend`. Values in `config.yml` win, with one exception: `repo` always comes from the site in Turbo, because the proxy checks permissions against it.\n\n| Optional key | |\n|---|---|\n| `branch` | Branch to edit. Defaults to the site's branch in Turbo. Set it to let one site back several deploys of the same repo. |\n| `deploy_status` | `false`, or an object with `notifications`, `page` and `primary_target`. See [deploy status](https://decapcms.org/docs/turbo-deploy-status/). |\n| `editor_bridge` | `true` turns on the experimental [editor bridge](#editor-bridge). Off by default. |\n\n`use_graphql: true` is not supported and throws in the constructor: the GraphQL client builds its own transport, which would skip the per-site scoping (`x-site-id` header and `site_id` parameter) the proxy relies on.\n\n### Escape hatches\n\nFor running against a self-hosted control plane or working offline. The hosted product never needs them.\n\n| Key | |\n|---|---|\n| `turbo_config_url` | Config endpoint to fetch from, instead of `https://sb.decapcms.org/functions/v1/config`. |\n| `turbo_admin_url` | Turbo app that serves the login popup. Default `https://turbo.decapcms.org`. |\n| `supabase_app_id`, `supabase_anon_key` | Supabase project ref and anon key. The ref builds the auth and content cache URLs (`https://<ref>.supabase.co`). Setting both skips the fetch entirely, so `base_url`, `api_root` and `repo` must then be set too. Setting `supabase_app_id` alone throws. |\n| `base_url` | Supabase project URL, for the `permissions` and `telemetry` functions, deploy status, the editor bridge and media libraries. |\n| `api_root` | The `gh` proxy function, `<base_url>/functions/v1/gh`. |\n\n## How it works\n\n### Login\n\n\"Login with Turbo\" opens a popup on `turbo_admin_url`. The Turbo app sends the resulting Supabase session back with `postMessage`, and `AuthenticationPage.js` accepts it only when `event.origin` equals the origin of `turbo_admin_url`. That check is the security boundary of the flow and must never be relaxed. Links from the Turbo profile page carry a one-time code in the URL hash instead, which is redeemed for the session with a POST to the Turbo app's `/auth/exchange`.\n\nA session Turbo minted for this CMS alone is revoked server-side on logout. An older session shared with the Turbo dashboard is left alone, so logging out of one CMS does not sign the user out of Turbo.\n\n### Requests and token refresh\n\nThe Supabase access token is sent as a Bearer token to the `gh` proxy, which calls GitHub with the organization's GitHub App installation token. The CMS never holds a GitHub token.\n\nThe access token is refreshed before it expires, with retries for transient failures. Supabase refresh tokens are single-use, so refreshes take a lock shared by every tab on the origin, and a tab adopts a session another tab already rotated. A terminal refresh failure, or a 401 from the proxy that one forced refresh cannot fix, ends the session with \"Session expired. Please log in again.\" A 403 because the user is not a member of the site fails the login, or ends the session if it arrives later.\n\n### Content cache\n\nTurbo's server owns the cache. For each folder or files collection the backend calls `_content/sync`, which brings the cache up to the branch's current head, and reads the entries from `public.data` through PostgREST. The browser has read access only. Locale files of `multiple_files` i18n collections are synced in the background. Opening a single entry checks the cached row with `_content/entry` and reads from GitHub when it is stale.\n\nSaves go through `_content/commit`: one request that commits and updates the cache. Renames, saves to an entry already in editorial review, open authoring, and requests the endpoint refuses with 400, 404 or 413 fall back to the inherited REST sequence.\n\n### Permissions\n\nAfter login the backend fetches the user's per-collection permissions from the `permissions` function and attaches them to the user as `permissions.collections` (`edit`, `view` or `none`). Core hides `none` collections for any backend whose user carries that field. This is a UI convenience; the proxy enforces permissions on every request.\n\n### Commit attribution\n\nCommits are authored by the Turbo GitHub App. The proxy adds the editor in a `Co-authored-by` trailer, derived from the session rather than from anything the browser sends.\n\n### Deploy status\n\nAfter a save, the backend polls Turbo's `site_deployments` for a successful deploy whose commit contains the save, and tells the editor when the change is live. If nothing reports a deploy for the branch within two minutes, it stops silently. `deploy_status` turns the notifications and the Deploys page off.\n\n### Telemetry\n\nThe backend sends `cms_session_started` and `cms_entry_saved` to Turbo's `telemetry` function. The call is not awaited and swallows its own errors, so it cannot affect editing. Editors opt out of analytics on their Turbo profile, owners for the whole organization in its settings. Opting out is applied server-side; the save event that feeds the organization's Activity log is still recorded.\n\n### Editor bridge\n\nWith `editor_bridge: true`, the entry open in the CMS is synced to Turbo every few seconds, so an agent using [`decap mcp`](../decap) can propose field changes. They appear highlighted in the editor and are saved only when the editor saves. The bridge also adds an \"Ask Claude\" action beside each field and an \"Agent bridge on\" badge, whose × turns it off for the tab. It is experimental and may change.\n","isInternal":false,"tokens":1709,"sizeBytes":7219},{"name":"README.md","path":"packages/decap-cms-backend-turbo-gitlab/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-backend-turbo-gitlab/README.md","title":"decap-cms-backend-turbo-gitlab Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS — Turbo GitLab Backend\n\n`turbo-gitlab` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/) for a repository on GitLab.com. It extends `GitLabBackend` from `decap-cms-backend-gitlab` the same way [`decap-cms-backend-turbo-github`](../decap-cms-backend-turbo-github) extends the GitHub backend, and shares its design, its config keys and the code in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo). Read that README for login, token refresh, the content cache, permissions, telemetry and the editor bridge. This one lists only the differences.\n\n```yaml\nbackend:\n  name: turbo-gitlab\n  turbo_site_id: your-site-id\n```\n\n## Differences from `turbo-github`\n\n- **Git access.** The `gl` proxy calls GitLab with the organization's GitLab connection: an OAuth token of the GitLab user who authorized it in Turbo. That token reaches every project the user can reach, so the organization's Turbo-side repo scope is the only per-project limit. See [connect your Git provider](https://decapcms.org/docs/turbo-getting-started/#connect-your-git-provider).\n- **Editorial workflow** uses merge requests, as in `decap-cms-backend-gitlab`.\n- **`currentUser` is synthesized.** There is no GitLab identity for the editor, so the user object is built locally from the Turbo session: `name`, `email` and avatar are the editor's, `username` is the repo owner, `id` is `0`. The backend never calls GitLab's user endpoint.\n- **Saves** go through GitLab's commits API, which already commits in one call, so there is no `_content/commit`. The cache picks the change up on the next `_content/sync`.\n- **Commit attribution.** The editor is the commit author (`author_name`, `author_email`); the committer is the GitLab user behind the connection.\n- **No deploy status.** `deploy_status` has no effect.\n- **Escape hatch `api_root`** points at the `gl` function, `<base_url>/functions/v1/gl`.\n- **`use_graphql: true`** throws, for the same reason as on GitHub.\n","isInternal":false,"tokens":503,"sizeBytes":1969},{"name":"README.md","path":"packages/decap-cms-core/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-core/README.md","title":"decap-cms-core Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-core/README.md)!\n","isInternal":false,"tokens":149,"sizeBytes":533},{"name":"README.md","path":"packages/decap-cms-editor-component-image/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-editor-component-image/README.md","title":"decap-cms-editor-component-image Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-editor-component-image/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":551},{"name":"README.md","path":"packages/decap-cms-lib-auth/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-lib-auth/README.md","title":"decap-cms-lib-auth Documentation","category":"plugin-manifest","format":"markdown","content":"# Lib Auth\n\nShared components to handle OAuth and implicit authentication flows.\n","isInternal":false,"tokens":14,"sizeBytes":81},{"name":"README.md","path":"packages/decap-cms-lib-util/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-lib-util/README.md","title":"decap-cms-lib-util Documentation","category":"plugin-manifest","format":"markdown","content":"# Lib Util\n\nShared utilities to handle various `decap-cms-backend-*` backends operations.\n\n## Code structure\n\nThis structure should be the same for backends.\n\nAt first, look at `Implementation`. This is File Management System API and has factory method for `AuthComponent`.\n\n### File Management System API\n\nAn abstraction layer between the CMS and Git-repository manager API.\n\nUsed as backend in [cms-core](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core/README.md).\n\n### Low-level abstractions for Git-repository manager API:\n\n- `API` - used for Entry files\n- `git-lfs` - used for Media files\n- and more helpful utilities\n\n","isInternal":false,"tokens":150,"sizeBytes":648},{"name":"README.md","path":"packages/decap-cms-lib-widgets/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-lib-widgets/README.md","title":"decap-cms-lib-widgets Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-lib-widgets/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":540},{"name":"README.md","path":"packages/decap-cms-locales/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-locales/README.md","title":"decap-cms-locales Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS Locales\n\n## Default translations for Decap CMS\n\nThe English translation is loaded by default.\n\nTo register another locale you can use the following code:\n\n```js\nimport CMS from 'decap-cms-app';\nimport { de } from 'decap-cms-locales';\n\nCMS.registerLocale('de', de);\n```\n\n> When importing `decap-cms` all locales are registered by default.\n\nMake sure the specific locale exists in the package - unless we will happily accept a pull request for it.\n\nThe configured locale will be merge into the English one so don’t worry about missing some phrases.\n","isInternal":false,"tokens":126,"sizeBytes":561},{"name":"README.md","path":"packages/decap-cms-media-library-cloudinary/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-media-library-cloudinary/README.md","title":"decap-cms-media-library-cloudinary Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-cloudinary/README.md)!\n","isInternal":false,"tokens":152,"sizeBytes":553},{"name":"README.md","path":"packages/decap-cms-media-library-s3/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-media-library-s3/README.md","title":"decap-cms-media-library-s3 Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS Media Library — S3-compatible storage\n\n> **Beta.** The configuration and behaviour of this package may change in a minor release. It will be replaced by a media library rebuilt inside Decap CMS core, and this package retired; the migration will be documented when that ships. Your files live in your own bucket and inserted URLs point at your public domain, so neither depends on this package.\n\nA media library for sites on [Decap Turbo](https://decapcms.org/docs/turbo-overview/) that stores uploads in an S3-compatible bucket: AWS S3, Cloudflare R2, Bunny Storage, Backblaze B2, DigitalOcean Spaces, Wasabi, MinIO and others. Requests go through Turbo's `integrations` edge function, which signs them with the site's credentials, so storage credentials never reach the browser.\n\nRequires the `turbo-github` or `turbo-gitlab` backend and a Turbo plan with the media library (Pro and above). Product documentation: [Media library](https://decapcms.org/docs/turbo-media-proxy/).\n\n## Setup\n\n### 1. Site variables\n\nOn the site's **Variables** tab in Turbo, not in `config.yml`:\n\n| Key | Secret | Value |\n|---|---|---|\n| `s3_endpoint` | No | S3 API endpoint, e.g. `https://<account-id>.r2.cloudflarestorage.com` or `https://s3.<region>.amazonaws.com` |\n| `s3_region` | No | Region to sign for; `auto` for R2 |\n| `s3_bucket` | No | Bucket name |\n| `s3_access_key_id` | No | Access key ID |\n| `s3_secret_access_key` | Yes | Secret access key |\n| `s3_force_path_style` | No | `true` for most providers, including R2, Bunny and MinIO; `false` usually works on AWS |\n\n### 2. A public URL for the bucket\n\nBuckets are private by default, and this library does not generate presigned URLs for viewing. Serve the bucket publicly through public read access, a custom domain (for example an R2 custom domain) or a CDN, and use that address as `public_url_prefix`.\n\n### 3. `config.yml`\n\n```yaml\nbackend:\n  name: turbo-github # or turbo-gitlab\n  turbo_site_id: your-site-id\n\nmedia_library:\n  name: s3\n  config:\n    public_url_prefix: https://media.example.com\n```\n\n| Option | Required | |\n|---|---|---|\n| `public_url_prefix` | Yes | Prefix for inserted asset URLs. Missing it throws on load. |\n| `root_path` | No | Folder the browser opens in. Default `/`. |\n| `max_file_size` | No | Upload limit in bytes. Default 50 MB. |\n| `multiple` | No | Allow inserting several files at once. Default `false`. |\n\n### 4. Registration\n\nThe `decap-cms` bundle (the script-tag build) registers this library already. With `decap-cms-app`, register it yourself:\n\n```js\nimport CMS from 'decap-cms-app';\nimport S3MediaLibrary from 'decap-cms-media-library-s3';\n\nCMS.registerMediaLibrary(S3MediaLibrary);\n```\n\n## How it works\n\nCore passes the library the backend config, the current access token and the site ID through `getMediaLibraryContext`. The library calls `<base_url>/functions/v1/integrations/s3/<key>` with `Authorization: Bearer <access token>` and `x-site-id: <site id>`; `base_url` comes from the Turbo backend's preloaded config. The function checks the user's site membership and plan, reads the site's `s3_*` variables, signs the request with SigV4 and forwards it. The destination host comes only from the site's own `s3_endpoint`, never from the request.\n\n- Listing uses `ListObjectsV2` with `delimiter=/` and follows continuation tokens until the listing is complete. Folders are key prefixes: deleting the last object in one makes it disappear, as in S3 itself.\n- Uploads are buffered in the edge function before forwarding, because S3 and R2 require a real `Content-Length` and reject chunked bodies with 411. `max_file_size` bounds the buffer.\n- An upload does not insert or close the dialog. New files are pre-selected, and **Insert** confirms them.\n\nSource: `src/index.js` (entry, context resolution), `src/api/client.ts` (HTTP and XML parsing), `src/api/fileManager.ts` (paths to keys, public URLs), `src/components/S3Widget.tsx` (the dialog).\n\n## Limitations\n\n- No search, image transformations, folder creation, move or rename.\n- Every upload passes through the edge function.\n- Requires a public URL for the bucket (see above).\n\n## Troubleshooting\n\n| Message | Cause |\n|---|---|\n| `public_url_prefix is required in media_library config` | Add it under `media_library.config`. |\n| `Session token not found. Please log in again.` | Log in again. |\n| `Active site id is missing in backend configuration.` | `turbo_site_id` is not set. |\n| `Backend base URL is missing. Configure backend.base_url.` | The backend is not a Turbo backend, or its config did not load. |\n| 403 with `media_proxy_requires_paid_plan` | The organization's plan does not include the media library. |\n| 403 otherwise | The user is not a member of the site. |\n| 500 `Missing S3 storage configuration for site` | One of `s3_endpoint`, `s3_bucket`, `s3_access_key_id`, `s3_secret_access_key` is not set. |\n| Inserted images do not load | The bucket is not publicly readable at `public_url_prefix`. |\n\n## Development\n\n```sh\npnpm exec jest packages/decap-cms-media-library-s3\n```\n\nWhen changing the client or the `s3` adapter, test browse (including a listing over 1,000 keys), upload at `max_file_size`, single and multiple insert, delete, and the error paths above against at least Cloudflare R2 (`s3_region: auto`) and a path-style provider such as MinIO. When reporting an issue, include the browser, the redacted media config, and the response from `/functions/v1/integrations/s3/*`.\n\n## License\n\nMIT\n","isInternal":false,"tokens":1383,"sizeBytes":5477},{"name":"README.md","path":"packages/decap-cms-media-library-uploadcare/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-media-library-uploadcare/README.md","title":"decap-cms-media-library-uploadcare Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-uploadcare/README.md)!\n","isInternal":false,"tokens":152,"sizeBytes":553},{"name":"README.md","path":"packages/decap-cms-ui-auth/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-ui-auth/README.md","title":"decap-cms-ui-auth Documentation","category":"plugin-manifest","format":"markdown","content":"# decap-cms-ui-auth\n\nAuthentication UI pages used by the decap-cms-backend-* packages.\n\n## Common Behavior\n\n* An authenticator must return the following fields:\n  * email\n  * token?\n  * expires?\n\n## Components\n\n* **NetlifyAuthenticationPage**\n    * Username and password fields that are passed to Netlify Identity.\n    * Requires a static `authClient` value set before login will work, expected to be set by the backend implementation.\n  * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type) from Netlify\n* **PKCEAuthenticationPage**\n    * OAuth2 PKCE flow with optional OIDC auto-configuration.\n    * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type), with additional data:\n        * token (part of Credentials definition): the access token\n        * idToken: if available\n        * claims: if available (decoded access token)\n        * idClaims: if available (decoded ID token)\n        * email: mapped email value from the token claims, if available\n        * user_metadata.full_name: mapped value from the token claims, if available\n        * user_metadata.avatar_url: mapped value from the token claims, if available\n\n","isInternal":false,"tokens":254,"sizeBytes":1194},{"name":"README.md","path":"packages/decap-cms-ui-default/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-ui-default/README.md","title":"decap-cms-ui-default Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-ui-default/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":539},{"name":"README.md","path":"packages/decap-cms-widget-boolean/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-boolean/README.md","title":"decap-cms-widget-boolean Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-boolean/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":543},{"name":"README.md","path":"packages/decap-cms-widget-code/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-code/README.md","title":"decap-cms-widget-code Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-code/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":539},{"name":"README.md","path":"packages/decap-cms-widget-colorstring/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-colorstring/README.md","title":"decap-cms-widget-colorstring Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-colorstring/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":547},{"name":"README.md","path":"packages/decap-cms-widget-datetime/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-datetime/README.md","title":"decap-cms-widget-datetime Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-datetime/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":544},{"name":"README.md","path":"packages/decap-cms-widget-file/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-file/README.md","title":"decap-cms-widget-file Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-file/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":540},{"name":"README.md","path":"packages/decap-cms-widget-image/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-image/README.md","title":"decap-cms-widget-image Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-image/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":541},{"name":"README.md","path":"packages/decap-cms-widget-list/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-list/README.md","title":"decap-cms-widget-list Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-list/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":540},{"name":"README.md","path":"packages/decap-cms-widget-map/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-map/README.md","title":"decap-cms-widget-map Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-map/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":539},{"name":"README.md","path":"packages/decap-cms-widget-markdown/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-markdown/README.md","title":"decap-cms-widget-markdown Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-markdown/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":544},{"name":"README.md","path":"packages/decap-cms-widget-number/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-number/README.md","title":"decap-cms-widget-number Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-number/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":542},{"name":"README.md","path":"packages/decap-cms-widget-object/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-object/README.md","title":"decap-cms-widget-object Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-object/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":542},{"name":"README.md","path":"packages/decap-cms-widget-relation/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-relation/README.md","title":"decap-cms-widget-relation Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-relation/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":544},{"name":"README.md","path":"packages/decap-cms-widget-richtext/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-richtext/README.md","title":"decap-cms-widget-richtext Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/master/packages/decap-cms-widget-markdown/README.md)!\n","isInternal":false,"tokens":151,"sizeBytes":546},{"name":"README.md","path":"packages/decap-cms-widget-select/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-select/README.md","title":"decap-cms-widget-select Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-select/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":542},{"name":"README.md","path":"packages/decap-cms-widget-string/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-string/README.md","title":"decap-cms-widget-string Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-string/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":542},{"name":"README.md","path":"packages/decap-cms-widget-text/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-text/README.md","title":"decap-cms-widget-text Documentation","category":"plugin-manifest","format":"markdown","content":"# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-text/README.md)!\n","isInternal":false,"tokens":150,"sizeBytes":540},{"name":"README.md","path":"packages/decap-cms-widget-uuid/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms-widget-uuid/README.md","title":"decap-cms-widget-uuid Documentation","category":"plugin-manifest","format":"markdown","content":"# decap-cms-widget-uuid\n\nUUID widget for Decap CMS.\n\n## Options\n\n- `read_only`: Prevent editing the generated UUID. Defaults to `true`.\n- `prefix`: String prepended to the generated UUID. Defaults to an empty string.\n- `use_b32_encoding`: Encode the UUID using unpadded, lowercase RFC 4648 Base32. Defaults to `false`.\n","isInternal":false,"tokens":80,"sizeBytes":319},{"name":"README.md","path":"packages/decap-cms/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-cms/README.md","title":"decap-cms Documentation","category":"plugin-manifest","format":"markdown","content":"# Decap CMS\n\nA CMS for static site generators. Give users a simple way to edit\nand add content to any site built with a static site generator.\n\n[decapcms.org](https://www.decapcms.org/) \n\n## Community Chat\n\n<a href=\"https://decapcms.org/chat\">Join us on Discord</a>\n\n## How It Works\n\nDecap CMS is a single-page app that you pull into the `/admin` part of your site.\n\nIt presents a clean UI for editing content stored in a Git repository.\n\nYou setup a YAML config to describe the content model of your site, and typically\ntweak the main layout of the CMS a bit to fit your own site.\n\nWhen a user navigates to `/admin/` they'll be prompted to log in, and once authenticated\nthey'll be able to create new content or edit existing content.\n\nRead more about Decap CMS [Core Concepts](https://www.decapcms.org/docs/intro/).\n\n## Installation and Configuration\n\nThe Decap CMS can be used in two different ways.\n\n* A Quick and easy install, that requires you to create a single HTML file and a configuration file. All the CMS JavaScript and CSS are loaded from a CDN.\n  To learn more about this installation method, refer to the [Quick Start Guide](https://www.decapcms.org/docs/quick-start/)\n* A complete, more complex install, that gives you more flexibility but requires that you use a static site builder with a build system that supports npm packages.\n\n## Contributing\n\nNew contributors are always welcome! Check out [CONTRIBUTING.md](https://github.com/decaporg/decap-cms/blob/main/CONTRIBUTING.md) to get involved.\n\n## Change Log\n\nThis project adheres to [Semantic Versioning](http://semver.org/).\nEvery release is documented on the GitHub [Releases](https://github.com/decaporg/decap-cms/releases) page.\n\n## License\n\nDecap CMS is released under the [MIT License](LICENSE).\nPlease make sure you understand its [implications and guarantees](https://writing.kemitchell.com/2016/09/21/MIT-License-Line-by-Line.html).\n\n## Maintainers\n\nMaintained with care by <a href=\"https://techhub.p-m.si/\">PM</a> & friends.\n","isInternal":false,"tokens":482,"sizeBytes":2005},{"name":"README.md","path":"packages/decap-server/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-server/README.md","title":"decap-server Documentation","category":"plugin-manifest","format":"markdown","content":"# decap-server\n\nThe local proxy server for Decap CMS's `proxy` backend. Run it in the root of your site's repository and the CMS reads and writes files on disk instead of going through a git host:\n\n```sh\nnpx decap-server\n```\n\nThe CMS side needs only:\n\n```yaml\nlocal_backend: true\n```\n\nIt needs Node 20 or later.\n\nSettings are read from the environment, also from a `.env` file in the working directory: `PORT` (default 8081), `BIND_HOST`, `MODE` (`fs` or `git`, default `fs`), `GIT_REPO_DIRECTORY` (default the current directory), `ORIGIN` (default localhost and 127.0.0.1) and `LOG_LEVEL` (default `info`). In `git` mode changes are committed to the local repository and the editorial workflow works.\n\nTo mount the endpoints on your own Express app:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('decap-server/dist/middlewares');\n```\n\nSince 3.11.4 the server code lives in the internal `@decap/cli` package, which this package depends on and runs. Nothing changes for `npx decap-server` users.\n","isInternal":false,"tokens":262,"sizeBytes":1010},{"name":"README.md","path":"packages/decap-turbo-api/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap-turbo-api/README.md","title":"decap-turbo-api Documentation","category":"plugin-manifest","format":"markdown","content":"# decap-turbo-api\n\n> **Experimental.** Operations, input schemas and response types may change in any release, including a patch release, as the Turbo API evolves. Pin an exact version if you depend on it. Most people want the CLI, [`@decap/cli`](../decap), rather than this package.\n\nThe [Decap Turbo](https://decapcms.org/docs/turbo-cli-and-agents/) API contract: one definition per operation, with its HTTP method and path, the token scope it needs, a JSON Schema for its input, and the MCP tool and CLI command it is exposed as. Shared by `@decap/cli` and the Turbo server, so the two cannot disagree about the API.\n\nDependency-free. Input schemas are plain JSON Schema; `validateInput(schema, body)` checks a request body against one.\n\n```ts\nimport { operations, validateInput } from 'decap-turbo-api';\n\nconst result = validateInput(operations.cliToken.input, body);\nif (!result.ok) console.error(result.errors);\n```\n","isInternal":false,"tokens":219,"sizeBytes":922},{"name":"README.md","path":"packages/decap/README.md","rawUrl":"https://raw.githubusercontent.com/decaporg/decap-cms/HEAD/packages/decap/README.md","title":"decap Documentation","category":"plugin-manifest","format":"markdown","content":"# @decap/cli\n\nThe Decap command line, installed as the `decap` command. It runs the local proxy server for editing a site on your own machine, manages [Decap Turbo](https://turbo.decapcms.org), and connects AI agents to Turbo over MCP. Turbo commands go through the Turbo API with a personal access token, so they can never do more than you can in the dashboard.\n\n> **Experimental.** `decap dev` is the stable replacement for `npx decap-server`. Everything else (`login`, `whoami`, `logout`, `mcp` and the Turbo commands) talks to the Decap Turbo API, which is in preview: commands, flags and output may change between releases without a major version bump. Pin an exact version in scripts and CI.\n\nRun it with `npx @decap/cli <command>`, or install it globally (`npm install -g @decap/cli`) to type `decap`. `npx decap` does not run this package; always name `@decap/cli`. It needs Node 20 or later. Product documentation: [CLI and AI agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Local development: `decap dev`\n\nRuns the proxy server for Decap's `proxy` backend, so the CMS reads and writes the repository on disk. This was `npx decap-server`, which still works and runs the same server.\n\n```sh\nnpx @decap/cli dev                 # serve the current directory on port 8081\nnpx @decap/cli dev --mode git      # commit changes, with editorial workflow support\nnpx @decap/cli dev --port 8082 --dir ../my-site\n```\n\nPoint the CMS at it:\n\n```yaml\nlocal_backend: true\n```\n\nor, explicitly:\n\n```yaml\nbackend:\n  name: proxy\n  proxy_url: http://localhost:8081/api/v1\n```\n\nEach flag overrides an environment variable, also read from a `.env` file in the working directory: `--port` (`PORT`, default 8081), `--host` (`BIND_HOST`), `--mode` (`MODE`: `fs` or `git`, default `fs`), `--dir` (`GIT_REPO_DIRECTORY`, default the current directory), `--origin` (`ORIGIN`, the CMS origin allowed to call the server, default localhost) and `--log-level` (`LOG_LEVEL`, default `info`).\n\nTo mount the proxy endpoints on your own Express app instead:\n\n```js\nconst { registerLocalFs, registerLocalGit } = require('@decap/cli/dev');\n\nawait registerLocalFs(app); // or registerLocalGit(app)\n```\n\n## Sign in\n\n```sh\nnpx @decap/cli login          # opens the browser; approve, and a token is stored\nnpx @decap/cli login --admin  # also request admin scope (manage sites and members)\nnpx @decap/cli whoami\nnpx @decap/cli logout         # revokes the token and forgets it\n```\n\nThe token is stored in `~/.config/decap/credentials.json` (mode 0600). In CI, set `DECAP_TOKEN` to a token created under **API tokens** in the dashboard instead. Set `DECAP_NO_BROWSER` to have `login` skip launching a browser, for a machine with none to open; it still prints the approval URL to copy elsewhere.\n\n## Manage Turbo\n\nEvery Turbo API operation is a command. `decap --help` lists them; `decap <command> --help` shows its flags.\n\n```sh\ndecap orgs list\ndecap sites list --org <org-id>\ndecap sites create --org <org-id> --name \"Marketing site\" --repo acme/marketing\ndecap sites update --site <site-id> --branch develop\ndecap cache clear --site <site-id>\ndecap deploys list --site <site-id> --limit 5\ndecap members invite --org <org-id> --email someone@example.com\ndecap members set-role --org <org-id> --member someone@example.com --role owner\ndecap site-members add --site <site-id> --member someone@example.com\n```\n\nMembers can be named by email or user id. Add `--json` for machine-readable output. Commands that change something need a token with admin scope (`decap login --admin`) and an organization owner behind it, the same as in the dashboard.\n\n## Edit the open entry\n\nWhen you have an entry open in a Turbo-backed CMS, an agent (or you) can change its fields there without saving: the change appears highlighted in your editor, for you to review and save.\n\n```sh\ndecap editor list                                  # entries you have open, with their fields and values\ndecap editor set --session <id> --fields '{\"title\": \"New title\", \"seo.description\": \"…\"}'\ndecap editor open --site <site-id> --collection posts --slug hello   # the CMS link for an entry\n```\n\nThe editor bridge is experimental and off by default: turn it on for a site with `editor_bridge: true` under `backend` in config.yml. While it is on, the CMS shows a small \"Agent bridge on\" badge while an entry is open; its × turns the bridge off for that tab.\n\n## Use it from an AI agent\n\n`decap mcp` is a local MCP server. Sign in once with `login`, then add it to your agent.\n\n**Claude Code**\n\n```sh\nclaude mcp add decap -- npx -y @decap/cli mcp\n```\n\n**Claude Desktop, Cursor, and other clients that take a JSON config**\n\n```json\n{\n  \"mcpServers\": {\n    \"decap\": { \"command\": \"npx\", \"args\": [\"-y\", \"@decap/cli\", \"mcp\"] }\n  }\n}\n```\n\n## Developing\n\nThe API contract (operations, input schemas, MCP tool metadata) is the [`decap-turbo-api`](../decap-turbo-api) package, shared with the Turbo server. It is bundled into `dist/cli.cjs` at build time, so the published CLI does not depend on it at runtime.\n\n```sh\npnpm install            # from the repository root\npnpm --filter @decap/cli build   # dist/cli.cjs\npnpm --filter @decap/cli test\npnpm run type-check     # from the repository root\n```\n\nAgainst a local Turbo (the Turbo app on port 4321):\n\n```sh\nnode dist/cli.cjs login --api-url http://localhost:4321\nnode dist/cli.cjs whoami\n```\n\nTo try changes to the CLI with an agent, point the agent at the local build. The stored credentials remember the API URL, so no extra env is needed:\n\n```sh\nclaude mcp add decap-local --scope user -- node /absolute/path/to/decap-cms/packages/decap/dist/cli.cjs mcp\n```\n\n`claude mcp add` defaults to the current project's scope; `--scope user` makes it available in every session. Start a new Claude Code session afterwards: MCP servers are loaded at startup.\n","isInternal":false,"tokens":1534,"sizeBytes":5842}],"systemPromptSnippet":"<yakaai_skills repo=\"decaporg/decap-cms\">\n<!-- File: packages/decap-cms-app/README.md (Tokens: ~350 | Category: plugin-manifest) -->\n# Decap CMS App\n_For a Decap CMS overview, see the general [Decap CMS project README](https://github.com/decaporg/decap-cms)._\n\n## Purpose\nThis package is similar to the [`decap-cms`](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms/) package, but is designed for use with extensions. It serves that purpose in the following ways.\n\n- It does not automatically initialize - you must run the CMS `init` method.\n- It does not include `react` or `react-dom` - they are required as peer dependencies.\n- It does not include the following extensions:\n  - [`decap-cms-media-library-cloudinary`]\n  - [`decap-cms-media-library-uploadcare`]\n  \n## Usage\nInstall via script tag:\n\n```html\n<!-- Excluding `doctype` and `head` but you should add them -->\n<body>\n  <!-- Add these scripts to the bottom of the body -->\n  <script src=\"https://cdn.jsdelivr.net/npm/react@^18/umd/react.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/react-dom@^18/umd/react-dom.production.min.js\"></script>\n  <script src=\"https://cdn.jsdelivr.net/npm/decap-cms-app/dist/decap-cms-app.js\"></script>\n  \n  <!-- Initialize the CMS -->\n  <script>\n    DecapCmsApp.init();\n  </script>\n</body>\n```\n\nInstall via npm:\n\n```\nnpm i react react-dom decap-cms-app\n```\n\n```js\nimport CMS from 'decap-cms-app';\n\nCMS.init();\n```\n\n<!-- File: packages/decap-cms-backend-aws-cognito-github-proxy/README.md (Tokens: ~126 | Category: plugin-manifest) -->\n# GitHub backend\n\nAn abstraction layer between the CMS and a proxied version of [Github](https://docs.github.com/en/rest).\n\n## Code structure\n\n`Implementation` - wraps [Github Backend](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) for proxied version of Github.\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to create an AWS Cognito compatible generic Authentication page supporting PKCE.\n\n<!-- File: packages/decap-cms-backend-azure/README.md (Tokens: ~142 | Category: plugin-manifest) -->\n# Azure backend\n\nAn abstraction layer between the CMS and [Azure DevOps](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for Azure DevOps REST API.\n\n`AuthenticationPage` - facilitates implicit authentication flow. Uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md).\n\nLook at tests or types for more info.\n\n<!-- File: packages/decap-cms-backend-bitbucket/README.md (Tokens: ~191 | Category: plugin-manifest) -->\n# Bitbucket backend\n\nAn abstraction layer between the CMS and [Bitbucket](https://docs.microsoft.com/en-us/rest/api/azure/devops/git/)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api` and `LargeMedia(LFS)`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses pull requests comments to track unpublished entries statuses.\n\n`Api` - A wrapper for Bitbucket REST API.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\nLook at tests or types for more info.\n\n<!-- File: packages/decap-cms-backend-git-gateway/README.md (Tokens: ~851 | Category: plugin-manifest) -->\n# Git Gateway\n\nNetlify's [gateway](https://github.com/netlify/git-gateway) to hosted git APIs.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` and `Implementation` from backend-[github](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-github/README.md)/[gitlab](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-gitlab/README.md)/[bitbacket](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-backend-bitbacket/README.md) extended with Netlify-specific `LargeMedia(LFS)` and `JWT` auth.\n\n`AuthenticationPage` - uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements Netlify Identity authentication flow.\n\n`PKCEAuthenticationPage` = uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) and implements OAuth2 PKCE authentication flow. Enabled if the config.auth_type is set to `pkce`.\n\nLook at tests or types for more info.\n\n## Debugging\n\nWhen debugging the CMS with Git Gateway you must:\n\n1. Have a Netlify site with [Git Gateway](https://docs.netlify.com/visitor-access/git-gateway/) and [Netlify Identity](https://docs.netlify.com/visitor-access/identity/) enabled. An easy way to create such a site is to use a [template](https://www.decapcms.org/docs/start-with-a-template/), for example the [Gatsby template](https://app.netlify.com/start/deploy?repository=https://github.com/decaporg/gatsby-starter-decap-cms&stack=cms)\n2. Tell the CMS the URL of your Netlify site using a local storage item. To do so:\n\n    1. Open `http://localhost:8080/` in the browser\n    2. Write the below command and press enter: `localStorage.setItem('netlifySiteURL', 'https://yourwebsiteurl.netlify.app/')`\n    3. To be sure, you can run this command as well: `localStorage.getItem('netlifySiteURL')`\n    4. Refresh the page\n    5. You should be able to log in via your Netlify Identity email/password\n\n## PKCE with custom Git-Gateway\n\nTo use a custom Git-Gateway implementation with PKCE authentication, use a configuration similar to the following:\n\n    backend:\n        name: git-gateway\n        # Enables PKCE authentication with the git-gateway backend. After auth,\n        # sends the access_token for all requests to the git-gateway host.\n        auth_type: pkce\n        # The base OAuth2 URL. Here is an obfuscated AWS Cognito example.\n        base_url: https://your-cognito-instance.auth.us-east-1.amazoncognito.com\n        # If you need to customize the authorize or token endpoints for PKCE, do that here\n        #auth_endpoint: oauth2/authorize\n        #auth_token_endpoint: oauth2/token\n        # The OAuth2 client ID\n        app_id: your-oauth2-client-id\n        # The base URL of your custom git-gateway. Note that the last part of the path\n        # should be \"bitbucket\", \"gitlab\", or \"github\", so the implementation can automatically\n        # determine which backend API to use when making requests.\n        gateway_url: https://your.gitgateway.host/git-gateway/bitbucket/\n        # Override the Netlify git-gateway status check\n        status_endpoint: https://your.gitgateway.host/api/v2/components.json\n        # Optional: defaults to \"master\"\n        branch: main\n\n<!-- File: packages/decap-cms-backend-github/README.md (Tokens: ~202 | Category: plugin-manifest) -->\n# GitHub backend\n\nAn abstraction layer between the CMS and [GitHub](https://docs.github.com/en/rest)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`.\n\n`Api` - A wrapper for GitHub REST API.\n\n`GraphQLApi` - `Api` with `ApolloClient`. [Api docs](https://docs.github.com/en/graphql) and [netlify docs](https://www.decapcms.org/docs/beta-features/#github-graphql-api).\n\n`AuthenticationPage` -  uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth and implicit authentication.\n\n`scripts` -  use `createFragmentTypes.js` to create GitHub GraphQL API fragment types.\n\nLook at tests or types for more info.\n\n<!-- File: packages/decap-cms-backend-gitlab/README.md (Tokens: ~185 | Category: plugin-manifest) -->\n# GitLab backend\n\nAn abstraction layer between the CMS and [GitLab](https://docs.gitlab.com/ee/api/README.html)\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on `Api`. With [Editorial Workflow](https://www.decapcms.org/docs/beta-features/#gitlab-and-bitbucket-editorial-workflow-support) uses merge requests labels to track unpublished entries statuses.\n\n`Api` - A wrapper for GitLab REST API.\n\n`AuthenticationPage` - A component uses [lib-auth](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-auth/README.md) to facilitate OAuth, PKCE and implicit authentication.\n\nLook at tests or types for more info.\n\n<!-- File: packages/decap-cms-backend-proxy/README.md (Tokens: ~94 | Category: plugin-manifest) -->\n# Proxy backend\n\nFacilitates [local development](https://www.decapcms.org/docs/beta-features/#working-with-a-local-git-repository).\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md). An `RPC` wrapper for `decap-server`.\n\n`AuthenticationPage` - a mock authentication page\n\n<!-- File: packages/decap-cms-backend-test/README.md (Tokens: ~119 | Category: plugin-manifest) -->\n# Test backend\n\nThe backend behind https://demo.decapcms.org/.\nUsed for demo purposes only.\n\n## Code structure\n\n`Implementation` for [File Management System API](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-lib-util/README.md) based on simple JS objects:\n\n```js\nwindow.repoFiles // json file-system tree\nwindow.repoFilesUnpublished // flat file list\n```\n\n`AuthenticationPage` - A component which allow skip `login screen` for demo purposes.\n\nLook at tests or types for more info.\n\n<!-- File: packages/decap-cms-backend-turbo-github/README.md (Tokens: ~1709 | Category: plugin-manifest) -->\n# Decap CMS — Turbo GitHub Backend\n\n`turbo-github` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/). Content stays in your GitHub repository and every save is a commit, as with the `github` backend, but editors sign in with a Turbo account instead of a GitHub account, and GitHub is reached through Turbo's server-side proxy, which also caches the repository's content.\n\nIt extends `GitHubBackend` from `decap-cms-backend-github`. Anything not overridden here, including branching and the pull-request-based editorial workflow, behaves as it does there. The GitLab twin is [`decap-cms-backend-turbo-gitlab`](../decap-cms-backend-turbo-gitlab); code the two share lives in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo).\n\nProduct documentation: [overview](https://decapcms.org/docs/turbo-overview/), [getting started](https://decapcms.org/docs/turbo-getting-started/), [connecting a site](https://decapcms.org/docs/turbo-connecting-a-site/), [roles and members](https://decapcms.org/docs/turbo-roles-and-members/), [deploy status](https://decapcms.org/docs/turbo-deploy-status/), [CLI and agents](https://decapcms.org/docs/turbo-cli-and-agents/).\n\n## Configuration\n\nThe backend is registered in the `decap-cms` and `decap-cms-app` bundles. [Create a site](https://decapcms.org/docs/turbo-getting-started/) in Turbo, then:\n\n```yaml\nbackend:\n  name: turbo-github\n  turbo_site_id: your-site-id\n```\n\n`turbo_site_id` is the only required key. Before the backend is constructed, its static `preloadConfig` hook fetches the rest from Turbo's `config` endpoint (Supabase project, anon key, `base_url`, `api_root`, `repo` and the default `branch`) and merges it into `backend`. Values in `config.yml` win, with one exception: `repo` always comes from the site in Turbo, because the proxy checks permissions against it.\n\n| Optional key | |\n|---|---|\n| `branch` | Branch to edit. Defaults to the site's branch in Turbo. Set it to let one site back several deploys of the same repo. |\n| `deploy_status` | `false`, or an object with `notifications`, `page` and `primary_target`. See [deploy status](https://decapcms.org/docs/turbo-deploy-status/). |\n| `editor_bridge` | `true` turns on the experimental [editor bridge](#editor-bridge). Off by default. |\n\n`use_graphql: true` is not supported and throws in the constructor: the GraphQL client builds its own transport, which would skip the per-site scoping (`x-site-id` header and `site_id` parameter) the proxy relies on.\n\n### Escape hatches\n\nFor running against a self-hosted control plane or working offline. The hosted product never needs them.\n\n| Key | |\n|---|---|\n| `turbo_config_url` | Config endpoint to fetch from, instead of `https://sb.decapcms.org/functions/v1/config`. |\n| `turbo_admin_url` | Turbo app that serves the login popup. Default `https://turbo.decapcms.org`. |\n| `supabase_app_id`, `supabase_anon_key` | Supabase project ref and anon key. The ref builds the auth and content cache URLs (`https://<ref>.supabase.co`). Setting both skips the fetch entirely, so `base_url`, `api_root` and `repo` must then be set too. Setting `supabase_app_id` alone throws. |\n| `base_url` | Supabase project URL, for the `permissions` and `telemetry` functions, deploy status, the editor bridge and media libraries. |\n| `api_root` | The `gh` proxy function, `<base_url>/functions/v1/gh`. |\n\n## How it works\n\n### Login\n\n\"Login with Turbo\" opens a popup on `turbo_admin_url`. The Turbo app sends the resulting Supabase session back with `postMessage`, and `AuthenticationPage.js` accepts it only when `event.origin` equals the origin of `turbo_admin_url`. That check is the security boundary of the flow and must never be relaxed. Links from the Turbo profile page carry a one-time code in the URL hash instead, which is redeemed for the session with a POST to the Turbo app's `/auth/exchange`.\n\nA session Turbo minted for this CMS alone is revoked server-side on logout. An older session shared with the Turbo dashboard is left alone, so logging out of one CMS does not sign the user out of Turbo.\n\n### Requests and token refresh\n\nThe Supabase access token is sent as a Bearer token to the `gh` proxy, which calls GitHub with the organization's GitHub App installation token. The CMS never holds a GitHub token.\n\nThe access token is refreshed before it expires, with retries for transient failures. Supabase refresh tokens are single-use, so refreshes take a lock shared by every tab on the origin, and a tab adopts a session another tab already rotated. A terminal refresh failure, or a 401 from the proxy that one forced refresh cannot fix, ends the session with \"Session expired. Please log in again.\" A 403 because the user is not a member of the site fails the login, or ends the session if it arrives later.\n\n### Content cache\n\nTurbo's server owns the cache. For each folder or files collection the backend calls `_content/sync`, which brings the cache up to the branch's current head, and reads the entries from `public.data` through PostgREST. The browser has read access only. Locale files of `multiple_files` i18n collections are synced in the background. Opening a single entry checks the cached row with `_content/entry` and reads from GitHub when it is stale.\n\nSaves go through `_content/commit`: one request that commits and updates the cache. Renames, saves to an entry already in editorial review, open authoring, and requests the endpoint refuses with 400, 404 or 413 fall back to the inherited REST sequence.\n\n### Permissions\n\nAfter login the backend fetches the user's per-collection permissions from the `permissions` function and attaches them to the user as `permissions.collections` (`edit`, `view` or `none`). Core hides `none` collections for any backend whose user carries that field. This is a UI convenience; the proxy enforces permissions on every request.\n\n### Commit attribution\n\nCommits are authored by the Turbo GitHub App. The proxy adds the editor in a `Co-authored-by` trailer, derived from the session rather than from anything the browser sends.\n\n### Deploy status\n\nAfter a save, the backend polls Turbo's `site_deployments` for a successful deploy whose commit contains the save, and tells the editor when the change is live. If nothing reports a deploy for the branch within two minutes, it stops silently. `deploy_status` turns the notifications and the Deploys page off.\n\n### Telemetry\n\nThe backend sends `cms_session_started` and `cms_entry_saved` to Turbo's `telemetry` function. The call is not awaited and swallows its own errors, so it cannot affect editing. Editors opt out of analytics on their Turbo profile, owners for the whole organization in its settings. Opting out is applied server-side; the save event that feeds the organization's Activity log is still recorded.\n\n### Editor bridge\n\nWith `editor_bridge: true`, the entry open in the CMS is synced to Turbo every few seconds, so an agent using [`decap mcp`](../decap) can propose field changes. They appear highlighted in the editor and are saved only when the editor saves. The bridge also adds an \"Ask Claude\" action beside each field and an \"Agent bridge on\" badge, whose × turns it off for the tab. It is experimental and may change.\n\n<!-- File: packages/decap-cms-backend-turbo-gitlab/README.md (Tokens: ~503 | Category: plugin-manifest) -->\n# Decap CMS — Turbo GitLab Backend\n\n`turbo-gitlab` connects Decap CMS to [Decap Turbo](https://decapcms.org/docs/turbo-overview/) for a repository on GitLab.com. It extends `GitLabBackend` from `decap-cms-backend-gitlab` the same way [`decap-cms-backend-turbo-github`](../decap-cms-backend-turbo-github) extends the GitHub backend, and shares its design, its config keys and the code in [`decap-cms-lib-turbo`](../decap-cms-lib-turbo). Read that README for login, token refresh, the content cache, permissions, telemetry and the editor bridge. This one lists only the differences.\n\n```yaml\nbackend:\n  name: turbo-gitlab\n  turbo_site_id: your-site-id\n```\n\n## Differences from `turbo-github`\n\n- **Git access.** The `gl` proxy calls GitLab with the organization's GitLab connection: an OAuth token of the GitLab user who authorized it in Turbo. That token reaches every project the user can reach, so the organization's Turbo-side repo scope is the only per-project limit. See [connect your Git provider](https://decapcms.org/docs/turbo-getting-started/#connect-your-git-provider).\n- **Editorial workflow** uses merge requests, as in `decap-cms-backend-gitlab`.\n- **`currentUser` is synthesized.** There is no GitLab identity for the editor, so the user object is built locally from the Turbo session: `name`, `email` and avatar are the editor's, `username` is the repo owner, `id` is `0`. The backend never calls GitLab's user endpoint.\n- **Saves** go through GitLab's commits API, which already commits in one call, so there is no `_content/commit`. The cache picks the change up on the next `_content/sync`.\n- **Commit attribution.** The editor is the commit author (`author_name`, `author_email`); the committer is the GitLab user behind the connection.\n- **No deploy status.** `deploy_status` has no effect.\n- **Escape hatch `api_root`** points at the `gl` function, `<base_url>/functions/v1/gl`.\n- **`use_graphql: true`** throws, for the same reason as on GitHub.\n\n<!-- File: packages/decap-cms-core/README.md (Tokens: ~149 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-core/README.md)!\n\n<!-- File: packages/decap-cms-editor-component-image/README.md (Tokens: ~151 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-editor-component-image/README.md)!\n\n<!-- File: packages/decap-cms-lib-auth/README.md (Tokens: ~14 | Category: plugin-manifest) -->\n# Lib Auth\n\nShared components to handle OAuth and implicit authentication flows.\n\n<!-- File: packages/decap-cms-lib-util/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Lib Util\n\nShared utilities to handle various `decap-cms-backend-*` backends operations.\n\n## Code structure\n\nThis structure should be the same for backends.\n\nAt first, look at `Implementation`. This is File Management System API and has factory method for `AuthComponent`.\n\n### File Management System API\n\nAn abstraction layer between the CMS and Git-repository manager API.\n\nUsed as backend in [cms-core](https://github.com/decaporg/decap-cms/tree/main/packages/decap-cms-core/README.md).\n\n### Low-level abstractions for Git-repository manager API:\n\n- `API` - used for Entry files\n- `git-lfs` - used for Media files\n- and more helpful utilities\n\n<!-- File: packages/decap-cms-lib-widgets/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-lib-widgets/README.md)!\n\n<!-- File: packages/decap-cms-locales/README.md (Tokens: ~126 | Category: plugin-manifest) -->\n# Decap CMS Locales\n\n## Default translations for Decap CMS\n\nThe English translation is loaded by default.\n\nTo register another locale you can use the following code:\n\n```js\nimport CMS from 'decap-cms-app';\nimport { de } from 'decap-cms-locales';\n\nCMS.registerLocale('de', de);\n```\n\n> When importing `decap-cms` all locales are registered by default.\n\nMake sure the specific locale exists in the package - unless we will happily accept a pull request for it.\n\nThe configured locale will be merge into the English one so don’t worry about missing some phrases.\n\n<!-- File: packages/decap-cms-media-library-cloudinary/README.md (Tokens: ~152 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-cloudinary/README.md)!\n\n<!-- File: packages/decap-cms-media-library-s3/README.md (Tokens: ~1383 | Category: plugin-manifest) -->\n# Decap CMS Media Library — S3-compatible storage\n\n> **Beta.** The configuration and behaviour of this package may change in a minor release. It will be replaced by a media library rebuilt inside Decap CMS core, and this package retired; the migration will be documented when that ships. Your files live in your own bucket and inserted URLs point at your public domain, so neither depends on this package.\n\nA media library for sites on [Decap Turbo](https://decapcms.org/docs/turbo-overview/) that stores uploads in an S3-compatible bucket: AWS S3, Cloudflare R2, Bunny Storage, Backblaze B2, DigitalOcean Spaces, Wasabi, MinIO and others. Requests go through Turbo's `integrations` edge function, which signs them with the site's credentials, so storage credentials never reach the browser.\n\nRequires the `turbo-github` or `turbo-gitlab` backend and a Turbo plan with the media library (Pro and above). Product documentation: [Media library](https://decapcms.org/docs/turbo-media-proxy/).\n\n## Setup\n\n### 1. Site variables\n\nOn the site's **Variables** tab in Turbo, not in `config.yml`:\n\n| Key | Secret | Value |\n|---|---|---|\n| `s3_endpoint` | No | S3 API endpoint, e.g. `https://<account-id>.r2.cloudflarestorage.com` or `https://s3.<region>.amazonaws.com` |\n| `s3_region` | No | Region to sign for; `auto` for R2 |\n| `s3_bucket` | No | Bucket name |\n| `s3_access_key_id` | No | Access key ID |\n| `s3_secret_access_key` | Yes | Secret access key |\n| `s3_force_path_style` | No | `true` for most providers, including R2, Bunny and MinIO; `false` usually works on AWS |\n\n### 2. A public URL for the bucket\n\nBuckets are private by default, and this library does not generate presigned URLs for viewing. Serve the bucket publicly through public read access, a custom domain (for example an R2 custom domain) or a CDN, and use that address as `public_url_prefix`.\n\n### 3. `config.yml`\n\n```yaml\nbackend:\n  name: turbo-github # or turbo-gitlab\n  turbo_site_id: your-site-id\n\nmedia_library:\n  name: s3\n  config:\n    public_url_prefix: https://media.example.com\n```\n\n| Option | Required | |\n|---|---|---|\n| `public_url_prefix` | Yes | Prefix for inserted asset URLs. Missing it throws on load. |\n| `root_path` | No | Folder the browser opens in. Default `/`. |\n| `max_file_size` | No | Upload limit in bytes. Default 50 MB. |\n| `multiple` | No | Allow inserting several files at once. Default `false`. |\n\n### 4. Registration\n\nThe `decap-cms` bundle (the script-tag build) registers this library already. With `decap-cms-app`, register it yourself:\n\n```js\nimport CMS from 'decap-cms-app';\nimport S3MediaLibrary from 'decap-cms-media-library-s3';\n\nCMS.registerMediaLibrary(S3MediaLibrary);\n```\n\n## How it works\n\nCore passes the library the backend config, the current access token and the site ID through `getMediaLibraryContext`. The library calls `<base_url>/functions/v1/integrations/s3/<key>` with `Authorization: Bearer <access token>` and `x-site-id: <site id>`; `base_url` comes from the Turbo backend's preloaded config. The function checks the user's site membership and plan, reads the site's `s3_*` variables, signs the request with SigV4 and forwards it. The destination host comes only from the site's own `s3_endpoint`, never from the request.\n\n- Listing uses `ListObjectsV2` with `delimiter=/` and follows continuation tokens until the listing is complete. Folders are key prefixes: deleting the last object in one makes it disappear, as in S3 itself.\n- Uploads are buffered in the edge function before forwarding, because S3 and R2 require a real `Content-Length` and reject chunked bodies with 411. `max_file_size` bounds the buffer.\n- An upload does not insert or close the dialog. New files are pre-selected, and **Insert** confirms them.\n\nSource: `src/index.js` (entry, context resolution), `src/api/client.ts` (HTTP and XML parsing), `src/api/fileManager.ts` (paths to keys, public URLs), `src/components/S3Widget.tsx` (the dialog).\n\n## Limitations\n\n- No search, image transformations, folder creation, move or rename.\n- Every upload passes through the edge function.\n- Requires a public URL for the bucket (see above).\n\n## Troubleshooting\n\n| Message | Cause |\n|---|---|\n| `public_url_prefix is required in media_library config` | Add it under `media_library.config`. |\n| `Session token not found. Please log in again.` | Log in again. |\n| `Active site id is missing in backend configuration.` | `turbo_site_id` is not set. |\n| `Backend base URL is missing. Configure backend.base_url.` | The backend is not a Turbo backend, or its config did not load. |\n| 403 with `media_proxy_requires_paid_plan` | The organization's plan does not include the media library. |\n| 403 otherwise | The user is not a member of the site. |\n| 500 `Missing S3 storage configuration for site` | One of `s3_endpoint`, `s3_bucket`, `s3_access_key_id`, `s3_secret_access_key` is not set. |\n| Inserted images do not load | The bucket is not publicly readable at `public_url_prefix`. |\n\n## Development\n\n```sh\npnpm exec jest packages/decap-cms-media-library-s3\n```\n\nWhen changing the client or the `s3` adapter, test browse (including a listing over 1,000 keys), upload at `max_file_size`, single and multiple insert, delete, and the error paths above against at least Cloudflare R2 (`s3_region: auto`) and a path-style provider such as MinIO. When reporting an issue, include the browser, the redacted media config, and the response from `/functions/v1/integrations/s3/*`.\n\n## License\n\nMIT\n\n<!-- File: packages/decap-cms-media-library-uploadcare/README.md (Tokens: ~152 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-media-library-uploadcare/README.md)!\n\n<!-- File: packages/decap-cms-ui-auth/README.md (Tokens: ~254 | Category: plugin-manifest) -->\n# decap-cms-ui-auth\n\nAuthentication UI pages used by the decap-cms-backend-* packages.\n\n## Common Behavior\n\n* An authenticator must return the following fields:\n  * email\n  * token?\n  * expires?\n\n## Components\n\n* **NetlifyAuthenticationPage**\n    * Username and password fields that are passed to Netlify Identity.\n    * Requires a static `authClient` value set before login will work, expected to be set by the backend implementation.\n  * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type) from Netlify\n* **PKCEAuthenticationPage**\n    * OAuth2 PKCE flow with optional OIDC auto-configuration.\n    * Returns object that satisfies the GitGatewayUser type (and inherited Credentials type), with additional data:\n        * token (part of Credentials definition): the access token\n        * idToken: if available\n        * claims: if available (decoded access token)\n        * idClaims: if available (decoded ID token)\n        * email: mapped email value from the token claims, if available\n        * user_metadata.full_name: mapped value from the token claims, if available\n        * user_metadata.avatar_url: mapped value from the token claims, if available\n\n<!-- File: packages/decap-cms-ui-default/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-ui-default/README.md)!\n\n<!-- File: packages/decap-cms-widget-boolean/README.md (Tokens: ~151 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-boolean/README.md)!\n\n<!-- File: packages/decap-cms-widget-code/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-code/README.md)!\n\n<!-- File: packages/decap-cms-widget-colorstring/README.md (Tokens: ~151 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-colorstring/README.md)!\n\n<!-- File: packages/decap-cms-widget-datetime/README.md (Tokens: ~151 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-datetime/README.md)!\n\n<!-- File: packages/decap-cms-widget-file/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-file/README.md)!\n\n<!-- File: packages/decap-cms-widget-image/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-image/README.md)!\n\n<!-- File: packages/decap-cms-widget-list/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-list/README.md)!\n\n<!-- File: packages/decap-cms-widget-map/README.md (Tokens: ~150 | Category: plugin-manifest) -->\n# Docs coming soon!\n\nDecap CMS was converted from a single npm package to a \"monorepo\" of over 20 packages.\nWe haven't created a README for this package yet, but you can:\n\n1. Check out the [main readme](https://github.com/decaporg/decap-cms/#readme) or the [documentation\n   site](https://www.decapcms.org) for more info.\n2. Reach out to the [community chat](https://decapcms.org/chat/) if you need help.\n3. Help out and [write the readme yourself](https://github.com/decaporg/decap-cms/edit/main/packages/decap-cms-widget-map/README.md)!\n\n<!-- ... +13 more modular skills available via /api/skills/decaporg/decap-cms?path={path} -->\n</yakaai_skills>"}