symflip
symflip and Laravel Forge

Forge does zero downtime on one server. symflip does it on all of them.

Keep Forge for your servers. Use symflip to deploy one Laravel project to two, five or twenty of them, with every server built before any goes live and automatic rollback across the fleet if the release fails its health check.

Deploying to two or more servers needs Team (€29/mo, cancel anytime).

What Forge says, in its own words

Forge is a great way to run Laravel servers. On zero-downtime deploys, its own pages set a clear limit, for now:

  • Additionally, Forge only supports deployments with zero downtime on one server, unlike Envoyer which can deploy one project to multiple servers. Forge pricing FAQ [1]
  • Forge has a migration tool for Envoyer, but it is still limited to a single server. If you use Envoyer to deploy to multiple servers, you'll want to keep your subscription for the time being. Forge pricing FAQ [1]
  • Forge's "Migrate to Forge" tool requires that the Envoyer project must be connected to a single server. Forge Envoyer docs [2]
  • Zero-downtime deploys are exclusively available for new sites and can't be added to an existing site later. Forge deployment docs [3]

Note Laravel's own wording: "still" and "for the time being". This may change, and we re-check these pages regularly. Today, if your app runs on more than one server behind a load balancer, Forge puts traffic on both, but it doesn't deploy to both as one release. Forge's load balancing docs [4] cover routing traffic, not coordinated deploys.

What symflip adds on top of Forge

One release, every server.

Add every web server to a symflip project and click deploy. Each server fetches and builds the new release next to the live one. Only when every server is ready does each one switch, with one atomic symlink rename, all in parallel.

No half-built fleet.

If Composer, your build or a hook fails on any server, nothing goes live anywhere. Every server keeps serving the release it had. If a server fails to switch, or the release fails its health check with auto-rollback on, the servers that already switched roll back so the fleet ends on one release. If a rollback itself fails, symflip says so loudly.

Migrations once, not once per server.

Mark one server as primary. php artisan migrate --force runs there, once, before any server goes live. A failed migration stops the deploy with the fleet untouched.

Works on the sites you already have.

symflip deploys into its own directory (releases/, shared/, current), so it doesn't care when the site was created in Forge. Give it a new deploy path, point the site's nginx root at the new current/public once, and turn off Forge's push-to-deploy for that site so a push doesn't trigger both.

Rollback without a rebuild.

symflip keeps previous releases on every server (five by default, and you can change it), so rolling back is a symlink flip. A failed health check can roll the whole fleet back on its own. The one-click rollback button covers single-server projects today.

Nothing to install.

symflip connects over plain SSH. No agent runs on your servers, so nothing changes in how Forge manages them.

What symflip does not do

symflip is not a Forge replacement. It doesn't create servers, install PHP, manage nginx or issue certificates. Keep Forge (or Ploi, or Ansible) for that. symflip takes over the deploy.

Where your keys live

symflip generates a separate Ed25519 deploy key for each server; you only see the public line. Private keys and secrets are encrypted at rest and only decrypted to open an SSH session or write shared/.env. Remove the key from authorized_keys and symflip's access is gone. Or self-host symflip and keep the keys on your own network. How symflip handles your SSH keys and secrets.

Comparison: zero-downtime deploys

symflip and Laravel Forge compared on zero-downtime deploys
Feature symflip Laravel Forge
Zero-downtime deploy, one server Yes, every plan Yes, every plan [1]
Zero-downtime deploy, several servers Yes, from Team (€29/mo) No, Forge points multi-server projects to Envoyer [1][2]
Add to an existing site without recreating it Yes, with a new deploy path and an nginx root change No, new sites only [3]
All servers build before any goes live Yes n/a
Migrations run once on a chosen server Yes n/a
Health check after deploy Yes, with optional automatic rollback Notifies you; no automatic rollback documented [3]
Rollback Symlink flip to a release on disk: one click on single-server projects, automatic on a failed health check Yes, roll back to an earlier deployment [3][5]
Releases kept on disk 5 by default, configurable 4 by default, configurable [3]
Deploy time limit 30 minutes (configurable when self-hosted) 10 minutes; Envoyer's limits apply to Envoyer-linked sites [3]
Server provisioning, PHP, nginx, SSL No Yes [1]
Open source, self-hostable Yes, Apache-2.0 No, hosted service [1]

Do I still need Envoyer?

If you deploy one project to several servers, Forge alone won't do it with zero downtime today, by its own account. Your options are to keep Envoyer, or to move the deploy part somewhere else. symflip is one of those places. If you're weighing the two, read the honest comparison of symflip and Envoyer; it says where Envoyer still wins.

How it fits with Forge

  1. Keep your Forge servers exactly as they are.
  2. Create a symflip project with your repo, branch and a new deploy path, such as /home/forge/example.com-symflip.
  3. Add each server. symflip gives you a deploy key and a one-time setup command to run on it.
  4. Mark one server as primary for migrations.
  5. Deploy once and check it. Then, in Forge, edit the site's nginx configuration and set root to /home/forge/example.com-symflip/current/public. The new path sits next to the site folder, so edit the nginx config directly rather than the web directory field.
  6. Turn off Forge's push-to-deploy for the site, and point the scheduler cron and any daemons at the new current path.

There's a full walkthrough in Migrating a multi-server Envoyer project to symflip. Setup notes for Laravel apps are on zero-downtime Laravel deployment.

Questions people ask

Do I still need Envoyer with Forge?
If you deploy one project to several servers with zero downtime, Forge alone won't do it today, by its own pricing FAQ. You can keep Envoyer or move the deploy to another tool, such as symflip.
Can I turn on zero downtime for an existing Forge site?
Not in Forge: its docs say zero-downtime deploys are only available for new sites. symflip deploys into its own directory, so you can use it with an existing site by giving it a new deploy path and pointing nginx at it.
Does symflip replace Forge?
No. symflip doesn't create servers, install PHP, manage nginx or issue certificates. Keep Forge for that and let symflip run the deploy.
Does symflip install anything on my Forge servers?
No. symflip connects over plain SSH with a deploy key. Nothing runs on the server between deploys.

Laravel, Laravel Forge and Laravel Envoyer are trademarks of their owner. Deployer is an independent open-source project. symflip is not affiliated with or endorsed by either. Competitor details are as published on the cited pages on and may have changed since.

Deploy your whole fleet the way Forge deploys one server.

Start free on one server, no card. Fleet deploys start on Team (€29/mo).