What is Shippy?
Shippy is a minimal, opinionated deployment tool for Composer based PHP projects, inspired by Deployer and Capistrano.
It ships as a single Go binary. There is nothing to install on the target server beyond an SSH account: Shippy connects over SSH, uploads your project into a fresh timestamped release directory, links the shared files, runs your commands, and only then flips the current symlink. If a deployment turns out to be wrong, shippy rollback points that symlink back at any previous release.
Features
- Zero-downtime deployments with atomic releases
- Release management — keeps last N releases with easy rollback
- Deployment locking — prevents concurrent deployments to the same host
- Shared files/directories — persistent data between releases
- Template variables from composer.json
- Pure Go implementation — single binary, no dependencies
- Deny-by-default file selection — explicit allowlist, nothing ships unless you include it
- SSH-based deployment with key authentication
- Colored output — clear, beautiful deployment progress
- TYPO3 optimized — sensible defaults for TYPO3 projects
How it compares
Deployer and Capistrano are excellent, and Shippy borrows their on-server layout wholesale — the same current / releases/ / shared/ convention, so the two are interchangeable from the server's point of view. The differences are deliberate:
- No runtime on the deploying machine. Deployer is a PHP application that lives in your
composer.json; Capistrano is a Ruby gem. Shippy is one static binary, which makes it equally simple to run from a laptop, a GitHub Actions runner, or a GitLab CI job. - A small configuration surface. One
.shippy.yamlwith hosts and commands, rather than a scripting DSL. Everything Shippy does is in the config file. - Sensible TYPO3 defaults.
shippy initwrites a configuration that already knows aboutvar/log/,public/fileadmin/and the TYPO3 console commands — though nothing about Shippy is TYPO3-specific.
Requirements
- Go 1.20 or higher (for building)
- SSH access to target server
- SSH key authentication configured
Prebuilt binaries are available via Homebrew, go install, and a Docker image, so Go is only needed if you build from source. See Installation.
Next steps
- Installation — get the binary
- Quick Start — first deployment in four commands
- Configuration — everything
.shippy.yamlcan express - File Selection — the allowlist that decides what ships
- Commands — full command and flag reference