Built for Statamic's
hybrid file-and-DB world.

Pulls the database. Syncs content/, users/, and storage/app/public/. Clears the Statamic stache automatically. One gesture for both sides of the stack.

Ferry syncing a Statamic project

Statamic is the awkward one. It's built on Laravel, so artisan and .env look familiar, but much of the actual content lives in flat files inside content/ — YAML, Markdown, images. Users can live in files too. The database is optional for some projects and critical for others. Any sync tool that treats Statamic like "Laravel with a CMS on top" misses half the story.

Ferry's Statamic preset reflects this. Auto-detection looks for artisan combined with a content/ directory, or statamic/cms in composer.json. Database credentials come from .env using the standard Laravel DB_* keys. The default file sync paths cover everywhere Statamic writes: storage/app/public/ for user uploads, content/ for pages and collections, and users/ for flat-file user accounts.

Ferry's default Statamic post-pull hook runs php artisan cache:clear and php artisan config:clear so the stache and config caches rebuild from whatever you just pulled. If your project uses the database for users or content, a plain database pull is enough; if it's file-based, the file sync side does the heavy lifting. Ferry doesn't force a choice — pull both, push both, whichever operation makes sense for your setup.

What Ferry handles out of the box.

artisan + .env detection

Same DB_* keys as Laravel, because Statamic sits on the Laravel foundation. Ferry reads them from .env and fills in the config form.

content/, users/, storage pre-configured

Three default sync paths — the trinity of Statamic locations that actually contain state. File-based users get synced. Flat-file content gets synced. Uploads get synced.

cache:clear + config:clear by default

The default post-pull hook chains php artisan cache:clear and php artisan config:clear. Add php please stache:clear on top if you want the Statamic stache rebuilt from scratch.

For hybrid file + DB setups

Statamic can run entirely file-based, entirely DB-based, or somewhere in between. Ferry lets you pull both sides — or just the one you care about — without being opinionated about which mode is "right".

Any artisan / please command as a hook

Pre/post hooks run through zsh from your local document root. Chain multiple commands with &&, pipe output, set environment variables — whatever your shell supports.

Production guardrails

Mark your live site as production and every push to it demands explicit confirmation. No muscle-memory overwrites of the site that actually matters.

Pull the database and the files. Or just one.

Pull

Pull the database

For Statamic projects that use the database for users, forms, or the Statamic Pro features. mysqldump over SSH, stream, import, post-pull hook clears caches. For file-only projects, skip this and just pull files.

Database pull on a Statamic project
Pull

Sync content/, users/, and uploads

Three default sync paths. rsync the lot and the flat-file side of your Statamic site is in sync with production. Exclude .git/ or generated cache subdirectories per path.

File pull syncing Statamic content and uploads
Push

Push content back to staging

Push local content/ to a staging environment so collaborators can preview. Hooks can run php please stache:clear on the remote after the push lands.

File push to a Statamic staging site
Local

Backup before a stache rebuild

One-click timestamped DB backup before you do something risky. Auto-rotation keeps the last N. Restore is gunzip | mysql from the terminal.

Backup operation history on a Statamic site

Free while we build it.

Ferry is in early access beta. Download it, use it on real projects, tell us what breaks. Pricing comes later.

Download for macOS
macOS 14+ required Developer ID signed & notarized