Releases: VictoryTek/Up
Release list
v2.3.3
What's Changed
Bug Fixes
- Update All re-disables when nothing is left to update: After an update run completes, the button returns to its greyed-out state instead of staying clickable. A backend that updated cleanly now reports zero pending updates; the button only stays active if an un-skipped source still has outstanding updates (for example one that errored out).
- Progress bar no longer shifts the layout: The update progress bar now reserves its space permanently and fades in on start rather than being inserted into the layout. Pressing "Update All" no longer pushes the page down and introduces a vertical scroll bar.
- Window fits smaller screens: The window now sizes itself to the monitor instead of opening at a fixed 760×730, and a short-screen layout tightens the hero area, section spacing and margins when there isn't much vertical room. The Update page no longer opens with a scroll bar on a 1280×800 display.
Improvements
- Clear "update complete" indication: When an Update All run finishes, a banner appears below the header — green "System is up to date" on success, or "Update finished with errors — see the log below" when a source failed. It clears automatically when the next check or update starts.
Internal
UpdateRow::set_status_successrecords a zero available-count so the window can re-gate the Update All button from row state without re-running the availability check.UpWindow::default_window_sizederives the initial size fromgdk::Monitorgeometry, and amax-height: 740pxAdwBreakpointtoggles a.compactstyle class for the tightened layout.
2.3.2
What's Changed
New Features
- "What's new" changelog viewer: Update rows with pending updates now show a "What's new" button (APT, DNF, Pacman, Zypper, Flatpak, Homebrew, fwupd) that fetches the package changelog / release notes and shows them in a scrollable dialog.
- Estimated download size: The status line now reads e.g. "12 updates available (~450 MB)", and a banner warns when the pending updates need more space than is free on the root filesystem.
- Preferences dialog + plugin manager: A new Preferences entry in the menu lists every discovered backend plugin with an enable switch; disabled plugins are not loaded on the next launch.
- Full error details: When a backend update fails, the row shows a short summary plus a button that opens a dialog with the complete retained command output instead of just an exit code.
Bug Fixes
- Fewer authentication prompts during distro upgrade: A distribution upgrade now asks for the administrator password once, not once per step — Fedora upgrades previously prompted up to four times.
- Fedora upgrade prerequisite check: An already up-to-date Fedora system is no longer wrongly reported as "N packages need updating first" (the
dnf check-updatemetadata header was being counted as pending packages), which had blocked the upgrade. - Unsupported distributions: Distros with no implemented upgrade path (Debian, Mint, Pop!_OS, elementary, Zorin, RHEL, CentOS) are no longer offered a "Start Upgrade" button that leads to a "not implemented" dead end.
- Flake-based NixOS: A standard flake NixOS system no longer requires a VexOS-specific
/etc/nixos/vexos-variantfile — the configuration name is auto-detected from the flake (single config, or a hostname match). - APT "N updated" count: The per-row count after a selective APT update is now accurate even when the summary line is localised or reports "0 upgraded" after configuring newer versions.
Improvements
- Localisation is now active: The application binds its gettext text domain at startup and the remaining hard-coded UI strings are translatable — previously the translation infrastructure was present but did nothing.
- Distro-upgrade output: Every upgrade step now streams through the same one-prompt privileged session used for regular updates.
Internal
- Replaced the unmaintained
serde_ymlplugin-descriptor parser withyaml_serde, the YAML Organization's maintained continuation ofserde_yaml. - Read-only backend operations (
list_available,estimate_size) now run through the sameCommandExecutorabstraction as updates, making them testable and consistent. - Shared the
BackendFinishedUI handling between the "Update All" and retry loops, removing a large block of drifting duplicated code. - Removed the unused pre-update snapshot subsystem and the last of the blanket dead-code suppressions.
v2.3.1
What's Changed
Fixes
- True progress bar: The progress bar now advances in step with the updates actually being installed. Previously it moved only once per update source — jumping partway across when a source started, then freezing for the entire install before shooting to the end — so a run dominated by one long source (a NixOS rebuild, a large Flatpak batch) showed a bar stuck near the start the whole time.
Improvements
- Per-source progress signals: Progress is now read from each package manager's own output as it runs — Nix derivation and fetch plans, Flatpak transaction counters, APT unpack/configure steps, and the
n/mcounters from DNF, Pacman and Zypper. Homebrew, fwupd and plugin backends report progress too. - No misleading motion: The bar never moves backwards, and a source whose output cannot be parsed simply shows no fine-grained progress rather than an invented position.
v2.3.0
What's Changed
New Features
- Update History: A new History tab records every update session — which backends ran, how many packages were updated, and any errors — so you can look back at what happened on a previous run.
- Selective updates: The package list popover now shows a checkbox per package (where the backend supports it), so you can update just the packages you want instead of everything a backend has pending.
- Cleanup / maintenance mode: A new "Clean Up" entry in the menu runs each backend's cleanup operation (e.g. removing unused packages, garbage-collecting old Nix generations) in one click.
- Persisted skip preferences: Backends you've checked "skip during Update All" for now stay skipped after restarting Up, instead of resetting every launch.
Bug Fixes
- Update All getting stuck: Cancelling or failing the admin authentication prompt during an update no longer leaves the Refresh and Retry buttons permanently disabled until restart.
up --check: The daily background update check (run by the systemd timer) now actually runs instead of failing every time with an unrecognized-option error.- Plugin backends requiring root: Plugin-based backends that need administrator privileges (e.g. Alpine/apk, Void/xbps) now actually run with those privileges after the authentication prompt, instead of failing every update.
- Sources row layout: Reordered the package-count, status, and action controls in each source row for a more natural reading order.
Internal
- Removed an unused, never-connected D-Bus privileged service that shipped alongside the app — Up has always talked to the system directly via
pkexec, so this reduces the app's installed footprint and removes an unreachable root-privileged background service with no change in behavior.
2.2.0
What's Changed
Improvements
- Package list popover: Viewing a backend's updated packages no longer expands the row inline and pushes the whole page into a scrollbar. Each source row now shows a package-count button that opens a small popover with the full list, so the main window never grows or scrolls to show it.
- Accurate updated-items list: The list of updated packages shown after a run now reflects what was actually updated, instead of a placeholder or mismatched set of items.
Full Changelog: v2.1.0...v2.2.0
2.1.0
What's Changed
New Features
- VexOS cache-block dialog: When a VexOS update is paused because kernel packages require a local source build the binary cache hasn't finished yet, Up now shows a dialog explaining exactly what's blocked and lets you choose
just deploy(apply pending config without bumping nixpkgs),just update-all(force the local build now), or Wait (closes Up to retry once Hydra catches up). - VexOS brand theme: New cyan/orange visual theme — navigation tabs moved into the header bar, a hero area with app icon and live status, and a themed Update All button, progress bar, and banners.
Improvements
- Layout: Update All and Cancel buttons moved into the hero row, saving a full row of vertical space; the terminal output panel is capped at 200px when expanded so it no longer crowds the content above it.
- Terminal panel: Now expanded by default on launch so update output is immediately visible; default window height increased to accommodate it comfortably.
Full Changelog: v2.0.4...v2.1.0
Up 2.0.4
What's Changed
Improvements
- Update button: Moved to a fixed footer so it remains accessible regardless of content height.
- Cancel action: Added a Cancel button to allow aborting an in-progress update run.
Bug Fixes
- NixOS: Fixed a false positive where the NixOS backend incorrectly reported updates available when there were none.
- VexOS: Fixed a false positive in VexOS update detection and corrected the VexOS update command check.
- Flatpak: Fixed a false negative where available Flatpak updates were not detected.
Full Changelog: v2.0.3...v2.0.4
Up 2.0.3
What's Changed
Improvements
- Update progress bar: A progress bar now fills beneath the "Updating…" status label as each package manager completes, giving clear visual feedback during multi-backend updates.
- Responsive layout: The update page now scales properly at larger window sizes and fullscreen. The content area widens, status labels no longer truncate early, and the terminal output panel fills all available vertical space when expanded.
Bug Fixes
- Flatpak: Fixed update check always reporting no updates available when Flatpak apps are installed system-wide — the check now queries both user and system installations, matching what the update command does.
Full Changelog: v2.0.2...v2.0.3
2.0.2
What's Changed
Bug Fixes
- Nix: Fixed "Everything is up to date" being shown in the headline when a backend check fails silently — errors are now surfaced as "Could not check all sources."
- Nix: Fixed stale evaluation and tarball cache causing the flake update check to miss available updates; the check now always fetches fresh data from upstream.
Full Changelog: v2.0.1...v2.0.2
2.0.1
Up 2.0.1
Released: 2026-05-12
Bug Fixes
Nix Build: up-daemon Now Correctly Compiled and Installed
Fixed two compounding bugs that caused the Nix installPhase to fail with:
install: cannot stat 'target/release/up-daemon': No such file or directory
Root cause 1 — daemon never compiled:
cargoBuildHook was invoked without --workspace, so only the root up crate was compiled. The daemon/ workspace member was never built, producing no up-daemon binary.
Fix: Added cargoBuildFlags = [ "--workspace" ] to the buildRustPackage derivation in flake.nix. This causes cargoBuildHook to pass --workspace to cargo, compiling all workspace members, and causes cargoInstallHook to install all workspace binaries to $out/bin/.
Root cause 2 — wrong install path:
The postInstall script referenced target/release/up-daemon, which never exists in a nixpkgs build because cargoBuildHook always passes --target <arch-triple>, placing artifacts under target/<arch-triple>/release/.
Fix: Updated postInstall to move up-daemon from the $out/bin/ location where cargoInstallHook places it to the correct $out/libexec/up-daemon destination.
Reproduced on: NixOS 25.11, nixpkgs 8fd9daa3, Up 2.0.0.