Software Object Warehouse

Build Package Repo Ship only what changed

One self-contained binary turns local RPM and DEB packages into usable repositories, then manages snapshots, audit history, and incremental publication when you need more control.

Single binary · Linux + macOS · RPM + DEB · Apache-2.0

SOW 0.3.0 is available — download now

Core capabilities

Flat or Managed

Use the one-command path for a local repository, or keep package membership, immutable generations, and publication history in a Managed workspace.

01 / CREATE

Create repo in one command

◇ Point SOW at a directory of packages

  • sow create indexes top-level RPM and DEB files in place
  • Produces a directly usable flat YUM/APT repository
  • Replaces basic createrepo_c, dpkg-scanpackages, or simple reprepro indexing flows

From package files to repository metadata without a daemon or toolchain.

create.sh
$ sow create /srv/repo --jobs 8
repodata/repomd.xml
Packages
Packages.gz

02 / MANAGED

One pool, many views

◇ Curate Enterprise Linux, Debian, and Ubuntu repositories

  • Stores each live package once per Repository and projects metadata-only Dists
  • Avoids duplicate object keys and redundant uploads on object storage
  • Records immutable Built Generation manifests for retained snapshots and repository variants

Desired membership, policies, signing, and snapshots remain explicit and auditable.

03 / READY TO RUN

One binary, production ready

◇ The same executable on macOS and Linux

  • Self-contained CGO_ENABLED=0 archives for amd64 and arm64
  • The release pipeline produces RPM and DEB installation packages for Linux
  • Safe paths, bounded concurrency, fsync, atomic publication, and strict checks

No repository daemon and no runtime language environment to operate.

04 / INCREMENTAL

Publish only the change set

◇ Inspect first, then synchronize

  • sow changes reports payload, metadata, pointer, and removal records
  • The operation log preserves who changed what and when
  • Publication uses recorded target state to upload the delta instead of every repository object

Small repository changes stay small when synchronized to filesystem or cloud targets.

publish.sh
$ sow changes -r pgsql
+ pool/p/postgresql-18/...
~ dists/el9/x86_64/repodata/...
$ sow publish prod
changed objects verified

Build the first repository now.Start with sow create; move to a Managed workspace when you need policy, snapshots, and publication history.