24 Aug 2026

feedDrupal.org aggregator

The Drop Times: Eight DAM Decisions for Drupal Teams

A DAM decision changes more than where images are stored. Drupal teams also have to decide which system owns metadata, approvals, transformations, rights, and the published asset lifecycle.

24 Aug 2026 4:33pm GMT

Drupal AI Initiative: Your next website visitor might not be human

For most of the web's history, we have designed digital experiences around a simple assumption: a person will visit our website. That person might arrive through a search engine, follow a campaign link, scan a QR code, or maybe even type the URL into their browser.

AI is changing that... dramatically and rapidly!

People are now asking AI assistants to research products, compare services, explain policies, recommend suppliers and complete tasks on their behalf. Sometimes, they might not even consciously choose AI and are simply guided by seemingly familiar tools like Google 'AI Overviews'. Either way, instead of visiting ten websites, a customer may ask one assistant to gather the relevant information and present a recommendation.

In the near future, that AI assistant could be doing more than reading a web page: checking product availability, requesting information, preparing an application, arranging an appointment or even completing a transaction.

Your next website visitor may not be a person at all, but an AI agent acting on their behalf, which raises a serious question:

Can AI systems understand our organisation, trust our information and interact with our services safely?

Getting to know your new audience

To be useful, AI assistants need to find the right information, understand its meaning and decide whether it is current and trustworthy.

A prospective student asking an assistant to compare courses across several universities, a buyer requesting a shortlist of products that meet detailed technical, ethical and budget requirements - both are now part of your website's audience.

While human visitors use navigation, page layouts, graphic cues and calls to action, AI systems depend more heavily on structured information, descriptive metadata, clear relationships and reliable access to data.

Your web pages may look perfectly clear to a person but remain ambiguous to a machine. For example, a human might understand from the design that one contact address is intended for media enquiries, and another is for customer enquiries, but an AI assistant may not interpret it correctly unless it's represented clearly in the underlying content structure.

The content management decisions you make today will shape how accurately they are represented by AI tomorrow.

Being visible is not the same as being understood

Many organisations are currently focused on whether their content appears in AI-generated answers. That is important, but visibility is only one part of the problem.

An AI system also needs to understand:

  • What the organisation offers
  • Which information is authoritative
  • When the information was last reviewed
  • Which products, services or locations it relates to
  • Whether regional or language differences apply
  • What actions can be taken
  • Which information is public and which is restricted

Without this context, AI assistants may rely on outdated pages, confuse similar services or combine information that was never intended to be used together.

Preparing for AI visitors therefore requires more than content. It requires a well-structured and reliably governed source of truth.

Drupal gives content meaning

Drupal treats content as structured information rather than a collection of web pages. A university course, for example, could have defined fields for qualification, fees and application route, rather than burying them in a block of text. That structure is what makes the same content usable well beyond a single page.

For a human visitor, Drupal assembles that information into an attractive and accessible page. For an AI visitor, the same structure makes the information easier to identify, compare and reuse.

You don't need to maintain one version of content for people and another for machines because Drupal allows the same governed content to serve websites, applications, search services and AI agents.

Drupal can become the trusted source behind AI answers

AI systems are powerful, but they are only as dependable as the information and context available to them. The idea of autonomous agents can quickly become uncomfortable when governance is treated as an afterthought: what happens if an agent uses sensitive information, makes an unsuitable change, or you simply can't tell why an action occurred?

Drupal can provide a controlled source of organisational knowledge. Its content model, taxonomy and relationship system describe what information means, not simply where it appears on a page, helping an AI assistant distinguish a current policy from an archived one, or a general contact address from a specialist enquiry route.

The Drupal AI ecosystem is developing capabilities to support this level of governance, including guardrails for requests and responses, observability and activity logging, controlled access to organisational context, provider-independent integrations, and human review and approval workflows.

This is especially valuable for large or complex digital estates, where information is created by multiple departments across different languages and regions.Drupal's advanced AI implementation and integration does not negate all risk from AI usage, but it does give you a stronger foundation for identifying and managing it

Put simply, AI makes content governance essential to digital communication.

Hi, I'm a machine, please can I come in?

Making content understandable is the first step. The next is enabling controlled action

Giving an AI agent access to your digital platform creates an obvious concern: what will it be allowed to see and do?

Drupal has long supported detailed roles and permissions, allowing different users to view, edit, approve or publish specific types of content.

The same principle can be applied to AI visitors. A useful agent may need to inspect content, search records, or carry out an action, but it should never gain unrestricted access to your systems, or expose private content simply because that content exists in the same system. It should only be able to access the information and tools permitted for the person, service or task it represents.

The Drupal AI Initiative organises this work through two connected areas:

  • Inside AI, which brings AI assistance into Drupal for editors, marketers and site builders
  • Outside AI, which enables external AI agents and tools to connect to and act on Drupal

This changes the role of the content management system from being a 'human experience engine' to being a governed platform through which people, applications and AI agents can understand and interact with your organisation.

Design for people, prepare for agents

Human visitors are not disappearing. People will continue to value clear information, strong design, accessible services and experiences that feel relevant and trustworthy. However, they will increasingly use AI to navigate and make sense of the vast amount of information available to them.

AI readiness can look like a technology challenge, but an AI system cannot reliably represent your brand if the underlying content is fragmented, duplicated or poorly structured.

The organisations that adapt successfully will not choose between human-centred design and machine-readable content. They will build digital platforms that support both by creating information people can understand, data machines can interpret and processes agents can interact with safely.

Your next website visitor might not be human - will your digital platform know exactly how to help them?

Try Drupal today!

24 Aug 2026 2:30pm GMT

A Drupal Couple: The closest thing I have to an answer

The closest thing I have to an answer

Imagen
A stone archway with one new pale block replacing a stone at its crown, the old worn stone on the ground below.
Connecting systems isn't hard anymore, so what matters is what you put in the middle. I think that separates into knowledge, decisions, and the terrain those decisions run on, and the thing you'd actually be building is whatever keeps all three true. I've built a version of it for my own tools, and there's good evidence it could make an AI agree with me more, which I don't have a full answer to.
what is next in the AI era
Drupal
Drupal Planet
AI
AI Agents
context engineering
agentic recipes
orchestration
n8n
sycophancy

Add new comment

24 Aug 2026 2:02pm GMT

Drupal AI Initiative: From Headless CMS to AI Harness: What I Took to Decoupled Days

Article by: Martin Anderson-Clutz. Originally posted on the Acquia blog.

Drupal turns decoupled architecture into a governed AI harness, combining live visual editing with agent-ready content schemas.


Back in March, at EvolveDigital in Toronto, I ran into Preston So. He mentioned that the team behind Decoupled Days was looking for speakers, and that this year the event would be in Montréal. I was interested right away. Drupal Canvas is the most compelling answer I have seen to a problem that has followed decoupled architectures for years, and I wanted that message to reach beyond the Drupal faithful - out to the practitioners who live and breathe headless every day.

The talk I ended up giving was not really about a content management system at all. It was about how Drupal has quietly become something else: a governed harness for artificial intelligence. Here is the argument I made, the demo that seemed to land hardest with the room, and why I think 2026 is the year the trade-offs of going headless finally stop being trade-offs.

Drupal Was Decoupled Before Decoupled Was Cool

Drupal did not arrive late to the headless conversation. Far from it. The community committed to an API-first architecture roughly a decade ago, and a vibrant subcommunity has been refining decoupled patterns ever since. That work produced a spectrum of delivery models rather than a single one: traditional, where Drupal renders everything; progressively decoupled, where a JavaScript front end takes over the parts of the page that benefit from it while editorial preview stays intact; and fully decoupled, where Drupal is a pure API feeding any number of channels.

That range matters, because it means Drupal has never been only a content API. It owns content, delivery, and governance at the same time. The headless-native platforms compete on one of those axes. Drupal competes on all three.

The Headless Bargain, and Why 2026 Voids It

When organizations adopted front-end frameworks like Next.js and Astro, most of them accepted what I think of as the headless bargain. They gained fast front ends and their choice of framework, and in exchange they gave up live visual editing, layout control, and real-time editorial preview. Editors went from composing pages to filling in form fields blind and filing tickets for changes they used to make themselves.

The industry tried to patch around this - bespoke preview services, visual editors bolted onto the front end, what amounted to Storybook pressed into service as a content tool. None of it fully closed the gap.

Drupal Canvas, which shipped as the default editing experience in Drupal CMS 2.0, closes it a different way. It delivers a true-to-life editing workspace where content creators edit layouts live in the browser, and the site still ships as a high-performance decoupled front end. The CMS stopped being the bottleneck and became the conductor. You keep Next.js or Astro, and you get the editorial experience back.

The Bigger Shift: The CMS Became a Harness

Something larger is happening underneath all of this. For most of the last two decades, the job of a CMS was to model content and publish it to channels. Through 2024 and 2025, artificial intelligence showed up inside these platforms as a feature - an assist button in a text box that summarized a paragraph or suggested tags when a human clicked it.

By 2026, that framing is obsolete. Artificial intelligence has become infrastructure rather than an accessory: autonomous agents that run scheduled jobs, batch operations, and real-time triggers. Analysts have adopted new vocabulary to match, from agentic experience platforms to AI-ready content management. Three capabilities now separate a platform that is serious about this from one that is not: the Model Context Protocol (MCP), which lets external agents query and update content through one standard interface; autonomous agents that behave like digital teammates; and answer engine optimization, which structures content so it surfaces accurately inside tools like ChatGPT and Perplexity.

And the whole category is converging on the same destination. Headless-native platforms like Sanity, Contentstack, and Storyblok others are all racing to add agents, automation, and AI-assisted authoring. When everyone is heading for the same place, the differentiator is no longer whether a platform has AI. It is how that AI is governed and orchestrated.

So What Is an AI Harness?

Even the most capable models today are prone to hallucination, blind to context they are not explicitly given, and easy to push outside the bounds of what an organization would allow. That is why almost no one uses a raw model directly. They use a harness: the code around the model that improves the quality, safety, and reliability of what comes back. A harness augments the query, enforces guardrails on input and output, and adds tools that give the model real capabilities.

Think of your AI model as the engine: the part that makes your reasoning system go. The harness is the vehicle built around it: the controls that point it in the right direction, change gears when the situation calls for it, and bring it to a stop when needed.

If you list what a good AI harness needs - structured content the model can reason over, access control, deterministic workflows, versioned and reviewable configuration, and centralized governance - Drupal has shipped every one of those for years, for reasons that had nothing to do with AI. The model at the center is a commodity. It is swappable, replaceable, and never the true value driver. Everything Drupal wraps around it is the durable part.

Which leads to the line I kept coming back to: what drives the value of intelligent systems is your schema, not your prompt. Prompts are transient. Typed fields, entity relationships, and taxonomy give a model unambiguous ground truth instead of prose it has to guess at. And the same JSON:API structure that feeds your decoupled front end is exactly what an external agent inspects and reasons over. Drupal orchestrates the content and context; the external model supplies the intelligence. That division of labor ages far better than trying to build models in-house.

Where You Actually See It Work

Everything above is architecture. The demo is where it becomes visible, and it is the part of the talk the audience responded to most.

I had set up a demo environment for a fictional company called Inspace. Ahead of time, I populated the Context Control Center with the things a real brand would have on hand: a brand guide, a tone of voice, documentation for a component library I had programmatically migrated from Drupal's Mercury design system into Code Components and synced into Astro, and a set of context items describing a new "Executive Suites" offering that Inspace was preparing to launch.

Then, live, I created a new page in Canvas, opened Canvas AI, and gave it one sentence: generate a landing page for the new Executive Suites offering. It went to work, and while it did, I took questions from the audience. A couple of minutes later it had assembled a full landing page out of real components, populated with relevant, on-brand content. To make the point that a human stays in the loop, I dropped an image from the media library into the hero component and published. Then I switched to the Astro app, navigated to the same path, and there was the identical page - every decision the human and the model had made, rendered by the decoupled front end. A complete landing page, start to finish, in a couple of minutes.

The second beat pushed further. The marketing team wants a brand-new component: a call to action for a waitlist. I asked Canvas AI to build a full-width announcement banner with an announcement pill, a headline, a supporting line, and a primary call to action. After a short pause, the component appeared in the Canvas interface - colors on brand, formatting consistent with the rest of the library - with its code fully visible and editable and a live preview I could resize to check different breakpoints. I noted that in the real world you might refine the code yourself or ask Canvas AI to iterate, then saved it to the library, dragged it into the Executive Suites page, and published.

When I reloaded the Astro app, it threw a fatal error, exactly as I had planned. The layout now referenced a component the front end did not know about. One npx canvas push from the command line synced the components, a refresh brought the page back, and the new banner rendered cleanly in the Astro layout. That deliberate stumble made the architecture legible: content edits flow to the front end instantly, but new component code is a real, versioned artifact that moves through a real workflow.

I closed the demo by going back to the Context Control Center, because that is the intelligence that made the rest possible. This is what AI prompt grounding looks like in practice: before a single token is generated, each request is automatically supplied with the brand voice, domain knowledge, and guardrails relevant to the task at hand. Some context items are global and travel with every request. Others are scoped specifically to working in Canvas. Others still apply only to content about the Executive Suites program. All of them were assembled automatically behind those short prompts - which is why one sentence was enough to get on-brand, relevant output. I finished on the form for managing a single context item, showing the range of ways its use can be scoped and restricted. Compliance before generation, not review after.

Why Enterprises Can Trust It

For regulated and enterprise teams, governance is where this stops being a demo and starts being a decision. Drupal is model-agnostic by design: dozens of providers sit behind one abstraction layer, spanning cloud services like OpenAI, Anthropic, and Gemini as well as self-hosted options like Ollama and Mistral for data sovereignty. Swapping providers is a configuration change, not a rewrite of your schemas or your logic.

Agents act inside Drupal's existing permission model which includes the Access Policy API, so the access logic that already governs your people governs your agents too - no separate guardrail layer to maintain. Deterministic orchestration through the Event-Condition-Action (ECA) or FlowDrop frameworks handle rules-based logic that costs no tokens and never hallucinates, which is a useful reminder that the cheapest, most reliable AI call is often the one you do not make. And because that orchestration lives inside the platform as native state machines - ECA for event-driven rules, Maestro for durable, multi-step approvals - stateful business logic runs where the content lives, rather than being stitched together from external webhooks, serverless functions, and third-party glue code. Guardrails filter sensitive data before it leaves the server, and metering tracks token spend by user and role so finance can see what AI actually costs.

An Honest Read

It doesn't serve anyone to pretend one side wins everything, and I said so in Montréal. The headless-native platforms lead on real things: faster time to value, a cleaner developer experience, and more polished agentic tooling in market today. If those are your priorities right now, they are genuine strengths.

Where Drupal leads is open source with no lock-in and dozens of documented APIs, model-agnostic freedom, deep governance and orchestration, and fit for enterprise, multi-brand, and regulated environments. It is also worth remembering the shape of the thing behind it: an open ecosystem moves at the speed of everyone who needs it to, while a single-vendor roadmap moves at the speed of one company's priorities.

The Takeaway

The way I put it at the end of the talk: we gave up the editorial experience to go headless, and in 2026 we stopped having to. The original headless win is now additive with the editorial win, not traded against it. One structured content model can serve four consumers at once - a decoupled front end, editors in Canvas, internal AI agents, and the wider martech stack over MCP.

Drupal is not a CMS with AI features bolted on. It is a governed AI harness that happens to have been building the right foundations for 20 years. If you want to see it for yourself, start with Drupal CMS 2.0 and Canvas, then explore the AI, context, and MCP modules. For teams that would rather not set up and host Drupal themselves, Acquia Source CMS offers a fully managed on-ramp to the same platform. And if you are ready to help shape where this goes, the Drupal AI Initiative is where the work is happening.

Making that case in Montréal was a highlight of my year. If you were in the room, thank you - the questions were sharp, and a few of them changed how I will explain this next time. If you were not, come find me, and we can pick up where the talk left off.

24 Aug 2026 9:50am GMT

The Drop Times: Drupal Security Team Marks 16 Contributed Projects Unsupported in Ten Weeks

The latest three projects have limited reported use, but the pattern extends beyond their reach. For affected site teams, the recurring security response is to uninstall the project rather than install an update.

24 Aug 2026 7:30am GMT

The Drop Times: What Becomes Valuable When Code Gets Cheap?

This week's release of Drupal AI Context Beta 4 added taxonomy-based context selection, priority controls, workflow states, and token-budget visibility. Kristen Pol, primary maintainer of Context Control Center, said the project is moving towards its first release candidate, while Drupal.org release notes list 70 credited issues in the beta. The additions put more structure around deciding what information reaches an AI agent before it acts.

The release arrived as Drupal founder Dries Buytaert was asking a broader question about what happens when AI makes code cheaper to produce. In a 17 August 2026 blog post, Dries argued that as application functionality becomes easier to recreate, commercial value may shift towards dependable operation: deployment, security, scaling, monitoring, and reliable service over time. His argument is about software economics rather than AI context, but it points to the same larger change: implementation is no longer the only scarce input.

The DropTimes' 18 August interview with Kristen showed where that shift meets Drupal AI. Context Control Center can use moderation, revisions, permissions, scheduling, and scopes to govern the knowledge supplied to a model, but those controls cannot guarantee how the model will respond. Requirements that cannot tolerate probabilistic behaviour still need deterministic rules, validation, access controls, or human approval.

A similar distinction appeared in open-source development. Symfony founder Fabien Potencier began an issue-first contribution experiment for Symfony Language Tools on 19 August 2026. The experiment applies only to that repository. When coding agents can handle more of the implementation, the context supplied by the person reporting an issue - including the application setup, configuration, failure conditions, and intended behaviour - becomes a larger part of the contribution.

The same pressure appears after generation. Content Sync's Drupal governance argument is that faster content creation does not remove decisions about ownership, approvals, local adaptation, and which version remains authoritative. AI can reduce drafting time while leaving organisations with more material to review, maintain, and govern.

These developments put the difficult work somewhere other than generation alone. Faster implementation does not define the problem, determine which knowledge is authoritative, establish the constraints, review the result, or make the finished system dependable. Code may become easier to produce without making context, validation, operations, or human judgement easier to replace.

At The DropTimes' August Open Town Hall on 19 August 2026, the editorial team described a similar shift in its AI coverage: looking more closely at agent context, permitted actions, validation, and human review, alongside a broader effort to distinguish what sources claim from what available evidence establishes.

Follow The DropTimes on LinkedIn, X, Bluesky, and Facebook, or join #thedroptimes on Drupal Slack.

This issue of Editor's Pick was written and curated by Allen Jason.

24 Aug 2026 5:15am GMT

DDEV Blog: Umbraco on DDEV: .NET, SQL Server, and the generic project type

DDEV and Umbraco logos joined by a plus sign

DDEV's generic project type will run anything that brings its own web server, and people already use it for Node and other stacks. Umbraco is a less-travelled case: .NET, Kestrel, and SQL Server. I wanted to know how much of the DDEV experience still holds up there. Clone a repository, run one command, have a working site and database a few minutes later.

Most of it holds up. The result is umbraco-clean-ddev, which runs Umbraco on .NET 10 with SQL Server and Adminer, and gets a new developer going with a single ddev start. What took the time was a handful of places where DDEV expected something I had not worked out yet.

What I wanted out of it

I wanted four things out of this, and nothing more ambitious than that.

  1. One command for someone joining the project
  2. Nothing installed on my own machine: no SQL Server, no .NET SDK, none of the project's other dependencies.
  3. Projects that stay out of each other's way.
  4. A way to take a backup from Umbraco Cloud and debug against it locally.

DDEV already does all of this elsewhere. The Umbraco Cloud backup turned out to be the least transferable: ddev import-db and ddev export-db work on the database container DDEV manages, and this project omits that container entirely. Anything equivalent I would have to write myself.

Keeping the dependencies off my machine also makes the project easier to hand to someone who has never worked with .NET. The SDK and SQL Server both live in containers, so trying Umbraco does not start with installing either of them locally. Clone the repository, run one command, and the CMS is there to look at.

The parts that needed working out

The generic project type

DDEV's generic type doesn't start nginx or PHP-FPM, which is what you want when the application brings its own web server:

# .ddev/config.yaml
name: umbraco-clean
type: generic
docroot: ""
webserver_type: generic
omit_containers: [db]
disable_settings_management: true

omit_containers: [db] drops DDEV's MariaDB, since SQL Server runs as a separate service and MariaDB would only sit there idling.

A generic web server type also emits no default router configuration, so without one, every request 404s. web_extra_exposed_ports supplies it:

# .ddev/config.yaml
web_extra_exposed_ports:
  - name: umbraco
    container_port: 80
    http_port: 80
    https_port: 443

Those two port numbers being equal matters. DDEV builds the Traefik backend URL from http_port rather than container_port, so an otherwise reasonable pairing of container_port: 8080 with http_port: 80 sends traffic to port 80 in the container and returns a 502. I lost a while to that one before reading the router configuration it generates.

The .NET SDK is not in the web image

DDEV's web image has no .NET SDK, so .ddev/web-build/Dockerfile.dotnet adds one. The important thing about that file is what it does not contain:

# .ddev/web-build/Dockerfile.dotnet
RUN curl -fsSL https://packages.microsoft.com/config/debian/13/packages-microsoft-prod.deb -o /tmp/pmp.deb \
    && dpkg -i /tmp/pmp.deb \
    && rm /tmp/pmp.deb \
    && apt-get update \
    && ACCEPT_EULA=Y apt-get install -y dotnet-sdk-10.0 mssql-tools18 \
    && rm -rf /var/lib/apt/lists/*

RUN dotnet tool install --tool-path /usr/local/share/dotnet-tools microsoft.sqlpackage

ENV PATH="$PATH:/usr/local/share/dotnet-tools:/opt/mssql-tools18/bin"

There is no FROM line. DDEV prepends its own, and adding one starts a fresh stage that throws away the user setup, supervisord, healthcheck and tooling that make the container a DDEV container. You would have to rebuild all of that yourself, which I do not recommend as a way to spend an evening.

Debian trixie ships no .NET packages, so the SDK comes from Microsoft's feed, registered by installing packages-microsoft-prod.deb. Only .NET 10 publishes an ARM64 build there, so anyone on Apple Silicon has a floor of 10.0.

I also left webimage_extra_packages out of config.yaml on purpose. DDEV injects it ahead of the web-build Dockerfile, so any package listed there is looked up before the Microsoft feed exists.

SQL Server on Apple Silicon

Full SQL Server publishes no ARM64 image, so the database service is Azure SQL Edge. It speaks the same TDS protocol and Umbraco cannot tell the difference.

DDEV does have an add-on for SQL Server, ddev-sqlsrv, which runs full SQL Server and works on Apple Silicon through Rosetta 2 emulation. Apple has announced Rosetta is going away, and I wanted to see what was possible without installing it.

This is the choice I would most like to revisit. If Microsoft ever publishes an ARM64 image, I would rather be running full SQL Server than Azure SQL Edge.

# .ddev/docker-compose.umbraco.yaml
services:
  sqlserver:
    container_name: ddev-${DDEV_SITENAME}-sqlserver
    image: mcr.microsoft.com/azure-sql-edge:latest
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=${MSSQL_SA_PASSWORD}
    volumes:
      - sqlserver-data:/var/opt/mssql
    healthcheck:
      test:
        - CMD-SHELL
        - python3 -c "import socket; s=socket.create_connection(('localhost',1433),2); s.close()"
      start_period: 30s

The healthcheck is a raw socket connection because Azure SQL Edge ships no sqlcmd to query with. It only proves the port is open, and the server accepts logins a moment after that, so the check is weaker than I would like. The 30 second grace period covers the initialisation of the system databases on a first run, which takes about 20 seconds and would otherwise exhaust the retries.

The named volume is why the database survives a ddev restart: without it every restart would hand Umbraco an empty server and trigger the unattended install again.

Alongside sqlserver and adminer, the compose file carries a short web block, the one place this project reaches into the container DDEV owns:

# .ddev/docker-compose.umbraco.yaml
services:
  web:
    depends_on:
      sqlserver:
        condition: service_healthy
    environment:
      - Umbraco__CMS__WebRouting__UmbracoApplicationUrl=${DDEV_PRIMARY_URL}

condition: service_healthy is what the healthcheck above exists for. It holds the web container until SQL Server answers, so dotnet watch is not racing a database that has not finished booting. UmbracoApplicationUrl hands Umbraco the site's real external address rather than letting it infer one from a request that arrived over plain HTTP from the router. Everything else about the web container is configured through config.yaml, so DDEV keeps ownership of its lifecycle.

Keeping Kestrel alive

The application runs as an extra daemon rather than as a container command:

# .ddev/config.yaml
web_extra_daemons:
  - name: umbraco
    command: "dotnet watch run --non-interactive --no-launch-profile"
    directory: /var/www/html/MyProject

That puts dotnet watch under the web container's supervisord, so supervisord restarts it on failure. Overriding the compose command instead would displace DDEV's own entrypoint, and a build error would leave you with a container that is up but serving nothing.

TLS is terminated on the router

Five environment variables, two of them there because the router sits in front of Kestrel:

# .ddev/config.yaml
web_environment:
  - ASPNETCORE_ENVIRONMENT=Development
  - ASPNETCORE_URLS=http://0.0.0.0:80
  - ASPNETCORE_FORWARDEDHEADERS_ENABLED=true
  - DOTNET_CLI_TELEMETRY_OPTOUT=1
  - NUGET_PACKAGES=/mnt/ddev-global-cache/nuget

Kestrel has to bind 0.0.0.0 because the router reaches it across the Docker network rather than over loopback. The forwarded headers setting is easy to miss and confusing when it's absent: the router terminates TLS and forwards plain HTTP, so without it Kestrel decides the request was insecure and generates http:// links on an https:// site.

The NuGet line has nothing to do with the router. It moves the package cache onto a DDEV volume, so a rebuilt container no longer re-downloads every package. The remaining two are ordinary .NET settings that happen to belong here rather than in a launch profile.

Getting it running

ddev start

A pre-start hook copies appsettings.Local.json.example into place when it is missing:

# .ddev/config.yaml
hooks:
  pre-start:
    - exec-host: "bash -c '[ -f MyProject/appsettings.Local.json ] || cp MyProject/appsettings.Local.json.example MyProject/appsettings.Local.json'"

pre-start rather than post-start, because Kestrel comes up with the container: a post-start hook would write the file after the application had already read its configuration. That phase also forces exec-host, since there is no container yet to run the command inside.

On first boot Umbraco runs its unattended install, creating the schema and the default admin user, admin@example.com with password 1234567890.

:::warning[Error 4060 on first boot] The first boot logs Cannot open database "UmbracoDb" with error number 4060. The database does not exist until the unattended install creates it, so Umbraco logs the error a couple of times during startup until it can connect and action the unattended install. :::

After that, ddev dotnet is a passthrough that runs the CLI in the project directory, so nobody needs the SDK on their host to run ddev dotnet build.

Moving the database around

This is the one I care most about: pulling a backup down from Umbraco Cloud and running it locally to test or debug against real content. A local environment that cannot take a copy of the site's actual database will not reproduce the bug you are chasing. DDEV's own import-db and export-db talk to the container this project does not have, and Umbraco Cloud backups come as .bacpac files, so I wrote two commands to handle them:

ddev bacpac-export              # writes UmbracoDb.bacpac to the project root
ddev bacpac-import UmbracoDb.bacpac

Both wrap sqlpackage, which has no apt package and so gets installed via dotnet tool install in the web image build. Import is the harder of the two: sqlpackage requires an empty or nonexistent target, and Kestrel holds an open connection to the database being dropped:

# .ddev/commands/web/bacpac-import
sqlcmd -S sqlserver -U sa -P "${MSSQL_SA_PASSWORD}" -C -Q "
IF DB_ID('UmbracoDb') IS NOT NULL
BEGIN
    ALTER DATABASE UmbracoDb SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
    DROP DATABASE UmbracoDb;
END"

SINGLE_USER WITH ROLLBACK IMMEDIATE forces that connection closed so the drop can proceed. Both commands read and write /var/www/html, which is the host-mounted project root, so a .bacpac downloaded from Cloud goes next to the solution file and imports from there.

Things that look wrong and are deliberate

.ddev/.env holds the SA password, the Umbraco connection string and the SMTP configuration for mailpit, and it is committed. That is a fixed local development credential in the same spirit as DDEV's own db/db/db, and committing it is what makes a fresh clone work with no manual step. On a project with real secrets I would not do this: the file would move somewhere untracked, and a setup step would have to prompt for the values.

appsettings.Local.json is git-ignored and exists for per-developer overrides such as logging levels. Program.cs registers it after CreateBuilder has already added the environment variable provider, so that file wins over .ddev/.env. A ConnectionStrings block there will override the environment, and someone who then edits the password in .ddev/.env will find it has no effect.

Both files the Adminer add-on provides are committed here, the compose file and the ddev adminer launcher, so ddev add-on get never has to run and a clone starts with Adminer already working. docker-compose.adminer.yaml carries one edit: its default depends_on: [db] is gone, because this project has no db container. Adminer's connection defaults are set in docker-compose.umbraco.yaml instead, pointing it at the sqlserver service. Neither committed copy carries a #ddev-generated marker, so DDEV treats them as mine and leaves them alone. The cost is that they no longer update with the add-on.

Try it

The repository is at millnut/umbraco-clean-ddev, built on Paul Seal's Clean starter kit. Clone it, run ddev start, and you should have Umbraco and SQL Server running without either of them touching your machine directly.

It is still a bespoke setup rather than something reusable. The .NET SDK install, the SQL Server service and the bacpac commands are all things I now maintain by hand, and an add-on would be a better home for most of them. If you work with Umbraco or .NET and want to try it, I would be glad to hear what breaks: I have only run this on my own machine, against one project.

24 Aug 2026 12:00am GMT

23 Aug 2026

feedDrupal.org aggregator

Gspikes: State of Drupal 7 in 2026: How Many Sites Are Still Running It?

Nineteen months after Drupal 7's final end of life, 29.7% of all Drupal websites still run it - and half the Drupal web runs a version with no security support. The numbers, the methodology, and the four ways out. Updated quarterly.

23 Aug 2026 12:55am GMT

21 Aug 2026

feedDrupal.org aggregator

Gspikes: The 10 Drupal SEO Modules That Matter in 2026 — and How to Configure Each One Properly

The definitive configuration guide to Drupal's SEO module stack: Pathauto, Redirect, Metatag, Simple XML Sitemap vs XML Sitemap, Schema.org Metatag, and five more - with the exact settings I use on every build and the mistakes I keep finding in audits.

21 Aug 2026 11:07pm GMT

Replatform Radar: Drupal to Headless: The Node IDs That Break the Move

When you move a Drupal site to a headless CMS, the thing most likely to break silently is not your content. It is the invisible wiring between pieces of it. Drupal stores relationships as numeric IDs (node 4127, term 88, media 903), and almost every headless platform mints brand-new IDs the moment you import. So every taxonomy tag, every embedded image, every "related articles" block that pointed at an old number now points at nothing, or worse, at whatever content happened to inherit that number. The pages still render. The links inside them just quietly go nowhere. Here is the scene that keeps happening. The migration "succeeds." Every article is present, the word counts match, everyone high-fives. Then two weeks later someone notices the related-content sidebar is empty on 8,000 pages, half the article hero images resolve to a 404, and the tag pages that used to rank now list either…

Read the rest at Replatform Radar

21 Aug 2026 2:00pm GMT

Acquia.com - Drupal Blog: From Headless CMS to AI Harness: What I Took to Decoupled Days

Drupal turns decoupled architecture into a governed AI harness, combining live visual editing with agent-ready content schemas.

21 Aug 2026 5:17am GMT

20 Aug 2026

feedDrupal.org aggregator

Talking Drupal: Talking Drupal #566 - DrupalEasy: Responsible Drupal AI

Today we are talking about Drupal, AI, and learning to use it responsibly with guest Mike Anello. We'll also cover Entity Mesh as our module of the week.

For show notes visit: https://www.talkingDrupal.com/566

Topics

Resources

Guests

Mike Anello - drupaleasy.com ultimike

Hosts

Nic Laflin - nLighteneddevelopment.com nicxvan John Picozzi - epam.com johnpicozzi JD Flynn - dorficus

MOTW Correspondent

Martin Anderson-Clutz - mandclu.com mandclu

20 Aug 2026 6:00pm GMT

Mike Herchel's Blog: I’m Joining Acquia!

I'm Joining Acquia! mherchel

20 Aug 2026 3:10pm GMT

A Drupal Couple: A conversation in Cartagena

A conversation in Cartagena

Imagen
The clock tower gate of Cartagena's walled city, with the fortified wall, the bay, and modern towers on the horizon.
I spent part of a trip talking with an architect and a facade specialist about how buildings behave, and then about when to service them. The systems hold the facts. A person holds the reasoning that turns those facts into a decision, and nobody writes that part down. Most of what follows is me wondering, and I say so where I'm guessing.
what is next in the AI era
Drupal
Drupal Planet
AI
AI Agents
context engineering
operations
knowledge management
Latin America

Add new comment

20 Aug 2026 2:59pm GMT

Specbee: Why and how to migrate your DotNetNuke (DNN) site to Drupal

Running on DotNetNuke (DNN)? We highly recommend a CMS migration to the latest release of Drupal. It is packed with all the features you have been wishing for! Learn why you should make that move and how you can do it.

20 Aug 2026 9:31am GMT

DrupalCon News & Updates: Submissions are closed. Nominations coming soon!

The International Splash Awards 2026 have reached a new milestone, with 40% more submissions compared to last year.

Image
Splash Award picture

A huge thank you to everyone who submitted a project and helped make this year's edition even bigger.

The jury is now reviewing the submissions, with nominations set to be announced in early September.

We look forward to celebrating the projects and teams behind them during DrupalCon Rotterdam 2026.

Stay tuned. The nominations are coming soon.

20 Aug 2026 9:30am GMT