{"id":"78b7e1a3-24eb-4e67-8cdf-932547b46623","shortId":"8T5tc8","kind":"skill","title":"ddev","tagline":"DDEV local development environment for Craft CMS projects. ALWAYS load this skill when running any ddev command, configuring .ddev/config.yaml, or troubleshooting local container issues. Covers: config.yaml settings (project type, PHP/Node versions, database, docroot), shorthand ","description":"# DDEV for Craft CMS Development\n\n## Companion Skills — Always Load Together\n\nWhen this skill triggers, also load:\n\n- **`craftcms`** — Plugin/module development. Required when DDEV commands involve Craft CLI (`ddev craft make`, `ddev craft migrate`, `ddev craft project-config`).\n- **`craft-php-guidelines`** — PHP coding standards. Required when DDEV commands involve code quality tooling (`ddev composer check-cs`, `ddev composer phpstan`, `ddev craft pest/test`).\n\n## Documentation\n\n- DDEV docs: https://docs.ddev.com/en/stable/\n- Craft CMS quickstart: https://docs.ddev.com/en/stable/users/quickstart/#craft-cms\n- Configuration reference: https://docs.ddev.com/en/stable/users/configuration/config/\n- Custom commands: https://docs.ddev.com/en/stable/users/extend/custom-commands/\n- Additional services: https://docs.ddev.com/en/stable/users/extend/additional-services/\n- Vite integration: https://docs.ddev.com/en/stable/users/usage/developer-tools/#nodejs\n\nWhen unsure about a DDEV feature, `WebFetch` the relevant docs page.\n\n## Common Pitfalls\n\n- Using `ddev exec composer install` instead of `ddev composer install` — DDEV shorthand commands handle path resolution and environment setup. Always use the shorthand.\n- Forgetting `ddev craft up` does both `migrate/all` and `project-config/apply` — no need to run them separately after pulls or deploys.\n- Exposing the Vite dev server with `ports` instead of `web_extra_exposed_ports` — `ports` causes conflicts when running multiple DDEV projects. `web_extra_exposed_ports` routes through Traefik and works with HTTPS.\n- Running `ddev composer global require` — global packages install inside the container and vanish on restart. Install project-level dependencies only.\n- Setting `nodejs_version` but running `npm install` on the host — Node must run inside the container via `ddev npm` to match the configured version.\n- Editing `.ddev/config.yaml` while containers are running without restarting — changes to config require `ddev restart` to take effect.\n- Using `ddev import-db` without `--target-db=db` on multi-database setups — the default target is `db`, but if you've configured additional databases, be explicit.\n- Adding `#ddev-generated` to custom commands you've customized — DDEV overwrites files with this comment during updates. Only use it for add-on-managed commands. Custom commands you maintain should omit it.\n- Running `composer install` on the host then `ddev composer check-cs`/`ddev composer phpstan` — if the host PHP version differs from DDEV's (e.g., host PHP 8.4, DDEV PHP 8.3), `vendor/composer/platform_check.php` fails. Always run `ddev composer install` so `vendor/` matches the container's PHP version.\n\n## Craft CLI First, Raw SQL Last\n\nAlways prefer Craft CLI commands over raw database queries:\n\n```bash\nddev craft users/list-admins         # not: ddev mysql -e \"SELECT * FROM users WHERE admin=1\"\nddev craft project-config/get system # not: reading project.yaml manually\nddev craft resave/entries            # not: UPDATE queries on content tables\nddev craft elements/delete           # not: DELETE FROM elements\n```\n\nOnly fall back to `ddev mysql` when no CLI equivalent exists (e.g., checking table schemas, debugging specific rows, `TRUNCATE cache` for stuck mutex locks). Craft CLI commands handle project config, search index updates, and event firing that raw SQL skips.\n\n## Shorthand Commands\n\nAlways use DDEV shorthand over `ddev exec`:\n\n```bash\nddev composer install          # not ddev exec composer install\nddev craft up                  # not ddev exec php craft up\nddev npm install               # not ddev exec npm install\nddev craft make service        # scaffolding\n```\n\n## Craft CMS Project Type\n\n```yaml\n# .ddev/config.yaml\nname: my-craft-site\ntype: craftcms\ndocroot: web\nphp_version: \"8.3\"\ndatabase:\n  type: mysql\n  version: \"8.0\"\nnodejs_version: \"20\"\n```\n\nDDEV auto-injects: `CRAFT_DB_SERVER`, `CRAFT_DB_USER`, `CRAFT_DB_PASSWORD`, `CRAFT_DB_DATABASE`, `PRIMARY_SITE_URL`.\n\n## Common Commands\n\n```bash\nddev start                     # Start the project\nddev stop                      # Stop the project\nddev restart                   # Restart containers\nddev ssh                       # SSH into web container\nddev describe                  # Show project info and URLs\nddev logs                      # View container logs\nddev import-db --file=dump.sql # Import database\nddev export-db --file=dump.sql # Export database\nddev xdebug on                 # Enable Xdebug\nddev craft db/backup           # Craft database backup\n```\n\n## Post-Install Auto-Run\n\nComposer scripts auto-run `craft up` after install/update:\n\n```json\n{\n    \"scripts\": {\n        \"post-craft-update\": [\n            \"@php craft install/check && php craft up --interactive=0 || exit 0\"\n        ],\n        \"post-update-cmd\": \"@post-craft-update\",\n        \"post-install-cmd\": \"@post-craft-update\"\n    }\n}\n```\n\nNo need to manually run `ddev craft migrate/all` or `ddev craft project-config/apply` — `ddev craft up` does both, and it auto-runs after `ddev composer install/update`.\n\n## Add-ons\n\n```bash\nddev add-on get ddev/ddev-redis       # Install Redis\nddev add-on get ddev/ddev-mailpit     # Install Mailpit\nddev add-on list                       # List installed add-ons\nddev add-on remove ddev/ddev-redis    # Remove add-on\n```\n\n## Custom Commands\n\nPlace scripts in `.ddev/commands/web/` (container) or `.ddev/commands/host/` (host):\n\n```bash\n#!/usr/bin/env bash\n## Description: Run ECS code style check\n## Usage: check-cs\n## Example: ddev check-cs\n\ncd /var/www/html && composer check-cs\n```\n\nNote: omit `#ddev-generated` on custom commands you maintain — DDEV overwrites files with that comment during updates. Only add-on-managed commands should include it.\n\n## Composer Path Repos and Volume Mounts\n\nWhen developing plugins locally, Composer path repos symlink the plugin into `vendor/`. For this to work inside DDEV's Docker container, the host path must be volume-mounted so the symlink resolves.\n\n### Setup\n\n1. **composer.json** — use the local host path:\n\n```json\n{\n    \"repositories\": [\n        {\n            \"type\": \"path\",\n            \"url\": \"/Users/Shared/dev/craft-plugins/v5/*\"\n        }\n    ]\n}\n```\n\n2. **docker-compose override** — mount the same path into the container. Create `.ddev/docker-compose.mounts.yaml`:\n\n```yaml\nservices:\n  web:\n    volumes:\n      - /Users/Shared/dev/craft-plugins:/Users/Shared/dev/craft-plugins\n```\n\nThe mount path inside the container must match the host path exactly — Composer creates absolute symlinks that must resolve in both contexts. Replace `/Users/Shared/dev/craft-plugins` with your actual plugin directory path.\n\n3. **Require the plugin**: `ddev composer require vendor/plugin-handle:@dev`\n\n### Common mistakes\n\n- Using a Docker-internal path in `composer.json` `url` — the path must be the host filesystem path, not `/var/www/...`\n- Forgetting the volume mount — `ddev composer install` succeeds but the symlink points nowhere inside the container\n- Setting `\"platform\": {\"php\": \"8.3\"}` in `composer.json` `config` — don't. DDEV handles the PHP version via `.ddev/config.yaml`. Platform overrides cause dependency resolution mismatches between host and container, and prevent DDEV from managing version upgrades cleanly.\n\n## Browser Debugging with Chrome DevTools MCP\n\nThe Chrome DevTools MCP server gives Claude Code direct browser access — inspect pages, read console logs, check network requests, capture screenshots, and interact with the DOM.\n\n### Installation\n\n```bash\nclaude mcp add chrome-devtools -- npx @anthropic-ai/chrome-devtools-mcp@latest\n```\n\nQuit and reopen Claude Code to load the new MCP server. Requires Chrome or Chromium running — the MCP server handles the DevTools Protocol connection automatically.\n\n### What it enables\n\n| Capability | Use Case |\n|-----------|----------|\n| **Page inspection** | Check rendered HTML, verify template output, inspect meta tags |\n| **Console logs** | Catch Twig errors, JS exceptions, Garnish initialization failures |\n| **Network requests** | Debug 404 assets, failed AJAX calls, Sprig/htmx swaps |\n| **DOM queries** | Verify form markup, check field rendering, validate ARIA attributes |\n| **Screenshots** | Visual verification of CP templates, responsive testing |\n| **Navigation & login** | Authenticate into the CP, navigate to plugin settings/edit pages |\n\n### When to use\n\n- **Front-end template debugging** — 404s, missing assets, broken layouts, SEOmatic meta tag verification\n- **CP template verification** — plugin settings pages render correctly, editable tables work, slideout editors load\n- **Garnish/JS debugging** — modals, drag-sort, disclosure menus initialize without console errors\n- **Sprig/htmx debugging** — watch network requests for htmx swaps, verify response HTML fragments\n- **Auth flow testing** — walk through login, registration, password reset end-to-end\n- **Read-only mode verification** — confirm settings pages display correctly with `allowAdminChanges` off\n- **Visual regression** — screenshot before/after template changes\n\n### CP authentication pattern\n\nDDEV sites are accessible at `https://{project}.ddev.site`. To inspect CP pages:\n\n1. Navigate to `https://{project}.ddev.site/{cpTrigger}`\n2. Log in with admin credentials\n3. Navigate to the plugin/settings page to inspect\n4. Check console for JS errors, inspect DOM for correct markup\n\n### Project setup\n\nThe `craft-project-setup` skill offers to install Chrome DevTools MCP during scaffolding. If installed later, run `claude mcp add chrome-devtools -- npx @anthropic-ai/chrome-devtools-mcp@latest` from the project root — this writes to the project's `.claude.json`, keeping it project-level.\n\n## Troubleshooting\n\n```bash\nddev poweroff                  # Stop all DDEV projects\nddev debug router              # Debug router configuration\nddev debug capabilities        # Check Docker capabilities\nddev delete --omit-snapshot    # Remove project without snapshot\n```","tags":["ddev","craftcms","claude","skills","michtio","agent-skills","claude-code","claude-code-plugin","claude-code-skills","claude-skills","content-modeling","craft-cms"],"capabilities":["skill","source-michtio","skill-ddev","topic-agent-skills","topic-claude-code","topic-claude-code-plugin","topic-claude-code-skills","topic-claude-skills","topic-content-modeling","topic-craft-cms","topic-craft-cms-5","topic-craftcms","topic-ddev","topic-php","topic-twig"],"categories":["craftcms-claude-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/michtio/craftcms-claude-skills/ddev","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add michtio/craftcms-claude-skills","source_repo":"https://github.com/michtio/craftcms-claude-skills","install_from":"skills.sh"}},"qualityScore":"0.469","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 39 github stars · SKILL.md body (9,960 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-01T18:56:49.173Z","embedding":null,"createdAt":"2026-04-18T22:19:37.779Z","updatedAt":"2026-05-01T18:56:49.173Z","lastSeenAt":"2026-05-01T18:56:49.173Z","tsv":"'/apply':178,696 '/chrome-devtools-mcp':1039,1295 '/en/stable/':104 '/en/stable/users/configuration/config/':115 '/en/stable/users/extend/additional-services/':125 '/en/stable/users/extend/custom-commands/':120 '/en/stable/users/quickstart/#craft-cms':110 '/en/stable/users/usage/developer-tools/#nodejs':130 '/get':426 '/users/shared/dev/craft-plugins':883,884,908 '/users/shared/dev/craft-plugins/v5':864 '/usr/bin/env':762 '/var/www':944 '/var/www/html':780 '0':663,665 '1':420,852,1234 '2':865,1240 '20':553 '3':915,1246 '4':1254 '404':1096 '404s':1141 '8.0':550 '8.3':376,545,964 '8.4':373 'absolut':899 'access':1011,1226 'actual':911 'ad':312 'add':335,712,717,725,733,739,743,749,805,1031,1287 'add-on':711,716,724,732,738,742,748 'add-on-manag':334,804 'addit':121,308 'admin':419,1244 'ai':1038,1294 'ajax':1099 'allowadminchang':1212 'also':50 'alway':10,43,163,379,398,490 'anthrop':1037,1293 'anthropic-ai':1036,1292 'aria':1112 'asset':1097,1143 'attribut':1113 'auth':1188 'authent':1124,1221 'auto':556,639,644,705 'auto-inject':555 'auto-run':638,643,704 'automat':1065 'back':450 'backup':634 'bash':407,497,575,714,761,763,1028,1314 'before/after':1217 'broken':1144 'browser':995,1010 'cach':467 'call':1100 'capabl':1069,1329,1332 'captur':1020 'case':1071 'catch':1085 'caus':203,979 'cd':779 'chang':274,1219 'check':91,356,460,769,772,777,783,1017,1074,1108,1255,1330 'check-c':90,355,771,776,782 'chrome':998,1002,1033,1053,1276,1289 'chrome-devtool':1032,1288 'chromium':1055 'claud':1007,1029,1044,1285 'claude.json':1307 'clean':994 'cli':61,393,401,456,473 'cmd':669,677 'cms':8,39,106,529 'code':78,85,767,1008,1045 'command':18,58,83,117,156,318,338,340,402,474,489,574,752,792,808 'comment':327,800 'common':142,573,924 'companion':41 'compos':89,94,147,152,223,347,354,359,382,499,504,641,709,781,812,822,868,897,920,950 'composer.json':853,933,966 'config':72,177,276,425,477,695,967 'config.yaml':27 'configur':19,111,264,307,1326 'confirm':1206 'conflict':204 'connect':1064 'consol':1015,1083,1174,1256 'contain':24,231,257,269,388,589,595,606,757,838,876,890,960,986 'content':439 'context':906 'correct':1157,1210,1263 'cover':26 'cp':1118,1127,1150,1220,1232 'cptrigger':1239 'craft':7,38,60,63,66,69,74,97,105,169,392,400,409,422,433,442,472,507,513,524,528,537,558,561,564,567,630,632,646,654,657,660,672,680,688,692,698,1269 'craft-php-guidelin':73 'craft-project-setup':1268 'craftcm':52,540 'creat':877,898 'credenti':1245 'cs':92,357,773,778,784 'custom':116,317,321,339,751,791 'databas':33,296,309,405,546,569,615,623,633 'db':287,291,292,302,559,562,565,568,611,619 'db/backup':631 'ddev':1,2,17,36,57,62,65,68,82,88,93,96,100,135,145,151,154,168,208,222,259,278,284,314,322,353,358,368,374,381,408,412,421,432,441,452,492,495,498,502,506,510,515,519,523,554,576,581,586,590,596,603,608,616,624,629,687,691,697,708,715,723,731,741,775,788,795,835,919,949,970,989,1223,1315,1319,1321,1327,1333 'ddev-gener':313,787 'ddev.site':1229,1238 'ddev/commands/host':759 'ddev/commands/web':756 'ddev/config.yaml':20,267,533,976 'ddev/ddev-mailpit':728 'ddev/ddev-redis':720,746 'ddev/docker-compose.mounts.yaml':878 'debug':463,996,1095,1140,1165,1177,1322,1324,1328 'default':299 'delet':445,1334 'depend':240,980 'deploy':188 'describ':597 'descript':764 'dev':192,923 'develop':4,40,54,819 'devtool':999,1003,1034,1062,1277,1290 'differ':366 'direct':1009 'directori':913 'disclosur':1170 'display':1209 'doc':101,140 'docker':837,867,929,1331 'docker-compos':866 'docker-intern':928 'docroot':34,541 'docs.ddev.com':103,109,114,119,124,129 'docs.ddev.com/en/stable/':102 'docs.ddev.com/en/stable/users/configuration/config/':113 'docs.ddev.com/en/stable/users/extend/additional-services/':123 'docs.ddev.com/en/stable/users/extend/custom-commands/':118 'docs.ddev.com/en/stable/users/quickstart/#craft-cms':108 'docs.ddev.com/en/stable/users/usage/developer-tools/#nodejs':128 'document':99 'dom':1026,1103,1261 'drag':1168 'drag-sort':1167 'dump.sql':613,621 'e':414 'e.g':370,459 'ec':766 'edit':266,1158 'editor':1162 'effect':282 'element':447 'elements/delete':443 'enabl':627,1068 'end':1138,1198,1200 'end-to-end':1197 'environ':5,161 'equival':457 'error':1087,1175,1259 'event':482 'exact':896 'exampl':774 'except':1089 'exec':146,496,503,511,520 'exist':458 'exit':664 'explicit':311 'export':618,622 'export-db':617 'expos':189,200,212 'extra':199,211 'fail':378,1098 'failur':1092 'fall':449 'featur':136 'field':1109 'file':324,612,620,797 'filesystem':941 'fire':483 'first':394 'flow':1189 'forget':167,945 'form':1106 'fragment':1187 'front':1137 'front-end':1136 'garnish':1090 'garnish/js':1164 'generat':315,789 'get':719,727 'give':1006 'global':224,226 'guidelin':76 'handl':157,475,971,1060 'host':251,351,363,371,760,840,857,894,940,984 'html':1076,1186 'htmx':1182 'https':220 'import':286,610,614 'import-db':285,609 'includ':810 'index':479 'info':600 'initi':1091,1172 'inject':557 'insid':229,255,834,888,958 'inspect':1012,1073,1080,1231,1253,1260 'instal':148,153,228,236,248,348,383,500,505,517,522,637,676,721,729,737,951,1027,1275,1282 'install/check':658 'install/update':649,710 'instead':149,196 'integr':127 'interact':662,1023 'intern':930 'involv':59,84 'issu':25 'js':1088,1258 'json':650,859 'keep':1308 'last':397 'later':1283 'latest':1040,1296 'layout':1145 'level':239,1312 'list':735,736 'load':11,44,51,1047,1163 'local':3,23,821,856 'lock':471 'log':604,607,1016,1084,1241 'login':1123,1193 'mailpit':730 'maintain':342,794 'make':64,525 'manag':337,807,991 'manual':431,685 'markup':1107,1264 'match':262,386,892 'mcp':1000,1004,1030,1050,1058,1278,1286 'menus':1171 'meta':1081,1147 'migrat':67 'migrate/all':173,689 'mismatch':982 'miss':1142 'mistak':925 'modal':1166 'mode':1204 'mount':817,846,870,886,948 'multi':295 'multi-databas':294 'multipl':207 'must':253,842,891,902,937 'mutex':470 'my-craft-sit':535 'mysql':413,453,548 'name':534 'navig':1122,1128,1235,1247 'need':180,683 'network':1018,1093,1179 'new':1049 'node':252 'nodej':243,551 'note':785 'nowher':957 'npm':247,260,516,521 'npx':1035,1291 'offer':1273 'omit':344,786,1336 'omit-snapshot':1335 'on':713,740 'output':1079 'overrid':869,978 'overwrit':323,796 'packag':227 'page':141,1013,1072,1132,1155,1208,1233,1251 'password':566,1195 'path':158,813,823,841,858,862,873,887,895,914,931,936,942 'pattern':1222 'pest/test':98 'php':75,77,364,372,375,390,512,543,656,659,963,973 'php/node':31 'phpstan':95,360 'pitfal':143 'place':753 'platform':962,977 'plugin':820,827,912,918,1130,1153 'plugin/module':53 'plugin/settings':1250 'point':956 'port':195,201,202,213 'post':636,653,667,671,675,679 'post-craft-upd':652,670,678 'post-instal':635 'post-install-cmd':674 'post-update-cmd':666 'poweroff':1316 'prefer':399 'prevent':988 'primari':570 'project':9,29,71,176,209,238,424,476,530,580,585,599,694,1228,1237,1265,1270,1299,1305,1311,1320,1339 'project-config':70,175,423,693 'project-level':237,1310 'project.yaml':430 'protocol':1063 'pull':186 'qualiti':86 'queri':406,437,1104 'quickstart':107 'quit':1041 'raw':395,404,485 'read':429,1014,1202 'read-on':1201 'redi':722 'refer':112 'registr':1194 'regress':1215 'relev':139 'remov':745,747,1338 'render':1075,1110,1156 'reopen':1043 'replac':907 'repo':814,824 'repositori':860 'request':1019,1094,1180 'requir':55,80,225,277,916,921,1052 'resave/entries':434 'reset':1196 'resolut':159,981 'resolv':850,903 'respons':1120,1185 'restart':235,273,279,587,588 'root':1300 'rout':214 'router':1323,1325 'row':465 'run':15,182,206,221,246,254,271,346,380,640,645,686,706,765,1056,1284 'scaffold':527,1280 'schema':462 'screenshot':1021,1114,1216 'script':642,651,754 'search':478 'select':415 'seomat':1146 'separ':184 'server':193,560,1005,1051,1059 'servic':122,526,880 'set':28,242,961,1154,1207 'settings/edit':1131 'setup':162,297,851,1266,1271 'shorthand':35,155,166,488,493 'show':598 'site':538,571,1224 'skill':13,42,48,1272 'skill-ddev' 'skip':487 'slideout':1161 'snapshot':1337,1341 'sort':1169 'source-michtio' 'specif':464 'sprig/htmx':1101,1176 'sql':396,486 'ssh':591,592 'standard':79 'start':577,578 'stop':582,583,1317 'stuck':469 'style':768 'succeed':952 'swap':1102,1183 'symlink':825,849,900,955 'system':427 'tabl':440,461,1159 'tag':1082,1148 'take':281 'target':290,300 'target-db':289 'templat':1078,1119,1139,1151,1218 'test':1121,1190 'togeth':45 'tool':87 'topic-agent-skills' 'topic-claude-code' 'topic-claude-code-plugin' 'topic-claude-code-skills' 'topic-claude-skills' 'topic-content-modeling' 'topic-craft-cms' 'topic-craft-cms-5' 'topic-craftcms' 'topic-ddev' 'topic-php' 'topic-twig' 'traefik':216 'trigger':49 'troubleshoot':22,1313 'truncat':466 'twig':1086 'type':30,531,539,547,861 'unsur':132 'updat':329,436,480,655,668,673,681,802 'upgrad':993 'url':572,602,863,934 'usag':770 'use':144,164,283,331,491,854,926,1070,1135 'user':417,563 'users/list-admins':410 'valid':1111 'vanish':233 've':306,320 'vendor':385,829 'vendor/composer/platform_check.php':377 'vendor/plugin-handle':922 'verif':1116,1149,1152,1205 'verifi':1077,1105,1184 'version':32,244,265,365,391,544,549,552,974,992 'via':258,975 'view':605 'visual':1115,1214 'vite':126,191 'volum':816,845,882,947 'volume-mount':844 'walk':1191 'watch':1178 'web':198,210,542,594,881 'webfetch':137 'without':272,288,1173,1340 'work':218,833,1160 'write':1302 'xdebug':625,628 'yaml':532,879","prices":[{"id":"e30011dc-5f65-47cf-8f14-73aa3abf64e0","listingId":"78b7e1a3-24eb-4e67-8cdf-932547b46623","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"michtio","category":"craftcms-claude-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T22:19:37.779Z"}],"sources":[{"listingId":"78b7e1a3-24eb-4e67-8cdf-932547b46623","source":"github","sourceId":"michtio/craftcms-claude-skills/ddev","sourceUrl":"https://github.com/michtio/craftcms-claude-skills/tree/main/skills/ddev","isPrimary":false,"firstSeenAt":"2026-04-18T22:19:37.779Z","lastSeenAt":"2026-05-01T18:56:49.173Z"}],"details":{"listingId":"78b7e1a3-24eb-4e67-8cdf-932547b46623","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"michtio","slug":"ddev","github":{"repo":"michtio/craftcms-claude-skills","stars":39,"topics":["agent-skills","claude-code","claude-code-plugin","claude-code-skills","claude-skills","content-modeling","craft-cms","craft-cms-5","craftcms","ddev","php","twig"],"license":"mit","html_url":"https://github.com/michtio/craftcms-claude-skills","pushed_at":"2026-04-30T21:00:38Z","description":"Production-ready Claude Code skills, agents, and project templates for Craft CMS 5 development","skill_md_sha":"6f872644931756a10e84ad077c59f6a99530e02e","skill_md_path":"skills/ddev/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/michtio/craftcms-claude-skills/tree/main/skills/ddev"},"layout":"multi","source":"github","category":"craftcms-claude-skills","frontmatter":{"name":"ddev","description":"DDEV local development environment for Craft CMS projects. ALWAYS load this skill when running any ddev command, configuring .ddev/config.yaml, or troubleshooting local container issues. Covers: config.yaml settings (project type, PHP/Node versions, database, docroot), shorthand commands (ddev composer, ddev craft, ddev npm), add-ons (ddev add-on get for Redis, Mailpit), custom commands (.ddev/commands/), Vite dev server exposure (web_extra_exposed_ports, web_extra_daemons), database import/export (ddev import-db, ddev export-db, ddev craft db/backup), Xdebug toggling (ddev xdebug on/off), sharing local sites (ddev share, temporary public URLs), and troubleshooting (ddev poweroff, ddev logs, ddev describe, ddev delete, port conflicts, container restart issues). Triggers on: ddev start/stop/restart, ddev craft, ddev composer, ddev npm, ddev ssh, ddev import-db, ddev export-db, ddev xdebug, ddev share, ddev add-on, ddev poweroff, ddev describe, ddev logs, .ddev/config.yaml, web_extra_exposed_ports, web_extra_daemons, PHP version or Node version in local dev, database backup/restore locally, ran npm/composer on host instead of ddev, wrong node_modules architecture, local dev environment for Craft CMS. NOT for production deployment, CI/CD pipelines, GitHub Actions, or server configuration. NOT for Docker/container usage outside of DDEV."},"skills_sh_url":"https://skills.sh/michtio/craftcms-claude-skills/ddev"},"updatedAt":"2026-05-01T18:56:49.173Z"}}