Skip to content

Upgrade

Upgrading an existing odio installation means re-running the installer. The installer is fully idempotent, safe to re-run at any time to update or repair.

Terminal window
curl -fsSL https://beta.odio.love/install | bash

When a configuration file has been modified, the installer creates a <config>.bak backup before applying changes. If the file ends up identical, no backup is kept. This applies to /etc/bluetooth/main.conf, ~/.config/mpd/mpd.conf, ~/.config/mpd-discplayer/config.yaml, ~/.config/odio-api/config.yaml, ~/.config/pipewire/pipewire-pulse.conf, ~/.config/shairport-sync/shairport-sync.conf, ~/.config/spotifyd/spotifyd.conf, and ~/.config/upmpdcli/upmpdcli.conf.

To install a specific release or pre-release, set the ODIOS_VERSION variable to an existing release tag:

Terminal window
curl -fsSL https://github.com/b0bbywan/odios/releases/download/2026.4.1rc1/install.sh | ODIOS_VERSION=2026.4.1rc1 bash

Not every release is worth applying. Upgrades are skippable, you can wait for the next one that brings something you actually care about. The version check described below tells you what’s available, not what you have to run.

Since 2026.4.1rc1, each node shows its own update status in the MOTD (message of the day) when you SSH in:

odio MOTD on SSH login, showing an update available from dev-b94c3fa3 to 2026.4.1rc1, with per-role deltas for branding, shairport_sync and upmpdcli

The notice lists the overall version bump and the roles whose version actually changed between the installed state and the latest release. If nothing changed, the notice is absent.

To re-run the check anytime without waiting for the next login, use the odio-check-upgrade command:

odio@raspodio:~ $ odio-check-upgrade
Upgrades available: dev-8e978895 → 2026.4.1rc1

Three files back this check:

  • Local state~/.cache/odio/state.json, written by the installer after each successful run. Tracks the odios version, install mode, and per-role versions:

    {
    "install_mode": "live",
    "odios": "2026.4.1rc1",
    "roles": {
    "bluetooth": "2026.4.0rc5",
    "branding": "2026.4.1rc1",
    "common": "2026.4.0rc6",
    "mpd": "2026.4.0rc7",
    "mpd_discplayer": "2026.4.0rc7",
    "odio_api": "2026.4.0rc7",
    "pulseaudio": "2026.4.0rc7",
    "shairport_sync": "2026.4.1rc1",
    "snapclient": "2026.4.0rc5",
    "spotifyd": "2026.4.0rc7",
    "upmpdcli": "2026.4.1rc1"
    }
    }
  • Published manifestodio.love/manifest.json, generated by CI on each release with the same shape. Each role version is the last odios release that touched that role.

  • Check result~/.cache/odio/upgrades.json, written by odio-check-upgrade after comparing state and manifest. This is what the MOTD reads from:

    {
    "current": "dev-8e978895",
    "latest": "2026.4.1rc1",
    "upgrade_available": true,
    "roles": [],
    "checked_at": "2026-04-21T19:34:13Z"
    }

A more user-friendly upgrade flow is being designed: automatic detection in the odio application and targeted role upgrades instead of a full installer re-run. See RFC: Targeted upgrade system for odio for the design and to join the discussion.