Ever tried to document how to install your own program?
You end up writing 47 pages just to say "install the dev headers for libfoo" — because on Debian it's libfoo-dev, on Fedora it's libfoo-devel, on Arch it's libfoo, on Alpine it's libfoo-dev (different one), on FreeBSD it's foo, and on macOS it's "fook yu" — because the dev didn't pay $199 to sign the package.
upkg lets you speak civilized. It speaks the dialect of 87 other package managers for you.
upkg install git curl ripgrepThat's it. Same command on Debian, Fedora, Arch, openSUSE, OpenWrt, Termux, FreeBSD, and macOS.
- One command surface:
upkg install,upkg uninstall,upkg upgrade. - Routes to the native package manager underneath.
- Keeps the names people already know — no new catalog, no parallel universe.
- Stays out of your way for anything advanced. Use
apt,dnf,pacman,pkgdirectly when you need to.
- Not a new global package ecosystem.
- Not a replacement for native tooling when you need flags, repos, or version pinning.
- Not a daemon, not a sync service, not a wrapper that "knows better."
| Platform | Backend |
|---|---|
| Debian/Ubuntu | apt |
| Fedora/RHEL | dnf / yum |
| Arch | pacman |
| openSUSE | zypper |
| OpenWrt | opkg |
| Android (Termux) | pkg (fallback apt) |
| FreeBSD | pkg |
| macOS | built-in engine (Homebrew-compatible names + prefixes) |
No runtime switch, no shelling out to brew. The engine is built in and keeps the prefixes people expect:
- Apple Silicon:
/opt/homebrew - Intel:
/usr/local
Same formula and cask names. Different engine.
upkg install git curl
upkg install --dry-run ripgrep
upkg uninstall htop
upkg upgrade
upkg helpcargo build -p upkg
just qq