Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Soar 0.12

0.12.1

Soar 0.12.1 adds CLI-based repository management, custom architecture name mapping, and fuzzy search, along with download and update fixes.

Repository Management CLI

You can now add, update, remove, and list repositories directly from the command line using soar repo (or soar repository), without manually editing config.toml:

# List configured repositories
soar repo list

# Add a new repository
soar repo add myrepo https://example.com/metadata.sdb.zstd \
  --pubkey "RWQ109..." --signature-verification true

# Update repository settings
soar repo update myrepo --enabled false

# Remove a repository and its cached data
soar repo remove myrepo

See Repository Management for full documentation.

Custom Architecture Mapping

Packages in packages.toml can now define an arch_map to override the value substituted for the {arch} placeholder. The keys are the standard architecture names (x86_64, aarch64) and the values are the custom names expected by the package source. This is useful for upstreams that use non-standard architecture naming in their download URLs:

[packages]
mytool = { url = "https://example.com/mytool-{arch}.tar.gz", arch_map = { x86_64 = "amd64", aarch64 = "arm64" } }

On an x86_64 host this resolves the URL to https://example.com/mytool-amd64.tar.gz. Without arch_map, {arch} substitutes the host architecture as-is.

Fuzzy Search and “Did You Mean?” Suggestions

soar search now uses fuzzy matching by default, so partial or slightly misspelled queries still surface relevant packages (it falls back to SQL LIKE for case-sensitive searches). When soar install can’t find a package, soar suggests the closest matching names:

$ soar install ripgep
Package ripgep not found
Did you mean: ripgrep?

Performance

  • Fixed mutex contention in parallel downloads and database access, improving throughput when installing or updating multiple packages at once

Bug Fixes

  • soar update now resolves {arch}, {os}, and {version} placeholders in package URLs, so update checks act on the resolved URL instead of one still containing literal placeholders

0.12.0

Soar 0.12 consolidates the default repositories into a single unified source, changes how public keys are configured, introduces internal architecture improvements, and adds several quality-of-life features.

Breaking Changes

Repository consolidation: The bincache and pkgcache repositories have been replaced with the unified soarpkgs repository. The old repositories are no longer updated.

If you have a custom config.toml, replace your existing repository entries:

# Old (remove these)
[[repositories]]
name = "bincache"
url = "https://meta.pkgforge.dev/bincache/x86_64-Linux.sdb.zstd"

[[repositories]]
name = "pkgcache"
url = "https://meta.pkgforge.dev/pkgcache/x86_64-Linux.sdb.zstd"

# New (add this)
[[repositories]]
name = "soarpkgs"
url = "https://github.com/pkgforge/soarpkgs/releases/latest/download/metadata-x86_64-linux.sdb.zstd"
pubkey = "RWQ109gKujRqohsA7RERlXFfeJi23EcHN3Dz8TxyPAywa5mLw/fbcbU4"
desktop_integration = true

Not all packages have been ported to soarpkgs yet. If you need a package that hasn’t been migrated:

  • Request it to be added to soarpkgs
  • Or use an older version of soar that still supports the old repositories

Public key configuration: The pubkey field now expects an inline key string instead of a URL. If you had pubkey = "https://...", replace it with the actual key value.

Database schema change: The recurse_provides field has been removed and pkg_family has been added. After updating, run soar sync to refresh your database.

pkgforge API proxy removed: GitHub and GitLab release fetching previously used pkgforge proxy endpoints (api.gh.pkgforge.dev, api.gl.pkgforge.dev) as a fallback to avoid rate limits. These proxies have been removed — soar now always calls the upstream GitHub/GitLab APIs directly. If you hit rate limits, set GITHUB_TOKEN or GITLAB_TOKEN in your environment.

@ Prefix for Provides

Packages can now expose additional binaries through the provides field using the @ prefix. When a package’s provides list includes entries starting with @ (e.g., @age-keygen), those binaries are symlinked directly from the package’s install directory to your bin directory.

This means packages that ship multiple binaries can make all of them available on your PATH without needing manual configuration.

Concurrent Process Safety

Running multiple soar instances simultaneously (e.g., in parallel terminal sessions) is now safe. Soar uses file-based locking to prevent concurrent operations from corrupting the database or conflicting with each other. If another instance is running, soar will wait for it to finish before proceeding.

JSON to SQLite Conversion

A new json2db subcommand converts JSON metadata files to SQLite databases. This is useful for repository maintainers who generate metadata in JSON format and need to produce the .sdb database files that soar consumes:

soar json2db metadata.json output.sdb --repo myrepo

Internal Improvements

  • soar-operations crate: Core package operations (install, remove, update, apply, etc.) have been extracted into a frontend-agnostic soar-operations crate, enabling future alternative frontends (GUI, TUI, etc.)
  • soar-events crate: Event reporting has been extracted into a dedicated soar-events crate for structured progress and status reporting
  • Per-context system mode: System mode configuration is now tracked per-context rather than relying solely on a global flag, improving reliability when mixing user and system operations

Bug Fixes

  • Fixed desktop entry Exec and TryExec fields losing flags and arguments during installation
  • Fixed package version normalization during substitution
  • Fixed sync_interval not being properly respected for repository updates
  • Fixed health check using relative paths instead of absolute paths
  • Fixed repository enabled flag not being respected