Install
Ingle is a single binary with a SQLite database. The Docker image runs on both Intel/AMD (amd64) and ARM (arm64, such as a Raspberry Pi 4 or 5). To run the binary directly instead, see Without Docker.
Try it in one command
Section titled “Try it in one command”docker run -d --name ingle -p 8080:8080 -v ingle-data:/data ghcr.io/lukeskelhorn/ingle:latestOpen http://localhost:8080 and follow the first-run setup.
The container runs as the distroless nonroot user (UID 65532). A named volume works as it is. If you bind-mount a host folder instead, make it writable by that UID first: sudo chown 65532:65532 ./ingle-data.
On a home server, with HTTPS
Section titled “On a home server, with HTTPS”The deploy/ folder in the repository runs Ingle with Docker Compose, with Caddy in front for HTTPS. You end up with:
- Ingle at an address like
https://ingle.home.example.com, reachable only on your home network. - A real HTTPS certificate. The iPad needs HTTPS to install Ingle as a home-screen app and keep working through Wi-Fi blips.
- A backup every night, with the last 14 kept.
What you need
Section titled “What you need”- A machine on your home network with Docker and Docker Compose.
- A domain whose DNS is on Cloudflare. Caddy proves to Let’s Encrypt that you own it through Cloudflare’s API, so nothing has to be opened to the internet. If your DNS is somewhere else, see Other DNS hosts.
- The server’s LAN IP address, for example
192.168.1.10. Give it a fixed IP (a DHCP reservation) in your router.
1. DNS record
Section titled “1. DNS record”In Cloudflare, add a DNS record:
| Type | Name | Content | Proxy status |
|---|---|---|---|
| A | ingle.home |
192.168.1.10 (your server) |
DNS only (grey cloud) |
It has to be DNS only: Cloudflare can’t reach a LAN address.
2. Cloudflare API token
Section titled “2. Cloudflare API token”In Cloudflare, go to My Profile › API Tokens › Create Token and use the Edit zone DNS template:
- Permissions: Zone › DNS › Edit
- Zone resources: Include › Specific zone › your domain
Copy the token. Caddy only uses it to add and remove a temporary _acme-challenge TXT record when it gets or renews the certificate.
3. Start it
Section titled “3. Start it”git clone https://github.com/lukeskelhorn/ingle.gitcd ingle/deploycp .env.example .env$EDITOR .env # set INGLE_HOSTNAME and CLOUDFLARE_API_TOKEN
# Ingle runs as UID 65532, so it needs to be able to write backups here.mkdir -p backups && sudo chown 65532:65532 backups
docker compose up -ddocker compose logs -f # wait for Caddy to log "certificate obtained successfully"Open your Ingle address on your phone or laptop. The first time, Ingle asks you to name the household and create the first adult. See Getting started.
.env holds the rest of the settings too, such as the timezone and backups. See Configuration.
4. The wall iPad
Section titled “4. The wall iPad”See Installing on iPad.
Plain HTTP, without Caddy
Section titled “Plain HTTP, without Caddy”If you don’t have a domain, you can run Ingle on http://192.168.1.10:8080. It works, but the iPad won’t install it as an offline-capable app, and sign-in cookies aren’t marked secure. Delete the caddy service from compose.yaml, remove the INGLE_TRUSTED_PROXIES line, and add this to the ingle service:
ports: - "8080:8080"Already running a reverse proxy?
Section titled “Already running a reverse proxy?”Use your own instead of the bundled Caddy: see Reverse proxy, which has a Traefik example.