Running it with Docker
Requires Docker with Compose v2. Nothing is built on your machine: the compose file pulls the
prebuilt ghcr.io/wyne/yarukoto image (amd64 and arm64), so all you need is the compose file
itself.
git clone https://github.com/wyne/yarukoto.gitcd yarukotoGenerate an access token — this is the only credential, so make it a real random one:
echo "YARUKOTO_TOKEN=$(openssl rand -hex 32)" > .envStart it:
docker compose up -dOpen http://localhost:8080. Because the page is served by the server itself, the app detects
that automatically and asks only for the access token — paste the value from your .env:
cat .envTo confirm it’s healthy:
curl -fsS localhost:8080/api/v1/healthThat also names the build that’s running:
{"ok":true,"version":"1.0.0","commit":"366ba58…","commitShort":"366ba58","builtAt":"2026-01-30T12:04:11Z","features":["taskReminders"]}The same version and short sha appear in the app under the sidebar’s server sheet,
so you can tell whether an instance actually picked up an update. commit is empty
for a local build unless you stamp it: GIT_SHA=$(git rev-parse HEAD) docker compose build. Published images (ghcr.io/wyne/yarukoto) always carry it, and the short sha
matches their sha-<short> tag.
Updating
Section titled “Updating”docker compose pulldocker compose up -dYour database lives in ./data on the host and is untouched by updates. Watchtower and similar
tools work too; pin a sha-<short> tag instead of latest if you’d rather choose when to move.
Building from source
Section titled “Building from source”To build the image from your checkout instead of pulling it, layer
docker-compose.build.yml on top:
GIT_SHA=$(git rev-parse HEAD) docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildIt runs the Metro bundler and compiles better-sqlite3, so give it a few GB of memory and a few
minutes. GIT_SHA is optional; it stamps the build so /health can name the commit.
