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.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