Migrating from Octopus Deploy
YakDeploy imports an Octopus project's shape so you don't rebuild from scratch, and the pricing works differently — you're not metered per deployment target.
Why teams switch
- No per-target licensing. Octopus charges by the number of deployment targets; YakDeploy's plans cap projects/targets/runners generously and never meter deployments. Deploy to 5 VMs or 50 — the bill doesn't move.
- Self-host is free at full limits (the cloud is what's metered), so your prod SSH keys never have to live in someone else's cloud.
- Built for agents. A first-class MCP surface — an AI agent can deploy, roll back, and diagnose failures. Octopus has no equivalent.
Concept mapping
| Octopus | YakDeploy |
|---|---|
| Space | Account |
| Project | Project |
| Environment | Environment |
| Deployment target / Tentacle | Target + Runner |
| Step / Action | Step (recipe) |
| Release & Channel | Release (with channel) |
| Lifecycle | Environment rank + windows/freezes |
| Runbook | Runbook |
| Variable (+ scopes) | Variable (+ scopes) |
Importing
Export your Octopus project as JSON (its REST API returns the project, deployment process,
environments, and variables) and import it from
Projects → Import Octopus
(or POST /api/v1/projects/import/octopus
/ the import_octopus
MCP tool).
YakDeploy maps environments, variables (secret values are never carried — you re-enter them),
and the recognizable step types to their nearest recipe. Steps with no equivalent become
editable shell placeholders and are listed so you can port them deliberately — an honest
partial import beats a false-complete one.
Reliability
The engine runs on Elixir/Oban: deployments are durable jobs (at-least-once, rescued if a node dies), logs stream over PubSub and replay by cursor, and per-environment serialization means two releases never interleave on the same hosts. For a small team the supported HA story is single-node plus restore-from-backup in minutes — see Runners and the self-host guide.