Bazzite: an immutable gaming-first Fedora variant

Short orientation to Bazzite. What it is, why the immutable layout matters, how it changes day-to-day system management.

Bazzite is a community-built Linux distribution derived from Fedora's atomic desktop family (Silverblue, Kinoite) with a heavy focus on gaming, handhelds (Steam Deck, ROG Ally), and home-theatre boxes. Ships with the Steam stack, Mesa drivers, Proton-tuned kernels, and gamescope preconfigured.

# Mental model

Two things change relative to a traditional Fedora install:

  1. The base system is image-based and read-only. Updates are atomic. You boot into a new commit or roll back to the previous one. There's no dnf install of arbitrary RPMs into the running system. The OS image is built upstream and you rebase between images.
  2. User software lives in containers and Flatpaks. Flatpak for graphical apps, distrobox and toolbx for traditional CLI tooling, Homebrew for one-shot CLI packages.

That split is why Bazzite is hard to brick (you can break the user side without touching boot).

# Day-to-day

  • Update. rpm-ostree upgrade, or ujust update on Bazzite (which wraps the same machinery and also refreshes Flatpaks). Reboot to apply. See rpm-ostree: rebase, pin, rollback for rebase, pin, and rollback.
  • Install a GUI app. Prefer Flatpak: flatpak install flathub <app>. Desktop integration is fine for almost everything. Notable exception is browser → 1Password. See Making 1Password browser extensions talk to the Flatpak desktop app for some notes on that.
  • Install a CLI tool. Spin up a toolbox or distrobox container running Fedora or Arch, install the tool inside, export the binary. Containers are throwaway. Destroy and recreate when you want a clean state.
  • Container runtime. Bazzite ships Podman, not Docker. See also Living without docker: podman as a daily driver.

# When troubleshooting

"Where does this thing live?" is harder on Bazzite than on stock Fedora. A given binary is in one of four places:

  • Image layer. Read-only at /usr. Changes only via rpm-ostree.
  • Layered RPM. Added via rpm-ostree install. Listed by rpm-ostree status -v.
  • Flatpak. Sandboxed under /var/lib/flatpak.
  • Container. Inside distrobox / toolbox. Invisible to the host package manager.

Knowing which layer a misbehaving binary lives in tells you which tool fixes it. A 1Password browser plugin failing to talk to the desktop app is almost always a Flatpak permission / host-bridge problem, not a system one.

# Privacy footnote

Everything in this note is public Bazzite behaviour, nothing specific to my install. For the authoritative reference, man rpm-ostree and the Bazzite docs.