servd
Servd (servd.host) — Craft-specialised managed hosting for Craft CMS. Covers git push-to-deploy with the optional servd.yaml build config, local → staging → production environments with uni-directional Project Config sync, the servd/craft-asset-storage plugin (S3-backed Flysystem volumes on the svdcdn.com CDN, off-server image transforms, Imager-X/ImageOptimize integrations), Servd's static caching (full vs tag-based purge, {% dynamicInclude %}, CSRF injection, cache-busting) and running Blitz alongside it in reverse-proxy mode, MariaDB/MySQL databases over an SSH tunnel, automatic + manual backups, the Dedicated Queue Runner, environment variables and secrets, the ephemeral load-balanced filesystem (Redis + remote volumes for runtime files), plugin/feature constraints, and Servd-vs-Craft-Cloud differences. Triggers on: servd.yaml, servd/craft-asset-storage, servd-asset-storage plugin handle, SERVD_PROJECT_SLUG, SERVD_SECURITY_KEY, SERVD_BUNDLE_HASH, files.svdcdn.com, Servd static caching, {% dynamicInclude %} (Servd), servd-asset-storage/clone, servd-asset-storage/local/pull-database, push-assets, clear-caches/servd-static-cache, clear-caches/servd-edge-caches, Dedicated Queue Runner, Servd Asset Platform, deploy to Servd, host Craft on Servd, Servd vs Craft Cloud. Do NOT trigger for Craft Cloud (use the craft-cloud skill), generic Craft deployment on Forge/bare metal (craftcms/deployment.md), or general DDEV local dev unrelated to Servd parity (ddev).
git clone --depth 1 https://github.com/michtio/craftcms-claude-skills /tmp/servd && cp -r /tmp/servd/skills/servd ~/.claude/skills/servdSKILL.md
# Servd — Managed Hosting for Craft CMS
Reference for Servd (servd.host), a Craft-specialised managed hosting platform. Covers git push-to-deploy and the `servd.yaml` build config, the local → staging → production workflow, the `servd/craft-asset-storage` plugin, Servd's static caching (and running Blitz alongside it), databases over SSH, backups, the queue runner, the ephemeral filesystem, and how Servd differs from Craft Cloud.
This skill is scoped to **Servd specifically** — what's different on Servd vs running Craft yourself on Forge or bare metal, and vs Pixel & Tonic's Craft Cloud. For generic Craft deployment, see the `craftcms` skill's `deployment.md`. For Craft Cloud, see the `craft-cloud` skill.
## Companion Skills — Load When Needed
- **`craftcms`** — When the Servd topic intersects plugin or module PHP (ephemeral-filesystem guards, queue-job design, asset filesystem code).
- **`craft-site`** — When Servd intersects front-end templating (`{% dynamicInclude %}` islands in cached pages, transform usage, CSRF in cached forms).
- **`ddev`** — For local development; Servd has no first-party local environment, so DDEV is the standard local stack.
- **`craft-php-guidelines`** — When editing plugin PHP to add ephemeral-filesystem checks.
## Documentation
Authoritative sources used to write this skill (Servd's own docs):
- Docs landing: https://servd.host/docs
- The Servd workflow: https://servd.host/docs/the-servd-workflow
- Node build step (servd.yaml): https://servd.host/docs/node-build-step
- Asset volumes & filesystems: https://servd.host/docs/servd-asset-volumes-and-filesystems
- Installing the plugin: https://servd.host/docs/installing-the-servd-plugin
- Static caching: https://servd.host/docs/static-caching
- Caching with Blitz: https://servd.host/docs/caching-with-blitz
- Handling runtime-created files: https://servd.host/docs/handling-runtime-created-files
- Dedicated queue runner: https://servd.host/docs/dedicated-queue-runner
- Backup & restore: https://servd.host/docs/backup-restore
- Plugin console commands: https://servd.host/docs/servd-plugin-console-commands
- Plugin source: https://github.com/servdhost/craft-asset-storage
Per-claim URLs appear in each reference file. Last verified against the docs on 2026-05-30. Some operational details (cron, exact plan tiers) are not in the public docs and are flagged as **Verify** where they appear.
## What's Different on Servd vs Self-Hosted
Each row is a place self-hosted habits will mislead you.
| Concern | Self-hosted | Servd |
|---|---|---|
| Config file | `.env`, `config/*.php`, web-server config | **`servd.yaml`** at repo root for the build step (optional; overrides dashboard); platform settings + runtime env vars in the Servd dashboard |
| Deploy | Whatever you've wired | **Git push-to-deploy** (GitHub/GitLab/Bitbucket or any SSH host) → Composer install + optional Node build |
| Environments | Yours to define | Fixed **local → staging → production**, **uni-directional**; `allowAdminChanges` off everywhere except local |
| Filesystem | Local disk | **Ephemeral + load-balanced** — disk writes don't persist; use Redis (Craft data cache) or a remote asset volume |
| Assets | Local or your own S3 config | **`servd/craft-asset-storage`** — S3-backed Flysystem on the `*.files.svdcdn.com` CDN, auto-separated per environment |
| Image transforms | Native / Imager-X / ImageOptimize on-server | **Off-server** transforms via the Servd Asset Platform; Imager-X uses `transformer: 'servd'` |
| Database | Whatever you installed | **MariaDB or MySQL 8**, reached over an **SSH tunnel** |
| Page caching | Blitz or similar | **Servd static caching** built in; Blitz runs **alongside** it in reverse-proxy mode (not instead of) |
| Queue | You run a worker | Default AJAX-triggered; opt into the **Dedicated Queue Runner** (paid plans) for isolated immediate processing |
| Cron | `crontab` | **Not documented** as a user-configurable feature — design around the queue (**Verify** for a given plan) |
| Redis | You install it | **Provided** — Craft's data cache is auto-mapped to a stateful Redis |
| SSH | `ssh user@server` | **Yes** — SSH sessions (used e.g. for the DB tunnel) |
| Env vars | `.env` | Dashboard-managed per environment (not a committed `.env`) |
### Servd vs Craft Cloud (quick contrast)
Both are managed Craft hosting with git deploy, ephemeral filesystems, S3 assets, off-server transforms, and dashboard env vars. Key differences for a developer:
| | Servd | Craft Cloud |
|---|---|---|
| Repo config | `servd.yaml` (build) + dashboard | `craft-cloud.yaml` |
| Asset layer | `servd/craft-asset-storage` plugin | `craftcms/cloud` bundled filesystem |
| Database | MariaDB **or** MySQL 8 | MySQL 8 / Postgres 15 (**no MariaDB**) |
| SSH | Yes | No |
| First-party CLI | None (plugin console commands + dashboard) | `craftcms/cloud` + `php craft cloud/up` |
| Caching | Servd static cache; **Blitz runs alongside** | Edge static caching; **Blitz redundant** |
| Transforms | Servd Asset Platform (`svdcdn.com`) | Cloudflare Images at the edge |
| Queue | Dedicated Queue Runner (paid) | Auto-processed |
## Common Pitfalls (Cross-Cutting)
- **Writing to disk and expecting persistence.** The filesystem is ephemeral and load-balanced — writes vanish and aren't shared across instances. Use Craft's data cache (auto-mapped to Redis) or a remote asset volume. See `references/limitations.md`.
- **Making schema/Project Config changes anywhere but local.** Servd sets `allowAdminChanges: false` on staging and production and syncs uni-directionally (local → staging → production). Make changes in local, commit, deploy. See `references/deploy-and-environments.md`.
- **Treating Blitz as a replacement for Servd's caching.** On Servd you run Blitz *alongside* the static cache in **reverse-proxy mode** (Yii Cache Storage + HTTP Generator + Servd Static Cache Purger) — Blitz's own server-rewrite mode is broken by Servd's load balancing. See `references/caDeep code review on Opus 4.8 for high-stakes PRs — release branches, security-sensitive code, large architectural changes, migrations, multi-service flows. Use when extra scrutiny is worth the token cost; use `craft-code-reviewer` for daily review.
Reviews implemented code for quality, security, and Craft CMS conventions
Tracks down bugs in Craft CMS plugins with systematic investigation
Builds new features in Craft CMS plugins following project architecture
Breaks down large tasks into manageable implementation steps for Craft CMS plugin development
Builds Craft CMS site templates, components, and content architecture
Craft 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, Cloud-managed S3 filesystem, MySQL 8 / Postgres 15 databases (no MariaDB, no tablePrefix), Console-based command runner and scheduled cron (once-per-hour minimum), auto-handled queue jobs, custom domains and SSL, preview environments per branch, Cloud limitations (ephemeral filesystem, no SSH, no .htaccess, no built-in mail), plugin development requirements for Cloud compatibility, and self-hosted → Cloud migration. Triggers on: craft-cloud.yaml, craftcms/cloud package, cloud.esi(), php craft cloud/up, php craft cloud/setup, App::isEphemeral(), CRAFT_EPHEMERAL, edge.craft.cloud, preview.craft.cloud, CRAFT_CLOUD_PROJECT_ID, CRAFT_CLOUD_ENVIRONMENT_ID, CRAFT_CLOUD_CDN_BASE_URL, Build → Migrate → Release, Cloud filesystem, Cloud-compatible plugin, Cloudflare Images at edge, AssetsFs, static-caching rules, ESI islands, deploy to Craft Cloud, migrate to Craft Cloud, self-hosted to Cloud, Craft Cloud quotas, Craft Cloud regions. Do NOT trigger for Servd (use the servd skill) or generic Craft deployment on Forge/bare metal (craftcms/deployment.md). Do NOT trigger for general DDEV local dev unrelated to Cloud parity.
Craft CMS 5 content modeling — sections, entry types, fields, Matrix, relations, project config, and content architecture strategy. Covers everything editors and developers need to structure content in Craft: choosing section types, designing entry types and field layouts, selecting field types for specific needs, configuring Matrix and nested entries, setting up relations and eager loading, and planning multi-site propagation. Triggers on: section types (single, channel, structure), entry types, field types, field layout design, field type selection, Matrix configuration, nested entries, relatedTo, eager loading, .with(), .eagerly(), categories, tags, globals, global sets, preloadSingles, propagation, multi-site content, URI format, project config, YAML, content architecture, content strategy, taxonomy, asset volumes, filesystems, image transforms, user groups, content permissions, entries-as-taxonomy, entrify, entrification, CKEditor vs Matrix, CMS editions, site propagation, multi-language, language groups, localization, translation method, field translation, content migration, reserved handles, field instances. Always use when planning content architecture, creating sections/fields, configuring Matrix, setting up relations, choosing field types, designing field layouts, making content modeling decisions, or planning multi-site content propagation. Do NOT trigger for PHP plugin/module development, custom field type code, front-end Twig templates, or buildchain configuration.