serversideup/spin
Spin is a Docker-based local development environment for Laravel that gets projects running quickly with preconfigured PHP, database, and caching services, so you can develop without installing PHP, Composer, or Node locally.
spin up collapses "install Docker, read the README, copy env files, remember the three compose commands" into one verb. This is directly measurable: time-to-first-commit for a new hire, and volume of "works on my machine" tickets. If onboarding friction is on your roadmap, this is a cheap, reversible intervention.docker-compose.yml + docker-compose.$SPIN_ENV.yml and defaults to dev, with SPIN_ENV=production switching the same toolchain. That makes "same compose definitions from laptop to server" a defensible standard rather than an aspiration — and it's the same lever you'd otherwise spend engineering weeks building internally.Makefile/just/shell-script layer maintained by whoever cares most. Spin is that layer, already written, cross-platform-tested, and free. Adopting it is a deferral of an internal-tooling decision, not a commitment — the pass-through design keeps the exit cheap.spin run / spin exec / spin build / spin logs forward flags straight to docker compose, so documentation and CI scripts can reference one stable set of commands without inventing a new DSL. This shrinks the documentation surface area your team must maintain.SPIN_USER_ID) eliminates the classic root-owned-vendor/-and-node_modules/ support class, which is disproportionately expensive in bind-mounted local dev.Consider it when:
Look elsewhere when:
Pilot posture: scope to one or two repositories for a quarter, instrument onboarding time and environment-related incidents, and keep the compose files canonical so that reverting to plain docker compose is a one-line change.
For executives. Spin is a ~1,500-star open-source Bash wrapper that makes Docker environments reproducible with a single command: spin up. It's free, installs with no new dependencies beyond Docker, and is reversible in a sprint — worst case we delete a script and keep the compose files we already own. The business case is onboarding velocity and fewer environment-driven support tickets, not new capability. Two caveats worth naming up front: it's GPL-3.0 licensed (fine for internal use, needs legal review before redistribution or embedding), and it's a small-maintainer project with a modest adoption signal, so we should treat it as a tactical accelerator rather than a platform commitment. Recommended ask: a one-quarter pilot on one or two repos with a documented fallback to plain docker compose.
For engineering. This is conventions, not a new abstraction. Every development command — up, down, build, logs, run, exec — passes arguments straight through to docker compose, so existing knowledge and Compose syntax transfer directly. It layers docker-compose.yml with docker-compose.$SPIN_ENV.yml, giving you environment selection by variable rather than by remembering flags. It runs tooling (Ansible, GitHub CLI, Node, PHP) inside containers, so nothing needs to be installed locally, and it maps the host user ID into containers to avoid root-owned files in bind mounts. Debugging is SPIN_DEBUG=true to see the exact commands executed. Code is readable Bash with ShellCheck in CI and a three-OS test matrix; the tradeoff is deliberate Bash 3.2 compatibility, which constrains contributors but guarantees it runs on stock macOS. If you're already comfortable with Compose, the ramp-up is measured in minutes.
The one-line version. spin up replaces the tribal-knowledge phase of onboarding with a command that either works or fails loudly — and if we stop liking it, our compose files are unchanged.
How can I help you explore Laravel packages today?