| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-07-16 | 3.8 kB | |
| v3.3.0 source code.tar.gz | 2026-07-16 | 8.3 MB | |
| v3.3.0 source code.zip | 2026-07-16 | 8.4 MB | |
| Totals: 3 Items | 16.7 MB | 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:
bash
spin run php php artisan tinker --execute 'echo "hi";'
The same quoting fix was applied to spin up, spin down, spin ps, and spin prune.
⏫ Upgrade Notes
The collection updates automatically. Spin checks for collection updates once a day, or you can force it right away:
:::bash
SPIN_FORCE_INSTALL_GALAXY_DEPS=true spin provision
Things 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 https://github.com/serversideup/spin/pull/185
Full Changelog: https://github.com/serversideup/spin/compare/v3.2.4...v3.3.0