3.1 KiB
3.1 KiB
upm
Universal Package Manager
upm is a Rust Cargo workspace for a modular package manager with a shared headless core and provider crates.
Workspace
crates/upm-core: headless application layer for query normalization, resolution, planning, registry persistence, install/update orchestration, and provider-facing APIscrates/upm: thin terminal frontend for argument parsing, config loading, prompting, progress reporting, and summary renderingcrates/upm-appimage: AppImageHub transport, search, and add-provider integration composed into the CLI throughProviderRegistry
The split is intentional so future frontends can reuse upm-core, while package-source behavior stays modular instead of being hardcoded into the core.
Commands
upm <QUERY>
upm
upm update
upm list
upm search <QUERY>
upm remove <QUERY>
Query Forms
owner/repofor GitHub shorthandappimagehub/<id>for AppImageHub shorthand- GitHub repository URLs
- GitHub release URLs
- direct GitHub release asset URLs
- AppImageHub item URLs such as
https://www.appimagehub.com/p/2338455 https://...direct URLs- GitLab URLs
- SourceForge URLs
file://...local file imports
Search
upm search <QUERY> is part of the initial modular provider surface.
- search is provider-extensible and currently includes GitHub plus AppImageHub
- search results should resolve to install-ready queries such as
owner/repoandappimagehub/<id> - provider composition happens in
crates/upm/src/providers.rs, not through AppImageHub-specific wiring insideupm-core
Scope Overrides
By default upm auto-detects whether to use user or system scope. Override that with:
--user--system
Config
Runtime config is loaded from ~/.config/upm/config.toml or $XDG_CONFIG_HOME/upm/config.toml.
Example:
allow_http = true
allow_http = falseis the defaultallow_httponly permits user-suppliedhttp://inputs such as direct URL installs or updates from previously installed direct HTTP origins- provider-resolved downloads such as AppImageHub artifacts remain HTTPS-only even when
allow_http = true
Breaking Rename
upmis a hard rename fromaim- runtime overrides now use
UPM_*names such asUPM_CONFIG_PATHandUPM_REGISTRY_PATH - old
AIM_*runtime overrides are intentionally ignored - default config and registry locations now live under
upmpaths
Current Flow Shape
upm <QUERY>installs direct provider matches when available, otherwise falls back to search results, shows live progress on stderr, prints anInstallation Summaryon stdout for installs, and renders anInstallation Reviewwhen tracking needs confirmation- bare
upmprints anUpdate Reviewwithout mutating the registry upm updateexecutes the pending updates, streams live status on stderr, then prints anUpdate Summaryupm listrenders eitherInstalled AppsorNo installed apps yetupm remove <QUERY>resolves a registered application name, streams removal progress on stderr, then prints aRemoval Summary
Terminal UX
- prompts use
dialoguer - styled summaries use
console - live spinners and byte progress use
indicatif