Serhiy
15 May 2026
Cargoman started where most tools start: with a job I didn't want to do twice.
I run a small consultancy that builds and maintains commercial PHP applications — mostly Magento and Laravel, mostly with a long tail of internal modules that aren't open source and never will be. For years, sharing those modules across projects meant the same uncomfortable choice every team in this corner of PHP eventually faces.
If you have private Composer packages and you don't want them on Packagist, your options have looked roughly like this for a decade:
Most of the agencies I know picked Satis and just accepted the friction. Edit satis.json. SSH in. Re-run the build. Hope nobody pushed during the window. Update auth.json across every dev machine when a token rotates. Find out months later that the cron silently stopped firing.
The friction was tolerable on a single project. It was not tolerable across twenty.
The brief I wrote for myself was short:
git push, not when a cron decides.Nothing on that list is exotic. The npm and Cargo ecosystems have had this for years. Composer just hadn't.
The unglamorous reason is that I didn't want the registry to be the thing that broke. A registry is infrastructure — it sits between your developers and composer install working at all. If it's slow, deploys are slow. If it's down, deploys are blocked. If it leaks memory under load, you find out at the worst possible time.
Rust gave us a single static binary, predictable memory, and the kind of throughput that means a small VPS handles a real team without breaking a sweat. The whole server fits in a Docker image small enough to pull faster than most teams can finish reading the release notes.
The fact that it's also fun to work on is a bonus we'll quietly take credit for.
Cargoman ships as one product with two deployment shapes, because the people who want to self-host and the people who want a managed service are not the same people, and pretending otherwise leads to a worse version of both.
acme.packages.cargoman.io, TLS handled, backups handled, updates handled. Sign up, install the GitHub App, ship.Both speak the same Composer protocol. Both have the same dashboard. The only thing that changes is who owns the server.
The registry is in production. The storefront you're reading this on is in production. The first paying customers are in production. The compare pages, the migration tooling, the docs — all in flight.
What we're not is done. There's a roadmap of things we want to do that's longer than the things we've already done, and most of it is shaped by what early customers ask for. If you're running Composer at any kind of scale and the workflow above sounds familiar, we'd like to hear from you.
If you're already mid-Satis-migration and looking for the practical steps, the next post in this series will walk through exactly that.
Thanks for reading.
— Serhiy