v1.11.0
hexojs/hexov1.11.0Jul 11, 2026by lfnovo
AI Summary
A security-hardening release featuring 16 fixes, new UI features like sortable tables and list views, and performance improvements including progressive streaming for chat and source interactions.
Key Highlights
- Comprehensive security hardening including SSRF protection and Jinja2 removal.
- Sortable Sources table by any column including 'Updated'.
- Recently Viewed section on the Notebooks page.
- List view for notebooks with persistence.
- Per-transformation model selection.
Breaking Changes
- SurrealDB port binding changed to 127.0.0.1 only.
- CORS default wildcard no longer sends credentials.
- Request body cap increased to 100 MB (configurable).
- Host header validation stricter (malformed values fallback to localhost).
- Raw HTML in notes no longer renders in preview.
New Features
- Sortable Sources table.
- Recently Viewed section.
- List view for notebooks.
- Per-transformation model selection.
- Refresh content action on web-link sources.
- Syntax highlighting and LaTeX math support.
- EasyPanel deployment template.
Full Release Notes
**We recommend all users upgrade.** This release includes a comprehensive security-hardening pass (16 fixes), several long-requested features, and meaningful performance improvements — validated by a new release-testing process covering everything from the unit suite to fresh-install and upgrade tests on the actual Docker images. ## 🔒 Security hardening A dedicated security review produced 16 fixes across the stack. Highlights: - **SurrealQL injection** closed in the repository layer and credential ordering (#1002, #1021) - **SSRF protection** on web-source ingestion, plus request-time re-validation of provider URLs (DNS-rebinding window closed) — private IPs and localhost remain fully supported for self-hosted Ollama/LM Studio (#1005, #1006) - **Constant-time comparison** for the API password (#1003) - User prompts are no longer compiled as **Jinja2 templates** (#1004) - **Request body cap** (default 100 MB, configurable via `OPEN_NOTEBOOK_MAX_UPLOAD_SIZE_MB`) (#1014) - Markdown note previews **sanitize raw HTML** (#1007) - API error responses no longer leak internal details (#1012, #1017) - **Pillow forced to 12.3.0**, resolving all 6 open Dependabot advisories (#1041) - `docker-compose` now binds SurrealDB to localhost only (#1025) and sources DB credentials from env (#946) ## ✨ New features - **Sort the Sources table by any column** — including the new "Updated" column (#895) - **Recently Viewed** section on the Notebooks page (#850) - **List view** for notebooks — tile/list toggle, remembered across reloads (#885) - **Per-transformation model selection** — assign a specific model to each transformation (#776) - **"Refresh content"** action on web-link sources (#259) - **Syntax highlighting** for code blocks + restored markdown typography (#783) - **LaTeX math (KaTeX) everywhere** — sources, insights, Ask answers, transformations and the note editor, not just chat (#269) - **EasyPanel deployment template** (#189) ## ⚡ Performance - Ask and source-chat now **stream progressively** through the Next.js proxy — no more waiting at "Processing..." (#770) - Chat/context/podcast startup uses **batched insight queries** (14 → 3 queries on a 12-source notebook) (#1008) - File uploads, DNS resolution and chat inference no longer block the event loop (#1009, #1011, #704) ## 🐛 Notable fixes - Google/Vertex connection tests survive Google retiring Gemini models (#970) - API startup waits for SurrealDB instead of crashing on boot races (#708) - Podcast generation no longer truncates dense content — `max_tokens` on episode profiles (#639) - Clearing credential fields (Ollama base URL, Vertex settings) now actually clears them (#1046) - Note editor fills the dialog properly and long notes scroll instead of overflowing (#932) - CRUD endpoints return proper 404s instead of 500s (#862) ## ⚠️ Behavior changes for self-hosters 1. **SurrealDB port binding**: `docker-compose.yml` now publishes SurrealDB on `127.0.0.1` only. If you connect to the DB from another machine, use the new `docker-compose.override.yml.example`. 2. **CORS**: the default wildcard no longer sends credentials. If you make credentialed cross-origin requests, set `CORS_ORIGINS` explicitly. 3. **Upload cap**: request bodies over 100 MB are now rejected — raise `OPEN_NOTEBOOK_MAX_UPLOAD_SIZE_MB` if you upload larger files. 4. **Host validation**: reverse proxies must forward a clean `Host` header; malformed values now fall back to localhost instead of being trusted. 5. **Raw HTML in notes** no longer renders in the preview (it is sanitized). ## 🙏 Thanks This release carries contributions from all over the community: - **@kwp3** — the entire 16-fix security-hardening pass, plus the performance work on batched queries and event-loop hygiene (#1002–#1026) - **@mvanhorn** — API startup resilience (#977), Recently Viewed (#979), per-transformation model selection (#978), podcast `max_tokens` (#982) and typing improvements (#983) - **@ProfTrader** — sortable sources table (#930), the flow-driven release process docs (#960), dependency audit resolution (#962) and typing work (#929, #961) - **@hyeonho-park** — end-to-end SSE streaming through the Next.js proxy (#770) - **@Markus328** — syntax highlighting and the markdown typography restoration (#980) - **@GeorgijGrigoriev** — configurable API listen host (#986) - **@Thiamath** — deprecated Gemini model cleanup (#1027) - **@D-revv** — test coverage measurement in CI (#966) - **@nyxst4ck** — EasyPanel deployment template (#927) And a big thank-you to everyone who reported the issues this release closes — the fixes above exist because you took the time to file them. ❤️ Full details in the [CHANGELOG](https://github.com/lfnovo/open-notebook/blob/main/CHANGELOG.md).