Soft Package Manager - Universal cross-platform metapackage manager
Project description
███████╗██████╗ ███╗ ███╗
██╔════╝██╔══██╗████╗ ████║
███████╗██████╔╝██╔████╔██║
╚════██║██╔═══╝ ██║╚██╔╝██║
███████║██║ ██║ ╚═╝ ██║
╚══════╝╚═╝ ╚═╝ ╚═╝
Soft Package Manager — The ultimate offline-first, cross-platform metapackage manager written in Rust.
[!WARNING] DEMO VERSION (v0.1 Beta) This utility is currently a working prototype/demo. It has been extensively tested and heavily optimized for Windows (combining Winget, Chocolatey, and Scoop into a flawless experience).
Linux & macOS Support: While SPM technically runs and works fine on macOS and Linux (via
apt,brew,pacman), it currently doesn't fully unleash its potential there. The primary focus of this release is solving the fragmented package ecosystem on Windows. In the long-term, massive updates are planned to bring full first-class native parity to Linux and macOS!
📖 What is SPM?
SPM (Soft Package Manager) is a lightning-fast, universal abstraction layer over your system's native package managers. Instead of remembering the exact commands and package names for winget, scoop, chocolatey, apt, pacman, or brew, you interact with a single, unified interface.
SPM intelligently routes your commands to the best native package manager on your system, maintaining a centralized SQLite database to track what you have installed, regardless of how it was installed.
Key Features
- 🚀 Blazing Fast: Written in pure Rust. Zero bloat, zero runtime overhead.
- 🔌 Universal Native Binding: Automatically detects and uses
winget,scoop,apt,brew,pacman, andchoco. - 🧠 Offline Match Engine: Resolves common aliases (e.g.,
discord,vscode) to their true native IDs (e.g.,Discord.Discord) instantly, without querying external REST APIs. - 💾 Centralized State: Maintains an ACID-compliant SQLite database of all your apps.
- 🛠️ Data-Driven Plugins: Extend SPM with 0 lines of code by writing simple TOML templates that use Regex to parse CLI output.
⚡ Installation
SPM is built for everyone and distributed across all major packaging hubs. Choose your favorite engine to install it globally.
Cargo (Rust Native)
cargo install spm-cli
PyPI (Python)
pip install spm-cli
NPM (Node.js)
npm install -g spm-cli
Homebrew (MacOS/Linux)
brew install spm-cli/tap/spm
Paru / Yay (Arch Linux)
paru -S spm-cli-bin
Setup Script (Curl)
curl -fsSL https://spm.sh/install | bash
🏗️ Architecture
SPM features a highly decoupled, modern CLI architecture:
- The Match Engine: An embedded offline database of 30,000+ app definitions. When you type
spm install vlc, the Match Engine instantly translates it into absolute native targets (e.g.,VideoLAN.VLC). - The Planner: SPM ranks available package managers heuristically.
pacmanandwingetreceive top priority, while slower engines fall back gracefully. The Planner generates a transaction sequence before touching your system. - Async Native Adapters: All package manager wrappers implement an asynchronous
PackageManagertrait. Instead of recreating the wheel, SPM acts as an intelligent orchestrator directly streaming native outputs to your terminal. - SQLite State Management: Upon successful execution, the transaction is committed to
~/.config/spm/spm.db(or%APPDATA%), allowing unified lists and instant removals.
🕹️ Command Reference
SPM uses standard, intuitive verbs for all operations.
📦 Smart Installation
Automatically resolve the best ID and install via the optimal manager.
spm install obsidian
Tip: append --dry-run to see the Execution Plan without acting on it.
🧹 Unified Removal
Remove applications tracked across any package manager effortlessly.
spm remove obsidian
🔄 Global Updates
Update a single app, or trigger a massive, concurrent update across all package managers at once.
spm update
📋 Tracked List
Display a brilliantly formatted ASCII table of all tracked applications across the OS.
spm list
🩺 System Diagnostics
Run a health check on your active native environments and plugins.
spm doctor
🌐 Self-Update
Pull the absolute latest release instantly without re-invoking pip/npm/cargo.
spm self-update
🧩 TOML Plugin System (v1.0)
Forget writing messy Python or Lua wrappers. SPM introduces Data-Driven Plugins.
By placing a simple .toml file in ~/.config/spm/plugins/, you can teach SPM how to command any CLI tool using internal Regex parsing.
Example cargo.toml plugin mapping:
name = "cargo"
is_available_cmd = "cargo --version"
install_cmd = "cargo install {pkg}"
remove_cmd = "cargo uninstall {pkg}"
update_all_cmd = "cargo install-update -a"
update_pkg_cmd = "cargo install {pkg} --force"
list_cmd = "cargo install --list"
list_regex = "(?P<name>[\\w-]+) v(?P<version>[\\d\\.]+):"
Place the file, type spm doctor, and within 100 milliseconds SPM has synthesized an active, native rust-equivalent driver!
📜 License
Distributed under the MIT License. Build beautiful things.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spm_cli-0.1.0-py3-none-win_amd64.whl.
File metadata
- Download URL: spm_cli-0.1.0-py3-none-win_amd64.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59c9237fb55d99f849ab4a5a64a5297e258cde67e73105aa0a2c8043bb8a12f1
|
|
| MD5 |
a76ee5ba0fbc1a7768f024d5e687c098
|
|
| BLAKE2b-256 |
7dc18fd8769e7868fc8314ff851e05176a5ec85b2b5dffa00f1c41b2eb3928d3
|
File details
Details for the file spm_cli-0.1.0-py3-none-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: spm_cli-0.1.0-py3-none-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 2.2 MB
- Tags: Python 3, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
787ba4cc4a2e1823d2c68d0a2ce79c86ef3da7945e93673ffe58016ce69a2c6d
|
|
| MD5 |
60a5309fc32f567ea856c8c83edfa856
|
|
| BLAKE2b-256 |
54dd95279b34b02bb2ea2616cffba2af403fe79e9ea54b8a0fe9e3da1c9c00ef
|
File details
Details for the file spm_cli-0.1.0-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: spm_cli-0.1.0-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.1 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.14.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c5a1ed71d2458b53e5348943ee26451bbd0ca8ded2350a8df8119a1d45785e0
|
|
| MD5 |
e9d5e2c7e71e5f13aba06e1bca113090
|
|
| BLAKE2b-256 |
52cd28d6c40cee4290eaf2f69fac652f786c71e39c143acf002911f13905dbd3
|