Oil is a native Linux package manager that works on any distribution. Like Nix, it installs packages to its own prefix and doesn't conflict with the host package manager. Unlike Nix, Oil is minimal, fast, and focused on generation-based rollback.
- Works everywhere — no distro-specific bootstrap. One binary.
- Own prefix — installs to
/usr/local/oilor~/.local/oil. No /usr pollution. - Generation rollback — every install creates a snapshot. Rollback with
oil rollback. - OS-gated — compile with
--no-default-featuresto strip unused system registries. - System registries — built-in parsers for APT, DNF, Pacman, APK, XBPS, Nix, and Linuxbrew repos. These are read-only data sources for resolving packages. Oil never delegates to host package managers. Installed files and Oil-owned state remain the source of truth.
# Install oil (latest release)
curl -fsSL https://github.com/semitechnological/oil/releases/latest/download/oil-linux-x64 -o ~/.local/bin/oil
chmod +x ~/.local/bin/oil
# Or build from source
cargo install --git https://github.com/semitechnological/oil
# Bootstrap packages from your distro's repos (read-only)
oil search ripgrep
oil install ripgrepcargo build
cargo build --no-default-features --features "system-xbps,system-apk"This is an Alpenglow-specific result, not a general Oil benchmark.
| Metric | Oil | apk |
|---|---|---|
| Cold index refresh median | 1.845 s | 2.057 s |
Cached search busybox median |
0.641 s | 1.458 s |
| Binary size | 2.15 MiB | 67.6 KiB |
| Index cache | 1.78 MiB | 2.46 MiB |
Three cold runs before the cache-format change on an Alpine 3.21 aarch64 guest under QEMU TCG (not hardware or HVF). Oil's gzip cache is 5.5x smaller than its prior 9.90 MiB raw cache. Package installation was excluded because hello was unavailable to both commands in this guest.
A convenience installer is included:
# From a clone:
./install.sh
# Or download the latest release binary:
curl -fsSL https://raw.githubusercontent.com/semitechnological/oil/master/install.sh | bashOil resolves packages through existing distribution ecosystems (feature-gated):
| Feature | Registry | Extractor | Systems |
|---|---|---|---|
system-apt |
Debian/Ubuntu repos | .deb |
Debian, Ubuntu, Mint, Pop, Kali, Parrot |
system-dnf |
Fedora/RHEL repos | .rpm |
Fedora, RHEL, CentOS, Rocky, Alma |
system-zypper |
openSUSE repos (via RPM metadata) | .rpm |
openSUSE (Tumbleweed/Leap), SLES |
system-pacman |
Arch repos | .pkg.tar.zst |
Arch, Manjaro, EndeavourOS, Garuda, Artix |
system-apk |
Alpine/Chimera repos | .apk |
Alpine, Chimera Linux |
system-xbps |
Void repos | .xbps |
Void Linux |
system-nix |
Nixpkgs | Nix store | NixOS |
system-opkg |
OpenWrt Packages.gz | .ipk (via deb extractor) |
OpenWrt, LEDE |
system-eopkg |
Solus eopkg-index.xml | .eopkg |
Solus |
system-brew |
Linuxbrew | Bottles | macOS, Linux |
system-flatpak |
— (detect/search/list only) | daemon-based | Cross-distro |
system-snap |
— (detect/search/list only) | daemon-based | Cross-distro |
system-emerge |
— (detect/list only) | source-based | Gentoo |
system-freebsd |
— (detect/list only) | CLI passthrough | FreeBSD |
system-guix |
— (detect/list only) | CLI passthrough | Guix System |
system-pkgadd |
— (detect/list only) | CLI passthrough | OpenBSD |
system-swupd |
— (detect/list only) | CLI passthrough | Clear Linux |
Default builds include all registries (system-all).
Compile with --no-default-features --features "system-xbps,system-apk" to select only what you need.