Chronicler
Getting started

Manual install

Install the stack from a terminal - the path for a headless server.

Use this when the server has no desktop - a VPS, a NAS, a machine in a rack - or when you'd simply rather see what you're running.

Create a folder for the install

Everything lives here: the compose file, the .env, and by extension your database. Put it somewhere permanent.

PowerShell
New-Item -ItemType Directory -Force -Path "$env:ProgramData\Chronicler" | Out-Null
Set-Location "$env:ProgramData\Chronicler"

Download the compose file

PowerShell
Invoke-WebRequest -Uri "https://github.com/ChroniclerLM/Releases/releases/latest/download/docker-compose.yml" -OutFile "docker-compose.yml"

Write the .env

Two values are required: a database password, and which runtime to use for the model.

PowerShell
"POSTGRES_PASSWORD=$([guid]::NewGuid().ToString('N'))`nCOMPOSE_PROFILES=cpu" | Out-File -Encoding ascii .env

-Encoding ascii matters: Docker Compose can't read the UTF-16 that Out-File writes by default.

No default password ships, on purpose - a shipped default would make every install on the internet identically guessable. Compose refuses to start without one, and changing it after the first start locks you out of your own database. Back this file up with your other secrets.

Pick the right runtime

COMPOSE_PROFILES decides which Ollama container starts: cpu, nvidia or amd. cpu always works. If the machine has a graphics card, let the detection script choose:

PowerShell
$vram = nvidia-smi --query-gpu=memory.total --format=csv,noheader,nounits 2>$null
$profile = if ($vram) { "nvidia" } else { "cpu" }
(Get-Content .env) -replace '^COMPOSE_PROFILES=.*$', "COMPOSE_PROFILES=$profile" |
  Set-Content -Encoding ascii .env
if ($vram) {
  Add-Content -Encoding ascii .env "CHRONICLER_GPU_VRAM_GB=$([math]::Floor($vram / 1024))"
}

AMD acceleration is Linux-only. On Windows this selects NVIDIA when its driver is visible; otherwise it keeps the CPU profile.

It probes the host and writes the right COMPOSE_PROFILES into .env, plus CHRONICLER_GPU_VRAM_GB if it finds an NVIDIA card - that second key is what lets Admin → Model offer you the GPU-class models later. Details and manual alternatives: GPU acceleration.

If COMPOSE_PROFILES is missing entirely, no model runtime starts. The stack comes up but can't answer anything, and docker compose logs ollama-pull will say so after two minutes.

Start it

PowerShell
docker compose up -d
docker compose logs -f

First start pulls several gigabytes. When chronicler-backend reports it's listening on 8410, you're up. chronicler-ollama-pull exiting is normal - it downloads the model and stops.

Check with:

PowerShell
docker compose ps
Invoke-RestMethod http://localhost:8410/health

Connect the app and claim the server

On any machine on the network, open Chronicler → Settings → Connection → Local, and enter http://<server-ip>:8410.

The login screen offers Register your admin account while the server has no users. Create it, accept the licence terms, and activate your key (Licensing).

Do this immediately after the first start, from a machine you trust. An empty server is claimable by whoever gets there first.

What just started

The database schema is created automatically on first boot, and again on every update - you never run migrations by hand. Before a schema change the backend dumps the database first and refuses to continue if that dump fails.

Optional next steps