Skip to main content

Soft Package Manager - Universal cross-platform metapackage manager

Project description

                                      ███████╗██████╗ ███╗   ███╗
                                      ██╔════╝██╔══██╗████╗ ████║
                                      ███████╗██████╔╝██╔████╔██║
                                      ╚════██║██╔═══╝ ██║╚██╔╝██║
                                      ███████║██║     ██║ ╚═╝ ██║
                                      ╚══════╝╚═╝     ╚═╝     ╚═╝

Soft Package Manager — The ultimate offline-first, cross-platform metapackage manager written in Rust.

Crates.io NPM Version PyPI version License: MIT


[!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, and choco.
  • 🧠 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:

  1. 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).
  2. The Planner: SPM ranks available package managers heuristically. pacman and winget receive top priority, while slower engines fall back gracefully. The Planner generates a transaction sequence before touching your system.
  3. Async Native Adapters: All package manager wrappers implement an asynchronous PackageManager trait. Instead of recreating the wheel, SPM acts as an intelligent orchestrator directly streaming native outputs to your terminal.
  4. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

spm_cli-0.1.0-py3-none-win_amd64.whl (2.2 MB view details)

Uploaded Python 3Windows x86-64

spm_cli-0.1.0-py3-none-manylinux_2_39_x86_64.whl (2.2 MB view details)

Uploaded Python 3manylinux: glibc 2.39+ x86-64

spm_cli-0.1.0-py3-none-macosx_11_0_arm64.whl (2.1 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

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

Hashes for spm_cli-0.1.0-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 59c9237fb55d99f849ab4a5a64a5297e258cde67e73105aa0a2c8043bb8a12f1
MD5 a76ee5ba0fbc1a7768f024d5e687c098
BLAKE2b-256 7dc18fd8769e7868fc8314ff851e05176a5ec85b2b5dffa00f1c41b2eb3928d3

See more details on using hashes here.

File details

Details for the file spm_cli-0.1.0-py3-none-manylinux_2_39_x86_64.whl.

File metadata

File hashes

Hashes for spm_cli-0.1.0-py3-none-manylinux_2_39_x86_64.whl
Algorithm Hash digest
SHA256 787ba4cc4a2e1823d2c68d0a2ce79c86ef3da7945e93673ffe58016ce69a2c6d
MD5 60a5309fc32f567ea856c8c83edfa856
BLAKE2b-256 54dd95279b34b02bb2ea2616cffba2af403fe79e9ea54b8a0fe9e3da1c9c00ef

See more details on using hashes here.

File details

Details for the file spm_cli-0.1.0-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spm_cli-0.1.0-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c5a1ed71d2458b53e5348943ee26451bbd0ca8ded2350a8df8119a1d45785e0
MD5 e9d5e2c7e71e5f13aba06e1bca113090
BLAKE2b-256 52cd28d6c40cee4290eaf2f69fac652f786c71e39c143acf002911f13905dbd3

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page