Installation
Prerequisites
Section titled “Prerequisites”- Docker Desktop (macOS) or Docker Engine (Linux) — must be installed and running
- mkcert — for generating locally-trusted TLS certificates
- macOS:
brew install mkcert - debian based linux:
apt install mkcert - arch:
pacman -S mkcert
- macOS:
- macOS (x86_64 or arm64) or Linux (x86_64 or arm64)
Installation
Section titled “Installation”macOS (Homebrew)
Section titled “macOS (Homebrew)”brew tap whatwedo/ddebrew install ddedde system:installDebian / Ubuntu (APT)
Section titled “Debian / Ubuntu (APT)”curl -fsSL https://packages.dde.sh/apt/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/dde.gpgecho "deb [signed-by=/usr/share/keyrings/dde.gpg] https://packages.dde.sh/apt stable main" | sudo tee /etc/apt/sources.list.d/dde.listsudo apt updatesudo apt install ddedde system:installAlpine
Section titled “Alpine”curl -fsSL https://packages.dde.sh/alpine/key.rsa.pub -o /etc/apk/keys/dde.rsa.pubecho "https://packages.dde.sh/alpine" >> /etc/apk/repositoriesapk add ddedde system:installArch Linux
Section titled “Arch Linux”echo -e '\n[dde]\nServer = https://packages.dde.sh/arch/$arch\nSigLevel = Required DatabaseOptional' | sudo tee -a /etc/pacman.confcurl -fsSL https://packages.dde.sh/arch/key.gpg | sudo pacman-key --add -sudo pacman-key --lsign-key "$(curl -fsSL https://packages.dde.sh/arch/key.gpg | gpg --with-colons --import-options show-only --import 2>/dev/null | awk -F: '/^fpr/{print $10; exit}')"sudo pacman -Sy ddedde system:installFedora / RHEL / Rocky Linux / AlmaLinux
Section titled “Fedora / RHEL / Rocky Linux / AlmaLinux”sudo curl -fsSL https://packages.dde.sh/rpm/dde.repo -o /etc/yum.repos.d/dde.reposudo dnf install ddedde system:installWhat system:install configures
Section titled “What system:install configures”The system:install command sets up all system-level components that dde needs:
- mkcert — Installs a local root CA into your system trust store. All project certificates are signed by this CA, so browsers trust them without warnings.
- dnsmasq — Configures DNS resolution for
*.testdomains. On macOS this uses/etc/resolver/test; on Linux it integrates with systemd-resolved or NetworkManager. - Traefik — Starts a Traefik v3 reverse proxy container on ports 80 and 443 that routes traffic to your project containers.
- SSH agent — Starts a shared SSH agent container so your SSH keys are available inside project containers.
- Shell completion — Installs completion scripts for your detected shell (Bash or Zsh).
DNS queries are forwarded to 9.9.9.9 and 149.112.112.112 (Quad9) by default. You can override this in the global config at ~/.dde/config.yml.
Nightly channel
Section titled “Nightly channel”A separate dde-nightly package is published from the v2 development branch
on every push. It installs the same dde binary as the stable package but
carries the package name dde-nightly and declares a conflict with dde, so
you can run one channel or the other on a machine — not both.
Pick this only if you actively want to dogfood unreleased code and accept that
nightlies can regress between two pushes. To go back to stable, uninstall the
nightly package and reinstall dde from the stable repo.
macOS (Homebrew)
Section titled “macOS (Homebrew)”brew tap whatwedo/ddebrew install dde-nightlydde system:installDebian / Ubuntu (APT)
Section titled “Debian / Ubuntu (APT)”curl -fsSL https://packages.dde.sh/apt-nightly/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/dde-nightly.gpgecho "deb [signed-by=/usr/share/keyrings/dde-nightly.gpg] https://packages.dde.sh/apt-nightly stable main" | sudo tee /etc/apt/sources.list.d/dde-nightly.listsudo apt updatesudo apt install dde-nightlydde system:installAlpine
Section titled “Alpine”curl -fsSL https://packages.dde.sh/alpine-nightly/key.rsa.pub -o /etc/apk/keys/dde-nightly.rsa.pubecho "https://packages.dde.sh/alpine-nightly" >> /etc/apk/repositoriesapk add dde-nightlydde system:installArch Linux
Section titled “Arch Linux”echo -e '\n[dde-nightly]\nServer = https://packages.dde.sh/arch-nightly/$arch\nSigLevel = Required DatabaseOptional' | sudo tee -a /etc/pacman.confcurl -fsSL https://packages.dde.sh/arch-nightly/key.gpg | sudo pacman-key --add -sudo pacman-key --lsign-key "$(curl -fsSL https://packages.dde.sh/arch-nightly/key.gpg | gpg --with-colons --import-options show-only --import 2>/dev/null | awk -F: '/^fpr/{print $10; exit}')"sudo pacman -Sy dde-nightlydde system:installFedora / RHEL / Rocky Linux / AlmaLinux
Section titled “Fedora / RHEL / Rocky Linux / AlmaLinux”sudo curl -fsSL https://packages.dde.sh/rpm-nightly/dde-nightly.repo -o /etc/yum.repos.d/dde-nightly.reposudo dnf install dde-nightlydde system:installThe nightly package version is a UTC timestamp YYYYMMDD.HHMM, so
apt upgrade / apk upgrade / brew upgrade always picks up the newest
build.
Verify your installation
Section titled “Verify your installation”After installation, verify that everything is working:
dde system:doctorThis runs 11 checks covering:
| Check | What it verifies |
|---|---|
| BinaryPath | dde binary is in PATH and executable |
| DockerAvailable | Docker daemon is reachable |
| DockerCompose | docker compose subcommand is available |
| Mkcert | mkcert binary is installed |
| RootCaTrusted | mkcert root CA is installed in the system trust store |
| Dnsmasq | dnsmasq container is running |
| DnsResolution | *.test domains resolve to 127.0.0.1 |
| Network | The dde Docker network exists |
| Traefik | Traefik container is running and healthy |
| SshAgent | SSH agent container is running |
| Mailpit | Mailpit container is running |
All checks should pass. If any fail, re-run dde system:install or consult the error message for guidance.
Upgrading dde
Section titled “Upgrading dde”After brew upgrade dde / apt-get upgrade dde / …, dde runs system:update
automatically (except on Homebrew, where it is surfaced via caveats) — see
the System Lifecycle guide.