github pkgforge/soar v0.9.0
Soar v0.9.0

latest releases: v0.11.0, soar-core-v0.13.0, soar-package-v0.2.3...
one month ago

This release completely restructures the internals and adds two features: declarative package management and installing directly from URLs.

Declarative Package Management

You can now define your packages in a TOML file and let Soar handle the rest.

Create ~/.config/soar/packages.toml:

[packages]
curl = "*"           # latest version
jq = "1.7.1"         # pinned to specific version
neovim = { pkg_id = "neovim-appimage", repo = "bincache" }

Then run:

soar apply           # install/update to match the file
soar apply --prune   # also remove packages not in the file
soar apply --dry-run # see what would change

Define once, apply anywhere.

You can get fancier with it too: pin versions, specify repositories, configure portable directories, exclude files. Run soar defpackages to generate an annotated template.

Install from URLs

No more waiting for packages to land in a repository:

soar install https://github.com/user/repo/releases/download/v1.0/tool-linux-amd64

Soar figures out the package name and type from the URL. If it gets it wrong, override with --name, --pkg-type, etc.

Under the Hood

The codebase is now split into independent crates:

  • soar-dl — downloads with resume support
  • soar-db — database layer
  • soar-config — configuration parsing
  • soar-registry — package metadata
  • soar-package — format handling (AppImage, archives, etc.)
  • soar-utils — shared utilities

This doesn't change anything for users, but it makes the code easier to work on. Each crate is versioned independently.

Smaller Things

  • --no-progress flag to suppress progress bars (useful for scripts/CI)
  • Fixed a bug where interrupted downloads wouldn't resume properly
  • Package listing is faster now
  • Better debug logging throughout

⛰️ Features

  • (crate) Init soar-config crate (#108) - (135af26)
  • (install) Allow remote package install - (e060033)
  • (packages) Add declarative installation - (1e95aca)
  • (progress) Allow disabling progress bar - (29e04ff)

🐛 Bug Fixes

  • (install) Handle resume on package install - (f92350f)
  • (update) Resolve random package install on update - (eaa0058)

🚜 Refactor

  • (integration) Integrate soar with modular crates (#123) - (2d340e5)
  • (log) Add more debug logs - (96f5ac9)
  • (log) Add debug logs - (cdbf808)
  • (package) Improve install/remove user experience - (df8ad1c)

⚡ Performance

  • (list) Use minimal struct for listing packages - (71570c7)

⚙️ Miscellaneous Tasks

  • (ci) Ignore libsqlite-sys from machete - (ca0f988)
  • (crate) Downgrade crates to ready for publishing - (3ef7b12)
  • (docs) Update readme, bump msrv - (5158af0)
  • (docs) Fix readme - (90d8abb)

Don't miss a new soar release

NewReleases is sending notifications on new releases.