04 Feb 2026
Drupal.org aggregator
Très Bien Blog: The Algorithmic Bias Against Drupal Community Values
The Algorithmic Bias Against Drupal Community Values
I don't usually fail at making my life easier, but hey, it's a whole new world lately. To try my hand at LLM during my trial of AI-assisted coding, I wanted to see if I could customize an LLM for a specific task: assigning user credit on Drupal Core issues. Depending on the complexity, activity, and number of contributors involved it can take me anywhere between 30 seconds and 30 minutes to assign credit when I commit an issue to Drupal Core. Maybe I could automate some of it?
theodore
04 Feb 2026 10:29pm GMT
Centarro: Any Drupal Commerce Site Can Have a B2B Portal
Drupal Commerce lets you serve both retail customers and business buyers from a single installation. Same products. Shared checkout flow. Same user experience-just adapted to the relationship. Different users can see different prices, payment options, and catalogs.
You don't need a separate platform. You don't need a different domain. You don't need another way to manage content. Drupal Commerce already has the tools to support both B2C and B2B on the same website, using the same codebase, delivering a unified experience to all of your customers.
Even better, you can build a B2B portal in Drupal without any code. The capabilities are already there in existing features and modules.
On February 26th, I'll show you how to do it. We'll walk through building a B2B purchasing portal using Commerce Kickstart as a base. Sign up now.
04 Feb 2026 2:16pm GMT
Gbyte blog: Mail Composer: Sending multilingual HTML emails with Drupal
A new solution to Drupal's messy mailing approach
Drupal core's mail module has been a mess for a long time and has seemingly not kept up with the modernization of the rest of the stack. Using the hook system to send emails feels archaic; therefore, a while ago, we started developing a module that:
- Allows for defining emails in code via a clean and powerful (chaining) object-oriented interface
- Supports sending HTML emails without any fuss
- Optionally allows for defining (HTML) emails as Twig templates
- Allows for translating said emails by simply adding more Twig templates in different languages (multilingual capabilities)
- Integrates with Drupal's default framework for email manipulation, which handles the transporting and formatting of outgoing emails
- Can be used as the backend for bespoke UI-driven mailing solutions
We have been using and improving Mail Composer and would love for that work to be reused and further built upon.
Let's talk code
Just sending an inline email
... is as simple as:
/** @var \Drupal\mail_composer\Manager $manager */
$manager = \Drupal::service('mail_composer.manager');
$manager
->compose()
->setFrom('foobar@foo.bar')
->setTo('foo@bar.bar')
->setSubject('Test subject')
->setBody(['This is the body of the email.'])
->send();
Neat, isn't it?
04 Feb 2026 2:09pm GMT
1xINTERNET blog: An international upbringing that quietly set the stage for the future
A close look at Charles Andrew Revkin: how an international upbringing quietly shaped a digital leader at UICC and his impact on global cancer initiatives.
04 Feb 2026 12:00pm GMT
mark.ie: Drupal CSS is broken when Aggregation is turned on
Drupal CSS is broken when Aggregation is turned on
Here's some tips for debugging broken CSS in Drupal.
04 Feb 2026 9:51am GMT
03 Feb 2026
Drupal.org aggregator
Dripyard Premium Drupal Themes: Meridian, the Latest Dripyard Theme
Meet Meridian, the newest Dripyard theme. We're really excited about this release, as many hours went into Meridian along with updates to our other themes.
Flexibility
My favorite "feature" of Dripyard themes is flexibility. We market each theme toward a specific vertical, but in practice they are highly versatile. You can easily change the look and feel of an entire site by adjusting color schemes, border radiuses, and imagery.
Pictures are worth a thousand words, so we built our site to showcase multiple demos.
03 Feb 2026 11:18pm GMT
Drupal blog: Inside Drupal CMS 2.0: Q&A with Product Owner Pam Barone

Drupal CMS 2.0 launched January 28. We asked Pam Barone-CTO of Technocrat and Product Owner of Drupal CMS-to talk about what's new and what she's most excited for people to try.
What makes Drupal CMS 2.0 different from version 1.0?
Drupal CMS 1.0 was really a proof of concept, to show that we could create a version of Drupal that bundled all of the best practices that many sites were using, and that the community would come together to make it happen in a short amount of time. We did prove the concept, but the 1.0 release did not represent any major innovations, because we were mostly just packaging functionality and tools that we already had and were familiar with. That is not to downplay the accomplishment at all, because it was a huge leap forward for the project, and it provided the foundation for the next steps.
With 2.0, we are introducing two big new concepts: Drupal Canvas and site templates. These represent another huge leap for the project, each in different ways, as we continue with the strategy to empower marketers to create exceptional digital experiences without relying on developers.
What are you personally most excited about for people to try in 2.0?
Drupal Canvas! I am so excited about Canvas and can't wait to get it into the hands of our end users. There were times during the development of 2.0 when I was working in the Canvas editor and I thought, 'Wow, I'm actually having fun!' I can't say I remember thinking that with previous Drupal page building tools.
And it's not just about end users; one of the goals of 2.0 is to introduce Canvas within the community and showcase its potential. It's a paradigm shift, and this level of change is always challenging, but after trying it out and getting familiar with the concepts, I think it'll be clear that it's worth it.

Site templates are a big part of this release. Can you explain what they are and why they matter?
Site templates are near-feature-complete starting points for Drupal sites based on specific use cases. They provide a content model, some example content, a polished look and feel, as well as the functionality you would expect based on the use case. The first site template - Byte, which is included in Drupal CMS 2.0 - is for a SaaS-based product marketing site. It includes all of the baseline functionality from 1.0, plus Canvas-powered landing pages, a blog, a newsletter signup and contact form, and a new theme with a dark style.
During the development of 1.0, we realized that we couldn't build something that was both generic and useful. Either we would have to build something simple that would be widely applicable, or we would be making a lot of assumptions about the site's content model and functionality, and providing things that many users wouldn't want.
We decided that in order to really make it easy to launch sites, we had to provide many different starting points, across many use cases. By identifying the use case and being opinionated about how to solve it, site templates can start you off with 95 percent of what you need to launch.
Of course, that assumes there is a site template for your use case - which means we're going to need a lot of them. We're currently working with a group of Drupal agencies who have signed up for a pilot to develop new site templates for the launch of the site template Marketplace.
Let's talk about Canvas-how will this change the way marketers can build with Drupal?
The most obvious thing is just that it provides marketers with a modern, intuitive visual page builder of the kind that any competitive platform needs to have. Up until now, adopting Drupal meant getting its many benefits but compromising on the user experience, because the page building tools were clunky. With Canvas, that compromise is gone. We can provide the experience that marketers have come to expect.
In some ways it feels like we are playing catch-up, especially since it's still early (the first release was in December) and there are some big gaps. But it also feels like a new era for Drupal, and the enthusiasm and pace of adoption so far is really encouraging. So I think we don't really even know yet what changes will come, because when the community is presented with a new way to build cool things, the possibilities are endless.
You've mentioned making integrations easier with recipes. What does that look like in practice?
One of the benefits of using Drupal is that it can be integrated with pretty much anything, and all of the common integrations have modules to make it easier. But they always require some configuration, and it can be tricky to figure out. With recipes, we can add default configuration, and we can prompt for the necessary details, so you don't have to go hunting around for where to add them.
Drupal CMS 1.0 included two integrations that use the recipe prompt already, for Google Analytics and the AI Assistant. They're pretty simple in that you are just adding an ID or an API key, but they still are a big improvement over the manual setup.
For 2.0, with site templates, we have the opportunity to include additional integrations that are relevant to the use case and wanted to tackle something a bit more complicated. Byte ships with a newsletter signup that uses a webform out of the box, and has an optional "Recommended add-on" to integrate with Mailchimp. The Mailchimp module already did most of the heavy lifting, but we worked with the maintainers to develop a recipe that configures the module (and its submodules), and once you authenticate your site with Mailchimp, will automatically create signup blocks for each of your audiences. From there, you can add them to any page via the Canvas editor.
We think that easy integrations are going to be really critical to making site templates attractive as an offering, so we are planning to continue working on that.
In your recent presentations, you've talked about "making easy things less hard" versus "making easy things easy." Where does 2.0 fall on that spectrum?
The initial site templates are very intentionally on the "making easy things less hard" side. Not only is it a totally new concept, but they are leveraging Canvas, which is also new. So we thought that the best chance for success would be to keep it simple and try to really nail the use cases. Once we've all built a few, and we've gotten feedback from real users, we can move into the more complex sites where Drupal thrives.
Drupal CMS 2.0 is available now.
Try it now: drupal.org/drupal-cms/trial
Download: drupal.org/download
Learn more: drupal.org/drupal-cms
Twenty-five years in. Still building.
03 Feb 2026 11:11pm GMT
UI Suite Initiative website: Announcement - Publication of Display Builder beta 2 and a new video
New: Video Tutorial & OverviewA new video has been released as part of the Display Builder series: Display Builder: Installation and OverviewWhat it covers:
03 Feb 2026 5:00pm GMT
Droptica: Automated Content Creation in Drupal: Field Widget Actions Tutorial with Real Results

Information gathering, content writing, proofreading, SEO optimization, tag preparation - all these tasks consume a significant portion of the editorial team's time. What if you could reduce this research time by up to 90% through automated content creation? In this article, I present a practical Drupal setup that uses AI-powered modules to generate editorial content with minimal manual input. This includes automatic information retrieval based on the title, tag generation, content creation, and detailed data fetching - all directly in your CMS, without switching between different tools. Read on or watch the episode from the Nowoczesny Drupal series.
03 Feb 2026 10:15am GMT
Specbee: Extending Drupal Canvas with Canvas Full HTML: A step-by-step Integration guide
Drupal Canvas (Experience Builder) limits WYSIWYG editing within its own text formats. Use the Canvas Full HTML module to remove these limitations, giving content editors full control over their rich text content.
03 Feb 2026 9:24am GMT
Morpht: Introducing the Drupal AI Views Agent
The Drupal Views AI agent allows site builders to create and update Views using natural language prompts, without ever opening the Views UI.
03 Feb 2026 12:09am GMT
DDEV Blog: Podman and Docker Rootless in DDEV

TL;DR: DDEV supports Podman and Docker Rootless as of v1.25.0. Podman and Docker Rootless are a bit more trouble than the recommended normal traditional Docker providers and have some serious trade-offs. With Podman on macOS you can't use the normal default ports 80 and 443. On Linux Docker Rootless you can't bind-mount directories, so the entire project has to be mutagen-synced. But Podman Rootless on Linux is pretty solid.
Jump to setup instructions: Linux/WSL2 · macOS · Windows
Note: This support is experimental. Report issues on the DDEV issue tracker.
Table of Contents
- Understanding Docker and Podman
- Key aim: Linux and WSL2 users
- macOS
- Windows
- Running Multiple Container Runtimes
- Switching Runtimes with DDEV
- Which Runtime Should You Choose?
- The Journey to Podman Support
- Supporting DDEV Development
- Conclusion
Understanding Docker and Podman
Open Source Alternatives to Docker Desktop
A common misconception is that Podman is the only open-source alternative to Docker Desktop. This is not true. There are several fully open-source alternatives available on every platform:
- Docker Engine - The original open-source Docker, free to use
- Rancher Desktop - Open source container management with choice of dockerd or containerd
- Lima - Linux virtual machines
- Colima - Container runtime with minimal setup (built on Lima)
- Podman Desktop - GUI for Podman with Docker compatibility
All of these work with DDEV. The main reason to choose Podman specifically is if your organization forbids Docker entirely or if you want rootless operation by default.
Why Choose Podman?
Podman is rootless by default, making it the simplest option for secure container environments. Traditional Docker requires root daemons, which can be a security concern in corporate environments with strict policies. (Note that DDEV is targeted at local development, where there are few risks of specialized attacks using this vector anyway.)
Podman's rootless approach runs the daemon without elevated privileges:
- No root daemon on the system, only a rootless daemon in userspace
- Container processes cannot access root-owned files
- Reduced attack surface if a container is compromised
While DDEV already runs containers as unprivileged users, Podman eliminates the need for a root daemon entirely.
Why Choose Docker Rootless?
Docker Rootless provides the same security benefits as Podman Rootless while maintaining full Docker compatibility. It runs the daemon without root privileges, offering:
- No root daemon on the system
- Container processes cannot access root-owned files
- Reduced attack surface if a container is compromised
Unlike Podman which is rootless by default, Docker Rootless requires special setup to enable. Choose this option if you want to stay with Docker but need rootless security.
Key aim: Linux and WSL2 users
The primary focus for this article is Linux and WSL2 (we have test coverage for Linux only for now). Most features and configurations are well-tested on these platforms.
Do You Need an Alternative to Docker?
Before diving into setup, consider whether you need an alternative to traditional Docker:
| Runtime | Why would you do this? | Key trade-offs | Performance | Setup | Recommendation |
|---|---|---|---|---|---|
| Traditional Docker | Standard, widely-used option | None | Excellent | Simple | Recommended for most users |
| Docker Rootless | Security requirement for rootless daemon | Must use --no-bind-mounts (everything via Mutagen), can't use default workflow |
Moderate (Mutagen overhead) | Moderate | Only if rootless security is required |
| Podman Rootful | Organization forbids Docker | Slower than Docker, different behavior | Slower than Docker | Moderate | Only if Docker not allowed |
| Podman Rootless | Organization forbids Docker + want rootless security | May need sysctl changes for ports <1024, slower than Docker | Slower than Docker | Moderate | Only if Docker not allowed and rootless required |
Bottom line: Stick with traditional Docker unless organizational policy or security requirements force you to use an alternative. The alternatives work, but have significant trade-offs.
Installing Podman
Install Podman using your distribution's package manager. See the official Podman installation guide for Linux.
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install podman
# Fedora
sudo dnf install --refresh podman
Note: Some distributions may have outdated Podman versions. This is the case with Ubuntu 24.04, which has Podman 4.9.3. We require Podman 5.0 or newer for the best experience, because we didn't have success with Podman 4.x in our automated tests, but you can still use Podman 4.x ignoring the warning on ddev start.
You can also install Podman Desktop if you prefer a GUI.
For more information, see the Podman tutorials.
Installing Docker CLI
Podman provides a Docker-compatible API, which means you can use the Docker CLI as a frontend for Podman. This approach offers several benefits:
- Use familiar
dockercommands while Podman handles the actual container operations - Switch between different container runtimes using Docker contexts
- Maintain compatibility with scripts and tools that expect the
dockercommand
-
Install only the CLI:
# Ubuntu/Debian sudo apt-get update && sudo apt-get install docker-ce-cli # Fedora sudo dnf install --refresh docker-ce-cliNote: You don't need to install
docker-ce(the Docker engine).
Configuring Podman Rootless
This is the recommended configuration for most users.
-
Prepare the system by configuring subuid and subgid ranges and enabling userns options, see the Arch Linux Wiki for details:
# Add subuid and subgid ranges if they don't exist for the current user grep "^$(id -un):\|^$(id -u):" /etc/subuid >/dev/null 2>&1 || sudo usermod --add-subuids 100000-165535 $(whoami) grep "^$(id -un):\|^$(id -u):" /etc/subgid >/dev/null 2>&1 || sudo usermod --add-subgids 100000-165535 $(whoami) # Propagate changes to subuid and subgid podman system migrate # Debian requires setting unprivileged_userns_clone if [ -f /proc/sys/kernel/unprivileged_userns_clone ]; then if [ "1" != "$(cat /proc/sys/kernel/unprivileged_userns_clone)" ]; then echo 'kernel.unprivileged_userns_clone=1' | sudo tee -a /etc/sysctl.d/60-rootless.conf sudo sysctl --system fi fi # Fedora requires setting max_user_namespaces if [ -f /proc/sys/user/max_user_namespaces ]; then if [ "0" = "$(cat /proc/sys/user/max_user_namespaces)" ]; then echo 'user.max_user_namespaces=28633' | sudo tee -a /etc/sysctl.d/60-rootless.conf sudo sysctl --system fi fi # Allow privileged port access if needed if [ -f /proc/sys/net/ipv4/ip_unprivileged_port_start ]; then if [ "1024" = "$(cat /proc/sys/net/ipv4/ip_unprivileged_port_start)" ]; then echo 'net.ipv4.ip_unprivileged_port_start=0' | sudo tee -a /etc/sysctl.d/60-rootless.conf sudo sysctl --system fi fi -
Enable the Podman socket and verify it's running (Podman socket activation documentation):
systemctl --user enable --now podman.socket # You should see `/run/user/1000/podman/podman.sock` (the number may vary): ls $XDG_RUNTIME_DIR/podman/podman.sock # You can also check the socket path with: podman info --format '{{.Host.RemoteSocket.Path}}' -
Configure Docker API to use Podman (Podman rootless tutorial):
# View existing contexts docker context ls # Create Podman rootless context docker context create podman-rootless \ --description "Podman (rootless)" \ --docker host="unix://$XDG_RUNTIME_DIR/podman/podman.sock" # Switch to the new context docker context use podman-rootless # Verify it works docker ps -
Proceed with DDEV installation.
Podman Rootless Performance Optimization
Podman Rootless is significantly slower than Docker. See these resources:
To improve performance, install fuse-overlayfs and configure the overlay storage driver:
Install fuse-overlayfs:
# Ubuntu/Debian
sudo apt-get update && sudo apt-get install fuse-overlayfs
# Fedora
sudo dnf install --refresh fuse-overlayfs
Configure storage:
mkdir -p ~/.config/containers
cat << 'EOF' > ~/.config/containers/storage.conf
[storage]
driver = "overlay"
[storage.options.overlay]
mount_program = "/usr/bin/fuse-overlayfs"
EOF
Warning: If you already have Podman containers, images, or volumes, you'll need to reset Podman for this change to take effect:
podman system reset
This removes all existing containers, images, and volumes (similar to docker system prune -a).
Configuring Podman Rootful
Rootless Podman is recommended. Only use rootful Podman if your setup specifically requires it.
To configure rootful Podman:
- Create a
podmangroup (sudo groupadd podman) and add your user to it (sudo usermod -aG podman $USER). - Configure group permissions to allow non-root users to access the socket
- Activate the socket with
sudo systemctl enable --now podman.socket - Create a Docker context
docker context create podman-rootful --description "Podman (root)" --docker host="unix:///var/run/podman/podman.sock" - Switch to the new context with
docker context use podman-rootful
Setting Up Docker Rootless
Docker Rootless on Linux offers rootless security with full Docker compatibility.
-
Follow the official Docker Rootless installation guide.
-
Configure system:
# Allow privileged port access if needed if [ -f /proc/sys/net/ipv4/ip_unprivileged_port_start ]; then if [ "1024" = "$(cat /proc/sys/net/ipv4/ip_unprivileged_port_start)" ]; then echo 'net.ipv4.ip_unprivileged_port_start=0' | sudo tee -a /etc/sysctl.d/60-rootless.conf sudo sysctl --system fi fi # Allow loopback connections (needed for working Xdebug) # See https://github.com/moby/moby/issues/47684#issuecomment-2166149845 mkdir -p ~/.config/systemd/user/docker.service.d cat << 'EOF' > ~/.config/systemd/user/docker.service.d/override.conf [Service] Environment="DOCKERD_ROOTLESS_ROOTLESSKIT_DISABLE_HOST_LOOPBACK=false" EOF -
Enable the Docker socket, and verify it's running:
systemctl --user enable --now docker.socket # You should see `/run/user/1000/docker.sock` (the number may vary): ls $XDG_RUNTIME_DIR/docker.sock -
Configure Docker API to use Docker rootless:
# View existing contexts docker context ls # Create rootless context if it doesn't exist docker context inspect rootless >/dev/null 2>&1 || \ docker context create rootless \ --description "Rootless runtime socket" \ --docker host="unix://$XDG_RUNTIME_DIR/docker.sock" # Switch to the context docker context use rootless # Verify it works docker ps -
Proceed with DDEV installation.
-
Docker Rootless requires no-bind-mounts mode
Docker Rootless has a limitation with bind mounts that affects DDEV. You must enable
no-bind-mountsmode:ddev config global --no-bind-mounts=trueWhy this is needed:
Docker Rootless sets ownership for bind mounts to
rootinside containers. This is a known issue:- Mounting a volume with rootless always assigns ownership to root
- Add ability to mount volume as user other than root
The
rootuser inside the container maps to your host user, but many services will not run as root:- nginx runs as root without problems
- MySQL/MariaDB need extra configuration
- Apache and PostgreSQL will not run as root
Podman Rootless fixes this with the
--userns=keep-idoption, which keeps user IDs the same. Docker Rootless does not have this option.The
no-bind-mountsmode fixes this by using Mutagen for thewebcontainer.
macOS
macOS users can use Podman and Podman Desktop, but setup has its own challenges. Docker Rootless is not available on macOS.
Do You Need an Alternative to Docker?
| Runtime | Why would you do this? | Key trade-offs | Performance | Setup | Recommendation |
|---|---|---|---|---|---|
| Traditional Docker | Standard, widely-used option | None | Excellent | Simple | Recommended for most users |
| Podman | Avoid Docker entirely (organizational policy) | Cannot use ports 80/443 (must use 8080/8443 instead), different behavior | Slower than Docker | Moderate | Only if Docker not allowed |
Bottom line: Use traditional Docker (OrbStack, Docker Desktop, Lima, Colima, or Rancher Desktop) unless your organization forbids it. The inability to use standard ports 80/443 with Podman creates a significantly different development experience.
Installing Podman
Install Podman using Homebrew:
brew install podman
Or install Podman Desktop if you prefer a GUI.
For more information, see the official Podman installation guide for macOS and Podman tutorials.
Installing Docker CLI
Podman provides a Docker-compatible API, which means you can use the Docker CLI as a frontend for Podman. This approach offers several benefits:
- Use familiar
dockercommands while Podman handles the actual container operations - Switch between different container runtimes using Docker contexts
- Maintain compatibility with scripts and tools that expect the
dockercommand
brew install docker
Configuring Podman
-
Handle privileged ports (<1024):
Important: Podman on macOS cannot bind to privileged ports (80/443). You must configure DDEV to use unprivileged ports:
ddev config global --router-http-port=8080 \ --router-https-port=8443This means your DDEV projects will be accessible at
https://yourproject.ddev.site:8443instead of the standardhttps://yourproject.ddev.site.Note: switching to rootful mode with
podman machine set --rootful --user-mode-networking=falsedoesn't help with privileged ports because the--user-mode-networking=falseflag is not supported on macOS (it's only available for WSL). -
Initialize and start the Podman machine:
# check `podman machine init -h` for more options podman machine init --memory 8192 podman machine startCheck for the Podman socket path using
podman machine inspect:~ % podman machine inspect ... "ConnectionInfo": { "PodmanSocket": { "Path": "/var/folders/z5/lhpyjf2n7xj2djl0bw_7kb3m0000gn/T/podman/podman-machine-default-api.sock" }, "PodmanPipe": null }, ... -
Configure Docker CLI to use Podman. Choose one of two approaches:
Option 1: Create a Docker context (recommended, more flexible):
# Create Podman context (path to socket may vary) # Use the socket path from `podman machine inspect` output docker context create podman-rootless \ --description "Podman (rootless)" \ --docker host="unix:///var/folders/z5/lhpyjf2n7xj2djl0bw_7kb3m0000gn/T/podman/podman-machine-default-api.sock" # Switch to the new context docker context use podman-rootless # Verify it works docker psThis approach uses Docker contexts to switch between different container runtimes without modifying system sockets. This is more flexible if you want to use multiple Docker providers.
Option 2: Use the default Docker socket (simpler, but less flexible):
# Install podman-mac-helper # Use the command from `podman machine start` output sudo /opt/homebrew/Cellar/podman/5.7.1/bin/podman-mac-helper install podman machine stop podman machine start # Verify it works docker ps -
Proceed with DDEV installation.
Windows
Windows users can use Podman Desktop, but setup has its own challenges. Docker Rootless is not available on traditional Windows (it works in WSL2, see the Linux and WSL2 section).
Do You Need an Alternative to Docker?
| Runtime | Why would you do this? | Key trade-offs | Performance | Setup | Recommendation |
|---|---|---|---|---|---|
| Traditional Docker | Standard, widely-used option | None | Excellent | Simple | Recommended for most users |
| Podman | Avoid Docker entirely (organizational policy) | Different behavior, less mature on Windows | Slower than Docker | Moderate | Only if Docker not allowed |
Bottom line: Use traditional Docker (Docker Desktop or alternatives) unless your organization forbids it. Podman on Windows works but is less mature than on Linux.
Installing Podman
Install Podman Desktop, which includes Podman.
Alternatively, install Podman directly following the official Podman installation guide for Windows.
For more information, see the Podman tutorials.
The setup and configuration follow similar patterns to the Linux/WSL2 setup, but with Podman Desktop managing the VM for you. Follow the Linux and WSL2 instructions.
Running Multiple Container Runtimes
You can run Docker and Podman sockets simultaneously and switch between them using Docker contexts.
For example, here's a system with four active Docker contexts:
$ docker context ls
NAME DESCRIPTION DOCKER ENDPOINT
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock
podman Podman (rootful) unix:///var/run/podman/podman.sock
podman-rootless * Podman (rootless) unix:///run/user/1000/podman/podman.sock
rootless Rootless runtime socket unix:///run/user/1000/docker.sock
Switch between them with:
docker context use "<context-name>"
Note: Running both Docker and Podman in rootful mode at the same time may cause network conflicts. See Podman and Docker network problem on Fedora 41.
Switching Runtimes with DDEV
DDEV automatically detects your active container runtime. To switch:
-
Stop DDEV projects:
ddev poweroff -
Switch Docker context or change the
DOCKER_HOSTenvironment variable -
Start your project:
ddev start
Which Runtime Should You Choose?
Runtime Comparison
| Feature | Standard Docker | Docker Rootless | Podman Rootful | Podman Rootless |
|---|---|---|---|---|
| Platform Support | All | Linux, WSL2 | All | All |
| Rootless Daemon | ❌ | ✅ | ❌ | ✅ |
| Has automated testing in DDEV | ✅ | ✅ | ❌ | ✅ |
| Mutagen | ✅ | ✅ | ✅ | ✅ |
| Bind Mounts | ✅ | ❌, requires no-bind-mounts |
✅ | ✅ (with --userns=keep-id) |
| Performance | Excellent | Moderate (because of no-bind-mounts) |
Slow compared to Docker | Slow compared to Docker |
| Privileged Ports (<1024) | Works by default | Requires sysctl config |
Works by default | Requires sysctl config or may not work |
| Setup Complexity | Simple | Moderate | Moderate | Moderate |
| Maturity | Most mature | Experimental | Experimental | Experimental |
| Recommended For | Most users | Docker users needing rootless | Organizations that forbid Docker | Organizations that forbid Docker |
Recommendations
Use of the many standard Docker providers if:
- You're comfortable with the most widely used container runtime
- You don't have rootless security requirements
This is the recommended option for the vast majority of users.
Use Podman Rootless if:
- Your organization forbids Docker
- You want rootless security by default
Use Podman Rootful if:
- Your organization forbids Docker
- You want traditional container permissions without user namespace mapping overhead
Use Docker Rootless if:
- You need full Docker compatibility
- You want rootless security without changing runtimes
The Journey to Podman Support
Supporting Podman and Docker Rootless required major changes to DDEV's Docker integration:
- Switched to official Docker client library (#5787): DDEV previously used an unofficial library to communicate with the Docker API. We migrated to Docker's official client library for better compatibility and long-term support.
- Replaced direct CLI calls with proper API usage (#7189): DDEV used to call
docker context inspectdirectly, which doesn't work with Podman. We switched to using thedocker/clilibrary to handle context operations properly. - Modernized SSH authentication (#7511): The
ddev auth sshcommand used to calldocker rundirectly. We rewrote it to use the Docker API, making it compatible with alternative runtimes. - Optimized API call performance (#7587): DDEV's Docker API logic was inefficient, making redundant calls without caching. We restructured the code to cache data and reduce unnecessary API requests.
- Removed legacy docker-compose features (#7642): Podman refuses to work with deprecated
linksandexternal_linksdirectives indocker-composefiles. We removed these legacy features and modernized DDEV's compose file generation. - Added Podman and Docker Rootless support (#7702): DDEV now detects and supports Podman (rootful and rootless) and Docker Rootless. We added handling for Podman-specific limitations and enabled rootless environments to work without root privileges.
- Added support for SELinux environments (#7939): Podman has SELinux enabled by default on Fedora and some other distributions. We added support for SELinux by configuring volume mounts with the appropriate labels.
These changes enabled Podman and Docker Rootless support. These features were developed together because Podman's primary use case is rootless operation. Once DDEV could handle rootless runtimes, supporting both became natural. They share the same security model and similar technical constraints.
Supporting DDEV Development
This Podman and Docker Rootless support was made possible by community financial support. The changes required hundreds of hours of development, code reviews, and testing.
DDEV relies on support from individuals and organizations who use it. With Podman rootless support, DDEV now works in corporate environments where Docker Desktop is not allowed. If you or your organization uses DDEV, please consider sponsoring the project to help keep DDEV free and open source.
Conclusion
DDEV now supports Podman and Docker Rootless as experimental features. This opens DDEV to corporate environments where traditional Docker is not allowed.
DDEV automatically detects your runtime and handles the complexity. Whether you choose Podman for rootless security, Docker Rootless for compatibility, or standard Docker, setup is straightforward.
This article was edited and refined with assistance from Claude Code.
03 Feb 2026 12:00am GMT
DDEV Blog: DDEV v1.25.0: Improved Windows Support, Faster Debugging, and Modern Defaults
We're excited to announce DDEV v1.25.0, featuring a completely revised Windows installer, XHGui as the default profiler, and updated system defaults including a move to Debian Trixie.
This release represents contributions from the entire DDEV community, with your suggestions, bug reports, code contributions, and financial support making it possible.
What's New and Updated
Default versions updated:
These updates mostly affect new projects. Existing projects typically continue to work without changes.
- Debian Trixie replaces Debian Bookworm as the base image for
ddev-webserverandddev-ssh-agent - XHGui is now the default profiler (replacing prepend mode). See XHGui Feature blog post
- PHP 8.4 becomes the default for new projects, and PHP 8.5.2 is now available with full extension support including Xdebug
- Node.js 24 becomes the default for projects that don't specify another version
- MariaDB 11.8 becomes the default for new projects
Major new features:
- Revised Windows installer now uses per-user installation for WSL2 or traditional Windows (no admin account required). Download from ddev.com/download
- Reworked
ddev sharecommand with a new cloudflared share provider for free sharing options. See new docs. - New diagnostic commands:
ddev utility xdebug-diagnosehelps troubleshoot Xdebug issues. See (draft) Xdebug Understanding and Troubleshootingddev utility mutagen-diagnosehelps debug Mutagen issues. See (draft) Mutagen Functionality and Debugging
- Faster snapshots:
ddev snapshotnow uses zstd instead of gzip for significantly faster exports and restores, thanks @deviantintegral - Experimental Podman and Docker Rootless support: See Podman and Docker Rootless in DDEV
- FrankenPHP as an official add-on:
ddev-frankenphpwith many improvements. See updated (draft) Using FrankenPHP with DDEV - Traefik configuration standardization: Project configuration now uses a single file:
.ddev/traefik/config/<projectname>.yaml(all other files are ignored)
What You Need to Do After Upgrading
After upgrading to v1.25.0, follow these steps:
- Run
ddev poweroff(DDEV will prompt you for this) - Update your projects: Run
ddev config --autoon each project to update to current configuration - Update installed add-ons: Run
ddev add-on list --installedto see your add-ons, then update them as needed - Free up disk space: Run
ddev delete imagesto remove old Docker image versions - Check compatibility notes below
Compatibility Notes and Things to Check
1. Debian Trixie base image
If your project has custom Dockerfiles or uses webimage_extra_packages and ddev start shows any problems, you may have a little work to do, but most projects are unaffected.
What to do: Test your project after upgrading. See Debian Trixie release notes for known issues.
Note: DDEV already includes the tzdata-legacy package to handle removed timezones in Debian Trixie, so no action is needed for timezone-related changes.
2. Profiler changed to XHGui
If you use XHProf profiling, it now defaults to XHGui mode instead of prepend mode.
What to do: If you prefer the previous prepend mode, run:
ddev config global --xhprof-mode=prepend
3. Nginx modules now come from Debian repository
If you use custom nginx modules, the package names and module loading have changed. DDEV now uses nginx bundled with Debian Trixie instead of maintaining an extra dependency on the nginx.org repository.
What to do: Update your nginx module configuration.
Example: Adding NJS (JavaScript) support to nginx in DDEV v1.25.0+:
ddev config --webimage-extra-packages="libnginx-mod-http-js,libnginx-mod-stream,libnginx-mod-stream-js" --ddev-version-constraint='>=v1.25.0'
cat <<'EOF' > .ddev/web-build/Dockerfile.nginx
RUN sed -i '1i load_module modules/ngx_stream_module.so;\nload_module modules/ngx_http_js_module.so;\nload_module modules/ngx_stream_js_module.so;\n' /etc/nginx/nginx.conf
EOF
4. Removed commands and features
If you use these commands, you'll need to switch:
ddev nvm: Switch tonodejs_versionor install theddev-nvmadd-onddev service: Useddev add-onto install/remove services- NFS performance mode: Switch to Mutagen instead
5. Updated ddev config flags
If you use these flags in scripts, update them:
--mutagen-enabled→--performance-mode=mutagen--upload-dir→--upload-dirs--http-port→--router-http-port--https-port→--router-https-port--mailhog-port→--mailpit-http-port--mailhog-https-port→--mailpit-https-port--projectname→--project-name--projecttype,--apptype→--project-type--sitename→--project-name--image-defaults→--web-image-default
6. Traefik configuration
If you have custom Traefik configuration, note that:
- Only
.ddev/traefik/config/<projectname>.yamlis used (other files are ignored) - Put global Traefik configuration in
$HOME/.ddev/traefik/custom-global-config/ - Traefik v3 syntax is now required
What to do if you have extra Traefik files:
- Merge all your custom configuration into
.ddev/traefik/config/<projectname>.yamland remove the#ddev-generatedcomment from it - Track issue #8047 for potential future improvements to this workflow
Note: ddev-router no longer stops automatically when the last project stops. Use ddev poweroff to stop it manually.
7. Windows installation
If you're on traditional Windows (not WSL2): The installer may prompt you to uninstall the previous system-wide installation before installing the new per-user version.
Other Improvements
This release includes many other improvements:
- New Wagtail, CodeIgniter, and Drupal 12 project types
- Improved Pantheon integration with new environment variables and option to pull from existing backups or fresh database dumps
- Much faster
ddev add-on listandddev add-on search - Shell autocompletion for
ddev add-on get <TAB> - SELinux environment detection with automatic bind mount labels
- More portable database collations for MySQL/MariaDB exports
- SSH config support in
$HOME/.ddev/homeadditions/.ssh/config.d - DBeaver support for traditional Windows
See the full release notes for complete details.
From the entire team, thanks for using, promoting, contributing, and supporting DDEV!
If you have questions, reach out in any of the support channels.
Follow our blog, Bluesky, LinkedIn, Mastodon, and join us on Discord. Sign up for the monthly newsletter.
This article was edited and refined with assistance from Claude Code.
03 Feb 2026 12:00am GMT
02 Feb 2026
Drupal.org aggregator
Drupal blog: Drupal Powers Global Action for World Cancer Day
Every year on 4th February, the world unites to mark World Cancer Day (WCD), a campaign that raises awareness, amplifies voices, and inspires collective action against cancer. Behind the scenes, the World Cancer Day website, built with Drupal, powers millions of people, providing a central platform for global engagement.
Project overview
|
|
Campaign and its impact
The World Cancer Day 2025-2027 campaign embraces the theme "United by Unique", emphasizing people-centered care. This approach prioritizes the needs, values, and active participation of individuals, families, and communities in cancer care. By putting people at the heart of the conversation, the campaign promotes a shift toward more inclusive, responsive, and compassionate health systems.
The 2025 campaign achieved remarkable global engagement:
- +900 activities in 120 countries
- +600 stories shared in text, video, and art
- +1,000 participants in the Upside Down Challenge
- +30,000 press mentions in 162 countries
- 6 billion digital impressions and 9 million social media engagements
- 530,000 website visitors and +300,000 campaign video views
These numbers highlight both the scale of the campaign and the critical need for a platform that can reliably support millions of users simultaneously.
Explore more about the campaign and join the global action at World Cancer Day.

Supporting global action with Drupal
Supporting a high-profile global campaign requires flexibility, scalability, and robustness, capabilities that are fundamental to Drupal's architecture.
Key features
- Multilingual CMS: Centralized content management across multiple languages ensures the website can reach a large global audience.
- Scalable hosting: Drupal handles traffic surges exceeding 194 GB per hour, delivering consistent performance during peak activity.
- Complex interactive tools: Custom features such as poster creation, event planning tools, and a global activities map make it easy for users to participate and share initiatives.
- Dynamic content delivery: Scrollytelling, multimedia content, and personal stories from those affected by cancer create an engaging, meaningful experience.
- Accessibility: Drupal's accessibility capabilities reinforce inclusivity by supporting diverse audiences at scale.
"I've been pleased with my experience with Drupal. While the earlier versions were sometimes technically complex, it always felt like a solid, robust platform to build upon. I have been genuinely pleased that we chose to stick with it over the long term and to witness its evolution into a more mature and flexible platform."
Charles Andrew Revkin Senior Digital Strategy Manager Union for International Cancer Control ( UICC)
Scaling impact with Drupal AI
To manage the vast volume of user-submitted stories while maintaining quality, relevance and inclusivity, WCD integrated Drupal AI. This automation helps with content moderation and reduces manual workload, allowing more people to share their experiences and supporting the campaign's people-centered mission as it scales.
Why Open Source matters for global health initiatives
For non-profit organizations in the healthcare sector, efficiency, transparency, and long-term sustainability are essential, especially when every investment must directly support the mission. As an open-source platform, Drupal eliminates licensing costs and avoids vendor lock-in, allowing resources to be focused on participation and impact rather than software fees. Supported by a global contributor community, Drupal benefits from continuous improvements in security, accessibility, and performance, making it a trusted foundation for sensitive, high-impact initiatives like World Cancer Day.
Technology that serves people at scale
The global fight against cancer requires collective action, and Drupal plays an important role in enabling that engagement. By managing large-scale data, complex interactive features, and high-traffic performance, the platform ensures that the campaign can reach millions of people, foster participation, and support socially impactful initiatives year after year.
02 Feb 2026 11:53pm GMT
Drupal Association blog: Drupal Powers Global Action for World Cancer Day
Every year on 4th February, the world unites to mark World Cancer Day (WCD), a campaign that raises awareness, amplifies voices, and inspires collective action against cancer. Behind the scenes, the World Cancer Day website, built with Drupal, powers millions of people, providing a central platform for global engagement.
Project overview
|
|
Campaign and its impact
The World Cancer Day 2025-2027 campaign embraces the theme "United by Unique", emphasizing people-centered care. This approach prioritizes the needs, values, and active participation of individuals, families, and communities in cancer care. By putting people at the heart of the conversation, the campaign promotes a shift toward more inclusive, responsive, and compassionate health systems.
The 2025 campaign achieved remarkable global engagement:
- +900 activities in 120 countries
- +600 stories shared in text, video, and art
- +1,000 participants in the Upside Down Challenge
- +30,000 press mentions in 162 countries
- 6 billion digital impressions and 9 million social media engagements
- 530,000 website visitors and +300,000 campaign video views
These numbers highlight both the scale of the campaign and the critical need for a platform that can reliably support millions of users simultaneously.
Explore more about the campaign and join the global action at World Cancer Day.

Supporting global action with Drupal
Supporting a high-profile global campaign requires flexibility, scalability, and robustness, capabilities that are fundamental to Drupal's architecture.
Key features
- Multilingual CMS: Centralized content management across multiple languages ensures the website can reach a large global audience.
- Scalable hosting: Drupal handles traffic surges exceeding 194 GB per hour, delivering consistent performance during peak activity.
- Complex interactive tools: Custom features such as poster creation, event planning tools, and a global activities map make it easy for users to participate and share initiatives.
- Dynamic content delivery: Scrollytelling, multimedia content, and personal stories from those affected by cancer create an engaging, meaningful experience.
- Accessibility: Drupal's accessibility capabilities reinforce inclusivity by supporting diverse audiences at scale.
"I've been pleased with my experience with Drupal. While the earlier versions were sometimes technically complex, it always felt like a solid, robust platform to build upon. I have been genuinely pleased that we chose to stick with it over the long term and to witness its evolution into a more mature and flexible platform."
Charles Andrew Revkin Senior Digital Strategy Manager Union for International Cancer Control ( UICC)
Scaling impact with Drupal AI
To manage the vast volume of user-submitted stories while maintaining quality, relevance and inclusivity, WCD integrated Drupal AI. This automation helps with content moderation and reduces manual workload, allowing more people to share their experiences and supporting the campaign's people-centered mission as it scales.
Why Open Source matters for global health initiatives
For non-profit organizations in the healthcare sector, efficiency, transparency, and long-term sustainability are essential, especially when every investment must directly support the mission. As an open-source platform, Drupal eliminates licensing costs and avoids vendor lock-in, allowing resources to be focused on participation and impact rather than software fees. Supported by a global contributor community, Drupal benefits from continuous improvements in security, accessibility, and performance, making it a trusted foundation for sensitive, high-impact initiatives like World Cancer Day.
Technology that serves people at scale
The global fight against cancer requires collective action, and Drupal plays an important role in enabling that engagement. By managing large-scale data, complex interactive features, and high-traffic performance, the platform ensures that the campaign can reach millions of people, foster participation, and support socially impactful initiatives year after year.
02 Feb 2026 11:53pm GMT
Talking Drupal: Talking Drupal #538 - Agentic Development Workflows
Today we are talking about Development Workflows, Agentic Agents, and how they work together with guests Andy Giles & Matt Glaman. We'll also cover Drupal Canvas CLI as our module of the week.
For show notes visit: https://www.talkingDrupal.com/538
Topics
- Understanding Agentic Development Workflows
- Understanding UID Generation in AI Agents
- Exploring Generative AI and Traditional Programming
- Building Canvas Pages with AI Agents
- Using Writing Tools and APIs for Automation
- Introduction to MCP Server and Its Tools
- Agent to Agent Orchestration and External Tools
- Command Line Tools for Agent Coding
- Security and Privacy Concerns with AI Tools
- The Future of AI Tools and Their Sustainability
- Benefits of AI for Site Builders
Resources
- Decoupled frontend with Drupal Canvas
- AI workflows will reshape development organizations - mglaman.dev
- Agents.md
- AI is here to stay
- Autocomplete training 38:09 Code completion
- MCP
- Open Code
- Geerlingguy ai voice
Guests
Matt Glaman - mglaman.dev mglaman
Hosts
Nic Laflin - nLighteneddevelopment.com nicxvan John Picozzi - epam.com johnpicozzi Andy Giles - dripyard.com andyg5000
MOTW Correspondent
Martin Anderson-Clutz - mandclu.com mandclu
- Brief description:
- Have you ever wanted to sync components from a site using Drupal Canvas out to another project like a headless front end, or conversely, from an outside repo into Drupal Canvas? There's an NPM library for that
- Module name/project name:
- Brief history
- How old: created in July 2025 (as xb-cli originally) by Bálint Kléri (balintbrews) of Acquia
- Versions available: 0.6.2, and really only useful with Drupal Canvas, which works with Drupal core 11.2
- Maintainership
- Actively maintained
- Number of open issues: 8 open issues, 2 of which are bugs, but one of which was marked fixed in the past week
- Usage stats:
- 128 weekly downloads according to npmjs.com
- Module features and usage
- With the Drupal Canvas CLI installed, you'll have a command line tool that allows you to download (export) components from Canvas into your local filesystem. There are options to download just the components, just the global css, or everything, and more. If no flags are provided, the tool will interactively prompt you for which options you want to use.
- There is also an upload command with a similar set of options. It's worth noting that the upload will also automatically run the build and validate commands, ensuring that the uploaded components will work smoothly with Drupal Canvas
- I thought this would be relevant to our topic today because with this tool you can create a React component with the aid of the AI integration available for Canvas and then sync that, either to a headless front end built in something like Next.js or Astro or a tool like Storybook; or you could use an AI-enhanced tool like Cursor IDE to build a component locally and then sync that into a Drupal site using Canvas
- There is a blog post Balint published that includes a demo, if you want to see this tool in action
02 Feb 2026 7:00pm GMT
