Repository navigation
Releases: niklan1110/keel
Releases · niklan1110/keel
Release list
Keel 0.3.2
A security release from a full review of 0.3.0. Update every install.
Changed
- Keel is licensed under the Functional Source License (FSL-1.1-ALv2). Using,
changing and running Keel, including inside a company, is free; selling it
or offering it as a competing product or hosted service needs permission.
Each release becomes Apache 2.0 two years after it comes out.
Security
- A project's owner role could make the Postgres superuser run its own code:
through the scheduler's nightly cleanup, the event triggers that turn on
row level security for new tables, and the Studio table editor. Superuser
connections now usesearch_path=pg_catalog, the trigger functions have a
fixed search path (migration 015), and the table editor works as the owner
role. - Edge functions could reach private addresses through
import(), which
--deny-netdoesn't cover. Module imports now follow the same address
rules asfetch. - Function secrets can no longer set runtime variables that change how Deno
or npm behave, such asSSLKEYLOGFILE,NPM_CONFIG_*orGLIBC_TUNABLES. - A realtime channel takes at most 100
postgres_changesbindings, so one
join can no longer stall realtime for every project. - Signed URLs need a numeric expiry, and
install.shmakes the install folder
readable by its owner only. - Default-branch builds no longer publish the branch name as an image tag.
0.3.0 - 2026-10-12
Postgres extensions, scheduled jobs and webhooks, more sign-in providers,
encrypted off-site backups and installers for Windows, macOS and NAS systems.
Read "Upgrading" before you update an existing install.
Upgrading
keel-dbruns a new image,keel-postgres: the same Postgres 17 as before
with pgvector and PostGIS added, so existing data is used as it is. It comes
with the new compose file: run the installer again to switch (a plain
./keel updatekeeps the old compose file and image). On ZimaOS, change
keel-db's image toghcr.io/<owner>/keel-postgres:latest. A third package
is published next tokeelandkeel-functions; make it public too if you
publish your own images.- The compose files have a new service,
keel-egress, and a new network.
With the installer's compose file,./keel up(ordocker compose up -d)
starts it; on ZimaOS, import the new compose file.
Added
- Sign-in with any OpenID Connect provider, such as Authentik, Keycloak,
Authelia, Pocket ID or Zitadel: add one or more per project in Studio
(Users > Sign-in settings) and sign in with
signInWithOAuth({ provider: 'custom:<id>' }), as in Supabase. Keel uses
discovery, PKCE and a nonce, and checks the provider's signed ID token.
A provider on your own network can be reached over plain http when you
allow it for that provider. - Sign-in with Discord, GitLab (gitlab.com or your own) and Microsoft
(azure). - pgvector 0.8.7:
create extension vector with schema extensions, vector
columns, HNSW and IVFFlat indexes and nearest-neighbour search through RPC,
as in Supabase's guides. A project's owner role can enable it. - PostGIS 3.6.4 (without raster):
geometryandgeography, spatial indexes
and.geojson()responses. Enabled by the superuser in Studio's SQL editor. - The Supabase importer recreates
vectorandpostgis. - Docs: a page on extensions.
- Scheduled jobs with
pg_cron's SQL API in every project:cron.schedule
(five-field schedules,$,@dailyand friends, or'N seconds'),
cron.unschedule,cron.alter_job,cron.jobandcron.job_run_details.
Jobs run as the project's owner role, never as a superuser, one run at a
time, stopped afterKEEL_CRON_TIMEOUT. keel-studio runs them. - HTTP requests from SQL with
pg_net's API:net.http_get,net.http_post,
net.http_deleteandnet._http_response, and Supabase's Database Webhooks
(supabase_functions.http_requesttriggers). Calls to the project's own
edge functions are routed inside Keel. A full queue skips a webhook's
request instead of failing the write that fired it. keel-egress, a new container that sends those requests. It logs in as
keel_egress_admin, which can only work the request queues, and sits on a
network of its own with the database and the gateway.- Studio: a Jobs tool listing scheduled jobs, recent runs and outgoing
requests. - A Windows installer,
install.ps1, for Docker Desktop in Windows PowerShell
5.1 or PowerShell 7: no WSL terminal or Git Bash needed. It installs one
exact version into%USERPROFILE%\keel, writes.envwith random
passwords (readable by your account only), keeps Studio and Postgres on the
PC unless you pass-Lan/-LanDb, waits until Keel answers and prints
your login. Running it again updates (with a database backup first);
-Rollbackgoes back.-DryRunshows what it would do. - A Windows
keelcommand (keel.cmd) with the same commands as the bash one,
includingupdateandrollbackwith the same backups, so either can roll
back the other's update. - On Windows, Postgres keeps its data in a Docker volume
(docker-compose.windows.yml) instead of on the Windows drive, where it is
several times slower. - Install guides for Windows, macOS (Docker Desktop, OrbStack, Colima),
Unraid, TrueNAS SCALE and Synology. nas-docker-compose.yml, the self-contained compose file for NAS app
screens (Unraid's Compose Manager, TrueNAS's Install via YAML, Synology's
Container Manager, Portainer). It is the ZimaOS file under a second name.KEEL_PUBLIC_NETWORKnames the network a tunnel or Traefik joins, so a
second Keel on the same machine no longer shares the first one's
keel-publicnetwork.- Full backups: with
KEEL_BACKUP_PASSPHRASEset, Keel writes one file each
night holding every project's database, Keel's own settings, keys and Studio
accounts, and every uploaded file, encrypted with the passphrase in the age
format (open it with Keel or with theagetool). The newest
KEEL_BACKUP_KEEP_LOCAL(2) stay on the server. - Off-site copies: full backups are uploaded to an S3-compatible bucket (AWS
S3, Backblaze B2, Cloudflare R2, Wasabi, MinIO...), set up in Studio or with
KEEL_BACKUP_S3_*in.env. The bucket keeps the newest backup of each of
the last 7 days and 4 weeks. Uploads go in parts, so a NAS with 1 GB of RAM
can upload backups of any size. ./keel restorebrings a whole install back from a full backup, on the same
machine or a fresh install elsewhere, from a file or straight from the
bucket. It checks the passphrase and the whole file before changing
anything../keel restore --listshows the backups.- Studio's Backups drawer has the backup schedule, the retention, the backup
target with a connection test, full backups with their upload state, and the
backups in the bucket. .\keel restoreon Windows, with the same checks and confirmation as the
bashkeel.- Studio's Postgres connection strings (Connect, the agent prompt's
KEEL_DB_URL) ask for TLS with?sslmode=requirewhen Postgres has it. - A new landing page and a restyled documentation site: one sidebar in
reading order, a quickstart per platform, Coming from Supabase, a glossary,
an FAQ, more troubleshooting, image zoom and better search.
Security
- Requests from SQL follow the edge functions' network rules: private, LAN,
loopback and metadata addresses (IPv4 and IPv6), this server and Keel's
containers are refused unless opened withKEEL_FUNCTIONS_ALLOW_LAN; every
address a name resolves to is checked and the connection is pinned to it;
redirects aren't followed. Only the project owner role and superusers can
schedule jobs or send requests; the API roles can't reach thecronand
netschemas. The sender has no superuser password and no route to
Studio or the Docker socket proxy. - Both installers check every file they download (compose files, the
keel
command) against the publishedSHA256SUMSand stop before changing
anything when one doesn't match. - Keel's own CLI (
fn deploy,secrets) follows thesslmodein
KEEL_DB_URLlike libpq (require,verify-ca,verify-full,disable);
before, it never used TLS from another machine. A repeatedsslmodeis
refused. The docs recommendverify-cawith the server's certificate. - cloudflared 2026.10.0, the Dockerfile frontend pinned by digest, and the
keel-functionsimage takes Debian's security updates at build time.
Changed
- Sign-in provider secrets are encrypted in the project settings when you
save them. Secrets saved before stay as they are until you enter them again. GET /auth/v1/settingslists the new providers underexternal.- The database image no longer contains gosu (a Go binary); its entrypoint
drops root with Alpine's su-exec, and it gets Alpine's security updates at
build time. - Releases now include
install.ps1withinstall.ps1.sha256, the Windows
keelcommand,docker-compose.windows.ymlandnas-docker-compose.yml. - CI runs the installers end to end on Linux, on macOS with its bash 3.2, and
on Windows PowerShell 5.1, runs PSScriptAnalyzer, and checks that the main,
source and NAS compose files define the same services and pinned images. - Studio mounts the storage folder (read-only) to back up uploaded files, and
keel-migrate mounts the storage and backups volumes in a source checkout,
for./keel restore. Installer installs get the new compose file and
keelscript by running the installer again; on ZimaOS, import the new
compose file. Without it, a full backup of a project with uploaded files
fails with a message saying so, rather than leaving the files out. - The nightly backup time can be changed in Studio; it wins over
KEEL_BACKUP_SCHEDULE.
Fixed
- A failed sign-in with a provider redirects back to the app with 302, as
Supabase does, instead of 303. - Docs: Studio API example...