Note
You can test .lpk packages via Github Releases.
ULPM Engine v6.0.0 introduces a hardened multi-package transactional engine and dynamic dependency orchestration over the autonomous .lpk Format v5 specification.
- Atomic Multi-Package Transactions & Crash-Resistant WAL: All installation phases (dependency solving, downloads, SHA-256 and Ed25519 cryptographic checks) are pre-validated before any disk mutation. A persistent Write-Ahead Log (
~/.local/state/ulpm/wal/) guarantees safe LIFO rollback and full crash recovery even across unexpected reboots orSIGKILL. - State History & Bidirectional Rollback: Zero-data-loss application snapshots (
ulpm history,ulpm rollback <app_id>) allowing instant rollback to previous versions and atomic rollback-undo swaps. - DAG Dependency Resolver & SemVer Guard: Complete Directed Acyclic Graph resolution engine detecting cycles and comparing exact or range versions (
>=,<=,==,>,<) before committing transactions (ulpm deps resolve <app-id>). - Signed Deterministic Repositories: Remote or local mirror support with pinned Ed25519 repository signatures (
ulpm repo add/update/search) ensuring index integrity and preventing supply-chain poisoning. - Declarative Permissions & Overrides: Fine-grained sandbox controls declared in JSON manifests (
meta/manifest.json), customizable at runtime with user-defined overrides stored in~/.config/ulpm/overrides/. - Hardened Security: Bubblewrap user namespaces, granular session D-Bus proxy filtering (
xdg-dbus-proxy), embedded 104-byte ASN.1DER Ed25519 trailer signatures, and strict TOFU key pinning.
ULPM is a minimalist, modern package manager designed to bridge the gap between traditional system packages (.deb, .rpm, .AppImage) and massive monolithic runtimes (Flatpak, Snap).
It packages applications into .lpk (Linux Package Kit) files—autonomous, read-only SquashFS images compressed with modern Zstandard (zstd) and runs them via native Linux user namespaces (Bubblewrap) with zero system overhead.
-
🚫 Zero Daemon: No background services consuming memory or disk I/O.
-
👤 100% Rootless: Install, build, update, and run applications entirely in user-space (
~/.local/share/ulpm). Nosudorequired. -
🛡️ Declarative Hardened Sandbox: Fine-grained permission model (Manifest v5), isolated filesystem, restricted
/etcview, filtered session D-Bus (xdg-dbus-proxy), separate XDG directories (~/.var/app/<app_id>), and strict capability dropping (--cap-drop ALL). -
🔄 Atomic Transactions & WAL Engine: All packages in an operation are resolved, downloaded, and verified before mutating the system. Interrupted transactions auto-recover via a persistent WAL journal.
-
⏪ Instant History & Rollback: Bidirectional application rollback allowing you to instantly revert to historical versions without losing your current install.
-
🌿 Deterministic DAG Resolver: Native SemVer-compliant dependency graph resolution preventing broken states and dependency cycles.
-
🎛️ Granular Overrides & Profiles: Audit and adjust application permissions anytime (
ulpm permissions,ulpm override) or switch sandbox execution modes on the fly (--gaming,--strict,--desktop). -
🔑 Cryptographically Signed & Pinned: Autonomous 104-byte embedded Ed25519 payload signatures verified before execution or installation. Per-application key pinning prevents supply-chain attacks on upgrade.
-
🌐 Signed Online Repositories: Add, mirror, search, and install from public or private repositories signed with pinned Ed25519 keys (
ulpm repo). -
🎮Hardware & Gaming Native: Direct zero-friction pass-through for host GPU drivers (Mesa, DRI/VA-API, proprietary Nvidia), gamepads (
/dev/input), raw HID devices (/dev/hidraw*), USB subsystems (/dev/bus/usb), Wayland, X11, PipeWire, and PulseAudio. -
⚡ Instant Streaming & Demo: Stream apps directly into volatile RAM/tmpfs to test software on the fly with zero footprint upon exit.
-
🧠 Smart Cache: Intelligent HTTP header (
ETag/If-Modified-Since) validation preventing duplicate downloads when running remote URLs. -
🔄 Universal Conversion: Automatically turn raw
.AppImage(via safe non-executing ELF/SquashFS parsing),.tar.gz,.deb,.rpm, or direct GitHub repositories into self-contained.lpkbundles on the fly. -
🧬 SeamlessHost Graphics Bridge: Prevents ABI divergence and crashes on proprietary drivers (NVIDIA / Mesa) inside containers by dynamically mountingand binding host display stacks, DRI, and GLVND loaders straight into guest runtimes.
-
🕹️Compositor & Micro-Compositor Ready: Built-in low-latency pipeline ready to host Valve's Gamescope, Xephyr, or nested Wayland compositors directly inside isolated containers for dedicated portable gaming sessions.
| Feature | Snap | Flatpak | AppImage | ULPM (.lpk v6.0) |
|---|---|---|---|---|
| Daemonless | ❌ (snapd required) | ✔️ | ✔️ | ✔️ Yes |
| Rootless Install | ❌ (requires root) | ✔️ | ✔️ Full user-space | |
| Runtime Overhead | ✔️ Low | 🚀 Near-zero | ||
| Atomic Multi-Package WAL | ❌ No | ❌No | ❌ No | 🛡️ Yes (Full LIFO Rollback) |
| State Snapshots & Rollback | ❌ CLI complex | ❌ No | ⏪ Native (ulpm rollback) |
|
| DAG Dependency Resolution | ❌ Flat runtimes | ❌ Flat runtimes | ❌ None | 🌿 Native SemVer DAG |
| Signed Repositories | Snap Store only | Flathub GPG | ❌ None | 🔑 Ed25519 Pinned Repos |
| Declarative Permissions | ❌ AppArmor profiles | ✔️ Manifest permissions | ❌ None | 🛡️ Schema v5+ User Overrides |
| Sandbox Built-in | AppArmor (Host root) | Bubblewrap | ❌ None by default | 🛡️ Bubblewrap + D-Bus proxy |
| Dynamic Kill-Switches | ❌ None | ❌ None | 🎛️ --no-gpu, --offline, --strict |
|
| Distro/RootFS Execution | ❌ No | ❌ No | ❌ No | 🐧 Full RootFS support |
| RAMStream Apps (Zero-Disk) | ❌ No | ❌ No | ❌ No | ⚡ Direct volatile stream |
| Mandatory Signatures | Snap Store only | Flathub GPG | ❌ Rare | 🔑 EmbeddedEd25519 (104B) |
| Multi-format Builder | Complex recipe | Complex JSON/YAML | Manual recipes | 🪄 Auto from .appimage/.deb/.rpm/tar |
| Zero-Mismatch NVIDIA Bridge | ❌ Complex (nvidia-container-toolkit) | ❌ Host ABI breaks common | ⚡ Native host passthrough |
Complete documentation is available in docs/.
| Guide | Contents |
|---|---|
| Installation | Requirements, installer options, layouts, updates and removal |
| Quick start | Build, run, install and publish your first package |
| CLI reference | Every command, flag and alias |
| Packaging | pack, deb-pack, AppImage/Deb/archive conversion and signing |
| Repositories | Signed indexes, ulpm repo, ulrm, local and HTTPS hosting |
| Dependencies & transactions | Dependency specs, DAG resolution, WAL transactions, history and rollback |
| Permissions & sandbox | Manifest permissions, runtime profiles, overrides and data isolation |
| LPK format | SquashFS layout, manifest v5 schema and signature trailer |
| Configuration | XDG paths, environment variables, database and file formats |
| Security model | Ed25519 signatures, trust store, publisher pinning and threat model |
| Architecture | Modules, execution flows and design constraints |
| Development | Tests, CI, conventions and release checklist |
| Troubleshooting | Diagnostics, common errors and safe workarounds |
Project policies: Contributing · Security policy.
ULPM is designed with a zero-daemon, minimal-overhead philosophy. It leverages battle-tested, standard Linux utilities:
| Component | Utility | Description |
|---|---|---|
| Sandboxing |
bubblewrap (bwrap) |
Lightweight unprivileged user-namespace isolation |
| D-Bus Filtering | xdg-dbus-proxy |
(Optional but recommended) Restricts and filters session D-Bus access |
| Filesystem |
squashfuse & fuse3
|
High-performance user-space mounting for compressed images |
| Bundle Creation |
squashfs-tools (mksquashfs,unsquashfs) |
Generates and safely extracts optimized .lpk images |
| Cryptography |
openssl (>= 3.0) & coreutils
|
Autonomous Ed25519 trailer signature verification & raw I/O |
| JSON & Data Parsing |
jq, awk
|
Fast JSON manifest validation, query merging, and DB indexing |
| Binary Inspection |
od, cmp, file,readelf
|
Secure non-executing ELF header parsing and binary offset matching |
| Transport | curl |
Smart conditional caching and remote repository sync |
| Process Locking & WAL |
util-linux (flock), sync
|
Safe multi-process concurrency, WAL journaling and durability |
The official installer auto-detects your environment, resolves dependencies across major package managers (apt,pacman, dnf, zypper, apk, xbps), and sets up either a rootless or system-wide installation.
curl -fsSL https://raw.githubusercontent.com/Ruraam/ulpm/main/install.sh | bashNote
Choice in Dashboard:
-
1) Rootless Installation: Installs cleanly to
~/.local/bin/ulpmwithout requiring root permissions. -
2) System-Wide Install: Installs globally to
/usr/local/bin/ulpmfor all users on the host. -
3) Debian/Ubuntu-based: Installs via ulpm official APT repo signed with gpg key
Installation and upgrade via Debup
Search & Install:
dbp -s ulpmSelect option 1 and press Enter to install the latest .deb packagedirectly from GitHub Releases.
Upgrade:
dbp -uIf you prefer installing dependencies manually before running the script:
Debian / Ubuntu / Linux Mint:
sudo apt update && sudo apt install -y bubblewrap xdg-dbus-proxy squashfuse fuse3 squashfs-tools openssl jq file curl diffutils coreutils util-linuxArch Linux / Manjaro:
sudo pacman -Syu --needed bubblewrap xdg-dbus-proxy squashfuse fuse3 squashfs-tools openssl jq file curl diffutils coreutils util-linuxFedora / RHEL / CentOS Stream:
sudo dnf install -y bubblewrap xdg-dbus-proxy squashfuse fuse3 squashfs-tools openssl jq file curl diffutils coreutils util-linuxAlpine Linux:
sudo apk add bubblewrap xdg-dbus-proxy squashfuse fuse3 squashfs-tools openssl jq file curl diffutils coreutils util-linuxInstall one or multiple applications and their entire dependency chains atomically. If any error occurs or a signature fails, the entire transaction is rolled back cleanly:
Install multiple applications with atomic safety
ulpm transaction install io.lpk.firefox io.lpk.vlcTarget a specific verified repository
ulpm transaction install io.lpk.retroarch --repo gaming-repoManually trigger recovery of interrupted transactions
ulpm transaction recoverULPM preserves historical snapshots before each package upgrade or transaction commit:
View snapshot history for an application
ulpm history io.lpk.firefoxRoll back to the previous snapshot version
ulpm rollback io.lpk.firefox (Rolling back automatically preserves the reverted package as a historical swap point, allowing seamless undo).
Manage trusted online repository mirrors with pinned cryptographic signatures:
Add a remote repository with pinned developer public key
ulpm repo add myrepo https://repo.example.com/ulpm publisher.pubUpdate cached repository indexes and verify Ed25519 signatures
ulpm repo updateSearch across all enabled repositories
ulpm repo search blenderGenerate a signed, deterministic repository index from local bundles
ulpm repo index /var/www/ulpm/packages ~/.config/ulpm/keys/release.privInspect manifest dependencies and compute clean DAG installation plans:
Validate dependencies of an installed package or manifest file
ulpm deps check io.lpk.firefox
ulpm deps check ./manifest.jsonResolve dependency graph for an application (dependencies first)
ulpm deps resolve io.lpk.firefoxLaunch any local .lpk, an installed package ID, or an entire containerized RootFS:
Run a local bundle or installed package
ulpm run ./brave_amd64.lpk
ulpm run io.lpk.braveExecution Profiles (v5 Declarative):
Launch with high-performance gaming passthrough (DRI, Input, HID, USB)
ulpm run --gaming io.lpk.retroarchLaunch in strict lockdown (Offline, no GPU, no downloads, isolated home)
ulpm run --strict io.lpk.untrusted-toolRuntime Kill-Switches & Storage Controls:
Disable all networking
ulpm run --offline io.lpk.braveDisable hardware GPU acceleration (/dev/dri, Vulkan, NVIDIA)
ulpm run --no-gpu io.lpk.appDisable audio servers (PulseAudio, PipeWire, ALSA)
ulpm run --no-audio io.lpk.gameRunRun in pure CLI / headless mode (severs X11 and Wayland sockets)
ulpm run --no-gui io.lpk.distro-rootfsExpose real host $HOME read-write or read-only (persistent override)
ulpm override io.lpk.editor --share-home
ulpm override io.lpk.editor --share-home-roMount a custom host directory into the sandbox
ulpm run --bind /data/projects:/workspace io.lpk.ideAudit effective permissions and customize security boundaries without modifying package bundles:
Inspect effective application permissions
ulpm permissions io.lpk.firefoxApply persistent local overrides
ulpm override io.lpk.firefox --no-net
ulpm override io.lpk.blender --share-home
ulpm override io.lpk.game --gaming
ulpm override io.lpk.custom permissions.devices.kvm=trueReset local overrides back to package defaults
ulpm permissions reset io.lpk.firefoxStream remote applications directly into volatile RAM/tmpfs:
ulpm stream https://example.com/app_amd64.lpk
ulpm stream owner/repoWhen the application exits, the ephemeral runtime and all cached binaries are automatically destroyed.
ULPM resolves host dependencies using ldd and fat-bundles required shared libraries:
Package a folder, archive or AppImage into an autonomous .lpk
ulpm pack ./app.AppImage
ulpm pack ./extracted_folder myapp
ulpm pack ./app.tar.gz my-custom-appBuild a standalone .lpk bundle fetching all recursive APT dependencies
ulpm deb-pack firefox-esrInspect and manage reusable shared foundation layers:
List available runtimes
ulpm runtime listInstall a shared base runtime layer
ulpm runtime install ./runtime-base_amd64.lpkList all installed packages
ulpm listUpgrade tracked repository packages and standalone GitHub releases
ulpm upgradeCompletely remove an application and its desktop integration
ulpm uninstall io.lpk.brave --remove-allIntegrate .lpk MIME types with desktop environment (double-click to launch)
ulpm integrateRun environmental diagnostics
ulpm doctorSecurity is not an afterthought. ULPM enforces autonomous signature verification before installing or running any package without relying on detached .sig files:
-
Self-Contained Footer: Every signed
.lpkembeds a fixed 104-byte cryptographic trailer ([8B magic ULPM_SIG | 32B public key | 64B signature]) at the end of the file. -
Per-Application Key Pinning (TOFU): On first installation, the SHA-256 fingerprint of the developer's public key is stored in
installed.db. Upgrades and rollbacks require the same publisher key, preventing supply-chain takeover. Expected key rotations must be explicitly acknowledged withULPM_ALLOW_KEY_ROTATION=1. -
Payload Integrity: The SquashFS payload size is computed dynamically without tampering with the compressed data stream.
- Automatic Keypair Generation: On first pack, ULPM transparently initializes a personal 256-bit Ed25519 keypair in
~/.config/ulpm/and trusts it locally. - Manual Key Management:
ulpm keygen release_keyInject an autonomous signature into an existing package
ulpm sign myapp_amd64.lpk ~/.config/ulpm/keys/release_key.privTrust a developer's public key
ulpm trust developer.pubPackages lacking a valid cryptographic signature or signed by an untrusted key are rejected by default. Valid signatures from untrusted keys can be accepted with ULPM_STRICT_SIGNATURES=false; unsigned packages additionally require ULPM_ALLOW_UNSIGNED=1.
Important
Fail-closed sandboxing: if Bubblewrap is missing or unprivileged user namespaces are disabled, ULPM refuses to execute the application. Running without isolation requires an explicit opt-in: ULPM_UNSAFE_NO_SANDBOX=1 ulpm run <package>. Only use this override for software you fully trust.
Every application or RootFS runs within an ephemeral Bubblewrap namespace configured for maximum performance and user privacy:
-
Isolated User Storage: Instead of cluttering
$HOME, application data is sandboxed by default into: -
~/.var/app/<app_id>/config➔ Mounted as$HOME/.config -
~/.var/app/<app_id>/data➔ Mounted as$HOME/.local/share -
~/.var/app/<app_id>/cache➔ Mounted as$HOME/.cache -
D-Bus Hardening: Session D-Bus access is guarded via
xdg-dbus-proxy, exposing only strictly necessary interfaces (Portals, Notifications, MediaPlayer, ScreenSaver) and isolating the rest of the host. -
Strict Host Views: Only vital configuration directories under
/etcare shared. Host$HOMEis shielded except for a controlled multilingual download gate ($HOME/Downloads/$HOME/Téléchargements), unless explicitly permitted via declarative manifest or user override. -
Dynamic Security Gates: Unshare network (
--offline), disable IPC (--no-gui), strip graphic devices (--no-gpu), or mute sound servers (--no-audio) via CLI overrides or manifest declarations. -
Host Integration:
-
Native display pass-through: Wayland socket & X11 (with MIT-SHM IPC compatibility).
-
Native audio: Direct individual sockets for PipeWire and PulseAudio.
-
Native themes and fonts:
/usr/share/fonts,/usr/share/themes, and~/.iconsare mounted read-only. -
Hardware acceleration: Direct pass-through of
/dev/dri,/usr/share/glvnd,/usr/share/vulkan, and seamless host proprietary/dev/nvidia*nodes to completely eradicate kernel-driver version mismatch in RootFS containers. -
Dedicated gaming devices: Direct access to game controllers (
/dev/input), raw HID devices (/dev/hidraw*), and USB buses via--gaming. -
Dedicated gaming rootfs paths: Automatic discovery and persistence bridges for retro-gaming suites(e.g.
/recalbox/sharemounts for saves, BIOS, and ROMs).
Contributions, issues, and feature requests are welcome! See CONTRIBUTING.md for the development workflow, and report vulnerabilities according to SECURITY.md. Feel free to check the issues page.
- Autonomous
.lpkpackaging format (v5 with Schema v5 declarative permissions & embedded 104-byteULPM_SIGfooter). - Autonomous Ed25519 cryptographic signing & keyring.
- Cryptographic key pinning on upgrades (TOFU).
- Bubblewrap isolation with dynamic XDG remapping & execution profiles (
--gaming,--strict,--desktop). - Declarative permission inspection and user overrides (
ulpm permissions,ulpm override). - Reusable shared hybrid runtimes (
ulpm runtime). - Session D-Bus proxy filtering via
xdg-dbus-proxy. - Safe non-executing AppImage ELF/SquashFS offset-based extractor.
- Ephemeral RAM streaming execution (
ulpm stream). - Smart Cachewith conditional HTTP verification (
ETag/If-Modified-Since). - Automatic recursive
.debdependency resolution. - Containerized unprivileged RootFS execution (Debian XFCE,Arch, Recalbox without KVM or Docker).
- Host graphic stack zero-mismatch bridge for proprietary NVIDIA drivers.
- Dedicated persistent bindings for guest retrogaming systems (
/recalbox/share). - Gamescope and unprivileged nested Wayland/Xwayland compositor execution support.
- Autonomous GitHub repository release tracking & OTA updates (
ulpm upgrade).
- Add support for [your favorite distro] (PRs welcome!)
- Dedicated multilib 32-bit library containmentfor standalone Wine runners.
- Nested namespace permission helper (for Steam / Proton
pressure-vessel). - Fix [open issue]
The test suite requires bash, openssl, jq, mksquashfs and unsquashfs:
bash tests/run.shCI runs bash -n, shellcheck -x and the test suite on every push and pull request.
This project is licensed under the GPLv3 License.
-
BubbleOS
— BubbleOS is an experimental Linux operating system built around the Linux kernel and the ULPM/LPK ecosystem.
-
debup - Hybrid Package Manager
— The missing bridge between
GitHub & APTfor Debian/Ubuntu-based distributions, WSL, AndroidLinux Terminal. Discover, search, track, install, and upgrade .deb packages directly from APT & GitHub Releases onall architecturessimultaneously. -
Universal Ruvomain ADB App Manager [URAAM]
— An all-in-one shell toolkit for
Android debloating. Uninstall/disable your apps, backup your debloat apps JSON file & revert/restore, installapk. Works withTermux WirelessADB, Shizuku, Root,Linux Debian, Arch, Fedora,macOS & WSL. Compatible with Canta/UAD JSON lists.