# open-notebook v1.10.0 - Product: open-notebook (https://whatsnew.fyi/product/open-notebook) - Vendor: lfnovo - Date: 2026-06-18 - Version: v1.10.0 - Original notes: https://github.com/lfnovo/open-notebook/releases/tag/v1.10.0 - Permalink: https://whatsnew.fyi/product/open-notebook/releases/v1.10.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **security** — Bumped Starlette to 1.2.1 and FastAPI to 0.136.3 to address CVE-2026-48710 - **added** — LaTeX math rendering in chat via inline $...$ and display $$...$$ syntax using KaTeX - **added** — Bulk chat-context actions in Sources and Notes column headers to control insights only, full content, or exclude settings - **added** — Turkish (tr-TR) localization - **added** — NEXT_PUBLIC_API_TIMEOUT_MS environment variable to configure frontend API request timeout - **changed** — Prominent Retry processing button on failed source cards - **changed** — Docker base image to Debian trixie with Node.js 22.x - **fixed** — Sources that fail to ingest are now marked failed instead of being saved as completed with the extraction error - **fixed** — Podcast generation now uses the notebook's real content via Notebook.get_context() - **fixed** — PUT profile handlers use model_dump(exclude_unset=True) so partial updates do not wipe unset fields - **fixed** — OpenRouter embedding modality is now exposed - **fixed** — POST /sources/{id}/retry no longer returns 400 for every source and no longer 500 from double-prefixed command id - **fixed** — GET /sources/{id} returns 404 instead of 500 for a missing or deleted source - **fixed** — Text search falls back to vector search on search::highlight position overflow - **fixed** — POST /api/search rejects a non-positive limit with 422 - **fixed** — Ollama num_ctx override is now persisted via a flexible config object - **fixed** — Worker drains legacy embedding jobs via command aliases - **changed** — Memoized the notebook source list and stopped polling completed sources 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 `config` object on the `credential` table), 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_MS` to 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 as `completed` with the extraction error as their body (#726) - Podcast generation now uses the notebook's real content via `Notebook.get_context()` (#864) - `PUT` profile handlers use `model_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 returns `400` for every source (#861), and no longer `500` from a double-prefixed command id - `GET /sources/{id}` returns `404` (not `500`) for a missing or deleted source - Text search falls back to vector search on a `search::highlight` "position overflow" (#648) - `POST /api/search` rejects a non-positive `limit` with `422` (#863) - Ollama `num_ctx` override is now persisted via a flexible `config` object (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.py` Table 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