Version 1.35.0 - September 29, 2026
Features
- AI: support local vision attachments in chat (#1288). Thanks @gabegraves and @chriscrosstalk for the contribution!
- AI: show source document and date as citations under RAG answers (#1287). Thanks @chriscrosstalk for the contribution!
- AI: budget the prompt and actually set the context window on a native Ollama chat path (#1253). Thanks @jakeaturner for the contribution!
- AI: give chat a sampler with four response-style profiles instead of backend defaults (#1282). Thanks @jakeaturner for the contribution!
- AI: constrain the structured task calls (titles, chips, query rewrite) instead of asking nicely (#1259). Thanks @jakeaturner for the contribution!
- AI: let retrieval decline via a post-rerank relevance floor (#1281). Thanks @jakeaturner for the contribution!
- AI: add opt-in relevance check for off-topic retrieval (#1365). Thanks @jakeaturner for the contribution!
- AI: specify a lightweight model for ancillary tasks (#1244). Thanks @jakeaturner for the contribution!
- AI: make RAG retrieval optional per chat (#1247). Thanks @jakeaturner for the contribution!
- Dashboard: user-added link tiles for services NOMAD does not manage (#1293). Thanks @chriscrosstalk for the contribution!
- KB: per-file active toggle plus collection grouping and bulk toggle (#1286). Thanks @just-jbc and @chriscrosstalk for the contribution!
- Kiwix Library: browse the remote Kiwix catalog in any language, not just English (#1299). Thanks @chriscrosstalk for the contribution!
- Maps: full marker management (visibility, search/sort, per-marker icon and colour, coordinate navigation, delete confirmation) (#1291). Thanks @kennethbrewer3 and @chriscrosstalk for the contribution!
- Translate: offline machine translation for the Information Library, shipped as a Supply Depot app (#1292). Thanks @chriscrosstalk for the contribution!
Bug Fixes
- AI: stop
<think>output leaking into titles, chips, and the RAG rewrite (#1254). Thanks @jakeaturner for the contribution! - AI: report a failed Ollama model pull as a failure instead of a success (#1274). Thanks @chriscrosstalk for the contribution!
- AI: don't probe the native embed endpoint on a non-Ollama backend (#1284). Thanks @chriscrosstalk for the contribution!
- AI: don't classify the backend as non-Ollama when it is merely unreachable (#1357). Thanks @chriscrosstalk for the contribution!
- AI: bump the Ollama pin to 0.33.3 to fix the disconnect hang (#1356). Thanks @chriscrosstalk for the contribution!
- AI: remove the long-dead default rewrite model warning (#1249). Thanks @jakeaturner for the contribution!
- Benchmark: show the v2 score in Benchmark History (#1210). Thanks @chriscrosstalk for the contribution!
- Benchmark: stop WSL2 submitting "Microsoft Basic Render Driver" as the GPU model (#1277). Thanks @chriscrosstalk for the contribution!
- Chat: abort abandoned response streams (#1220). Thanks @NgoQuocViet2001 for the contribution!
- Chat: stop capping answers at 1024 tokens and surface truncation (#1360). Thanks @jakeaturner for the contribution!
- Chat: render the user's message before creating the session (#1301). Thanks @chriscrosstalk for the contribution!
- Content: re-download content updates after a failed attempt (#1213). Thanks @Osamaali313 for the contribution!
- Database: allow
datasetininstalled_resources.resource_type(#1243). Thanks @rcorvus for the contribution! - Downloads: guard orphaned model jobs (#1245). Thanks @NgoQuocViet2001 for the contribution!
- GPU: detect Ollama CPU fallback from logs so auto-remediation fires (#1109). Thanks @fpolica91 for the contribution!
- GPU: detect Ollama CPU fallback on AMD and offer the right fix (#1370). Thanks @jakeaturner for the contribution!
- GPU: stop a missing
/dev/kfdblocking the AI Assistant install entirely (#1276). Thanks @chriscrosstalk for the contribution! - GPU: keep an existing AMD HSA override across reinstall and update (#1390). Thanks @jakeaturner for the contribution!
- Install: time out Redis readiness probes (#1347). Thanks @dajiaohuang for the contribution!
- Install: match the HawkPoint1 lspci string for gfx1103 AMD GPU detection (#1385). Thanks @Yi-111-a for the contribution!
- KB: stop leaking Qdrant vectors when a ZIM is deleted or replaced (#1227). Thanks @just-jbc for the contribution!
- KB: stop the orphan sweep purging an empty but present scan root (#1393). Thanks @jakeaturner for the contribution!
- KB: persist the source active toggle when no ingest state row exists (#1395). Thanks @jakeaturner for the contribution!
- Maps: stop world basemap provisioning running pmtiles extract twice (#1394). Thanks @jakeaturner for the contribution!
- Queue: clear terminal jobs before re-dispatch so downloads aren't silently dropped (#1225). Thanks @chriscrosstalk for the contribution!
- Queue: stop stalled-job recovery forking the embedding chain (#1270). Thanks @chriscrosstalk for the contribution!
- RAG: don't abandon a ZIM after one sparse batch (#1242). Thanks @rcorvus for the contribution!
- Security: reject oversized custom URLs (#1354). Thanks @dajiaohuang for the contribution!
- Seeder: keep an installed app's host port across catalog sync (#1300). Thanks @johno10661 and @chriscrosstalk for the contribution!
- System: resolve a placeholder GPU name on the System page too (#1285). Thanks @chriscrosstalk for the contribution!
- UI: restore dark mode text contrast (#1358). Thanks @Tiancheng-Xu for the contribution!
- ZIM: resolve flavoured and non-English ZIMs in the update check (#1298). Thanks @chriscrosstalk for the contribution!
Improvements
- Brand: replace the retired N.O.M.A.D. badge with the new logo (#1375). Thanks @chriscrosstalk for the contribution!
- CI: add a weekly schedule trigger to collection URL validation (#1217). Thanks @cclavin for the contribution!
- Dashboard: tighten the Drug Reference tile description (#1297). Thanks @chriscrosstalk for the contribution!
- Docs: add SECURITY.md and tighten .gitignore for credential files (#1223). Thanks @chriscrosstalk for the contribution!
- Docs: state how much disk NOMAD needs before any content (#1278). Thanks @chriscrosstalk for the contribution!
- Eval: standardized RAG quality evaluation harness with a frozen corpus and golden question set (#1233). Thanks @jakeaturner for the contribution!
- Install: add the Project NOMAD ASCII banner to the installer (#1310). Thanks @chriscrosstalk for the contribution!
📝 All Changes
- docs: update release notes (ddb0235)
- fix(kb): keep chunk active flags in sync with toggles during embedding (c65198c)
- fix(kb): persist source active toggle when no ingest state row exists (152d1ee)
- fix(maps): stop world basemap provisioning from running pmtiles extract twice (bc24508)
- fix(install): match HawkPoint1 lspci string for gfx1103 AMD GPU detection (25a5f82)
- fix(kb): stop orphan sweep from purging an empty but present scan root (ae1eae7)
- fix(gpu): keep an existing AMD HSA override across reinstall and update (a1b899f)
- chore(branding): replace the retired N.O.M.A.D. badge with the new logo (4c75eb5)
- fix(gpu): detect Ollama CPU fallback on AMD and offer the right fix (ac437f8)
- fix: bound custom URL length before persistence (7dabc40)
- feat(AI): add opt-in relevance check for off-topic retrieval (a915cdc)
- fix(chat): stop capping answers at 1024 tokens and surface truncation (a013eb6)
- fix(ui): cover dark accent interaction states (99fe2ef)
- fix(ui): restore dark mode contrast (8d821f3)
- fix(kb): confine the orphan sweep to roots the scan actually walked (52d12a2)
- test(kb): extract orphan allowlist into a tested pure fn (d4f0f07)
- fix(kb): batch the orphan sweep's Qdrant/state deletes into one round trip (6712251)
- fix(kb): make purge self-healing and allowlist the orphan sweep's roots (50b42fe)
- fix(kb): guard ZIM delete purge and dedupe reconcile's delete pair (7e24c7a)
- fix(kb): purge qdrant points when a zim is deleted (#1170) (8eb172e)
- fix(rag): reap orphaned qdrant sources during sync (#1170) (18986e0)
- fix(drug-reference): backfill the missing dataset install row on boot (5bc47a4)
- fix(db): allow 'dataset' in installed_resources.resource_type (9fcade9)
- fix(chat): render the user's message before creating the session (fa34d6d)
- feat(AI): give chat a sampler instead of the backend's defaults (27be71b)
- fix(install): time out Redis readiness probes (5e69350)
- fix(ai): don't classify the backend as non-Ollama when it is merely unreachable (447b174)
- fix(ai): bump the Ollama pin to 0.33.3 to fix the disconnect hang (18e403b)
- feat(translate): offline translation for the Information Library (#1292) (1b67a87)
- fix(downloads): guard orphaned model jobs (a131e63)
- ci(collections): add weekly schedule trigger to url validation (e367967)
- fix(chat): abort abandoned response streams (613ad9a)
- fix(content): re-download content updates after a failed attempt (dd8df4c)
- fix(gpu): detect Ollama CPU fallback from logs so auto-remediation fires (c366300)
- feat(zim): let users browse the Kiwix library in any language (576464a)
- feat(kb): per-file active toggle + collection grouping/bulk toggle (#1286) (880c80f)
- install: add Project NOMAD ASCII banner to the installer (1b5d73f)
- fix(zim): drop the dead keyword-scan fallback (f97de2c)
- fix(zim): resolve flavoured and non-English ZIMs in the update check (41c9551)
- fix(zim): extract Kiwix catalog URL into system-wide constant (a1b39cd)
- fix(zim): use the OPDS catalog host, not Kiwix's gated browse host (d1a4e9a)
- fix(seeder): derive ui_location from the merged config, not the live row (e468cf3)
- fix(seeder): keep an installed app's host port across catalog sync (32eea2e)
- fix(dashboard): show the color picker swatches solid (34b4542)
- chore(dashboard): label the link tile field URL, drop the scheme hint (ce7c82a)
- chore(dashboard): reword the link tile color helper, and use US spelling (c33af6a)
- feat(dashboard): let a link tile carry a brand colour (400d64a)
- fix(dashboard): exempt link tiles from container reconciliation (a6edaf7)
- feat(dashboard): user-added link tiles for services NOMAD does not manage (b7b973e)
- copy(dashboard): tighten the Drug Reference tile description (d417590)
- fix(maps): undef func call, flyTo issue, visible column, and silent save failures (1d1945d)
- fix(maps): cap marker notes at 500 characters server-side (78017a3)
- chore(deps): restore dev's package-lock (821f952)
- feat(maps): confirm before deleting a pin, after flying to it (f1e442f)
- fix(maps): restore the icon picker's width so the grid does not collapse (20f65c0)
- refactor(maps): curate the marker icon set, drop the tree view (9c1e945)
- feat(maps): map marker management (72e0fcf)
- test(ai): run the controller vision spec under Japa (0a93e7d)
- feat(ai): support local vision attachments (8a92018)
- Revert "fix(zim): use the OPDS catalog host, not Kiwix's gated browse host" (e23417b)
- Revert "fix(zim): extract Kiwix catalog URL into system-wide constant" (318fe07)
- feat: show source document and date as citations under RAG chat answers (9fde7f7)
- fix(system): resolve a placeholder GPU name on the System page too (bf7e4b3)
- fix(ai): don't probe the native embed endpoint on a non-Ollama backend (b0be0de)
- docs: trim the quickstart note to one line plus a link (c1d527d)
- docs: answer the RAM question alongside disk (4aa70c7)
- docs: state how much disk NOMAD needs before any content (f7e6041)
- fix(benchmark): WSL2 submits "Microsoft Basic Render Driver" as the GPU model (4c4071e)
- fix(gpu): a missing /dev/kfd blocks the AI Assistant install entirely (9b90fcf)
- fix(ai): a failed Ollama model pull is reported to the user as a success (c2fb809)
- fix(queue): clear terminal jobs before re-dispatch so downloads aren't silently dropped (08e1b86)
- fix(queue): stop stalled-job recovery forking the embedding chain (baf94bb)
- fix(rag): don't abandon a ZIM after one sparse batch (a3811ad)
- fix(benchmark): show the v2 score in Benchmark History (01ca77c)
- docs: add SECURITY.md and tighten .gitignore for credential files (5ecec51)
- feat(AI): let retrieval decline instead of making the prompt paper over it (ae06a29)
- fix(AI): tell a broken grammar apart from a backend that never had one (06941e7)
- feat(AI): constrain the structured task calls instead of asking nicely (5e9bd5a)
- fix(AI): stop output leaking into titles, chips, and the RAG query (#1254) (5c97bf6)
- feat(AI): budget the prompt and actually set the context window (#1253) (9a95f7b)
- fix(UI): remove deprecated prop from type dec (3eaddfe)
- fix(AI): removes long-dead default rewrite model warning (b3e695f)
- feat(AI): make RAG retreival optional per chat (#1247) (251362e)
- feat(AI): specify a model for ancillary tasks (#1244) (86ef96b)
- feat(eval): standardized RAG quality evaluation harness (#1233) (81db4e8)
- ci: add Build Translate Proxy Image workflow (85da928)