Skip to content

Firstp1ck/UniPack

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

72 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸ“¦ UniPack

A unified TUI for keeping every package manager up to date.

UniPack main TUI

Rust License: MIT Platform

UniPack lets you browse, search, upgrade, and remove packages across pip, npm, pnpm, bun, cargo, apt, pacman, AUR, rpm, flatpak, snap, and brew β€” all from one terminal UI. It is focused on keeping your system up to date, not bootstrapping new installs: use your package manager of choice for first-time installs, then let UniPack handle the ongoing updates. It remembers your package lists between runs so reopening feels quicker, and it shows when updates are available where the underlying tools support it.

When pacman is available (Arch and other pacman-based distros), global Python libraries belong in python-* packages (official repos and often the AUR under the same naming). UniPack’s pip tab then lists those python-* installs, runs upgrades/removes through sudo pacman when no AUR helper is present, and through yay or paru (whichever is installed) when you have one, so behaviour matches distro conventions instead of pip install --user / breaking system Python.


✨ Features

  • Finds which supported package managers are installed
  • One list per tool β€” switch with Tab / Shift+Tab
  • Live search β€” filter as you type (/), and press Ctrl+f while searching to toggle normal/fuzzy matching
  • Upgrade and remove without leaving the app (installing new packages is intentionally out of scope)
  • Ctrl+u β€” run a backend-native full-system update on the active tab (with y/n confirmation, where supported)
  • o β€” show only packages with updates, or everything, for the current manager
  • a β€” see updates from all managers at once (Space toggles a row, u upgrades what you selected with full-system fallback where eligible, a / d select all or none, Shift+letter quickly toggles rows for managers whose name starts with that letter)
  • Distro name in the header on Linux
  • TokyoNight-style colors
  • Twelve sources: pip, npm, pnpm, bun, cargo, brew, apt, pacman, AUR (yay and/or paru β€” either is enough), rpm, flatpak, snap
  • Optional sudo before the TUI β€” on an interactive terminal, when a backend that needs elevation is present, UniPack can ask to run sudo -v up front so later upgrades are not blocked waiting for a password (you can decline and run sudo -v yourself instead)

πŸ“¦ Supported Package Managers

Manager Platform Notes
pip Linux / macOS Elsewhere: pip3 / PyPI. If pacman exists: installed python-* packages (repo + AUR); the list shows the suffix after python-; upgrades use yay/paru if available, otherwise sudo pacman
npm Linux / macOS Global packages
pnpm Linux / macOS Global packages
bun Linux / macOS Global packages
cargo Linux / macOS Installed crates
brew macOS / Linux Homebrew
apt Debian/Ubuntu Installed packages
pacman Arch Linux Official repos
aur Arch Linux AUR when yay or paru is on PATH (either alone registers the tab)
rpm Fedora/RHEL
flatpak Linux Flathub apps
snap Linux

πŸš€ Installation

From crates.io (recommended)

cargo install unipack

From source

git clone https://github.com/firstp1ck/unipack
cd unipack
cargo build --release
sudo cp target/release/unipack /usr/local/bin/

Arch Linux (makepkg)

This repository includes PKGBUILD for building and installing with Arch’s makepkg. It produces the unipack-git package (provides unipack) and pulls the latest sources during the build.

git clone https://github.com/firstp1ck/unipack
cd unipack
makepkg -si

You need the base-devel group (for makepkg) and network access so the PKGBUILD can clone the upstream tree it builds from.

Requirements

  • Rust β€” current stable toolchain (install or update via rustup)
  • Any of the package managers above that you want UniPack to control
  • Sudo for privileged backends β€” UniPack runs upgrades/removes non-interactively, so a live sudo session avoids password prompts mid-action. On a normal terminal, when something like apt, pacman, aur, rpm, or snap is detected (and for the pip tab when pacman is present), startup may offer sudo -v before the TUI appears ([y/N]; declining is fine). You can also authenticate whenever you like:
sudo -v

If you accept the startup prompt and sudo -v fails, UniPack exits with a non-zero status so scripts notice the failure.


⌨️ Keyboard Shortcuts

Key Action
↑ / k Move up (wraps)
↓ / j Move down (wraps)
Ctrl+d Page down the list
/ Toggle search mode
Ctrl+f Toggle normal/fuzzy search mode (while search is active)
o Toggle upgradable-only vs all packages
a Open all upgradables overlay (Esc / q to close)
u Upgrade selected row (main list) or selected rows (overlay, with full-system fallback where eligible)
Ctrl+u Confirm and run full-system update for the active backend (supported: apt, pacman, aur, flatpak, snap)
Del Remove selected package
Tab / Shift+Tab Next / previous package manager
r Refresh lists and pending-update counts
Esc Leave search, or quit when not searching
q Quit (only when not in search; in search, q is part of the query)

πŸ›  Usage

# Launch UniPack (optional sudo warm-up prompt may appear first)
unipack

# Show help (stdout, no TUI; includes the privilege note)
unipack --help
unipack -h

To upgrade: select a row and press u, or press a for the all-managers overlay, tick rows with Space, and press u.

To run a full-system update (supported backends): press Ctrl+u on the active tab, then confirm with y.

To remove: select a row and press Del.

To install a new package: use your package manager directly (for example sudo pacman -S python-<name>, yay -S python-<name> / paru -S python-<name> when using pacman-based repos/AUR, sudo apt install <pkg>, or pip install --user <pkg> when not using that layout). UniPack intentionally does not install new packages β€” it is focused on updates.


πŸ— Built With

  • Ratatui β€” TUI framework
  • Crossterm β€” terminal backend
  • Tokio β€” async runtime
  • Serde β€” reading structured output from some tools

πŸ“„ License

MIT License

About

A liteweight package manager for all of your packages

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Contributors

Languages

  • Rust 68.1%
  • Shell 31.9%