Zeltro › A DDEV alternative that shares services across every project
Looking for a DDEV alternative
DDEV gives each project its own service stack. Zeltro gives every project on the machine one shared set — one Postgres, one MariaDB, one Redis — plus Python alongside PHP and Node, and an AI agent that knows where it is.
DDEV is a good tool. It is mature, it is well documented, and for a single Drupal or WordPress site it does exactly what it says. If it is working for you, there is no reason in this page to switch.
People usually go looking for an alternative for one of three reasons: the per-project service stacks add up, the project is not PHP, or an AI agent is now doing the building and the setup needs to be somewhere it cannot wander off.
One set of services, not one per project#
This is the structural difference. DDEV, Lando, Laragon and Herd all give each project its own database container. That is clean isolation, and it is also seven Postgres containers when you have seven projects.
Zeltro runs one zeltro-postgres, one zeltro-mariadb, one
zeltro-redis, one zeltro-mongo and one zeltro-memcached, shared by
every project on the machine.
| Per-project stacks | Zeltro | |
|---|---|---|
| Ten projects | Ten database containers | One of each |
| Memory | Roughly 100 MB per duplicate Postgres | One instance |
| Project A reading project B's data | Manual networking | Same hostname works from both |
| Reaching a project | localhost:3001, :3002, :3003 |
http://project-name/ |
The hostname part matters more than it sounds. http://my-api/ resolves the same
way from your browser and from inside another project's container, so a Laravel
app can query another project's database, or fetch from another project's API,
with nothing configured.
The trade is real and worth stating: shared services mean shared versions. If one project needs Postgres 14 and another needs 17, per-project isolation is genuinely the better model and DDEV is the better tool for that job.
Python, not just PHP and Node#
DDEV describes itself as a Docker-based local PHP and Node.js environment, and that is accurate — it is excellent at PHP. Herd is macOS and PHP. Laragon is Windows and PHP-centric.
Zeltro ships three base images — PHP 8.3, Python 3 and Node 22 — each with nginx, supervisor and every database driver already compiled in. Django, FastAPI and Flask sit alongside Laravel and WordPress rather than needing a different tool.
No per-project config file#
Lando has .lando.yml. DDEV has .ddev/config.yaml. Zeltro generates the compose
file for you and adapts an existing one if the project already has it — bundled
database services are rewired to the shared ones automatically, and the original
is preserved as docker-compose.upstream.yaml so nothing is lost.
zeltro new laravel my-app # scaffold a new project
zeltro setup existing-project # adapt one you already have
zeltro clone work-directly https://github.com/someone/repo
Built for an agent to work inside#
This part has no equivalent in the older tools, because they predate the problem. Left alone in a directory, an AI coding agent will invent its own infrastructure — its own ports, its own bundled database, its own compose file — with no idea that twelve other projects exist on the machine.
Zeltro gives the agent a fixed environment: known runtimes, shared services,
hostname routing, and an AGENTS.md in every project describing its URL, database
and commands, so a fresh session picks the project up without rediscovering it.
Honest differences#
DDEV is more mature. More users, more documentation, more edge cases already found. Zeltro is young.
DDEV isolates better. Per-project stacks mean per-project versions. Shared services are a deliberate trade, not a free win.
DDEV has first-class CMS tooling. Drupal, TYPO3 and Magento workflows are a long-standing focus there.
Zeltro does not deploy either. Neither tool hosts anything; that is a separate job.
Questions
Can I run Zeltro and DDEV on the same machine?
Generally yes — they use different container names and Zeltro routes by hostname rather than binding common ports. The thing to watch is anything already bound to port 80. If you are migrating, the simplest path is to stop one while you test the other.
What happens to my existing docker-compose.yaml?
Zeltro adapts it. Bundled database services are removed and the app is repointed
at the shared ones, with connection settings written into the project's .env.
Your original file is kept as docker-compose.upstream.yaml, so you can always
see what it started as.
Does it work on Windows?
Through WSL2. Zeltro is Docker-based and needs Linux underneath. Laragon remains the better answer if you specifically want a native Windows stack with no WSL2.
What database versions does it use?
One shared instance each of MariaDB, Postgres, MongoDB, Redis and Memcached. If a project needs a specific major version different from the shared one, per-project tooling like DDEV is the better fit — that is the honest limit of this design.
Is it actually free?
Yes, open source, no paid tier. If you use the AI commands you pay whoever supplies the model, which can be a subscription you already have or a local model that costs nothing.
Checked 2026-08-22. Other products change often — if something here is out of date, tell us and it gets fixed.