Download Latest Version v3.3.0 source code.zip (8.4 MB)
Email in envelope

Get an email when there's a new version of Spin

Home / v3.3.0
Name Modified Size InfoDownloads / 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 run and spin exec now 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: false in .spin.yml to 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

Full Changelog: https://github.com/serversideup/spin/compare/v3.2.4...v3.3.0

Source: README.md, updated 2026-07-16