Flint

Flint logo

A small, fully offline chat UI for local Ollama models, built to get the most out of small models.

View the source on GitHub

Install and run

Docker

Docker runs Flint only. Ollama stays the normal app on your machine, where it already has your GPU and your models, and the container talks to it. The image is published at ghcr.io/lusan-sapkota/flint (see Image tags), and the compose files in the repository root are ready-to-use examples. Download one; there’s no need to clone the repository.

Linux:

mkdir flint && cd flint && mkdir data
curl -O https://raw.githubusercontent.com/Lusan-sapkota/Flint/main/docker-compose.yml
docker compose up -d

The container uses host networking, so it reaches Ollama at localhost:11434 exactly as a native Flint would, and Ollama never has to listen beyond localhost.

Mac and Windows (Docker Desktop):

mkdir flint && cd flint && mkdir data
curl -O https://raw.githubusercontent.com/Lusan-sapkota/Flint/main/docker-compose.desktop.yml
docker compose -f docker-compose.desktop.yml up -d

Host networking doesn’t work there the same way, because Docker runs in a small VM. This file uses ordinary port mapping, and reaches Ollama through host.docker.internal, which Docker Desktop forwards to your machine. This setup is untested so far, since it was built on Linux; if it doesn’t reach Ollama, please open an issue.

Then open http://localhost:3141. Notes:

From source

Requires Go (see backend/go.mod) and a running Ollama.

ollama serve                 # or the system service
cd backend
go run .                     # must run from backend/: assets resolve via ../frontend

Open http://localhost:8080, sign up, and pick a model.

To build a static binary (no cgo, any OS):

cd backend && CGO_ENABLED=0 go build -o flint .

Environment variables

Variable Default  
HOST 127.0.0.1 address to listen on; localhost only by default, since commands run on this machine and signup is open
PORT 8080  
DB_PATH data/chat.db SQLite file, relative to backend/
ATTACHMENTS_DIR data/attachments uploaded files
OLLAMA_BASE_URL http://localhost:11434 server default; each user can override it in Settings
FLINT_ABLATE empty benchmark only: switches scaffolding off, see benchmark.md. Leave unset.

Image tags

A new image is published for every release, for linux/amd64 and linux/arm64:

Tag Follows
latest the newest normal release (never a pre-release like v0.2.0-beta)
0.1 the newest 0.1.x patch release
0.1.4 exactly that release

The compose files use latest. To stay on one version, change the tag in the compose file. A published version always means the same code: a broken release is fixed by the next version, never by republishing one. How a release is made (for maintainers) is in CONTRIBUTING.md.

Health

GET /healthz checks the database and Ollama’s /api/version. It returns 200 with {"db":"ok","ollama":"ok"}, or 503 naming what failed.

Shutdown

SIGINT and SIGTERM stop accepting requests and give in-flight ones up to 10 seconds to finish. A background summarization cut short by shutdown is just redone later.

Models

Anything Ollama serves works for chat. What Flint uses:

By default a plain chat runs with a 4096-token window, a folder chat with 8192, and a chat with an Ollama cloud model with 32768. Each account can set its own window for local and for cloud models in Settings → Connection, and no model is given more than the context_length it reports; see context-management.md.