A polished desktop app for managing DDEV local development
environments — everything the ddev CLI does, behind a beautifully designed UI.
Built with Electron · React 19 · Tailwind v4 · shadcn/ui · Animate UI
DDevUI is a desktop app for DDEV: every project, its status, logs,
database, add-ons and configuration in one place — no ddev subcommands or YAML editing required.
Start and stop projects, control individual services, monitor CPU and memory, wire projects
together, open a real shell into any container, import/export databases, manage snapshots,
install add-ons, and create new projects from a wizard — all from a single window.
It talks to DDEV exclusively through ddev <cmd> --json-output — no parsing of human text, no
hidden shell commands, just typed, allow-listed invocations spawned with arg arrays (never a
shell). Project lists poll in the background, and long-running commands stream their output live.
brew install --cask shiv122/tap/ddevuiThe app opens normally, with no Gatekeeper prompt — the
cask clears the download quarantine flag on install.
Update with brew upgrade --cask ddevui.
Grab the installer for your platform from the latest release:
| Platform | File |
|---|---|
| macOS (Apple Silicon) | ddevui-<version>-mac-arm64.dmg |
| macOS (Intel) | ddevui-<version>-mac-x64.dmg |
| Windows | ddevui-<version>-win-x64.exe |
| Linux | ddevui-<version>-linux-x86_64.AppImage · -linux-amd64.deb |
Note
macOS direct download. The builds are ad-hoc signed but not notarized (no Apple Developer ID), so a browser download triggers Gatekeeper's "could not verify" prompt. Either use Homebrew above (no prompt), right-click the app → Open and confirm (once), or clear the quarantine flag:
xattr -dr com.apple.quarantine /Applications/DDevUI.appDDevUI is a front-end for DDEV — you still need DDEV and a container runtime installed:
- DDEV v1.24+
- A Docker provider — Docker Desktop, OrbStack, Colima, or Rancher Desktop
The built-in Doctor page checks all of this and tells you exactly what's missing (and lets
you point the app at a ddev/docker binary manually if it isn't on the default PATH).
- Dashboard — every project with live status, filtering and animated stats; one-click start / stop / restart / rename / delete / open-in-browser / Mailpit, plus a Stop all for everything that's running.
- Project detail — environment overview (PHP, webserver, DB, Node, Mutagen, router), all URLs, and a live Xdebug toggle that reads the real runtime state, not just the config.
- Services — a card per running service (db, redis, phpMyAdmin, …) with its image, status and endpoints; start / stop / restart, open a shell, tail logs, set CPU & memory limits, and view the rendered Docker Compose plus any override files.
- Connections — a drag-and-drop map to let one project consume another's service (database, cache, …). Pick a provider service and DDevUI injects the host/port env vars and restarts the consumer; connected projects cluster into editable groups. Built on DDEV's shared network, so reachability needs no extra config.
- Resource monitoring — live per-project CPU and memory charts, plus per-service CPU/memory limits you can set from the UI.
- Database tools — connection credentials with copy buttons, open the database in an external client (TablePlus, Sequel Ace, DBeaver), dump import/export via native file dialogs, and snapshots (create / restore / delete).
- Interactive terminal — a real shell into any service via
ddev ssh, powered by xterm.js and a PTY — not a one-shot command box. - Logs — stream
ddev logsper service with follow mode. - Config — UI-driven settings (PHP version, database, webserver, performance mode, URLs,
PHP extensions, hostnames) that run
ddev config, plus a config viewer. - Create-project wizard — pick a folder and project type; DDevUI suggests a framework-aware bundle of add-ons (e.g. Laravel → Redis, queue, Buggregator) you can toggle, with an optional database. It configures the DDEV project — it doesn't scaffold application code.
- Add-on registry — browse the full registry (
ddev add-on list), filter official/community, sort by stars. Open an add-on to see exactly which projects already have it, then install it to one or many at once — or remove it. - Advanced — custom Docker services & compose files, Dockerfile tweaks, custom commands, TLS certs, Traefik config and hooks, each with clear warnings.
- Sharing — expose a project publicly via
ddev share(ngrok / cloudflared), entirely optional and never blocking. - Activity — every ddev command the app runs, with live streamed output and cancel.
- Doctor — checks the ddev binary, Docker CLI + daemon and mkcert; starts your container
runtime (Docker Desktop, OrbStack, Colima, Rancher) when it's down and flags when the DDEV
CLI is behind the latest release; runs the deep
ddev debug dockercheck; shows the fullddev versiontable, and lets you point at addev/dockerbinary manually. - Editor — set your preferred editor and open a project's folder in it in one click.
- Menu bar — a tray with live project status and quick lifecycle controls, with an optional launch at login so it's always available.
- Light & dark themes — monochrome, metallic design that follows a toggle; the dock and menu-bar icons follow along too.
DDEV has a lively ecosystem of GUIs and IDE integrations — there is no single "official" desktop
app today (the original ddev/ddev-ui is no longer
maintained). Here's an honest map of the main options and where DDevUI fits.
| Tool | Type | Platforms | Price | Best for |
|---|---|---|---|---|
| DDevUI (this) | Desktop app | macOS · Windows · Linux | Free, MIT | Multi-project workflows: per-service control, cross-project connections, resource monitoring, diagnostics |
| DDEV Manager | Desktop app (Rust) | macOS · Windows · Linux | Free, MIT | A polished cross-platform alternative with app scaffolding installers and in-app auto-update |
| ddevBar | Menu-bar app | macOS | Free | Lightweight one-click start/stop and quick links from the menu bar |
| DDEV-Apple-GUI | Native app (SwiftUI) | macOS | Free, MIT | A native-Mac feel; logs, snapshots and global commands |
| PhpStorm DDEV Integration | IDE plugin | macOS · Windows · Linux (in PhpStorm) | Paid IDE | Zero-config Xdebug and interpreters inside PhpStorm |
| VS Code DDEV Manager | IDE extension | macOS · Windows · Linux (in VS Code) | Free | Driving the current project from VS Code's sidebar and command palette |
Where DDevUI is different. It's a standalone, cross-platform desktop app — not macOS-only and not tied to an IDE — that leans into infrastructure visibility and multi-project work:
- Services tab — inspect and control individual containers and read their rendered Compose, rather than treating a project as one opaque unit.
- Connections — wire one project to another's database/cache/etc. by injecting env vars over DDEV's shared network. We're not aware of another GUI that does this.
- Resource monitoring + per-service limits — live CPU/memory charts and limits from the UI.
- Doctor — guided environment diagnostics when something's off.
All data comes from ddev <cmd> --json-output, which emits NDJSON lines
({level, msg, time}) where structured results carry a raw field. The main process
(src/main/ddev/runner.ts) parses this envelope; long-running commands
stream through an operation manager (src/main/ddev/operations.ts)
that broadcasts typed events to the renderer. The renderer never constructs CLI arguments — it
sends typed OperationRequest objects (src/shared/types.ts) and main maps
them to allow-listed invocations (spawned with arg arrays, never a shell).
src/
shared/ types + IPC channel names (single contract for all layers)
main/
ddev/
binary.ts locate ddev/docker (GUI apps don't inherit shell PATH)
runner.ts NDJSON envelope parser, DdevError
client.ts typed queries: list/describe/version/add-ons/snapshots
operations.ts streamed long-running ops, per-project locking, cancel
terminals.ts node-pty sessions (ddev ssh) for the interactive terminal
doctor.ts environment checks
tray.ts menu-bar presence with live status + controls
ipc.ts ipcMain handlers (queries, ops, dialogs, openExternal)
preload/ contextBridge: window.ddev (typed)
renderer/src/
api/hooks.ts TanStack Query hooks (list polls every 5s)
store/ useSyncExternalStore-based op store + toasts
lib/ router (state-based), query client, theme, ddev options
components/app/ shell, status badges, op console/dock, dialogs
pages/ dashboard, project (overview/services/db/config/…), create,
addons, connections, operations, doctor, settings
pnpm install
pnpm dev # from a VSCode terminal: env -u ELECTRON_RUN_AS_NODE pnpm dev
pnpm typecheck
pnpm build:mac # or build:win / build:linuxRequires Node 20+ and pnpm. Releases are built and published automatically by GitHub Actions
when a v* tag is pushed (see .github/workflows/release.yml).
MIT © Shivesh Tripathi
