Silo v0.4.0 release notes

The CLI is reshaped around one-model-per-command, the Rust implementation is gone, and disk reclamation now runs automatically. Smaller surface, fewer footguns.

Silo v0.4.0 is a consolidation release. Over the last several months the codebase carried two implementations (Go and Rust), two sets of build/setup verbs, and a status command that tried to do three unrelated jobs. v0.4.0 collapses all of that.

Go is now the only implementation

The Rust implementation is gone. Everything ships from the Go tree. Install-time footprint, test matrix, and CI complexity all go down; the CLI surface stays identical.

CLI reshape: one model per command

The install verbs used to overlap. silo install installed; silo setup installed packages into a persisted rootfs; silo rebuild re-ran the stored setup; silo pull reconciled. Users had to remember which verb did which.

v0.4.0 picks one model per job and keeps the old names as deprecated aliases (removed in 0.6.0):

silo status is still there; it prints both doctor and current output for users who had it in muscle memory.

Install now refuses duplicates

silo install python used to silently re-install on top of an existing tool. That led to confusion when users wanted “use a different Python version for this project” and got “globally replace Python.” v0.4.0 refuses the second install and points at two alternatives:

Disk reclamation

Three features landed together:

Policy lives in .siloconf:

cache:
  rootfs:
    maxSizeMB: 8192
    maxAgeDays: 60
  tools:
    maxSizeMB: 4096
    maxAgeDays: 30
    perMount:
      rust/cargo: 8192

silo cache report summarises the ~/.silo/ footprint by bucket.

Project lifecycle

silo sync and silo clean replace an ad-hoc “nuke ~/.silo/ when things feel weird” workflow:

Network proxy with allowlist

Per-tool outbound network can now be restricted to an explicit domain allowlist, with wildcard support:

overrides:
  node:
    network:
      hostAccess: true
      proxy:
        allow:
          - registry.npmjs.org
          - "*.github.com"
        deny:
          - "*"

This is the default posture for claude-code installs — api.anthropic.com, github.com, registry.npmjs.org, pypi.org, nothing else.

Two-phase SIGINT

silo run now intercepts Ctrl-C twice. First press forwards SIGINT into the VM (graceful shutdown). Second press stops the container and deletes it. Previously a stuck container left a corrupt silo-* directory under ~/.silo/containers/ that required manual cleanup; the reaper at the top of the next silo run also catches these, but you rarely need it now.

Smaller quality-of-life wins

What’s next

The two priorities for 0.5:

  1. Bootstrap speedup — the ~5-minute first install is the biggest UX cliff. Prebuilt kernel + initfs artifacts should cut it to ~30 seconds.
  2. Homebrew distributionbrew install rchekalov/silo/silo now works. (The fully-qualified user/tap/formula form is required because an unrelated silo cask already exists in homebrew-cask.) Release workflow bumps the formula on every tag.

Full changelog on GitHub. Bug reports welcome.

← all posts