Halite ships as a single Docker image that serves both the built React SPA and the FastAPI backend onDocumentation Index
Fetch the complete documentation index at: https://www.halite-app.com/llms.txt
Use this file to discover all available pages before exploring further.
LISTEN_PORT (default 8080). Two compose files are provided — choose the one that fits your environment.
Compose profiles
- Postgres (compose.yml)
- SQLite (homelab, compose.sqlite.yml)
When to use: Production-shaped deployments where you want a durable, externally manageable database.
The The
compose.yml defines two services:| Service | Image | Role |
|---|---|---|
db | postgres:18 | Database — data persisted to the halite-pg named volume |
app | Built from Dockerfile | Backend + SPA — waits for db healthcheck before starting |
app service requires db to pass its pg_isready healthcheck before it starts. The halite-pg volume persists Postgres data across container restarts.app service exposes port 8080 on the host. COOKIE_SECURE defaults to true in this profile.The Docker image
TheDockerfile uses a two-stage build:
- Frontend stage (
node:20-alpine) — runsnpm ci && npm run buildto produce the compiled SPA in/app/frontend/dist. - Runtime stage (
python:3.13-slim) — installs the backend package, copies the built frontend assets, runsalembic upgrade headon startup, then launchesuvicorn.
BUILD_HASH build argument. When provided (e.g. BUILD_HASH=$(git rev-parse HEAD) docker compose build), the value is stamped into the frontend build and shown in the sidebar footer. When omitted, the UI displays “Dev”.
TLS and reverse proxy
Halite does not terminate TLS itself. Run it behind a reverse proxy (nginx, Caddy, Traefik, etc.) and set these environment variables:TRUSTED_PROXIES is a recognized setting (comma-separated IP addresses or CIDR ranges) but is not currently wired into request handling. It is reserved for future use.
COOKIE_SECURE=true means the browser will only send the session cookie over
HTTPS. If you set this on a plain-HTTP deployment, you will not be able to
log in.LISTEN_HOST (default 0.0.0.0) and LISTEN_PORT (default 8080). Configure your proxy to forward to that port.
Healthcheck
Both compose profiles configure the same healthcheck:/healthz endpoint returns 200 once the app is ready to serve traffic. Use this URL for load-balancer or orchestrator health probes.
See Configuration for the full environment variable reference.