Coming from Dokploy
If you run apps on Dokploy, most of what you do there has a direct equivalent in isb, and the web UI follows Dokploy's layout on purpose: projects with environments, an app's General, Environment, Domains, Deployments, Logs and Monitoring tabs, one-click templates. What changes is underneath. Dokploy runs every service on one shared Docker daemon; isb runs each org in its own restricted incus project, with unprivileged system containers (or VMs), its own network and quotas, so tenants are really apart (Security model). And agents are first-class operators, through each org's MCP server (Agents and MCP).
The model#
| Dokploy | isb |
|---|---|
| Organization | An org: an incus project with its own bridge, network ACL and quotas. |
Project, environment (default production) |
The same: a project with environments, production first. Each environment runs as one stack, <project>-<env>. |
| Application (git or image source) | An app: --image REF or --git URL with a builder. Zip uploads are not a source. |
| Compose service | A stack: a compose file in isb's format (isb stack deploy, or the stack_deploy tool). |
| Database service | A database: Postgres, MySQL, MariaDB, MongoDB or Redis, with generated credentials. libSQL is not offered. |
| Template | A template; Dokploy's own catalog can be added and is translated strictly. |
| Docker Swarm on one host | The isb serve daemon: replicas, health checks, a load balancer, rolling updates and rollbacks (Stacks). |
| Remote servers over SSH | Servers: isb server add bootstraps a box over SSH once, then talks to its agent over mutual TLS. An org is placed on one server for good, or in a dedicated VM. |
Day to day#
| In Dokploy | In isb |
|---|---|
Environment tab (.env editor) |
isb app env / env-set, or the Environment tab. Secrets are org secrets referenced as ${{secret.NAME}}; values are never shown back (Deploy apps). |
| Shared project or environment variables | Per app only. Share a value by putting it in an org secret and referencing it from each app. |
| Deploy button, deployment history, rollback | isb app deploy, deployments, rollback (last 30 kept, image pinned by digest; a rollback reuses the old image and settings without building). |
| Deploy webhook | One per app, POST /api/v1/webhooks/<org>/<app>, signed for GitHub, GitLab, Gitea and Forgejo, or ?token= (Webhooks). Bitbucket and GitHub Apps are not supported. |
| Preview deployments | Previews per pull request, isolated from production, with fork pull requests off by default. |
| Builders: Nixpacks, Railpack, Dockerfile | The same three, in a throwaway sandbox (a VM by default for git apps) (Builds). Heroku and Paketo buildpacks and the static builder are not offered; Railpack builds static sites. |
| Registries | A local registry per host, one repository per org. External registries are pulled from (docker:, ghcr:, quay:, oci:) but not pushed to. |
| Domains, Let's Encrypt, sslip.io names | domains: on an app, certificates from Let's Encrypt through Caddy, host: auto for a generated sslip.io name, or the org's own Cloudflare Tunnel (Domains and ingress). Custom certificates, basic auth and regex redirects are not supported. |
| Mounts: volume, file | Named volumes (NAME:/path) and files (an org secret's value as a file). Apps cannot bind-mount host paths. |
| Database backups to S3 | Backups: the engine's own dump streamed to any S3-compatible bucket, on a cron schedule, with keep. Restores go into the same database or a new one beside it. |
| Volume backups | Volume snapshots, backups and staged restores, restored beside the live volume. |
| Schedules | Jobs in a running replica or a one-off instance of the app's image. Commands on the host are not a job target. |
| Notifications | Channels: webhook, Slack, Discord, Telegram and email. Other providers can be reached through a webhook. |
| Monitoring | Per-replica CPU, memory, network and disk history, 30 days (Metrics), and the Monitoring tab. |
| Logs, web terminal | The Logs tab (isb stack logs) and a terminal into any replica; plus SSH into an org's instances. |
| Users: email and password, GitHub, Google, passkeys, invitations, API keys | The same, plus any OpenID Connect provider (Sign-in). API tokens are Authorization: Bearer isb_tok_..., optionally narrowed by scope. TOTP two-factor is not built in; put SSO or Cloudflare Access in front. |
| Roles owner, admin, member | owner, admin, member and a read-only viewer, per org (Users, roles and superadmins). Grants are per org, not per project. |
| Command palette | ⌘K / Ctrl+K in the web UI. |
Bringing your apps over#
There is no import of Dokploy's database. Recreate each service in isb:
Create the org, then a project with the same environments (
isb project create shop --env production --env staging).For each application,
isb app createwith the same image or repository and builder, then paste its.envintoisb app env-set, moving any secret values into org secrets first (isb secret create). Point the repository's webhook at the app's new webhook URL.For each database,
isb db createwith the same engine, then load a dump taken on Dokploy with the engine's own tools: for example, publish the new database on loopback (isb db create pg --project shop --engine postgres --publish 127.0.0.1:15432), read its password withisb db show pg --show-password, and runpg_restoreagainst127.0.0.1:15432.isb backup restorereads only objects isb's own backups wrote (Databases), so set up an isb backup schedule once the data is in.For a template, deploy isb's built-in one if there is one, or add Dokploy's catalog and deploy the same template from it:
isb template catalog add dokploy --format dokploy https://templates.dokploy.com isb template show dokploy/ntfy # compatibility: clean, notes or refused, with reasons isb --org acme template deploy dokploy/ntfy --project toolsA Dokploy template that asks for something isb will not grant (privileged mode, host paths, the Docker socket, host networking) is refused with the reason (Dokploy templates).
Move the domains last: add them to the apps, deploy, and switch DNS once
isb stack psshows the certificate issued.