ignis v0.6.2
Released 2026-10-12. The container image, the archives and the notes as written: the release on GitHub.
Changes
Section titled “Changes”- Playground: a Server view. A fourth view lists the models the server can load (the switch tables and the catalog, with what is on disk) and loads one with a click. It also edits the running configuration: every patchable field with its limits, per-model values through a scope selector (all models or one family) with where each value comes from (its own value, the profile, a flag, the shared value), “Apply” or “Apply and reload” depending on whether a field needs a reload, and the configuration shown as a config file. New routes:
GET /v1/config/fields,GET /v1/config/origins,GET /v1/models/catalogandGET /v1/config?format=yaml.POST /v1/models/switchtakesmodelalone,PATCH /v1/configremoves a key withnull(JSON merge patch), and CORS allowsPATCH(#316) - Idle unload. After
model.idle_unloadseconds in which no request uses the model, the server unloads it and stays up. The default is 300;0never unloads. Set it with--model-idle-unload,IGNIS_MODEL_IDLE_UNLOAD,make IDLE_UNLOAD=, or live throughPATCH /v1/config.GET /v1/modelsthen reportsstatus: "unloaded", and the VRAM, the pinned host pools and the KV-RAM are free for other programs. The next authenticated request that needs a model loads it again (status: "loading"; requests arriving meanwhile wait for the same load) and is served. On the 5090 the 27B is back in about 11 s. Reading the server’s state (/v1/models, the config and catalog routes, metrics) neither keeps the model loaded nor loads it (#317; ADR 0049)
- By default the model is now unloaded after 5 minutes unused. The first request after an idle period pays a cold load and starts without the retained prompt state (prefix reuse). Start with
--model-idle-unload 0(ormake IDLE_UNLOAD=0) to keep the previous behaviour, and for any benchmark against a long-running server. GET /v1/configanswers in the config file’s shape: shared values at the group level, and a section per model family where that family’s value differs.- An explicit switch, or a
PATCH /v1/configthat reloads, out ofunloadedis recorded inlast_switch. The load a request triggers is not. - Tests: the KV-disk round trip waits for the live file’s queued delete (a Windows CI flake).
Decisions
Section titled “Decisions”- ADR 0049: an idle model is unloaded, and the next request loads it again
Container image (linux/amd64)
Section titled “Container image (linux/amd64)”podman run --rm --device nvidia.com/gpu=all -p 8000:8000 \ -v /path/to/models:/models:ro \ -e IGNIS_MODEL_ARTIFACT=/models/<name>.ninfer \ ghcr.io/gpillon/ignis:0.6.2(docker: --gpus all in place of --device.) The image carries
the CUDA runtime but no driver — the host’s NVIDIA driver is
injected by the container runtime. It is built from the same
compile as the Linux tarball below, so the two always carry the
same binaries.
Binaries
Section titled “Binaries”The kernel is compiled for SM120a (RTX 5090 / Blackwell
consumer) only, and the engine needs a .ninfer artifact, which
is not part of this release. The Linux tarball needs the CUDA 13
runtime on the host; the Windows zip carries cudart64_*.dll.
Both need an NVIDIA driver new enough for CUDA 13.
Apache-2.0 (LICENSE, NOTICE); the vendored reference ops keep
their own terms (NOTICE-kernel).
Full Changelog: https://github.com/gpillon/ignis/compare/v0.6.1...v0.6.2
