Note
If you enjoyed this release, consider showing a token of appreciation by:
- Pressing the “Star” button on GitHub (top-right).
- Considering a one-time or recurrent donation to the lead developer via GitHub Sponsors or PayPal.
This release is the largest in Trilium's history, built around two big themes: security and interoperability. The attack surface has been dramatically reduced across the desktop app, the server, and shared notes — with 16 dedicated security fixes and a few deliberate breaking changes (backend scripting and the SQL console are now disabled by default), so please review the Breaking changes section before upgrading.
Getting notes in and out of Trilium is also much easier: new importers for OneNote, Notion, Google Keep, Anytype and Obsidian join a faster, more memory-efficient import/export pipeline and Spreadsheet now has XLSX and CSV import & export.
On top of that come a redesigned setup and login experience, better AI integration (including being able to use your Claude Code subscription), richer text editing (multi-state TODO lists, collapsible blocks, link previews), dashboard collections, and a huge wave of polish — roughly 86 bugfixes and 68 smaller improvements touching nearly every corner of the app. The sections below have the full details.
💡 Key highlights
- Setup was redesigned from scratch to be more modern (see details below).
- The LLM integration can now use your Claude Code subscription, without the need of an API key or additional cost.
- Text notes: Customizable multi-state TODO lists by @adoriandoran
- Collapsible blocks by @adoriandoran
- Link previews by @stexz01, @eliandoran and @adoriandoran
- Toggle List (aka Accordion) by @adoriandoran
- Text notes: Collapsible bullets
- Spreadsheet gains XLSX and CSV import & export
- A new experimental Dashboard collection.
- Auto theme switching for code blocks and code notes
- Autocompletion (e.g. Intellisense) for Frontend & Backend code notes
- Significant hardening of the desktop and server app by @perfectra1n and @eliandoran.
- A new import mechanism allows importing from multiple applications: OneNote notebooks using the cloud API, Notion, Google Keep, Anytype, Obsidian
- Significant improvements to the import/export process
1. Use a better buffering system so that the memory consumption never increases proportionally to the number of notes exported.
2. Display the progress of import/export.
3. Use a native mechanism on desktop so that the files being imported are not copied in memory.
4. Server now uses the disk to store imported files, reducing memory pressure.
5. Improved compression time by skipping already compressed files.
6. Improved import performance. - Significant improvements to the LLM UI by @adoriandoran: Quote content, save AI responses as subnote, regenerate responses, delete & rename chats, printing, note-tooltip, scroll-to-bottom & performance tweaks.
🚨 Breaking changes
- Backend scripting is now disabled by default.
- If you make use of these scripts, see the documentation (
config.inichange for server or desktop settings). - The goal of this change is to strengthen Trilium's security posture since backend scripts have dangerously powerful levels of access (e.g. full FS access). Front-end scripts are unaffected.
- If you make use of these scripts, see the documentation (
- SQL console access is disabled by default.
- Similar to backend scripting, it can be reactivated from
config.ini.
- Similar to backend scripting, it can be reactivated from
- The desktop application (based on Electron) has been hardened against potential RCE attacks. You might have to adapt your scripts if you have front-end scripts that depend on Electron remote or the Node.js integration.
- The desktop application now no longer opens its port on the local network by default.
- This can generally affect you only if you are using ETAPI or desktop-to-desktop sync with your desktop client (servers are unaffected).
- This option can be changed in Options → Security.
- OPML v1 export was dropped from this release, v2 which preserves basic formatting has been kept instead. The v1 is still supported for import.
🐞 Bugfixes
This release lands roughly 86 bugfixes, with a strong focus on data integrity: several issues that could overwrite note content, corrupt the database during ZIP import, or leave sync in an inconsistent state have been resolved. The remainder is steady polish across the text editor, spreadsheets, Markdown import/export, canvas notes, sharing, authentication and mobile.
All 86 bugfixes
- Backend log doesn't respect the code color theme.
- Search: Wrong escape of highlighted tokens
- Desktop layout doesn't respect the bottom safe area.
- When refreshing the page, the sidebar shows up animated.
- “Upload attachment” not working on mobile.
- Text notes: Moving lines using keyboard shortcut sometimes not working
- Flickering note save indicator on desktop.
- Revisions: “Diff isn't available” when viewing revisions of an empty note.
- Code block tries to link/create note when typing @, and suggests slash-commands when typing /
- Recovered notes appear after interrupting a sync from a device that was long offline
- Relation map:
share*labels are not filtered out during safe import.- Geomap rendering raw HTML
- Text Notes can not add lists that are not numbered (i.e. letters) by @adoriandoran
- ETAPI YAML endpoint not accessible.
- Status bar: Code language switcher not showing the language if it was not enabled in settings.
- Spreadsheet:
- Ctrl+R copies to the right, intercepting page refresh / Unnecessary save on refresh
- Can't edit the same note in a split.
- Save is sometimes done before recalculation, causing potential incorrect values.
- Unnecessary save when first showing some spreadsheets.
- Exporting as a single file results in a .undefined file with zero content.
- Calendar collection not occupying 100% height.
- Formatting toolbar not showing after temporarily editing a note in the old layout.
- New layout: Note map not visible on text notes
- Not all notes in a split loading after a refresh.
- Background effects interfere with shadow on Linux.
- AI: Extended thinking not working in some models
- Markdown: colspans and rowspans are not preserved during editing
- Read-only Mermaid diagrams not always rendering
- Notes being overwritten with another note
- Changes to AI providers not refreshing the sidebar.
- Markdown: wrong escape of dollar signs
- TOTP: Entering a wrong password uses up the recovery code
- OIDC credentials are not checked for
- Current OpenID Connect Implementation is not compatible with Authelia
- New checkbox rows are already prechecked when previous row was checked
- Spreadsheet not localized
- Move line up/down doesn't always work
- Scroll position is lost when the editor reinitializes.
- Periodic hidden subtree checks causes the text editor to refresh.
- Missing blurred background for the icon switcher for the inline title.
- Geomaps breaking with GPX (entire navigation breaks)
- Tree position resets to top when switching between tabs with different workspaces/hoisted notes.
- Formatting toolbar remains visible after changing note type by @SiriusXT
- Markdown import: preserve heading hierarchy instead of flattening to H2
- Exports: filename length is capped to 30 characters
- Markdown rending issues when using multiple "$" in Code Block inside Blockquote
- Tables not rendering properly in read-only after a Markdown import
- The delete attachment confirmation dialog does not auto-select "OK"
- Misleading "Copy link to clipboard" for attachments
- Backend crash on abrupt WS disconnect
- Allow creating notes from relation auto-complete
- Can't confirm inline note creation via keyboard
- Time offset in Log - 24 hours (timestamps today are showing as yesterday)
- Enabling showLoginInShareTheme does not enable login from base domain
- Docker deployment, when accessing the webpage, the following prompt appears: Share root not found. Please set up a note with #shareRoot label first.
- Video/audio players' seek forward button has incorrect text
- Converting an attachment to a note breaks links
- Built-in LaTeX editor generates \differentialD, which is not supported by the renderer
- Share: Table of contents scrolls to the wrong position for duplicate headings.
- Importing a ZIP archive that contained a root note with content would corrupt the database.
- ignore IME composition Enter when editing card and column titles by @greymoth-jp
- Zooming shortcut Ctrl+ doesn't work on German Keyboard
- Shared note with a large code note freeze the server
- The checkbox and cursor in the to-do list are too close
- Table: boolean column sorting not always working & row number appear shuffled when sorting
- Include note would render recursively for nested includes, causing performance concerns
- Old layout: removed collection properties in the ribbon since they are duplicated with the collection bar.
- Search does not find protected notes while being in protected session
- Markdown import/export
- Some equations containing HTML-like characters are broken
- A table with no heading row but with heading columns will end up having an empty row when reimported.
- Tree can crash in some rare circumstances while updating itself
- “Blob not found” when deleting the active note.
- Table of contents becoming stale when switching between two notes with many headings.
- CTRL-Z with two Canvas notes will delete previous drawing
- Canvas notes sometimes fail to render
- New layout: Note map not shown in empty note type switcher
- Some protected notes and notes titles are still displayed after inactivity delay
- JavaScript error while OCR processing existing image files
- Day notes title pattern replacements not working
- Template collision for Code note
- Fix calendar events that cross midnight not showing up by @Glitch752
- Mermaid images not visible in HTML or share export
- Electron can sometimes crash due to a connection error
- Mindmap freezes on save on medium or larger notes
- Add link dialog fails to link if you press enter twice too quickly by @mvanhorn & @eliandoran
- PDF
- PDF download: name not preserved by @Excubitorum & @eliandoran
- Annotations are not saved immediately, only after closing the annotation tool.
- Unnecessary confirmation screen when navigating a way after the annotations have already been saved.
- When pasting an image, srcset bypasses Trilium's downloaded image.
- Canvas notes zooms out to 10% when using flowchart keyboard shortcuts.
- PDF viewer not showing properly in attachments
- Calendar events spanning day boundaries without an end date by @Glitch752
✨ Improvements
Beyond the headline features, 68 smaller improvements round off nearly every corner of the app. Several are worth calling out: pinned tabs and a reworked tab bar, a right sidebar toggle handle with peek mode, and options that now open in a modal by default instead of a new tab — changes you'll notice within minutes of upgrading. Media notes get a proper treatment too, with a new gallery-style image viewer (zoom, keyboard navigation) and an overhauled media player (previous/next, play modes, Media Session API integration), while Include note now renders collections, web views and saved searches interactively, and canvas notes can embed other notes and store images as attachments.
Markdown continues to become a first-class citizen: you can now convert text notes to Markdown and back, with snippets, code-block language autocompletion and cleaner "Copy as Markdown" output. The settings screens follow the setup redesign — the keyboard shortcuts section was rebuilt around a key recorder with conflict detection, and multi-factor authentication moved into Password & auth with QR generation and TOTP validation. The rest is steady polish: the LLM assistant became noticeably smarter and smoother; spreadsheets, the backend log and the import/export dialogs all received meaningful upgrades; and the desktop app gained conveniences like tray hiding and start-on-login.
All 68 improvements
- Setup redesign
- Language selection screen.
- Clarified the desktop to desktop sync.
- Demo content can be optionally skipped if creating a new document.
- Improve mobile support.
- Background effects for Windows 11 and macOS.
- Redesigned the login and set password screens as well.
- Markdown: Minor improvements to slash commands.
- Import: Ignore macOS metadata when importing a ZIP
- Back-end log
- Customizable word wrap
- Integrate with search
- Add a dedicated download button.
- Get rid of
Slow 200 GET /api/backend-log with 19200316 bytes took 75ms.
- Text notes: Increase blockquote padding by @bigbangcmbr
- Improved the display of revisions in case a diff is not available or the revision is identical to the current note content.
- Text editor: configurable multi-state todo list checkboxes by @adoriandoran
- LLM
- Add an option to display history of chat notes
- Backlink support, based on reference links used by the assistant and tool calls.
- In-progress tool calls are also displayed.
- Reference links can be inserted by the user using @-mention
- Handle Gemini not supporting both note tools and note search
- Improve skill loading and render note for some models
- Smoother streaming effect
- Improved the backend and frontend skills for the LLM.
- Added a tool to search for icons.
- Add Claude Sonnet 5 & Fable.
- Improved UX by @adoriandoran
- Table of contents, text highlight support by @adoriandoran
- Improved the “Add provider” screen.
- Improved the model selector and fixed legacy models not showing in the sidebar.
- Markdown
- Interpret Markdown in table of contents.
- Improve table design and margins.
- Toasts are now selectable
- Various UI improvements by @adoriandoran
- Add separate language code for plain JavaScript
Text notes no longer have frontend and backend-specific versions of JavaScript - Spreadsheet
- Trim the saved data slightly.
- Improved rendering in the share and printing (borders, colors, number and date formatting).
- Added support for images
- Added support for mobile, making interaction much easier such as drag to pan instead of selection.
- Snippet support for code notes and Markdown notes by @adoriandoran
- New image viewer by @adoriandoran with gallery-style navigation, zoom and keyboard navigation.
- Media Player improvements by @adoriandoran
- Add previous/next navigation for audio and video
- Media Session API integration
- Play mode options
- Compact media player UI
- Improve fit and layout of the print preview dialog.
- Print: improved the layout and design of footnotes
- Quick edit: Reference links now open in the same popup instead in the background
- Options
- Seamless transition when switching themes, fonts or editor layout
- Improved the layout and appearance of backups and anonymized databases.
- Options now open by default in a modal instead of in a new tab.
- Show an indicator when loading a blob takes too much.
- Dedicated content badge for custom request handler
- Open tabs nearby instead of at the end
- Allow viewing source of SVG files
- Include note now renders some note types interactively such as collections, webviews or saved searches.
- Canvas notes:
- Notes can now be embedded in a similar way to Include note in text notes.
- Images for canvas notes are now saved as attachments which should reduce the performance hit when modifying canvases with large images.
- Improved the design of included notes.
- Launch bar configuration now opens in a modal.
- Improved revision dialog layout on mobile.
- Added linters:
- Mermaid: reporting parsing errors & improved error display.
- JSON
- Improved error tolerance for rendering math equations.
- Redesigned the keyboard shortcuts section with a key recorder instead of manual entry and conflict detection.
- Redesigned the multi-factor authentication section (including QR code generation and validation of TOTP) and integrated it directly in Password & auth.
- Improved OAuth connection flow, including display of the OAuth provider info (URL, name, icon).
- Improved detection of the OAuth provider icon, instead of falling back to Google's.
- Removed the default key binding for “Switch to Last Tab" since it overlaps with “Reset zoom” (Ctrl+0).
- Script API (both front-end and back-end) now have bidirectional Markdown / HTML conversion (
htmlToMarkdown,markdownToHtml) by @misch334 & @eliandoran - Notes can be toggled full-width from the note contextual menu (new layout only).
- Adjustments to the safe import for text notes: preserve underline text, list types, transparent table borders.
- Added a progress bar to the import notification.
- Option to disable tree scroll-follows-navigation by @kleutzinger
- Markdown:
- Added snippets for page-break and table.
- Added auto-completion for code block language tags.
- When exporting, format HTML-based tables with proper indentation & newlines.
- Spreadsheet: prevent jumping to the beginning/end when navigating at the edge
- The import dialog has been restructured to take into consideration support for new app-based imports (OneNote, Notion, AnyType).
- The export dialog has been simplified.
- Pressing enter in the note title will now focus the content and insert a new paragraph/line for text & code notes.
- Calendar: add a button to pin the current date
- Tree: Prevent accidentally importing above/below the hoisted note.
- Turned a few info dialogs into toasts.
- Mermaid updated with three new diagram types: Cynefin, Swimlane & Railroad
- Improve backend log with features such as syntax highlighting by @adoriandoran
- Various UI improvements by @adoriandoran
- Calendar: Add slotDuration and slotLabelInterval, Add Day View by @BeatLink
- Desktop installer: improved the installation animation on Windows and background on macOS
- Keyboard shortcuts now display localized names and macOS-specific glyphs.
- HTML & Markdown export: remove redundant
data-list-idfrom list items. - Code notes: add Nim language support by @dirtboll
- Evernote was enhanced with TODO list support, internal link detection and extended formatting such as admonitions.
- The desktop app gains two more features:
- Hiding to system tray when the last window is closed.
- Automatically starting up on login.
- Pinned tabs & various tab bar improvements by @adoriandoran
- Right sidebar toggle handle & peek mode by @adoriandoran
- Improvements to deleted notes dialog by @adoriandoran
- Icon pack preview by @adoriandoran
- Markdown: Convert text notes to Markdown and vice-versa by @adoriandoran
- Text notes:
- Undo & Redo buttons for the fixed toolbar by @adoriandoran.
- “Copy as Markdown” now renders more cleanly (fewer HTML attributes).
- Contextual shortcut hints by @adoriandoran
- Improved error management for render notes and backend scripts.
- PDF: added support for drawn signatures
- New launch bar buttons by @adoriandoran
- Color scheme switcher
- Deleted notes
🌍 Internationalization
- Reach 100% coverage for Romanian.
- Added Indonesian.
📖 Documentation
- Clarify Script API context (
startNote,currentNote,originEntity). - Documented some missing labels and relations.
- Documented
colorattribute. - Some links (to hidden notes or options pages) were broken.
- Documented the note title.
- Documented new features.
🛠️ Technical updates
- Remove unnecessary boxicon assets.
- Cleaned up a few dependencies.
- Complete architectural change to allow for a new deployment mechanism: standalone mode.
- Many dependency updates.
- Opt-in to disable automatic DB migration by @contributor
- Disable background effects while dev tools is attached to the same window
- Improved the loading time of the client by lazy loading libraries and dialogs
- Improved the loading time of the desktop slightly by loading the server at the same time as Electron starts.
🔒️ Security fixes
Security is a central theme of this release: 16 fixes systematically shrink Trilium's attack surface. Content is now sanitized on every path (HTML, SVG, collections, shared notes), injection vectors (SQL, path traversal, SSRF) have been hardened, sessions and cookies tightened, and the Electron desktop app locked down with strict permission, navigation and session-isolation policies. These fixes go hand in hand with the deliberate breaking changes above — together they make the default configuration significantly safer.
All 16 security fixes
require()in backend scripts is now allow/block-listed- Title templates & bulk-rename no longer use
eval() - Note content is now HTML-sanitized on non-editor paths
- Table of Contents & Highlights list strip block elements
- Improved SVG sanitization.
- Shared/published notes: CSP, and escaping
- Custom
#shareTemplateis ignored when backend scripting is disabled (EJS can run JS) — shared pages fall back to the default theme. #shareRawis now flaggedisDangerousin attribute UI; raw HTML shares are still intentionally served unrestricted (opt-in).
- Custom
- Session & cookie hardening
- API keys for LLM agents are no now write-only through the options API.
- Backup name sanitization
- SSRF / local file disclosure via image download
- Path-traversal hardening on file-upload endpoints
- SQL injection hardening
- Sanitize content of Collections and Mind Maps.
- Hardened the optional MCP server against DNS rebinding attacks.
- Hardening of the Electron app
<webview>attach vetting- Dedicated guest session partition: Web View notes now load in
persist:webviewinstead of sharing the renderer session, so embedded sites can never see Trilium cookies or resolve thetrilium-app://scheme. - Deny-by-default permission policy. App session allows
clipboard-sanitized-write,fullscreen,notifications(user scripts usenew Notification()); guests getfullscreenonly. - Scheme allowlist for external opens:
window.open/target=_blank URLs are validated beforeshell.openExternal - Global window-open & navigation policy
- Origin gate on
trilium-app://dispatch
- Shared notes:
- Prevent accessing (encrypted, not plain text) protected attachments.
- Improved filtering of some attributes.