[{"data":1,"prerenderedAt":194},["ShallowReactive",2],{"blog:from-xampp-to-ddev":3},{"id":4,"title":5,"body":6,"date":179,"description":180,"draft":181,"extension":182,"meta":183,"navigation":184,"path":185,"seo":186,"stem":187,"tags":188,"__hash__":193},"blog\u002Fblog\u002Ffrom-xampp-to-ddev.md","From XAMPP to DDEV: Modernizing PHP Developer Environments",{"type":7,"value":8,"toc":170},"minimark",[9,13,21,26,34,37,41,55,58,86,90,93,122,126,137,146,150],[10,11,12],"p",{},"Setting up a PHP development environment used to be a rite of passage — and not the fun kind.",[10,14,15,16,20],{},"When I joined the team, the local dev setup had grown organically over the years — XAMPP on Windows, manual SSL certificates, environment variables scattered across ",[17,18,19],"code",{},".htaccess"," files. Six developers, all with subtly different configurations.",[22,23,25],"h2",{"id":24},"the-problem","The problem",[10,27,28,29,33],{},"The worst part wasn't the setup itself — it was ",[30,31,32],"strong",{},"onboarding",". Getting a new developer productive took 1–2 full days of hand-holding: installing the right PHP version, configuring Apache virtual hosts, mapping drive letters, fighting with Xdebug config.",[10,35,36],{},"Every developer had a slightly different environment, which meant bugs that were genuinely environment-specific.",[22,38,40],{"id":39},"the-solution-wsl-ddev-docker","The solution: WSL + DDEV + Docker",[10,42,43,50,51,54],{},[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fddev.com\u002F",[48],"nofollow","DDEV"," is an open-source local development environment tool built on Docker. It gives every project a reproducible, containerised environment defined entirely in ",[17,52,53],{},".ddev\u002Fconfig.yaml"," — committed to the repo.",[10,56,57],{},"Combined with WSL2 (Windows Subsystem for Linux), we got:",[59,60,61,68,74,80],"ul",{},[62,63,64,67],"li",{},[30,65,66],{},"Consistent environments"," — the same Docker image on every machine",[62,69,70,73],{},[30,71,72],{},"Per-project PHP versions"," — no more global PHP installation conflicts",[62,75,76,79],{},[30,77,78],{},"Built-in Xdebug"," — one command to enable\u002Fdisable",[62,81,82,85],{},[30,83,84],{},"Mailpit"," — local email catching out of the box",[22,87,89],{"id":88},"the-migration","The migration",[10,91,92],{},"The migration itself took about a week:",[94,95,96,99,105,108,119],"ol",{},[62,97,98],{},"Documented the existing setup (PHP version, Apache vhosts, env vars, Xdebug config)",[62,100,101,102,104],{},"Created a ",[17,103,53],{}," translating every piece of that config",[62,106,107],{},"Tested against the existing codebase end-to-end",[62,109,110,111,114,115,118],{},"Wrote a setup guide (a single ",[17,112,113],{},"README"," section: install WSL2, install Docker Desktop, install DDEV, run ",[17,116,117],{},"ddev start",")",[62,120,121],{},"Ran a 2-hour workshop with the team",[22,123,125],{"id":124},"results","Results",[10,127,128,129,132,133,136],{},"Onboarding time dropped from ",[30,130,131],{},"1–2 days"," to ",[30,134,135],{},"1–2 hours",". The environment is now fully reproducible: any developer can check out the repo and have a working local setup with one command.",[10,138,139,140,145],{},"I also contributed a bug fix back to the DDEV project (",[44,141,144],{"href":142,"rel":143},"https:\u002F\u002Fgithub.com\u002Fddev\u002Fddev\u002Fpull\u002F6809",[48],"PR #6809",") while doing the migration — a small way to give back to the tool that saved us hours.",[22,147,149],{"id":148},"takeaways","Takeaways",[59,151,152,155,162],{},[62,153,154],{},"The upfront investment in a reproducible environment pays off immediately at hiring time",[62,156,157,158,161],{},"DDEV's ",[17,159,160],{},".ddev\u002F"," directory in version control is the key — no more \"ask the guy who set it up originally\"",[62,163,164,165,169],{},"Running a short workshop beats documentation alone; people need to ",[166,167,168],"em",{},"do"," the setup once with someone watching",{"title":171,"searchDepth":172,"depth":172,"links":173},"",2,[174,175,176,177,178],{"id":24,"depth":172,"text":25},{"id":39,"depth":172,"text":40},{"id":88,"depth":172,"text":89},{"id":124,"depth":172,"text":125},{"id":148,"depth":172,"text":149},"2026-03-10","How switching from a manual Windows\u002FXAMPP setup to WSL + DDEV + Docker cut onboarding time from 2 days to 2 hours — and what I learned doing it for a team of 6.",false,"md",{},true,"\u002Fblog\u002Ffrom-xampp-to-ddev",{"title":5,"description":180},"blog\u002Ffrom-xampp-to-ddev",[189,49,190,191,192],"PHP","Docker","DevOps","Developer Experience","CD7n9k8ACclQuLMOvkZx02zm6vnsvOcBkEnGD8SyuJs",1776339762988]