Tsunagu

Running it

Standalone, with Nix:

nix develop
cd backend && go run ./cmd/server

The server binds to :6007 by default and writes its config to tsunagu.toml in the working directory on every save.

Docker

A docker-compose.yml and Dockerfile at the repo root cover the headless self-host path. Images are built multi-arch (linux/amd64, linux/arm64) and published on release.

Startup contract

On a successful bind, and before any slow work, Tsunagu prints TSUNAGU_READY url=... version=... to stdout; everything else logs to stderr. This is what a supervising launcher (like Moku’s Tauri shell) watches for before treating the server as up.

The JVM sandbox is not started at boot. It’s spawned lazily on the first request that needs a source (browse, search, read, or stream), taking a few seconds to cold start, then stays warm until idle_timeout_minutes of inactivity before shutting down again.

GET /healthz reflects the Go server’s own readiness only, not the sandbox. It returns instantly and is meant for startup polling and container healthchecks.