14 Jan 2026
Drupal.org aggregator
DDEV Blog: DDEV 2025 Year in Review

2025 has been a year of significant growth and accomplishment for DDEV. With 579 commits to the main repository and releases from v1.24.0 through v1.24.10, we've made substantial progress on features, infrastructure, and community building. Here's a look back at what we all achieved together.
Table of Contents
- Organizational Milestones
- Community Engagement
- Major Features and Improvements
- ddev.com Website and Documentation
- IDE Integration
- DDEV Developer Improvements
- AI in DDEV Development
- Removals in v1.25.0
- Challenges and things that could have gone better
- Comparing Outcomes to 2025 Goals
- By the Numbers
- Wow, Community Contributions!
- Looking Ahead to 2026
Organizational Milestones
- Board of Directors Established: In December 2025, we formally established a Board of Directors for the DDEV Foundation, enhancing governance and setting the stage for long-term sustainability. We're super proud of this as it's something we've been working toward for years. Read all about it.
- Advisory Group Continues: Our Advisory Group meetings continued throughout the year, providing valuable input and oversight. It will continue just about the same even though we now have a formal Board.
- "Almost Everybody Loves DDEV": The Ironstar Developer Survey 2025 confirmed what we suspected - DDEV has strong community support and satisfaction.
Community Engagement
The DDEV open-source community continues excellent engagement on several fronts.
- addons.ddev.com now shows 147 community-contributed add-ons (176 in total).
- Several key features were suggested, initiated, and developed by community members. SO MANY of these are listed below.
- Online Training: We restarted online contributor and user training
- Offline Training: Randy conducted many Birds-of-a-Feature sessions at DrupalCons, spoke at Florida Drupalcamp, attended, spoke, and trained at TYPO3Camp RheinRuhr, etc.
Major Features and Improvements
Sponsorship Communication
- Massively improved reporting, communication, and management of sponsorship information
- Public sponsorship data feed via sponsorship-data repository
- Banners on DDEV web properties and The Drop Times show current funding status
- Daily
ddev startnotifications keep users informed about sponsorship status
Add-on Ecosystem
- The Add-on Registry launched in January 2025, now displays 176 add-ons, 29 of which are officially maintained by the DDEV team.
- PHP-based add-ons: Add-ons can now be written in PHP, as the ddev-upsun add-on shows. The PHP language is far more powerful for complex tasks than shell scripts.
ddev add-on getnow downloads add-on dependencies automaticallyx-ddevextension allows add-ons to add important information toddev describeoutput- Add-on monitoring continues for both official and community add-ons. We monitor the nightly tests of official add-ons, and periodically check in with all the community add-ons, asking people to re-enable or fix tests.
- New official add-ons: FrankenPHP (June), Redis Insight (July), Upsun (August), NVM Standalone (November)
- By year's end: 29 official add-ons and 176+ total add-ons.
- Stas continued to document and promote best practices with add-ons, including improved testing and upgrading strategies.
Container and Infrastructure
- Parallel Docker image pulls for faster project starts
- Docker Compose profiles: Start projects with specific profiles using
ddev start --profiles=list,of,profiles - Refactored Docker API code: no calls to
dockerbinary (switched togithub.com/docker/cli) and no fragile YAML map structures (switched togithub.com/compose-spec/compose-go/v2)
Upcoming v1.25.0:
- Podman support: Podman rootless/rootful environments
- Docker rootless functionality added for Linux environments
- Base web server image updated to Debian 13 Trixie
Developer Experience
- XHGui integration funded by TYPO3 Association, read more
ddev-upsunadd-on provides new integration with Upsun (formerly Platform.sh) fixed and flex projects.- New handling of privilege elevation using the
ddev-hostnamebinary, improving security, read more --user/-uflag forddev execandddev sshddev describenow works on stopped projectsddev utility download-images --allforces pulling all images in use- Shell completion added and expanded thanks to community contributions
ddev npxcommand support- Improved cleanup for
ddev deleteandddev delete images - Automatic HTTP/S communication between DDEV projects
- Enhanced and simpler Pantheon support
Upcoming v1.25.0:
- Improved
ddev share: More configurable, customizable, withpre-sharehooks andDDEV_SHARE_URLenvironment variable ddev utility mutagen-diagnose: Automatic study of Mutagen problems or misconfigurationddev utility xdebug-diagnose: Automatic study of possible Xdebug configuration problems
Language and Database Updates
- PHP 8.5 support added with a limited set of extensions (in v1.24.10)
- MariaDB 11.8 support added
- PostgreSQL 18 support added
- Node.js as primary web server support
Upcoming v1.25.0:
- PHP 8.4 is the default for new projects (previously PHP 8.3)
- PHP 8.5 support with all extensions
- Node.js 24 as default for new projects (previously Node.js 22)
- MariaDB 11.8 as default for new projects (previously MariaDB 10.11)
Windows Improvements
- New Windows GUI Installer handling Traditional Windows, WSL2/Docker CE, and Docker/Rancher Desktop
- ARM64 Windows installer support
ddev.com Website and Documentation
- Downloads page with improved installer access
- Theme switch button for light/dark mode
- Copy button for code blocks thanks to Bernardo Martinez
- Giscus commenting system for community discussions on blog posts
- AI integration documentation
- Multiple blog posts published covering technical guides, platform-specific instructions, and organizational updates
- Monthly newsletters tracking progress sign up!
IDE Integration
- IntelliJ IDEA plugin got regular, consistent maintenance thanks to @AkibaAT and moved to the DDEV organization on GitHub
- The VS Code DDEV Manager extension continued to be well maintained thanks to @biati-digital
DDEV Developer Improvements
- The new Quickstart tests have proved to be extremely valuable, providing early warning when upstream projects change. They also are a completely new perspective into problems with DDEV. Kudos to @rpkoller for taking those on and maintaining them!
- AkibaAT reorganized our Docker image builds so that multi-architecture builds that used to take an hour now take 10 minutes or less.
- Continuous improvements to AGENTS.md and CLAUDE.md to improve our efficiency in using AI.
AI in DDEV Development
2025 saw significant AI integration in our development workflow:
- Substantial features enabled by AI: Several features that seemed too daunting to start became achievable with AI assistance
- Increased code volume: More code, including extensive tests (though test quality varies)
- Tools used: Claude Code, GitHub Copilot
- Training: Our use of Claude Code was significantly improved by taking a Coursera Course.
Removals in v1.25.0
- NFS support removed
ddev servicecommand removedddev nvmfunctionality removed, but still supported with ddev-nvm add-on- Legacy configuration syntax cleanup
Challenges and things that could have gone better
- Market conditions are affecting agency and hosting company funding, and we go into 2026 with limited funding
- We applied to participate in the Google Summer of Code and the GitHub Secure Open Source Fund but were not accepted in either.
- Although the TYPO3 Association funded one feature submission (XHGui) later submissions were not accepted, and the nature of their program now seems to exclude DDEV features.
- Key upstream groups like the TYPO3 Association and Drupal Association still are not figuring out how to fund DDEV.
bitnami/mysqlissue: Usingbitnami/mysqlfor MySQL 8.0 and 8.4 backfired with Bitnami ceasing its traditional support of important Docker images. This raises questions about dependency management when upstream projects change direction.- We continue to struggle with funding for DDEV and went backward this year instead of forward.
- GitHub killed off the best strategy we had for keeping add-on tests running, which means that nightly tests must be manually enabled by their maintainers when they are discontinued automatically.
- We're so interested in solving user problems that it's possible we're too aggressive in Discord and maybe the issue queue in pursuing them. I'm thinking about whether this is an issue with users and will appreciate comment.
Comparing Outcomes to 2025 Goals
In 2025 Plans we laid out ambitious plans for 2025. Here are the outcomes:
- Continue outstanding user support Done.
- Begin formal governance for the DDEV Foundation. Done.
- Improve our Marketing CTA and information: Significant progress, with much better communication.
- Continue to develop contributors and maintainers: Great year, as shown below.
- XHGui support: Done
- addons.ddev.com: Done
- Feature: Implement mDNS as an alternate name resolution technique. Not funded, not implemented, de-prioritized.
- Allow Add-ons to include other add-ons: Done
- Go-based Upsun Add-on like ddev-platformsh: Done, but with PHP instead of Go.
- Rewrite ddev-platformsh Add-on in Go: Done, but in PHP.
ddev-upsunnow supports the older Platform.sh "fixed" projects. - Develop a replacement for "Gitpod Classic": Gitpod was removed from codebase, and GitHub Codespaces support was improved, but a full replacement remains a goal for 2026.
- Improve self-diagnose capability: Done. Massive improvement with
ddev utility diagnose,ddev utility mutagen-diagnose,ddev utility xdebug-diagnose. - DDEV's Message-of-the-day and ddev.com should show current funding status and need: Done
- DDEV Windows/WSL2 packaging and installation: Done
- Change
ddev shareto a more configurable custom-command-based option: Done (in v1.25.0) - Rework configuration system using Viper. Not done and de-prioritized.
By the Numbers
- 579 commits to the main repository
- 100+ pull requests merged
- Releases v1.24.0 through v1.24.10 with v1.25.0 coming in early 2026
- 93 repositories in the DDEV ecosystem
- 3,400+ GitHub stars on the core project
- 29 official add-ons
- 176+ total add-ons
Wow, Community Contributions!
As an open-source project we truly value the amazing contributions of the community. There are so many ways these contributions happen, including support requests and issues (we learn so much from those!) but also direct contributions.
By Contributor
I know this is "Too Much Information" but here is a simple and inadequate list of the amazing contributions directly to the main project by contributors other than Randy and Stas. It inspires me so much to see this consolidated list.
Ralf Koller - rpkoller - 36 contributions
- test: add a no-interaction flag to the install command in ibexa bats file (#7479)
- test: adding quickstarts for typo3 v13 and v12 plus bats tests (#7302)
- feat: add success message for xhgui on and off, fixes #7202 (#7205)
- test: make the drupal cms bats test a bit more robust and trustworthy (#7203)
- test: fix for magento2 quickstart and bats test, fixes #7191 (#7192)
- test: adjust openmage bats test assertions to the now available demo content (#7126)
- test: bats test for Statamic Composer quickstart (#7116)
- test: craftcms bats test (#7107)
- test: adding silverstripe quickstart bats test (#7112)
- test: symfony bats tests (#7102)
- (and 26 more)
Akiba - AkibaAT - 7 contributions
- build(image): use native arm builder for building Docker images, fixes #7539 (#7553)
- feat: add
ddev add-on searchsubcommand, fixes #7491 (#7554) - fix: add missing ephemeral port handling to xhgui service, fixes #7557 (#7560)
- fix: replace broken http and https port lookup, fixes #7246 (#7259)
- feat: add new envs
DDEV_PRIMARY_URL_PORT,DDEV_PRIMARY_URL_WITHOUT_PORTandDDEV_SCHEME, fixes #7214 (#7218) - fix: Use fast checkpoint during PostgreSQL backup, fixes #7098 (#7219)
- fix: disable Xdebug trigger for Xdebug and xhprof status checks, fixes #6191, fixes php-perfect/ddev-intellij-plugin#414 (#7216)
Ariel Barreiro - hanoii - 6 contributions
- docs: trailing whitespace on template (#7321)
- refactor: improve
ddev add-on getoutput, add warning exit code annotation (#7263) - fix: add BASE_IMAGE arg before everything else, for #7071 (#7258)
- feat: support prepend.Dockerfile* files for multi-stage builds (#7071)
- feat: show config..yml on ddev start (#7089)
- fix: the
#ddev-descriptionstanza in add-on install actions not showing if it's the first line (#7022)
tyler36 - tyler36 - 4 contributions
- fix(cakephp): do not override APP_DEFAULT_LOCALE (#7653)
- docs: update ngrok link (#7359)
- feat: Add live link to Discord (#7042)
- refactor: remove outdated
move-issueconfig , fixes #6899 (#6906)
Travis Carden - TravisCarden - 3 contributions
- docs: fix a little custom command annotations code example (#7711)
- docs: Add missing
sequelacecommand link todatabase-management.md(#7184) - docs: Fix niggling code sample inconsistency in
troubleshooting.md(#6984)
Laryn - laryn - 3 contributions
- feat: backdrop add bee to quickstart (#7053)
- docs: add Backdrop-specific config considerations. (#7037)
- docs: change code refs to include info about Backdrop config storage options, fixes #7013 (#7014)
Andrew Berry - deviantintegral - 2 contributions
- feat: support using zstd for snapshots, fix
postgres:9snapshot, fixes #7844, fixes #3583 (#7845) - build: fix getopt detection on macOS (#7846)
Raphael Portmann - raphaelportmann - 2 contributions
- fix(heidisql): add default
--databases=dbto postgres, for #7830 (#7847) - feat(heidisql): allow postgres connections, fixes #7675 (#7677)
cyppe - cyppe - 2 contributions
- feat(db): remove the hardcoded --server-id=0 parameter from MySQL startup, fixes #6768 (#7608)
- fix(laravel): don't edit database config in
.envwhen there's no database (#7584)
Peter Bowyer - pbowyer - 2 contributions
- docs: clarify instructions for using PhpStorm inside WSL2 (#7333)
- docs: add MySQL 8.4 to supported databases (#6971)
Shelane French - shelane - 2 contributions
- feat: add DDEV_APPROOT variable to web container and updates documentation, fixes #7198 (#7199)
- refactor: remove solrtail from installed example commands, fixes #7139 (#7140)
Pierre Paul Lefebvre - PierrePaul - 2 contributions
- fix: XHGui launch command support custom ports, fixes #7181 (#7182)
- docs: Add the xhgui container to the building and contributing page. Add more description to the xhprof profiling page. (#7168)
Sven Reichel - sreichel - 2 contributions
- test: Add OpenMage composer quickstart and tests (#7133)
- test: add OpenMage/Magento 1 quickstart test and split it from Magento 2, for #7094 (#7091)
lguigo22 - lguigo22 - 1 contribution
- docs: add Cloudflare warp networking instructions (#7975)
Justin Vogt - JUVOJustin - 1 contribution
- fix(router): ensure Traefik monitor port is always bound to localhost (#7942)
grummbeer - grummbeer - 1 contribution
- fix(diagnose): Remove the hardcoded IP "127.0.0.1" from the DNS check, since it may be incorrect, fixes #7871 (#7872)
crowjake - crowjake - 1 contribution
- fix(commands): make
HostWorkingDirrespectWebWorkingDir(#7907)
Markus Sommer - BreathCodeFlow - 1 contribution
- fix: db port should be integer in generated TYPO3 AdditionalConfiguration.php, fixes #7892 (#7893)
James Sansbury - q0rban - 1 contribution
- docs: clarify instructions for disabling Mutagen on a single project (#7861)
Moshe Weitzman - weitzman - 1 contribution
- docs: remove community examples link in documentation (#7834)
Yan Loetzer - yanniboi - 1 contribution
- docs: add missing dot in
.ddev/.env.*(#7828)
Garvin Hicking - garvinhicking - 1 contribution
- docs: add crosslink for shortened DDEV env variables to full list, fixes #7781 (#7782)
Benny Poensgen - vanWittlaer - 1 contribution
- feat: use composer_root in cakephp, craftcms, laravel, magento2, shopware6, symfony for app type detection (#7558)
Rob Loach - RobLoach - 1 contribution
- chore(provider): remove trailing whitespace in YAML files (#7770)
JshGrn - JshGrn - 1 contribution
- docs: explicitly mention setting system managed nvm version, for #6013 (#7733)
E - ara303 - 1 contribution
- docs(faq): remove traefik config when changing project's name, for #7638 (#7639)
Alan Doucette - dragonwize - 1 contribution
- feat: add
ddev npxcommand (#7599)
Brooke Mahoney - brookemahoney - 1 contribution
- docs: clarify comments in the Drupal 10 and 11 quickstarts, fixes #7619 (#7620)
gitressa - gitressa - 1 contribution
- docs: remove Prerequisite section (#7621)
Eduardo Rocha - hockdudu - 1 contribution
- docs: fix typo in documentation (#7618)
Dezső BICZÓ - mxr576 - 1 contribution
- docs: Fix blog link in main nav (#7566)
Tomas Norre Mikkelsen - tomasnorre - 1 contribution
- feat: add ddev version to ddev describe command, fixes #7398 (#7541)
Danny Pfeiffer - danny2p - 1 contribution
- fix(pantheon): update Pantheon database pull to get fresh DB and file push to be CMS-agnostic, fixes #5215, fixes #4760 (#7486)
Popus Razvan Adrian - punkrock34 - 1 contribution
- feat: add Linux support for heidisql command (#7399)
Daniel Huf - dhuf - 1 contribution
- refactor: add SVG to rewrite rule for TYPO3 (#7482)
Ayu Adiati - adiati98 - 1 contribution
- docs(wsl): add
wsl --updatecommand for Windows (#7476)
Peter Philipp - das-peter - 1 contribution
- fix: temporarily allow write to
/etc/mysql/conf.d/*fordbcontainer restart, fixes #7457 (#7458)
O'Briat - obriat - 1 contribution
- docs: How to use Xdebug with Composer for plugin development (#7423)
Andreas Hager - andreashager - 1 contribution
- feat: return real exit code from
ddev execand add quiet flag to it, fixes #3518 (#7385)
Bill Seremetis - bserem - 1 contribution
- docs: add Terminus downgrade tips, fixes #7352 (#7353)
Olivier Mengué - dolmen - 1 contribution
- build: upgrade mapstructure to v2 (#7396)
Rui Chen - chenrui333 - 1 contribution
- test: use
mainfor setup-homebrew action instead ofmaster(#7395)
michaellenahan - michaellenahan - 1 contribution
- docs: improve xhgui documentation, fixes #7376 (#7377)
August Miller - AugustMiller - 1 contribution
- docs: align Craft CMS quickstart with official documentation (#7323)
Loz Calver - lozcalver - 1 contribution
- feat: prune orphaned Node.js versions after install, fixes #7325 (#7326)
Tim Kelty - timkelty - 1 contribution
- docs: update Craft CMS quickstart, for #7236 (#7274)
Pedro Antonio Fructuoso Merino - pfructuoso - 1 contribution
- fix: Add path to docroot in wp parameters when not set, fixes #7241 (#7242)
Bang Dinh - bangdinhnfq - 1 contribution
- docs: Update Shopware quickstart with "shopware/production" instead of "shopware/production:^v6.5" (#7253)
nmangold - nmangold - 1 contribution
- docs: wrap quotes around commands that use the caret symbol (#7237)
Jeremy Gonyea - jgonyea - 1 contribution
- docs: fix minor typo in the Grav quickstart (#7197)
Colan Schwartz - colans - 1 contribution
- build: stop installing chocolatey, fixes #6636, fixes #6344 (#7049)
Mrtn Schndlr - barbieswimcrew - 1 contribution
- fix: nginx.conf should let index.php handle 404 errors for media files (#7050)
Marvin Hinz - marvinhinz - 1 contribution
- fix: add timeout for netutil::IsPortActive check for WSL2 with "mirrored networking mode" as opposed to default "NAT mode", fixes #6245 (#7166)
RubenColpaert - RubenColpaert - 1 contribution
- fix: use
charset=utf8mb4in DATABASE_URL for Symfony environment variables, fixes #7068 (#7076)
Alexey Murz Korepov - MurzNN - 1 contribution
- docs: Add docs about configuring browser for HTTPS certificates (#7075)
Adam - phenaproxima - 1 contribution
- docs: Update quickstart.md to remove Drupal CMS ZIP file instructions (#7119)
Nick Hope - Nick-Hope - 1 contribution
- docs: update Windows installation docs to use 'Docker Engine' terminology (#7092)
Damilola Emmanuel Olowookere - damms005 - 1 contribution
- docs: add DevDb tip to database management documentation (#7084)
nickchomey - nickchomey - 1 contribution
- docs: add WordPress special handling info about wp-cli.yml (#7080)
Andrew Gearhart - AndrewGearhart - 1 contribution
- refactor: improve Docker version checks, set minimum supported Docker API to 1.44, fixes #6916 (#6946)
Christopher Kaster - atomicptr - 1 contribution
- feat: change php-fpm setting 'decorate_workers_output' to 'no' (#6964)
Hervé Donner - vever001 - 1 contribution
- feat: switch apache mpm_prefork to mpm_event, fixes #6966 (#6967)
Bernhard Baumrock - BernhardBaumrock - 1 contribution
- docs: Add ProcessWire to the Quickstart List (#6879)
Erik Peterson - eporama - 1 contribution
- fix: update Drupal 7 settings.ddev.php and settings.php to match Drupal 7.103 (#6913)
Tom Yukhayev - charginghawk - 1 contribution
- fix: In acquia.yaml, specify default site source for ddev pull acquia. (#6874)
Summary by Count
| Contributor | GitHub | Count |
|---|---|---|
| Ralf Koller | rpkoller | 36 |
| Akiba | AkibaAT | 7 |
| Ariel Barreiro | hanoii | 6 |
| tyler36 | tyler36 | 4 |
| Travis Carden | TravisCarden | 3 |
| Laryn | laryn | 3 |
| Andrew Berry | deviantintegral | 2 |
| Raphael Portmann | raphaelportmann | 2 |
| cyppe | cyppe | 2 |
| Peter Bowyer | pbowyer | 2 |
| Shelane French | shelane | 2 |
| Pierre Paul Lefebvre | PierrePaul | 2 |
| Sven Reichel | sreichel | 2 |
| lguigo22 | lguigo22 | 1 |
| Justin Vogt | JUVOJustin | 1 |
| grummbeer | grummbeer | 1 |
| crowjake | crowjake | 1 |
| Markus Sommer | BreathCodeFlow | 1 |
| James Sansbury | q0rban | 1 |
| Moshe Weitzman | weitzman | 1 |
| Yan Loetzer | yanniboi | 1 |
| Garvin Hicking | garvinhicking | 1 |
| Benny Poensgen | vanWittlaer | 1 |
| Rob Loach | RobLoach | 1 |
| JshGrn | JshGrn | 1 |
| E | ara303 | 1 |
| Alan Doucette | dragonwize | 1 |
| Brooke Mahoney | brookemahoney | 1 |
| gitressa | gitressa | 1 |
| ...and 36 more contributors |
Blog Guest Contributors
Guest contributions to the blog are always welcome and key contributors added significant posts this year:
Ajith Thampi Joseph - atj4me
Bill Seremetis - bserem
Garvin Hicking - garvinhicking
Jeremy Gonyea - jgonyea
ayalon - ayalon
- Exposing a Node.js App Over HTTP / HTTPS on a Subdomain in DDEV (blog author: J. Minder)
And thanks to all of you who use DDEV, report issues, answer questions in Discord and other venues, and spread the word. Your support makes this project possible.
Amazing Official Add-on Maintainers
There are so many unofficial add-ons being maintained by so many people, but here are the folks that maintained official repositories:
- @tyler36 - ddev-browsersync, ddev-cron, ddev-cypress, ddev-qr, plus contributions to 20+ other add-ons
- @weitzman (Moshe Weitzman) - ddev-drupal-contrib, ddev-selenium-standalone-chrome
- @cmuench (Christian Münch) - ddev-opensearch
- @julienloizelet (Julien Loizelet) - ddev-mongo, ddev-redis-insight
- @mkalkbrenner - ddev-solr
- @robertoperuzzo - ddev-sqlsrv
- @b13 (TYPO3 agency) - ddev-typo3-solr, ddev-rabbitmq
- @jedubois - ddev-varnish
- @hussainweb - ddev-redis
- @seebeen - ddev-ioncube, ddev-minio
- @bserem (Bill Seremetis) - ddev-adminer
- @AkibaAT - ddev-intellij-plugin
- @biati-digital - vscode-ddev-manager
Looking Ahead to 2026
Stay tuned for our 2026 plans post where we'll outline what's next for DDEV. As always, we welcome your input through all our support venues.
Claude Code and GitHub Copilot were used as assistants in gathering lists and material, and in reviewing this article.
14 Jan 2026 11:19pm GMT
Dries Buytaert: The Third Audience

I used Claude Code to build a new feature for my site this morning. Any URL on my blog can now return Markdown instead of HTML.
I added a small hint in the HTML to signal that the Markdown version exists, mostly to see what would happen. My plan was to leave it running for a few weeks and write about it later if anything interesting turned up.
Within an hour, I had hundreds of requests from AI crawlers, including ClaudeBot, GPTBot, OpenAI's SearchBot, and more. So much for waiting a few weeks.
For two decades, we built sites for two audiences: humans and search engines. AI agents are now the third audience, and most websites aren't optimized for them yet.
We learned how to play the SEO game so our sites would rank in Google. Now people are starting to invest in things like Generative Engine Optimization (GEO) and Answer Engine Optimization (AEO), which are about getting cited in AI-generated answers.
I wanted to understand what that actually means in practice, so I turned my own site into a small experiment and made every page available as Markdown.
If you've been following my blog, you know that Drupal stores my blog posts as Markdown. But when AI crawlers visited, they got HTML like everyone else. They had to wade through navigation menus and wrapper divs to find the actual content. My content already existed in a more AI-friendly format. I just wasn't serving it to them.
It only took a few changes, and Drupal made that easy.
First, I added content negotiation to my site. When a request includes Accept: text/markdown in the HTTP headers, my site returns the Markdown instead of the rendered HTML.
Second, I made it possible to append .md to any URL. For example, https://dri.es/principles-for-life.md gives you clean Markdown with metadata like title, date, and tags.
But how did those crawlers find the Markdown version so fast? I borrowed a pattern from RSS: RSS auto-discovery. Many sites include a link tag with rel="alternate" pointing to their RSS feed. I applied the same idea to Markdown: every HTML page now includes a link tag announcing that an alternative Markdown version exists at the .md URL.
That "Markdown auto-discovery" turned out to be the key. The crawlers parse the HTML, find the alternate Markdown link, and immediately switch. That explains the hundreds of requests I saw within the first hour.
In the end, this took surprisingly little work. If your content already exists in a cleaner, structured form, you might be closer to this than you think. For me, this feels like the beginning of a longer experiment.
The speed of adoption tells me AI agents are hungry for cleaner content formats and will use them the moment they find them. What I don't know yet is whether this actually benefits me. It might lead to more visibility in AI answers, or it might just make it easier for AI companies to use my content without sending traffic back.
I know not everyone will love this experiment. Humans, including me, are teaching machines how to read our sites better, while machines are teaching humans to stop visiting us. The value exchange between creators and AI companies is far from settled, and it's entirely possible that making content easier for AI to consume will accelerate the hollowing out of the web.
I don't have a good answer to that yet, but I'd rather experiment than look away. I'm going to leave this running and report back.
14 Jan 2026 10:33pm GMT
Drupal Core News: Announcing Drupal 12.0.0 platform requirements
Drupal 12 development has reached a point where the system requirements may be raised in the development branch. To prepare core developers for this and to inform the community at large, we are announcing the following requirements for Drupal 12.
Webserver
The webserver requirements have not changed since Drupal 11. They are Apache 2.4.7 or nginx 1.1 minimum. IIS is not supported.
PHP
Drupal 12 will require PHP 8.5. Older versions of PHP are not supported.
Database
The minimum database requirements for backends supported by Drupal 12 core are MySQL 8.0, MariaDB 10.11, PostgreSQL 18, and SQLite 3.45.
The MySQL and SQLite requirements have not changed since Drupal 11.0. MariaDB is raised from 10.6 and PostgreSQL from 16.
Composer
Drupal recommends the latest secure release of Composer, 2.9.3.
Browsers
The existing browser policy has not changed and there was no need to update it for Drupal 12. Drupal already drops support for older versions of browsers as new ones get released.
Drupal 11 will receive long term support
Drupal 11 will continue to be supported until mid-late 2028, at least until the release of Drupal 13.
14 Jan 2026 5:27pm GMT