$npx -y skills add michtio/craftcms-claude-skills --skill craft-cloudCraft Cloud — Pixel & Tonic's serverless hosting platform for Craft CMS. Covers craft-cloud.yaml configuration, the Build → Migrate → Release deploy pipeline, the craftcms/cloud extension package, edge image transforms via Cloudflare, edge static caching with cache.rules + ESI, C
| 1 | # Craft Cloud — Serverless Hosting for Craft CMS |
| 2 | |
| 3 | Reference for Craft Cloud, Pixel & Tonic's serverless hosting platform for Craft CMS. Covers the `craft-cloud.yaml` config file, the Build → Migrate → Release deploy pipeline, the `craftcms/cloud` extension, edge image transforms and static caching, the Cloud filesystem, plugin Cloud-compatibility requirements, and self-hosted → Cloud migration. |
| 4 | |
| 5 | This skill is scoped to **Craft Cloud specifically** — what's different on Cloud vs running Craft yourself on Forge, Servd, or bare metal. For **Servd**, see the `servd` skill. For generic Craft deployment (build artifacts, project config sync, atomic deploys on traditional hosts), see the `craftcms` skill's `deployment.md`. |
| 6 | |
| 7 | ## Companion Skills — Load When Needed |
| 8 | |
| 9 | - **`craftcms`** — When the Cloud topic intersects plugin or module PHP work (e.g. `App::isEphemeral()` guards in services, asset-bundle constraints, queue job design for the 15-minute cap). |
| 10 | - **`craft-site`** — When Cloud intersects front-end templating (ESI islands inside cached pages, edge image transform usage, `{% expires %}` opt-outs for static caching). |
| 11 | - **`ddev`** — For the local-dev parity recipe (matching PHP/DB versions, simulating the ephemeral filesystem locally). |
| 12 | - **`craft-php-guidelines`** — When editing plugin PHP to add Cloud-compatibility checks. |
| 13 | |
| 14 | ## Documentation |
| 15 | |
| 16 | Authoritative sources used to write this skill: |
| 17 | |
| 18 | - Craft Cloud docs landing: https://craftcms.com/docs/cloud/ |
| 19 | - Configuration reference: https://craftcms.com/docs/cloud/config |
| 20 | - Deployment pipeline: https://craftcms.com/docs/cloud/deployment |
| 21 | - Builds: https://craftcms.com/docs/cloud/builds |
| 22 | - Compatibility & limitations: https://craftcms.com/docs/cloud/compatibility |
| 23 | - Assets & transforms: https://craftcms.com/docs/cloud/assets |
| 24 | - Static caching: https://craftcms.com/docs/cloud/static-caching |
| 25 | - Plugin development: https://craftcms.com/docs/cloud/plugin-development |
| 26 | - Cloud extension source: https://github.com/craftcms/cloud-extension-yii2 |
| 27 | |
| 28 | Per-claim URLs appear in each reference file. Last verified against the docs and `craftcms/cloud-extension-yii2@main` on 2026-05-28. |
| 29 | |
| 30 | ## What's Different on Cloud vs Self-Hosted |
| 31 | |
| 32 | A quick orientation table. Each row is a place self-hosted habits will mislead you. |
| 33 | |
| 34 | | Concern | Self-hosted | Cloud | |
| 35 | |---|---|---| |
| 36 | | Config file | `.env`, `config/general.php`, `config/db.php`, your web-server config | **`craft-cloud.yaml`** at repo root for platform settings; runtime env vars set in Craft Console UI (not `.env`) | |
| 37 | | Deploy | Whatever you've wired (Forge, GitHub Actions, rsync) | Git push → automatic **Build → Migrate → Release** (15-min build cap) | |
| 38 | | Filesystem | Local disk or your own S3/R2 config | **Ephemeral** Lambda filesystem; use `App::isEphemeral()` to gate writes; user assets must use the Cloud-bundled S3-backed filesystem type | |
| 39 | | Database | Whatever you've installed | **MySQL 8.0 or Postgres 15 only** — no MariaDB, no `tablePrefix`, no `db.php` touching, no `CRAFT_DB_*` overrides | |
| 40 | | App / component config | Free to override components in `config/app.php` | The extension **owns several components** (`response`, `session`, `cache`, `queue`, `assetManager`) + the DB connection — overriding them in `app.*.php` breaks the wiring, and it's **not reproducible locally** (the extension only runs on Cloud) | |
| 41 | | Queue jobs | You run a worker (systemd, supervisor, cron) | **Auto-processed** by Cloud — don't schedule the runner; cap each job at 15 minutes | |
| 42 | | Cron | `crontab -e`, any frequency | Craft Console UI only; **once per |