Guided install
Choose how Keel should live.
Use it on one computer, keep it running at home, or put it on a server. These routes use the same application and can move the same workspace between them.
Recommended for Windows
Use the desktop installer.
Download the setup file, run it, and open Keel. Windows SmartScreen may show an unrecognized-publisher warning because this release is not code-signed yet. Confirm the file came from the official GitHub release before continuing.
macOS Apple silicon
Install the server and CLI.
The guided shell installer checks Node.js, downloads Keel, generates local settings, builds the app, and can register a launchd service.
curl -fsSL https://raw.githubusercontent.com/AES256Afro/Keel/main/install.sh | bash -s -- --serviceThen open http://localhost:3000.
Linux desktop
Pick AppImage, Debian package, or service.
The AppImage is portable. The Debian package integrates with Debian and Ubuntu. The shell route is best for a server that should start automatically.
Portable and always on
Run the supported Compose stack.
Clone the source, create a local settings file, and start the SQLite image with a named volume. Keep one application replica when using SQLite.
git clone https://github.com/AES256Afro/Keel.git
cd Keel
cp .env.example .env
docker compose up -d --buildHome server or VPS
Choose private reach or public HTTPS.
For a home server, install Keel and use Tailscale Serve. For a public VPS, use Docker behind Caddy or another reverse proxy, restrict sign-in first, and keep tested off-machine backups.
Before you start
Decide whether Keel should be available only on this machine, privately on your own devices, or publicly on the internet. Local and Tailscale installs have fewer moving parts. A public server needs deliberate access control and HTTPS.
| Goal | Best route | What you manage |
|---|---|---|
| Try Keel on one computer | Desktop package | Updates and backups |
| Use it across your own devices | Home server + Tailscale | The server, Tailscale, backups |
| Use a NAS or container host | Docker Compose | Volume, HTTPS, updates, backups |
| Reach it from anywhere without Tailscale | VPS + reverse proxy | Domain, server, HTTPS, access, backups |
KEEL_OWNER_EMAIL before the first start.Windows
Desktop setup
- Download Keel Setup 1.2.1.exe from the official release.
- If SmartScreen appears, check that the file name and GitHub origin are correct, select More info, then Run anyway. Stop if the source is not the official release.
- Complete setup and open Keel. The first start can take longer while the local database is created.
- Register the owner account, finish the welcome tour, then create and download a test backup from Settings.
Always-on PowerShell service
irm https://raw.githubusercontent.com/AES256Afro/Keel/main/install.ps1 | iexFor a custom location or port, download the script and run .\install.ps1 -Dir C:\Keel -Port 3000 -Owner you@example.com -Service. Open Task Scheduler and confirm the Keel task is running.
Linux desktop
AppImage
chmod +x Keel-1.2.1.AppImage
./Keel-1.2.1.AppImageIf the system reports that FUSE is missing, install the FUSE compatibility package for your distribution or use the Debian package instead.
Debian or Ubuntu
sudo apt install ./keel_1.2.1_amd64.debLaunch Keel from the application menu. Both packages target x86-64 Linux.
macOS or Linux service
- Open Terminal on the machine that will run Keel.
- Run the guided installer. Add
--serviceso it starts automatically. - Read the final summary. It prints the install folder, data path, service name, and URL.
- Open
http://localhost:3000, register the intended owner, and download a test backup.
curl -fsSL https://raw.githubusercontent.com/AES256Afro/Keel/main/install.sh | bash -s -- --serviceUseful options: --dir ~/keel, --port 8080, --owner you@example.com, and --yes. Re-running the installer updates the application and leaves the local settings file in place.
Docker Compose
- Install Docker Engine or Docker Desktop and confirm
docker compose versionworks. - Clone Keel, copy
.env.exampleto.env, and set the owner email and a backup passphrase. - Run
docker compose up -d --build. - Run
docker compose ps. Wait for the service to report healthy, then open port 3000. - Create a backup and confirm you can find it outside the container.
Update with git pull --ff-only && docker compose up -d --build. Read the release notes first and keep a recent backup.
Private home server
This is the recommended multi-device route when only your own devices need access.
- Install Keel on the server with the shell installer or Docker.
- Install Tailscale on the server and your client devices. Sign them into the same tailnet.
- On the server, run
tailscale serve --bg 3000. - Set
KEEL_WEBAUTHN_RP_IDto the server's*.ts.nethostname andKEEL_WEBAUTHN_ORIGINto the complete HTTPS URL. - Restart Keel and confirm the HTTPS address works from a second tailnet device.
This route does not create public DNS and does not require opening port 3000 on the router.
Public VPS
Use a small Debian or Ubuntu server with Docker, a domain, and a reverse proxy such as Caddy. Point DNS to the server before requesting a certificate.
- Set
KEEL_OWNER_EMAILandKEEL_ALLOWED_EMAILSto the intended account. SetKEEL_DISABLE_SIGNUP=1. - Set
KEEL_PUBLIC_URL, WebAuthn origin, and relying-party ID to the final HTTPS hostname. - Put Keel behind HTTPS. Set
KEEL_TRUST_PROXY=1only when your reverse proxy overwrites or appends the forwarding headers. - Start the production Compose stack and confirm
/api/healthreports OK over the public hostname. - Configure an off-machine backup destination and test a restore before trusting the deployment.
Cloudflare can provide DNS, proxying, a Tunnel, and R2 backup storage. Keel itself is a Node server and does not run on Cloudflare Workers today.
Update without losing data
| Install | Update command |
|---|---|
| Shell / CLI | keel update or rerun the installer |
| Windows desktop | Download and run the new setup file |
| Linux desktop | Replace the AppImage or install the new `.deb` |
| Docker | git pull --ff-only && docker compose up -d --build |
| Source | git pull --ff-only && npm ci && npm run build, then restart |
Keel applies its database migrations at startup. Keep a current backup and read release notes before upgrading across versions.
Troubleshooting
The page does not open
Confirm Keel is running, then try http://127.0.0.1:3000. For Docker, inspect docker compose ps and docker compose logs --tail=100. For a service install, use the exact status and log commands printed by the installer.
Another program uses port 3000
Choose another port during install, for example --port 8080, or set the deployment's PORT value. Then open that port in the browser.
Security keys do not register
WebAuthn needs HTTPS or localhost. Confirm the browser URL exactly matches KEEL_WEBAUTHN_ORIGIN and that the relying-party ID is only the hostname.
A public server allows unexpected registration
Stop the service, set KEEL_ALLOWED_EMAILS and KEEL_DISABLE_SIGNUP=1, restart, and review the audit log. Do this before sharing the URL.
You are unsure where data lives
Run keel paths for a CLI install. In Docker, inspect the named volume. Do not guess, and do not delete an install until a backup has been restored successfully elsewhere.
For a reproducible software bug, open an issue. For a vulnerability, use the private security report.