Cipi v5
Cipi 5 · Now available

Your server just got
a serious promotion.

Laravel Octane on FrankenPHP. Horizon and Reverb in one line. PostgreSQL next to MariaDB. Frontend builds on deploy, database snapshots before every migration, wildcard certificates and built-in health checks. Same one-command server. Fourteen new superpowers.

  • 14New capabilities
  • 18New commands
  • 2Database engines
  • $0Forever, MIT
root@vps — cipi
$ cipi self-update
release 5 fetched
migrations applied
vhosts, pools & templates regenerated
$ cipi app create shop --domain=shop.io --octane
FrankenPHP · Octane port 8100
PostgreSQL database + credentials
Horizon · Reverb · scheduler ready
# deploy, snapshot and health check included
$
The headlines
01 — The headlines

Fourteen reasons to
update tonight.

Everything Cipi 5 adds, at a glance. Tap any tile to jump straight into the documentation.

Headline feature
01

Laravel Octane
on FrankenPHP.

Boot the framework once and keep it in memory. Octane apps and classic PHP-FPM apps run side by side on the same server — Nginx proxies to the Octane process, Supervisor keeps it alive, every deploy reloads it cleanly.

cipi app create shop --domain=shop.io --octane
02

PostgreSQL, alongside MariaDB.

Two engines on one box. Pick per app or set a server-wide default — env, backups and restores follow.

cipi db install pgsql
03

Laravel Horizon

Supervised, and restarted on every release.

cipi worker horizon enable
04

Laravel Reverb

Websockets proxied through Nginx, over SSL.

cipi app reverb enable
05

Your frontend builds on the server

Run the build inside the release, right after dependencies. Fail-closed, so broken assets never reach production — and compiled files never reach your repository.

cipi app edit shop --node-build='npm ci && npm run build'
06

Scheduler switch

Cron on or off per app, from the CLI.

cipi schedule on shop
07

Convert FPM ⇄ Octane

Switch runtime on a live app, both ways.

cipi app convert shop --to=octane
08

A snapshot before every risky migration

Opt in per app or per deploy and Cipi dumps the database before the release goes out. A bad migration becomes recoverable instead of fatal.

cipi deploy shop --snapshot-required
09

Instant staging

Clone a production app onto a new domain.

cipi app clone shop --domain=stage.shop.io
10

Resource limits

No app can starve the box any more.

cipi app limits shop --memory-limit=256M
11

Wildcard certificates, without the HTTP dance

Issue and renew through a Cloudflare DNS-01 challenge when a public HTTP endpoint isn't an option. HTTP-01 stays the default.

cipi ssl install shop --dns=cloudflare --wildcard
12

Health checks

Every 5 minutes. Email after 3 failures.

cipi health set shop --url=…
13

One canonical host

www or apex, aliased and 301'd for you.

cipi www force-to-root shop
14

Re-force HTTPS

Restore the redirect without reissuing.

cipi ssl force shop

Every fix, migration and detail lives in the changelog

github.com/cipi-sh/cipi — CHANGELOG.md ↗
02 — The shift

What used to be work,
is now a flag.

The honest before-and-after. Left is what running these things used to cost you. Right is Cipi 5.

Runtime PHP-FPM for everything FPM or Octane on FrankenPHP, chosen per app
Queues Bare queue workers, restarted by hand Horizon under Supervisor, deploy-aware
Websockets Roll your own port, proxy and service Reverb enabled in one command, SSL included
Databases MariaDB, take it or leave it MariaDB and PostgreSQL, per app
Frontend Commit compiled assets, or build in CI Node build runs inside the release, fail-closed
Migrations Deploy and hope Automatic snapshot before the release goes out
Staging Rebuild a second app by hand One clone command, database optional
Wildcards Manual DNS challenge every renewal DNS-01 with Cloudflare, automated
Monitoring A third-party service and its invoice Health checks every five minutes, built in
Noisy apps One app could take the server down Hard caps on workers, children and memory
03 — The new vocabulary

Eighteen commands
you didn't have before.

The complete Cipi 5 addition to the CLI. Same syntax you already know, same one binary.

cipi app create --octaneCreate a Laravel app served by Octane on FrankenPHP
cipi app convert <app> --to=octane|fpmMove an existing app between runtimes
cipi app reverb enable|disable|statusRealtime websockets for an app
cipi worker horizon enable|disable|statusHorizon instead of plain queue workers
cipi schedule on|off|status <app>Toggle the Laravel scheduler per app
cipi app edit --node-build='…'Run a frontend build on every deploy
cipi app edit --no-node-buildRemove the build step again
cipi app clone <app> --domain=…Instant staging copy of a production app
cipi deploy --snapshotDump the database before the release goes out
cipi app limits <app>Cap FPM children, memory, Octane and queue workers
cipi db install|uninstall pgsqlAdd or remove PostgreSQL next to MariaDB
cipi db default mariadb|pgsqlChoose the engine used when you omit the flag
cipi db enginesInstalled engines, ports and current default
cipi ssl dns set --provider=cloudflareStore the credentials for DNS-01 challenges
cipi ssl install --dns=cloudflare --wildcardIssue wildcard certificates via DNS
cipi ssl force <app>Re-apply the HTTP to HTTPS redirect
cipi www add|force-to-root|force-from-rootCanonical host and permanent redirects
cipi health set|unset|check|listBuilt-in HTTP monitoring and alerts

One line stands between
you and all of it.

Run the updater and Cipi rebuilds vhosts, pools, Deployer templates and app metadata in place — without touching your code or your data.

  • Everything new is opt-in — Octane, Horizon, Reverb, PostgreSQL, snapshots and health checks stay off until you ask.
  • Your PHP-FPM apps keep running exactly as they are, next to any new Octane neighbours.
  • Fresh servers get all of it out of the box with the usual installer.
upgrade
$ cipi self-update # On a fresh Ubuntu 24.04 or 26.04 VPS:
$ wget -O - https://cipi.sh/setup.sh | bash