Skip to content

chrisjenx/silo

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

76 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•—      โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—
โ–ˆโ–ˆโ•”โ•โ•โ•โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘     โ–ˆโ–ˆโ•”โ•โ•โ•โ–ˆโ–ˆโ•—
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘     โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘
โ•šโ•โ•โ•โ•โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘     โ–ˆโ–ˆโ•‘   โ–ˆโ–ˆโ•‘
โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ•‘โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•—โ•šโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ•”โ•
โ•šโ•โ•โ•โ•โ•โ•โ•โ•šโ•โ•โ•šโ•โ•โ•โ•โ•โ•โ• โ•šโ•โ•โ•โ•โ•โ•

Cache where you keep your grain.

CI Release Container License Kotlin JVM Docs Status

๐Ÿ“– Documentation: https://chrisjenx.github.io/silo/

What is Silo?

Silo is a self-hosted HTTP server that speaks the Gradle build cache protocol. It is a drop-in replacement for the now-EOL Gradle Remote Build Cache Node. Written in Kotlin on Ktor. Ships as a fat jar or a multi-arch Docker image. Apache-2.0. Free forever.

Why

Gradle Inc. has deprecated the free standalone Build Cache Node in favor of the paid Develocity product. Teams who want a self-hostable, no-account-required, no-license-fee build cache had no maintained option. Silo fills that gap.

  • One binary. One volume. One port.
  • No phone-home. No telemetry. No accounts.
  • Atomic writes โ€” kill -9 mid-PUT cannot corrupt the cache.
  • LRU + TTL + size + entry-count caps, all enforced together.
  • Self-healing against out-of-band deletes.
  • Prometheus metrics + retro-terminal admin dashboard.

Features

  • Full Gradle HTTP build cache protocol (GET, PUT, HEAD)
  • Pluggable storage โ€” filesystem in v0.1; S3 and GCS planned for v0.2
  • HTTP Basic auth with read-only and read-write user split
  • LRU eviction with TTL, byte-cap, entry-cap, and reserved-free-space thresholds
  • Prometheus /metrics, JSON-structured logs, /health and /ready
  • Retro-terminal admin SPA (Kobweb) โ€” phosphor green, amber CRT, or paper-tape themes
  • Atomic content-addressed writes with SQLite (WAL) metadata index
  • Multi-arch Docker (linux/amd64, linux/arm64) and a single fat jar
  • JVM 21+ โ€” virtual threads, modern Ktor, no native image required

Quick start

Docker

docker run -d --name silo \
  -p 8080:8080 \
  -v silo-data:/data \
  ghcr.io/chrisjenx/silo:latest

Fat jar

curl -L https://github.com/chrisjenx/silo/releases/latest/download/silo.jar -o silo.jar
java -jar silo.jar

docker-compose

See examples/docker-compose.yml. Includes a named volume, env-var auth, and a sidecar Caddy reverse proxy for HTTPS.

Configure Gradle to use Silo

In your project's settings.gradle.kts:

buildCache {
    remote<HttpBuildCache> {
        url = uri("http://localhost:8080/cache/")  // trailing slash is required
        push = true
        credentials {
            username = "ci-writer"
            password = System.getenv("SILO_CACHE_PASSWORD")
        }
    }
}

See examples/gradle-settings-snippet.kts for the full snippet.

Admin UI

Silo ships a single-page admin dashboard at /admin. The design language is intentionally terminal โ€” phosphor green on black, ASCII box-drawing, Unicode block sparklines, no chart libraries. See docs/design.md for the full spec.

โ–ถ Try the live demo โ€” the real admin UI running on simulated data, right in your browser. No install, no backend.

Configuration

Silo is configured via HOCON (application.conf) with environment-variable overrides.

Env var HOCON key Default Purpose
SILO_PORT silo.server.port 8080 HTTP listen port
SILO_STORAGE_ROOT silo.storage.root /data Data directory
SILO_MAX_BYTES silo.storage.max-bytes 107374182400 (100 GiB) Total cache size cap
SILO_MAX_ENTRIES silo.storage.max-entries 1000000 Total entry cap
SILO_MAX_ENTRY_BYTES silo.storage.max-entry-bytes 2147483648 (2 GiB) Per-entry cap
SILO_MAX_AGE_DAYS silo.eviction.max-age-days 30 TTL for untouched entries
SILO_USERS_FILE silo.auth.users-file (unset) bcrypt user list
SILO_ANONYMOUS_READ silo.auth.anonymous-read true Allow unauthenticated GET/HEAD

Full reference: docs/configuration.md. Hardware, requirements, and limits: docs/limits.md.

Documentation

The full docs site is published at https://chrisjenx.github.io/silo/.

Comparison

Feature Silo v0.1 Develocity Build Cache Node
License Apache-2.0 Commercial
Cost Free Per-seat
Self-host Yes Yes
Phone-home telemetry No Yes
Storage backends Filesystem Filesystem, S3
Admin UI Retro terminal Standard
Atomic writes Yes Yes
TTL eviction Yes Yes
Multi-arch Docker linux/amd64, linux/arm64 linux/amd64
Replication Planned (v0.3+) Yes
Resource footprint ~150 MB RAM idle ~1 GB+

Not affiliated with or endorsed by Gradle Inc. or Gradle Build Toolยฎ.

Status

Alpha. The v0.1 walking-skeleton is complete and released (latest v0.1.x); work continues on v0.2 hardening (S3/GCS backends, compression, replication).

Building from source

./gradlew :server:shadowJar
java -jar modules/server/build/libs/silo-*-all.jar

Contributing

See CONTRIBUTING.md. Good first issues are labelled good-first-issue.

Security

See SECURITY.md for the vulnerability disclosure policy.

License

Apache-2.0 โ€” see LICENSE.

About

Free Open Source Gradle Remote Build Cache Node

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors