Skip to content

System Services Overview

dde manages two categories of services: global services that provide shared infrastructure, and project services that provide per-project databases and tools.

Global services are started by system:up and shared across all projects.

ServicePurpose
TraefikReverse proxy with TLS (ports 80, 443)
dnsmasqDNS for .test domain (port 53)
SSH-AgentSSH key sharing
MailpitEmail testing (port 8025)

Global services are automatically started when running project:up if they are not already running.

Project services are declared in the project’s .dde/config.yml. They are versionable: each project can request a specific version of a service.

ServiceDefault VersionDefault Port
MariaDB11.83306
PostgreSQL18.35432
Valkey96379
Mailpitlatest8025

Project service containers follow the naming pattern dde-{service}-{version}. Examples: dde-mariadb-11.8, dde-postgres-18.3, dde-valkey-9.

When a service runs at the default version, it receives a network alias matching the service name. This allows projects to connect using a simple hostname (e.g. mariadb, valkey). Non-default versions do not get an alias.

Default-version services bind to the standard port on localhost (e.g. 3306 for MariaDB). Non-default versions receive a dynamically allocated port starting at 10000.

Only one version of a service can run at a time. If another version of the same service is already running, dde will report an error to prevent port conflicts.

Declare services in .dde/config.yml:

services:
- name: mariadb
- name: valkey

Short form (defaults to the global default version):

services:
- mariadb
- valkey

With explicit version override:

services:
- name: mariadb
version: "10.6"

Supported service names: mariadb, postgres, valkey, mailpit.