XenoDeploy compared
XenoDeploy next to Laravel Envoyer, DeployHQ, Deployer and Transmit, feature by feature.
Deploying PHP sites, side by side
| XenoDeploy In beta | Envoyer Subscription | DeployHQ Free plan and subscription | Deployer Free, command line | Transmit Paid | |
|---|---|---|---|---|---|
| Before the deploy | |||||
| A plan before every deployThe commit, changed files, hooks and migrations | XenoDeploy: Yes | Envoyer: No | DeployHQ: Partly changed files, not commands | Deployer: Partly the order of tasks | Transmit: Partly files only, with Simulate |
| Stops if files on the server changedInstead of overwriting them | XenoDeploy: Yes | Envoyer: No | DeployHQ: Partly a check you write yourself | Deployer: No | Transmit: No |
| Builds from a clean copy of the commit | XenoDeploy: Yes on your Mac | Envoyer: Yes on your server | DeployHQ: Yes on their servers | Deployer: Yes on your server | Transmit: No uploads the folder as it is |
| Going live | |||||
| Atomic releasesSwitched live in one step | XenoDeploy: Yes | Envoyer: Yes | DeployHQ: Yes SSH servers | Deployer: Yes | Transmit: No |
| One-click rollback | XenoDeploy: Yes | Envoyer: Yes | DeployHQ: Yes | Deployer: Yes one command | Transmit: No |
| Checks the site as it goes live | XenoDeploy: Yes | Envoyer: Partly after the switch, no rollback | DeployHQ: Partly in beta, no rollback | Deployer: No write your own | Transmit: No |
| Uploads only what changed | XenoDeploy: Yes | Envoyer: No the whole project each time | DeployHQ: Yes | Deployer: Partly with the rsync recipe | Transmit: Yes |
| Keeps going if your connection drops | XenoDeploy: Yes | Envoyer: Yes hosted | DeployHQ: Yes hosted | Deployer: No | Transmit: No |
| Your servers | |||||
| Works on shared hostingAny host with SSH and PHP | XenoDeploy: Yes | Envoyer: Partly Ubuntu and FreeBSD servers | DeployHQ: Yes FTP too | Deployer: Partly needs SSH and git | Transmit: Yes |
| Nothing to install on the server | XenoDeploy: Yes | Envoyer: Yes | DeployHQ: Yes | Deployer: Partly git on the server | Transmit: Yes |
| Presets for Laravel, Statamic and WordPress | XenoDeploy: Yes | Envoyer: Partly Laravel | DeployHQ: Partly Laravel and WordPress | Deployer: Yes | Transmit: No |
| Your own SSH, no service holding your keys | XenoDeploy: Yes | Envoyer: No Envoyer holds a key | DeployHQ: No DeployHQ holds a key | Deployer: Yes | Transmit: Yes |
| Tools | |||||
| No account needed | XenoDeploy: Yes | Envoyer: No | DeployHQ: No | Deployer: Yes | Transmit: Yes |
| No telemetryNo usage analytics sent to the vendor | XenoDeploy: Yes | Envoyer: No collects usage data | DeployHQ: Yes analytics on public pages only | Deployer: No on unless you set DO_NOT_TRACK | Transmit: No on unless you turn it off |
| Command line with JSON output | XenoDeploy: Yes | Envoyer: Partly API only | DeployHQ: Yes | Deployer: Partly no JSON for deploys | Transmit: No |
| Native Mac app | XenoDeploy: Yes | Envoyer: No web dashboard | DeployHQ: No web dashboard | Deployer: No command line | Transmit: Yes |
| Join the beta | |||||
A dash means the feature isn’t offered or isn’t in that app’s own documentation. Partly means it’s there with the limit shown.
Checked October 10, 2026 against each app’s own website and documentation. Sources: Envoyer docs, Envoyer hooks, DeployHQ features, DeployHQ support, Deployer docs, Deployer recipes, Transmit, Transmit sync. Spot something out of date? Tell us.
Envoyer, DeployHQ, Deployer and Transmit are trademarks of their respective owners. XenoDeploy is independent and is not affiliated with or endorsed by them.