v1.10.0
Added 4
- LaTeX math rendering in chat via inline $...$ and display $$...$$ syntax using KaTeX
- Bulk chat-context actions in Sources and Notes column headers to control insights only, full content, or exclude settings
- Turkish (tr-TR) localization
- NEXT_PUBLIC_API_TIMEOUT_MS environment variable to configure frontend API request timeout
Changed 3
- Prominent Retry processing button on failed source cards
- Docker base image to Debian trixie with Node.js 22.x
- Memoized the notebook source list and stopped polling completed sources
Fixed 10
- Sources that fail to ingest are now marked failed instead of being saved as completed with the extraction error
- Podcast generation now uses the notebook's real content via Notebook.get_context()
- PUT profile handlers use model_dump(exclude_unset=True) so partial updates do not wipe unset fields
- OpenRouter embedding modality is now exposed
- POST /sources/{id}/retry no longer returns 400 for every source and no longer 500 from double-prefixed command id
- GET /sources/{id} returns 404 instead of 500 for a missing or deleted source
- Text search falls back to vector search on search::highlight position overflow
- POST /api/search rejects a non-positive limit with 422
- Ollama num_ctx override is now persisted via a flexible config object
- Worker drains legacy embedding jobs via command aliases
Security 1
- Bumped Starlette to 1.2.1 and FastAPI to 0.136.3 to address CVE-2026-48710
Highlights: LaTeX rendering in chat, per-type bulk chat-context controls, Turkish UI, a security fix, and a batch of ingestion/search reliability fixes.
Upgrade note: this release adds database migration 15 (a flexible
configobject on thecredentialtable), applied automatically on API startup.
🔒 Security
- Bumped Starlette → 1.2.1 and FastAPI → 0.136.3 to address CVE-2026-48710 ("BadHost") (#859)
✨ Added
- LaTeX math rendering in chat — inline
$...$and display$$...$$via KaTeX (#606) - Bulk chat-context actions in the Sources and Notes column headers — sources: insights only / full content / exclude all; notes: include / exclude all — translated across all 14 locales (#223)
- Turkish (tr-TR) localization (#871)
NEXT_PUBLIC_API_TIMEOUT_MSto configure the frontend API request timeout (#880)
🔧 Changed
- Prominent "Retry processing" button on failed source cards (#726)
- Docker base image → Debian trixie + Node.js 22.x (#914)
🐛 Fixed
- Sources that fail to ingest are now marked
failed(so the retry button actually appears) instead of being saved ascompletedwith the extraction error as their body (#726) - Podcast generation now uses the notebook's real content via
Notebook.get_context()(#864) PUTprofile handlers usemodel_dump(exclude_unset=True)so partial updates don't wipe unset fields (#860)- OpenRouter embedding modality is now exposed (#842)
POST /sources/{id}/retry: no longer returns400for every source (#861), and no longer500from a double-prefixed command idGET /sources/{id}returns404(not500) for a missing or deleted source- Text search falls back to vector search on a
search::highlight"position overflow" (#648) POST /api/searchrejects a non-positivelimitwith422(#863)- Ollama
num_ctxoverride is now persisted via a flexibleconfigobject (migration 15) (#875) - Worker drains legacy embedding jobs via command aliases (#695, #876)
- Updated AI provider configuration docs (#873)
⚡ Performance
- Memoized the notebook source list and stopped polling completed sources (#503)
📚 Docs
- Code of Conduct (#856), local quickstart + worker step (#900),
export_docs.pyTable of Contents (#865)
📦 Dependencies
- Multiple dependency bumps, including cryptography 46→48, langchain 1.2→1.3, langchain-anthropic, aiohttp, tornado, and frontend dev dependencies.
🙌 Contributors
Thanks to everyone who shipped a PR in this release: @aaronjmars, @doganreis, @Federicorao, @fboudra, @krataratha, @ltianyi992, @mvanhorn, @royfrancis, @zichen0116, and @lfnovo.
Full Changelog: https://github.com/lfnovo/open-notebook/compare/v1.9.0...v1.10.0