A rock-solid cross-distribution package manager for Linux.
Install packages from Ubuntu, Arch Linux, Debian, Fedora, and more—without modifying your host system.
Basalt runs each Linux distribution inside an isolated rootless Podman container while making installed applications feel native on your machine. CLI tools appear in your $PATH, GUI applications show up in your application launcher, and every distribution remains completely independent.
No root. No dependency conflicts. No host pollution.
Linux distributions all have excellent package repositories—but they're isolated by design.
Want an AUR package on Ubuntu?
Need a Fedora-only tool on Debian?
Want to test software across multiple distributions without spinning up VMs?
Basalt makes all of that possible.
Host Linux
│
├── Ubuntu Container ───── apt install ranger
├── Arch Container ─────── pacman -S yay
├── Fedora Container ───── dnf install toolbox
└── Debian Container ───── apt install neovim
│
▼
Basalt Merge Layer
│
▼
ranger
yay
toolbox
neovim
Available directly on the host.
Every distribution stays isolated while your applications feel like they were installed natively.
- Install packages from multiple Linux distributions simultaneously.
- Rootless containers powered by Podman.
- No modifications to your host package manager.
- Automatic CLI wrapper generation.
- Native desktop integration for GUI applications.
- Unified package management interface.
- SQLite-backed package tracking.
- Simple container lifecycle management.
Each enabled distribution runs inside a persistent rootless Podman container.
For example:
basalt-ubuntu
basalt-archlinux
basalt-fedora
Each container remains alive in the background and shares your $HOME.
When installing a package, Basalt:
-
Resolves the appropriate distribution.
-
Installs the package using that distribution's native package manager.
-
Records installation metadata in SQLite.
-
Generates host integrations:
- Shell wrappers for CLI tools
.desktoplaunchers for GUI applications
Removing a package cleans up these integrations automatically.
Your host system remains untouched.
- Rootless Podman
- Rust toolchain (
cargo)
Clone the repository:
git clone https://github.com/yourname/basalt
cd basaltBuild and install:
./installThis installs the binary to:
~/.local/bin/basalt
Initialize Basalt:
basalt initDuring initialization Basalt will:
- create the required containers
- generate configuration files
- configure shell integration
- add Basalt's binary directory to your PATH
Initialize Basalt:
basalt initInstall a package:
basalt install rangerInstall from a specific distribution:
basalt install yay -d archlinuxRun a command:
basalt run rangerOpen a shell:
basalt shell ubuntuUpdate every enabled distribution:
basalt update| Command | Description |
|---|---|
basalt init |
Interactive first-time setup |
basalt install <pkg> |
Install a package |
basalt install <pkg> -d <distro> |
Install into a specific distribution |
basalt remove <pkg> |
Remove a package |
basalt search <pkg> |
Search enabled distributions |
basalt update |
Update every distribution |
basalt run <cmd> |
Execute a command inside its container |
basalt run -d <distro> <cmd> |
Execute inside a chosen distribution |
basalt shell <distro> |
Interactive shell |
basalt merge <tool> |
Merge an application onto the host |
basalt unmerge <tool> |
Remove host integration |
basalt list-merged |
List merged applications |
basalt which <binary> |
Find which container owns a binary |
basalt status |
Show containers, packages, and merges |
basalt doctor |
Diagnose common issues |
basalt config |
Show current configuration |
basalt start <distro> |
Start a container |
basalt stop <distro> |
Stop a container |
basalt restart <distro> |
Restart a container |
basalt/
├── basalt-cli/
├── basalt-core/
├── basalt-registry/
├── basalt-runtime/
├── basalt-shell/
├── basalt-state/
└── install
| Crate | Responsibility |
|---|---|
basalt-cli |
CLI parsing and command dispatch |
basalt-core |
High-level orchestration |
basalt-runtime |
Container runtime abstraction |
basalt-registry |
Distribution metadata |
basalt-shell |
Host integration layer |
basalt-state |
SQLite persistence |
Configuration lives in:
~/.config/basalt/config.toml
Example:
[global]
mode = "hybrid"
default_distro = "ubuntu"
[distros]
enabled = [
"ubuntu",
"archlinux"
]Always install using the default distribution.
Prompt before every installation or command.
Automatically resolve when possible and ask only when multiple distributions match.
Recommended for most users.
Build:
cargo buildRun without installing:
cargo run -p basalt -- install htopEach crate is independently testable. Keep command-line parsing inside basalt-cli; business logic belongs in basalt-core or the appropriate library crate.
- Flatpak integration
- OCI image caching
- Custom repositories
- Package pinning
- Automatic updates
- Plugin system
- Export/import configurations
- Remote container support
Issues and pull requests are welcome.
Please keep the CLI thin, place business logic in the library crates, and write tests for new functionality whenever practical.
MIT