Releases: serversideup/spin
Release list
v3.3.0
This release upgrades Spin's Ansible runtime to 2.21 and brings in v3.0.0 of the Spin Ansible Collection, which adds Ubuntu 26.04 LTS support, automatic swap, automatic hostnames, and more.
🤩 What's New
Ubuntu 26.04 LTS support
spin provision can now create and manage Ubuntu 26.04 servers on Hetzner, Vultr, and DigitalOcean. New .spin.yml files default to 26.04 hardware profiles.
Automatic swap
Servers get a right-sized swap file by default. Sizing follows Red Hat's recommendations and the Ubuntu SwapFaq, and swap you created yourself is never touched.
| RAM | Swap size |
|---|---|
| 2 GB or less | 2x RAM |
| 2 to 8 GB | Matches RAM |
| More than 8 GB | Half of RAM (min 4 GB) |
Capped at 8 GB by default. Configurable with swap_enabled, swap_size_mb, swap_max_size_mb, swap_force, swap_file_path, and swap_swappiness.
Automatic hostnames
Servers now get their OS hostname set from server_name in .spin.yml, and it survives reboots. Your shell prompt and monitoring will finally say ubuntu-2gb-ash-1 instead of whatever the cloud image left behind.
Ansible 2.21 runtime
spin provision and spin maintain now run on ansible-core 2.21 with zero deprecation warnings, thanks to the collection being fully migrated to modern Ansible standards.
Node 24 by default
Commands that use the Node image (like spin node) now default to node:24, the current LTS. You can pin a different version with the SPIN_NODE_IMAGE environment variable.
💪 Improvements
From the collection update, without changing anything in your .spin.yml:
- Provisioning output shows your servers by name instead of IP address.
- Time sync is handled by chrony (required on Ubuntu 26.04), with custom sources available via
chrony_ntp_servers. - Targeting an environment with
spin provision <environment>only creates the servers in that environment. - Clearer validation errors for server names and unmatched targets.
See the collection release notes for the full list, including bug fixes.
🐛 Bug Fixes
-
spin runandspin execnow preserve argument boundaries, so arguments containing spaces or quotes arrive at the container intact (#185). Commands like this work as expected now:spin run php php artisan tinker --execute 'echo "hi";'The same quoting fix was applied to
spin up,spin down,spin ps, andspin prune.
⏫ Upgrade Notes
The collection updates automatically. Spin checks for collection updates once a day, or you can force it right away:
SPIN_FORCE_INSTALL_GALAXY_DEPS=true spin provisionThings you'll notice on your first provision after upgrading:
- Existing servers get their hostname set from
server_name. This is a one-time visible change. - A swap file is created on servers without existing swap. Set
swap_enabled: falsein.spin.ymlto opt out.
If you've customized your Ansible setup beyond .spin.yml (custom playbooks, variable overrides, or --limit by IP address), review the collection's upgrade notes before provisioning.
⭐️ New Contributors
- @yusufkandemir made their first contribution in #185
Full Changelog: v3.2.4...v3.3.0
v3.2.4
🤏 Minor improvement
- Added
SPIN_MCP_WORKING_DIRECTORYfor use with Laravel Boost (helpful for Laravel mono-repos)
v3.2.3
🤖 Better AI context
- Added better AI context for running Laravel test suites
v3.2.2
v3.2.1
🐛 Bug fixes
- Fixed CI/CD NPM package publishing issues
v3.2.0
Spin now works with Laravel Boost 🚀
Your AI coding agent now understands Spin out of the box. Install serversideup/spin, add three lines to .env, run boost:install, and your agent knows how to run commands, configure services, and deploy — no explaining required.
Getting started:
# Add to .env
BOOST_PHP_EXECUTABLE_PATH="./vendor/bin/spin-mcp-wait.sh ./vendor/bin/spin run -T php php"
BOOST_COMPOSER_EXECUTABLE_PATH="./vendor/bin/spin run php composer"
BOOST_NPM_EXECUTABLE_PATH="./vendor/bin/spin run node npm"
# Install Boost
spin run php php artisan boost:install
Includes a comprehensive skill covering all 26 commands, 13 Laravel service configurations, serversideup/php image setup, deployment workflows, and safety guardrails that prevent destructive commands without your confirmation.
How to use
See the Spin Pro docs on how to install and configure:
What's Changed
- docs: Upgrade site to Nuxt 4 and Nuxt UI by @jaydrogers in #178
- Bump @serversideup/project-switcher-bar from 0.0.4 to 0.0.5 in /docs by @dependabot[bot] in #180
- Bump @serversideup/project-switcher-bar from 0.0.5 to 0.0.6 in /docs by @dependabot[bot] in #183
- Add Laravel Boost support by @jaydrogers in #184
New Contributors
- @dependabot[bot] made their first contribution in #180
Full Changelog: v3.1.1...v3.2.0
v3.1.1
🐛 Bug fix
- Fixed a bug with the
line_in_filefunction where theexactaction was not escaping special characters correctly
Full Changelog: v3.1.0...v3.1.1
v3.1.0
💪 Minor improvements
- Added ability to automated SSH tunnel clean up with
spin deploy - Adjusted logic of
.dockerignorefile creation to improve ignore capabilities
Full Changelog: v3.0.4...v3.1.0
v3.0.4
🐛 Bug fix
- Fixed an issue with
spin versionwhen installed as a composer or node dependency where the version would incorrectly display
Full Changelog: v3.0.3...v3.0.4
v3.0.3
🐛 Bug fixes
- Fixed issue with
spin configurenot working correctly with WSL2 (#166) - Removed a warning while running
spin configureon WSL2 machines (#165)
🧼 Cleanup
- Improved some variable naming for
spin deploy
Full Changelog: v3.0.2...v3.0.3
