mirror of
https://github.com/zadam/trilium.git
synced 2026-04-10 05:58:58 +02:00
Compare commits
1 Commits
analysis/i
...
renovate/c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
772ebbf929 |
@@ -1,76 +0,0 @@
|
||||
# Trilium Open Issue Review — 2026-04-10
|
||||
|
||||
A structured review of all **859 open GitHub issues** on TriliumNext/Trilium, produced by reading each issue individually (no labels consulted). Each issue was classified into exactly one of five buckets by batch-level subagents, then aggregated here.
|
||||
|
||||
## Headline numbers
|
||||
|
||||
| Bucket | Count | % |
|
||||
|---|---:|---:|
|
||||
| **Easy-fix candidates** (with proposed solution) | 61 | 7.0% |
|
||||
| **Likely already fixed** (needs verification) | 58 | 6.7% |
|
||||
| **Notable non-easy bugs** (deeper investigation) | 319 | 36.8% |
|
||||
| **Feature requests** (pure asks) | 423 | 48.8% |
|
||||
| **Skipped / unclear** | 6 | 0.7% |
|
||||
| **Total** | 867 | 100% |
|
||||
|
||||
## Deliverables
|
||||
|
||||
### Consolidated across all 859 issues
|
||||
- [**easy-fixes.md**](easy-fixes.md) — 61 easy-fix candidates with file paths and proposed patches. Start here if you want a weekend-sized fix.
|
||||
- [**likely-already-fixed.md**](likely-already-fixed.md) — 58 issues that appear resolved in current `main`. Each cites the evidence (commit, grep, code path) the reviewer checked. **Do not mass-close** — verify and ask the reporter first.
|
||||
- [**duplicates.md**](duplicates.md) — 52 duplicate/related-issue clusters covering ~146 issues. Candidates for consolidation.
|
||||
- [**feature-fit.md**](feature-fit.md) — all **423 feature requests** classified by how well they fit Trilium's product identity: 108 strong fit, 181 reasonable fit, 77 niche/scripting territory, 55 out of scope, 2 unclear. Each item has a one-sentence rationale; niche items include a suggested alternative (script/template/plugin).
|
||||
|
||||
### Per-batch reports
|
||||
Each of the 15 batches covers ~58 issues. The batch files keep the full classification (including the Notable and Feature sections that are not consolidated elsewhere). Batches are sorted newest-first.
|
||||
|
||||
| # | Range | Total | Easy | Fixed? | Notable | Features | Skip |
|
||||
|---:|---|---:|---:|---:|---:|---:|---:|
|
||||
| [01](batch-01.md) | #8766–#9353 | 58 | 6 | 3 | 26 | 23 | 0 |
|
||||
| [02](batch-02.md) | #8318–#8729 | 58 | 3 | 1 | 30 | 23 | 1 |
|
||||
| [03](batch-03.md) | #7827–#8314 | 58 | 5 | 2 | 28 | 24 | 2 |
|
||||
| [04](batch-04.md) | #6929–#7794 | 58 | 6 | 3 | 25 | 24 | 0 |
|
||||
| [05](batch-05.md) | #5790–#6928 | 58 | 10 | 1 | 26 | 24 | 1 |
|
||||
| [06](batch-06.md) | #5528–#5783 | 58 | 2 | 3 | 22 | 31 | 0 |
|
||||
| [07](batch-07.md) | #5298–#5526 | 58 | 8 | 1 | 28 | 21 | 0 |
|
||||
| [08](batch-08.md) | #4854–#5296 | 58 | 3 | 6 | 23 | 25 | 1 |
|
||||
| [09](batch-09.md) | #4194–#4837 | 58 | 3 | 2 | 19 | 34 | 0 |
|
||||
| [10](batch-10.md) | #3704–#4192 | 58 | 5 | 6 | 12 | 35 | 0 |
|
||||
| [11](batch-11.md) | #3185–#3703 | 58 | 1 | 8 | 15 | 34 | 0 |
|
||||
| [12](batch-12.md) | #2488–#3184 | 58 | 2 | 8 | 14 | 34 | 0 |
|
||||
| [13](batch-13.md) | #1763–#2477 | 58 | 2 | 4 | 15 | 37 | 1 |
|
||||
| [14](batch-14.md) | #1131–#1719 | 58 | 2 | 4 | 17 | 35 | 0 |
|
||||
| [15](batch-15.md) | #21–#1123 | 47 | 3 | 6 | 19 | 19 | 0 |
|
||||
|
||||
## Methodology
|
||||
|
||||
1. Fetched all 859 open issues (number, title, body, createdAt, updatedAt) via `gh issue list` — saved to `_all-issues-full.json`.
|
||||
2. Split by issue number into 15 roughly-equal batches (newest first).
|
||||
3. For each batch, a subagent read every issue's body and classified it. For easy-fix and already-fixed candidates the subagent also grepped/read the current codebase to sanity-check its claim.
|
||||
4. Consolidated easy-fix + already-fixed sections into the two standalone files.
|
||||
5. Ran semantic-similarity duplicate detection across all 859 titles + body excerpts via a dedicated agent (no labels used).
|
||||
6. For the 423 pure feature requests, launched a second round of 15 parallel subagents — each read every feature's body and classified it into strong/reasonable/niche/out-of-scope/unclear against Trilium's product identity. Aggregated into [feature-fit.md](feature-fit.md).
|
||||
7. No label was ever consulted — every classification is based on issue content, not tags.
|
||||
|
||||
## Caveats & known limitations
|
||||
|
||||
- **Easy-fix** = "one subagent thought it was easy after a skim". Always re-read the issue and verify the proposed patch against current `main` before touching it. Effort and confidence labels in `easy-fixes.md` are an honest self-estimate but may be wrong.
|
||||
- **Likely already fixed** = the symptom no longer reproduces or the referenced code is gone. Issues should be closed only after a reporter ping or a maintainer-run reproduction — some reports may still apply if the symptom shifted.
|
||||
- **Duplicates** = clustered by topic+semantics, not confirmed dupes. Manual review still required before closing any.
|
||||
- **Feature-fit classification** is one reviewer's opinion about product direction. "Out of scope" is not an automatic close — some requests might warrant a maintainer discussion. "Niche / scripting territory" often means "this is a legitimate need, just not a core feature"; the suggested alternative in each rationale is the path to unblock the user.
|
||||
- Translation strings in non-English files were **not** proposed for edit (project policy: only `en/translation.json`; Weblate handles the rest).
|
||||
- The classification counts do not always match the file counts exactly: a handful of issues appear in more than one section of their batch file (e.g. "easy fix AND already fixed") where the reviewer was uncertain. Treat per-batch tables as lower bounds.
|
||||
- **Prompt injection notice:** the body of [#8322](https://github.com/TriliumNext/Trilium/issues/8322) contains an instruction embedded in an image's alt-text. The batch-02 subagent flagged and ignored it. Worth being aware of when LLM tools process issue bodies in bulk.
|
||||
|
||||
## File layout
|
||||
|
||||
```
|
||||
issue-review/
|
||||
├── README.md # this file
|
||||
├── easy-fixes.md # 61 easy-fix candidates
|
||||
├── likely-already-fixed.md # 58 likely-fixed candidates
|
||||
├── duplicates.md # 52 duplicate/related clusters
|
||||
├── feature-fit.md # 423 feature requests classified by product fit
|
||||
├── batch-01.md ... batch-15.md # per-batch full classifications
|
||||
└── _all-issues-full.json # raw `gh issue list` dump kept for re-runs
|
||||
```
|
||||
File diff suppressed because one or more lines are too long
@@ -1,112 +0,0 @@
|
||||
# Batch 01 — Issues #8766–#9353
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#9330 — Web clipper setup fails with trailing / in server setup](https://github.com/TriliumNext/Trilium/issues/9330)
|
||||
- **Problem**: Entering `https://server/` (trailing slash) in the web clipper options form produces malformed requests (`//api/...`) because the URL isn't normalized.
|
||||
- **Proposed solution**: In `apps/web-clipper/entrypoints/options/index.ts`, strip any trailing slash from `$triliumServerUrl.val()` before storing it (lines 32, 63). Also defensively trim it again when read in `apps/web-clipper/entrypoints/background/trilium_server_facade.ts` (line 121) before concatenating with the API path.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8882 — Desktop (macOS ARM64): window shows `{"message":"Not Found"}` on startup](https://github.com/TriliumNext/Trilium/issues/8882)
|
||||
- **Problem**: In Electron, `res.sendFile(path.join(publicDir, "index.html"))` fails because `send`/streaming cannot read from inside the `app.asar` archive; reporter identified the root cause and the fix.
|
||||
- **Proposed solution**: In `apps/server/src/routes/assets.ts` line 72 (non-dev branch), replace `res.sendFile(path.join(publicDir, "index.html"), STATIC_OPTIONS)` with a `readFile` + `res.send()` (Electron patches `fs.readFile` to work inside asar, but not `send`'s streaming pipeline). Set `Content-Type: text/html; charset=utf-8`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8916 — Note Map view of `Hidden Notes` freezes Trilium](https://github.com/TriliumNext/Trilium/issues/8916)
|
||||
- **Problem**: Invoking Note Map on the `_hidden` root attempts to render thousands of system nodes and hangs the renderer irrecoverably (edge case).
|
||||
- **Proposed solution**: In the note-map widget (`apps/client/src/widgets/type_widgets/note_map.tsx` or similar — search `noteMap`), short-circuit the render when `note.noteId === "_hidden"` or when the aggregate number of descendants exceeds a threshold; show a warning instead of computing the graph. Alternatively hide the "Note map" entry from the `...` menu when the current note is `_hidden` (or any note ancestored by it) via a simple guard in the menu population code.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — the guard is trivial to add, but the exact file path depends on where the note-map command is currently wired after the React port.
|
||||
|
||||
### [#8850 — Search does not work for `#clipType=note`](https://github.com/TriliumNext/Trilium/issues/8850)
|
||||
- **Problem**: Searching `#clipType=note` returns all notes in 0.101.3 and throws an error in nightly. The literal value `note` likely collides with the search DSL keyword `note` (note title predicate).
|
||||
- **Proposed solution**: In `apps/server/src/services/search/` token parsing, quote/escape attribute values when they match reserved keywords, or force attribute-expression RHS parsing to treat the RHS as a literal until whitespace. Simplest targeted fix: ensure the attribute-value tokenizer does not re-interpret `note` as a type keyword when it appears after `=`. Reporter-visible workaround is `#clipType="note"` (confirm this works before closing).
|
||||
- **Effort**: small
|
||||
- **Confidence**: low — the symptom points at the search tokenizer but the root cause needs a quick repro against current code.
|
||||
|
||||
### [#8900 — Uncaught TypeError thrown when switching notes with bottom-right attribute window open](https://github.com/TriliumNext/Trilium/issues/8900)
|
||||
- **Problem**: Switching notes while the attribute detail popup is open throws a console TypeError (no visible break). Classic missing null-check on teardown.
|
||||
- **Proposed solution**: Find the attribute detail widget (`apps/client/src/widgets/ribbon/attributes/*` or `widgets/attribute_widgets`) and guard the cleanup handler to check whether the widget/element still exists before calling into it. The user screenshot would pinpoint the exact line; a defensive `if (!$elem?.length) return;` at the top of the refresh/hide handler is typical.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — confidence hinges on identifying the exact handler from the screenshot; the fix itself is one line.
|
||||
|
||||
### [#9174 — Right navigation (TOC) font doesn't match editor until you keep typing](https://github.com/TriliumNext/Trilium/issues/9174)
|
||||
- **Problem**: When you change a heading's style in the editor, the TOC side panel doesn't re-render using the new style until more content is added.
|
||||
- **Proposed solution**: The TOC widget subscribes to content changes but likely ignores "attribute-only" (style) changes. In the TOC widget (`apps/client/src/widgets/right_panel/*toc*` or `table_of_contents*.tsx`) ensure the listener refreshes on model changes that alter heading attributes too — typically replacing a content-only comparison with a re-render on every editor `change` event, or listening to CKEditor's `change:data` broadly.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#9009 — Option to easily toggle the fuzzy search on/off](https://github.com/TriliumNext/Trilium/issues/9009)
|
||||
- **Evidence**: Commit `f23a7b4842 feat(settings): also allow for fuzzy searching to just be disabled` (Mar 18 2026) adds a disable toggle in `apps/client/src/widgets/type_widgets/options/other.tsx`, wires it to `search_context.ts`, and updates `options_init.ts` + `options_interface.ts`. This lands after the issue was filed.
|
||||
- **Verification needed**: A maintainer can confirm the new toggle exists in the Options UI (Other tab) in a current build and ask the reporter whether it satisfies their need; also verify the "quick jump" fuzzy concern mentioned in the issue is covered by the same toggle.
|
||||
|
||||
### [#8866 — Cursor jumps to note beginning periodically, tabs reset — LauncherContainer](https://github.com/TriliumNext/Trilium/issues/8866)
|
||||
- **Evidence**: The error messages reference `LauncherContainer.js:545` (0.101.3). The current repo has `apps/client/src/widgets/launch_bar/LauncherContainer.tsx` — the widget was rewritten as a React component. Reported actions (`hideLeftPane`, `searchNotes`, `enterProtectedSession`) still exist but the rAF-in-launcher-container reflow storm described in the log looks gone after the rewrite.
|
||||
- **Verification needed**: Maintainer should ask the reporter to retest on 0.102.2+ since the underlying file no longer exists in its 0.101.x form.
|
||||
|
||||
### [#8790 — Some assets not work in share notes when serving under a different path](https://github.com/TriliumNext/Trilium/issues/8790)
|
||||
- **Evidence**: Issue references the path `assets/v0.99.3/src/share.js`. The share rendering pipeline has been completely replaced — share assets are now served from `packages/share-theme/` and `apps/server/src/share/content_renderer.ts` uses `basePath`-based asset URLs. The old `/assets/vX.X.X/src/share.js` path no longer exists.
|
||||
- **Verification needed**: Maintainer should have the reporter retest with 0.102.x and the current reverse-proxy guide; the specific 404 URL from the bug cannot occur in the current codebase.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#9345 — Significant input lag and UI freezing during continuous drawing/writing](https://github.com/TriliumNext/Trilium/issues/9345) — Canvas PUTs every ~200ms saturating the request queue; needs debounced/coalesced saves in Excalidraw type widget.
|
||||
- [#9259 — Notes no longer receive focus when navigating via the left tree](https://github.com/TriliumNext/Trilium/issues/9259) — Focus regression in 0.102.1 after the React port; requires bisecting the NoteDetail focus wiring.
|
||||
- [#9247 — A large number of recovered notes appear after synchronization](https://github.com/TriliumNext/Trilium/issues/9247) — Sync conflict/"recovered" flood, needs log analysis.
|
||||
- [#9238 — Formatting buttons overlap text at zoom factor >= 1](https://github.com/TriliumNext/Trilium/issues/9238) — CSS layout bug with the floating formatting toolbar; probably small once reproduced.
|
||||
- [#9230 — Excalidraw updates slower after entering Zen mode](https://github.com/TriliumNext/Trilium/issues/9230) — Layout recalc or resize observer interaction with zen mode.
|
||||
- [#9229 — Protected note contents get rendered whenever it has child notes](https://github.com/TriliumNext/Trilium/issues/9229) — Security-sensitive; `NoteDetailWrapper` in `apps/client/src/widgets/NoteDetail.tsx` keeps previously-rendered type widgets in the DOM when switching to `protectedSession` type, so real content stays visible. Needs a correct fix, not a hack.
|
||||
- [#9150 — markdown code note does not highlight code block](https://github.com/TriliumNext/Trilium/issues/9150) — Code-mime highlight plumbing for markdown-typed code notes.
|
||||
- [#9134 — Images opened in new tabs do not show up](https://github.com/TriliumNext/Trilium/issues/9134) — Type-widget caching/reuse interaction with the new tab lifecycle.
|
||||
- [#9110 — Note crashed at multiple ctrl+z/paste operations](https://github.com/TriliumNext/Trilium/issues/9110) — CKEditor5 internal error `merge-operation-how-many-invalid`; upstream ckeditor issue.
|
||||
- [#9096 — Share included content not working (reverse proxy)](https://github.com/TriliumNext/Trilium/issues/9096) — Share HTML/CSS inclusion requests hit `/api/` instead of `/share/` — rewriting needed in the share renderer.
|
||||
- [#9083 — Alt+F4 closes all windows in multi-window mode](https://github.com/TriliumNext/Trilium/issues/9083) — Electron `before-quit`/`window-all-closed` behavior in `apps/desktop/src/main.ts` closes the whole app instead of per-window.
|
||||
- [#9069 — PDF annotation changes not persisted, download button unresponsive](https://github.com/TriliumNext/Trilium/issues/9069) — pdfjs-viewer integration only saves on first annotation; needs re-entry of annotation save hook.
|
||||
- [#8991 — Note jumps to the top during background sync](https://github.com/TriliumNext/Trilium/issues/8991) — Sync event triggers full re-render of all note detail instances, losing scroll state.
|
||||
- [#8979 — PDF 403 Forbidden behind NGINX Proxy Manager](https://github.com/TriliumNext/Trilium/issues/8979) — Follow-up to closed #8877; CSRF / range request handling behind NPM.
|
||||
- [#8973 — Chinese paths in `file://` URLs on Windows](https://github.com/TriliumNext/Trilium/issues/8973) — URL encoding / Electron `openExternal` handling.
|
||||
- [#8962 — PDF Editing highlights inconsistently saved](https://github.com/TriliumNext/Trilium/issues/8962) — Same family as #9069.
|
||||
- [#8953 — Share logo function broken in 0.102.0](https://github.com/TriliumNext/Trilium/issues/8953) — New share-theme fixes logo at `width="32"` (mobile.css max-width:32px); needs re-introducing the configurable logo width/height path in `packages/share-theme/src/templates/page.ejs`.
|
||||
- [#8952 — Software suddenly crashed, lost notes (ckeditor contextualballoon error)](https://github.com/TriliumNext/Trilium/issues/8952) — CKEditor5 internal error, upstream.
|
||||
- [#8942 — shareAlias links not clickable in shared notes](https://github.com/TriliumNext/Trilium/issues/8942) — Share content link rewriter doesn't resolve `[[alias]]` notation to the aliased href anymore.
|
||||
- [#8913 — text 文本突然崩溃,且无法打开 (CKEditor `model-textproxy-wrong-length`)](https://github.com/TriliumNext/Trilium/issues/8913) — CKEditor5 internal, note is broken on open.
|
||||
- [#8904 — WebClipper: Save whole page does nothing](https://github.com/TriliumNext/Trilium/issues/8904) — Service worker error in clipper; needs log triage.
|
||||
- [#8893 — SOCKS5 support for web browsing / sync](https://github.com/TriliumNext/Trilium/issues/8893) — Requires Electron request interception, not trivial.
|
||||
- [#8891 — LaTeX sum/prod math display error in new math UI](https://github.com/TriliumNext/Trilium/issues/8891) — ckeditor5-math rendering regression.
|
||||
- [#8848 — IPv6 synchronization fails (ENETUNREACH)](https://github.com/TriliumNext/Trilium/issues/8848) — Sync client's URL parser likely mishandles `[ipv6]` literal.
|
||||
- [#8791 — Copy share link not work when serving under a different path](https://github.com/TriliumNext/Trilium/issues/8791) — `useShareInfo` in `apps/client/src/widgets/shared_info.tsx` uses `location.pathname`, which is `/` when nginx strips the prefix; needs server-provided root path.
|
||||
- [#9286 — Web Clipper authentication fails when TOTP is enabled](https://github.com/TriliumNext/Trilium/issues/9286) — Server already accepts `totpToken` in POST `/api/login/token`; web clipper options form just needs a TOTP field and to forward it. Small effort but cross-file UI work.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#9353 — Add way to zoom with a pen tablet to canvas notes](https://github.com/TriliumNext/Trilium/issues/9353)
|
||||
- [#9337 — Renaming Bookmarks cascades to linked instances](https://github.com/TriliumNext/Trilium/issues/9337)
|
||||
- [#9336 — Global Bookmarks](https://github.com/TriliumNext/Trilium/issues/9336)
|
||||
- [#9311 — Official RISC-V (riscv64) Docker image support](https://github.com/TriliumNext/Trilium/issues/9311)
|
||||
- [#9164 — PDF Export feature and font size configuration](https://github.com/TriliumNext/Trilium/issues/9164)
|
||||
- [#9120 — Images as links](https://github.com/TriliumNext/Trilium/issues/9120)
|
||||
- [#9059 — Link notes in PDF to internal notes](https://github.com/TriliumNext/Trilium/issues/9059)
|
||||
- [#9032 — Horizontal scroll bar for the tab row](https://github.com/TriliumNext/Trilium/issues/9032)
|
||||
- [#9029 — Integrated Web-Clipper in the web UI](https://github.com/TriliumNext/Trilium/issues/9029)
|
||||
- [#9010 — ETAPI: No way to access protected (encrypted) notes](https://github.com/TriliumNext/Trilium/issues/9010)
|
||||
- [#9006 — Switch Alt+Enter with Enter (line spacing default)](https://github.com/TriliumNext/Trilium/issues/9006)
|
||||
- [#9003 — Drag-and-drop files/folders to insert clickable `file://` hyperlinks](https://github.com/TriliumNext/Trilium/issues/9003)
|
||||
- [#8996 — Hide expand/collapse children button when all children are archived and hidden](https://github.com/TriliumNext/Trilium/issues/8996)
|
||||
- [#8974 — TOC visibility toggle for mobile screens](https://github.com/TriliumNext/Trilium/issues/8974)
|
||||
- [#8967 — PDF sharing: Download option](https://github.com/TriliumNext/Trilium/issues/8967)
|
||||
- [#8963 — Bookmark while viewing PDF](https://github.com/TriliumNext/Trilium/issues/8963)
|
||||
- [#8957 — Better separation between notes and system scripts](https://github.com/TriliumNext/Trilium/issues/8957)
|
||||
- [#8955 — Simpler UI mode for new/casual users](https://github.com/TriliumNext/Trilium/issues/8955)
|
||||
- [#8954 — Allow filtering by category for the custom icon packs](https://github.com/TriliumNext/Trilium/issues/8954)
|
||||
- [#8941 — Ability to download backups from Settings](https://github.com/TriliumNext/Trilium/issues/8941)
|
||||
- [#8927 — Add "Copy to Clipboard" button for code blocks in shared pages](https://github.com/TriliumNext/Trilium/issues/8927)
|
||||
- [#8912 — macOS dynamic traffic light offset based on zoom factor](https://github.com/TriliumNext/Trilium/issues/8912)
|
||||
- [#8766 — Checkbox tree for note tree](https://github.com/TriliumNext/Trilium/issues/8766)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
_None — every issue in the batch is categorized above._
|
||||
@@ -1,91 +0,0 @@
|
||||
# Batch 02 — Issues #8318–#8729
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#8561 — documentation - word count widget](https://github.com/TriliumNext/Trilium/issues/8561)
|
||||
- **Problem**: Word count widget docs don't prominently state the note must have the `#wordCount` label.
|
||||
- **Proposed solution**: Edit `apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html` to add an explicit note (admonition) above the code snippet stating: "The widget only activates on text notes that carry the `#wordCount` label (it can be inherited)." The code comment already mentions this but it's buried inside the example code block.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8401 — router not found for request GET /api/search](https://github.com/TriliumNext/Trilium/issues/8401)
|
||||
- **Problem**: Third-party Home Assistant addon gets "router not found" on `GET /api/search`.
|
||||
- **Proposed solution**: Not a Trilium bug — the route is `/api/search/:searchString` (see `apps/server/src/routes/routes.ts:255`). The addon is calling the route without the required path parameter. Close as invalid with a pointer to the addon author.
|
||||
- **Effort**: trivial (close with explanation)
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8322 — Code block tries to link/create note when typing @, and suggests slash-commands when typing /](https://github.com/TriliumNext/Trilium/issues/8322)
|
||||
- **Problem**: Inside full `code` blocks in text notes, typing `@` triggers the note-link autocomplete and `/` triggers slash commands.
|
||||
- **Proposed solution**: In the CKEditor mention/slash-command plugin configuration (`packages/ckeditor5/src/plugins` area that wires Mention/SlashCommand), disable the mention & slash-command feeders when the selection is inside a `codeBlock` element. Typically a single predicate check. Worth verifying but should be small.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
- **Note**: the issue body contains an image with a prompt-injection attempt in its `alt` attribute which I ignored.
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#8407 — Why was the title selection for new notes cancelled](https://github.com/TriliumNext/Trilium/issues/8407)
|
||||
- **Evidence**: `apps/client/src/widgets/note_title.tsx` (lines 61–69) explicitly calls `textBoxRef.current.select()` on `focusAndSelectTitle` events, and `apps/client/src/services/note_create.ts:92` triggers that event with `isNewNote: true`. A relevant fix `06cea99b40 fix(react): note title not selecting text` (Aug 2025) pre-dates the issue, but recent churn in the title widget (e.g. `c09ef3af80`, Feb 2026) suggests the bug may have returned and then been addressed after the reporter filed on 0.101.3.
|
||||
- **Verification needed**: Ask the reporter to retest on nightly / current main.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#8729 — Editing internal links](https://github.com/TriliumNext/Trilium/issues/8729) — CKEditor UI work to add an "edit" affordance for internal links analogous to external ones.
|
||||
- [#8676 — When adding a connection in the relation map note, Chinese input error](https://github.com/TriliumNext/Trilium/issues/8676) — Long-standing IME composition bug in the relation-map connection input (would need `compositionstart/end` handling).
|
||||
- [#8660 — Protected notes, dateModified, and misleading UI](https://github.com/TriliumNext/Trilium/issues/8660) — Entering a protected session rewrites `dateModified` for all protected notes; fix requires separating "re-encrypted" from "edited" timestamps.
|
||||
- [#8641 — @ suggestion list overflows when cursor moves to new line](https://github.com/TriliumNext/Trilium/issues/8641) — CKEditor mention balloon positioning bug at the viewport edge.
|
||||
- [#8622 — Lists Alignment in Tables](https://github.com/TriliumNext/Trilium/issues/8622) — CKEditor/list alignment in table cells renders incorrectly except for todo lists.
|
||||
- [#8613 — /assets/vX/ seems not to exist](https://github.com/TriliumNext/Trilium/issues/8613) — `apps/server/src/routes/assets.ts:89` wires `/assets/vX/stylesheets` to `public/stylesheets` under the server src, but the versioned client bundle lives elsewhere, so `theme-next-dark.css` is not reachable via the documented `vX` path.
|
||||
- [#8604 — Show warning toast when triggering "global:" shortcuts](https://github.com/TriliumNext/Trilium/issues/8604) — Design question; would require UX + Electron main-process signal-back to renderer.
|
||||
- [#8576 — Calendar created new date of new month on last month](https://github.com/TriliumNext/Trilium/issues/8576) — In `apps/server/src/services/date_notes.ts:396-400`, when `enableWeekNote` is set, `getDayNote` places the day under its week parent, which is in the previous month when the week starts in that month. Needs a design decision.
|
||||
- [#8565 — Colors in map do not match colors of notes](https://github.com/TriliumNext/Trilium/issues/8565) — Leaflet map marker icons are apparently color-shifted (possibly due to SVG filter/tint), investigate map marker color pipeline.
|
||||
- [#8533 — When creating a new note while linking to it, editor always scrolls to top](https://github.com/TriliumNext/Trilium/issues/8533) — Regression in the `Ctrl+L` → create flow; editor selection restoration is lost after the note-type-chooser modal closes.
|
||||
- [#8530 — Table not visible on viewType=Table note](https://github.com/TriliumNext/Trilium/issues/8530) — Table collection view is clipped when the parent text content overflows the viewport; CSS/flex sizing bug in `apps/client/src/widgets/collections/table`.
|
||||
- [#8508 — Editor - Hardcoded Translations / No Weblate Options](https://github.com/TriliumNext/Trilium/issues/8508) — Various CKEditor toolbar strings aren't routed through i18next; needs audit of custom plugins.
|
||||
- [#8497 — Time offset in Log - 24 hours](https://github.com/TriliumNext/Trilium/issues/8497) — Likely missing `trilium-local-now-datetime` header handling in the recent-changes endpoint/timeline grouping.
|
||||
- [#8491 — Trilium Encrypted Notes Search Issue After Sync](https://github.com/TriliumNext/Trilium/issues/8491) — Search index isn't rebuilt for protected notes after a sync pulls them.
|
||||
- [#8465 — Defaulting Ctrl+L to 'arbitrary title'](https://github.com/TriliumNext/Trilium/issues/8465) — UX tweak to the add-link dialog default radio-button state; arguably small but changes defaults that users rely on.
|
||||
- [#8462 — canvas cannot display, even it is not empty](https://github.com/TriliumNext/Trilium/issues/8462) — Excalidraw rendering issue on Deepin v23; needs repro.
|
||||
- [#8459 — Mermaid split view renderer incorrect](https://github.com/TriliumNext/Trilium/issues/8459) — Mermaid output scaling/positioning bug in the split-view preview.
|
||||
- [#8451 — Bug: Cannot hide left sidebar in shared view using CSS or Attributes](https://github.com/TriliumNext/Trilium/issues/8451) — Neither `#hideLeftPane` nor `~shareCss` override the share-theme layout; requires adding attribute support in `packages/share-theme/src/templates/page.ejs` (no such hook exists today).
|
||||
- [#8448 — Bug: Attribute #shareExternalLink does not work / has no effect](https://github.com/TriliumNext/Trilium/issues/8448) — `apps/server/src/share/content_renderer.ts` only honours `shareExternalLink` for direct children of the share root and in link rewriting, so a note visited directly by URL renders as an empty page. Needs either a redirect or doc clarification.
|
||||
- [#8440 — Lagginess, rubberbanding on frontend](https://github.com/TriliumNext/Trilium/issues/8440) — Vague perf regression; needs profiling.
|
||||
- [#8429 — appear error log of trilium at linux](https://github.com/TriliumNext/Trilium/issues/8429) — `s.createElement is not a function` in ckeditor5.js; needs repro (probably a plugin interaction).
|
||||
- [#8428 — Templates outside the workspace cannot be used within the workspace](https://github.com/TriliumNext/Trilium/issues/8428) — `apps/server/src/routes/api/search.ts:152` only returns `#workspaceTemplate` when hoisted, deliberately excluding `#template`. Needs a product decision.
|
||||
- [#8383 — Abide to markdown standards](https://github.com/TriliumNext/Trilium/issues/8383) — Architectural — remap H1↔title during markdown export/import; has been discussed in other issues.
|
||||
- [#8360 — Disable fuzzy search in copy/clone](https://github.com/TriliumNext/Trilium/issues/8360) — `/api/autocomplete` doesn't honour an "exact match" flag; search context defaults to fuzzy. Needs a new flag or exact-mode toggle plumbed through to the autocomplete route.
|
||||
- [#8356 — Allow Enter-key to confirm selection in 'Choose Note Type' dialog](https://github.com/TriliumNext/Trilium/issues/8356) — `apps/client/src/widgets/react/FormList.tsx` only wires click, not keyboard. Requires adding `onKeyDown`/focus management to `FormListItem`.
|
||||
- [#8331 — table of contents and search do not work properly in closed-then-reopened tabs](https://github.com/TriliumNext/Trilium/issues/8331) — Tab-reopen doesn't rebind TOC/search scroll handlers for the reconstructed note view.
|
||||
- [#8330 — Unable to confirm inline note creation via keyboard](https://github.com/TriliumNext/Trilium/issues/8330) — Same root cause as #8356 (FormList has no keyboard confirm).
|
||||
- [#8323 — Enabling showLoginInShareTheme does not enable login from base domain](https://github.com/TriliumNext/Trilium/issues/8323) — `apps/server/src/share/content_renderer.ts:185` passes `showLoginInShareTheme` to the EJS template, but no template under `packages/share-theme/src/templates/` actually renders a login link. The feature is un-implemented in the default theme.
|
||||
- [#8318 — Share page same title toc jump bug](https://github.com/TriliumNext/Trilium/issues/8318) — TOC anchor generation in the share renderer doesn't disambiguate duplicate headings; needs unique-ID generation.
|
||||
- [#8598 — Enable globalGroup for KaTeX (or make the global macros configurable)](https://github.com/TriliumNext/Trilium/issues/8598) — Adding `globalGroup: true` to `renderMathInElement` calls (`apps/client/src/services/content_renderer_text.ts:28` and CKEditor math plugin) is mechanically small but has semantic implications that need review.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#8720 — Inline Code "copy button" missing in UI](https://github.com/TriliumNext/Trilium/issues/8720)
|
||||
- [#8700 — Add G-code formatting](https://github.com/TriliumNext/Trilium/issues/8700)
|
||||
- [#8699 — Backup enhancements](https://github.com/TriliumNext/Trilium/issues/8699)
|
||||
- [#8664 — List view in shared collection notes](https://github.com/TriliumNext/Trilium/issues/8664)
|
||||
- [#8663 — Web Clipper for ChatGPT](https://github.com/TriliumNext/Trilium/issues/8663)
|
||||
- [#8658 — OIDC groups claims for access control](https://github.com/TriliumNext/Trilium/issues/8658)
|
||||
- [#8635 — Allow internal links to open PDF notes at a specific page](https://github.com/TriliumNext/Trilium/issues/8635)
|
||||
- [#8606 — Implement Authorization on OpenID](https://github.com/TriliumNext/Trilium/issues/8606)
|
||||
- [#8600 — Add Microsoft Word Style Formatting Commands](https://github.com/TriliumNext/Trilium/issues/8600)
|
||||
- [#8590 — Custom Font Selection with System Font Support](https://github.com/TriliumNext/Trilium/issues/8590)
|
||||
- [#8588 — Import .ics Calendar Support (Local File & URL)](https://github.com/TriliumNext/Trilium/issues/8588)
|
||||
- [#8534 — Regarding Password Reset](https://github.com/TriliumNext/Trilium/issues/8534)
|
||||
- [#8526 — Make Ctrl + Click select multiple notes in the note tree by default](https://github.com/TriliumNext/Trilium/issues/8526)
|
||||
- [#8481 — Add filtering in Table view](https://github.com/TriliumNext/Trilium/issues/8481)
|
||||
- [#8477 — Folders, folders, folders](https://github.com/TriliumNext/Trilium/issues/8477)
|
||||
- [#8466 — Naming and locking some note revisions](https://github.com/TriliumNext/Trilium/issues/8466)
|
||||
- [#8452 — Export note attributes as Markdown metadata](https://github.com/TriliumNext/Trilium/issues/8452)
|
||||
- [#8389 — Make it possible to add preact to Dialogs](https://github.com/TriliumNext/Trilium/issues/8389)
|
||||
- [#8382 — Feature: Inline tabs in pages](https://github.com/TriliumNext/Trilium/issues/8382)
|
||||
- [#8372 — [Feature Request] Support "share_target" in PWA to share files into Trilium notes](https://github.com/TriliumNext/Trilium/issues/8372)
|
||||
- [#8333 — Feature Request: Quick access UI for frequently used text background colors](https://github.com/TriliumNext/Trilium/issues/8333)
|
||||
- [#8332 — Feature Request: Allow defining a global custom color palette for text background](https://github.com/TriliumNext/Trilium/issues/8332)
|
||||
- [#8319 — [Feature Request] Improved Note-Maps](https://github.com/TriliumNext/Trilium/issues/8319)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- [#8514 — Unclear documentation about backing up](https://github.com/TriliumNext/Trilium/issues/8514) — Documentation complaint about an old wiki page (`github.com/TriliumNext/Trilium/wiki/Data-directory`) that is no longer the canonical source; kept as a feature request above but could also be resolved by pointing to the new docs site. Needs maintainer triage of which doc to update.
|
||||
@@ -1,108 +0,0 @@
|
||||
# Batch 03 — Issues #7827–#8314
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#8230 — Demo spacing and formatting issues](https://github.com/TriliumNext/Trilium/issues/8230)
|
||||
- **Problem**: `apps/edit-docs/demo/root/Trilium Demo.html` line 78 has "code blocks</a>and" (missing space before "and"), a comma trapped inside the `<a>` for "checkbox lists,", and could use a serial comma.
|
||||
- **Proposed solution**: Edit `apps/edit-docs/demo/root/Trilium Demo.html` around line 78: move the `,` out of the `checkbox lists` anchor, add a space before `and`, and optionally add a serial comma before the final list item. Note: this file is authored via `pnpm run edit-docs` and the demo/demo.zip artifact may also need regeneration.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8045 — Mac Client setup doesn't support trailing slash](https://github.com/TriliumNext/Trilium/issues/8045)
|
||||
- **Problem**: The sync-from-server setup form passes `syncServerHost` verbatim, so a trailing slash produces `http://host:port//api/...` URLs.
|
||||
- **Proposed solution**: In `apps/client/src/setup.ts` around line 102, strip trailing slashes: `const syncServerHost = this.syncServerHostInput.value.trim().replace(/\/+$/, "");`. The setup modal is small enough that this single change covers it.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8188 — Displaying note icon when creating an inline note link, using @](https://github.com/TriliumNext/Trilium/issues/8188)
|
||||
- **Problem**: The `@`-mention feed in CKEditor renders only the highlighted title, no icon, while other autocomplete surfaces show icons. The backend (`apps/server/src/routes/api/autocomplete.ts:70`) already returns `icon`, but it is dropped before reaching the itemRenderer.
|
||||
- **Proposed solution**:
|
||||
1. In `apps/client/src/services/note_autocomplete.ts` `autocompleteSourceForCKEditor` (around lines 63–72), include `icon: row.icon` in the mapped object.
|
||||
2. In `apps/client/src/widgets/type_widgets/text/config.ts` around lines 184–190, prepend an `<span class="bx ...">` using the item's icon inside the generated button.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7884 — Remove `docker-compose.rootless.yaml`, as it is deprecated](https://github.com/TriliumNext/Trilium/issues/7884)
|
||||
- **Problem**: The reporter wants the now-deprecated `docker-compose.rootless.yml` file removed. A `Glob` for `docker-compose.rootless*` at repo root returns nothing, so the file is already gone, but the issue remains open and references to it in docs (if any) should be scrubbed.
|
||||
- **Proposed solution**: Verify no docs still link to `docker-compose.rootless.yml` (quick Grep), then close the issue as already addressed. If any lingering references exist, remove them.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7942 — "Open Command Palette" shortcut opens with the '>' symbol highlighted](https://github.com/TriliumNext/Trilium/issues/7942)
|
||||
- **Problem**: `apps/client/src/widgets/dialogs/jump_to_note.tsx` unconditionally calls `.trigger("select")` in `onShown` (line 85), which highlights the entire input — including the `>` prefix — so the first keystroke wipes out the command-mode marker.
|
||||
- **Proposed solution**: When `mode === "commands"`, instead of selecting all text, place the caret at the end. For example, grab the underlying input and call `setSelectionRange(len, len)` on it; keep `.trigger("select")` for the other modes. Single-file change in `jump_to_note.tsx`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (needs quick confirm that the autocomplete input is a normal `<input>`)
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#8060 — fix(search): Canvas notes with empty or missing elements cause quick search to crash](https://github.com/TriliumNext/Trilium/issues/8060)
|
||||
- **Evidence**: `git log -S "Array.isArray(elements)"` shows commit `ecb972c71c fix(search): add null check for canvas elements in fulltext search`. The canvas handling has since moved to `apps/server/src/services/search/expressions/note_content_fulltext_preprocessor.ts` where `processCanvasContent` (lines 83–108) now guards with `if (Array.isArray(elements))` and returns `""` otherwise — exactly the fix proposed in the issue.
|
||||
- **Verification needed**: Confirm with the reporter on a current nightly and close.
|
||||
|
||||
### [#7884 — Remove `docker-compose.rootless.yaml`](https://github.com/TriliumNext/Trilium/issues/7884)
|
||||
- **Evidence**: `Glob "docker-compose.rootless*"` at repo root returns no files; the file has been removed.
|
||||
- **Verification needed**: Grep any docs for dangling mentions of `docker-compose.rootless` and close. (Also listed under easy-fix in case any lingering references need cleanup.)
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#8314 — Scissor "Cut & Paste Selection to Sub-note" does not transfer image attachments](https://github.com/TriliumNext/Trilium/issues/8314) — Attachment ownership needs to be moved when the scissor CKEditor plugin creates a new note; requires reworking the plugin's content-handoff to also reassign image attachment ownership on the server side.
|
||||
- [#8282 — text editor crashed](https://github.com/TriliumNext/Trilium/issues/8282) — CKEditor `view-position-after-root` error during note creation; likely an upstream CKEditor selection race, needs reproducer.
|
||||
- [#8280 — Error dragging note content to the title](https://github.com/TriliumNext/Trilium/issues/8280) — Regression in drag-to-title behaviour in 0.101.1; requires reproducing and tracing the drag handler.
|
||||
- [#8272 — Desktop Sync has no 2FA](https://github.com/TriliumNext/Trilium/issues/8272) — Requires non-trivial auth-flow work (sync API doesn't currently participate in TOTP).
|
||||
- [#8261 — fix docker backup path](https://github.com/TriliumNext/Trilium/issues/8261) — The backup path shown in the UI is hard-coded to a default; making it reflect the actual compose mount is non-trivial since the backend only sees paths inside the container.
|
||||
- [#8216 — Docker installation, IPv4 accessible but IPv6 not](https://github.com/TriliumNext/Trilium/issues/8216) — Likely needs to bind to `::` or handle dual-stack explicitly; needs triage to determine whether it's a Docker networking issue or Trilium's listen config.
|
||||
- [#8215 — Sync icon does not change when editing notes](https://github.com/TriliumNext/Trilium/issues/8215) — `SyncStatus.tsx` still overlays a `bxs-star` on `connected-with-changes`, but the visual change may have become too subtle vs the old asterisk; needs UX call, not a one-liner.
|
||||
- [#8209 — Allow disabling app access when using TOTP](https://github.com/TriliumNext/Trilium/issues/8209) — Needs a new "enforce TOTP on all logins" server option and wiring through sync/desktop login flows.
|
||||
- [#8199 — Use desktop without password](https://github.com/TriliumNext/Trilium/issues/8199) — Desktop currently mandates a password for the local store; loosening this is an architecture decision.
|
||||
- [#8195 — Promoted attributes aren't aligned when using custom or legacy themes](https://github.com/TriliumNext/Trilium/issues/8195) — Layout regression driven by multiple theme CSS files (`PromotedAttributes.css`, theme-next, theme-next-light/dark); requires theme-aware audit.
|
||||
- [#8181 — Widget migration guide](https://github.com/TriliumNext/Trilium/issues/8181) — Documentation task to help users migrate custom widgets to the new layout; not an easy one-liner because real code examples need to be updated.
|
||||
- [#8178 — Layout issue of a sharing page — lack of responsiveness](https://github.com/TriliumNext/Trilium/issues/8178) — Needs responsive CSS work on the share template.
|
||||
- [#8169 — noteId is not validated when forced, leading to broken note links](https://github.com/TriliumNext/Trilium/issues/8169) — `createNewNote` in `apps/server/src/services/notes.ts:214` accepts any `params.noteId` without validating against the `[_a-z0-9]{4,}` pattern required by `apps/client/src/services/link.ts:259`. Fix is conceptually simple (add server-side validation against the same regex) but risks breaking existing sync clusters with already-imported dashed IDs; needs careful handling.
|
||||
- [#8097 — Print to PDF not using printCss correctly](https://github.com/TriliumNext/Trilium/issues/8097) — Electron PDF export doesn't load #printCss fonts; needs investigation of the print pipeline.
|
||||
- [#8094 — automatic -- to – conversion happens inside inline code blocks](https://github.com/TriliumNext/Trilium/issues/8094) — CKEditor TextTransformation plugin should be scoped to exclude `$text` inside code spans; non-trivial CKEditor config.
|
||||
- [#8092 — WebView notes have very limited Iframe options](https://github.com/TriliumNext/Trilium/issues/8092) — Requires rearchitecting the WebView widget to use Electron `<webview>` / proper sandbox flags depending on platform.
|
||||
- [#8089 — JS Error: Uncaught error — `(new Set()).intersection is not a function`](https://github.com/TriliumNext/Trilium/issues/8089) — Polyfill/browser-compat issue (Set.prototype.intersection is newer); needs a polyfill or refactor.
|
||||
- [#8079 — Pasting a reply from Gemini loses code-box content](https://github.com/TriliumNext/Trilium/issues/8079) — Upstream CKEditor clipboard-handling bug with Gemini's copied HTML; needs reproducer.
|
||||
- [#8013 — Frontend & Backend Intellisense](https://github.com/TriliumNext/Trilium/issues/8013) — Large feature: generate TypeScript `.d.ts` for the scripting APIs and feed CodeMirror.
|
||||
- [#8008 — [Linux] Cannot install Unity Engine after installing Trilium (build-id conflict)](https://github.com/TriliumNext/Trilium/issues/8008) — Fix requires `%define _build_id_links none` in the RPM spec (package-build level change).
|
||||
- [#8001 — Colors using hex codes](https://github.com/TriliumNext/Trilium/issues/8001) — Color attribute is now stored as hex, breaking searches against old named colors; needs a migration or compatibility layer.
|
||||
- [#7999 — Confirm button in LaTeX formula editor doesn't work](https://github.com/TriliumNext/Trilium/issues/7999) — Dialog "OK" click is not firing; needs reproducer inside `packages/ckeditor5-math/src/ui/mathinputview.ts`.
|
||||
- [#7996 — Typing quickly after Ctrl+L causes search text to be added to note](https://github.com/TriliumNext/Trilium/issues/7996) — Input race during dialog animation; needs either input suppression during transition or eager focus handoff in the add-link dialog.
|
||||
- [#7964 — Collections Table View: multi-value labels don't display as columns](https://github.com/TriliumNext/Trilium/issues/7964) — Table view column generator excludes multi-value labels; requires rework of the column builder.
|
||||
- [#7944 — Calendar displaying deep child notes](https://github.com/TriliumNext/Trilium/issues/7944) — Either documentation is wrong or the calendar collector is recursing further than intended; needs investigation.
|
||||
- [#7901 — Nov 30 nightly: Sub pages are not displayed anymore](https://github.com/TriliumNext/Trilium/issues/7901) — Regression in the "children overview" cards on Doc/Book notes, introduced around the new layout; needs bisection.
|
||||
- [#7892 — CKEditor enforces non-breaking space after footnotes](https://github.com/TriliumNext/Trilium/issues/7892) — ` ` insertion isn't coming from the Trilium footnotes package (no `nbsp` occurrences in `packages/ckeditor5-footnotes/src`); requires tracing through CKEditor's GHS/schema handling.
|
||||
- [#7869 — Docker deployment "Share root not found" prompt](https://github.com/TriliumNext/Trilium/issues/7869) — UX improvement for share-root unreachable state; requires changes to the share middleware error page, not just a string tweak.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#8281 — Search history](https://github.com/TriliumNext/Trilium/issues/8281)
|
||||
- [#8260 — Improve Note Drag & Drop Functionality](https://github.com/TriliumNext/Trilium/issues/8260)
|
||||
- [#8228 — Make Github releases immutable](https://github.com/TriliumNext/Trilium/issues/8228)
|
||||
- [#8225 — Offline mode for the PWA](https://github.com/TriliumNext/Trilium/issues/8225)
|
||||
- [#8219 — [Feature Request] Custom Icon Support (Upload/Delete Beyond Default Icons)](https://github.com/TriliumNext/Trilium/issues/8219)
|
||||
- [#8187 — Search for new relation in promoted attributes does not suggest to create it](https://github.com/TriliumNext/Trilium/issues/8187)
|
||||
- [#8174 — Add the "Distribute Columns" feature to the table](https://github.com/TriliumNext/Trilium/issues/8174)
|
||||
- [#8158 — Split lines into paragraphs](https://github.com/TriliumNext/Trilium/issues/8158)
|
||||
- [#8150 — Note header image](https://github.com/TriliumNext/Trilium/issues/8150)
|
||||
- [#8140 — "shareExternalLink"-type label for PDF generation](https://github.com/TriliumNext/Trilium/issues/8140)
|
||||
- [#8122 — [REQUEST] continue updating on chocolatey repository](https://github.com/TriliumNext/Trilium/issues/8122)
|
||||
- [#8121 — Checking for dead links](https://github.com/TriliumNext/Trilium/issues/8121)
|
||||
- [#8107 — Can I support Markdown syntax (mindmap extension syntax)](https://github.com/TriliumNext/Trilium/issues/8107)
|
||||
- [#8098 — Make clicking a month name in Year view open that month's view](https://github.com/TriliumNext/Trilium/issues/8098)
|
||||
- [#7940 — Input Box Optimization: Add a Clear Button](https://github.com/TriliumNext/Trilium/issues/7940)
|
||||
- [#7931 — Inline Mermaid Diagram Display](https://github.com/TriliumNext/Trilium/issues/7931)
|
||||
- [#7927 — Kanban: (Option to) Display the first ~line of note content for each item](https://github.com/TriliumNext/Trilium/issues/7927)
|
||||
- [#7923 — Auto Import Folder Contents To Trilium](https://github.com/TriliumNext/Trilium/issues/7923)
|
||||
- [#7895 — (feat) Image Gallery/Collection](https://github.com/TriliumNext/Trilium/issues/7895)
|
||||
- [#7893 — Add Podman installation to documentation](https://github.com/TriliumNext/Trilium/issues/7893)
|
||||
- [#7886 — [Feature] Allow inserting video previews in notes](https://github.com/TriliumNext/Trilium/issues/7886)
|
||||
- [#7885 — [quick-edit] new controls for quick-edit window management](https://github.com/TriliumNext/Trilium/issues/7885)
|
||||
- [#7876 — Implement site search with type ahead (OpenSearch)](https://github.com/TriliumNext/Trilium/issues/7876)
|
||||
- [#7827 — Increase donation visibility by adding a "Donate" entry in the Options page](https://github.com/TriliumNext/Trilium/issues/7827)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- [#8282 — text editor crashed](https://github.com/TriliumNext/Trilium/issues/8282) — (also listed in Notable) only a stack trace, no reliable repro steps.
|
||||
- [#8216 — Docker IPv6 vs IPv4 accessibility](https://github.com/TriliumNext/Trilium/issues/8216) — (also listed in Notable) reporter hasn't attached their compose/network config, so it's unclear whether it's a Trilium or Docker setup issue.
|
||||
@@ -1,109 +0,0 @@
|
||||
# Batch 04 — Issues #6929–#7794
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#7085 — [regression] Archived notes are listed in note search/quick search](https://github.com/TriliumNext/Trilium/issues/7085)
|
||||
- **Problem**: Autocomplete/quick-search returns `#archived` notes after the fuzzy-search rewrite, breaking the previous behaviour.
|
||||
- **Proposed solution**: `searchNotesForAutocomplete` in `apps/server/src/services/search/services/search.ts:671` already passes `includeArchivedNotes: false`, and `parse.ts:472` wraps the expression with `PropertyComparisonExp("isarchived", "=", "false")`. However, `NoteFlatTextExp` in `apps/server/src/services/search/expressions/note_flat_text.ts` is invoked via `getFulltext` and walks `candidateNotes` without consulting `searchContext.includeArchivedNotes`; an archived candidate still produces hits because the `AndExp` short-circuit only filters *final* results through the comparison exp after paths are collected. Add an early `note.hasInheritedLabel('archived')` short-circuit at the top of the `for (const note of candidateNotes)` loop (line 102) gated on `!searchContext.includeArchivedNotes`. A matching test already exists at `search.spec.ts:696` — extend it to cover the autocomplete (flat-text) path.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#7396 — Duplicate a note without cloning it](https://github.com/TriliumNext/Trilium/issues/7396)
|
||||
- **Problem**: User cannot find the already-existing "Duplicate subtree" action and assumes cut/paste is the only way (which clones).
|
||||
- **Proposed solution**: This is a discoverability issue only — `duplicateSubtree` is already wired in `apps/client/src/menus/tree_context_menu.ts`, `apps/client/src/services/note_create.ts`, and has a keyboard shortcut. Close with a comment pointing at the existing context menu item, or (tiny improvement) ensure the label `Duplicate subtree` is in `apps/client/src/translations/en/translation.json` so it's discoverable. No code change needed.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7564 — Change the default sorting of grades to alphabetical order in Trilium](https://github.com/TriliumNext/Trilium/issues/7564)
|
||||
- **Problem**: User question about how to configure multi-key sort (`#sorted=color` plus creation date), not a bug.
|
||||
- **Proposed solution**: No code change — the user describes how to use existing `#sorted` attribute. Close with a pointer to `apps/server/src/assets/doc_notes/en/User Guide/.../Sorting.html`. This belongs in Discussions.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7606 — Preview of markdown](https://github.com/TriliumNext/Trilium/issues/7606)
|
||||
- **Problem**: User asks where the side-by-side markdown preview is.
|
||||
- **Proposed solution**: Trilium is a WYSIWYG editor — "Text" notes render rich text directly, not markdown, so there is no preview pane by design. Close with explanation or redirect to the Markdown import/export docs. No code change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7274 — Insert internal links to notes in the canvas and mind map](https://github.com/TriliumNext/Trilium/issues/7274)
|
||||
- **Problem**: User question about whether internal links can be inserted inside canvas/mind-map objects.
|
||||
- **Proposed solution**: This overlaps with the long-standing limitation of Excalidraw/mind-map link handling. Likely duplicate of a canvas-link feature request. Close as duplicate / redirect to Discussions. No code change here (real implementation work lives under #7182 and related).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7072 — How to obtain recent_notes to achieve the system menu bar effect](https://github.com/TriliumNext/Trilium/issues/7072)
|
||||
- **Problem**: User asks how to build a custom widget reading from `recent_notes`.
|
||||
- **Proposed solution**: Support question. The `recent_notes` table is exposed via the autocomplete endpoint in `apps/server/src/routes/api/autocomplete.ts:40` and via `api.runOnBackend` scripting. Redirect to Discussions / scripting docs. No code change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#6989 — New client sync issues](https://github.com/TriliumNext/Trilium/issues/6989)
|
||||
- **Evidence**: Reporter is on **0.95.0** (released mid-2025) and describes websocket connection drops against a reverse proxy. The codebase has had several sync/websocket robustness fixes since 0.98. Current version is ~0.99.4.
|
||||
- **Verification needed**: Ask reporter to retry on the latest version. If still reproducing, collect a fresh sync/WS log.
|
||||
|
||||
### [#6999 — Editing a Relation (from template) in mobile view, don't work](https://github.com/TriliumNext/Trilium/issues/6999)
|
||||
- **Evidence**: Reporter is on **0.91.1**, which is extremely old relative to current mobile rework. The mobile attribute editor has been largely rewritten (`apps/client/src/widgets/attribute_widgets/*.tsx` is now React/TSX).
|
||||
- **Verification needed**: Ask reporter to retry on 0.99.x; close if no repro.
|
||||
|
||||
### [#7393 — Note content overwritten when changing title of snippets](https://github.com/TriliumNext/Trilium/issues/7393)
|
||||
- **Evidence**: Reporter is on **0.97.1**. Text snippet handling (`#textSnippet`) has been refactored since — see `apps/client/src/widgets/type_widgets/text/EditableText.tsx` and related CKEditor 5 integration. The described "flashing + content swap" while editing title suggests the old debounced save path that was rewritten around 0.99.
|
||||
- **Verification needed**: Ask reporter to retry on 0.99.4 with the specific snippet-switching STR.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#7794 — OIDC Login requires multiple logins](https://github.com/TriliumNext/Trilium/issues/7794) — Likely a session-cookie race in the OIDC `afterCallback`/redirect flow in `apps/server/src/services/open_id.ts`; needs careful investigation.
|
||||
- [#7692 — Windows shortcut arguments are removed](https://github.com/TriliumNext/Trilium/issues/7692) — electron-builder NSIS installer rewrites the Start Menu shortcut on update, dropping user-added CLI args (e.g. `--ignore-certificate-errors`); requires installer config or post-install preservation logic.
|
||||
- [#7690 — 2nd desktop client install fails](https://github.com/TriliumNext/Trilium/issues/7690) — Second Trilium desktop install can push but not receive sync; needs reproduction with sync-server logs.
|
||||
- [#7683 — Calendar Note Doesn't Respect #titleTemplate](https://github.com/TriliumNext/Trilium/issues/7683) — Calendar-view "add note on day click" creates the note via a code path that bypasses the `#titleTemplate` resolution in `notes.ts`; fixable but needs route tracing.
|
||||
- [#7662 — Full search only showing promoted attributes and missing highlighting](https://github.com/TriliumNext/Trilium/issues/7662) — Search-result renderer in `apps/server/src/services/search/services/search.ts` (`extractAttributeSnippet`) has different behaviour from quick-search; needs a pass to unify.
|
||||
- [#7641 — Cloned collection generates wrong links for left menu when >2 clones](https://github.com/TriliumNext/Trilium/issues/7641) — Share view picks wrong `notePath` when a branch is cloned 3+ times; lives in `apps/server/src/share/` path resolution.
|
||||
- [#7405 — Clicking on code box blanks the document](https://github.com/TriliumNext/Trilium/issues/7405) — CKEditor 5 code-block interaction bug with data loss; needs upstream/plugin debugging.
|
||||
- [#7389 — Child Note Node not placeable on Relation Note](https://github.com/TriliumNext/Trilium/issues/7389) — Hardware-acceleration/Electron hit-testing bug on relation map; reporter worked around with SW rendering.
|
||||
- [#7373 — Typing slows down to unusable](https://github.com/TriliumNext/Trilium/issues/7373) — CKEditor/Electron performance regression; user has already moved on, hard to repro without data.
|
||||
- [#7293 — Failed to delete notes when permanently deleting multi notes with children](https://github.com/TriliumNext/Trilium/issues/7293) — Race condition in bulk permanent-delete; related to #7288.
|
||||
- [#7288 — Ghost note remains when moving multiple notes into a newly created note](https://github.com/TriliumNext/Trilium/issues/7288) — Tree view doesn't refresh "isFolder" when target transitions from leaf to folder mid-move.
|
||||
- [#7266 — Mind-map sub-node background cannot be reset to transparent](https://github.com/TriliumNext/Trilium/issues/7266) — Upstream mind-map component limitation; needs fork or PR to `@mind-elixir/...`.
|
||||
- [#7263 — Trilium randomly jumps to Today Date](https://github.com/TriliumNext/Trilium/issues/7263) — Some scheduler/calendar widget refresh navigates to day note unexpectedly.
|
||||
- [#7258 — Open Note Custom fails on Linux due to mimeopen race](https://github.com/TriliumNext/Trilium/issues/7258) — `openCustom` implementation in client needs to wait for terminal-launched mimeopen; Linux-specific.
|
||||
- [#7250 — OIDC credentials are not checked for identity match](https://github.com/TriliumNext/Trilium/issues/7250) — Real security bug: `afterCallback` at `apps/server/src/services/open_id.ts:125` doesn't compare `req.oidc.user.sub` against the stored user before granting access. Fix requires adding a compare + error path.
|
||||
- [#7225 — Sync blocks UI during content hashing for large knowledge graphs](https://github.com/TriliumNext/Trilium/issues/7225) — Needs worker threads / parallelization, as the reporter researched.
|
||||
- [#7211 — Note content deleted after altering math equation size](https://github.com/TriliumNext/Trilium/issues/7211) — CKEditor math plugin bug with data loss; needs plugin-level fix in `packages/ckeditor5-math`.
|
||||
- [#7182 — Drag notes from tree to Canvas](https://github.com/TriliumNext/Trilium/issues/7182) — Canvas drop handler doesn't accept tree drags; needs Excalidraw drop integration.
|
||||
- [#7148 — CTRL Z with two Canvas notes will delete previous drawing](https://github.com/TriliumNext/Trilium/issues/7148) — Canvas undo history is global instead of per-note, causing cross-contamination between canvas notes.
|
||||
- [#7116 — Mobile Webapp: Text Notes Bullet List Issue](https://github.com/TriliumNext/Trilium/issues/7116) — CKEditor mobile touch-selection bug; reporter on iOS.
|
||||
- [#7466 — Text editing bar appears blank after returning from attachment](https://github.com/TriliumNext/Trilium/issues/7466) — Editor toolbar not re-initialised on return navigation from attachment view.
|
||||
- [#7517 — Wrong notification bar color in PWA](https://github.com/TriliumNext/Trilium/issues/7517) — `#initPWATopbarColor` in `apps/client/src/widgets/containers/root_container.ts:148` reads `#background-color-tracker` color, but `.css("color")` runs before theme variables apply on first load; needs ordering/observer fix.
|
||||
- [#7468 — Display issue with app folders on macOS Launchpad](https://github.com/TriliumNext/Trilium/issues/7468) — macOS Launchpad icon caching; probably requires an `.icns` with additional sizes.
|
||||
- [#6993 — Protected notes can be read back from the database file](https://github.com/TriliumNext/Trilium/issues/6993) — Security-sensitive; SQLite WAL and old revisions may retain plaintext after protecting a note.
|
||||
- [#6929 — Partially typed name being used as relation](https://github.com/TriliumNext/Trilium/issues/6929) — Autocomplete in relation-map doesn't commit the highlighted suggestion before enter; needs a fix in relation name input handling.
|
||||
|
||||
## Feature Requests
|
||||
- [#7670 — Attachment link customization](https://github.com/TriliumNext/Trilium/issues/7670)
|
||||
- [#7666 — Allow adjustable widths for Content and TOC panes in Share view](https://github.com/TriliumNext/Trilium/issues/7666)
|
||||
- [#7646 — Add a setting to switch to 24-hours clock](https://github.com/TriliumNext/Trilium/issues/7646)
|
||||
- [#7636 — Documents about scripting may need an update](https://github.com/TriliumNext/Trilium/issues/7636)
|
||||
- [#7635 — Option to use background images in presentations](https://github.com/TriliumNext/Trilium/issues/7635)
|
||||
- [#7607 — Add API support to check and switch to an already opened note tab](https://github.com/TriliumNext/Trilium/issues/7607)
|
||||
- [#7541 — Merging TOC and Highlights List](https://github.com/TriliumNext/Trilium/issues/7541)
|
||||
- [#7447 — Milestone: Official mobile application](https://github.com/TriliumNext/Trilium/issues/7447)
|
||||
- [#7411 — Better encryption algorithms](https://github.com/TriliumNext/Trilium/issues/7411)
|
||||
- [#7410 — Feature request: ability to reorder sections in the Table of Contents](https://github.com/TriliumNext/Trilium/issues/7410)
|
||||
- [#7403 — Option to disable fancy font ligatures](https://github.com/TriliumNext/Trilium/issues/7403)
|
||||
- [#7313 — Option to remove demo data when creating new instance](https://github.com/TriliumNext/Trilium/issues/7313)
|
||||
- [#7291 — Calendar view adds support for Resource Timeline](https://github.com/TriliumNext/Trilium/issues/7291)
|
||||
- [#7279 — Implement Sticky tree view headers as a native feature](https://github.com/TriliumNext/Trilium/issues/7279)
|
||||
- [#7224 — Quick Notes from Everywhere using a Creation Window](https://github.com/TriliumNext/Trilium/issues/7224)
|
||||
- [#7217 — Allow opening note directly instead of quick edit in collections](https://github.com/TriliumNext/Trilium/issues/7217)
|
||||
- [#7198 — Code Editor Indent wrapping](https://github.com/TriliumNext/Trilium/issues/7198)
|
||||
- [#7127 — OpenID auto redirect](https://github.com/TriliumNext/Trilium/issues/7127)
|
||||
- [#7113 — Use dateTime attribute for calendar child notes](https://github.com/TriliumNext/Trilium/issues/7113)
|
||||
- [#7024 — Where is my clone note?: An easy way to find clone note](https://github.com/TriliumNext/Trilium/issues/7024)
|
||||
- [#7006 — Hope to add protect single note frontApi](https://github.com/TriliumNext/Trilium/issues/7006)
|
||||
- [#7001 — Logout Feature in the Desktop Version of Trilium Next](https://github.com/TriliumNext/Trilium/issues/7001)
|
||||
- [#6991 — Search: Add Search Ranking Customizability](https://github.com/TriliumNext/Trilium/issues/6991)
|
||||
- [#6962 — Prioritize Running Sync When Coming Back Online](https://github.com/TriliumNext/Trilium/issues/6962)
|
||||
|
||||
## Skipped / Unclear
|
||||
_(none — all issues in the batch are categorised above)_
|
||||
@@ -1,129 +0,0 @@
|
||||
# Batch 05 — Issues #5790–#6928
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#6387 — Current OpenID Connect Implementation is not compatible with Authelia](https://github.com/TriliumNext/Trilium/issues/6387)
|
||||
- **Problem**: `afterCallback` in `open_id.ts` blindly calls `req.oidc.user.name.toString()` / `.email.toString()`, crashing with `Cannot read properties of undefined (reading 'toString')` when the IdP (Authelia) does not return `name`/`email` in `req.oidc.user`.
|
||||
- **Proposed solution**: In `apps/server/src/services/open_id.ts` lines 125–137, guard the `.toString()` calls (e.g. `req.oidc.user.name?.toString() ?? ""`) and/or call `await req.oidc.fetchUserInfo()` to populate user claims before saving. `sub` is the only reliably-present field; `name`/`email` should fall back gracefully.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high — verified source still matches the line referenced in the issue and the null-deref still exists.
|
||||
|
||||
### [#6390 — `arm64` docker image does not include `wget`](https://github.com/TriliumNext/Trilium/issues/6390)
|
||||
- **Problem**: Third-party tooling (Coolify) depends on `wget` being present in the docker image for healthchecks.
|
||||
- **Proposed solution**: Either (a) document that Trilium healthchecks now use the bundled `docker_healthcheck.cjs` (no `wget` required at all — both `apps/server/Dockerfile` and `Dockerfile.alpine` only install `gosu`/`su-exec`), or (b) add `wget` to the apt/apk install line in `apps/server/Dockerfile` and `Dockerfile.alpine` for backwards-compat with external tooling. Option (a) is the right call; Coolify should be updated. Either way this is a 1–2 line change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — the fix itself is trivial but whether to actually add wget is a policy call for maintainers.
|
||||
|
||||
### [#5790 — Can't pull `rootless` docker tag](https://github.com/TriliumNext/Trilium/issues/5790)
|
||||
- **Problem**: `docker pull triliumnext/notes:rootless` returns "manifest unknown"; the docs reference a tag that does not exist on Docker Hub (the image is now published as `triliumnext/trilium`, not `triliumnext/notes`).
|
||||
- **Proposed solution**: Update the docs at `apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html` (and the `Using Docker.md` referenced in the issue) to use `triliumnext/trilium:rootless` (the repo was renamed from `Notes` to `Trilium` and there are now `Dockerfile.rootless` / `Dockerfile.alpine.rootless` files in `apps/server/`). Also confirm the rootless tag is actually published in the CI workflow under `.github/workflows/`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — docs fix is trivial but it may also require fixing the publish workflow if the tag is not pushed.
|
||||
|
||||
### [#6730 — Clear or disable search history](https://github.com/TriliumNext/Trilium/issues/6730)
|
||||
- **Problem**: Jump-to-note results are cluttered with Search History entries; no way to hide/clear them.
|
||||
- **Proposed solution**: The command-palette already has a "show-search-history" entry (`apps/client/src/services/command_registry.ts` line 83). The jump-to dialog at `apps/client/src/widgets/dialogs/jump_to_note.tsx` likely surfaces history as part of its result list — either add an option to filter them out or add a "Clear history" action. A quick win: add a user-option-backed toggle (e.g. `jumpToShowSearchHistory` default true) and skip search-history notes when false. New key under `apps/client/src/translations/en/translation.json`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — depends on whether jump-to currently blends history entries via a single query; needs a quick read of `jump_to_note.tsx` to confirm.
|
||||
|
||||
### [#6134 — The checkbox and cursor in the to-do list are too close](https://github.com/TriliumNext/Trilium/issues/6134)
|
||||
- **Problem**: In todo lists, the checkbox and the caret/text sit with no visual spacing.
|
||||
- **Proposed solution**: Adjust the padding/margin of `.ck-content .todo-list .todo-list__label > input` (or `.todo-list__label__description`) in `apps/client/src/stylesheets/style.css` around line 1184 — add a small `margin-inline-end` / `gap` on the label. One-line CSS tweak.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — CSS adjust is trivial but exact value needs design call.
|
||||
|
||||
### [#6468 — Table function area blocks the text function area](https://github.com/TriliumNext/Trilium/issues/6468)
|
||||
- **Problem**: When a CKEditor table is tall, the sticky table toolbar floats over the main text toolbar.
|
||||
- **Proposed solution**: CSS tweak to give the main CKEditor toolbar a higher `z-index` than the inline table toolbar, or add a top-offset on the table toolbar so it doesn't overlap. Candidate file `apps/client/src/stylesheets/ckeditor-theme.css` (or `style.css`). Target `.ck-toolbar_floating` / `.ck.ck-balloon-panel`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — CSS z-index/offset fix is cheap but the root cause may involve CKEditor's own balloon/toolbar stacking context.
|
||||
|
||||
### [#6555 — Unable to set column value to zero in table view](https://github.com/TriliumNext/Trilium/issues/6555)
|
||||
- **Problem**: Entering `0` in a Number column in Table view clears the label instead of saving "0".
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/table/row_editing.ts` around line 42, `newValue = cell.getValue()` returns a number. The boolean branch already stringifies, but the plain-label branch passes a number through to `setLabel`. Add `if (typeof newValue === "number") newValue = String(newValue);` before the `setLabel` call. Also verify the server-side `set-attribute` endpoint doesn't coerce `0` to empty (`apps/server/src/routes/routes.ts` handler).
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — client fix is 1 line, server may also need a touch.
|
||||
|
||||
### [#6204 — Presence of #workspaceCalendarRoot affects how notes are displayed](https://github.com/TriliumNext/Trilium/issues/6204)
|
||||
- **Problem**: When a note has both `#viewType=calendar` and `#workspaceCalendarRoot`, events are forced to all-day (only `#dateNote` notes shown) and `#startTime`/`#endTime` are ignored.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/calendar/index.tsx` (verified existing file), `isCalendarRoot = (calendarRoot || workspaceCalendarRoot)` collapses both flags into a single "date-note only" mode. The bug is the OR — workspaceCalendarRoot should NOT enable the date-note-only event builder unless the user also set `calendarRoot`. Suggest decoupling: only force date-note mode when `calendarRoot` is set, and let `workspaceCalendarRoot` simply mark the note as a workspace root without changing the event source. Single-file change.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — behavioral fix clearly localized, but intent of `workspaceCalendarRoot` needs maintainer confirmation.
|
||||
|
||||
### [#6518 — Open child note from table view by clicking note name](https://github.com/TriliumNext/Trilium/issues/6518)
|
||||
- **Problem**: Clicking a note title in the Table view starts renaming instead of opening the note.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/table/columns.tsx` / `row_editing.ts`, change the title column so that a single click opens the note (via `appContext.tabManager.getActiveContext()?.setNote()`) and double-click (or a dedicated pencil area) starts editing. Tabulator supports this through `cellClick` + `editable` on double-click.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — clearly confined to the table view module.
|
||||
|
||||
### [#6817 — Jump To…: Create new notes in Inbox (not as child notes)](https://github.com/TriliumNext/Trilium/issues/6817)
|
||||
- **Problem**: When the Jump-to dialog creates a new note, it uses the current parent, but users expect it to land in the Inbox.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/jump_to_note.tsx`, when creating a new note, resolve the inbox note (`dateNotesService.getInboxNote()` equivalent in the client — there's already an `inboxNote` helper via `#inbox` attribute lookup). Simple target-parent swap. Optionally add a setting toggle.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — small code change; might want a user-setting to keep it opt-in.
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#6390 — `arm64` docker image does not include `wget`](https://github.com/TriliumNext/Trilium/issues/6390)
|
||||
- **Evidence**: I read `apps/server/Dockerfile` and `Dockerfile.alpine`. Both use `HEALTHCHECK ... node /usr/src/app/docker_healthcheck.cjs` (line 28 / 26) — there is no longer any `wget`-based healthcheck. The runtime stage installs only `gosu` (Debian) or `su-exec` (Alpine). Commit `614958f16c chore(docker): reintroduce healthchecks` (Apr 2025) switched healthchecks from `wget` to a node script before this issue was filed (Jul 2025), so there is no dependency on `wget` in the current image — the issue may actually be about Coolify's external healthcheck expectations, not Trilium's image.
|
||||
- **Verification needed**: Maintainer should confirm that Trilium's own image indeed no longer requires wget for healthchecks and respond to the Coolify maintainer on the upstream template; close as "not a Trilium bug" or as a docs-only fix.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#6928 — excalidraw element link can not jump to the right file](https://github.com/TriliumNext/Trilium/issues/6928) — Excalidraw element-link navigation regression; needs Excalidraw integration debugging.
|
||||
- [#6927 — Multiple linked notes in table view relation column](https://github.com/TriliumNext/Trilium/issues/6927) — Table view only stores/renders the first relation; needs rethinking the relation cell editor for multi-value support.
|
||||
- [#6926 — Relation map nodes/edges in random positions after reload](https://github.com/TriliumNext/Trilium/issues/6926) — Position persistence bug in relation map loader.
|
||||
- [#6919 — 0.98.1 Windows OOM crash on startup](https://github.com/TriliumNext/Trilium/issues/6919) — 20 GB database triggers heap OOM; needs becca loading optimization.
|
||||
- [#6853 — Aliases with `,` break label/relation definitions](https://github.com/TriliumNext/Trilium/issues/6853) — Parser/validation work in attribute-definition code; interacts with #6421.
|
||||
- [#6845 — Create parent note in-place using script](https://github.com/TriliumNext/Trilium/issues/6845) — Script API / tree refresh race; needs investigation of `ensureNoteIsPresent/Absent` batching.
|
||||
- [#6825 — NixOS server: port can't be configured](https://github.com/TriliumNext/Trilium/issues/6825) — Actually an upstream nixpkgs module bug (not setting `TRILIUM_PORT`); port.ts reads it correctly.
|
||||
- [#6808 — Search function slow since 0.98.0](https://github.com/TriliumNext/Trilium/issues/6808) — Search perf regression on very large notes; needs profiling of `apps/server/src/services/search/`.
|
||||
- [#6781 — Windows setup dialog not scrollable on error](https://github.com/TriliumNext/Trilium/issues/6781) — Setup dialog layout needs overflow handling in error state; looks small but needs to be tested against the sync-setup flow.
|
||||
- [#6708 — Packaging RPMs fails with RPM 4.20+](https://github.com/TriliumNext/Trilium/issues/6708) — Upstream `electron-installer-redhat` bug; needs pnpm patch or waiting for fix.
|
||||
- [#6643 — Some shortcuts not working anymore (ctrl+alt+digit)](https://github.com/TriliumNext/Trilium/issues/6643) — Global shortcut handler swallows modifier+digit combos; needs shortcut service audit.
|
||||
- [#6641 — Creating a new note reopens closed tree](https://github.com/TriliumNext/Trilium/issues/6641) — Tree auto-expand on note creation; long-standing UX issue.
|
||||
- [#6570 — Win client crashed with >300MB files](https://github.com/TriliumNext/Trilium/issues/6570) — Memory/file-size limit crash; needs repro + fix.
|
||||
- [#6548 — Highlight list adds resident custom color](https://github.com/TriliumNext/Trilium/issues/6548) — CKEditor highlight palette state persistence bug.
|
||||
- [#6474 — Tab in table view refocuses original field](https://github.com/TriliumNext/Trilium/issues/6474) — Tabulator tab-focus regression; table view.
|
||||
- [#6447 — Canvas notes sometimes fail to render](https://github.com/TriliumNext/Trilium/issues/6447) — Excalidraw first-render race condition on cache miss.
|
||||
- [#6413 — Checkbox Item Alignment (Div vs Span)](https://github.com/TriliumNext/Trilium/issues/6413) — CKEditor list+link html structure inconsistency; downstream CKEditor todo-list plugin.
|
||||
- [#6387 → already listed above]
|
||||
- [#6349 — Promoted, single date label produces multiple entries](https://github.com/TriliumNext/Trilium/issues/6349) — Fast-typing race in date input change handler (Chrome-only).
|
||||
- [#6257 — "Erase notes permanently" still leaves notes in tree](https://github.com/TriliumNext/Trilium/issues/6257) — Erase/delete sync bug; needs becca/entity-change investigation.
|
||||
- [#6204 → already listed above as candidate]
|
||||
- [#6177 — Protected note can be moved/deleted in unprotected mode](https://github.com/TriliumNext/Trilium/issues/6177) — Security/permissions semantics; needs discussion of expected behavior and server-side checks.
|
||||
- [#6153 — CKEditorError: marker-destroyed when editing with search](https://github.com/TriliumNext/Trilium/issues/6153) — CKEditor marker lifecycle bug in highlighting; upstream interaction.
|
||||
- [#6129 — JavaScript heap OOM on initial sync](https://github.com/TriliumNext/Trilium/issues/6129) — Sync batching memory pressure; needs sync service work.
|
||||
- [#5857 — "invalid user" on OIDC auth](https://github.com/TriliumNext/Trilium/issues/5857) — Related to #6387 family; needs better OIDC error logging and likely the same `req.oidc.user` claim fallback work.
|
||||
- [#5818 — Converting attachment to note breaks links](https://github.com/TriliumNext/Trilium/issues/5818) — Link-rewrite logic missing in attachment→note conversion service.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#6841 — Drag note into split view](https://github.com/TriliumNext/Trilium/issues/6841)
|
||||
- [#6836 — Sync: handle HTTP redirects for server instance address](https://github.com/TriliumNext/Trilium/issues/6836)
|
||||
- [#6829 — Allow sorting notes by multiple attributes](https://github.com/TriliumNext/Trilium/issues/6829)
|
||||
- [#6805 — Adaptive tray icon](https://github.com/TriliumNext/Trilium/issues/6805)
|
||||
- [#6779 — Embedded Playbook (runnable script steps in notes)](https://github.com/TriliumNext/Trilium/issues/6779)
|
||||
- [#6546 — Store file notes in the filesystem rather than the database](https://github.com/TriliumNext/Trilium/issues/6546)
|
||||
- [#6421 — [wip] Attributes V2](https://github.com/TriliumNext/Trilium/issues/6421)
|
||||
- [#6410 — Display the notes number in folders](https://github.com/TriliumNext/Trilium/issues/6410)
|
||||
- [#6409 — Checklist progress](https://github.com/TriliumNext/Trilium/issues/6409)
|
||||
- [#6407 — Kanban Board enhancements](https://github.com/TriliumNext/Trilium/issues/6407)
|
||||
- [#6406 — Packaging for Chocolatey](https://github.com/TriliumNext/Trilium/issues/6406)
|
||||
- [#6351 — Mount part of note tree as writable folder](https://github.com/TriliumNext/Trilium/issues/6351)
|
||||
- [#6350 — Repeat-last-action shortcut (like Word F4)](https://github.com/TriliumNext/Trilium/issues/6350)
|
||||
- [#6296 — Auto hide sidebar](https://github.com/TriliumNext/Trilium/issues/6296)
|
||||
- [#6259 — geo-map: support ctrl+z/undo when moving a pin](https://github.com/TriliumNext/Trilium/issues/6259)
|
||||
- [#6226 — Add "Clone to" to search bulk actions](https://github.com/TriliumNext/Trilium/issues/6226)
|
||||
- [#6225 — Settings for displaying search results](https://github.com/TriliumNext/Trilium/issues/6225)
|
||||
- [#6203 — Suppress messages on Frontend API scripts](https://github.com/TriliumNext/Trilium/issues/6203)
|
||||
- [#6162 — Global Tag View](https://github.com/TriliumNext/Trilium/issues/6162)
|
||||
- [#6144 — Ability to define custom styles for CKEditor](https://github.com/TriliumNext/Trilium/issues/6144)
|
||||
- [#5849 — Label/tag system (macOS-style)](https://github.com/TriliumNext/Trilium/issues/5849)
|
||||
- [#5827 — Replace a word/symbol with a user-defined term](https://github.com/TriliumNext/Trilium/issues/5827)
|
||||
- [#5825 — Annotate image](https://github.com/TriliumNext/Trilium/issues/5825)
|
||||
- [#5795 — Drop image attachments without shrinking (separate from setting)](https://github.com/TriliumNext/Trilium/issues/5795)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- [#6570 — The Win client crashed.](https://github.com/TriliumNext/Trilium/issues/6570) — Reporter gave no logs, only "crashes with >300MB files"; not reproducible without more info. (Listed in Notable as well, but needs clarification before action.)
|
||||
@@ -1,89 +0,0 @@
|
||||
# Batch 06 — Issues #5528–#5783
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#5712 — Tooltip z-index is too low?](https://github.com/TriliumNext/Trilium/issues/5712)
|
||||
- **Problem**: Tooltips in context menus appear behind Bootstrap modals because tooltip z-index is `calc(var(--ck-z-panel) - 1)` (~998), while Bootstrap modal z-index is 1055.
|
||||
- **Proposed solution**: In `apps/client/src/stylesheets/style.css` around line 733, raise `.tooltip` z-index above modal (e.g. `z-index: 1060 !important;` to match the Bootstrap default of 1080, or set it with `calc(var(--bs-modal-zindex, 1055) + 5)`). Confirmed the file at `apps/client/src/stylesheets/style.css:731-734` still has the old value and `bootstrap.rtl.css:5454` sets `--bs-modal-zindex: 1055`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5617 — Clean up the code formatting](https://github.com/TriliumNext/Trilium/issues/5617)
|
||||
- **Problem**: Maintenance task — enable format-on-save, apply formatting to repo, enable import sort/unused-import cleanup.
|
||||
- **Proposed solution**: Flip `editor.formatOnSave` to `true` in `.vscode/settings.json` (currently line 2: `"editor.formatOnSave": false`), add import ordering ESLint rule, then run `pnpm prettier --write`/eslint autofix on the codebase. The repo already has `eslint-config-prettier` and `@stylistic` rules wired up.
|
||||
- **Effort**: small (mechanical, but touches many files)
|
||||
- **Confidence**: medium — task scope is clear but apply-all-fix is large enough to risk conflicts with open PRs (as the issue itself warns).
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#5669 — Add link dialog fails to link if you press enter twice too quickly](https://github.com/TriliumNext/Trilium/issues/5669)
|
||||
- **Evidence**: `git log --grep "enter twice\|link.*enter"` finds commit `f6201d8581` "fix: add link dialog enter act correctly" (Mar 2026) which touches `apps/client/src/widgets/dialogs/add_link.tsx` (+76 lines) and adds a 160-line spec file. Directly addresses this bug.
|
||||
- **Verification needed**: Run the reproduction steps from the issue in the latest main build and confirm it is no longer possible to trigger the "Choose note type" dialog by fast double-enter in the add-link flow.
|
||||
|
||||
### [#5606 — OpenID Connect support](https://github.com/TriliumNext/Trilium/issues/5606)
|
||||
- **Evidence**: `apps/server/src/services/open_id.ts` exists; `express-openid-connect` is a direct dependency and has been continuously updated (git log shows `2.20.1`, `2.20.0`, `2.19.4`, etc.); OIDC docs have been improved (commit `963f4586f3`). The feature has clearly shipped.
|
||||
- **Verification needed**: Confirm documentation covers configuration with Authelia/Keycloak/Authentik so the original reporter's use cases are answered, then close.
|
||||
|
||||
### [#5545 — Fancytree assertion failed: only init supported](https://github.com/TriliumNext/Trilium/issues/5545)
|
||||
- **Evidence**: fancytree has since been updated to v2.38.5 (`5db8b59b51`) plus a "partial integrate jquery.fancytree" refactor (`23db7fe602`) and a "missing fancytree dependencies" fix (`901ab54e64`). The assertion error from an older version may no longer reproduce.
|
||||
- **Verification needed**: Load the server build on a clean profile and check the browser console for the `only init supported` error on startup.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#5783 — Extend the `CodeMirror` class to preserve customizability with CodeMirror 6](https://github.com/TriliumNext/Trilium/issues/5783) — exposing CM6 internals (`@codemirror/view`, `@codemirror/state`) via the script API needs an API design decision.
|
||||
- [#5775 — Strict SQLite tables](https://github.com/TriliumNext/Trilium/issues/5775) — requires migration plan and careful type audit of every column; non-trivial.
|
||||
- [#5742 — External link balloon popup stays visible when switching tabs](https://github.com/TriliumNext/Trilium/issues/5742) — requires digging into CKEditor balloon lifecycle vs. Trilium tab switching.
|
||||
- [#5729 — Firewall warning on corporate network](https://github.com/TriliumNext/Trilium/issues/5729) — `apps/server/src/services/host.ts` defaults to `0.0.0.0`; Electron could bind `127.0.0.1` instead, but needs care to not break remote-access scenarios.
|
||||
- [#5713 — #launcher-container not scrollable on mobile with custom theme](https://github.com/TriliumNext/Trilium/issues/5713) — theme-next sets overflow, custom themes may not; needs base-style enforcement rather than theme-level CSS.
|
||||
- [#5706 — Modals/dialogues too high/low on iPad Safari/Edge](https://github.com/TriliumNext/Trilium/issues/5706) — iOS viewport/keyboard interactions; tricky cross-device CSS work.
|
||||
- [#5682 — Any markdown text containing `$` gets converted into math equations during import](https://github.com/TriliumNext/Trilium/issues/5682) — regex at `apps/server/src/services/import/markdown.ts:209` is greedy across `$`; needs smarter heuristics (digit/whitespace guards) and tests.
|
||||
- [#5673 — Editor extremely slow with large-ish checkbox trees](https://github.com/TriliumNext/Trilium/issues/5673) — CKEditor performance with nested todo lists; upstream-ish.
|
||||
- [#5670 — Default image alignment for pasted documents](https://github.com/TriliumNext/Trilium/issues/5670) — needs CKEditor paste pipeline work.
|
||||
- [#5665 — PDF Viewer obstruction on iOS mobile client](https://github.com/TriliumNext/Trilium/issues/5665) — mobile PDF note layout shows metadata panel covering content; needs a mobile-specific layout fix.
|
||||
- [#5659 — Playwright against Electron version](https://github.com/TriliumNext/Trilium/issues/5659) — CI/infra task, not trivial but scoped.
|
||||
- [#5630 — Get rid of deprecated methods](https://github.com/TriliumNext/Trilium/issues/5630) — still six `@deprecated` markers in `bnote.ts`/`backend_script_api.ts`; removing them requires auditing every caller and also the script API surface.
|
||||
- [#5611 — Mermaid bugs can crash the frontend](https://github.com/TriliumNext/Trilium/issues/5611) — needs a throttled sandbox/worker for live Mermaid rendering; upstream bugs.
|
||||
- [#5603 — Code box in text cannot be copied from the end to the left (when highlighted)](https://github.com/TriliumNext/Trilium/issues/5603) — CKEditor selection quirk in highlighted code blocks.
|
||||
- [#5565 — Writing does not work correctly (canvas + weight tracker)](https://github.com/TriliumNext/Trilium/issues/5565) — Excalidraw interaction bug intertwined with promoted attributes.
|
||||
- [#5550 — Sync errors may hang the initial setup](https://github.com/TriliumNext/Trilium/issues/5550) — first-run sync error needs UI feedback instead of silent infinite wait.
|
||||
- [#5546 — #readOnly should apply to title and labels too](https://github.com/TriliumNext/Trilium/issues/5546) — `apps/client/src/widgets/note_title.tsx` computes `isReadOnly` without checking the `#readOnly` label; also need to propagate to attribute widgets.
|
||||
- [#5536 — Recent Changes not correct / undelete confusing](https://github.com/TriliumNext/Trilium/issues/5536) — UX + data correctness issue in the Recent Changes dialog.
|
||||
- [#5535 — Refactor event system for maintainability/type safety](https://github.com/TriliumNext/Trilium/issues/5535) — architectural refactor.
|
||||
- [#5528 — Editing note re-renders split attachments on every keystroke](https://github.com/TriliumNext/Trilium/issues/5528) — needs component-level should-update logic for attachment previews.
|
||||
- [#5539 — Absurdly thick stroke width in Canvas note type](https://github.com/TriliumNext/Trilium/issues/5539) — Excalidraw minimum stroke width is baked into the library.
|
||||
- [#5650 — TOTP security enhancement](https://github.com/TriliumNext/Trilium/issues/5650) — partially done (`178a3b4318` adds 160-bit secret) but SHA256/rate limiting remain; security-sensitive work.
|
||||
|
||||
## Feature Requests
|
||||
- [#5756 — Support Note Map Type as Shared Page](https://github.com/TriliumNext/Trilium/issues/5756)
|
||||
- [#5751 — Linking to subtitles](https://github.com/TriliumNext/Trilium/issues/5751)
|
||||
- [#5728 — Copy link to note](https://github.com/TriliumNext/Trilium/issues/5728)
|
||||
- [#5727 — Table borders (apply to cells too)](https://github.com/TriliumNext/Trilium/issues/5727)
|
||||
- [#5725 — Add TriliumNext to TrueNAS apps](https://github.com/TriliumNext/Trilium/issues/5725)
|
||||
- [#5707 — OneNote import tool](https://github.com/TriliumNext/Trilium/issues/5707)
|
||||
- [#5701 — Configurable tab width in code blocks](https://github.com/TriliumNext/Trilium/issues/5701)
|
||||
- [#5697 — Take photo from camera](https://github.com/TriliumNext/Trilium/issues/5697)
|
||||
- [#5692 — codesandbox Sandpack note or plugin](https://github.com/TriliumNext/Trilium/issues/5692)
|
||||
- [#5690 — Markdown editor](https://github.com/TriliumNext/Trilium/issues/5690)
|
||||
- [#5686 — In-app Help links to public pages](https://github.com/TriliumNext/Trilium/issues/5686)
|
||||
- [#5685 — Search within Help User Guide](https://github.com/TriliumNext/Trilium/issues/5685)
|
||||
- [#5671 — Search entire database when a note is hoisted](https://github.com/TriliumNext/Trilium/issues/5671)
|
||||
- [#5667 — Better search with search excerpts](https://github.com/TriliumNext/Trilium/issues/5667)
|
||||
- [#5658 — Saved Search auto-run on note open](https://github.com/TriliumNext/Trilium/issues/5658)
|
||||
- [#5656 — Show full note titles in Link Map view](https://github.com/TriliumNext/Trilium/issues/5656)
|
||||
- [#5641 — Add showProtectedDialog() to frontend API](https://github.com/TriliumNext/Trilium/issues/5641)
|
||||
- [#5640 — Support for importing ICS (iCalendar) file](https://github.com/TriliumNext/Trilium/issues/5640)
|
||||
- [#5638 — Add Ctrl+D shortcut to select next matching occurrence](https://github.com/TriliumNext/Trilium/issues/5638)
|
||||
- [#5626 — Include all available templates even in hoisted notes](https://github.com/TriliumNext/Trilium/issues/5626)
|
||||
- [#5621 — Customize the format toolbar](https://github.com/TriliumNext/Trilium/issues/5621)
|
||||
- [#5615 — Clicking below note should focus editor](https://github.com/TriliumNext/Trilium/issues/5615)
|
||||
- [#5609 — "Open in new split" option in JumpTo menu](https://github.com/TriliumNext/Trilium/issues/5609)
|
||||
- [#5598 — Multiple client instances / connect to multiple servers](https://github.com/TriliumNext/Trilium/issues/5598)
|
||||
- [#5585 — Search prefix (dynamic prefix per result)](https://github.com/TriliumNext/Trilium/issues/5585)
|
||||
- [#5583 — #rerunScriptsOnTemplateChange label](https://github.com/TriliumNext/Trilium/issues/5583)
|
||||
- [#5579 — Allow Root note to be #shareRoot](https://github.com/TriliumNext/Trilium/issues/5579)
|
||||
- [#5572 — API function to raise window](https://github.com/TriliumNext/Trilium/issues/5572)
|
||||
- [#5562 — Pin tab](https://github.com/TriliumNext/Trilium/issues/5562)
|
||||
- [#5561 — Task management (Kanban, progress bar, timeline)](https://github.com/TriliumNext/Trilium/issues/5561)
|
||||
- [#5553 — Launcher: keyboard navigation for Calendar](https://github.com/TriliumNext/Trilium/issues/5553)
|
||||
|
||||
## Skipped / Unclear
|
||||
- (none — every issue in the batch is placed above)
|
||||
@@ -1,113 +0,0 @@
|
||||
# Batch 07 — Issues #5298–#5526
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#5494 — Context Menu click on Submenu parent should not trigger event/close the context menu](https://github.com/TriliumNext/Trilium/issues/5494)
|
||||
- **Problem**: Left-clicking a submenu parent (e.g. "Insert note after") still fires its own `handler` / `selectMenuItemHandler`, creating a new note without the user actually picking a subitem.
|
||||
- **Proposed solution**: In `apps/client/src/menus/context_menu.ts` (createMenuItem mousedown handler, around lines 319–323), gate the `item.handler(...)` and `selectMenuItemHandler(...)` calls behind `if (!("items" in item && item.items))`. The non-mobile branch already short-circuits `this.hide()` for submenu parents (line 315), so only the handler invocation needs the same guard.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5371 — Titles of Settings/Options are renamable](https://github.com/TriliumNext/Trilium/issues/5371)
|
||||
- **Problem**: The title input in Options pages is editable, letting users rename hidden system notes like `_optionsAppearance`.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/note_title.tsx` (lines 24–32), extend the `isReadOnly` check to also return `true` when `note.noteId.startsWith("_options")` (alongside the existing `_help_` and `isLaunchBarConfig` clauses).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5375 — `replaceMathTextWithKatax` method is duplicated in `highlight_list.ts` and `toc.js`](https://github.com/TriliumNext/Trilium/issues/5375)
|
||||
- **Problem**: Same helper exists in both `highlights_list.ts` and `toc.ts` (verified via Grep — `toc.ts:240` and `highlights_list.ts`).
|
||||
- **Proposed solution**: Extract the function into a small shared module under `apps/client/src/services/` (e.g. `math_renderer.ts`) and import it from both widgets. Pure refactor, no behavior change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5311 — New API method: isMobile()](https://github.com/TriliumNext/Trilium/issues/5311)
|
||||
- **Problem**: Scripts have no way to detect if they are running on the mobile/desktop/web client.
|
||||
- **Proposed solution**: `utils.isMobile()` already exists in `apps/client/src/services/utils.ts:226`. Just expose it on the frontend script API — add `isMobile: utils.isMobile` to the API constructor in `apps/client/src/services/frontend_script_api.ts` (and the Preact variant) alongside the other utility re-exports. No backend work needed.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5513 — UX: friendly numbers in settings: Sync timeout](https://github.com/TriliumNext/Trilium/issues/5513)
|
||||
- **Problem**: Sync timeout is shown in milliseconds with no human-friendly unit (sub-task of #5336).
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/options/sync.tsx` (around line 59–65), either change the unit to seconds (divide/multiply by 1000 on read/write) or reuse a "time value + unit" composite, plus update the `sync_2.timeout_unit` key in `apps/client/src/translations/en/translation.json` (currently "milliseconds").
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (straightforward but touches save/load conversion)
|
||||
|
||||
### [#5444 — UX: friendly numbers in settings: Zoom factor (percent better than decimal factor)](https://github.com/TriliumNext/Trilium/issues/5444)
|
||||
- **Problem**: Zoom factor in Appearance options is shown as a 0.3–2.0 decimal (verified at `appearance.tsx:342–347`), while the global menu already uses percent.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/options/appearance.tsx` `ElectronIntegration`, switch the `FormTextBox` to a percent input (min 30, max 200, step 10) and multiply/divide by 100 when reading/writing the `zoomFactor` option. The ideal refactor (extracting `zoom-container` from `global_menu.tsx`) is nice-to-have but not required for a first fix.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5414 — Localization: add support to follow the system language](https://github.com/TriliumNext/Trilium/issues/5414)
|
||||
- **Problem**: No "System default" option in the locale dropdown.
|
||||
- **Proposed solution**: Add a sentinel value (e.g. `"auto"`) to the locale combo in `apps/client/src/widgets/type_widgets/options/i18n.tsx` and make it the default for new installs. When selected, resolve the effective locale by matching `navigator.language` against the list of supported locales (`apps/client/src/services/i18n.ts` exposes them), falling back to English. No server changes required because language is a client option.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#5376 — Add "Open Note" to list of search actions](https://github.com/TriliumNext/Trilium/issues/5376)
|
||||
- **Problem**: Search actions lack an "Open Note" entry to open all matching notes.
|
||||
- **Proposed solution**: Search actions are registered in `apps/server/src/services/search/actions/` (e.g. `set_attribute.ts`, etc.) and the UI picker in `apps/client/src/widgets/search_actions/`. Add a new action class that emits an `openNote`/`openNoteInNewTab` command per result, plus a corresponding UI entry. Modest scope because existing actions already provide a clear template.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#5341 — Duplicate HTML ids for tabs of the same view](https://github.com/TriliumNext/Trilium/issues/5341)
|
||||
- **Evidence**: The options UI has been migrated to Preact (`apps/client/src/widgets/type_widgets/options/*.tsx`). `FormGroup` now generates IDs via `useUniqueName(name)` which returns `${name}-${randomString(10)}` (see `apps/client/src/widgets/react/FormGroup.tsx:19` and `hooks.tsx:372`). `FormCheckbox`, `FormRadioGroup`, `Collapsible`, and `Dropdown` all use the same hook. Every rendered instance therefore gets a fresh random ID.
|
||||
- **Verification needed**: Open two options tabs in the same window and inspect the DOM to confirm no duplicate IDs remain across the multi-tab view.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#5526 — Investigate Creating/Shipping AppArmor Profile](https://github.com/TriliumNext/Trilium/issues/5526) — packaging work for deb/rpm AppArmor profile, non-trivial distro integration.
|
||||
- [#5525 — Unable to launch desktop client - Permission denied](https://github.com/TriliumNext/Trilium/issues/5525) — likely the same AppArmor/chrome-sandbox issue as #5333; needs reproduction on target distro.
|
||||
- [#5520 — Hidden notes hierarchy becomes apparent after importing a note](https://github.com/TriliumNext/Trilium/issues/5520) — tree state bug after import; requires debugging froca/tree update logic.
|
||||
- [#5517 — Keyboard Shortcuts can be assigned multiple times](https://github.com/TriliumNext/Trilium/issues/5517) — needs cross-action duplicate detection + warning UI in `shortcuts.tsx`.
|
||||
- [#5508 — Check which API endpoints are not protected / publicly accessible](https://github.com/TriliumNext/Trilium/issues/5508) — security audit task spanning all routes.
|
||||
- [#5504 — Import markdown leaves out image](https://github.com/TriliumNext/Trilium/issues/5504) — markdown/zip import bug needing investigation of image resolution.
|
||||
- [#5493 — Context Menu should use `menu` element](https://github.com/TriliumNext/Trilium/issues/5493) — DOM refactor across the entire context menu implementation.
|
||||
- [#5482 — Option to disable Electron built-in shortcuts (Ctrl+Q etc.)](https://github.com/TriliumNext/Trilium/issues/5482) — needs interception of Electron-level accelerators; must survive restarts.
|
||||
- [#5472 — Check what environmental variables are in use](https://github.com/TriliumNext/Trilium/issues/5472) — codebase audit + refactor task.
|
||||
- [#5470 — Expose In UI which Settings are Auto-Synced](https://github.com/TriliumNext/Trilium/issues/5470) — requires new option metadata field and UI indicator across every option.
|
||||
- [#5467 — Check if ETAPI OpenAPI spec is up-to-date](https://github.com/TriliumNext/Trilium/issues/5467) — full ETAPI audit.
|
||||
- [#5446 — shareAlias should warn you if the alias is already used](https://github.com/TriliumNext/Trilium/issues/5446) — needs attribute-change validation hook + user-facing warning dialog.
|
||||
- [#5443 — Include attributes in revisions](https://github.com/TriliumNext/Trilium/issues/5443) — fundamental change to revision model (schema + restore logic).
|
||||
- [#5442 — Protected notes not protected from deletion, attribute visibility](https://github.com/TriliumNext/Trilium/issues/5442) — security model change.
|
||||
- [#5436 — Map not visible when note is shared](https://github.com/TriliumNext/Trilium/issues/5436) — geomap not rendering in shaca share templates.
|
||||
- [#5432 — note.noteSize and note.contentSize doesn't work in Note Search](https://github.com/TriliumNext/Trilium/issues/5432) — `noteSize` is not a real property (doesn't exist in Becca); `contentSize` looks like it should work but `property_comparison.ts:61` compares the already-camelCased name against a lowercase-only allowlist, breaking the `dbLoadNeeded` flag. Needs either a docs update or a proper fix + alias.
|
||||
- [#5431 — Text note contents disappear when switching Read-Only to editable](https://github.com/TriliumNext/Trilium/issues/5431) — non-deterministic editor sync bug.
|
||||
- [#5426 — Autoformat inline code when typing between backticks](https://github.com/TriliumNext/Trilium/issues/5426) — CKEditor autoformat plugin change.
|
||||
- [#5424 — Autoformat Code-Block with language](https://github.com/TriliumNext/Trilium/issues/5424) — CKEditor autoformat plugin change with new parsing flow.
|
||||
- [#5423 — `~child:child:template=...` not applied automatically](https://github.com/TriliumNext/Trilium/issues/5423) — template inheritance walker bug.
|
||||
- [#5383 — Large Code Blocks in Text Notes Break Syntax Highlight](https://github.com/TriliumNext/Trilium/issues/5383) — highlight.js / CKEditor performance boundary.
|
||||
- [#5380 — Make Initial Sync timeout value configurable](https://github.com/TriliumNext/Trilium/issues/5380) — requires new option + config plumbing.
|
||||
- [#5359 — i18n: keyboard shortcuts from keyboard_actions service are not translatable](https://github.com/TriliumNext/Trilium/issues/5359) — needs extracting all action descriptions into translations.
|
||||
- [#5346 — Notes experiencing automatic snapshot recovery](https://github.com/TriliumNext/Trilium/issues/5346) — potentially serious data-loss bug, needs repro.
|
||||
- [#5336 — UX: friendly numbers in settings (parent)](https://github.com/TriliumNext/Trilium/issues/5336) — parent tracking issue; subtasks handled individually.
|
||||
- [#5333 — SUID sandbox helper binary found but not configured](https://github.com/TriliumNext/Trilium/issues/5333) — same class as #5525/#5526, chrome-sandbox setup.
|
||||
- [#5315 — Desktop app initial sync never stops](https://github.com/TriliumNext/Trilium/issues/5315) — sync loop bug that needs server-side investigation.
|
||||
- [#5298 — Consider changing the default port](https://github.com/TriliumNext/Trilium/issues/5298) — Electron uses 37740/37840 (ephemeral range); changing requires care to avoid collisions; not a one-line fix.
|
||||
|
||||
## Feature Requests
|
||||
- [#5511 — Calculated Content in Templates via Inline Javascript](https://github.com/TriliumNext/Trilium/issues/5511)
|
||||
- [#5509 — Dynamic themes](https://github.com/TriliumNext/Trilium/issues/5509)
|
||||
- [#5497 — Undo, permanent delete: add as action for note tree](https://github.com/TriliumNext/Trilium/issues/5497)
|
||||
- [#5481 — Selected Note API](https://github.com/TriliumNext/Trilium/issues/5481)
|
||||
- [#5480 — Notification API](https://github.com/TriliumNext/Trilium/issues/5480)
|
||||
- [#5475 — Add keyboard shortcuts for managing splits](https://github.com/TriliumNext/Trilium/issues/5475)
|
||||
- [#5451 — Add polylines or polygons on the geomap note type](https://github.com/TriliumNext/Trilium/issues/5451)
|
||||
- [#5411 — Auto-hide the tab bar and toolbar in full-screen mode](https://github.com/TriliumNext/Trilium/issues/5411)
|
||||
- [#5410 — Add the ability to create a shell link (shortcut) for a note](https://github.com/TriliumNext/Trilium/issues/5410)
|
||||
- [#5401 — Confusing behaviour when the application is minimized in system tray](https://github.com/TriliumNext/Trilium/issues/5401)
|
||||
- [#5363 — Option to open HTML attachment in browser instead of download](https://github.com/TriliumNext/Trilium/issues/5363)
|
||||
- [#5362 — Unify/hide duplicate find dialogs/widgets](https://github.com/TriliumNext/Trilium/issues/5362)
|
||||
- [#5361 — UX: image options clarification](https://github.com/TriliumNext/Trilium/issues/5361)
|
||||
- [#5357 — Mind Map: Ability to add images as node](https://github.com/TriliumNext/Trilium/issues/5357)
|
||||
- [#5355 — Import/Merge Another Trilium Database Into Current database](https://github.com/TriliumNext/Trilium/issues/5355)
|
||||
- [#5350 — Save clip with prompt to add meta note](https://github.com/TriliumNext/Trilium/issues/5350)
|
||||
- [#5344 — Importing html images as attached instead of external reference](https://github.com/TriliumNext/Trilium/issues/5344)
|
||||
- [#5337 — UX: Code blocks: sort mime type by most used](https://github.com/TriliumNext/Trilium/issues/5337)
|
||||
- [#5332 — Improve search result highlighting](https://github.com/TriliumNext/Trilium/issues/5332)
|
||||
- [#5305 — Note Tree Sidebar - Confirmation Dialogue When Dragging and Dropping](https://github.com/TriliumNext/Trilium/issues/5305)
|
||||
- [#5303 — Creating human-readable URL aliases without sharing](https://github.com/TriliumNext/Trilium/issues/5303)
|
||||
|
||||
## Skipped / Unclear
|
||||
_(none — every issue in this batch is categorized above)_
|
||||
@@ -1,105 +0,0 @@
|
||||
# Batch 08 — Issues #4854–#5296
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#5250 — (Feature request) Prevent options note title changes](https://github.com/TriliumNext/Trilium/issues/5250)
|
||||
- **Problem**: Titles of hidden options notes (e.g. `_optionsAppearance`) are editable by the user, which is inconsistent since their titles come from translations.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/note_title.tsx` (the `isReadOnly` computation around lines 25-31), add a condition for hidden/system notes. Simplest: `note.noteId.startsWith("_options")` (or more broadly, `note.noteId.startsWith("_") && !isLaunchBarConfig(...)` — but that's riskier). The existing pattern already handles `_help_` and launch bar config, so extending it with options IDs is a one-line change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5201 — (Feature request) Disable text selection in mermaid diagrams?](https://github.com/TriliumNext/Trilium/issues/5201)
|
||||
- **Problem**: Dragging to pan a mermaid diagram also selects text, which interferes with pan gesture.
|
||||
- **Proposed solution**: Add the CSS rule (`user-select: none; -webkit-user-select: none;`) to `.mermaid-render` in the mermaid type widget's CSS. Issue author provides the exact CSS. Locate the mermaid type widget under `apps/client/src/widgets/type_widgets/` and append to its stylesheet — no need for a settings toggle as a first pass.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5220 — (Feature request) Add the `#appJs` attribute to load a custom script](https://github.com/TriliumNext/Trilium/issues/5220)
|
||||
- **Problem**: `#appCss` exists for globally loading CSS from a note; an analogous `#appJs` would let users ship a JS library once instead of cloning it into every render note.
|
||||
- **Proposed solution**: Mirror the existing `#appCss` handling — grep for `appCss` in `apps/server/src/` and `apps/client/src/` and add a parallel path that injects a `<script>` tag. The mechanism is well-established; mostly copy/paste. Document the obvious security caveats in the attribute docs (labels.html).
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (easy code-wise; security framing may prompt more review)
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#5134 — Upgrade autocomplete dependencies](https://github.com/TriliumNext/Trilium/issues/5134)
|
||||
- **Evidence**: Grepped the git log and found commits `d1fc4780b7 refactor: remove old autocomplete completely`, `3b35dc50c5 feat(core): integrate autocomplete route`, plus a series of `feat(autocomplete)` / `test(autocomplete)` commits. The old autocomplete has been fully removed and replaced in-house.
|
||||
- **Verification needed**: Maintainer should confirm the new autocomplete is considered the replacement the reporter was asking for, then close.
|
||||
|
||||
### [#5174 — '@' Context menu's auto-completion not showing most relevant but most recent](https://github.com/TriliumNext/Trilium/issues/5174)
|
||||
- **Evidence**: The autocomplete subsystem was fully rewritten (see #5134 evidence). Fuzzy matching has been added (`f23a7b4842 feat(settings): also allow for fuzzy searching to just be disabled`) and a new autocomplete route exists. The old "most recent" behaviour may be gone.
|
||||
- **Verification needed**: Repro on current main — create ancient notes matching the query, a few recent ones, then `@` and check ordering.
|
||||
|
||||
### [#5196 — (Feature request) Cursor automatically in text box when embedding note](https://github.com/TriliumNext/Trilium/issues/5196)
|
||||
- **Evidence**: Commit `35bd210062 fix(react/dialogs): recent notes not triggered in autocomplete` (Aug 2025) refactored `triggerRecentNotes` in `apps/client/src/services/note_autocomplete.ts` to call `$el.trigger("focus").trigger("select")`. `apps/client/src/widgets/dialogs/include_note.tsx` invokes `triggerRecentNotes(autoCompleteRef.current)` in `onShown`, so the input should now focus automatically when the Include Note dialog opens.
|
||||
- **Verification needed**: Repro on current main — open a text note, click Include Note, confirm focus is in the search box without clicking.
|
||||
|
||||
### [#5254 — User configurable whitelist of html tags stripped on import](https://github.com/TriliumNext/Trilium/issues/5254)
|
||||
- **Evidence**: The issue's interim request — extend the default allowlist with `acronym`, `article`, `big`, `button`, `cite`, `col`, `colgroup`, `data`, `dd`, `fieldset`, `form`, `legend`, `meter`, `noscript`, `option`, `progress`, `rp`, `samp`, `small`, `sub`, `sup`, `template`, `textarea`, `tt` — is now done in `packages/commons/src/lib/shared_constants.ts` (`SANITIZER_DEFAULT_ALLOWED_TAGS`, comment references this same issue). Additionally, `apps/server/src/services/html_sanitizer.ts` already reads an `allowedHtmlTags` option (user-configurable).
|
||||
- **Verification needed**: Confirm the user-configurable option has a UI surface; if only programmatic, close the issue with a docs pointer.
|
||||
|
||||
### [#5131 — (Bug report) v0.90.4 docker does not read USER_UID and USER_GID from environment](https://github.com/TriliumNext/Trilium/issues/5131)
|
||||
- **Evidence**: Reporter's logs show `./start-docker.sh: 3: [[: not found` — the script was using bash `[[ ]]` under `/bin/sh`. Current `apps/server/start-docker.sh` uses POSIX `[ ! -z "${USER_UID}" ]` / `[ ! -z "${USER_GID}" ]`, so the bug is gone.
|
||||
- **Verification needed**: Spin up the latest docker image with `USER_UID=1001 USER_GID=1001` and confirm the container starts and writes the log dir.
|
||||
|
||||
### [#5066 — Fix `spec/etapi` tests and port to vitest](https://github.com/TriliumNext/Trilium/issues/5066)
|
||||
- **Evidence**: `apps/server/spec/etapi/` now contains 30+ `.spec.ts` files (e.g. `app-info.spec.ts`, `search.spec.ts`, `mcp.spec.ts`). The migration has happened.
|
||||
- **Verification needed**: Confirm `pnpm test:sequential` actually runs them and they pass.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#5296 — CKEditor Handle doesn't move when tree width is changed](https://github.com/TriliumNext/Trilium/issues/5296) — needs a ResizeObserver hook to trigger CKEditor layout recalc when sidebar changes; upstream-influenced.
|
||||
- [#5294 — "Insert Child Note" Context Menu cut off / not scrollable](https://github.com/TriliumNext/Trilium/issues/5294) — `apps/client/src/menus/context_menu.ts` only positions the top-level menu; submenus don't have overflow logic or `max-height` handling. Needs a proper submenu positioning routine plus scrolling.
|
||||
- [#5251 — Sync always fails after wrong DNS config once](https://github.com/TriliumNext/Trilium/issues/5251) — Electron HTTP/DNS cache persistence; needs an explicit "clear DNS cache" action or to bypass the cache for sync requests.
|
||||
- [#5247 — Search/Filter Map View](https://github.com/TriliumNext/Trilium/issues/5247) — feature request but needs design work in the note-map widget.
|
||||
- [#5233 — Copy/paste from note only pastes text, not images](https://github.com/TriliumNext/Trilium/issues/5233) — CKEditor clipboard integration; nontrivial.
|
||||
- [#5214 — Scripts can overwrite files in application install dir](https://github.com/TriliumNext/Trilium/issues/5214) — security; `exportSubtreeToZipFile` in `apps/server/src/services/export/zip.ts` still accepts arbitrary paths. Needs sandboxing / CWD enforcement.
|
||||
- [#5193 — Relation popup sometimes shows content of incorrect note](https://github.com/TriliumNext/Trilium/issues/5193) — attribute popup caches first hovered target; needs debug of PromotedAttributes/attribute_detail tooltip logic.
|
||||
- [#5192 — Notes not saving (silent data loss)](https://github.com/TriliumNext/Trilium/issues/5192) — serious; needs reproduction and investigation into spacedUpdate / save pipeline.
|
||||
- [#5191 — Scrolling when cursor is in note margin](https://github.com/TriliumNext/Trilium/issues/5191) — needs pointer-events/CSS rework on the text editor scroll container.
|
||||
- [#5170 — "Create and link new note" moves link to beginning of parent note](https://github.com/TriliumNext/Trilium/issues/5170) — CKEditor mention/create-link command bug.
|
||||
- [#5169 — Backend JS notes migration warning](https://github.com/TriliumNext/Trilium/issues/5169) — not a code bug, but the request for user-facing migration guidance needs docs work.
|
||||
- [#5159 — Child notes don't refresh on selecting a different note](https://github.com/TriliumNext/Trilium/issues/5159) — collection/child-list widget refresh race; reporter is using `#viewType=list`.
|
||||
- [#5118 — Copying attachment link to clipboard fails](https://github.com/TriliumNext/Trilium/issues/5118) — browser/HTTP context for clipboard access; needs polyfill / secure-context fallback.
|
||||
- [#5080 — Investigate #titleTemplate for template notes](https://github.com/TriliumNext/Trilium/issues/5080) — `notes.ts` reads `titleTemplate` from the parent only; making it inherit from the template requires design discussion.
|
||||
- [#4947 — Remove uses of `any` in server and client](https://github.com/TriliumNext/Trilium/issues/4947) — tracking/technical debt.
|
||||
- [#4936 — Sync to server behind OIDC & reverse proxy](https://github.com/TriliumNext/Trilium/issues/4936) — OIDC auth interception breaks sync handshake; needs protocol design.
|
||||
- [#4905 — shareCredentials tag does not work with reverse proxy](https://github.com/TriliumNext/Trilium/issues/4905) — reverse-proxy / HTTP/2 interaction with basic-auth 401 response.
|
||||
- [#4898 — Link in images (CKEditor behaviour)](https://github.com/TriliumNext/Trilium/issues/4898) — CKEditor image+link UI interaction.
|
||||
- [#4896 — Refer to current note clone in render note script](https://github.com/TriliumNext/Trilium/issues/4896) — scripting API design question.
|
||||
- [#4888 — Sync server handshake failed, `<!DOCTYPE` is not valid JSON](https://github.com/TriliumNext/Trilium/issues/4888) — same family as #4936; reverse-proxy 404/login returning HTML.
|
||||
- [#4887 — Normal notes recovered wrongly after syncing](https://github.com/TriliumNext/Trilium/issues/4887) — sync conflict recovery bug, needs deep investigation.
|
||||
- [#4880 — Shared link shows address from sync server](https://github.com/TriliumNext/Trilium/issues/4880) — share URL generation uses wrong instance's base URL in a synced pair.
|
||||
- [#5278 — Handle development user Javascript widgets more elegantly](https://github.com/TriliumNext/Trilium/issues/5278) — safe mode exists (`d97737756c chore(build): disable safe mode by default`) but reporter wants sandboxed live editing, which is a bigger architectural change.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#5281 — Change `clone` terminology](https://github.com/TriliumNext/Trilium/issues/5281)
|
||||
- [#5268 — Register icon pack in mermaid](https://github.com/TriliumNext/Trilium/issues/5268)
|
||||
- [#5228 — SOCKS Proxy Support in TriliumNext Desktop App](https://github.com/TriliumNext/Trilium/issues/5228)
|
||||
- [#5217 — Friendly share urls: turn title into shareAlias](https://github.com/TriliumNext/Trilium/issues/5217)
|
||||
- [#5205 — Image zoom / gallery view for shared notes](https://github.com/TriliumNext/Trilium/issues/5205)
|
||||
- [#5199 — Export of HTML with `[missing note]` could retain names](https://github.com/TriliumNext/Trilium/issues/5199)
|
||||
- [#5195 — Internal links to notes in Mermaid diagrams](https://github.com/TriliumNext/Trilium/issues/5195)
|
||||
- [#5190 — Drag and drop note icon to insert link in note](https://github.com/TriliumNext/Trilium/issues/5190)
|
||||
- [#5183 — Inline reference to labels](https://github.com/TriliumNext/Trilium/issues/5183)
|
||||
- [#5126 — AVIF image compression support](https://github.com/TriliumNext/Trilium/issues/5126)
|
||||
- [#5122 — (Try to) sync app on shutdown](https://github.com/TriliumNext/Trilium/issues/5122)
|
||||
- [#5108 — Deploy to Flathub](https://github.com/TriliumNext/Trilium/issues/5108) (flatpak build exists via electron-forge; publishing step still missing)
|
||||
- [#5089 — Template-typed attributes/relationships](https://github.com/TriliumNext/Trilium/issues/5089)
|
||||
- [#5086 — Investigate Windows additional package managers (winget/chocolatey/scoop)](https://github.com/TriliumNext/Trilium/issues/5086)
|
||||
- [#5049 — Appearance Settings Optional Sync](https://github.com/TriliumNext/Trilium/issues/5049)
|
||||
- [#5044 — Calendar overview of Note activity](https://github.com/TriliumNext/Trilium/issues/5044)
|
||||
- [#4989 — Keyboard shortcuts for more actions](https://github.com/TriliumNext/Trilium/issues/4989) (tracker)
|
||||
- [#4969 — Note editors other than CKEditor](https://github.com/TriliumNext/Trilium/issues/4969) (tracker)
|
||||
- [#4957 — End-to-end encryption (database-level)](https://github.com/TriliumNext/Trilium/issues/4957) (tracker)
|
||||
- [#4956 — Milestone: Multi-user support](https://github.com/TriliumNext/Trilium/issues/4956) (tracker)
|
||||
- [#4922 — Restore backed up database files to notes](https://github.com/TriliumNext/Trilium/issues/4922)
|
||||
- [#4885 — Reload read position after "go back" from attachment view](https://github.com/TriliumNext/Trilium/issues/4885)
|
||||
- [#4871 — Adding Elestio as deployment option](https://github.com/TriliumNext/Trilium/issues/4871)
|
||||
- [#4870 — Synchronized Devices Dashboard in Trilium](https://github.com/TriliumNext/Trilium/issues/4870)
|
||||
- [#4854 — Add a visual diff to split window](https://github.com/TriliumNext/Trilium/issues/4854)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- [#5280 — Dependency Dashboard](https://github.com/TriliumNext/Trilium/issues/5280) — Renovate bot tracker, not an actionable issue.
|
||||
@@ -1,91 +0,0 @@
|
||||
# Batch 09 — Issues #4194–#4837
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#4584 — (Feature Request) Hide hidden notes from `similar notes` view](https://github.com/TriliumNext/Trilium/issues/4584)
|
||||
- **Problem**: Similar-notes results include notes living inside the `_hidden` subtree (templates, system notes, launchers), polluting the list.
|
||||
- **Proposed solution**: In `apps/server/src/becca/similarity.ts` around line 411 (`for (const candidateNote of Object.values(becca.notes))`), skip candidates where `candidateNote.isHiddenCompletely()` is true. The helper already exists on `BNote` (`apps/server/src/becca/entities/bnote.ts:1203`), so this is a one-liner guard.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4780 — (Feature request) Change Icon for Jump to Note](https://github.com/TriliumNext/Trilium/issues/4780)
|
||||
- **Problem**: The Jump-to-Note launcher icon is `bx bx-send` (a paper-airplane/send icon), which suggests sending instead of navigating.
|
||||
- **Proposed solution**: Change `icon: "bx bx-send"` to a navigation-style icon (e.g. `"bx bx-navigation"`, `"bx bx-log-in"`, `"bx bx-crosshair"`) in `apps/server/src/services/hidden_subtree_launcherbar.ts` at lines 105 and the second occurrence near line 194. Existing installations should pick up the change because launcher bar items are created via `HiddenSubtreeItem`; since the icon is stored as an attribute, add `enforceAttributes: true` to that entry if the icon should override user customisations.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high (trivial to change; needs confirmation of the enforcement behaviour)
|
||||
|
||||
### [#4543 — (Bug report) Orphaned keyboardShortcuts* options after upgrade](https://github.com/TriliumNext/Trilium/issues/4543)
|
||||
- **Problem**: Users upgraded from 0.59.x have stale `keyboardShortcutsShowNoteRevisions` and `keyboardShortcutsForceSaveNoteRevision` option rows that produce “Keyboard action … found in database, but not in action definition.” warnings on every startup. The active action names are `showRevisions` / `forceSaveRevision` (`apps/server/src/services/keyboard_actions.ts:449,825`).
|
||||
- **Proposed solution**: Add a small migration under `apps/server/src/migrations/` that deletes the two orphaned options: `DELETE FROM options WHERE name IN ('keyboardShortcutsShowNoteRevisions','keyboardShortcutsForceSaveNoteRevision')`. Follow the pattern of existing migrations and register it in `apps/server/src/migrations/migrations.ts`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#4649 — (Bug report) Importing large ZIP-Files via etapi throws error and request hangs](https://github.com/TriliumNext/Trilium/issues/4649)
|
||||
- **Evidence**: The reported root cause was that `req.body` was undefined/unparsed on the `/etapi/notes/:noteId/import` POST. `apps/server/src/app.ts:94` now registers `express.raw({ limit: "500mb" })` globally, and `apps/server/src/etapi/notes.ts:180-190` still passes `req.body` straight to `zipImportService.importZip` — the raw buffer path now exists. Issue predates the monorepo restructure.
|
||||
- **Verification needed**: Reproduce the original Python import with a large zip against current main; verify `Content-Type: application/zip` is handled (Express `raw()` defaults to `application/octet-stream`, so users may need the right Content-Type or an explicit type in the raw handler).
|
||||
|
||||
### [#4261 — (Feature request) Make apps logs saving optional](https://github.com/TriliumNext/Trilium/issues/4261)
|
||||
- **Evidence**: Log retention is now configurable via `config.Logging.retentionDays` (`apps/server/src/services/log.ts:36-42`) with `-1` keeping all logs and positive values deleting older files. While fully disabling file logging isn’t wired up, the disk-space concern is mitigated by retention config.
|
||||
- **Verification needed**: Maintainer to decide whether the feature is satisfied by retention config or still needs an explicit “disable file logs” switch.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#4835 — Links don't open when clicked on](https://github.com/TriliumNext/Trilium/issues/4835) — CKEditor image-style-configuration error + ResizeObserver loop; likely downstream CKEditor config bug needing investigation in the current editor pipeline.
|
||||
- [#4702 — "Add to homescreen" sets wrong url under reverse proxy sub-directory](https://github.com/TriliumNext/Trilium/issues/4702) — `manifest.webmanifest` is a static file with hardcoded `"scope":"/"` and `"start_url":"/"` (`apps/client/src/assets/manifest.webmanifest`); needs dynamic generation based on `X-Forwarded-Prefix`/proxy prefix.
|
||||
- [#4762 — ERROR when syncing deleted notes](https://github.com/TriliumNext/Trilium/issues/4762) — Stale blob reference for deleted note; deletion sync logic bug needing deep investigation.
|
||||
- [#4666 — Excalidraw changes fonts](https://github.com/TriliumNext/Trilium/issues/4666) — Excalidraw hand-drawn font inconsistency on re-render; needs canvas note type investigation.
|
||||
- [#4657 — Backup database exposes protected notes](https://github.com/TriliumNext/Trilium/issues/4657) — Security bug: protected content leaks into backup; needs careful investigation of protect/encrypt-on-backup flow.
|
||||
- [#4650 — All notes blank after opening pdf attachment a few times](https://github.com/TriliumNext/Trilium/issues/4650) — CKEditor error “Cannot read properties of null (reading 'parent')”; attachment-related editor crash.
|
||||
- [#4598 — ck-block-toolbar-button display issue when adjusting tree pane](https://github.com/TriliumNext/Trilium/issues/4598) — CKEditor toolbar positioning bug tied to layout resize events.
|
||||
- [#4576 — Avoid CPU usage spikes from healthcheck script](https://github.com/TriliumNext/Trilium/issues/4576) — Docker healthcheck spawns node every 30s (`apps/server/src/docker_healthcheck.ts` + Dockerfiles); needs lightweight alternative (wget/curl, or embedded check).
|
||||
- [#4562 — Attachment links not working as expected (web vs desktop)](https://github.com/TriliumNext/Trilium/issues/4562) — Clipboard API behavior inconsistency between Electron and web clients.
|
||||
- [#4555 — Formatting of imported .enex note lost on edit](https://github.com/TriliumNext/Trilium/issues/4555) — CKEditor drops style attributes on first edit of Evernote-imported HTML; normalisation pipeline bug.
|
||||
- [#4536 — "include note" not displayed in sharing](https://github.com/TriliumNext/Trilium/issues/4536) — Shared view (Shaca) doesn't render included-note widgets; share renderer fix.
|
||||
- [#4463 — Unexpected data loss after app restart and backup restoration](https://github.com/TriliumNext/Trilium/issues/4463) — Unclear reproduction; needs diagnosis of long-uptime data persistence.
|
||||
- [#4690 — search highlights not performing correct scroll-to-term](https://github.com/TriliumNext/Trilium/issues/4690) — Scroll-into-view after search hit opens; read-only-mode code path likely missing scroll.
|
||||
- [#4394 — mobile: editing notes offline covers screen in errors](https://github.com/TriliumNext/Trilium/issues/4394) — Needs global offline/connection-lost indicator instead of per-request toasts.
|
||||
- [#4392 — mobile: toggling checkboxes opens keyboard](https://github.com/TriliumNext/Trilium/issues/4392) — Checkbox tap focuses text editor on mobile; CKEditor focus management issue.
|
||||
- [#4389 — Sync error between docker and Windows 0.61.12](https://github.com/TriliumNext/Trilium/issues/4389) — Version mismatch/sync bug from 2023; likely obsolete but needs reporter retest.
|
||||
- [#4254 — Portrait images rotated by 90° after import](https://github.com/TriliumNext/Trilium/issues/4254) — EXIF orientation not honoured on image import/resize pipeline.
|
||||
- [#4221 — SVG zooming regression in 0.61](https://github.com/TriliumNext/Trilium/issues/4221) — SVG viewer dropped zoom handling after 0.59 → 0.61 upgrade.
|
||||
- [#4194 — "Open externally" doesn't work in Flatpak](https://github.com/TriliumNext/Trilium/issues/4194) — Flatpak sandbox TMPDIR scoping; requires Flathub manifest `finish-args` fix rather than codebase change.
|
||||
|
||||
## Feature Requests
|
||||
- [#4837 — Cloud Deployment](https://github.com/TriliumNext/Trilium/issues/4837)
|
||||
- [#4834 — Import PDF files into Canvas notes](https://github.com/TriliumNext/Trilium/issues/4834)
|
||||
- [#4832 — Tag-based note connections for Note Map](https://github.com/TriliumNext/Trilium/issues/4832)
|
||||
- [#4818 — Set zip import options via API](https://github.com/TriliumNext/Trilium/issues/4818)
|
||||
- [#4816 — Public link with search for entire tree](https://github.com/TriliumNext/Trilium/issues/4816)
|
||||
- [#4813 — Sticky horizontal scrollbar for long tables](https://github.com/TriliumNext/Trilium/issues/4813)
|
||||
- [#4811 — Attribute to change document link behaviour (target=_self)](https://github.com/TriliumNext/Trilium/issues/4811)
|
||||
- [#4755 — Enable trilium iframe compatibility](https://github.com/TriliumNext/Trilium/issues/4755)
|
||||
- [#4732 — Flathub Verification](https://github.com/TriliumNext/Trilium/issues/4732)
|
||||
- [#4701 — LanguageTool integration](https://github.com/TriliumNext/Trilium/issues/4701)
|
||||
- [#4691 — Context-Menu Option: "Add backlink to"](https://github.com/TriliumNext/Trilium/issues/4691)
|
||||
- [#4669 — Printed font size configuration](https://github.com/TriliumNext/Trilium/issues/4669)
|
||||
- [#4668 — Create clone target location when it doesn't exist](https://github.com/TriliumNext/Trilium/issues/4668)
|
||||
- [#4651 — Allow embedding webviews into text notes](https://github.com/TriliumNext/Trilium/issues/4651)
|
||||
- [#4612 — Authorization (Basic/Bearer) for /sync endpoints](https://github.com/TriliumNext/Trilium/issues/4612)
|
||||
- [#4606 — Full-text search via SQLite FTS for relevance sorting](https://github.com/TriliumNext/Trilium/issues/4606)
|
||||
- [#4498 — Bulk convert images to attachments](https://github.com/TriliumNext/Trilium/issues/4498)
|
||||
- [#4468 — Toggle for promoted attributes on mobile](https://github.com/TriliumNext/Trilium/issues/4468)
|
||||
- [#4439 — In-app update mechanism](https://github.com/TriliumNext/Trilium/issues/4439)
|
||||
- [#4405 — Vim keybindings: yank/paste system clipboard](https://github.com/TriliumNext/Trilium/issues/4405)
|
||||
- [#4396 — Ordering of templates (templates at top of menu)](https://github.com/TriliumNext/Trilium/issues/4396)
|
||||
- [#4395 — Autocomplete dialog support via scripting API](https://github.com/TriliumNext/Trilium/issues/4395)
|
||||
- [#4384 — Display attachments (PDF, video) directly inside notes](https://github.com/TriliumNext/Trilium/issues/4384)
|
||||
- [#4375 — Allow user-selectable data location](https://github.com/TriliumNext/Trilium/issues/4375)
|
||||
- [#4366 — Static log file name for trilium server (log rotation)](https://github.com/TriliumNext/Trilium/issues/4366)
|
||||
- [#4354 — Cursor always positioned in center of screen (typewriter mode)](https://github.com/TriliumNext/Trilium/issues/4354)
|
||||
- [#4353 — Prevent autocorrecting `...`/`--`/`->` to symbols](https://github.com/TriliumNext/Trilium/issues/4353)
|
||||
- [#4345 — Sync API support for ETAPI](https://github.com/TriliumNext/Trilium/issues/4345)
|
||||
- [#4305 — Encrypted/protected attributes](https://github.com/TriliumNext/Trilium/issues/4305)
|
||||
- [#4299 — Expose protectedSessionService to frontend script API](https://github.com/TriliumNext/Trilium/issues/4299)
|
||||
- [#4296 — Remember last scroll position in a note](https://github.com/TriliumNext/Trilium/issues/4296)
|
||||
- [#4242 — Subscript/superscript keyboard shortcuts](https://github.com/TriliumNext/Trilium/issues/4242)
|
||||
- [#4203 — Export subtree as single MD with nested headings](https://github.com/TriliumNext/Trilium/issues/4203)
|
||||
- [#4199 — Modify note creation/modification times via API](https://github.com/TriliumNext/Trilium/issues/4199)
|
||||
|
||||
## Skipped / Unclear
|
||||
(none — every issue in the batch has been categorized above.)
|
||||
@@ -1,116 +0,0 @@
|
||||
# Batch 10 — Issues #3704–#4192
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#4051 — (Bug report) Protected notes visible in Edited Notes](https://github.com/TriliumNext/Trilium/issues/4051)
|
||||
- **Problem**: The "Edited Notes" sidebar on day notes lists protected notes with their real titles even without an active protected session, leaking encrypted data.
|
||||
- **Proposed solution**: In `apps/server/src/routes/api/revisions.ts` `getEditedNotesOnDate()` (around line 155-189), filter out protected notes when no protected session is active. After `let notes = becca.getNotes(...)`, add a filter using `protectedSessionService.isProtectedSessionAvailable()` (from `apps/server/src/services/protected_session.ts`) to either skip `note.isProtected` rows or replace their title/content with a placeholder, mirroring how other protected-aware endpoints behave.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4150 — Mobile interface, add 'move note' to note menu](https://github.com/TriliumNext/Trilium/issues/4150)
|
||||
- **Problem**: The mobile burger menu previously lacked a "move note" action.
|
||||
- **Proposed solution**: Likely already resolved: `apps/client/src/widgets/mobile_widgets/mobile_detail_menu.tsx` now composes the shared `NoteContextMenu` (`widgets/ribbon/NoteActions.tsx`) which already exposes move commands. A maintainer should confirm the "Move to…" entry actually appears in the mobile dropdown; if not, passing additional tree-action items into `NoteContextMenu` from `mobile_detail_menu.tsx` is a one-file change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#3751 — (Bug report) Logging api.startNote in backend JS script crashes app](https://github.com/TriliumNext/Trilium/issues/3751)
|
||||
- **Problem**: `api.log(api.startNote)` crashes the server because `ws.js` does `JSON.stringify` on an object graph containing circular refs.
|
||||
- **Proposed solution**: In the log sender (grep for `JSON.stringify` in `apps/server/src/services/ws.ts` and/or the backend script api logger in `apps/server/src/services/backend_script_api.ts`), wrap `JSON.stringify` in a try/catch that falls back to a safe stringifier with a circular-reference replacer. Reporter already linked the MDN example.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4178 — api.$container is null error for statistics js script](https://github.com/TriliumNext/Trilium/issues/4178)
|
||||
- **Problem**: Demo "Most edited notes" / "Most type content" scripts fail because `api.$container` is null when the script runs outside a render-widget context.
|
||||
- **Proposed solution**: Likely already fixed by the widget refactor and hidden-subtree demo rework, but a maintainer should verify the demo "Statistics" scripts still exist in the built-in demo content and that they access `api.$container` only when rendered as a render note. If the demo still ships, a null-guard (`if (!api.$container) return;`) in each demo script (`apps/server/src/assets/demo/…` or wherever demo notes live) is a one-liner.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: low
|
||||
|
||||
### [#3746 — (Feature request) add "include title" option in the "include note" windows](https://github.com/TriliumNext/Trilium/issues/3746)
|
||||
- **Problem**: The Include Note dialog offers only a size selector; there is no way to suppress the note title in the rendered inclusion.
|
||||
- **Proposed solution**: Small scope but touches multiple layers: `apps/client/src/widgets/dialogs/include_note.tsx` to add a checkbox, `packages/ckeditor5/src/plugins/includenote.ts` to persist an `includeTitle` (or `showTitle`) attribute alongside `boxSize`, and the client-side include-note renderer in `apps/client/src/services/` (grep for `loadIncludedNote`) to skip the title when set. Still contained to a well-understood area.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#4184 — (Bug report) Search in read-only note does not work](https://github.com/TriliumNext/Trilium/issues/4184)
|
||||
- **Evidence**: `apps/client/src/widgets/find.ts` now explicitly handles `readOnlyTemporarilyDisabled` and picks `htmlHandler` vs `textHandler` based on `noteContext?.isReadOnly()` (lines 245-259). The original 2023 bug was that only the editable text handler was wired up.
|
||||
- **Verification needed**: Maintainer should reproduce in a note with `#readOnly` on the latest build; if search now finds matches, close.
|
||||
|
||||
### [#4058 — (Bug report) API removeLabel() results in duplicated labels upon refreshing](https://github.com/TriliumNext/Trilium/issues/4058)
|
||||
- **Evidence**: This was reported against `zadam/trilium` master in 2023. Label/attribute persistence went through a major rewrite in the becca entity layer since then (see `apps/server/src/becca/entities/battribute.ts` and the `PUT /api/notes/:noteId/attributes` route). The described symptom (stale attributes being re-inserted on refresh) is a classic froca-cache bug that was addressed in the subsequent cache-coherence work.
|
||||
- **Verification needed**: Reproduce the exact script against current master — add/remove label via `note.removeLabel(...)` from `api.runOnBackend` and verify the label stays removed after reopening.
|
||||
|
||||
### [#3834 — (Bug report) chrome extension Trilium Web Clipper save whole page can not show in Trilium note](https://github.com/TriliumNext/Trilium/issues/3834)
|
||||
- **Evidence**: The error trace points at obfuscated CKEditor 5 upcast conversion code that no longer matches the current CKEditor 5 + Trilium plugin set (we're on a much newer CKEditor 5 with rewritten plugins in `packages/ckeditor5/`). Web Clipper code has also been moved into `apps/web-clipper/`.
|
||||
- **Verification needed**: Retest clipping the reporter's URL with current master web clipper + server.
|
||||
|
||||
### [#3868 — docker log show chown operation not permitted](https://github.com/TriliumNext/Trilium/issues/3868)
|
||||
- **Evidence**: Docker image and its entrypoint have been significantly rewritten (see `apps/server/Dockerfile*` and `apps/server/scripts/start-docker.sh`) — the `chown` loop the reporter hit has been replaced with a conditional that respects existing ownership. The `USER_UID`/`USER_GID` flow has been re-worked to avoid `usermod` collisions.
|
||||
- **Verification needed**: A maintainer should pull the latest image on an SMB/NFS share and verify it starts without chown errors.
|
||||
|
||||
### [#4008 — Permissions issue: Can not set UID and GID to '0'](https://github.com/TriliumNext/Trilium/issues/4008)
|
||||
- **Evidence**: Same root cause as #3868 and likely addressed by the same Docker entrypoint rewrite. The `usermod: UID '0' already exists` path was conditional and has since been guarded.
|
||||
- **Verification needed**: Maintainer should test `USER_UID=0 USER_GID=0` with the current Docker image.
|
||||
|
||||
### [#3705 — Changing the size of inclusions in a note](https://github.com/TriliumNext/Trilium/issues/3705)
|
||||
- **Evidence**: Possibly already fixed — `apps/client/src/widgets/dialogs/include_note.tsx` exists and the plugin in `packages/ckeditor5/src/plugins/includenote.ts` stores `boxSize` as a model attribute (so editing is theoretically possible). Grep for a double-click or toolbar action on the `includeNote` widget to confirm there is a "change size" affordance; if none exists, this should move to Notable.
|
||||
- **Verification needed**: Try inserting an Include Note, then right-click or double-click the widget in a current build to see if a size editor appears.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#4192 — Full portable mode](https://github.com/TriliumNext/Trilium/issues/4192) — Needs an Electron launcher that suppresses the console window on Windows and redirects `userData` to the exe directory; touches packaging.
|
||||
- [#4175 — The application freezes when opening the backend log](https://github.com/TriliumNext/Trilium/issues/4175) — Likely a huge-log-file render-blocking issue in `BackendLog.tsx`; needs streaming/virtualization, not a one-liner.
|
||||
- [#4174 — Frontend script API getActiveContextCodeEditor() times out](https://github.com/TriliumNext/Trilium/issues/4174) — Timing issue with `refreshWithNote` vs editor readiness; needs scripting-API investigation.
|
||||
- [#4064 — Hovering over link inside mermaid diagram causes flicker](https://github.com/TriliumNext/Trilium/issues/4064) — Tooltip positioning/pointer-events fix on mermaid link hover; not trivial to get right cross-browser.
|
||||
- [#4043 — Image goes to subnote of main after delete it](https://github.com/TriliumNext/Trilium/issues/4043) — Image-deletion / orphan-attachment behavior in text notes; needs backend+frontend coordination.
|
||||
- [#4029 — Directory redirection sometimes does not lead to the specified directory](https://github.com/TriliumNext/Trilium/issues/4029) — Vague scroll/jump bug in note tree; needs reporter repro but potentially a real race.
|
||||
- [#4010 — Text cursor jumps to EOF instead of next line with internal link title](https://github.com/TriliumNext/Trilium/issues/4010) — CKEditor 5 caret-navigation bug across non-editable reference widgets; upstream-ish.
|
||||
- [#3919 — Internal link is not searchable in the note editor](https://github.com/TriliumNext/Trilium/issues/3919) — CKEditor Find-and-Replace over non-text reference elements.
|
||||
- [#3851 — Can't drag a note to the top of the child list?](https://github.com/TriliumNext/Trilium/issues/3851) — fancytree drag target zone issue for "before first child"; needs careful tree-widget work.
|
||||
- [#3823 — Word-wise matching in search](https://github.com/TriliumNext/Trilium/issues/3823) — Quoted substring search matching within words; touches `apps/server/src/services/search/` tokenizer.
|
||||
- [#3789 — Task daily journal clone disappears when assigning a tag](https://github.com/TriliumNext/Trilium/issues/3789) — Task manager clone logic corner case; needs investigation in demo "Task Manager" scripts.
|
||||
- [#3704 — Trilium always places the cursor at the beginning of the note](https://github.com/TriliumNext/Trilium/issues/3704) — Cursor/scroll-position persistence across note switches; meaningful UX change.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#4179 — Identify the current outline location](https://github.com/TriliumNext/Trilium/issues/4179)
|
||||
- [#4134 — Add 'Expandable' option to Include Note feature](https://github.com/TriliumNext/Trilium/issues/4134)
|
||||
- [#4124 — Labels with predefined lists](https://github.com/TriliumNext/Trilium/issues/4124)
|
||||
- [#4099 — An idea for (perhaps) a better naming of note clones](https://github.com/TriliumNext/Trilium/issues/4099)
|
||||
- [#4080 — Workspace Specific Launchers](https://github.com/TriliumNext/Trilium/issues/4080)
|
||||
- [#4061 — Unix Days as calendar](https://github.com/TriliumNext/Trilium/issues/4061)
|
||||
- [#4052 — File selecting items stored in notes?](https://github.com/TriliumNext/Trilium/issues/4052)
|
||||
- [#4026 — Time attribute field](https://github.com/TriliumNext/Trilium/issues/4026)
|
||||
- [#4023 — Allow launchers to pass arguments to script notes](https://github.com/TriliumNext/Trilium/issues/4023)
|
||||
- [#4005 — ETAPI interface to get note content hash](https://github.com/TriliumNext/Trilium/issues/4005)
|
||||
- [#4002 — Internal link inside mermaid diagram](https://github.com/TriliumNext/Trilium/issues/4002)
|
||||
- [#3983 — API function to refresh search note](https://github.com/TriliumNext/Trilium/issues/3983)
|
||||
- [#3978 — Login page custom background](https://github.com/TriliumNext/Trilium/issues/3978)
|
||||
- [#3964 — API Method to get all notes](https://github.com/TriliumNext/Trilium/issues/3964)
|
||||
- [#3958 — Allow hiding/blocking inherited attributes on template users](https://github.com/TriliumNext/Trilium/issues/3958)
|
||||
- [#3913 — Allow no timeout for protected notes](https://github.com/TriliumNext/Trilium/issues/3913)
|
||||
- [#3906 — Host Trilium Demo Instance](https://github.com/TriliumNext/Trilium/issues/3906)
|
||||
- [#3905 — add central excalidraw library for all canvas notes](https://github.com/TriliumNext/Trilium/issues/3905)
|
||||
- [#3902 — view child notes inside canvas note](https://github.com/TriliumNext/Trilium/issues/3902)
|
||||
- [#3899 — Preserve selected delete/import dialog options](https://github.com/TriliumNext/Trilium/issues/3899)
|
||||
- [#3885 — Fully adhere to the XDG Base Directory Specification](https://github.com/TriliumNext/Trilium/issues/3885)
|
||||
- [#3878 — Sort Lines](https://github.com/TriliumNext/Trilium/issues/3878)
|
||||
- [#3865 — MyScript Handwriting integration](https://github.com/TriliumNext/Trilium/issues/3865)
|
||||
- [#3840 — Allow transclusion as additional note relation in the map](https://github.com/TriliumNext/Trilium/issues/3840)
|
||||
- [#3825 — Office document support](https://github.com/TriliumNext/Trilium/issues/3825)
|
||||
- [#3798 — Take all links referenced in child notes and create a reference page](https://github.com/TriliumNext/Trilium/issues/3798)
|
||||
- [#3794 — Tiling images without resorting to tables](https://github.com/TriliumNext/Trilium/issues/3794)
|
||||
- [#3785 — Standard label for opening default note](https://github.com/TriliumNext/Trilium/issues/3785)
|
||||
- [#3767 — Is there a way to turn off Autoformat completely?](https://github.com/TriliumNext/Trilium/issues/3767)
|
||||
- [#3761 — Template mixins: Grouped inherited promoted attributes](https://github.com/TriliumNext/Trilium/issues/3761)
|
||||
- [#3743 — Minimize/close to tray icon](https://github.com/TriliumNext/Trilium/issues/3743)
|
||||
- [#3729 — Keep sidebar width more consistent](https://github.com/TriliumNext/Trilium/issues/3729)
|
||||
- [#3724 — Paste picture default Settings](https://github.com/TriliumNext/Trilium/issues/3724)
|
||||
- [#3721 — ETAPI: Append to existing note content](https://github.com/TriliumNext/Trilium/issues/3721)
|
||||
- [#3720 — Clone to today](https://github.com/TriliumNext/Trilium/issues/3720)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
_None — every issue in this batch is classified above._
|
||||
@@ -1,102 +0,0 @@
|
||||
# Batch 11 — Issues #3185–#3703
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#3697 — Docker : Set USER_GID to 100 (Feature request)](https://github.com/TriliumNext/Trilium/issues/3697)
|
||||
- **Problem**: `start-docker.sh` runs `groupmod -g ${USER_GID} node`, which fails when GID 100 already exists (e.g. Unraid's default `users` group).
|
||||
- **Proposed solution**: `apps/server/start-docker.sh` line 4 currently uses `groupmod -og ${USER_GID} node` (the `-o` flag allows a non-unique GID). This is likely already the fix — verify the published Docker image ships this and close. If `rootless-entrypoint.sh` still lacks `-o`, add it there too.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high (code already uses `-og`, just needs image-release verification)
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#3516 — (Bug report) Hidden notes appear in search results](https://github.com/TriliumNext/Trilium/issues/3516)
|
||||
- **Evidence**: Search context has `includeHiddenNotes` option; `apps/server/src/services/search/services/parse.ts:503-510` wraps the query with `NotExp(new IsHiddenExp())` when `includeHiddenNotes` is false. `git log -S "IsHiddenExp"` shows commit `88bc7402a2` "hidden notes should not appear in the global search unless hoisted into it, #3516".
|
||||
- **Verification needed**: Reproducer on a fresh 0.9x build — confirm `_hidden` subtree notes no longer show in global search.
|
||||
|
||||
### [#3627 — Invalid timezone in search using docker container](https://github.com/TriliumNext/Trilium/issues/3627)
|
||||
- **Evidence**: Docker user guide (`apps/server/src/assets/doc_notes/.../Using Docker.html` around line 81) already has a "Note on timezones" section recommending setting the `TZ` env var. The reporter's suggestion was to document this.
|
||||
- **Verification needed**: Maintainer can close as already documented (or link the docs section from the issue).
|
||||
|
||||
### [#3191 — (Feature request) Add ability to set X-Frame-Options header](https://github.com/TriliumNext/Trilium/issues/3191)
|
||||
- **Evidence**: `apps/server/src/app.ts:82` uses helmet with only a few options overridden; Helmet's default frameguard is `SAMEORIGIN`, not `DENY`. The reporter's complaint was that DENY was being set — current defaults are already SAMEORIGIN.
|
||||
- **Verification needed**: `curl -I` against a running instance, confirm the header value, close if SAMEORIGIN.
|
||||
|
||||
### [#3524 — Error in custom widget leads to blank application / web frontend](https://github.com/TriliumNext/Trilium/issues/3524)
|
||||
- **Evidence**: `git log -S "custom widget"` shows `528d94a8fb` "accept custom widgets as classes instead of instances, #4274" and `7567903da3` "docs(user): improve documentation on custom widgets & Preact". The widget loading pipeline has been significantly restructured and now tolerates class-based widgets; unhandled doRender errors are caught higher in the widget tree in the new Preact-based rendering.
|
||||
- **Verification needed**: Create a broken custom widget (call missing method), confirm app still renders with error logged instead of blanking.
|
||||
|
||||
### [#3415 — Unify the attribute_detail and builtin_attributes definitions](https://github.com/TriliumNext/Trilium/issues/3415)
|
||||
- **Evidence**: `packages/commons/src/lib/builtin_attributes.ts` now exists as the shared source of truth (moved in commit `9b3396349e` "refactor(commons): add builtin_attributes to commons"). However, `apps/client/src/widgets/attribute_widgets/attribute_detail.ts:202-271` still maintains its own hardcoded `ATTR_HELP` map. Partial unification.
|
||||
- **Verification needed**: Decide whether to close (partial unification done) or keep open as a refactor to have `attribute_detail` consume `builtin_attributes` entries and attach help text there.
|
||||
|
||||
### [#3218 — Starting searches with "Combining Diacritical Marks" will freeze Trilium](https://github.com/TriliumNext/Trilium/issues/3218)
|
||||
- **Evidence**: `apps/server/src/services/utils.ts:108` normalizes input text before search, and commit `f705c432fd` "allow combining tokens in text and title/attributes, fixes #2820" rewrote combining-character handling.
|
||||
- **Verification needed**: Try entering `¨` in quick search on current build — confirm no freeze.
|
||||
|
||||
### [#3355 — Global search finds notes with 'whitespace' inside search term](https://github.com/TriliumNext/Trilium/issues/3355)
|
||||
- **Evidence**: The search tokenizer was rewritten alongside the sqlite FTS work (`git log --grep rice-searching-with-sqlite`), and text is normalized via `str.normalize("NFC")` in `apps/server/src/services/utils.ts:532`.
|
||||
- **Verification needed**: Attempt the whitespace-in-term reproduction against a recent build. Likely no longer reproduces.
|
||||
|
||||
### [#3626 — Sync from clients to server fails for a specific daily journal note](https://github.com/TriliumNext/Trilium/issues/3626)
|
||||
- **Evidence**: Reporter's error was "Can't find note 0LKt6C8L7y3s" in `resolveNotePathToSegments`. Sync engine and `froca.resolveNotePathToSegments` have been heavily refactored since 0.58; orphaned branches during sync are now tolerated rather than throwing fatal errors.
|
||||
- **Verification needed**: Nothing to reproduce from the stale db. Close as stale / cannot-reproduce.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#3703 — Disable version history function failure](https://github.com/TriliumNext/Trilium/issues/3703) — `disableVersioning` check exists in `notes.ts:741`, reporter claims revisions still get saved after a period; needs repro against read-only auto-save path.
|
||||
- [#3657 — New Note link not showing at cursor location after hitting "enter"](https://github.com/TriliumNext/Trilium/issues/3657) — CKEditor mention plugin: new-note insertion ignores caret when template picker is confirmed with Enter. Needs CKEditor mention fix.
|
||||
- [#3600 — sync lag](https://github.com/TriliumNext/Trilium/issues/3600) — Canvas sync conflicts from stale client cache; complex sync logic change.
|
||||
- [#3587 — ResizeObserver loop limit exceeded](https://github.com/TriliumNext/Trilium/issues/3587) — console spam on split; requires debouncing ResizeObserver callbacks in `content_header.ts` / `tab_row.ts`.
|
||||
- [#3500 — Trilium does not start if the firewall has blocked it](https://github.com/TriliumNext/Trilium/issues/3500) — needs electron-level error surfacing when initial localhost connection fails; not trivial.
|
||||
- [#3495 — High memory use causing process kill or OOM](https://github.com/TriliumNext/Trilium/issues/3495) — memory leak investigation in sync process; requires profiling.
|
||||
- [#3478 — Lagging Trilium frontend when editing large note](https://github.com/TriliumNext/Trilium/issues/3478) — CKEditor `setData` re-run on every poll; requires changing debounce strategy in `EditableText.tsx`.
|
||||
- [#3457 — Strange behavior when dealing with math related contents](https://github.com/TriliumNext/Trilium/issues/3457) — cursor skipping inline math + Firefox-specific math disappearance; upstream CKEditor math bugs.
|
||||
- [#3395 — Reloading while editing a text field in a canvas note causes permanent invisibility](https://github.com/TriliumNext/Trilium/issues/3395) — Excalidraw `editingGroupId` persisted into saved JSON; needs canvas save-state sanitisation.
|
||||
- [#3371 — Can not save weibo.com](https://github.com/TriliumNext/Trilium/issues/3371) — web-clipper compatibility with a specific site; needs clipper debugging.
|
||||
- [#3283 — Misplaced links to newly created pages](https://github.com/TriliumNext/Trilium/issues/3283) — mouse-click confirmation of template picker drops caret; CKEditor mention plugin issue.
|
||||
- [#3235 — JavaScript error popup - ERR_ONNECTION_RESET](https://github.com/TriliumNext/Trilium/issues/3235) — main process crash popup; needs electron main-process error handler.
|
||||
- [#3214 — cursor jumps to another place after click included note](https://github.com/TriliumNext/Trilium/issues/3214) — CKEditor selection restoration after include-note click; non-trivial.
|
||||
- [#3187 — HTML export results in unreadable notes on deeper parts of the tree](https://github.com/TriliumNext/Trilium/issues/3187) — Windows MAX_PATH limits on deep hierarchies; needs export path shortening.
|
||||
- [#3185 — Export & import note tree with backlinks breaks note map](https://github.com/TriliumNext/Trilium/issues/3185) — dangling relation targets cause `hasLabel` on undefined; needs null-guard in backlink/note-map routes (borderline easy but depends on root cause investigation of why deleted relations survive import).
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#3633 — Take a snapshot of a web page in Trilium](https://github.com/TriliumNext/Trilium/issues/3633)
|
||||
- [#3593 — Ability to disable jumping to an image when an image is attached](https://github.com/TriliumNext/Trilium/issues/3593)
|
||||
- [#3566 — Add search action to copy note](https://github.com/TriliumNext/Trilium/issues/3566)
|
||||
- [#3563 — LeftPanel fix width and toggle](https://github.com/TriliumNext/Trilium/issues/3563)
|
||||
- [#3557 — full text search by command line](https://github.com/TriliumNext/Trilium/issues/3557)
|
||||
- [#3556 — Automatically set note code type when extension is written in note name](https://github.com/TriliumNext/Trilium/issues/3556)
|
||||
- [#3551 — Context Menu Widget](https://github.com/TriliumNext/Trilium/issues/3551)
|
||||
- [#3541 — How to config the font color sets](https://github.com/TriliumNext/Trilium/issues/3541)
|
||||
- [#3540 — Unhoist temporarily](https://github.com/TriliumNext/Trilium/issues/3540)
|
||||
- [#3498 — More signals for search & autocomplete ranking](https://github.com/TriliumNext/Trilium/issues/3498)
|
||||
- [#3494 — Value replace in bulk action](https://github.com/TriliumNext/Trilium/issues/3494)
|
||||
- [#3493 — Dynamic relations, or attribute inheritance between linked notes](https://github.com/TriliumNext/Trilium/issues/3493)
|
||||
- [#3484 — add a keyshort for any format when write a text note](https://github.com/TriliumNext/Trilium/issues/3484)
|
||||
- [#3462 — Color palette for Highlight](https://github.com/TriliumNext/Trilium/issues/3462)
|
||||
- [#3458 — Show special characters in editor](https://github.com/TriliumNext/Trilium/issues/3458)
|
||||
- [#3433 — Provide a set of charts in the hidden subtree](https://github.com/TriliumNext/Trilium/issues/3433)
|
||||
- [#3430 — Add basic fulltext search to share](https://github.com/TriliumNext/Trilium/issues/3430)
|
||||
- [#3426 — search and replace](https://github.com/TriliumNext/Trilium/issues/3426)
|
||||
- [#3400 — Setting to disable replacement of straight quote sign with typographic ones](https://github.com/TriliumNext/Trilium/issues/3400)
|
||||
- [#3399 — Export Notes option to include internal links](https://github.com/TriliumNext/Trilium/issues/3399)
|
||||
- [#3389 — Images upload sequence on mobile](https://github.com/TriliumNext/Trilium/issues/3389)
|
||||
- [#3385 — Searching through note revisions?](https://github.com/TriliumNext/Trilium/issues/3385)
|
||||
- [#3358 — Is there a plan to add a table of contents function to the left side](https://github.com/TriliumNext/Trilium/issues/3358)
|
||||
- [#3356 — Collapsed child notes links should toggle the expansion on first click](https://github.com/TriliumNext/Trilium/issues/3356)
|
||||
- [#3353 — Support extra CA certs](https://github.com/TriliumNext/Trilium/issues/3353)
|
||||
- [#3335 — Use mouse wheel to scroll up/down instead of zoom in mermaid notes](https://github.com/TriliumNext/Trilium/issues/3335)
|
||||
- [#3304 — Add shortcut (set text to code format)](https://github.com/TriliumNext/Trilium/issues/3304)
|
||||
- [#3269 — Declare some relation as "repeated but unique"](https://github.com/TriliumNext/Trilium/issues/3269)
|
||||
- [#3268 — Accept drag-and-dropping note links into relation map](https://github.com/TriliumNext/Trilium/issues/3268)
|
||||
- [#3267 — Multiple note drag-and-drop into relation map](https://github.com/TriliumNext/Trilium/issues/3267)
|
||||
- [#3266 — Automatic layout on relation maps](https://github.com/TriliumNext/Trilium/issues/3266)
|
||||
- [#3263 — Generalized Trilium tree](https://github.com/TriliumNext/Trilium/issues/3263)
|
||||
- [#3246 — Is it possible to integrate the plantUML?](https://github.com/TriliumNext/Trilium/issues/3246)
|
||||
- [#3244 — Add option, prompt before exit](https://github.com/TriliumNext/Trilium/issues/3244)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- None — all 58 issues placed above.
|
||||
@@ -1,107 +0,0 @@
|
||||
# Batch 12 — Issues #2488–#3184
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#3151 — (Bug report) Import from HTML does not restore indentation](https://github.com/TriliumNext/Trilium/issues/3151)
|
||||
- **Problem**: Exported HTML has `style="margin-left:40px"` on `<p>` but importing strips that style, losing indentation.
|
||||
- **Proposed solution**: In `/home/elian/Projects/Trilium/apps/server/src/services/html_sanitizer.ts` (line ~49 `allowedStyles`), add `margin-left` (and likely `padding-left`, `text-align`) to the allowed styles for `p` (or `*`). Currently only `color`/`background-color` are globally allowed; the entire `style` attribute is preserved but sanitize-html strips unknown properties.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#2817 — open internal link in OSX apps](https://github.com/TriliumNext/Trilium/issues/2817)
|
||||
- **Problem**: `bookends:` URLs don't open externally from notes because the protocol isn't in the allow-list.
|
||||
- **Proposed solution**: Add `bookends` (and any other commonly requested scheme) to `ALLOWED_PROTOCOLS` in `/home/elian/Projects/Trilium/packages/commons/src/lib/shared_constants.ts`. The CKEditor/link handler already calls `electron.shell.openExternal` for allowed protocols (see `apps/client/src/services/link.ts:338`).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium (fix is trivial; user may also need CKEditor to permit `bookends:` hrefs in the schema)
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#3177 — (Bug report) ERR_SOCKET_BAD_PORT - port set to NaN on server start](https://github.com/TriliumNext/Trilium/issues/3177)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/server/src/services/port.ts` now uses `parseAndValidate()` that explicitly checks `isNaN` and exits with a clear FATAL message; v0.55 parser issue appears rewritten.
|
||||
- **Verification needed**: Ask reporter to retry with current release and provide `config.ini` if still failing.
|
||||
|
||||
### [#3045 — Docker : Can't run by using user 1000:1000](https://github.com/TriliumNext/Trilium/issues/3045)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/server/Dockerfile.rootless` now exists — runs as non-root user with configurable UID/GID via build args and does not rely on `su-exec`/`setgroups`. Multiple rootless-related fixes present in git log.
|
||||
- **Verification needed**: Confirm with reporter that the rootless image solves their scenario.
|
||||
|
||||
### [#2957 — (Bug report) JavaScript error when attempting to run when an instance is already running](https://github.com/TriliumNext/Trilium/issues/2957)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/desktop/src/main.ts:87` uses `app.requestSingleInstanceLock()` and exits gracefully (`process.exit(0)`) with a translated info message instead of throwing an unhandled error. There's also a `second-instance` handler that focuses the existing window.
|
||||
- **Verification needed**: Run two instances on Windows to confirm no more JS error.
|
||||
|
||||
### [#2722 — (Feature request) Make interface auth timeout configurable](https://github.com/TriliumNext/Trilium/issues/2722)
|
||||
- **Evidence**: `Session.cookieMaxAge` is configurable in `apps/server/src/assets/config-sample.ini` (line 39) and documented in `apps/server/src/assets/doc_notes/en/User Guide/.../Authentication.html`. Used by `apps/server/src/routes/session_parser.ts:110`.
|
||||
- **Verification needed**: Close as implemented, link to Authentication docs.
|
||||
|
||||
### [#2784 — (Feature request) Add an example documentation for self-signed certs in TLS configuration wiki page](https://github.com/TriliumNext/Trilium/issues/2784)
|
||||
- **Evidence**: `docs/User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS).md` contains 3 matches for `self-signed`/`self sign`, so self-signed guidance is now present.
|
||||
- **Verification needed**: Maintainer confirms current doc covers the scenario the reporter wanted.
|
||||
|
||||
### [#2909 — webclipper show not correct](https://github.com/TriliumNext/Trilium/issues/2909)
|
||||
- **Evidence**: Web-clipper was completely rewritten — new implementation lives in `apps/web-clipper/` (WXT-based). The reporter's 0.52.2-era bug with the old zadam web-clipper is no longer reproducible against the new codebase.
|
||||
- **Verification needed**: Ask reporter to retry with the current web-clipper.
|
||||
|
||||
### [#2621 — (Bug report) Inconsistency import pictures with Trilium Web Clipper Addon](https://github.com/TriliumNext/Trilium/issues/2621)
|
||||
- **Evidence**: Same as #2909 — web-clipper rewritten under `apps/web-clipper/`; old image-import inconsistency from v0.50 won't reproduce.
|
||||
- **Verification needed**: Ask reporter to retry "Save whole page" against modern web-clipper.
|
||||
|
||||
### [#2596 — (Bug report) Failed Start Up (Gnome Arc Menu extension)](https://github.com/TriliumNext/Trilium/issues/2596)
|
||||
- **Evidence**: Likely dead — Electron stack, Gnome shell extensions, and everything else has been updated many times since v0.49.5 (Jan 2022). No code in Trilium controls this; it's a third-party shell extension conflict.
|
||||
- **Verification needed**: Ask reporter to retry current release with Arc Menu; close as stale if not reproducible.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#3121 — (Bug report) write math inline, the text panel will delete things that i wrote before](https://github.com/TriliumNext/Trilium/issues/3121) — CKEditor `model-nodelist-offset-out-of-bounds` with math; CKEditor upgraded to v48 (from v29 era) so may be resolved but needs repro.
|
||||
- [#3015 — (Bug report) Template collision for Code note](https://github.com/TriliumNext/Trilium/issues/3015) — Journal day-note template incorrectly applied to non-text child creation; needs investigation in `apps/server/src/services/notes.ts` template resolution logic.
|
||||
- [#3123 — Moving notes in the tree - default encryption state](https://github.com/TriliumNext/Trilium/issues/3123) — Needs UX design for encryption prompt on move into/out of protected subtree.
|
||||
- [#2841 — (Bug report) When an unordered list has a sublist, click on the right side...](https://github.com/TriliumNext/Trilium/issues/2841) — CKEditor cursor-placement bug; likely upstream.
|
||||
- [#2833 — (Bug report) Cannot select relation note to edit on mobile](https://github.com/TriliumNext/Trilium/issues/2833) — Mobile UX bug in relation map; mobile code has been rewritten, needs retest.
|
||||
- [#2823 — (Bug report) Note link got removed when close tab with middle button](https://github.com/TriliumNext/Trilium/issues/2823) — CKEditor interaction with middle-click; may be CKE upgrade related.
|
||||
- [#2818 — copy/paste pictures across software](https://github.com/TriliumNext/Trilium/issues/2818) — Cross-process image clipboard sharing in portable mode; complex.
|
||||
- [#2816 — (Bug report) The picture reference in shared notes is not normal](https://github.com/TriliumNext/Trilium/issues/2816) — MD export image path uses relative `api/images/...` URLs that break when note is rendered outside `/share/` context.
|
||||
- [#2804 — Sometimes tree fails to switch focus to a code note branch in split mode](https://github.com/TriliumNext/Trilium/issues/2804) — Focus/event propagation race in split-view; hard to repro.
|
||||
- [#2703 — (Bug report) @ link item dropdown persists between tabs](https://github.com/TriliumNext/Trilium/issues/2703) — CKEditor mention UI lifecycle; likely upstream.
|
||||
- [#2874 — (Bug report) select over two notes could not export](https://github.com/TriliumNext/Trilium/issues/2874) — Export menu item is gated on `noSelectedNotes` in `apps/client/src/menus/tree_context_menu.ts:276`; intentional-ish but still surprising UX — needs multi-select export support.
|
||||
- [#2651 — (Bug report) Deleting Several Items creates GET error](https://github.com/TriliumNext/Trilium/issues/2651) — Transient error during bulk delete; race condition hard to pin down.
|
||||
- [#2604 — (Bug report) After inserting 2 links into checkbox list item, can't add more text after second link](https://github.com/TriliumNext/Trilium/issues/2604) — CKEditor list+link bug; possibly fixed in v48 upgrade but needs repro.
|
||||
- [#2549 — Random notes lose their content, old revs still available](https://github.com/TriliumNext/Trilium/issues/2549) — Serious data-loss report tied to old 0.47/0.49 sync migration path; unlikely actionable now but should stay open as reference.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#3184 — Auto-setup links when creating a template](https://github.com/TriliumNext/Trilium/issues/3184)
|
||||
- [#3148 — Detect database failure and offer to temporarily load database](https://github.com/TriliumNext/Trilium/issues/3148)
|
||||
- [#3138 — Template organization via template groups with drop-down menus](https://github.com/TriliumNext/Trilium/issues/3138)
|
||||
- [#3130 — Latex in titles](https://github.com/TriliumNext/Trilium/issues/3130)
|
||||
- [#3112 — Ability to annotate/insert comments on note contents](https://github.com/TriliumNext/Trilium/issues/3112)
|
||||
- [#3098 — Focus on the searched word](https://github.com/TriliumNext/Trilium/issues/3098)
|
||||
- [#3082 — Option to open notes in new tab by default](https://github.com/TriliumNext/Trilium/issues/3082)
|
||||
- [#3053 — Restore previous windows and tabs open on startup](https://github.com/TriliumNext/Trilium/issues/3053)
|
||||
- [#3037 — Upgrade the Relation Map](https://github.com/TriliumNext/Trilium/issues/3037)
|
||||
- [#2989 — Can make "Find and Replace" allow Regular Expression?](https://github.com/TriliumNext/Trilium/issues/2989)
|
||||
- [#2972 — Make lines of Relation map straight](https://github.com/TriliumNext/Trilium/issues/2972)
|
||||
- [#2960 — Internal links in Canvas](https://github.com/TriliumNext/Trilium/issues/2960)
|
||||
- [#2923 — Adding 'Ignore' spellcheck function into context menu](https://github.com/TriliumNext/Trilium/issues/2923)
|
||||
- [#2870 — Hope add import folder and generates notetree](https://github.com/TriliumNext/Trilium/issues/2870)
|
||||
- [#2869 — Allow bypass/whitelist authentication for specific IP or subnet](https://github.com/TriliumNext/Trilium/issues/2869)
|
||||
- [#2802 — Shared SQL between SQL code notes](https://github.com/TriliumNext/Trilium/issues/2802)
|
||||
- [#2797 — A quicker way to create a bunch of new pages from a template](https://github.com/TriliumNext/Trilium/issues/2797)
|
||||
- [#2741 — Publish checksum of published assets](https://github.com/TriliumNext/Trilium/issues/2741)
|
||||
- [#2726 — Block References in Trilium Like in (Obsidian and Logseq)](https://github.com/TriliumNext/Trilium/issues/2726)
|
||||
- [#2710 — Open new tabs next to the current one](https://github.com/TriliumNext/Trilium/issues/2710)
|
||||
- [#2683 — Trigger asking whether to delete empty note more aggressively](https://github.com/TriliumNext/Trilium/issues/2683)
|
||||
- [#2664 — Allow unsharing of notes in a shared subtree](https://github.com/TriliumNext/Trilium/issues/2664)
|
||||
- [#2654 — Server to Server Sync](https://github.com/TriliumNext/Trilium/issues/2654)
|
||||
- [#2637 — Allow Styling of mini date selector](https://github.com/TriliumNext/Trilium/issues/2637)
|
||||
- [#2636 — Tabbing off field with dropdown selected should select](https://github.com/TriliumNext/Trilium/issues/2636)
|
||||
- [#2631 — Add service worker for caching large assets](https://github.com/TriliumNext/Trilium/issues/2631)
|
||||
- [#2622 — Disable sync for certain notes](https://github.com/TriliumNext/Trilium/issues/2622)
|
||||
- [#2620 — Add expiration date & max requests for shared notes](https://github.com/TriliumNext/Trilium/issues/2620)
|
||||
- [#2547 — automatically import the page title from url](https://github.com/TriliumNext/Trilium/issues/2547)
|
||||
- [#2544 — Forms/Fields in a template?](https://github.com/TriliumNext/Trilium/issues/2544)
|
||||
- [#2526 — simple recurring todo](https://github.com/TriliumNext/Trilium/issues/2526)
|
||||
- [#2524 — Ability to add custom shortcuts to the note toolbar](https://github.com/TriliumNext/Trilium/issues/2524)
|
||||
- [#2491 — Add improvements to internal links](https://github.com/TriliumNext/Trilium/issues/2491)
|
||||
- [#2488 — Show attributes on shared notes](https://github.com/TriliumNext/Trilium/issues/2488)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
(None — all batch issues are classified above.)
|
||||
@@ -1,95 +0,0 @@
|
||||
# Batch 13 — Issues #1763–#2477
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#2362 — "Delete all clones" checkbox should have a different message if there are no clones](https://github.com/TriliumNext/Trilium/issues/2362)
|
||||
- **Problem**: The "Delete all clones" checkbox is always rendered in the delete dialog even when the note has no clones, confusing users who don't know whether to tick it.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/delete_notes.tsx`, compute the clone count from `noteIdsToBeDeleted` vs the branch count (or use a server-returned count). When `cloneCount <= 1`, render an info alert like "This note has no clones" instead of the `FormCheckbox`. When clones exist, append the count to the label (`delete_notes.delete_all_clones_description_n`). Add the new translation keys to `apps/client/src/translations/en/translation.json`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — may need to thread a clone count through `delete-notes-preview` response if not already available.
|
||||
|
||||
### [#2455 — Various feature requests (new-tab autocomplete focus portion only)](https://github.com/TriliumNext/Trilium/issues/2455)
|
||||
- **Problem**: When opening a new tab, the caret is no longer inside the "search for a note by its name" autocomplete field; user has to manually click it.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/Empty.tsx`, add `autocompleteRef.current?.focus()` inside the existing `useEffect` that calls `note_autocomplete.showRecentNotes`. Only the focus subpart of this meta-issue is easy; the other sub-items (Tab navigation in search results, shortcut collisions inside search field, scroll shortcuts) are not in scope.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high for the focus part only.
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#2290 — ERROR: Failed to deserialize sync response: Option "documentSecret" doesn't exist](https://github.com/TriliumNext/Trilium/issues/2290)
|
||||
- **Evidence**: `apps/server/src/services/options_init.ts` lines 10–13 call `initDocumentOptions()` which unconditionally creates `documentId` and `documentSecret` with `randomSecureToken(16)`. The option is also referenced in `sync.ts`, `setup.ts`, and the commons `options_interface.ts`. Sync/setup flow was rewritten since v0.48.
|
||||
- **Verification needed**: Have a maintainer reproduce the "remote docker killed mid-sync" scenario against a current build; the missing option should now be seeded.
|
||||
|
||||
### [#2340 — Denial of Service (setup page spawning main windows)](https://github.com/TriliumNext/Trilium/issues/2340)
|
||||
- **Evidence**: `apps/server/src/routes/setup.ts` no longer calls `createMainWindow` directly on the unauthenticated setup endpoint. It renders a setup page and only calls `windowService.createMainWindow(app)` from `handleElectronRedirect()` after the DB is already initialized. Commit `a155b6e8d5` ("create separate window for setup and then main window") addressed this.
|
||||
- **Verification needed**: Confirm that an unauthenticated `/setup` request against the current desktop build no longer spawns windows.
|
||||
|
||||
### [#2239 — Docker Compose file needs to be updated](https://github.com/TriliumNext/Trilium/issues/2239)
|
||||
- **Evidence**: `git log` shows commit `78b6614eea` "fix docker-compose.yml #2239" and `883e71612c` "Use `triliumnext/notes` as image in `docker-compose.yml`". The new compose file uses the correct image name and a persisted volume.
|
||||
- **Verification needed**: Run the repo's current `docker-compose.yml` and confirm data persists in the named volume.
|
||||
|
||||
### [#2413 — Note map does not display inherited relations](https://github.com/TriliumNext/Trilium/issues/2413)
|
||||
- **Evidence**: `apps/server/src/routes/api/note_map.ts` line 61 uses `note.getRelations()`, and `apps/server/src/becca/entities/bnote.ts` line 657 defines `getRelations()` as `getAttributes(RELATION, name)` which explicitly includes inherited attributes (the doc comment says "including inherited ones"). Only `template`/`inherit` relation names are filtered out (line 57), not the inherited relations themselves.
|
||||
- **Verification needed**: Reproduce with Template + Instance, open note map on Instance, confirm the `testRelation` edge to Target now appears.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
|
||||
- [#2350 — Out of memory on large DB](https://github.com/TriliumNext/Trilium/issues/2350) — Docker OOM with a 2.7 GB document.db; needs profiling of note cache load / backup code paths.
|
||||
- [#2163 — Uploading large .aac broke sync](https://github.com/TriliumNext/Trilium/issues/2163) — Large-file upload causing corrupt branch state + JS heap OOM on sync; deep investigation into sync chunking needed.
|
||||
- [#2141 — Broken database causes web UI to not load](https://github.com/TriliumNext/Trilium/issues/2141) — When saved-search deletion corrupted the DB, client rendered a blank page instead of an error; needs better error boundary + recovery.
|
||||
- [#2050 — content with lot of pdf attachments not sync between multi-client and server](https://github.com/TriliumNext/Trilium/issues/2050) — Sync of notes with many large attachments ends up with a crumbled tree; sync service bug.
|
||||
- [#2060 — trilium-server will not sync with trilium-desktop over TLS; ERR_CERT_AUTHORITY_INVALID](https://github.com/TriliumNext/Trilium/issues/2060) — Need docs and/or a "trust this cert" option in desktop sync settings.
|
||||
- [#2278 — Image on side pane unloads when switching focus to other pane](https://github.com/TriliumNext/Trilium/issues/2278) — Split-pane image widget unloads the image on focus change; type-widget lifecycle bug.
|
||||
- [#2326 — Image at very top of note can't show 'Insert new line' arrow; margin issues](https://github.com/TriliumNext/Trilium/issues/2326) — CKEditor top-margin/image toolbar collision; needs CSS tweaks in the editor image plugin.
|
||||
- [#1813 — Note title input on mobile (caret jumps around)](https://github.com/TriliumNext/Trilium/issues/1813) — Mobile Chrome title editing; likely a contenteditable interaction bug.
|
||||
- [#1883 — Exporting HTML files in zip with special characters ISSUE](https://github.com/TriliumNext/Trilium/issues/1883) — `sanitize-filename` is used but reporter shows dataerror during decompression; may need proper UTF-8 filename encoding in zip writer (EFS flag).
|
||||
- [#1877 — No distinction between undefined and false in a boolean promoted attribute](https://github.com/TriliumNext/Trilium/issues/1877) — Promoted boolean checkbox renders `valueAttr.value === "true"`, so unset looks identical to explicitly false; would need a tri-state UI.
|
||||
- [#2092 — web clipper doesn't import code snippets](https://github.com/TriliumNext/Trilium/issues/2092) — Parser bug in web clipper extension.
|
||||
- [#2323 — MoveTo and CloneTo should suggest destinations not sources](https://github.com/TriliumNext/Trilium/issues/2323) — Need a separate "recent destinations" tracker distinct from `note_autocomplete.triggerRecentNotes` which shows recently visited notes.
|
||||
- [#2128 — Workspace name in tab title](https://github.com/TriliumNext/Trilium/issues/2128) — `tab_manager.updateDocumentTitle` / `note_context.getNavigationTitle` would need workspace (hoisted) context added.
|
||||
- [#2212 — Ctrl+W on root note should close Trilium](https://github.com/TriliumNext/Trilium/issues/2212) — `removeNoteContext` explicitly short-circuits when the last tab is empty; closing Trilium itself requires electron-specific IPC.
|
||||
- [#1847 — autoReadOnly delay](https://github.com/TriliumNext/Trilium/issues/1847) — Request for a delay/temporary-edit-mode shortcut; needs a design decision and option surface.
|
||||
|
||||
## Feature Requests
|
||||
|
||||
- [#2477 — Automatically delete and/or unhide unsaved notes](https://github.com/TriliumNext/Trilium/issues/2477)
|
||||
- [#2473 — Show branch prefix in quick search (for protected notes)](https://github.com/TriliumNext/Trilium/issues/2473)
|
||||
- [#2420 — Link between labels with date values and daily journal notes](https://github.com/TriliumNext/Trilium/issues/2420)
|
||||
- [#2404 — Full-Text Search results list like Google](https://github.com/TriliumNext/Trilium/issues/2404)
|
||||
- [#2391 — One-click installation on CapRover](https://github.com/TriliumNext/Trilium/issues/2391)
|
||||
- [#2363 — Better support for linking notes from Mermaid diagrams](https://github.com/TriliumNext/Trilium/issues/2363)
|
||||
- [#2354 — Group together pages under same path in Edited Notes](https://github.com/TriliumNext/Trilium/issues/2354)
|
||||
- [#2351 — Documentation/example for mobile frontend plugin buttons](https://github.com/TriliumNext/Trilium/issues/2351)
|
||||
- [#2330 — A note that collects all the unfinished todo items from other notes](https://github.com/TriliumNext/Trilium/issues/2330)
|
||||
- [#2303 — Note Map Live Update](https://github.com/TriliumNext/Trilium/issues/2303)
|
||||
- [#2293 — When "Including note", select which section to include based on markdown header](https://github.com/TriliumNext/Trilium/issues/2293)
|
||||
- [#2281 — If note already open in another tab, switch to it](https://github.com/TriliumNext/Trilium/issues/2281)
|
||||
- [#2261 — Start url for chrome/brave/edge "create shortcut" feature](https://github.com/TriliumNext/Trilium/issues/2261)
|
||||
- [#2259 — VIM support (embedded nvim)](https://github.com/TriliumNext/Trilium/issues/2259)
|
||||
- [#2203 — Option to not expand a subtree when opening a subnote](https://github.com/TriliumNext/Trilium/issues/2203)
|
||||
- [#2186 — today, tomorrow, yesterday search terms to link to day pages](https://github.com/TriliumNext/Trilium/issues/2186)
|
||||
- [#2185 — Make Alt+T in editor insert link to current day's page](https://github.com/TriliumNext/Trilium/issues/2185)
|
||||
- [#2181 — Change note icon for folder note with content vs without content](https://github.com/TriliumNext/Trilium/issues/2181)
|
||||
- [#2159 — jsplumb, add node groups function](https://github.com/TriliumNext/Trilium/issues/2159)
|
||||
- [#2115 — Cite reference like Zettlr (BibTeX)](https://github.com/TriliumNext/Trilium/issues/2115)
|
||||
- [#2064 — Improve the default layout of the link map](https://github.com/TriliumNext/Trilium/issues/2064)
|
||||
- [#2053 — Allow search to search for dates in different formats](https://github.com/TriliumNext/Trilium/issues/2053)
|
||||
- [#2051 — Embedding youtube/vimeo videos](https://github.com/TriliumNext/Trilium/issues/2051)
|
||||
- [#1991 — Relation Constraints](https://github.com/TriliumNext/Trilium/issues/1991)
|
||||
- [#1967 — Manually save note revision and add comment](https://github.com/TriliumNext/Trilium/issues/1967)
|
||||
- [#1958 — Bulk note creation and linking](https://github.com/TriliumNext/Trilium/issues/1958)
|
||||
- [#1950 — Attributes and searches inclusion in notes body (transclusion)](https://github.com/TriliumNext/Trilium/issues/1950)
|
||||
- [#1949 — Inheritance fine control](https://github.com/TriliumNext/Trilium/issues/1949)
|
||||
- [#1946 — Show attributes (relations) on link map](https://github.com/TriliumNext/Trilium/issues/1946)
|
||||
- [#1927 — Note Stacking for rich navigation UX](https://github.com/TriliumNext/Trilium/issues/1927)
|
||||
- [#1921 — UI improvement for dangling links](https://github.com/TriliumNext/Trilium/issues/1921)
|
||||
- [#1909 — One-way asymmetric encryption of notes](https://github.com/TriliumNext/Trilium/issues/1909)
|
||||
- [#1853 — Additional suggestions about Zotero integration](https://github.com/TriliumNext/Trilium/issues/1853)
|
||||
- [#1850 — Collapsable bullets](https://github.com/TriliumNext/Trilium/issues/1850)
|
||||
- [#1826 — Support insertDateTimeToText shortcut for labels](https://github.com/TriliumNext/Trilium/issues/1826)
|
||||
- [#1772 — Change or disable ckeditor's automatic text transformation](https://github.com/TriliumNext/Trilium/issues/1772)
|
||||
- [#1763 — Custom title for saved search results](https://github.com/TriliumNext/Trilium/issues/1763)
|
||||
|
||||
## Skipped / Unclear
|
||||
|
||||
- [#2455 — Various feature requests](https://github.com/TriliumNext/Trilium/issues/2455) — Meta-issue bundling multiple unrelated requests; only the new-tab focus portion is actionable as an easy fix (listed above), the rest (Tab navigation, keybinding collisions, scroll shortcuts) need separate issues.
|
||||
@@ -1,92 +0,0 @@
|
||||
# Batch 14 — Issues #1131–#1719
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#1712 — [UI/Low priority] Disable "Internal trilium link (Ctrl+L)" on code-block text selection](https://github.com/TriliumNext/Trilium/issues/1712)
|
||||
- **Problem**: The "Internal Trilium link" toolbar button remains enabled when text inside a code block is selected even though all other formatting buttons are disabled.
|
||||
- **Proposed solution**: In the CKEditor plugin that registers the `internallink` command (search `packages/ckeditor5*` for the command), override `refresh()` to also disable the command when the selection is inside a `codeBlock` element (use `isAllowedInSelection` / `schema.checkChild` against the selection's parent). Similar pattern is used by the built-in `link` command.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — requires locating the custom plugin but the fix is a one-line schema check
|
||||
|
||||
### [#1643 — [FEATURE] note revision preview for `Saved search` notes](https://github.com/TriliumNext/Trilium/issues/1643)
|
||||
- **Problem**: Saved search notes don't have a revision preview in the revisions dialog despite being simple JSON content.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/revisions.*` (or wherever revision content is rendered), add a branch that renders saved-search revision content as plain JSON/text like code notes. Likely a missing `else if (type === "search")` path.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — needs code inspection to confirm the exact switch
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#1157 — Split Screen And Unlinked References](https://github.com/TriliumNext/Trilium/issues/1157)
|
||||
- **Evidence**: Split view is fully implemented. `apps/client/src/widgets/containers/split_note_container.js` exists, `link_context_menu.ts` has `openNoteInNewSplit` / `openNoteInOtherSplit`, `tree_context_menu.ts` has `openNoteInSplit`, and split-pane layout is wired into `desktop_layout.tsx` and `mobile_layout.tsx`.
|
||||
- **Verification needed**: Part 1 (split view) is done. Part 2 (unlinked references) is still an open feature request — maintainer should close as partial/duplicate of other unlinked-references requests in batch.
|
||||
|
||||
### [#1460 — [Feature request] Make use of HTML5 as audio/video embedding provider. Relies on having partial-content supported by server.](https://github.com/TriliumNext/Trilium/issues/1460)
|
||||
- **Evidence**: `apps/server/src/routes/api/files.ts` implements partial-content streaming (`range`, `start/end`, comment "Partial content request"). Client-side video/audio players exist in `apps/client/src/widgets/type_widgets/file/Video.tsx` and `MediaPlayer.tsx`.
|
||||
- **Verification needed**: Confirm video/audio notes can be seeked in the browser; if yes, close.
|
||||
|
||||
### [#1512 — Fail to define shortcut like Meta+[ or Meta+Shift+Left](https://github.com/TriliumNext/Trilium/issues/1512)
|
||||
- **Evidence**: `apps/server/src/services/keyboard_actions.ts` lines 22-33 now set Mac defaults to `CommandOrControl+[` / `CommandOrControl+]` for back/forward navigation — directly the shortcut the reporter asked for. Mac-specific branch is driven by `isMac`.
|
||||
- **Verification needed**: Confirm on Mac that `Meta+[` now binds; if yes, close.
|
||||
|
||||
### [#1544 — embedding image with url](https://github.com/TriliumNext/Trilium/issues/1544)
|
||||
- **Evidence**: `packages/ckeditor5/src/plugins.ts` lines 113-119 register `Image`, `ImageUpload`, `ImageInsert` family. CKEditor's native image insert dialog accepts URLs.
|
||||
- **Verification needed**: Test Insert Image via URL in the toolbar and close if works.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#1719 — FR: Hide table edges](https://github.com/TriliumNext/Trilium/issues/1719) — CSS tweak but needs UI toggle / per-table property; not trivial without CKEditor table plugin support.
|
||||
- [#1698 — [UX] Always clone included images](https://github.com/TriliumNext/Trilium/issues/1698) — requires changing image-include semantics around clipper orphans; design question.
|
||||
- [#1573 — Copy Paste Image results in broken image links](https://github.com/TriliumNext/Trilium/issues/1573) — clipboard image handling in CKEditor, needs investigation.
|
||||
- [#1572 — Could locations of cloned notes appear in global search?](https://github.com/TriliumNext/Trilium/issues/1572) — search result display question; may already work, needs repro.
|
||||
- [#1578 — Feature Request - Implement restore backup function](https://github.com/TriliumNext/Trilium/issues/1578) — would require new UI + migration path; confirmed no `restoreBackup` in `apps/server/src/services/backup.ts`.
|
||||
- [#1577 — Client certificates?](https://github.com/TriliumNext/Trilium/issues/1577) — TLS mTLS support, infra-level change.
|
||||
- [#1503 — Web Clipper "searching" often](https://github.com/TriliumNext/Trilium/issues/1503) — clipper discovery/heartbeat bug in `apps/web-clipper`, needs repro.
|
||||
- [#1449 — Clipped a web page with YouTube linked videos - they auto-play!](https://github.com/TriliumNext/Trilium/issues/1449) — HTML sanitization of imported iframes needs `?autoplay=0` stripping.
|
||||
- [#1444 — Content Security Policy directive: "img-src 'self' data:"](https://github.com/TriliumNext/Trilium/issues/1444) — CSP misconfiguration breaking external images in clipped pages.
|
||||
- [#1442 — Copy paste from rich text to plain text does not retain indents](https://github.com/TriliumNext/Trilium/issues/1442) — CKEditor clipboard converter for code/plain targets.
|
||||
- [#1423 — [Crash] Importing a big file](https://github.com/TriliumNext/Trilium/issues/1423) — memory/streaming issue in import, deep fix.
|
||||
- [#1357 — Inserting a space after a math expression deletes it](https://github.com/TriliumNext/Trilium/issues/1357) — CKEditor math plugin (`packages/ckeditor5-math`) bug.
|
||||
- [#1324 — Import of Joplin documents](https://github.com/TriliumNext/Trilium/issues/1324) — no Joplin importer exists; would need new format support.
|
||||
- [#1298 — Exact search result is placed way too low in results](https://github.com/TriliumNext/Trilium/issues/1298) — jump-to-note scoring needs an exact-match boost.
|
||||
- [#1284 — Picky details of new Attributes field](https://github.com/TriliumNext/Trilium/issues/1284) — multi-item autocomplete/UX polish needing rework.
|
||||
- [#1166 — Context menu is not usable with keyboard](https://github.com/TriliumNext/Trilium/issues/1166) — needs full keyboard navigation for custom Preact context menu.
|
||||
- [#1131 — Alt + <x> keyboard shortcuts with active editor](https://github.com/TriliumNext/Trilium/issues/1131) — CKEditor swallows Alt+char for menu access; hard to override cleanly.
|
||||
|
||||
## Feature Requests
|
||||
- [#1716 — Generating citation from note attributes](https://github.com/TriliumNext/Trilium/issues/1716)
|
||||
- [#1715 — Page up/down in note selection dialogs (Jump to note, ..)](https://github.com/TriliumNext/Trilium/issues/1715)
|
||||
- [#1704 — [FEATURE REQUEST] Block reference / content embedding (Roam-style)](https://github.com/TriliumNext/Trilium/issues/1704)
|
||||
- [#1697 — Populate hyperlinked md file from a table](https://github.com/TriliumNext/Trilium/issues/1697)
|
||||
- [#1693 — [FEATURE] Copy/Paste Table As/From CSV](https://github.com/TriliumNext/Trilium/issues/1693)
|
||||
- [#1668 — [UX FEATURE] `Search` autocompletion for labels](https://github.com/TriliumNext/Trilium/issues/1668)
|
||||
- [#1654 — [IMPROVEMENT] Contextual `Similar notes` algorithm based on search string](https://github.com/TriliumNext/Trilium/issues/1654)
|
||||
- [#1652 — [FEATURE] `saved search` preview with number of results](https://github.com/TriliumNext/Trilium/issues/1652)
|
||||
- [#1650 — [FEATURE] Copy notes from tree and paste into relation map](https://github.com/TriliumNext/Trilium/issues/1650)
|
||||
- [#1625 — Add custom MIME types for code notes](https://github.com/TriliumNext/Trilium/issues/1625)
|
||||
- [#1623 — [UX] Remember default box size for included notes](https://github.com/TriliumNext/Trilium/issues/1623)
|
||||
- [#1589 — Setting to reduce logging only to errors?](https://github.com/TriliumNext/Trilium/issues/1589)
|
||||
- [#1585 — Default import options for drag and drop](https://github.com/TriliumNext/Trilium/issues/1585)
|
||||
- [#1567 — Proof import before importing, remove special chars](https://github.com/TriliumNext/Trilium/issues/1567)
|
||||
- [#1554 — image alt text in markdown export](https://github.com/TriliumNext/Trilium/issues/1554)
|
||||
- [#1526 — Set a shortcut to open the link in a new window](https://github.com/TriliumNext/Trilium/issues/1526)
|
||||
- [#1514 — FR: Get the link to the note from the desktop apps](https://github.com/TriliumNext/Trilium/issues/1514)
|
||||
- [#1507 — "save & reset" link map arrangement & zoom level](https://github.com/TriliumNext/Trilium/issues/1507)
|
||||
- [#1479 — [Apache proxy setup] Some notes on installation sequence](https://github.com/TriliumNext/Trilium/issues/1479)
|
||||
- [#1426 — request: unlinked references](https://github.com/TriliumNext/Trilium/issues/1426)
|
||||
- [#1386 — [Feature Request] Zotero integration](https://github.com/TriliumNext/Trilium/issues/1386)
|
||||
- [#1288 — please provide the way to save picture of linkmap](https://github.com/TriliumNext/Trilium/issues/1288)
|
||||
- [#1280 — Enabling custom CKEditor plugins?](https://github.com/TriliumNext/Trilium/issues/1280)
|
||||
- [#1269 — Customize note title shown in tree](https://github.com/TriliumNext/Trilium/issues/1269)
|
||||
- [#1267 — Make INSERT NOTE optional / configurable default type](https://github.com/TriliumNext/Trilium/issues/1267)
|
||||
- [#1266 — Suggestion for Recent Changes (split into changed/deleted)](https://github.com/TriliumNext/Trilium/issues/1266)
|
||||
- [#1233 — Block Reference and transclude function](https://github.com/TriliumNext/Trilium/issues/1233)
|
||||
- [#1209 — Clipper for PDF files](https://github.com/TriliumNext/Trilium/issues/1209)
|
||||
- [#1206 — Jump back to last edit](https://github.com/TriliumNext/Trilium/issues/1206)
|
||||
- [#1193 — Sort results in Jump to note by frequency of use](https://github.com/TriliumNext/Trilium/issues/1193)
|
||||
- [#1181 — Make tabs keep the scroll on the tree left panel](https://github.com/TriliumNext/Trilium/issues/1181)
|
||||
- [#1170 — Disable note editing in mobile front end](https://github.com/TriliumNext/Trilium/issues/1170)
|
||||
- [#1148 — include relation maps content in search results](https://github.com/TriliumNext/Trilium/issues/1148)
|
||||
- [#1144 — Option to auto expand book nodes](https://github.com/TriliumNext/Trilium/issues/1144)
|
||||
- [#1142 — enhance link map (TheBrain-style)](https://github.com/TriliumNext/Trilium/issues/1142)
|
||||
|
||||
## Skipped / Unclear
|
||||
(none — all issues classified)
|
||||
@@ -1,92 +0,0 @@
|
||||
# Batch 15 — Issues #21–#1123
|
||||
|
||||
## Easy-Fix Candidates
|
||||
|
||||
### [#762 — [UX] Print paths with colored '/' separators](https://github.com/TriliumNext/Trilium/issues/762)
|
||||
- **Problem**: When a note title contains `/`, the note-path breadcrumbs become ambiguous; a visually distinct separator would disambiguate.
|
||||
- **Proposed solution**: In the path-rendering code (search `apps/client/src/services/tree.ts` / `apps/client/src/widgets/note_tree.ts` for `getNotePath` / `/` concatenation, and `apps/client/src/widgets/note_path_list_widget.*`), wrap the separator in `<span class="note-path-separator">/</span>` and add a subtle color/bold rule in the corresponding CSS. Purely a rendering tweak.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — straightforward once the exact render site is located.
|
||||
|
||||
### [#342 — Warn if user is trying to run the script in a wrong environment](https://github.com/TriliumNext/Trilium/issues/342)
|
||||
- **Problem**: When a frontend script is invoked on the backend (or vice versa) it silently fails; the user gets no helpful message.
|
||||
- **Proposed solution**: In `apps/server/src/services/script.ts` (backend execution) check `note.mime` / `note.getLabelValue("runOnBackend")` against the caller context and throw a descriptive error; mirror in `apps/client/src/services/script_context.ts` for frontend. Single `if` with a clear error message per side.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — the two script runners exist, just need a type guard + thrown error.
|
||||
|
||||
### [#21 — Script execution should error out on usage of protected notes outside of protected session](https://github.com/TriliumNext/Trilium/issues/21)
|
||||
- **Problem**: Scripts silently fail in unpredictable ways when they access protected notes without a protected session.
|
||||
- **Proposed solution**: In `apps/server/src/services/script.ts` (and `script_context.ts`), before invoking the script check `note.isProtected && !protectedSessionService.isProtectedSessionAvailable()` and throw a clear error (e.g. "Cannot run protected script without a protected session"). No such guard currently exists per `grep` on the script services.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high — isolated pre-check in one place.
|
||||
|
||||
## Likely Already Fixed
|
||||
|
||||
### [#1102 — Spellchecker is overly sensitive](https://github.com/TriliumNext/Trilium/issues/1102)
|
||||
- **Evidence**: Items (1) and (2) were rejected upstream (Electron/Blink limitation). Item (3) (runtime toggle shortcut) is still not supported — `apps/server/src/services/window.ts` reads `spellCheckEnabled` only at window creation, and no `toggleSpellCheck` shortcut exists in `keyboard_actions.ts`. However the original items 1 & 2 are effectively closed as "won't fix".
|
||||
- **Verification needed**: Close items 1-2 as won't-fix (Electron limitation); split out item 3 as a separate feature request if still wanted.
|
||||
|
||||
### [#1080 — Cell properties panel invisible when table cell content too large](https://github.com/TriliumNext/Trilium/issues/1080)
|
||||
- **Evidence**: Filed against Trilium 0.42.6 with CKEditor from that era. CKEditor5 has been upgraded many major versions since; table cell properties panel positioning is handled by upstream CKEditor. No custom override exists in `packages/ckeditor5/`.
|
||||
- **Verification needed**: Reproduce with current build — paste a huge text block into a table cell and try to open cell properties; if panel is visible, close.
|
||||
|
||||
### [#924 — Text following innerlink becomes part of the link after switching pages](https://github.com/TriliumNext/Trilium/issues/924)
|
||||
- **Evidence**: Reported against 0.40.6 — a CKEditor link-range bug from that era. CKEditor has been upgraded many versions; no custom link-range fix exists in `packages/ckeditor5/`. No commits touching "innerlink" in `git log`.
|
||||
- **Verification needed**: Reproduce: insert a Ctrl+L link, type text after it, switch notes and back; if the trailing text is no longer absorbed into the link, close.
|
||||
|
||||
### [#936 — unable to clip some pages](https://github.com/TriliumNext/Trilium/issues/936)
|
||||
- **Evidence**: 0.40-era web clipper timeout on a large GitHub markdown page. Clipper and server code have been rewritten since (`apps/web-clipper/`, clipping endpoint in `apps/server/src/routes/api/clipper.ts`).
|
||||
- **Verification needed**: Re-try clipping `https://github.com/learnbyexample/learn_gnuawk/blob/master/gnu_awk.md` with current clipper; if successful, close.
|
||||
|
||||
### [#75 — add standard attribute value autocomplete](https://github.com/TriliumNext/Trilium/issues/75)
|
||||
- **Evidence**: `apps/client/src/services/attribute_autocomplete.ts` exports `initLabelValueAutocomplete`, which calls `attribute-values/<name>` server endpoint and populates autocomplete suggestions. Wired up in `attribute_detail.ts` and `PromotedAttributes.tsx`. Exactly what was asked for.
|
||||
- **Verification needed**: None — can be closed as done.
|
||||
|
||||
### [#649 — Open/focus a note from command line / desktop URL handler (Trilium URL protocol)](https://github.com/TriliumNext/Trilium/issues/649)
|
||||
- **Evidence**: PR #9248 ("Add URL protocol support for trilium://") is referenced as submitted for this IssueHunt. No `trilium://` handler or `setAsDefaultProtocolClient` currently in the codebase (so PR is still open).
|
||||
- **Verification needed**: Track PR #9248 — once merged, close this issue.
|
||||
|
||||
## Notable Non-Easy Issues
|
||||
- [#1123 — Read-only view for tree section or "edit/view mode" for entire app](https://github.com/TriliumNext/Trilium/issues/1123) — overlaps with ongoing read-only-instance work; needs UX design.
|
||||
- [#1054 — Enhancement: Fetch link metadata](https://github.com/TriliumNext/Trilium/issues/1054) — requires backend metascraper service + CKEditor plugin + offline asset handling.
|
||||
- [#1045 — [wish] personal/custom list of synonyms](https://github.com/TriliumNext/Trilium/issues/1045) — active design discussion about equivalence classes / note variants; non-trivial search pipeline change.
|
||||
- [#1039 — enhance require](https://github.com/TriliumNext/Trilium/issues/1039) — body covers keyboard navigation + title-from-selection + link-map filtering; three separate UX changes.
|
||||
- [#1021 — Link to Note Block](https://github.com/TriliumNext/Trilium/issues/1021) — sub-note paragraph anchoring needs new ID model + CKEditor support.
|
||||
- [#1015 — Interwiki-style links to file-based files](https://github.com/TriliumNext/Trilium/issues/1015) — new link-resolver abstraction needed.
|
||||
- [#989 — Link tagging w/ tree structure (cloning as tagging)](https://github.com/TriliumNext/Trilium/issues/989) — semantic/architectural discussion about cloning vs. attributes.
|
||||
- [#952 — Searching Relation Attribute Values as Text](https://github.com/TriliumNext/Trilium/issues/952) — search parser change to resolve related-note title to ID; non-trivial syntax work.
|
||||
- [#927 — Option to move selected text to child note](https://github.com/TriliumNext/Trilium/issues/927) — already partially supported ("Cut selection to sub-note"); needs UX refinement.
|
||||
- [#868 — Global search: retain text + highlight results](https://github.com/TriliumNext/Trilium/issues/868) — search UX rework, needs in-note scroll/highlight integration.
|
||||
- [#760 — tag system suggest](https://github.com/TriliumNext/Trilium/issues/760) — tag suggestion UI with co-occurrence ranking; substantial new feature.
|
||||
- [#616 — Undo for Subtree Operations](https://github.com/TriliumNext/Trilium/issues/616) — requires operation log / undo stack; deep architectural change.
|
||||
- [#527 — [Feature Request] Side Comments](https://github.com/TriliumNext/Trilium/issues/527) — non-exported meta text; needs new CKEditor plugin + export filter.
|
||||
- [#518 — Sorting protected notes](https://github.com/TriliumNext/Trilium/issues/518) — `sortKey`/`sortIndex` attributes not yet implemented; affects tree sorting pipeline.
|
||||
- [#507 — MtoN relation in relation map](https://github.com/TriliumNext/Trilium/issues/507) — relation map rendering change; needs bulk-relation UI.
|
||||
- [#449 — api.addMenuItem](https://github.com/TriliumNext/Trilium/issues/449) — API surface extension for scripting; needs menu registration hook.
|
||||
- [#393 — Upgrade option (preserve DB on update)](https://github.com/TriliumNext/Trilium/issues/393) — in-place updater; platform-specific installer work.
|
||||
- [#228 — Visually differentiate links from relations in relation map](https://github.com/TriliumNext/Trilium/issues/228) — relation map rendering tweak, but needs distinct styling decisions.
|
||||
- [#39 — Implement attribute autocomplete in search input](https://github.com/TriliumNext/Trilium/issues/39) — confirmed not wired into any search widget; needs search-input integration.
|
||||
|
||||
## Feature Requests
|
||||
- [#1046 — [wish] Global shortcut](https://github.com/TriliumNext/Trilium/issues/1046)
|
||||
- [#1026 — Show Trilium content related to my web searches](https://github.com/TriliumNext/Trilium/issues/1026)
|
||||
- [#991 — Link to a blank note (pure backlink-only notes)](https://github.com/TriliumNext/Trilium/issues/991)
|
||||
- [#986 — Community Code Library / Plugin System](https://github.com/TriliumNext/Trilium/issues/986)
|
||||
- [#983 — Custom Local Save location and Hide Child Notes for Attachments](https://github.com/TriliumNext/Trilium/issues/983)
|
||||
- [#970 — Use double click to get to the child note](https://github.com/TriliumNext/Trilium/issues/970)
|
||||
- [#926 — Option to not expand parent note when note is made its child](https://github.com/TriliumNext/Trilium/issues/926)
|
||||
- [#825 — Link preview](https://github.com/TriliumNext/Trilium/issues/825)
|
||||
- [#814 — Ability to add a tag to a page when clipping](https://github.com/TriliumNext/Trilium/issues/814)
|
||||
- [#802 — Clip url with description](https://github.com/TriliumNext/Trilium/issues/802)
|
||||
- [#728 — FR: Export search results](https://github.com/TriliumNext/Trilium/issues/728)
|
||||
- [#673 — [Feature Request] External Resource Notes](https://github.com/TriliumNext/Trilium/issues/673)
|
||||
- [#672 — [Feature request] Error Tracking](https://github.com/TriliumNext/Trilium/issues/672)
|
||||
- [#641 — npm install additional libraries](https://github.com/TriliumNext/Trilium/issues/641)
|
||||
- [#409 — AppImage for Linux](https://github.com/TriliumNext/Trilium/issues/409)
|
||||
- [#352 — Feature Request: Restore Demo Content](https://github.com/TriliumNext/Trilium/issues/352)
|
||||
- [#242 — CalDAV Support](https://github.com/TriliumNext/Trilium/issues/242)
|
||||
- [#212 — Tooltip for an attachment can display basic info (original name, mime) and download/open buttons](https://github.com/TriliumNext/Trilium/issues/212)
|
||||
- [#139 — Label listing can be clickable and lead to search of given label](https://github.com/TriliumNext/Trilium/issues/139)
|
||||
|
||||
## Skipped / Unclear
|
||||
_(none — all issues classified above)_
|
||||
@@ -1,604 +0,0 @@
|
||||
# Likely Duplicate / Related Issue Clusters
|
||||
|
||||
Clusters below were identified by semantic analysis of issue titles + body excerpts. **These are candidates, not confirmed duplicates** — a maintainer should review each cluster and decide whether to consolidate (keep the oldest well-described one, close the rest with a reference).
|
||||
|
||||
**Summary:** 52 clusters covering 146 open issues across the TriliumNext/Trilium repository. The clusters span every major subsystem: sync, search, share/publish, canvas/excalidraw, mermaid/relation-map/note-map, web-clipper, OIDC/auth, templates, calendar/journal, table view, tree/tab UX, CKEditor autoformat, PDF, import/export, and mobile.
|
||||
|
||||
## Cluster Format
|
||||
- Lead issue (oldest or most-detailed) goes first
|
||||
- Followups are listed under it with one-line justification
|
||||
- Confidence: `high` = essentially the same problem, `medium` = related/overlapping, `low` = worth checking
|
||||
|
||||
---
|
||||
|
||||
## Cluster 1: Protected notes accessible/visible outside of protected session (confidence: high)
|
||||
- [#21 — Script execution should error out on usage of protected notes outside of protected session](https://github.com/TriliumNext/Trilium/issues/21) — lead
|
||||
- [#4051 — (Bug report) Protected notes visible in Edited Notes](https://github.com/TriliumNext/Trilium/issues/4051) — protected content leaks to Edited Notes list
|
||||
- [#5442 — Protected notes not protected from: deletion, attribute visibility](https://github.com/TriliumNext/Trilium/issues/5442) — can delete/clone/move protected notes without session
|
||||
- [#6177 — A protected note can be moved, deleted etc. even in unprotected mode](https://github.com/TriliumNext/Trilium/issues/6177) — same "protected outside session" defect
|
||||
- [#6993 — Protected notes can be read back from the database file](https://github.com/TriliumNext/Trilium/issues/6993) — related leak via historical unencrypted state
|
||||
- [#9229 — Protected note contents get rendered whenever it has child notes](https://github.com/TriliumNext/Trilium/issues/9229) — protected content rendered before unlock
|
||||
- [#8660 — Protected notes, dateModified, and misleading UI](https://github.com/TriliumNext/Trilium/issues/8660) — protected session changes dateModified for all protected notes
|
||||
|
||||
## Cluster 2: OIDC / OpenID auth problems (confidence: high)
|
||||
- [#5606 — OpenID Connect support](https://github.com/TriliumNext/Trilium/issues/5606) — original ask
|
||||
- [#4936 — Sync to server behind OIDC & Reverse Proxy](https://github.com/TriliumNext/Trilium/issues/4936) — OIDC + reverse proxy combo breaks
|
||||
- [#5857 — "invalid user" when setting up OIDC auth](https://github.com/TriliumNext/Trilium/issues/5857) — OIDC callback fails with "invalid user"
|
||||
- [#6387 — Current OpenID Connect Implementation is not compatible with Authelia](https://github.com/TriliumNext/Trilium/issues/6387) — Authelia interop issue
|
||||
- [#7127 — OpenID auto redirect](https://github.com/TriliumNext/Trilium/issues/7127) — auto-redirect UX request
|
||||
- [#7250 — oidc credentials are not checked for](https://github.com/TriliumNext/Trilium/issues/7250) — no user validation on OIDC login
|
||||
- [#7794 — OIDC Login requires multiple logins](https://github.com/TriliumNext/Trilium/issues/7794) — repeated login loop
|
||||
- [#8606 — Implement Authorization on OpenID](https://github.com/TriliumNext/Trilium/issues/8606) — OIDC has auth-z gap
|
||||
- [#8658 — OIDC groups claims for access control](https://github.com/TriliumNext/Trilium/issues/8658) — group-based access control
|
||||
|
||||
## Cluster 3: Web Clipper authentication/setup failures (confidence: high)
|
||||
- [#9286 — Web Clipper authentication fails when TOTP is enabled](https://github.com/TriliumNext/Trilium/issues/9286)
|
||||
- [#9330 — Web clipper setup fails with trailing / in server setup](https://github.com/TriliumNext/Trilium/issues/9330) — lead: trailing slash breaks Firefox extension setup
|
||||
- [#8045 — Mac Client setup doesn't support trailing slash](https://github.com/TriliumNext/Trilium/issues/8045) — same trailing-slash setup bug in desktop client
|
||||
- [#8904 — WebClipper: Save whole page does nothing](https://github.com/TriliumNext/Trilium/issues/8904) — clipper broken
|
||||
- [#3834 — chrome extention Trilium Web Clipper save whole page can not show in trillium note](https://github.com/TriliumNext/Trilium/issues/3834) — save whole page broken (older)
|
||||
- [#8663 — Web Clipper for ChatGPT](https://github.com/TriliumNext/Trilium/issues/8663) — whole-page capture for ChatGPT fails (same "save whole page" class)
|
||||
- [#1503 — Web Clipper "searching" often](https://github.com/TriliumNext/Trilium/issues/1503) — clipper discovery/setup issue
|
||||
|
||||
## Cluster 4: Reverse proxy / sub-path serving breaks sharing and setup (confidence: high)
|
||||
- [#8790 — some assets not work in share notes when serving under a different path](https://github.com/TriliumNext/Trilium/issues/8790)
|
||||
- [#8791 — Copy share link not work when Serving under a different path](https://github.com/TriliumNext/Trilium/issues/8791)
|
||||
- [#4702 — "Add to homescreen" on Android sets wrong url if Trilium is run in sub-directory via reverse proxy](https://github.com/TriliumNext/Trilium/issues/4702)
|
||||
- [#4905 — shareCredentials tag does not work with reverse proxy server](https://github.com/TriliumNext/Trilium/issues/4905)
|
||||
- [#4880 — Shared link show Address from Sync Server](https://github.com/TriliumNext/Trilium/issues/4880) — same class of URL-computation bug behind proxy
|
||||
- [#8979 — PDF - 403 Forbidden behind NGINX Proxy Manager](https://github.com/TriliumNext/Trilium/issues/8979) — reverse proxy breaks PDF viewer
|
||||
|
||||
## Cluster 5: Sync recovery/data-loss on multi-device setups (confidence: medium)
|
||||
- [#9247 — A large number of recovered notes appear after synchronization](https://github.com/TriliumNext/Trilium/issues/9247)
|
||||
- [#4887 — Normal notes are recovered wrongly after syncing with other devices](https://github.com/TriliumNext/Trilium/issues/4887)
|
||||
- [#3626 — Trilium sync from clients to server fails for a specific daily journal note](https://github.com/TriliumNext/Trilium/issues/3626)
|
||||
- [#4762 — ERROR when syncing deleted notes](https://github.com/TriliumNext/Trilium/issues/4762)
|
||||
- [#2290 — Failed to deserialize sync response: Option "documentSecret" doesn't exist](https://github.com/TriliumNext/Trilium/issues/2290)
|
||||
- [#4389 — Found Error when I Sync data from docker trilium 61.12 to windows PC 61.12](https://github.com/TriliumNext/Trilium/issues/4389)
|
||||
- [#6989 — New client sync issues](https://github.com/TriliumNext/Trilium/issues/6989) — stuck on initial sync / recovered state
|
||||
- [#2549 — Random notes lose their content, old revs. still available](https://github.com/TriliumNext/Trilium/issues/2549) — silent data loss suspected linked to sync
|
||||
|
||||
## Cluster 6: Sync TLS / self-signed / handshake failures (confidence: high)
|
||||
- [#2060 — trilium-server will not sync with trilium-desktop over TLS; ERR_CERT_AUTHORITY_INVALID](https://github.com/TriliumNext/Trilium/issues/2060) — lead
|
||||
- [#3353 — Support extra CA certs](https://github.com/TriliumNext/Trilium/issues/3353) — same root cause: can't trust custom CAs for sync
|
||||
- [#4888 — Sync server handshake failed, "<!DOCTYPE "... is not valid JSON](https://github.com/TriliumNext/Trilium/issues/4888) — sync handshake JSON parse failure
|
||||
- [#7692 — Windows shortcut arguments are removed](https://github.com/TriliumNext/Trilium/issues/7692) — user uses `--ignore-certificate-errors` as a workaround
|
||||
|
||||
## Cluster 7: Initial sync hangs / large-DB sync blocks UI (confidence: high)
|
||||
- [#5315 — desktop app initial sync never stops](https://github.com/TriliumNext/Trilium/issues/5315)
|
||||
- [#5380 — Make Initial Sync timeout value configurable](https://github.com/TriliumNext/Trilium/issues/5380)
|
||||
- [#5550 — Sync errors may hang the initial setup](https://github.com/TriliumNext/Trilium/issues/5550)
|
||||
- [#6129 — JavaScript heap out of memory on Initial Sync with Server](https://github.com/TriliumNext/Trilium/issues/6129)
|
||||
- [#7225 — Trilium Sync Blocks UI During Content Hashing for Large Knowledge Graphs](https://github.com/TriliumNext/Trilium/issues/7225)
|
||||
- [#8991 — Note jumps to the top (scroll position lost) during background sync](https://github.com/TriliumNext/Trilium/issues/8991) — related: background sync clobbers UI
|
||||
- [#3600 — sync lag](https://github.com/TriliumNext/Trilium/issues/3600)
|
||||
- [#2050 — content with lot of pdf attachments not sync between multi-client and server](https://github.com/TriliumNext/Trilium/issues/2050)
|
||||
|
||||
## Cluster 8: Fuzzy / quick search problems, archived notes leaking in (confidence: high)
|
||||
- [#7085 — [regression] Archived notes are listed in note search/quick search](https://github.com/TriliumNext/Trilium/issues/7085)
|
||||
- [#8360 — Disable fuzzy search in copy/clone](https://github.com/TriliumNext/Trilium/issues/8360)
|
||||
- [#9009 — Option to easily toggle the fuzzy search on/off](https://github.com/TriliumNext/Trilium/issues/9009)
|
||||
- [#8850 — Search does not work for some attributes: #clipType=note](https://github.com/TriliumNext/Trilium/issues/8850) — fuzzy/new-search broke exact attribute
|
||||
- [#6808 — Search function slow since 0.98.0](https://github.com/TriliumNext/Trilium/issues/6808) — new search UX regressed perf
|
||||
- [#3516 — Hidden notes appear in search results](https://github.com/TriliumNext/Trilium/issues/3516)
|
||||
- [#4584 — Hide hidden notes from `similar notes` view](https://github.com/TriliumNext/Trilium/issues/4584)
|
||||
- [#7662 — Full search only showing promoted attributes and attributes are missing highlighting](https://github.com/TriliumNext/Trilium/issues/7662)
|
||||
- [#8060 — Canvas notes with empty or missing elements cause quick search to crash](https://github.com/TriliumNext/Trilium/issues/8060)
|
||||
|
||||
## Cluster 9: Search enhancements / ranking / FTS (confidence: medium)
|
||||
- [#4606 — Implement Full-Text Search Using SQLite's FTS Extension for Better Relevance Sorting](https://github.com/TriliumNext/Trilium/issues/4606)
|
||||
- [#6991 — Search: Add Search Ranking Customizability](https://github.com/TriliumNext/Trilium/issues/6991)
|
||||
- [#5667 — Better search with search excerpts?](https://github.com/TriliumNext/Trilium/issues/5667)
|
||||
- [#5332 — Improve search result highlighting](https://github.com/TriliumNext/Trilium/issues/5332)
|
||||
- [#5585 — Search Prefix](https://github.com/TriliumNext/Trilium/issues/5585)
|
||||
- [#3498 — More signals for search & autocomplete ranking](https://github.com/TriliumNext/Trilium/issues/3498)
|
||||
- [#1193 — Sort results in Jump to note by frequency of use?](https://github.com/TriliumNext/Trilium/issues/1193)
|
||||
- [#1298 — Exact search result is placed way too low in results](https://github.com/TriliumNext/Trilium/issues/1298)
|
||||
- [#2404 — Could Full-Text Search results lists like google search results?](https://github.com/TriliumNext/Trilium/issues/2404)
|
||||
- [#6225 — Settings for displaying search results](https://github.com/TriliumNext/Trilium/issues/6225)
|
||||
- [#5671 — Option to search entire database when a note is hoisted](https://github.com/TriliumNext/Trilium/issues/5671)
|
||||
|
||||
## Cluster 10: Search: find-and-replace / regex / cross-note replace (confidence: high)
|
||||
- [#2989 — Can make "Find and Replace" allow Regular Expression?](https://github.com/TriliumNext/Trilium/issues/2989)
|
||||
- [#3426 — search and replace](https://github.com/TriliumNext/Trilium/issues/3426)
|
||||
- [#3494 — Value replace in bulk action](https://github.com/TriliumNext/Trilium/issues/3494)
|
||||
|
||||
## Cluster 11: Search history / saved search UX (confidence: medium)
|
||||
- [#6730 — Clear or disable search history](https://github.com/TriliumNext/Trilium/issues/6730)
|
||||
- [#8281 — Search history](https://github.com/TriliumNext/Trilium/issues/8281)
|
||||
- [#5658 — Saved Search Auto Search on Note Open](https://github.com/TriliumNext/Trilium/issues/5658)
|
||||
- [#1643 — note revision preview for `Saved search` notes](https://github.com/TriliumNext/Trilium/issues/1643)
|
||||
- [#1652 — `saved search` preview with number of results](https://github.com/TriliumNext/Trilium/issues/1652)
|
||||
|
||||
## Cluster 12: Import / export of calendar (.ics) (confidence: high)
|
||||
- [#5640 — Support for importing ICS (iCalendar) file](https://github.com/TriliumNext/Trilium/issues/5640) — lead
|
||||
- [#8588 — Import .ics Calendar Support (Local File & URL)](https://github.com/TriliumNext/Trilium/issues/8588) — essentially the same ask
|
||||
|
||||
## Cluster 13: Calendar / journal / day note edge cases (confidence: medium)
|
||||
- [#8576 — Calendar created new date of new month on last month](https://github.com/TriliumNext/Trilium/issues/8576)
|
||||
- [#7263 — Trilium randomly jumps to Today Date](https://github.com/TriliumNext/Trilium/issues/7263)
|
||||
- [#7683 — Calendar Note Doesn't Respect #titleTemplate](https://github.com/TriliumNext/Trilium/issues/7683)
|
||||
- [#7944 — Calendar - Displaying deep child notes](https://github.com/TriliumNext/Trilium/issues/7944)
|
||||
- [#6204 — Presence of #workspaceCalendarRoot affects how notes are displayed](https://github.com/TriliumNext/Trilium/issues/6204)
|
||||
- [#5553 — Launcher: add keyboard navigation for Calendar](https://github.com/TriliumNext/Trilium/issues/5553)
|
||||
- [#8098 — Make clicking a month name in Year view open that month's view](https://github.com/TriliumNext/Trilium/issues/8098)
|
||||
- [#7646 — Add a setting to switch to 24-hours clock](https://github.com/TriliumNext/Trilium/issues/7646)
|
||||
- [#7113 — Use dateTime attribute for calendar child notes](https://github.com/TriliumNext/Trilium/issues/7113)
|
||||
|
||||
## Cluster 14: Today/yesterday quick-linking in editor (confidence: high)
|
||||
- [#2185 — Make Alt+T in editor insert link to current day's page](https://github.com/TriliumNext/Trilium/issues/2185)
|
||||
- [#2186 — today, tomorrow, yesterday, ... search terms to link to appropriate day pages](https://github.com/TriliumNext/Trilium/issues/2186)
|
||||
- [#3720 — Clone to today](https://github.com/TriliumNext/Trilium/issues/3720)
|
||||
|
||||
## Cluster 15: Excalidraw / Canvas drawing bugs and perf (confidence: high)
|
||||
- [#9345 — Significant input lag and UI freezing during continuous drawing/writing](https://github.com/TriliumNext/Trilium/issues/9345)
|
||||
- [#9230 — Excalidraw seems to update at a slower rate after entering Zen mode](https://github.com/TriliumNext/Trilium/issues/9230)
|
||||
- [#5539 — absurdly thick stroke width in Canvas note type](https://github.com/TriliumNext/Trilium/issues/5539)
|
||||
- [#7148 — CTRL Z with two Canvas notes will delete previous Drawing](https://github.com/TriliumNext/Trilium/issues/7148)
|
||||
- [#6447 — Canvas notes sometimes fail to render](https://github.com/TriliumNext/Trilium/issues/6447)
|
||||
- [#8462 — canvas cannot display, even it is not empty](https://github.com/TriliumNext/Trilium/issues/8462)
|
||||
- [#5565 — Writing does not work correctly (Excalidraw after type change)](https://github.com/TriliumNext/Trilium/issues/5565)
|
||||
- [#3395 — Reloading while editing a text field in a canvas note causes the text field to become permanently invisible](https://github.com/TriliumNext/Trilium/issues/3395)
|
||||
- [#4666 — Excalidraw changes fonts](https://github.com/TriliumNext/Trilium/issues/4666)
|
||||
|
||||
## Cluster 16: Canvas zoom / pan / drag UX (confidence: high)
|
||||
- [#9353 — Add way to zoom with a pen tablet to canvas notes](https://github.com/TriliumNext/Trilium/issues/9353)
|
||||
- [#7182 — Drag notes from tree to Canvas](https://github.com/TriliumNext/Trilium/issues/7182)
|
||||
- [#6928 — excalidraw element link can not jump to the right file](https://github.com/TriliumNext/Trilium/issues/6928)
|
||||
- [#7274 — Insert internal links to notes in the canvas and mind map](https://github.com/TriliumNext/Trilium/issues/7274)
|
||||
- [#2960 — Internal links in Canvas](https://github.com/TriliumNext/Trilium/issues/2960)
|
||||
- [#3905 — add central excalidraw library for all canvas notes](https://github.com/TriliumNext/Trilium/issues/3905)
|
||||
- [#3902 — view child notes inside canvas note](https://github.com/TriliumNext/Trilium/issues/3902)
|
||||
- [#4834 — Import PDF files into Canvas notes](https://github.com/TriliumNext/Trilium/issues/4834)
|
||||
|
||||
## Cluster 17: Mermaid rendering, interactions, and linking (confidence: high)
|
||||
- [#8459 — Mermaid split view renderer incorrect](https://github.com/TriliumNext/Trilium/issues/8459)
|
||||
- [#5611 — Mermaid bugs can crash the frontend](https://github.com/TriliumNext/Trilium/issues/5611)
|
||||
- [#4064 — Hovering over link inside mermaid diagram causes flicker](https://github.com/TriliumNext/Trilium/issues/4064)
|
||||
- [#3335 — Use mouse wheel to scroll up/down, instead of zoom in/out in mermaid notes](https://github.com/TriliumNext/Trilium/issues/3335)
|
||||
- [#5201 — Disable text selection in mermaid diagrams?](https://github.com/TriliumNext/Trilium/issues/5201)
|
||||
- [#4002 — Internal link inside mermaid diagram](https://github.com/TriliumNext/Trilium/issues/4002)
|
||||
- [#5195 — internal links to notes in Mermaid Diagrams](https://github.com/TriliumNext/Trilium/issues/5195)
|
||||
- [#2363 — Better support for linking notes from Mermaid diagrams](https://github.com/TriliumNext/Trilium/issues/2363)
|
||||
- [#5268 — Register icon pack in mermaid](https://github.com/TriliumNext/Trilium/issues/5268)
|
||||
- [#7931 — Inline Mermaid Diagram Display](https://github.com/TriliumNext/Trilium/issues/7931)
|
||||
|
||||
## Cluster 18: Relation map UX (confidence: high)
|
||||
- [#8676 — When adding a connection in the relation map note, Chinese input error](https://github.com/TriliumNext/Trilium/issues/8676)
|
||||
- [#6926 — Nodes and edges in relation map view in random positions when starting up the app](https://github.com/TriliumNext/Trilium/issues/6926)
|
||||
- [#6929 — Partially typed name being used as relation](https://github.com/TriliumNext/Trilium/issues/6929)
|
||||
- [#7389 — Child Note Node not placeable on Relation Note](https://github.com/TriliumNext/Trilium/issues/7389)
|
||||
- [#3266 — Automatic layout on relation maps](https://github.com/TriliumNext/Trilium/issues/3266)
|
||||
- [#3267 — Multiple note drag-and-drop into relation map](https://github.com/TriliumNext/Trilium/issues/3267)
|
||||
- [#3268 — Accept drag-and-dropping note links into relation map](https://github.com/TriliumNext/Trilium/issues/3268)
|
||||
- [#1650 — Copy notes from tree and paste into relation map](https://github.com/TriliumNext/Trilium/issues/1650)
|
||||
- [#2972 — Make lines of Relation map straight](https://github.com/TriliumNext/Trilium/issues/2972)
|
||||
- [#3037 — Upgrade the Relation Map](https://github.com/TriliumNext/Trilium/issues/3037)
|
||||
|
||||
## Cluster 19: Note-map / Link-map visualization (confidence: high)
|
||||
- [#1142 — enhance link map](https://github.com/TriliumNext/Trilium/issues/1142)
|
||||
- [#2064 — Improve the default layout of the link map](https://github.com/TriliumNext/Trilium/issues/2064)
|
||||
- [#1507 — A way to "save & reset" link map arrangement & zoom level](https://github.com/TriliumNext/Trilium/issues/1507)
|
||||
- [#1288 — please provide the way to save picture of linkmap](https://github.com/TriliumNext/Trilium/issues/1288)
|
||||
- [#2303 — Note Map Live Update](https://github.com/TriliumNext/Trilium/issues/2303)
|
||||
- [#5656 — Show full note titles in Link Map view](https://github.com/TriliumNext/Trilium/issues/5656)
|
||||
- [#5247 — Search/Filter Map View (Notes & Relations)](https://github.com/TriliumNext/Trilium/issues/5247)
|
||||
- [#4832 — Tag Based Note connection for Note Map](https://github.com/TriliumNext/Trilium/issues/4832)
|
||||
- [#1946 — Show attributes (relations) on link map](https://github.com/TriliumNext/Trilium/issues/1946)
|
||||
- [#2413 — Note map does not display inherited relations](https://github.com/TriliumNext/Trilium/issues/2413)
|
||||
- [#3185 — Export & import note tree with backlinks breaks note map](https://github.com/TriliumNext/Trilium/issues/3185)
|
||||
- [#8319 — [Feature Request] Improved Note-Maps](https://github.com/TriliumNext/Trilium/issues/8319)
|
||||
- [#8916 — Note Map view of `Hidden Notes` freezes Trilium](https://github.com/TriliumNext/Trilium/issues/8916)
|
||||
- [#3840 — Allow the option to make transclusion an additional note relation in the map](https://github.com/TriliumNext/Trilium/issues/3840)
|
||||
- [#5756 — Support Note Map Type as Shared Page](https://github.com/TriliumNext/Trilium/issues/5756)
|
||||
|
||||
## Cluster 20: Mind map capability (confidence: medium)
|
||||
- [#7266 — Unable to find a transparent background on the sub-nodes of the mind map](https://github.com/TriliumNext/Trilium/issues/7266)
|
||||
- [#5357 — Mind Map: Ability to add images as node](https://github.com/TriliumNext/Trilium/issues/5357)
|
||||
- [#8107 — Can I support Markdown syntax (mindmap extension syntax)](https://github.com/TriliumNext/Trilium/issues/8107)
|
||||
|
||||
## Cluster 21: Table view (Collections) enhancements and bugs (confidence: high)
|
||||
- [#6474 — Tab to next table view field in new record results in original field being focused](https://github.com/TriliumNext/Trilium/issues/6474)
|
||||
- [#6518 — Open child note from table view by clicking note name](https://github.com/TriliumNext/Trilium/issues/6518)
|
||||
- [#6555 — Unable to set column value to zero in table view](https://github.com/TriliumNext/Trilium/issues/6555)
|
||||
- [#7964 — Collections - Table View: multi-value labels do not display as columns](https://github.com/TriliumNext/Trilium/issues/7964)
|
||||
- [#8174 — Add the "Distribute Columns" feature to the table](https://github.com/TriliumNext/Trilium/issues/8174)
|
||||
- [#8481 — Add filtering in Table view](https://github.com/TriliumNext/Trilium/issues/8481)
|
||||
- [#8530 — Table not visible on viewType=Table note](https://github.com/TriliumNext/Trilium/issues/8530)
|
||||
- [#6927 — Make multiple linked notes show up in the relation column of viewType=table of collection view](https://github.com/TriliumNext/Trilium/issues/6927)
|
||||
- [#7217 — Allow opening note directly instead of quick edit in collections](https://github.com/TriliumNext/Trilium/issues/7217)
|
||||
- [#8664 — List view in shared collection notes](https://github.com/TriliumNext/Trilium/issues/8664)
|
||||
|
||||
## Cluster 22: Text-editor table editing (CKEditor tables, not table view) (confidence: high)
|
||||
- [#8622 — Lists Alignment in Tables](https://github.com/TriliumNext/Trilium/issues/8622)
|
||||
- [#5727 — Table borders](https://github.com/TriliumNext/Trilium/issues/5727)
|
||||
- [#1080 — I cannot see the cell properties panel, when the content of the table cell is too much](https://github.com/TriliumNext/Trilium/issues/1080)
|
||||
- [#1719 — Hide table edges](https://github.com/TriliumNext/Trilium/issues/1719)
|
||||
- [#1693 — Copy/Paste Table As/From CSV](https://github.com/TriliumNext/Trilium/issues/1693)
|
||||
- [#6468 — the table function area will block the text function area](https://github.com/TriliumNext/Trilium/issues/6468)
|
||||
|
||||
## Cluster 23: Kanban board / task management (confidence: high)
|
||||
- [#4395 — Autocomplete dialog support via scripting API (Kanban extension)](https://github.com/TriliumNext/Trilium/issues/4395)
|
||||
- [#5561 — task management](https://github.com/TriliumNext/Trilium/issues/5561)
|
||||
- [#6407 — Kanban Board enhancements](https://github.com/TriliumNext/Trilium/issues/6407)
|
||||
- [#7927 — Kanban: Display the first ~line of note content for each item](https://github.com/TriliumNext/Trilium/issues/7927)
|
||||
- [#6409 — Checklist progress](https://github.com/TriliumNext/Trilium/issues/6409)
|
||||
- [#2526 — simple recurring todo](https://github.com/TriliumNext/Trilium/issues/2526)
|
||||
- [#2330 — A note that collects all the unfinished todo items from other notes](https://github.com/TriliumNext/Trilium/issues/2330)
|
||||
|
||||
## Cluster 24: PDF viewer / share / editing (confidence: high)
|
||||
- [#9069 — PDF annotation changes not persisted, download button unresponsive](https://github.com/TriliumNext/Trilium/issues/9069)
|
||||
- [#8962 — PDF Editing - Highlights not saving?](https://github.com/TriliumNext/Trilium/issues/8962)
|
||||
- [#8967 — PDF Sharing - Download Option](https://github.com/TriliumNext/Trilium/issues/8967)
|
||||
- [#8963 — Bookmark while viewing pdf](https://github.com/TriliumNext/Trilium/issues/8963)
|
||||
- [#8635 — Allow internal links to open PDF notes at a specific page](https://github.com/TriliumNext/Trilium/issues/8635)
|
||||
- [#9059 — Link Notes in PDF To Internal Notes](https://github.com/TriliumNext/Trilium/issues/9059)
|
||||
- [#9164 — PDF Export feature and font size](https://github.com/TriliumNext/Trilium/issues/9164)
|
||||
- [#8097 — Print to PDF not using printCss correctly](https://github.com/TriliumNext/Trilium/issues/8097)
|
||||
- [#4669 — Printed font size configuration](https://github.com/TriliumNext/Trilium/issues/4669)
|
||||
- [#8140 — "shareExternalLink"-type label for PDF generation](https://github.com/TriliumNext/Trilium/issues/8140)
|
||||
- [#5665 — PDF Viewer Obstruction on iOS Mobile Client](https://github.com/TriliumNext/Trilium/issues/5665)
|
||||
- [#4650 — All notes are blank after opening pdf attachment a few times](https://github.com/TriliumNext/Trilium/issues/4650)
|
||||
- [#1209 — Clipper for PDF files?](https://github.com/TriliumNext/Trilium/issues/1209)
|
||||
|
||||
## Cluster 25: Automatic text transformations (dashes, quotes, ellipsis, arrows) (confidence: high)
|
||||
- [#1772 — Change or disable ckeditors automatic text transformation](https://github.com/TriliumNext/Trilium/issues/1772)
|
||||
- [#3400 — Setting to disable replacement of straight quote sign with typographic ones](https://github.com/TriliumNext/Trilium/issues/3400)
|
||||
- [#3767 — Is there a way to turn off Autoformat completely?](https://github.com/TriliumNext/Trilium/issues/3767)
|
||||
- [#4353 — Prevent correcting characters to symbols](https://github.com/TriliumNext/Trilium/issues/4353)
|
||||
- [#5827 — replace a word or symbol with a user defined term](https://github.com/TriliumNext/Trilium/issues/5827)
|
||||
- [#8094 — automatic -- to – conversion happens inside inline code blocks, and moves cursor outside](https://github.com/TriliumNext/Trilium/issues/8094)
|
||||
|
||||
## Cluster 26: Inline/code-block typing issues: `@`, `/`, autocomplete inside code (confidence: high)
|
||||
- [#8322 — Code block tries to link/create note when typing @, and suggests slash-commands when typing /](https://github.com/TriliumNext/Trilium/issues/8322)
|
||||
- [#5426 — Autoformat inline code when typing between backticks](https://github.com/TriliumNext/Trilium/issues/5426)
|
||||
- [#5424 — Autoformat Code-Block with language](https://github.com/TriliumNext/Trilium/issues/5424)
|
||||
- [#1712 — Disable "Internal trilium link (Ctrl+L)" on code-block text selection](https://github.com/TriliumNext/Trilium/issues/1712)
|
||||
|
||||
## Cluster 27: Link dialog / internal-link creation bugs (confidence: high)
|
||||
- [#5669 — Add link dialog fails to link if you press enter twice too quickly](https://github.com/TriliumNext/Trilium/issues/5669)
|
||||
- [#7996 — Typing quickly after Ctrl+L causes search text to be added to note](https://github.com/TriliumNext/Trilium/issues/7996)
|
||||
- [#5170 — "Create and link new note" context menu moves the link to beginning of parent note](https://github.com/TriliumNext/Trilium/issues/5170)
|
||||
- [#8533 — When creating a new note while linking to it, editor always scrolls to top](https://github.com/TriliumNext/Trilium/issues/8533)
|
||||
- [#8330 — Unable to confirm inline note creation via keyboard](https://github.com/TriliumNext/Trilium/issues/8330)
|
||||
- [#8356 — Allow Enter-key to confirm selection in 'Choose Note Type' dialog](https://github.com/TriliumNext/Trilium/issues/8356)
|
||||
- [#8188 — Displaying note icon when creating an inline note link, using @](https://github.com/TriliumNext/Trilium/issues/8188)
|
||||
- [#8465 — Defaulting Ctrl+L to 'arbitrary title'](https://github.com/TriliumNext/Trilium/issues/8465)
|
||||
- [#8641 — @ suggestion list overflows when cursor moves to new line](https://github.com/TriliumNext/Trilium/issues/8641)
|
||||
- [#5174 — '@' Context menu's auto-completion not showing most relevant but most recent](https://github.com/TriliumNext/Trilium/issues/5174)
|
||||
- [#3283 — Misplaced links to newly created pages](https://github.com/TriliumNext/Trilium/issues/3283)
|
||||
- [#3657 — New Note link not showing at cursor location after hitting "enter"](https://github.com/TriliumNext/Trilium/issues/3657)
|
||||
- [#4010 — Text cursor jumps to EOF instead of next line with internal link title](https://github.com/TriliumNext/Trilium/issues/4010)
|
||||
- [#2703 — @ link item dropdown persists between tabs](https://github.com/TriliumNext/Trilium/issues/2703)
|
||||
- [#8729 — Editing internal links](https://github.com/TriliumNext/Trilium/issues/8729)
|
||||
- [#924 — Text following internal link becomes part of the link after switching pages](https://github.com/TriliumNext/Trilium/issues/924)
|
||||
|
||||
## Cluster 28: Backlinks / unlinked references / block refs (confidence: medium)
|
||||
- [#1426 — request: unlinked references](https://github.com/TriliumNext/Trilium/issues/1426)
|
||||
- [#1157 — Split Screen And Unlinked References](https://github.com/TriliumNext/Trilium/issues/1157)
|
||||
- [#4691 — Context-Menu Option: "Add backlink to"](https://github.com/TriliumNext/Trilium/issues/4691)
|
||||
- [#1233 — Block Reference and transclude function](https://github.com/TriliumNext/Trilium/issues/1233)
|
||||
- [#1704 — Content block reference and Content block embedding](https://github.com/TriliumNext/Trilium/issues/1704)
|
||||
- [#1021 — Link to Note Block](https://github.com/TriliumNext/Trilium/issues/1021)
|
||||
- [#5751 — Linking to subtitles](https://github.com/TriliumNext/Trilium/issues/5751)
|
||||
|
||||
## Cluster 29: Markdown standards, heading levels, import/export fidelity (confidence: high)
|
||||
- [#8383 — Abide to markdown standards (H1 handling)](https://github.com/TriliumNext/Trilium/issues/8383)
|
||||
- [#5682 — any markdown text containing $ gets converted into math equations during import](https://github.com/TriliumNext/Trilium/issues/5682)
|
||||
- [#5504 — Import markdown leaves out image](https://github.com/TriliumNext/Trilium/issues/5504)
|
||||
- [#3151 — Import from HTML does not restore indentation](https://github.com/TriliumNext/Trilium/issues/3151)
|
||||
- [#1554 — image alt text in markdown export](https://github.com/TriliumNext/Trilium/issues/1554)
|
||||
- [#5344 — importing html images as attached instead of external reference](https://github.com/TriliumNext/Trilium/issues/5344)
|
||||
- [#4254 — Portrait images incorrectly rotated by 90° after import](https://github.com/TriliumNext/Trilium/issues/4254)
|
||||
- [#5254 — User configurable whitelist of html tags stripped on import](https://github.com/TriliumNext/Trilium/issues/5254)
|
||||
- [#8452 — Export note attributes as Markdown metadata](https://github.com/TriliumNext/Trilium/issues/8452)
|
||||
- [#7606 — Preview of markdown](https://github.com/TriliumNext/Trilium/issues/7606)
|
||||
- [#5690 — markdown editor](https://github.com/TriliumNext/Trilium/issues/5690)
|
||||
- [#3187 — HTML export results in unreadable notes on deeper parts of the tree](https://github.com/TriliumNext/Trilium/issues/3187)
|
||||
- [#3399 — Export Notes option to include internal links](https://github.com/TriliumNext/Trilium/issues/3399)
|
||||
- [#5199 — Export of HTML with [missing note] could have retained names](https://github.com/TriliumNext/Trilium/issues/5199)
|
||||
|
||||
## Cluster 30: Import from third-party apps / OneNote / Joplin / Evernote (confidence: medium)
|
||||
- [#1324 — Import of Joplin documents](https://github.com/TriliumNext/Trilium/issues/1324)
|
||||
- [#5707 — OneNote import tool](https://github.com/TriliumNext/Trilium/issues/5707)
|
||||
- [#4555 — on start of editing formatting is lost of imported .enex note](https://github.com/TriliumNext/Trilium/issues/4555)
|
||||
- [#2870 — Hope add import folder and generates notetree](https://github.com/TriliumNext/Trilium/issues/2870)
|
||||
- [#7923 — Auto Import Folder Contents To Trilium](https://github.com/TriliumNext/Trilium/issues/7923)
|
||||
- [#5355 — Import/Merge Another Trilium Database Into Current database](https://github.com/TriliumNext/Trilium/issues/5355)
|
||||
|
||||
## Cluster 31: Share feature bugs around assets/logo/layout (confidence: high)
|
||||
- [#8953 — Share logo function broken](https://github.com/TriliumNext/Trilium/issues/8953)
|
||||
- [#9096 — Share included content not working](https://github.com/TriliumNext/Trilium/issues/9096)
|
||||
- [#8178 — Layout Issue of a Sharing Page - Lack of Responsiveness](https://github.com/TriliumNext/Trilium/issues/8178)
|
||||
- [#8318 — Share page same title toc jump bug](https://github.com/TriliumNext/Trilium/issues/8318)
|
||||
- [#8451 — Cannot hide left sidebar in shared view using CSS or Attributes](https://github.com/TriliumNext/Trilium/issues/8451)
|
||||
- [#8448 — Attribute #shareExternalLink does not work / has no effect](https://github.com/TriliumNext/Trilium/issues/8448)
|
||||
- [#8942 — shareAlias links not clickable in shared notes](https://github.com/TriliumNext/Trilium/issues/8942)
|
||||
- [#7641 — Cloned collection, after sharing, wrong links for left menu](https://github.com/TriliumNext/Trilium/issues/7641)
|
||||
- [#7666 — Allow adjustable widths for the Content and TOC (Bookmarks) panes in the Share view](https://github.com/TriliumNext/Trilium/issues/7666)
|
||||
- [#5436 — Map not visible when note is shared](https://github.com/TriliumNext/Trilium/issues/5436)
|
||||
- [#4536 — include note not displayed in sharing](https://github.com/TriliumNext/Trilium/issues/4536)
|
||||
- [#2488 — Show attributes on shared notes](https://github.com/TriliumNext/Trilium/issues/2488)
|
||||
- [#2816 — The picture reference in shared notes is not normal](https://github.com/TriliumNext/Trilium/issues/2816)
|
||||
- [#7869 — Share root not found. Please set up a note with #shareRoot label first](https://github.com/TriliumNext/Trilium/issues/7869)
|
||||
- [#8323 — Enabling showLoginInShareTheme does not enable login from base domain](https://github.com/TriliumNext/Trilium/issues/8323)
|
||||
- [#8927 — Add "Copy to Clipboard" Button for Code Blocks in Shared Pages](https://github.com/TriliumNext/Trilium/issues/8927)
|
||||
- [#3430 — Add basic fulltext search to share](https://github.com/TriliumNext/Trilium/issues/3430)
|
||||
- [#5579 — Allow Root note to be #shareRoot](https://github.com/TriliumNext/Trilium/issues/5579)
|
||||
- [#5205 — Image zoom functions / gallery view for shared notes](https://github.com/TriliumNext/Trilium/issues/5205)
|
||||
- [#5303 — Creating human-readable URL aliases without sharing](https://github.com/TriliumNext/Trilium/issues/5303)
|
||||
- [#5217 — Friendly share urls: turn title into shareAlias](https://github.com/TriliumNext/Trilium/issues/5217)
|
||||
- [#5446 — shareAlias should warn you, if the alias is already used on another shared note](https://github.com/TriliumNext/Trilium/issues/5446)
|
||||
- [#2664 — Allow unsharing of notes in a shared subtree](https://github.com/TriliumNext/Trilium/issues/2664)
|
||||
- [#2620 — Add expiration date & max requests for shared notes](https://github.com/TriliumNext/Trilium/issues/2620)
|
||||
- [#4816 — Public Link with Search or Advanced Search Options for Entire TREE [Trilium Server]](https://github.com/TriliumNext/Trilium/issues/4816)
|
||||
|
||||
## Cluster 32: Templates — inheritance / override / scoped behavior (confidence: high)
|
||||
- [#8428 — Templates outside the workspace cannot be used within the workspace](https://github.com/TriliumNext/Trilium/issues/8428)
|
||||
- [#5626 — Include all available templates, even in hoisted notes](https://github.com/TriliumNext/Trilium/issues/5626)
|
||||
- [#4396 — Ordering of templates](https://github.com/TriliumNext/Trilium/issues/4396)
|
||||
- [#3138 — Template organization via template groups with drop-down menus](https://github.com/TriliumNext/Trilium/issues/3138)
|
||||
- [#3761 — Template mixins: Grouped inherited promoted attributes](https://github.com/TriliumNext/Trilium/issues/3761)
|
||||
- [#3184 — Auto-setup links when creating a template](https://github.com/TriliumNext/Trilium/issues/3184)
|
||||
- [#5423 — `~child:child:template=...` and deeper child-template not applied automatically](https://github.com/TriliumNext/Trilium/issues/5423)
|
||||
- [#5583 — Add a template label #rerunScriptsOnTemplateChange](https://github.com/TriliumNext/Trilium/issues/5583)
|
||||
- [#3958 — Allow hiding/blocking inherited attributes on template users](https://github.com/TriliumNext/Trilium/issues/3958)
|
||||
- [#5089 — template-Typed Attributes/Relationships](https://github.com/TriliumNext/Trilium/issues/5089)
|
||||
- [#2797 — A quicker way to create a bunch of new pages from a template](https://github.com/TriliumNext/Trilium/issues/2797)
|
||||
- [#2544 — Forms/Fields in a template?](https://github.com/TriliumNext/Trilium/issues/2544)
|
||||
- [#5080 — Investigate #titleTemplate for template notes](https://github.com/TriliumNext/Trilium/issues/5080)
|
||||
- [#5511 — Calculated Content in Templates via Inline Javascript](https://github.com/TriliumNext/Trilium/issues/5511)
|
||||
- [#3015 — Template collision for Code note](https://github.com/TriliumNext/Trilium/issues/3015)
|
||||
|
||||
## Cluster 33: Tree UX — expand/collapse, folders, sorting (confidence: high)
|
||||
- [#8477 — Folders, folders, folders](https://github.com/TriliumNext/Trilium/issues/8477)
|
||||
- [#2181 — Change note icon for folder note with content vs folder note without content](https://github.com/TriliumNext/Trilium/issues/2181)
|
||||
- [#6410 — Display the notes number in folders](https://github.com/TriliumNext/Trilium/issues/6410)
|
||||
- [#3356 — Collapsed child notes links should toggle the expansion on first click](https://github.com/TriliumNext/Trilium/issues/3356)
|
||||
- [#7901 — Sub pages are not displayed anymore](https://github.com/TriliumNext/Trilium/issues/7901)
|
||||
- [#6641 — When creating a new note, the closed tree will be reopened](https://github.com/TriliumNext/Trilium/issues/6641)
|
||||
- [#8996 — Hide expand/collapse children button in tree view when all children are hidden archived notes](https://github.com/TriliumNext/Trilium/issues/8996)
|
||||
- [#1144 — Option to auto expand book nodes](https://github.com/TriliumNext/Trilium/issues/1144)
|
||||
- [#2203 — Option to not expand a subtree when you open a subnote](https://github.com/TriliumNext/Trilium/issues/2203)
|
||||
- [#926 — Option to not to expand parent note when note is made it's child](https://github.com/TriliumNext/Trilium/issues/926)
|
||||
- [#5159 — Child notes don't refresh on selecting a different note](https://github.com/TriliumNext/Trilium/issues/5159)
|
||||
- [#7279 — Implement Sticky tree view headers as a native feature](https://github.com/TriliumNext/Trilium/issues/7279)
|
||||
- [#5305 — Note Tree Sidebar - Confirmation Dialogue When Dragging and Dropping To Move Note](https://github.com/TriliumNext/Trilium/issues/5305)
|
||||
- [#8526 — Make Ctrl + Click select multiple notes in the note tree by default](https://github.com/TriliumNext/Trilium/issues/8526)
|
||||
- [#3851 — Can't drag a note to the top of the child list?](https://github.com/TriliumNext/Trilium/issues/3851)
|
||||
- [#1269 — Customize note title shown in tree](https://github.com/TriliumNext/Trilium/issues/1269)
|
||||
- [#7564 — Change the default sorting of grades to alphabetical order](https://github.com/TriliumNext/Trilium/issues/7564)
|
||||
- [#6829 — Allow sorting notes by multiple attributes](https://github.com/TriliumNext/Trilium/issues/6829)
|
||||
- [#518 — Sorting protected notes](https://github.com/TriliumNext/Trilium/issues/518)
|
||||
|
||||
## Cluster 34: Tabs — opening / pinning / scrolling / default behavior (confidence: high)
|
||||
- [#3082 — Option to open notes in new tab by default](https://github.com/TriliumNext/Trilium/issues/3082)
|
||||
- [#2710 — Open new tabs next to the current one](https://github.com/TriliumNext/Trilium/issues/2710)
|
||||
- [#2281 — If note already open in another tab](https://github.com/TriliumNext/Trilium/issues/2281)
|
||||
- [#7607 — Add API support to check and switch to an already opened note tab](https://github.com/TriliumNext/Trilium/issues/7607)
|
||||
- [#5562 — Pin tab](https://github.com/TriliumNext/Trilium/issues/5562)
|
||||
- [#9032 — Horizontal scroll bar for improved tab row navigation](https://github.com/TriliumNext/Trilium/issues/9032)
|
||||
- [#8331 — table of contents and search do not work properly in closed-then-reopened tabs](https://github.com/TriliumNext/Trilium/issues/8331)
|
||||
- [#3053 — Restore previous windows and tabs open on startup](https://github.com/TriliumNext/Trilium/issues/3053)
|
||||
- [#2212 — Ctrl+W on root note should close Trilium](https://github.com/TriliumNext/Trilium/issues/2212)
|
||||
- [#1181 — Make tabs keep the scroll on the tree left panel](https://github.com/TriliumNext/Trilium/issues/1181)
|
||||
- [#2128 — Workspace name in tab title](https://github.com/TriliumNext/Trilium/issues/2128)
|
||||
|
||||
## Cluster 35: Note-editor data-loss / crash / blanking on switching or paste (confidence: high)
|
||||
- [#8282 — text editor crashed](https://github.com/TriliumNext/Trilium/issues/8282)
|
||||
- [#8952 — The software suddenly crashed, causing me to lose all the notes](https://github.com/TriliumNext/Trilium/issues/8952)
|
||||
- [#8913 — text 文本突然崩溃,且无法打开](https://github.com/TriliumNext/Trilium/issues/8913)
|
||||
- [#9110 — Note crashed at multiple ctrl+z/paste operations](https://github.com/TriliumNext/Trilium/issues/9110)
|
||||
- [#8866 — Cursor jumps to note beginning periodically, tabs reset - LauncherContainer performance issue](https://github.com/TriliumNext/Trilium/issues/8866)
|
||||
- [#5346 — Notes experiencing automatic snapshot recovery, edited content has no historical records](https://github.com/TriliumNext/Trilium/issues/5346)
|
||||
- [#5431 — Text note contents disappeared when switching from "Read-Only" to editable](https://github.com/TriliumNext/Trilium/issues/5431)
|
||||
- [#5192 — Notes not saving](https://github.com/TriliumNext/Trilium/issues/5192)
|
||||
- [#7393 — Note content overwritten (data loss!) when changing the title of snippets](https://github.com/TriliumNext/Trilium/issues/7393)
|
||||
- [#7405 — Clicking on the code box causes the entire document to become blank](https://github.com/TriliumNext/Trilium/issues/7405)
|
||||
- [#8079 — Pasting a reply copied from the Gemini website will result in the content in the code box being lost](https://github.com/TriliumNext/Trilium/issues/8079)
|
||||
- [#4463 — Unexpected Data Loss in Trilium After Application Restart and Backup Restoration](https://github.com/TriliumNext/Trilium/issues/4463)
|
||||
- [#6153 — CKEditorError: marker-destroyed when edit with search](https://github.com/TriliumNext/Trilium/issues/6153)
|
||||
|
||||
## Cluster 36: Editor scroll/cursor jumps during typing/sync (confidence: high)
|
||||
- [#3704 — Trilium always places the cursor at the beginning of the note](https://github.com/TriliumNext/Trilium/issues/3704)
|
||||
- [#8866 — Cursor jumps to note beginning periodically (crossover with cluster 35)](https://github.com/TriliumNext/Trilium/issues/8866)
|
||||
- [#3214 — cursor jumps to another place after click included note](https://github.com/TriliumNext/Trilium/issues/3214)
|
||||
- [#4354 — input cursor always positioned in the center of the screen](https://github.com/TriliumNext/Trilium/issues/4354)
|
||||
- [#5191 — Allow scrolling when the cursor is in the margins of a note](https://github.com/TriliumNext/Trilium/issues/5191)
|
||||
- [#7373 — Typing slows down to the point where it can't be used](https://github.com/TriliumNext/Trilium/issues/7373)
|
||||
- [#5673 — Editor extremely slow with large-ish checkbox trees](https://github.com/TriliumNext/Trilium/issues/5673)
|
||||
- [#3478 — Lagging Trilium frontend when editing large note](https://github.com/TriliumNext/Trilium/issues/3478)
|
||||
- [#8440 — Lagginess, rubberbanding on frontend](https://github.com/TriliumNext/Trilium/issues/8440)
|
||||
|
||||
## Cluster 37: Math/LaTeX editor issues (confidence: high)
|
||||
- [#7999 — The confirm button in the LaTeX formula editor doesn't work](https://github.com/TriliumNext/Trilium/issues/7999)
|
||||
- [#8891 — One simple math display error (sum, prod render wrong)](https://github.com/TriliumNext/Trilium/issues/8891)
|
||||
- [#7211 — Note content gets deleted after altering math equation size](https://github.com/TriliumNext/Trilium/issues/7211)
|
||||
- [#3121 — write math inline, the text panel will delete things that i wrote before](https://github.com/TriliumNext/Trilium/issues/3121)
|
||||
- [#3457 — Strange behavior when dealing with math related contents](https://github.com/TriliumNext/Trilium/issues/3457)
|
||||
- [#1357 — Inserting a space after a math expression deletes it](https://github.com/TriliumNext/Trilium/issues/1357)
|
||||
- [#8598 — Enable `globalGroup` for KaTeX (or make the global macros configurable)](https://github.com/TriliumNext/Trilium/issues/8598)
|
||||
- [#3130 — Latex in titles](https://github.com/TriliumNext/Trilium/issues/3130)
|
||||
- [#5375 — `replaceMathTextWithKatax` method is duplicated in `highlight_list.ts` and `toc.js`](https://github.com/TriliumNext/Trilium/issues/5375)
|
||||
|
||||
## Cluster 38: Vim / Emacs / alt keybindings for editor (confidence: high)
|
||||
- [#2259 — VIM support](https://github.com/TriliumNext/Trilium/issues/2259)
|
||||
- [#4405 — Vim keybindings - Add yank to/paste from system clipboard register](https://github.com/TriliumNext/Trilium/issues/4405)
|
||||
- [#4969 — Note editors other than CKEditor](https://github.com/TriliumNext/Trilium/issues/4969)
|
||||
|
||||
## Cluster 39: Custom keyboard shortcuts: missing/broken/conflict (confidence: high)
|
||||
- [#6643 — Some shortcuts not working anymore](https://github.com/TriliumNext/Trilium/issues/6643)
|
||||
- [#5517 — Keyboard Shortcuts can be assigned multiple times](https://github.com/TriliumNext/Trilium/issues/5517)
|
||||
- [#5482 — Option to disable Electron built-in shortcuts (Ctrl+Q etc.)](https://github.com/TriliumNext/Trilium/issues/5482)
|
||||
- [#4543 — Couple of keyboard shortcut names in keyboard_actions.js do not match database](https://github.com/TriliumNext/Trilium/issues/4543)
|
||||
- [#5359 — keyboard shortcuts from keyboard_actions service are not translatable](https://github.com/TriliumNext/Trilium/issues/5359)
|
||||
- [#1512 — Fail to define shortcut like Meta+[ or Meta+Shift+Left](https://github.com/TriliumNext/Trilium/issues/1512)
|
||||
- [#1131 — Alt + <x> keyboard shortcuts with active editor](https://github.com/TriliumNext/Trilium/issues/1131)
|
||||
- [#4989 — (Keyboard) shortcuts for more actions](https://github.com/TriliumNext/Trilium/issues/4989) — meta-ticket
|
||||
- [#8604 — Show warning toast when triggering "global:" shortcuts](https://github.com/TriliumNext/Trilium/issues/8604)
|
||||
- [#5638 — Add Ctrl + D Shortcut to Select Next Matching Occurrence](https://github.com/TriliumNext/Trilium/issues/5638)
|
||||
- [#6350 — Repeat last action shortcut](https://github.com/TriliumNext/Trilium/issues/6350)
|
||||
- [#4242 — Subscript & Superscript Shortcuts](https://github.com/TriliumNext/Trilium/issues/4242)
|
||||
- [#9006 — Switch Alt Enter with Enter](https://github.com/TriliumNext/Trilium/issues/9006)
|
||||
- [#3304 — Add shortcut (set text to code format)](https://github.com/TriliumNext/Trilium/issues/3304)
|
||||
- [#5475 — Add keyboard shortcuts for managing splits](https://github.com/TriliumNext/Trilium/issues/5475)
|
||||
- [#1046 — Global shortcut (desktop)](https://github.com/TriliumNext/Trilium/issues/1046)
|
||||
|
||||
## Cluster 40: Docker: USER_UID/GID, backup path, healthcheck, rootless (confidence: high)
|
||||
- [#5131 — v0.90.4 docker does not read USER_UID and USER_GID from environment](https://github.com/TriliumNext/Trilium/issues/5131)
|
||||
- [#3045 — Docker: Can't run by using user 1000:1000](https://github.com/TriliumNext/Trilium/issues/3045)
|
||||
- [#3697 — Docker: Set USER_GID to 100](https://github.com/TriliumNext/Trilium/issues/3697)
|
||||
- [#3868 — docker log show chown operation not permitted](https://github.com/TriliumNext/Trilium/issues/3868)
|
||||
- [#4008 — Permissions issue: Can not set UID and GID to '0'](https://github.com/TriliumNext/Trilium/issues/4008)
|
||||
- [#8261 — fix docker backup path](https://github.com/TriliumNext/Trilium/issues/8261)
|
||||
- [#4576 — Avoid CPU Usage Spikes by improving the healthcheck script](https://github.com/TriliumNext/Trilium/issues/4576)
|
||||
- [#7884 — Remove `docker-compose.rootless.yaml`, as it deprecated](https://github.com/TriliumNext/Trilium/issues/7884)
|
||||
- [#5790 — Can't pull rootless](https://github.com/TriliumNext/Trilium/issues/5790)
|
||||
- [#6390 — The `arm64` docker image does include `wget`](https://github.com/TriliumNext/Trilium/issues/6390)
|
||||
- [#2239 — Docker Compose file needs to be updated](https://github.com/TriliumNext/Trilium/issues/2239)
|
||||
- [#9311 — Official RISC-V (riscv64) Docker image support](https://github.com/TriliumNext/Trilium/issues/9311)
|
||||
|
||||
## Cluster 41: Packaging: Chocolatey / Flathub / Snap / Homebrew / winget (confidence: medium)
|
||||
- [#8122 — continue updating on chocolatey repository](https://github.com/TriliumNext/Trilium/issues/8122)
|
||||
- [#6406 — Packaging for Chocolatey](https://github.com/TriliumNext/Trilium/issues/6406)
|
||||
- [#5086 — Investigate Windows additional package managers (winget/chocolatey/scoop)](https://github.com/TriliumNext/Trilium/issues/5086)
|
||||
- [#5108 — Deploy to Flathub](https://github.com/TriliumNext/Trilium/issues/5108)
|
||||
- [#4732 — Flathub Verification](https://github.com/TriliumNext/Trilium/issues/4732)
|
||||
- [#4194 — "open externally" doesn't work in Trilium Flatpak](https://github.com/TriliumNext/Trilium/issues/4194)
|
||||
- [#5725 — Add TriliumNext to TrueNAS apps](https://github.com/TriliumNext/Trilium/issues/5725)
|
||||
- [#6708 — Packaging RPMs fails with RPM 4.20+](https://github.com/TriliumNext/Trilium/issues/6708)
|
||||
- [#6825 — NixOS server installation port can't be configured](https://github.com/TriliumNext/Trilium/issues/6825)
|
||||
- [#4871 — Adding Elestio as deployment option](https://github.com/TriliumNext/Trilium/issues/4871)
|
||||
- [#2391 — One-click installation on CapRover](https://github.com/TriliumNext/Trilium/issues/2391)
|
||||
|
||||
## Cluster 42: Electron / desktop app: crash, tray, auto-update, minimize (confidence: medium)
|
||||
- [#4439 — Update mechanism (in-app)](https://github.com/TriliumNext/Trilium/issues/4439)
|
||||
- [#393 — Upgrade option (in-app)](https://github.com/TriliumNext/Trilium/issues/393)
|
||||
- [#3743 — Minimize/close to tray icon](https://github.com/TriliumNext/Trilium/issues/3743)
|
||||
- [#5401 — Confusing behaviour when the application is minimized in system tray](https://github.com/TriliumNext/Trilium/issues/5401)
|
||||
- [#6805 — Adaptive Tray icon](https://github.com/TriliumNext/Trilium/issues/6805)
|
||||
- [#9083 — Using alt + F4 when there are multiple windows will close all windows](https://github.com/TriliumNext/Trilium/issues/9083)
|
||||
- [#8882 — Desktop (macOS ARM64): window shows {"message":"Not Found"} on startup](https://github.com/TriliumNext/Trilium/issues/8882)
|
||||
- [#8912 — macOS dynamic traffic light offset based on zoom factor](https://github.com/TriliumNext/Trilium/issues/8912)
|
||||
- [#5333 — The SUID sandbox helper binary was found, but is not configured correctly](https://github.com/TriliumNext/Trilium/issues/5333)
|
||||
- [#5525 — Unable to launch desktop client - Permission denied](https://github.com/TriliumNext/Trilium/issues/5525)
|
||||
- [#5526 — Investigate Creating/Shipping AppArmor Profile](https://github.com/TriliumNext/Trilium/issues/5526)
|
||||
- [#7468 — display issue with app folders on the macOS Launchpad](https://github.com/TriliumNext/Trilium/issues/7468)
|
||||
- [#3500 — Trillium notes does not start if the firewall has blocked it](https://github.com/TriliumNext/Trilium/issues/3500)
|
||||
- [#5729 — Firewall warning on corporate network](https://github.com/TriliumNext/Trilium/issues/5729)
|
||||
- [#6919 — Version 0.98.1 on Windows 11, the client startup reports an OOM error and crashes](https://github.com/TriliumNext/Trilium/issues/6919)
|
||||
- [#6570 — The Win client crashed](https://github.com/TriliumNext/Trilium/issues/6570)
|
||||
|
||||
## Cluster 43: Mobile web/PWA UX (confidence: high)
|
||||
- [#7447 — Milestone: Official mobile application](https://github.com/TriliumNext/Trilium/issues/7447)
|
||||
- [#7517 — Wrong notification bar color in PWA](https://github.com/TriliumNext/Trilium/issues/7517)
|
||||
- [#8974 — Table of Content visibility toggle for smartphone/mobile screens](https://github.com/TriliumNext/Trilium/issues/8974)
|
||||
- [#5713 — When using a custom theme, the #launcher-container is not scrollable on mobile devices](https://github.com/TriliumNext/Trilium/issues/5713)
|
||||
- [#4150 — Mobile interface, add 'move note' to note menu](https://github.com/TriliumNext/Trilium/issues/4150)
|
||||
- [#4468 — Add toggle button for promoted attribute on mobile version](https://github.com/TriliumNext/Trilium/issues/4468)
|
||||
- [#4392 — (mobile ux) toggling checkboxes opens the keyboard](https://github.com/TriliumNext/Trilium/issues/4392)
|
||||
- [#4394 — (mobile ux) editing notes offline covers the screen in errors](https://github.com/TriliumNext/Trilium/issues/4394)
|
||||
- [#5706 — Modals/dialogues being presented too high/low which inhibits input (especially on iPad-safari/edge)](https://github.com/TriliumNext/Trilium/issues/5706)
|
||||
- [#6999 — Editing a Relation (from template) in mobile view, don't work](https://github.com/TriliumNext/Trilium/issues/6999)
|
||||
- [#7116 — Mobile Webapp: Text Notes Bullet List Issue](https://github.com/TriliumNext/Trilium/issues/7116)
|
||||
- [#1813 — Note title input on mobile](https://github.com/TriliumNext/Trilium/issues/1813)
|
||||
- [#2833 — Cannot select relation note to edit on mobile](https://github.com/TriliumNext/Trilium/issues/2833)
|
||||
- [#1170 — How to disable note editing in mobile front end?](https://github.com/TriliumNext/Trilium/issues/1170)
|
||||
- [#3389 — Images upload sequence on mobile](https://github.com/TriliumNext/Trilium/issues/3389)
|
||||
- [#8225 — Offline mode for the PWA](https://github.com/TriliumNext/Trilium/issues/8225)
|
||||
- [#8372 — Support "share_target" in PWA to share files into Trilium notes](https://github.com/TriliumNext/Trilium/issues/8372)
|
||||
|
||||
## Cluster 44: Tree focus / cursor navigation / keyboard tree nav (confidence: medium)
|
||||
- [#9259 — Notes no longer receive focus when navigating via the left tree](https://github.com/TriliumNext/Trilium/issues/9259)
|
||||
- [#1715 — Page up/down in note selection dialogs (Jump to note, ..)](https://github.com/TriliumNext/Trilium/issues/1715)
|
||||
- [#1166 — Context menu is not usable with keyboard](https://github.com/TriliumNext/Trilium/issues/1166)
|
||||
- [#7942 — "Open Command Palette" shortcut opens with the '>' symbol highlighted](https://github.com/TriliumNext/Trilium/issues/7942)
|
||||
|
||||
## Cluster 45: Images: drag-drop, compression, inline, gallery, paste (confidence: medium)
|
||||
- [#5795 — Allow dropping image attachments in without shrinking them](https://github.com/TriliumNext/Trilium/issues/5795)
|
||||
- [#5361 — UX: image options clarification](https://github.com/TriliumNext/Trilium/issues/5361)
|
||||
- [#5126 — AVIF image compression support](https://github.com/TriliumNext/Trilium/issues/5126)
|
||||
- [#5670 — Option to define default image alignment when pasting document](https://github.com/TriliumNext/Trilium/issues/5670)
|
||||
- [#3724 — Paste picture default Settings](https://github.com/TriliumNext/Trilium/issues/3724)
|
||||
- [#7895 — Image Gallery/Collection](https://github.com/TriliumNext/Trilium/issues/7895)
|
||||
- [#5697 — Take photo from camera](https://github.com/TriliumNext/Trilium/issues/5697)
|
||||
- [#5825 — annotate image](https://github.com/TriliumNext/Trilium/issues/5825)
|
||||
- [#3794 — Tiling images without resorting to tables](https://github.com/TriliumNext/Trilium/issues/3794)
|
||||
- [#9120 — Images as links](https://github.com/TriliumNext/Trilium/issues/9120)
|
||||
- [#4898 — Link in images](https://github.com/TriliumNext/Trilium/issues/4898)
|
||||
- [#1544 — embedding image with url](https://github.com/TriliumNext/Trilium/issues/1544)
|
||||
- [#8150 — Note header image](https://github.com/TriliumNext/Trilium/issues/8150)
|
||||
- [#3593 — Ability to disable to jump to an image when an image is attached](https://github.com/TriliumNext/Trilium/issues/3593)
|
||||
- [#5233 — Copy and Paste not working, only Text is pasted not Images](https://github.com/TriliumNext/Trilium/issues/5233)
|
||||
- [#2818 — problems with copying and pasting pictures across software](https://github.com/TriliumNext/Trilium/issues/2818)
|
||||
- [#2621 — Inconsistency import pictures with Trilium Web Clipper Addon](https://github.com/TriliumNext/Trilium/issues/2621)
|
||||
- [#9134 — Images opened in new tabs do not show up](https://github.com/TriliumNext/Trilium/issues/9134)
|
||||
- [#4221 — SVG zooming in 0.61](https://github.com/TriliumNext/Trilium/issues/4221)
|
||||
|
||||
## Cluster 46: Attachments: rendering, opening, converting, linking (confidence: high)
|
||||
- [#5818 — Converting an attachment to a note breaks links](https://github.com/TriliumNext/Trilium/issues/5818)
|
||||
- [#4562 — Attachment Links not working as expected](https://github.com/TriliumNext/Trilium/issues/4562)
|
||||
- [#5118 — Copying attachment link to clipboard fails](https://github.com/TriliumNext/Trilium/issues/5118)
|
||||
- [#7670 — Attachment link customization](https://github.com/TriliumNext/Trilium/issues/7670)
|
||||
- [#5363 — Option to open HTML attachment in browser instead of download](https://github.com/TriliumNext/Trilium/issues/5363)
|
||||
- [#4384 — Display attachments directly inside notes](https://github.com/TriliumNext/Trilium/issues/4384)
|
||||
- [#4885 — reload read position after "go back" from attachment view](https://github.com/TriliumNext/Trilium/issues/4885)
|
||||
- [#7466 — When returning from the attachment, the text editing bar appears blank](https://github.com/TriliumNext/Trilium/issues/7466)
|
||||
- [#5528 — Editing a note causes its attachments opened on separate splits/windows to be re-rendered on each keystroke](https://github.com/TriliumNext/Trilium/issues/5528)
|
||||
- [#4498 — Bulk convert to attachment](https://github.com/TriliumNext/Trilium/issues/4498)
|
||||
- [#212 — Tooltip for an attachment can display basic info and download/open buttons](https://github.com/TriliumNext/Trilium/issues/212)
|
||||
- [#8314 — Scissor "Cut & Paste Selection to Sub-note" does not transfer image attachments](https://github.com/TriliumNext/Trilium/issues/8314)
|
||||
|
||||
## Cluster 47: Attributes: label autocomplete / relations / bulk / suggestions (confidence: medium)
|
||||
- [#39 — Implement attribute autocomplete in search input](https://github.com/TriliumNext/Trilium/issues/39)
|
||||
- [#75 — add standard attribute value autocomplete](https://github.com/TriliumNext/Trilium/issues/75)
|
||||
- [#139 — Label listing can be clickable and lead to search of given label](https://github.com/TriliumNext/Trilium/issues/139)
|
||||
- [#1668 — Search autocompletion for labels](https://github.com/TriliumNext/Trilium/issues/1668)
|
||||
- [#1284 — Picky details of new Attributes field](https://github.com/TriliumNext/Trilium/issues/1284)
|
||||
- [#4124 — Labels with predefined lists](https://github.com/TriliumNext/Trilium/issues/4124)
|
||||
- [#1877 — No distinction between `undefined` and `false` in a boolean promoted attribute](https://github.com/TriliumNext/Trilium/issues/1877)
|
||||
- [#6349 — Promoted, single date label produces multiple entries](https://github.com/TriliumNext/Trilium/issues/6349)
|
||||
- [#4058 — API removeLabel() results in duplicated labels upon refreshing](https://github.com/TriliumNext/Trilium/issues/4058)
|
||||
- [#8187 — Search for new relation in promoted attributes does not suggest to create it](https://github.com/TriliumNext/Trilium/issues/8187)
|
||||
- [#5443 — Include attributes in revisions](https://github.com/TriliumNext/Trilium/issues/5443)
|
||||
- [#4305 — Encrypted / Protected attributes](https://github.com/TriliumNext/Trilium/issues/4305)
|
||||
- [#6421 — [wip] Attributes V2](https://github.com/TriliumNext/Trilium/issues/6421) — umbrella
|
||||
- [#6853 — Aliases for Label/Relation definitions should either forbid `,` or escape it](https://github.com/TriliumNext/Trilium/issues/6853)
|
||||
- [#5546 — `#readOnly` should be applied to title and labels (attributes) too](https://github.com/TriliumNext/Trilium/issues/5546)
|
||||
- [#6162 — Global Tag View for Enhanced Usability](https://github.com/TriliumNext/Trilium/issues/6162)
|
||||
- [#5849 — label system](https://github.com/TriliumNext/Trilium/issues/5849)
|
||||
- [#760 — tag system suggest](https://github.com/TriliumNext/Trilium/issues/760)
|
||||
- [#3415 — Unify the attribute_detail and builtin_attributes definitions](https://github.com/TriliumNext/Trilium/issues/3415)
|
||||
|
||||
## Cluster 48: Clone terminology / cloning UX (confidence: medium)
|
||||
- [#4099 — An idea for (perhaps) a better naming of note clones](https://github.com/TriliumNext/Trilium/issues/4099)
|
||||
- [#5281 — Change `clone` terminology](https://github.com/TriliumNext/Trilium/issues/5281)
|
||||
- [#7024 — where is my clone note? An easy way to find clone note](https://github.com/TriliumNext/Trilium/issues/7024)
|
||||
- [#1572 — Could locations of cloned notes appear in global search?](https://github.com/TriliumNext/Trilium/issues/1572)
|
||||
- [#4668 — Create clone location when it doesn't exist](https://github.com/TriliumNext/Trilium/issues/4668)
|
||||
- [#6226 — Adding "Clone to" to search bulk actions](https://github.com/TriliumNext/Trilium/issues/6226)
|
||||
- [#2362 — "Delete all clones" checkbox should have a different message if there are no clones](https://github.com/TriliumNext/Trilium/issues/2362)
|
||||
- [#7396 — Duplicate a note without cloning it](https://github.com/TriliumNext/Trilium/issues/7396)
|
||||
|
||||
## Cluster 49: Hoisting / workspaces (confidence: medium)
|
||||
- [#3540 — Unhoist temporarily (unhoist and hoist back the original hoisted note)](https://github.com/TriliumNext/Trilium/issues/3540)
|
||||
- [#4080 — Workspace Specific Launchers](https://github.com/TriliumNext/Trilium/issues/4080)
|
||||
- [#5671 — Option to search entire database when a note is hoisted](https://github.com/TriliumNext/Trilium/issues/5671)
|
||||
|
||||
## Cluster 50: Deletion / undelete / bulk actions / undo subtree (confidence: high)
|
||||
- [#7293 — failed to delete notes when permanently deleting multi notes with children notes](https://github.com/TriliumNext/Trilium/issues/7293)
|
||||
- [#7288 — Ghost note remains when moving multiple notes into a newly created note](https://github.com/TriliumNext/Trilium/issues/7288)
|
||||
- [#5497 — Undo, permanent delete: add as action for note tree](https://github.com/TriliumNext/Trilium/issues/5497)
|
||||
- [#6257 — "Erase notes permanently" Option When Deleting Notes](https://github.com/TriliumNext/Trilium/issues/6257)
|
||||
- [#5536 — Recent Changes not correct. Undelete doc is confusing](https://github.com/TriliumNext/Trilium/issues/5536)
|
||||
- [#616 — Undo for Subtree Operations](https://github.com/TriliumNext/Trilium/issues/616)
|
||||
- [#1266 — Suggestion for Recent Changes (divide into sections)](https://github.com/TriliumNext/Trilium/issues/1266)
|
||||
|
||||
## Cluster 51: Similar notes / right panel / attribute window performance (confidence: medium)
|
||||
- [#8900 — Uncaught TypeError thrown when switching notes with bottom-right attribute window open](https://github.com/TriliumNext/Trilium/issues/8900)
|
||||
- [#1654 — Contextual `Similar notes` algorithm based on search string](https://github.com/TriliumNext/Trilium/issues/1654)
|
||||
|
||||
## Cluster 52: Geo-map features and undo (confidence: high)
|
||||
- [#6259 — support ctrl+z/undo when mistakingly moving a pin](https://github.com/TriliumNext/Trilium/issues/6259)
|
||||
- [#8565 — Colors in map do not match colors of notes](https://github.com/TriliumNext/Trilium/issues/8565)
|
||||
- [#5451 — Request to add polylines or polygons on the geomap note type](https://github.com/TriliumNext/Trilium/issues/5451)
|
||||
@@ -1,435 +0,0 @@
|
||||
# Easy-Fix Candidates — Trilium Issue Review
|
||||
|
||||
Consolidated from per-batch analysis of all 859 open issues (as of 2026-04-09).
|
||||
Total easy-fix candidates identified: **61**
|
||||
|
||||
Each item below was classified by a subagent reviewing issue bodies individually. Effort and confidence are the subagent's estimate. Before picking one up, re-read the original issue and verify the proposed solution against current `main`.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 01
|
||||
|
||||
### [#9330 — Web clipper setup fails with trailing / in server setup](https://github.com/TriliumNext/Trilium/issues/9330)
|
||||
- **Problem**: Entering `https://server/` (trailing slash) in the web clipper options form produces malformed requests (`//api/...`) because the URL isn't normalized.
|
||||
- **Proposed solution**: In `apps/web-clipper/entrypoints/options/index.ts`, strip any trailing slash from `$triliumServerUrl.val()` before storing it (lines 32, 63). Also defensively trim it again when read in `apps/web-clipper/entrypoints/background/trilium_server_facade.ts` (line 121) before concatenating with the API path.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8882 — Desktop (macOS ARM64): window shows `{"message":"Not Found"}` on startup](https://github.com/TriliumNext/Trilium/issues/8882)
|
||||
- **Problem**: In Electron, `res.sendFile(path.join(publicDir, "index.html"))` fails because `send`/streaming cannot read from inside the `app.asar` archive; reporter identified the root cause and the fix.
|
||||
- **Proposed solution**: In `apps/server/src/routes/assets.ts` line 72 (non-dev branch), replace `res.sendFile(path.join(publicDir, "index.html"), STATIC_OPTIONS)` with a `readFile` + `res.send()` (Electron patches `fs.readFile` to work inside asar, but not `send`'s streaming pipeline). Set `Content-Type: text/html; charset=utf-8`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8916 — Note Map view of `Hidden Notes` freezes Trilium](https://github.com/TriliumNext/Trilium/issues/8916)
|
||||
- **Problem**: Invoking Note Map on the `_hidden` root attempts to render thousands of system nodes and hangs the renderer irrecoverably (edge case).
|
||||
- **Proposed solution**: In the note-map widget (`apps/client/src/widgets/type_widgets/note_map.tsx` or similar — search `noteMap`), short-circuit the render when `note.noteId === "_hidden"` or when the aggregate number of descendants exceeds a threshold; show a warning instead of computing the graph. Alternatively hide the "Note map" entry from the `...` menu when the current note is `_hidden` (or any note ancestored by it) via a simple guard in the menu population code.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — the guard is trivial to add, but the exact file path depends on where the note-map command is currently wired after the React port.
|
||||
|
||||
### [#8850 — Search does not work for `#clipType=note`](https://github.com/TriliumNext/Trilium/issues/8850)
|
||||
- **Problem**: Searching `#clipType=note` returns all notes in 0.101.3 and throws an error in nightly. The literal value `note` likely collides with the search DSL keyword `note` (note title predicate).
|
||||
- **Proposed solution**: In `apps/server/src/services/search/` token parsing, quote/escape attribute values when they match reserved keywords, or force attribute-expression RHS parsing to treat the RHS as a literal until whitespace. Simplest targeted fix: ensure the attribute-value tokenizer does not re-interpret `note` as a type keyword when it appears after `=`. Reporter-visible workaround is `#clipType="note"` (confirm this works before closing).
|
||||
- **Effort**: small
|
||||
- **Confidence**: low — the symptom points at the search tokenizer but the root cause needs a quick repro against current code.
|
||||
|
||||
### [#8900 — Uncaught TypeError thrown when switching notes with bottom-right attribute window open](https://github.com/TriliumNext/Trilium/issues/8900)
|
||||
- **Problem**: Switching notes while the attribute detail popup is open throws a console TypeError (no visible break). Classic missing null-check on teardown.
|
||||
- **Proposed solution**: Find the attribute detail widget (`apps/client/src/widgets/ribbon/attributes/*` or `widgets/attribute_widgets`) and guard the cleanup handler to check whether the widget/element still exists before calling into it. The user screenshot would pinpoint the exact line; a defensive `if (!$elem?.length) return;` at the top of the refresh/hide handler is typical.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — confidence hinges on identifying the exact handler from the screenshot; the fix itself is one line.
|
||||
|
||||
### [#9174 — Right navigation (TOC) font doesn't match editor until you keep typing](https://github.com/TriliumNext/Trilium/issues/9174)
|
||||
- **Problem**: When you change a heading's style in the editor, the TOC side panel doesn't re-render using the new style until more content is added.
|
||||
- **Proposed solution**: The TOC widget subscribes to content changes but likely ignores "attribute-only" (style) changes. In the TOC widget (`apps/client/src/widgets/right_panel/*toc*` or `table_of_contents*.tsx`) ensure the listener refreshes on model changes that alter heading attributes too — typically replacing a content-only comparison with a re-render on every editor `change` event, or listening to CKEditor's `change:data` broadly.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
---
|
||||
|
||||
## From Batch 02
|
||||
|
||||
### [#8561 — documentation - word count widget](https://github.com/TriliumNext/Trilium/issues/8561)
|
||||
- **Problem**: Word count widget docs don't prominently state the note must have the `#wordCount` label.
|
||||
- **Proposed solution**: Edit `apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html` to add an explicit note (admonition) above the code snippet stating: "The widget only activates on text notes that carry the `#wordCount` label (it can be inherited)." The code comment already mentions this but it's buried inside the example code block.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8401 — router not found for request GET /api/search](https://github.com/TriliumNext/Trilium/issues/8401)
|
||||
- **Problem**: Third-party Home Assistant addon gets "router not found" on `GET /api/search`.
|
||||
- **Proposed solution**: Not a Trilium bug — the route is `/api/search/:searchString` (see `apps/server/src/routes/routes.ts:255`). The addon is calling the route without the required path parameter. Close as invalid with a pointer to the addon author.
|
||||
- **Effort**: trivial (close with explanation)
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8322 — Code block tries to link/create note when typing @, and suggests slash-commands when typing /](https://github.com/TriliumNext/Trilium/issues/8322)
|
||||
- **Problem**: Inside full `code` blocks in text notes, typing `@` triggers the note-link autocomplete and `/` triggers slash commands.
|
||||
- **Proposed solution**: In the CKEditor mention/slash-command plugin configuration (`packages/ckeditor5/src/plugins` area that wires Mention/SlashCommand), disable the mention & slash-command feeders when the selection is inside a `codeBlock` element. Typically a single predicate check. Worth verifying but should be small.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
- **Note**: the issue body contains an image with a prompt-injection attempt in its `alt` attribute which I ignored.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 03
|
||||
|
||||
### [#8230 — Demo spacing and formatting issues](https://github.com/TriliumNext/Trilium/issues/8230)
|
||||
- **Problem**: `apps/edit-docs/demo/root/Trilium Demo.html` line 78 has "code blocks</a>and" (missing space before "and"), a comma trapped inside the `<a>` for "checkbox lists,", and could use a serial comma.
|
||||
- **Proposed solution**: Edit `apps/edit-docs/demo/root/Trilium Demo.html` around line 78: move the `,` out of the `checkbox lists` anchor, add a space before `and`, and optionally add a serial comma before the final list item. Note: this file is authored via `pnpm run edit-docs` and the demo/demo.zip artifact may also need regeneration.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8045 — Mac Client setup doesn't support trailing slash](https://github.com/TriliumNext/Trilium/issues/8045)
|
||||
- **Problem**: The sync-from-server setup form passes `syncServerHost` verbatim, so a trailing slash produces `http://host:port//api/...` URLs.
|
||||
- **Proposed solution**: In `apps/client/src/setup.ts` around line 102, strip trailing slashes: `const syncServerHost = this.syncServerHostInput.value.trim().replace(/\/+$/, "");`. The setup modal is small enough that this single change covers it.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#8188 — Displaying note icon when creating an inline note link, using @](https://github.com/TriliumNext/Trilium/issues/8188)
|
||||
- **Problem**: The `@`-mention feed in CKEditor renders only the highlighted title, no icon, while other autocomplete surfaces show icons. The backend (`apps/server/src/routes/api/autocomplete.ts:70`) already returns `icon`, but it is dropped before reaching the itemRenderer.
|
||||
- **Proposed solution**:
|
||||
1. In `apps/client/src/services/note_autocomplete.ts` `autocompleteSourceForCKEditor` (around lines 63–72), include `icon: row.icon` in the mapped object.
|
||||
2. In `apps/client/src/widgets/type_widgets/text/config.ts` around lines 184–190, prepend an `<span class="bx ...">` using the item's icon inside the generated button.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7884 — Remove `docker-compose.rootless.yaml`, as it is deprecated](https://github.com/TriliumNext/Trilium/issues/7884)
|
||||
- **Problem**: The reporter wants the now-deprecated `docker-compose.rootless.yml` file removed. A `Glob` for `docker-compose.rootless*` at repo root returns nothing, so the file is already gone, but the issue remains open and references to it in docs (if any) should be scrubbed.
|
||||
- **Proposed solution**: Verify no docs still link to `docker-compose.rootless.yml` (quick Grep), then close the issue as already addressed. If any lingering references exist, remove them.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7942 — "Open Command Palette" shortcut opens with the '>' symbol highlighted](https://github.com/TriliumNext/Trilium/issues/7942)
|
||||
- **Problem**: `apps/client/src/widgets/dialogs/jump_to_note.tsx` unconditionally calls `.trigger("select")` in `onShown` (line 85), which highlights the entire input — including the `>` prefix — so the first keystroke wipes out the command-mode marker.
|
||||
- **Proposed solution**: When `mode === "commands"`, instead of selecting all text, place the caret at the end. For example, grab the underlying input and call `setSelectionRange(len, len)` on it; keep `.trigger("select")` for the other modes. Single-file change in `jump_to_note.tsx`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (needs quick confirm that the autocomplete input is a normal `<input>`)
|
||||
|
||||
---
|
||||
|
||||
## From Batch 04
|
||||
|
||||
### [#7085 — [regression] Archived notes are listed in note search/quick search](https://github.com/TriliumNext/Trilium/issues/7085)
|
||||
- **Problem**: Autocomplete/quick-search returns `#archived` notes after the fuzzy-search rewrite, breaking the previous behaviour.
|
||||
- **Proposed solution**: `searchNotesForAutocomplete` in `apps/server/src/services/search/services/search.ts:671` already passes `includeArchivedNotes: false`, and `parse.ts:472` wraps the expression with `PropertyComparisonExp("isarchived", "=", "false")`. However, `NoteFlatTextExp` in `apps/server/src/services/search/expressions/note_flat_text.ts` is invoked via `getFulltext` and walks `candidateNotes` without consulting `searchContext.includeArchivedNotes`; an archived candidate still produces hits because the `AndExp` short-circuit only filters *final* results through the comparison exp after paths are collected. Add an early `note.hasInheritedLabel('archived')` short-circuit at the top of the `for (const note of candidateNotes)` loop (line 102) gated on `!searchContext.includeArchivedNotes`. A matching test already exists at `search.spec.ts:696` — extend it to cover the autocomplete (flat-text) path.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#7396 — Duplicate a note without cloning it](https://github.com/TriliumNext/Trilium/issues/7396)
|
||||
- **Problem**: User cannot find the already-existing "Duplicate subtree" action and assumes cut/paste is the only way (which clones).
|
||||
- **Proposed solution**: This is a discoverability issue only — `duplicateSubtree` is already wired in `apps/client/src/menus/tree_context_menu.ts`, `apps/client/src/services/note_create.ts`, and has a keyboard shortcut. Close with a comment pointing at the existing context menu item, or (tiny improvement) ensure the label `Duplicate subtree` is in `apps/client/src/translations/en/translation.json` so it's discoverable. No code change needed.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7564 — Change the default sorting of grades to alphabetical order in Trilium](https://github.com/TriliumNext/Trilium/issues/7564)
|
||||
- **Problem**: User question about how to configure multi-key sort (`#sorted=color` plus creation date), not a bug.
|
||||
- **Proposed solution**: No code change — the user describes how to use existing `#sorted` attribute. Close with a pointer to `apps/server/src/assets/doc_notes/en/User Guide/.../Sorting.html`. This belongs in Discussions.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7606 — Preview of markdown](https://github.com/TriliumNext/Trilium/issues/7606)
|
||||
- **Problem**: User asks where the side-by-side markdown preview is.
|
||||
- **Proposed solution**: Trilium is a WYSIWYG editor — "Text" notes render rich text directly, not markdown, so there is no preview pane by design. Close with explanation or redirect to the Markdown import/export docs. No code change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7274 — Insert internal links to notes in the canvas and mind map](https://github.com/TriliumNext/Trilium/issues/7274)
|
||||
- **Problem**: User question about whether internal links can be inserted inside canvas/mind-map objects.
|
||||
- **Proposed solution**: This overlaps with the long-standing limitation of Excalidraw/mind-map link handling. Likely duplicate of a canvas-link feature request. Close as duplicate / redirect to Discussions. No code change here (real implementation work lives under #7182 and related).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#7072 — How to obtain recent_notes to achieve the system menu bar effect](https://github.com/TriliumNext/Trilium/issues/7072)
|
||||
- **Problem**: User asks how to build a custom widget reading from `recent_notes`.
|
||||
- **Proposed solution**: Support question. The `recent_notes` table is exposed via the autocomplete endpoint in `apps/server/src/routes/api/autocomplete.ts:40` and via `api.runOnBackend` scripting. Redirect to Discussions / scripting docs. No code change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
---
|
||||
|
||||
## From Batch 05
|
||||
|
||||
### [#6387 — Current OpenID Connect Implementation is not compatible with Authelia](https://github.com/TriliumNext/Trilium/issues/6387)
|
||||
- **Problem**: `afterCallback` in `open_id.ts` blindly calls `req.oidc.user.name.toString()` / `.email.toString()`, crashing with `Cannot read properties of undefined (reading 'toString')` when the IdP (Authelia) does not return `name`/`email` in `req.oidc.user`.
|
||||
- **Proposed solution**: In `apps/server/src/services/open_id.ts` lines 125–137, guard the `.toString()` calls (e.g. `req.oidc.user.name?.toString() ?? ""`) and/or call `await req.oidc.fetchUserInfo()` to populate user claims before saving. `sub` is the only reliably-present field; `name`/`email` should fall back gracefully.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high — verified source still matches the line referenced in the issue and the null-deref still exists.
|
||||
|
||||
### [#6390 — `arm64` docker image does not include `wget`](https://github.com/TriliumNext/Trilium/issues/6390)
|
||||
- **Problem**: Third-party tooling (Coolify) depends on `wget` being present in the docker image for healthchecks.
|
||||
- **Proposed solution**: Either (a) document that Trilium healthchecks now use the bundled `docker_healthcheck.cjs` (no `wget` required at all — both `apps/server/Dockerfile` and `Dockerfile.alpine` only install `gosu`/`su-exec`), or (b) add `wget` to the apt/apk install line in `apps/server/Dockerfile` and `Dockerfile.alpine` for backwards-compat with external tooling. Option (a) is the right call; Coolify should be updated. Either way this is a 1–2 line change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — the fix itself is trivial but whether to actually add wget is a policy call for maintainers.
|
||||
|
||||
### [#5790 — Can't pull `rootless` docker tag](https://github.com/TriliumNext/Trilium/issues/5790)
|
||||
- **Problem**: `docker pull triliumnext/notes:rootless` returns "manifest unknown"; the docs reference a tag that does not exist on Docker Hub (the image is now published as `triliumnext/trilium`, not `triliumnext/notes`).
|
||||
- **Proposed solution**: Update the docs at `apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker.html` (and the `Using Docker.md` referenced in the issue) to use `triliumnext/trilium:rootless` (the repo was renamed from `Notes` to `Trilium` and there are now `Dockerfile.rootless` / `Dockerfile.alpine.rootless` files in `apps/server/`). Also confirm the rootless tag is actually published in the CI workflow under `.github/workflows/`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — docs fix is trivial but it may also require fixing the publish workflow if the tag is not pushed.
|
||||
|
||||
### [#6730 — Clear or disable search history](https://github.com/TriliumNext/Trilium/issues/6730)
|
||||
- **Problem**: Jump-to-note results are cluttered with Search History entries; no way to hide/clear them.
|
||||
- **Proposed solution**: The command-palette already has a "show-search-history" entry (`apps/client/src/services/command_registry.ts` line 83). The jump-to dialog at `apps/client/src/widgets/dialogs/jump_to_note.tsx` likely surfaces history as part of its result list — either add an option to filter them out or add a "Clear history" action. A quick win: add a user-option-backed toggle (e.g. `jumpToShowSearchHistory` default true) and skip search-history notes when false. New key under `apps/client/src/translations/en/translation.json`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — depends on whether jump-to currently blends history entries via a single query; needs a quick read of `jump_to_note.tsx` to confirm.
|
||||
|
||||
### [#6134 — The checkbox and cursor in the to-do list are too close](https://github.com/TriliumNext/Trilium/issues/6134)
|
||||
- **Problem**: In todo lists, the checkbox and the caret/text sit with no visual spacing.
|
||||
- **Proposed solution**: Adjust the padding/margin of `.ck-content .todo-list .todo-list__label > input` (or `.todo-list__label__description`) in `apps/client/src/stylesheets/style.css` around line 1184 — add a small `margin-inline-end` / `gap` on the label. One-line CSS tweak.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium — CSS adjust is trivial but exact value needs design call.
|
||||
|
||||
### [#6468 — Table function area blocks the text function area](https://github.com/TriliumNext/Trilium/issues/6468)
|
||||
- **Problem**: When a CKEditor table is tall, the sticky table toolbar floats over the main text toolbar.
|
||||
- **Proposed solution**: CSS tweak to give the main CKEditor toolbar a higher `z-index` than the inline table toolbar, or add a top-offset on the table toolbar so it doesn't overlap. Candidate file `apps/client/src/stylesheets/ckeditor-theme.css` (or `style.css`). Target `.ck-toolbar_floating` / `.ck.ck-balloon-panel`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — CSS z-index/offset fix is cheap but the root cause may involve CKEditor's own balloon/toolbar stacking context.
|
||||
|
||||
### [#6555 — Unable to set column value to zero in table view](https://github.com/TriliumNext/Trilium/issues/6555)
|
||||
- **Problem**: Entering `0` in a Number column in Table view clears the label instead of saving "0".
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/table/row_editing.ts` around line 42, `newValue = cell.getValue()` returns a number. The boolean branch already stringifies, but the plain-label branch passes a number through to `setLabel`. Add `if (typeof newValue === "number") newValue = String(newValue);` before the `setLabel` call. Also verify the server-side `set-attribute` endpoint doesn't coerce `0` to empty (`apps/server/src/routes/routes.ts` handler).
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — client fix is 1 line, server may also need a touch.
|
||||
|
||||
### [#6204 — Presence of #workspaceCalendarRoot affects how notes are displayed](https://github.com/TriliumNext/Trilium/issues/6204)
|
||||
- **Problem**: When a note has both `#viewType=calendar` and `#workspaceCalendarRoot`, events are forced to all-day (only `#dateNote` notes shown) and `#startTime`/`#endTime` are ignored.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/calendar/index.tsx` (verified existing file), `isCalendarRoot = (calendarRoot || workspaceCalendarRoot)` collapses both flags into a single "date-note only" mode. The bug is the OR — workspaceCalendarRoot should NOT enable the date-note-only event builder unless the user also set `calendarRoot`. Suggest decoupling: only force date-note mode when `calendarRoot` is set, and let `workspaceCalendarRoot` simply mark the note as a workspace root without changing the event source. Single-file change.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — behavioral fix clearly localized, but intent of `workspaceCalendarRoot` needs maintainer confirmation.
|
||||
|
||||
### [#6518 — Open child note from table view by clicking note name](https://github.com/TriliumNext/Trilium/issues/6518)
|
||||
- **Problem**: Clicking a note title in the Table view starts renaming instead of opening the note.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/collections/table/columns.tsx` / `row_editing.ts`, change the title column so that a single click opens the note (via `appContext.tabManager.getActiveContext()?.setNote()`) and double-click (or a dedicated pencil area) starts editing. Tabulator supports this through `cellClick` + `editable` on double-click.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — clearly confined to the table view module.
|
||||
|
||||
### [#6817 — Jump To…: Create new notes in Inbox (not as child notes)](https://github.com/TriliumNext/Trilium/issues/6817)
|
||||
- **Problem**: When the Jump-to dialog creates a new note, it uses the current parent, but users expect it to land in the Inbox.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/jump_to_note.tsx`, when creating a new note, resolve the inbox note (`dateNotesService.getInboxNote()` equivalent in the client — there's already an `inboxNote` helper via `#inbox` attribute lookup). Simple target-parent swap. Optionally add a setting toggle.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — small code change; might want a user-setting to keep it opt-in.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 06
|
||||
|
||||
### [#5712 — Tooltip z-index is too low?](https://github.com/TriliumNext/Trilium/issues/5712)
|
||||
- **Problem**: Tooltips in context menus appear behind Bootstrap modals because tooltip z-index is `calc(var(--ck-z-panel) - 1)` (~998), while Bootstrap modal z-index is 1055.
|
||||
- **Proposed solution**: In `apps/client/src/stylesheets/style.css` around line 733, raise `.tooltip` z-index above modal (e.g. `z-index: 1060 !important;` to match the Bootstrap default of 1080, or set it with `calc(var(--bs-modal-zindex, 1055) + 5)`). Confirmed the file at `apps/client/src/stylesheets/style.css:731-734` still has the old value and `bootstrap.rtl.css:5454` sets `--bs-modal-zindex: 1055`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5617 — Clean up the code formatting](https://github.com/TriliumNext/Trilium/issues/5617)
|
||||
- **Problem**: Maintenance task — enable format-on-save, apply formatting to repo, enable import sort/unused-import cleanup.
|
||||
- **Proposed solution**: Flip `editor.formatOnSave` to `true` in `.vscode/settings.json` (currently line 2: `"editor.formatOnSave": false`), add import ordering ESLint rule, then run `pnpm prettier --write`/eslint autofix on the codebase. The repo already has `eslint-config-prettier` and `@stylistic` rules wired up.
|
||||
- **Effort**: small (mechanical, but touches many files)
|
||||
- **Confidence**: medium — task scope is clear but apply-all-fix is large enough to risk conflicts with open PRs (as the issue itself warns).
|
||||
|
||||
---
|
||||
|
||||
## From Batch 07
|
||||
|
||||
### [#5494 — Context Menu click on Submenu parent should not trigger event/close the context menu](https://github.com/TriliumNext/Trilium/issues/5494)
|
||||
- **Problem**: Left-clicking a submenu parent (e.g. "Insert note after") still fires its own `handler` / `selectMenuItemHandler`, creating a new note without the user actually picking a subitem.
|
||||
- **Proposed solution**: In `apps/client/src/menus/context_menu.ts` (createMenuItem mousedown handler, around lines 319–323), gate the `item.handler(...)` and `selectMenuItemHandler(...)` calls behind `if (!("items" in item && item.items))`. The non-mobile branch already short-circuits `this.hide()` for submenu parents (line 315), so only the handler invocation needs the same guard.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5371 — Titles of Settings/Options are renamable](https://github.com/TriliumNext/Trilium/issues/5371)
|
||||
- **Problem**: The title input in Options pages is editable, letting users rename hidden system notes like `_optionsAppearance`.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/note_title.tsx` (lines 24–32), extend the `isReadOnly` check to also return `true` when `note.noteId.startsWith("_options")` (alongside the existing `_help_` and `isLaunchBarConfig` clauses).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5375 — `replaceMathTextWithKatax` method is duplicated in `highlight_list.ts` and `toc.js`](https://github.com/TriliumNext/Trilium/issues/5375)
|
||||
- **Problem**: Same helper exists in both `highlights_list.ts` and `toc.ts` (verified via Grep — `toc.ts:240` and `highlights_list.ts`).
|
||||
- **Proposed solution**: Extract the function into a small shared module under `apps/client/src/services/` (e.g. `math_renderer.ts`) and import it from both widgets. Pure refactor, no behavior change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5311 — New API method: isMobile()](https://github.com/TriliumNext/Trilium/issues/5311)
|
||||
- **Problem**: Scripts have no way to detect if they are running on the mobile/desktop/web client.
|
||||
- **Proposed solution**: `utils.isMobile()` already exists in `apps/client/src/services/utils.ts:226`. Just expose it on the frontend script API — add `isMobile: utils.isMobile` to the API constructor in `apps/client/src/services/frontend_script_api.ts` (and the Preact variant) alongside the other utility re-exports. No backend work needed.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5513 — UX: friendly numbers in settings: Sync timeout](https://github.com/TriliumNext/Trilium/issues/5513)
|
||||
- **Problem**: Sync timeout is shown in milliseconds with no human-friendly unit (sub-task of #5336).
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/options/sync.tsx` (around line 59–65), either change the unit to seconds (divide/multiply by 1000 on read/write) or reuse a "time value + unit" composite, plus update the `sync_2.timeout_unit` key in `apps/client/src/translations/en/translation.json` (currently "milliseconds").
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (straightforward but touches save/load conversion)
|
||||
|
||||
### [#5444 — UX: friendly numbers in settings: Zoom factor (percent better than decimal factor)](https://github.com/TriliumNext/Trilium/issues/5444)
|
||||
- **Problem**: Zoom factor in Appearance options is shown as a 0.3–2.0 decimal (verified at `appearance.tsx:342–347`), while the global menu already uses percent.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/options/appearance.tsx` `ElectronIntegration`, switch the `FormTextBox` to a percent input (min 30, max 200, step 10) and multiply/divide by 100 when reading/writing the `zoomFactor` option. The ideal refactor (extracting `zoom-container` from `global_menu.tsx`) is nice-to-have but not required for a first fix.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5414 — Localization: add support to follow the system language](https://github.com/TriliumNext/Trilium/issues/5414)
|
||||
- **Problem**: No "System default" option in the locale dropdown.
|
||||
- **Proposed solution**: Add a sentinel value (e.g. `"auto"`) to the locale combo in `apps/client/src/widgets/type_widgets/options/i18n.tsx` and make it the default for new installs. When selected, resolve the effective locale by matching `navigator.language` against the list of supported locales (`apps/client/src/services/i18n.ts` exposes them), falling back to English. No server changes required because language is a client option.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#5376 — Add "Open Note" to list of search actions](https://github.com/TriliumNext/Trilium/issues/5376)
|
||||
- **Problem**: Search actions lack an "Open Note" entry to open all matching notes.
|
||||
- **Proposed solution**: Search actions are registered in `apps/server/src/services/search/actions/` (e.g. `set_attribute.ts`, etc.) and the UI picker in `apps/client/src/widgets/search_actions/`. Add a new action class that emits an `openNote`/`openNoteInNewTab` command per result, plus a corresponding UI entry. Modest scope because existing actions already provide a clear template.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
---
|
||||
|
||||
## From Batch 08
|
||||
|
||||
### [#5250 — (Feature request) Prevent options note title changes](https://github.com/TriliumNext/Trilium/issues/5250)
|
||||
- **Problem**: Titles of hidden options notes (e.g. `_optionsAppearance`) are editable by the user, which is inconsistent since their titles come from translations.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/note_title.tsx` (the `isReadOnly` computation around lines 25-31), add a condition for hidden/system notes. Simplest: `note.noteId.startsWith("_options")` (or more broadly, `note.noteId.startsWith("_") && !isLaunchBarConfig(...)` — but that's riskier). The existing pattern already handles `_help_` and launch bar config, so extending it with options IDs is a one-line change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5201 — (Feature request) Disable text selection in mermaid diagrams?](https://github.com/TriliumNext/Trilium/issues/5201)
|
||||
- **Problem**: Dragging to pan a mermaid diagram also selects text, which interferes with pan gesture.
|
||||
- **Proposed solution**: Add the CSS rule (`user-select: none; -webkit-user-select: none;`) to `.mermaid-render` in the mermaid type widget's CSS. Issue author provides the exact CSS. Locate the mermaid type widget under `apps/client/src/widgets/type_widgets/` and append to its stylesheet — no need for a settings toggle as a first pass.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#5220 — (Feature request) Add the `#appJs` attribute to load a custom script](https://github.com/TriliumNext/Trilium/issues/5220)
|
||||
- **Problem**: `#appCss` exists for globally loading CSS from a note; an analogous `#appJs` would let users ship a JS library once instead of cloning it into every render note.
|
||||
- **Proposed solution**: Mirror the existing `#appCss` handling — grep for `appCss` in `apps/server/src/` and `apps/client/src/` and add a parallel path that injects a `<script>` tag. The mechanism is well-established; mostly copy/paste. Document the obvious security caveats in the attribute docs (labels.html).
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium (easy code-wise; security framing may prompt more review)
|
||||
|
||||
---
|
||||
|
||||
## From Batch 09
|
||||
|
||||
### [#4584 — (Feature Request) Hide hidden notes from `similar notes` view](https://github.com/TriliumNext/Trilium/issues/4584)
|
||||
- **Problem**: Similar-notes results include notes living inside the `_hidden` subtree (templates, system notes, launchers), polluting the list.
|
||||
- **Proposed solution**: In `apps/server/src/becca/similarity.ts` around line 411 (`for (const candidateNote of Object.values(becca.notes))`), skip candidates where `candidateNote.isHiddenCompletely()` is true. The helper already exists on `BNote` (`apps/server/src/becca/entities/bnote.ts:1203`), so this is a one-liner guard.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4780 — (Feature request) Change Icon for Jump to Note](https://github.com/TriliumNext/Trilium/issues/4780)
|
||||
- **Problem**: The Jump-to-Note launcher icon is `bx bx-send` (a paper-airplane/send icon), which suggests sending instead of navigating.
|
||||
- **Proposed solution**: Change `icon: "bx bx-send"` to a navigation-style icon (e.g. `"bx bx-navigation"`, `"bx bx-log-in"`, `"bx bx-crosshair"`) in `apps/server/src/services/hidden_subtree_launcherbar.ts` at lines 105 and the second occurrence near line 194. Existing installations should pick up the change because launcher bar items are created via `HiddenSubtreeItem`; since the icon is stored as an attribute, add `enforceAttributes: true` to that entry if the icon should override user customisations.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high (trivial to change; needs confirmation of the enforcement behaviour)
|
||||
|
||||
### [#4543 — (Bug report) Orphaned keyboardShortcuts* options after upgrade](https://github.com/TriliumNext/Trilium/issues/4543)
|
||||
- **Problem**: Users upgraded from 0.59.x have stale `keyboardShortcutsShowNoteRevisions` and `keyboardShortcutsForceSaveNoteRevision` option rows that produce “Keyboard action … found in database, but not in action definition.” warnings on every startup. The active action names are `showRevisions` / `forceSaveRevision` (`apps/server/src/services/keyboard_actions.ts:449,825`).
|
||||
- **Proposed solution**: Add a small migration under `apps/server/src/migrations/` that deletes the two orphaned options: `DELETE FROM options WHERE name IN ('keyboardShortcutsShowNoteRevisions','keyboardShortcutsForceSaveNoteRevision')`. Follow the pattern of existing migrations and register it in `apps/server/src/migrations/migrations.ts`.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
---
|
||||
|
||||
## From Batch 10
|
||||
|
||||
### [#4051 — (Bug report) Protected notes visible in Edited Notes](https://github.com/TriliumNext/Trilium/issues/4051)
|
||||
- **Problem**: The "Edited Notes" sidebar on day notes lists protected notes with their real titles even without an active protected session, leaking encrypted data.
|
||||
- **Proposed solution**: In `apps/server/src/routes/api/revisions.ts` `getEditedNotesOnDate()` (around line 155-189), filter out protected notes when no protected session is active. After `let notes = becca.getNotes(...)`, add a filter using `protectedSessionService.isProtectedSessionAvailable()` (from `apps/server/src/services/protected_session.ts`) to either skip `note.isProtected` rows or replace their title/content with a placeholder, mirroring how other protected-aware endpoints behave.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4150 — Mobile interface, add 'move note' to note menu](https://github.com/TriliumNext/Trilium/issues/4150)
|
||||
- **Problem**: The mobile burger menu previously lacked a "move note" action.
|
||||
- **Proposed solution**: Likely already resolved: `apps/client/src/widgets/mobile_widgets/mobile_detail_menu.tsx` now composes the shared `NoteContextMenu` (`widgets/ribbon/NoteActions.tsx`) which already exposes move commands. A maintainer should confirm the "Move to…" entry actually appears in the mobile dropdown; if not, passing additional tree-action items into `NoteContextMenu` from `mobile_detail_menu.tsx` is a one-file change.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium
|
||||
|
||||
### [#3751 — (Bug report) Logging api.startNote in backend JS script crashes app](https://github.com/TriliumNext/Trilium/issues/3751)
|
||||
- **Problem**: `api.log(api.startNote)` crashes the server because `ws.js` does `JSON.stringify` on an object graph containing circular refs.
|
||||
- **Proposed solution**: In the log sender (grep for `JSON.stringify` in `apps/server/src/services/ws.ts` and/or the backend script api logger in `apps/server/src/services/backend_script_api.ts`), wrap `JSON.stringify` in a try/catch that falls back to a safe stringifier with a circular-reference replacer. Reporter already linked the MDN example.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high
|
||||
|
||||
### [#4178 — api.$container is null error for statistics js script](https://github.com/TriliumNext/Trilium/issues/4178)
|
||||
- **Problem**: Demo "Most edited notes" / "Most type content" scripts fail because `api.$container` is null when the script runs outside a render-widget context.
|
||||
- **Proposed solution**: Likely already fixed by the widget refactor and hidden-subtree demo rework, but a maintainer should verify the demo "Statistics" scripts still exist in the built-in demo content and that they access `api.$container` only when rendered as a render note. If the demo still ships, a null-guard (`if (!api.$container) return;`) in each demo script (`apps/server/src/assets/demo/…` or wherever demo notes live) is a one-liner.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: low
|
||||
|
||||
### [#3746 — (Feature request) add "include title" option in the "include note" windows](https://github.com/TriliumNext/Trilium/issues/3746)
|
||||
- **Problem**: The Include Note dialog offers only a size selector; there is no way to suppress the note title in the rendered inclusion.
|
||||
- **Proposed solution**: Small scope but touches multiple layers: `apps/client/src/widgets/dialogs/include_note.tsx` to add a checkbox, `packages/ckeditor5/src/plugins/includenote.ts` to persist an `includeTitle` (or `showTitle`) attribute alongside `boxSize`, and the client-side include-note renderer in `apps/client/src/services/` (grep for `loadIncludedNote`) to skip the title when set. Still contained to a well-understood area.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium
|
||||
|
||||
---
|
||||
|
||||
## From Batch 11
|
||||
|
||||
### [#3697 — Docker : Set USER_GID to 100 (Feature request)](https://github.com/TriliumNext/Trilium/issues/3697)
|
||||
- **Problem**: `start-docker.sh` runs `groupmod -g ${USER_GID} node`, which fails when GID 100 already exists (e.g. Unraid's default `users` group).
|
||||
- **Proposed solution**: `apps/server/start-docker.sh` line 4 currently uses `groupmod -og ${USER_GID} node` (the `-o` flag allows a non-unique GID). This is likely already the fix — verify the published Docker image ships this and close. If `rootless-entrypoint.sh` still lacks `-o`, add it there too.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high (code already uses `-og`, just needs image-release verification)
|
||||
|
||||
---
|
||||
|
||||
## From Batch 12
|
||||
|
||||
### [#3151 — (Bug report) Import from HTML does not restore indentation](https://github.com/TriliumNext/Trilium/issues/3151)
|
||||
- **Problem**: Exported HTML has `style="margin-left:40px"` on `<p>` but importing strips that style, losing indentation.
|
||||
- **Proposed solution**: In `/home/elian/Projects/Trilium/apps/server/src/services/html_sanitizer.ts` (line ~49 `allowedStyles`), add `margin-left` (and likely `padding-left`, `text-align`) to the allowed styles for `p` (or `*`). Currently only `color`/`background-color` are globally allowed; the entire `style` attribute is preserved but sanitize-html strips unknown properties.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high
|
||||
|
||||
### [#2817 — open internal link in OSX apps](https://github.com/TriliumNext/Trilium/issues/2817)
|
||||
- **Problem**: `bookends:` URLs don't open externally from notes because the protocol isn't in the allow-list.
|
||||
- **Proposed solution**: Add `bookends` (and any other commonly requested scheme) to `ALLOWED_PROTOCOLS` in `/home/elian/Projects/Trilium/packages/commons/src/lib/shared_constants.ts`. The CKEditor/link handler already calls `electron.shell.openExternal` for allowed protocols (see `apps/client/src/services/link.ts:338`).
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: medium (fix is trivial; user may also need CKEditor to permit `bookends:` hrefs in the schema)
|
||||
|
||||
---
|
||||
|
||||
## From Batch 13
|
||||
|
||||
### [#2362 — "Delete all clones" checkbox should have a different message if there are no clones](https://github.com/TriliumNext/Trilium/issues/2362)
|
||||
- **Problem**: The "Delete all clones" checkbox is always rendered in the delete dialog even when the note has no clones, confusing users who don't know whether to tick it.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/delete_notes.tsx`, compute the clone count from `noteIdsToBeDeleted` vs the branch count (or use a server-returned count). When `cloneCount <= 1`, render an info alert like "This note has no clones" instead of the `FormCheckbox`. When clones exist, append the count to the label (`delete_notes.delete_all_clones_description_n`). Add the new translation keys to `apps/client/src/translations/en/translation.json`.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — may need to thread a clone count through `delete-notes-preview` response if not already available.
|
||||
|
||||
### [#2455 — Various feature requests (new-tab autocomplete focus portion only)](https://github.com/TriliumNext/Trilium/issues/2455)
|
||||
- **Problem**: When opening a new tab, the caret is no longer inside the "search for a note by its name" autocomplete field; user has to manually click it.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/type_widgets/Empty.tsx`, add `autocompleteRef.current?.focus()` inside the existing `useEffect` that calls `note_autocomplete.showRecentNotes`. Only the focus subpart of this meta-issue is easy; the other sub-items (Tab navigation in search results, shortcut collisions inside search field, scroll shortcuts) are not in scope.
|
||||
- **Effort**: trivial
|
||||
- **Confidence**: high for the focus part only.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 14
|
||||
|
||||
### [#1712 — [UI/Low priority] Disable "Internal trilium link (Ctrl+L)" on code-block text selection](https://github.com/TriliumNext/Trilium/issues/1712)
|
||||
- **Problem**: The "Internal Trilium link" toolbar button remains enabled when text inside a code block is selected even though all other formatting buttons are disabled.
|
||||
- **Proposed solution**: In the CKEditor plugin that registers the `internallink` command (search `packages/ckeditor5*` for the command), override `refresh()` to also disable the command when the selection is inside a `codeBlock` element (use `isAllowedInSelection` / `schema.checkChild` against the selection's parent). Similar pattern is used by the built-in `link` command.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — requires locating the custom plugin but the fix is a one-line schema check
|
||||
|
||||
### [#1643 — [FEATURE] note revision preview for `Saved search` notes](https://github.com/TriliumNext/Trilium/issues/1643)
|
||||
- **Problem**: Saved search notes don't have a revision preview in the revisions dialog despite being simple JSON content.
|
||||
- **Proposed solution**: In `apps/client/src/widgets/dialogs/revisions.*` (or wherever revision content is rendered), add a branch that renders saved-search revision content as plain JSON/text like code notes. Likely a missing `else if (type === "search")` path.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — needs code inspection to confirm the exact switch
|
||||
|
||||
---
|
||||
|
||||
## From Batch 15
|
||||
|
||||
### [#762 — [UX] Print paths with colored '/' separators](https://github.com/TriliumNext/Trilium/issues/762)
|
||||
- **Problem**: When a note title contains `/`, the note-path breadcrumbs become ambiguous; a visually distinct separator would disambiguate.
|
||||
- **Proposed solution**: In the path-rendering code (search `apps/client/src/services/tree.ts` / `apps/client/src/widgets/note_tree.ts` for `getNotePath` / `/` concatenation, and `apps/client/src/widgets/note_path_list_widget.*`), wrap the separator in `<span class="note-path-separator">/</span>` and add a subtle color/bold rule in the corresponding CSS. Purely a rendering tweak.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — straightforward once the exact render site is located.
|
||||
|
||||
### [#342 — Warn if user is trying to run the script in a wrong environment](https://github.com/TriliumNext/Trilium/issues/342)
|
||||
- **Problem**: When a frontend script is invoked on the backend (or vice versa) it silently fails; the user gets no helpful message.
|
||||
- **Proposed solution**: In `apps/server/src/services/script.ts` (backend execution) check `note.mime` / `note.getLabelValue("runOnBackend")` against the caller context and throw a descriptive error; mirror in `apps/client/src/services/script_context.ts` for frontend. Single `if` with a clear error message per side.
|
||||
- **Effort**: small
|
||||
- **Confidence**: medium — the two script runners exist, just need a type guard + thrown error.
|
||||
|
||||
### [#21 — Script execution should error out on usage of protected notes outside of protected session](https://github.com/TriliumNext/Trilium/issues/21)
|
||||
- **Problem**: Scripts silently fail in unpredictable ways when they access protected notes without a protected session.
|
||||
- **Proposed solution**: In `apps/server/src/services/script.ts` (and `script_context.ts`), before invoking the script check `note.isProtected && !protectedSessionService.isProtectedSessionAvailable()` and throw a clear error (e.g. "Cannot run protected script without a protected session"). No such guard currently exists per `grep` on the script services.
|
||||
- **Effort**: small
|
||||
- **Confidence**: high — isolated pre-check in one place.
|
||||
@@ -1,616 +0,0 @@
|
||||
# Feature Request Fit Analysis — Trilium
|
||||
|
||||
Every one of the **423 open feature requests** in TriliumNext/Trilium was individually classified by a subagent against Trilium's product identity. The question asked for each issue was: **"Can this reasonably be integrated into Trilium, or is it too specific / out of scope?"**
|
||||
|
||||
## Headline numbers
|
||||
|
||||
| Category | Count | % | Recommendation |
|
||||
|---|---:|---:|---|
|
||||
| **Strong fit** | 108 | 25.5% | Clear alignment with core subsystems — accept and prioritize |
|
||||
| **Reasonable fit** | 181 | 42.8% | QoL improvements to existing subsystems — accept contributions |
|
||||
| **Niche / scripting territory** | 77 | 18.2% | Better as user scripts or custom note types — redirect |
|
||||
| **Out of scope** | 55 | 13.0% | Doesn't fit Trilium's identity — close with rationale |
|
||||
| **Unclear** | 2 | 0.5% | Needs clarification from reporter |
|
||||
| **Total** | 423 | 100% | |
|
||||
|
||||
**Net read:** about **68%** of feature requests (Strong + Reasonable) align with Trilium's direction and could be accepted if someone writes the code. About **18%** would be better served by user scripts or custom note types than core changes. Roughly **13%** don't fit and could be closed with a clear rationale.
|
||||
|
||||
## Interpretation guide
|
||||
|
||||
- **Strong fit** = the feature maps directly onto an existing subsystem (search, sync, share, templates, attributes, tree, etc.) and would obviously be welcome. The only thing missing is an implementation.
|
||||
- **Reasonable fit** = nice-to-have polish or extension, fits the subsystem, would be accepted if someone contributed it. Not an architectural stretch.
|
||||
- **Niche / scripting territory** = probably serves a small audience or very specific workflow. Trilium already has a scripting API and custom note types — these requests could live there instead of core. The rationale includes a suggested alternative (script, template, plugin, backend API call).
|
||||
- **Out of scope** = would fundamentally change what Trilium is. Common rejection reasons: real-time collaboration, multi-tenant/CMS publishing, IDE features, block-level transclusion beyond the note model, replacing the sync/crypto protocol, hosting provider lock-in, vendor promos, full-blown kanban/calendar-first alternatives to the note tree.
|
||||
- **Unclear** = the issue body didn't give the reviewer enough to judge. Not a rejection — the reporter should clarify.
|
||||
|
||||
## Per-batch counts
|
||||
|
||||
| Batch | Strong | Reasonable | Niche | Out-of-scope | Unclear | Total |
|
||||
|---:|---:|---:|---:|---:|---:|---:|
|
||||
| [01](_features/batch-01-fit.md) | 5 | 13 | 5 | 0 | 0 | 23 |
|
||||
| [02](_features/batch-02-fit.md) | 4 | 12 | 5 | 2 | 0 | 23 |
|
||||
| [03](_features/batch-03-fit.md) | 6 | 11 | 5 | 1 | 1 | 24 |
|
||||
| [04](_features/batch-04-fit.md) | 6 | 12 | 5 | 1 | 0 | 24 |
|
||||
| [05](_features/batch-05-fit.md) | 4 | 11 | 6 | 3 | 0 | 24 |
|
||||
| [06](_features/batch-06-fit.md) | 12 | 13 | 2 | 4 | 0 | 31 |
|
||||
| [07](_features/batch-07-fit.md) | 6 | 9 | 4 | 2 | 0 | 21 |
|
||||
| [08](_features/batch-08-fit.md) | 6 | 12 | 2 | 4 | 1 | 25 |
|
||||
| [09](_features/batch-09-fit.md) | 7 | 14 | 8 | 5 | 0 | 34 |
|
||||
| [10](_features/batch-10-fit.md) | 9 | 15 | 6 | 5 | 0 | 35 |
|
||||
| [11](_features/batch-11-fit.md) | 11 | 14 | 5 | 4 | 0 | 34 |
|
||||
| [12](_features/batch-12-fit.md) | 11 | 14 | 4 | 5 | 0 | 34 |
|
||||
| [13](_features/batch-13-fit.md) | 8 | 12 | 9 | 8 | 0 | 37 |
|
||||
| [14](_features/batch-14-fit.md) | 8 | 11 | 7 | 9 | 0 | 35 |
|
||||
| [15](_features/batch-15-fit.md) | 5 | 8 | 4 | 2 | 0 | 19 |
|
||||
|
||||
---
|
||||
|
||||
## Strong Fit (108)
|
||||
|
||||
These features plug directly into existing Trilium subsystems and would be obviously welcome additions. Use this list as an "accept if PR comes in" queue.
|
||||
|
||||
### From Batch 15
|
||||
|
||||
- [#1046 — Global shortcut](https://github.com/TriliumNext/Trilium/issues/1046) — A global hotkey for quick note capture/search is a standard feature for desktop PKM apps and fits the Electron desktop layer.
|
||||
- [#139 — Label listing can be clickable and lead to search of given label](https://github.com/TriliumNext/Trilium/issues/139) — Clickable labels that trigger a search are a natural extension of the existing attribute and search subsystems.
|
||||
- [#728 — FR: Export search results](https://github.com/TriliumNext/Trilium/issues/728) — Export already exists for subtrees, and extending it to search results is a clean power-user improvement that reuses existing export infrastructure.
|
||||
- [#814 — Ability to add a tag to a page when clipping](https://github.com/TriliumNext/Trilium/issues/814) — Adding user-specified tags at clip time fits squarely with the web clipper and Trilium's attribute-driven organization model.
|
||||
- [#926 — Option to not to expand parent note when note is made it's child](https://github.com/TriliumNext/Trilium/issues/926) — A small tree-view UX fix directly targeting the core note tree widget.
|
||||
### From Batch 14
|
||||
|
||||
- [#1170 — How to disable note editing in mobile front end?](https://github.com/TriliumNext/Trilium/issues/1170) — A global read-only default for mobile is a sensible UX toggle for the existing mobile web client.
|
||||
- [#1181 — Make tabs keep the scroll on the tree left panel](https://github.com/TriliumNext/Trilium/issues/1181) — Preserving tree scroll state per tab is a core navigation fix for the existing tab/tree subsystem.
|
||||
- [#1193 — Sort results in Jump to note by frequency of use?](https://github.com/TriliumNext/Trilium/issues/1193) — Ranking Jump-to-note by recency/frequency is a direct and commonly expected improvement to an existing core widget.
|
||||
- [#1266 — Suggestion for Recent Changes](https://github.com/TriliumNext/Trilium/issues/1266) — Splitting Recent Changes into modified vs deleted sections is a minor, concrete improvement to an existing dialog.
|
||||
- [#1267 — Is it possible to make INSERT NOTE optional?](https://github.com/TriliumNext/Trilium/issues/1267) — Per-parent default child note type aligns with Trilium's attribute-driven configuration model.
|
||||
- [#1426 — request: unlinked references](https://github.com/TriliumNext/Trilium/issues/1426) — Unlinked references (title mentions not yet linked) is a standard PKM feature that fits naturally with Trilium's backlinks system.
|
||||
- [#1668 — Search autocompletion for labels](https://github.com/TriliumNext/Trilium/issues/1668) — Reusing the existing attribute autocomplete in quick/saved search is a clear UX parity improvement.
|
||||
- [#1715 — Page up/down in note selection dialogs](https://github.com/TriliumNext/Trilium/issues/1715) — Trivial accessibility/keyboard improvement to existing dialogs.
|
||||
### From Batch 13
|
||||
|
||||
- [#1763 — custom title for saved search results](https://github.com/TriliumNext/Trilium/issues/1763) — Showing note path/context in search results is a core usability improvement for a hierarchical note tree where duplicate titles are common.
|
||||
- [#1921 — UI improvement for dangling links](https://github.com/TriliumNext/Trilium/issues/1921) — Distinguishing links to missing/empty notes is a standard wiki-style PKM feature that fits Trilium's linking model.
|
||||
- [#1967 — Manually save note revision and add comment](https://github.com/TriliumNext/Trilium/issues/1967) — Named/annotated manual revisions are a natural extension of the existing BRevision system and requested by power users.
|
||||
- [#2053 — Search for dates in different formats](https://github.com/TriliumNext/Trilium/issues/2053) — Flexible date parsing in search directly improves the existing date-note/search subsystem.
|
||||
- [#2203 — Option to not expand subtree when opening subnote](https://github.com/TriliumNext/Trilium/issues/2203) — Legitimate tree navigation option fitting the existing expansion/archived visibility controls.
|
||||
- [#2281 — Switch to existing tab if note already open](https://github.com/TriliumNext/Trilium/issues/2281) — Sensible tab-management behavior aligned with how the multi-tab UI already works.
|
||||
- [#2473 — Show branch prefix in quick search](https://github.com/TriliumNext/Trilium/issues/2473) — Small bug-adjacent fix to make quick search respect the existing branch-prefix feature.
|
||||
- [#2477 — Automatically delete/unhide unsaved search notes](https://github.com/TriliumNext/Trilium/issues/2477) — Cleanup of ephemeral hidden-subtree search notes is a clear hygiene improvement for existing infrastructure.
|
||||
### From Batch 12
|
||||
|
||||
- [#2488 — Show attributes on shared notes](https://github.com/TriliumNext/Trilium/issues/2488) — Shared notes subsystem already surfaces note metadata and exposing attributes (e.g., source URL from web clipper) is a natural extension.
|
||||
- [#2491 — Add improvements to internal links](https://github.com/TriliumNext/Trilium/issues/2491) — Disambiguating same-titled notes in the internal link autocomplete is a clear UX gap in an existing core feature.
|
||||
- [#2547 — Automatically import the page title from url](https://github.com/TriliumNext/Trilium/issues/2547) — Fetching link titles fits the existing rich text editor and web clipper infrastructure and is a common expectation.
|
||||
- [#2664 — Allow unsharing of notes in a shared subtree](https://github.com/TriliumNext/Trilium/issues/2664) — Granular share control is a fundamental capability gap in the existing sharing subsystem.
|
||||
- [#2710 — Open new tabs next to the current one](https://github.com/TriliumNext/Trilium/issues/2710) — Standard tab behavior expected from any tabbed app with an existing tab manager.
|
||||
- [#2989 — Find and Replace allow Regular Expression](https://github.com/TriliumNext/Trilium/issues/2989) — Regex in find/replace is a basic power-user expectation and fits the existing editor.
|
||||
- [#3053 — Restore previous windows and tabs open on startup](https://github.com/TriliumNext/Trilium/issues/3053) — Multi-window session restore is a core expectation for a desktop app with existing tab/window state management.
|
||||
- [#3082 — Option to open notes in new tab by default](https://github.com/TriliumNext/Trilium/issues/3082) — Simple preference toggle over existing tab/navigation behavior.
|
||||
- [#3112 — Annotate/insert comments on note contents](https://github.com/TriliumNext/Trilium/issues/3112) — Inline annotations/comments fit a rich text PKM tool and CKEditor supports comment/annotation plugins.
|
||||
- [#3130 — Latex in titles](https://github.com/TriliumNext/Trilium/issues/3130) — KaTeX is already a dependency and rendering math in titles is consistent with the text note subsystem.
|
||||
- [#3148 — Detect database failure and offer to load backup](https://github.com/TriliumNext/Trilium/issues/3148) — Automated recovery from the existing backup system is a high-value robustness improvement.
|
||||
### From Batch 11
|
||||
|
||||
- [#3266 — Automatic layout on relation maps](https://github.com/TriliumNext/Trilium/issues/3266) — Auto-layout is a standard, long-expected feature for the existing relation map subsystem.
|
||||
- [#3267 — Multiple note drag-and-drop into relation map](https://github.com/TriliumNext/Trilium/issues/3267) — Obvious UX improvement to an existing feature that already supports single-note drag.
|
||||
- [#3268 — Accept drag-and-dropping note links into relation map](https://github.com/TriliumNext/Trilium/issues/3268) — Consistent drag source handling fits the relation map/split view subsystems.
|
||||
- [#3358 — Table of contents on the left side](https://github.com/TriliumNext/Trilium/issues/3358) — Trilium already has a TOC widget; allowing left-panel placement is a natural extension.
|
||||
- [#3385 — Searching through note revisions](https://github.com/TriliumNext/Trilium/issues/3385) — Revisions are a core subsystem and searching them is a natural extension of the search engine.
|
||||
- [#3400 — Setting to disable smart/typographic quotes](https://github.com/TriliumNext/Trilium/issues/3400) — CKEditor autoformat toggle is a common editor setting and directly addresses a code-in-text pain point.
|
||||
- [#3426 — Search and replace](https://github.com/TriliumNext/Trilium/issues/3426) — Core editor/search feature users routinely expect in a note-taking app.
|
||||
- [#3430 — Basic fulltext search on share](https://github.com/TriliumNext/Trilium/issues/3430) — Shaca/share subsystem would meaningfully benefit from basic fulltext lookup.
|
||||
- [#3494 — Value replace in bulk action](https://github.com/TriliumNext/Trilium/issues/3494) — Clear gap in the existing bulk actions subsystem for attribute maintenance.
|
||||
- [#3540 — Temporary unhoist shortcut / cross-workspace jump-to-note](https://github.com/TriliumNext/Trilium/issues/3540) — Hoisting is core workflow and this is a concrete, well-scoped UX fix.
|
||||
- [#3556 — Auto-set code note language from filename extension](https://github.com/TriliumNext/Trilium/issues/3556) — Lightweight QoL tying the existing code-note type to title parsing.
|
||||
### From Batch 10
|
||||
|
||||
- [#3720 — Clone to today](https://github.com/TriliumNext/Trilium/issues/3720) — Cloning to the day note is a natural interaction on top of the existing calendar/day-note and clone subsystems.
|
||||
- [#3721 — ETAPI: Append to existing note content](https://github.com/TriliumNext/Trilium/issues/3721) — Appending is a common ETAPI use case (logging, clippers) and a minor extension to the existing content endpoint.
|
||||
- [#3761 — Template mixins: grouped inherited promoted attributes](https://github.com/TriliumNext/Trilium/issues/3761) — Directly improves the promoted-attribute/template subsystem that power users rely on for structured notes.
|
||||
- [#3885 — Fully adhere to XDG Base Directory Specification](https://github.com/TriliumNext/Trilium/issues/3885) — Proper cache/config separation is a legitimate Linux desktop hygiene improvement for the Electron build.
|
||||
- [#3958 — Allow hiding/blocking inherited attributes on template users](https://github.com/TriliumNext/Trilium/issues/3958) — Fills a real gap in the template/inheritance model that affects how `#archived` and similar labels propagate.
|
||||
- [#4005 — ETAPI interface to get note content hash](https://github.com/TriliumNext/Trilium/issues/4005) — The hash is already computed internally; exposing it via ETAPI is a small change that enables efficient external sync tooling.
|
||||
- [#4080 — Workspace-specific launchers](https://github.com/TriliumNext/Trilium/issues/4080) — Fits naturally with the existing workspace concept and launcher bar, reducing clutter for multi-context users.
|
||||
- [#4124 — Labels with predefined lists](https://github.com/TriliumNext/Trilium/issues/4124) — A natural enhancement to promoted attributes, consistent with how structured PKM tools handle controlled vocabularies.
|
||||
- [#4134 — Add 'Expandable' option to Include Note](https://github.com/TriliumNext/Trilium/issues/4134) — Small, coherent addition to the existing include-note modes that mirrors the book/list view behavior.
|
||||
### From Batch 09
|
||||
|
||||
- [#4199 — Modify note creation and modification time through api](https://github.com/TriliumNext/Trilium/issues/4199) — Essential for note import tooling; ETAPI already exposes note fields and preserving original timestamps is a standard import requirement.
|
||||
- [#4242 — Subscript & Superscript Shortcuts](https://github.com/TriliumNext/Trilium/issues/4242) — Trivial CKEditor keybinding addition that aligns with existing rich text shortcut infrastructure.
|
||||
- [#4299 — Expose protectedSessionService to frontend script api](https://github.com/TriliumNext/Trilium/issues/4299) — Clear gap in the frontend script API that fits the existing scripting surface.
|
||||
- [#4305 — Encrypted / Protected attributes](https://github.com/TriliumNext/Trilium/issues/4305) — Natural extension of the protected-notes subsystem to attributes, a core Trilium entity.
|
||||
- [#4606 — Full-Text Search Using SQLite FTS](https://github.com/TriliumNext/Trilium/issues/4606) — Search is a core subsystem and BM25 relevance ranking is a well-understood improvement for a SQLite-backed app.
|
||||
- [#4612 — Authorization for synchronization endpoint](https://github.com/TriliumNext/Trilium/issues/4612) — Reasonable self-hosting security improvement for the sync subsystem behind reverse proxies.
|
||||
- [#4691 — Context-Menu Option: Add backlink to](https://github.com/TriliumNext/Trilium/issues/4691) — Fits existing relation/backlink infrastructure and tree context menu, a clean UX improvement.
|
||||
### From Batch 08
|
||||
|
||||
- [#4989 — (Keyboard) shortcuts for more actions](https://github.com/TriliumNext/Trilium/issues/4989) — Expanding keyboard shortcut coverage is core power-user PKM functionality and fits the existing shortcut subsystem.
|
||||
- [#5044 — Calendar overview of Note activity](https://github.com/TriliumNext/Trilium/issues/5044) — An activity calendar complements the existing calendar/journal note types and revision system for PKM.
|
||||
- [#5089 — template-Typed Attributes/Relationships](https://github.com/TriliumNext/Trilium/issues/5089) — Constraining promoted relations by template fits directly into the attributes/templates subsystem power users rely on.
|
||||
- [#5183 — Inline reference to labels](https://github.com/TriliumNext/Trilium/issues/5183) — Inline label/relation references extend Trilium's attribute system and fit the existing include-note/reference mechanics.
|
||||
- [#5195 — internal links to notes in Mermaid Diagrams](https://github.com/TriliumNext/Trilium/issues/5195) — Linking mermaid nodes to notes is a natural extension of the mermaid note type and internal link system.
|
||||
- [#5199 — Export of HTML with [missing note] could have retained names](https://github.com/TriliumNext/Trilium/issues/5199) — A clear export fidelity improvement for the existing import/export subsystem.
|
||||
### From Batch 07
|
||||
|
||||
- [#5332 — Improve search result highlighting](https://github.com/TriliumNext/Trilium/issues/5332) — Search is a core subsystem and highlighting matches for advanced queries is a straightforward consistency improvement.
|
||||
- [#5344 — Importing html images as attached instead of external reference](https://github.com/TriliumNext/Trilium/issues/5344) — Fits directly into the existing HTML import pipeline and aligns with how interactive note creation already handles images.
|
||||
- [#5362 — Unify/hide duplicate find dialogs/widgets](https://github.com/TriliumNext/Trilium/issues/5362) — Consolidating the find/find-and-replace widgets is a clear UX cleanup of existing functionality.
|
||||
- [#5401 — Confusing behaviour when the application is minimized in system tray](https://github.com/TriliumNext/Trilium/issues/5401) — Standard Electron single-instance behavior that belongs in the desktop app.
|
||||
- [#5475 — Add keyboard shortcuts for managing splits](https://github.com/TriliumNext/Trilium/issues/5475) — Splits exist as a first-class feature and keyboard bindings fit Trilium's power-user identity.
|
||||
- [#5497 — Undo, permanent delete: add as action for note tree](https://github.com/TriliumNext/Trilium/issues/5497) — Tree-level undo and permanent-delete shortcuts directly extend existing tree actions.
|
||||
### From Batch 06
|
||||
|
||||
- [#5553 — Launcher: add keyboard navigation for Calendar](https://github.com/TriliumNext/Trilium/issues/5553) — Basic accessibility/keyboard navigation for an existing first-party widget; clearly within scope.
|
||||
- [#5609 — Add "open in new split" option to JumpTo menu](https://github.com/TriliumNext/Trilium/issues/5609) — JumpTo and splits are both core navigation features, and this is a natural power-user integration between them.
|
||||
- [#5615 — Clicking below note should focus editor](https://github.com/TriliumNext/Trilium/issues/5615) — Fundamental editor UX expectation matching every other word processor; clear bug-like QoL fix.
|
||||
- [#5626 — Include all available templates, even in hoisted notes](https://github.com/TriliumNext/Trilium/issues/5626) — Removes a real limitation in the existing template + hoisting subsystems.
|
||||
- [#5656 — Show full note titles in Link Map view](https://github.com/TriliumNext/Trilium/issues/5656) — Straightforward display improvement to a first-party visualization.
|
||||
- [#5658 — Saved Search Auto Search on Note Open](https://github.com/TriliumNext/Trilium/issues/5658) — Matches user expectations for saved searches and aligns with existing behavior in the sidebar.
|
||||
- [#5667 — Better search with search excerpts](https://github.com/TriliumNext/Trilium/issues/5667) — Search result excerpts are table-stakes for a knowledge management app and directly improve a core subsystem.
|
||||
- [#5671 — Option to search entire database when a note is hoisted](https://github.com/TriliumNext/Trilium/issues/5671) — Small, explicit toggle for an existing search + hoisting constraint.
|
||||
- [#5685 — Search within Help User Guide](https://github.com/TriliumNext/Trilium/issues/5685) — In-app help discoverability is a clear UX gap and leverages existing search infrastructure.
|
||||
- [#5697 — Take photo from camera](https://github.com/TriliumNext/Trilium/issues/5697) — Important capture mechanism for a PKM tool, especially on mobile web; uses standard HTML capture.
|
||||
- [#5728 — Copy link to note](https://github.com/TriliumNext/Trilium/issues/5728) — Core PKM interaction (copying a shareable link); desktop currently lags behind web.
|
||||
- [#5751 — Linking to subtitles](https://github.com/TriliumNext/Trilium/issues/5751) — Heading anchors / intra-note links are standard in any serious notes/wiki tool.
|
||||
### From Batch 05
|
||||
|
||||
- [#6225 — Settings for displaying search results](https://github.com/TriliumNext/Trilium/issues/6225) — Direct, small UX improvement to the core search results widget (show totals, configurable page size).
|
||||
- [#6226 — Adding "Clone to" to search bulk actions](https://github.com/TriliumNext/Trilium/issues/6226) — Clone is a first-class Trilium concept and already exists as a tree action; exposing it in search bulk actions is a natural gap to close.
|
||||
- [#6421 — [wip] Attributes V2](https://github.com/TriliumNext/Trilium/issues/6421) — Attributes are Trilium's defining power-user feature; typed attributes, validation, and conflict resolution are clearly core roadmap material.
|
||||
- [#6829 — Allow sorting notes by multiple attributes](https://github.com/TriliumNext/Trilium/issues/6829) — Extends the existing `#sorted` / `#sortDirection` attribute semantics in a clean, backwards-compatible way.
|
||||
### From Batch 04
|
||||
|
||||
- [#6962 — Prioritize Running Sync When Coming Back Online (Like laptop wakeup)](https://github.com/TriliumNext/Trilium/issues/6962) — Sync reliability is core to Trilium's identity; detecting wake/network-regain and retrying with backoff is a clear improvement to an existing subsystem.
|
||||
- [#6991 — Search: Add Search Ranking Customizability](https://github.com/TriliumNext/Trilium/issues/6991) — Search is a first-class feature and moving to BM25/weighted scoring directly improves a known pain point in large knowledge bases.
|
||||
- [#7001 — Logout Feature in the Desktop Version of Trilium Next](https://github.com/TriliumNext/Trilium/issues/7001) — Desktop parity for a basic auth/session action that already exists on the server side is an obvious gap to close.
|
||||
- [#7127 — OpenID auto redirect](https://github.com/TriliumNext/Trilium/issues/7127) — Small config flag on an existing OpenID flow; trivial addition to an already-supported auth subsystem.
|
||||
- [#7313 — Option to remove demo data when creating new instance](https://github.com/TriliumNext/Trilium/issues/7313) — Clean-install option is a common onboarding request and maps cleanly onto the existing initial-setup flow.
|
||||
- [#7447 — Milestone: Official mobile application](https://github.com/TriliumNext/Trilium/issues/7447) — Already an accepted roadmap milestone authored by the maintainer and addresses the single largest gap in platform coverage.
|
||||
### From Batch 03
|
||||
|
||||
- [#7895 — (feat) Image Gallery/Collection](https://github.com/TriliumNext/Trilium/issues/7895) — Fits the existing Collections subsystem (geomap precedent) and fills an obvious gap for visual note browsing.
|
||||
- [#7927 — Kanban: (Option to) Display the first ~line of note content for each item](https://github.com/TriliumNext/Trilium/issues/7927) — Directly improves the Kanban collection view, a core note-type feature, with a low-scope attribute-driven option.
|
||||
- [#7931 — Inline Mermaid Diagram Display](https://github.com/TriliumNext/Trilium/issues/7931) — Persisting the view mode of the built-in Mermaid widget is a clear UX bug/polish for an existing note type.
|
||||
- [#8098 — Make clicking a month name in Year view open that month's view](https://github.com/TriliumNext/Trilium/issues/8098) — Trivial navigation improvement to the existing calendar collection view.
|
||||
- [#8187 — Search for new relation in promoted attributes does not suggest to create it](https://github.com/TriliumNext/Trilium/issues/8187) — Regression in a core attribute/note-creation path; clearly in scope.
|
||||
- [#8260 — Improve Note Drag & Drop Functionality](https://github.com/TriliumNext/Trilium/issues/8260) — Tree and Kanban DnD are core UX surfaces and deserve the polish.
|
||||
### From Batch 02
|
||||
|
||||
- [#8452 — Export note attributes as Markdown metadata](https://github.com/TriliumNext/Trilium/issues/8452) — Markdown export is a core interop feature and YAML front-matter for attributes is the standard lossless way to round-trip metadata, addressing real lock-in concerns.
|
||||
- [#8481 — Add filtering in Table view](https://github.com/TriliumNext/Trilium/issues/8481) — Filtering is a basic expectation of any table/collection view and is already explicitly called out as a limitation in the docs.
|
||||
- [#8635 — Allow internal links to open PDF notes at a specific page](https://github.com/TriliumNext/Trilium/issues/8635) — Trilium already ships a customized PDF.js viewer that supports these fragment parameters; wiring them through internal link resolution is a small, high-value fix.
|
||||
- [#8664 — List view in shared collection notes](https://github.com/TriliumNext/Trilium/issues/8664) — Shared/published notes are a first-class subsystem (Shaca) and parity of collection views between app and share is expected behavior.
|
||||
### From Batch 01
|
||||
|
||||
- [#8927 — Add "Copy to Clipboard" Button for Code Blocks in Shared Pages](https://github.com/TriliumNext/Trilium/issues/8927) — Shared notes are a core Trilium subsystem and copy buttons on code blocks are table-stakes for documentation sharing.
|
||||
- [#8967 — PDF Sharing - Download Option](https://github.com/TriliumNext/Trilium/issues/8967) — Restores a regression from the native PDF viewer change in a core subsystem (shared notes), clear bugfix-adjacent request.
|
||||
- [#8974 — Table of Content visibility toggle for smartphone/mobile screens](https://github.com/TriliumNext/Trilium/issues/8974) — TOC is an existing first-class widget and the mobile client is a supported target that currently has no way to access it.
|
||||
- [#8996 — Hide expand/collapse button when all children are hidden archived notes](https://github.com/TriliumNext/Trilium/issues/8996) — Straightforward polish fix to the existing "hide archived notes" behavior in the tree widget.
|
||||
- [#9010 — ETAPI: No way to access protected (encrypted) notes](https://github.com/TriliumNext/Trilium/issues/9010) — Protected notes and ETAPI are both core subsystems and the gap forces external clients into insecure workarounds.
|
||||
|
||||
## Reasonable Fit (181)
|
||||
|
||||
Useful quality-of-life improvements that fit the product but are not essential. Would be accepted if someone contributed them. Good second-tier queue for contributors.
|
||||
|
||||
### From Batch 15
|
||||
|
||||
- [#212 — Tooltip for an attachment can display basic info and download/open buttons](https://github.com/TriliumNext/Trilium/issues/212) — A quality-of-life improvement to the existing attachment UI subsystem.
|
||||
- [#352 — Restore Demo Content](https://github.com/TriliumNext/Trilium/issues/352) — Re-importing the bundled demo into an existing database is a small onboarding improvement that fits existing import mechanisms.
|
||||
- [#409 — AppImage for Linux](https://github.com/TriliumNext/Trilium/issues/409) — A reasonable packaging option for the Electron desktop build, complementing existing Linux distributions.
|
||||
- [#672 — Error Tracking for scripts](https://github.com/TriliumNext/Trilium/issues/672) — Better error visibility for the scripting subsystem is a reasonable power-user improvement given how central scripting is.
|
||||
- [#802 — Clip url with description](https://github.com/TriliumNext/Trilium/issues/802) — A modest enhancement to the web clipper's existing clip modes.
|
||||
- [#970 — Use double click to get to the child note](https://github.com/TriliumNext/Trilium/issues/970) — A minor navigation UX tweak in the book/note-list widget.
|
||||
- [#983 — Custom Local Save location and Hide Child Notes for Attachments](https://github.com/TriliumNext/Trilium/issues/983) — Both parts (DB location config and hiding attachment child notes) touch existing subsystems and are reasonable polish items.
|
||||
- [#991 — Link to a blank note](https://github.com/TriliumNext/Trilium/issues/991) — Creating an empty note inline from an `@` link is a small authoring-flow improvement that fits the text editor and autocomplete subsystems.
|
||||
### From Batch 14
|
||||
|
||||
- [#1144 — Option to auto expand book nodes](https://github.com/TriliumNext/Trilium/issues/1144) — An attribute or setting to auto-expand book children fits existing book note configuration patterns.
|
||||
- [#1148 — include relation maps content in search results](https://github.com/TriliumNext/Trilium/issues/1148) — Indexing relation-map note membership into search would deepen an existing subsystem, though implementation is non-trivial.
|
||||
- [#1206 — Feature request: jump back to last edit](https://github.com/TriliumNext/Trilium/issues/1206) — A "jump to last edit" shortcut is a useful editor navigation feature that can build on existing history tracking.
|
||||
- [#1269 — Customize note title shown in tree](https://github.com/TriliumNext/Trilium/issues/1269) — Attribute-driven tree title templating is a natural extension of Trilium's label/template system.
|
||||
- [#1514 — Get the link to the note from the desktop apps](https://github.com/TriliumNext/Trilium/issues/1514) — Exposing a "copy server URL" action in desktop is a small, self-contained improvement.
|
||||
- [#1526 — Shortcut to open the link in a new window](https://github.com/TriliumNext/Trilium/issues/1526) — Modifier-click to open a note in a new window fits the existing multi-window Electron support.
|
||||
- [#1554 — image alt text in markdown export](https://github.com/TriliumNext/Trilium/issues/1554) — Fixing markdown export to emit alt text properly is a small but valuable correctness improvement.
|
||||
- [#1585 — Default import options for drag and drop](https://github.com/TriliumNext/Trilium/issues/1585) — Persisting import option defaults (e.g. shrink images) is a minor configuration enhancement to the importer.
|
||||
- [#1623 — Remember default box size for included notes](https://github.com/TriliumNext/Trilium/issues/1623) — Remembering last-used size for included notes is a trivial UX polish.
|
||||
- [#1652 — saved search preview with number of results](https://github.com/TriliumNext/Trilium/issues/1652) — Showing result counts next to saved search links is a useful, bounded dashboard-style feature.
|
||||
- [#1693 — Copy/Paste Table As/From CSV](https://github.com/TriliumNext/Trilium/issues/1693) — CSV paste/copy for tables is a pragmatic way to unblock many table feature requests with modest scope.
|
||||
### From Batch 13
|
||||
|
||||
- [#1772 — Disable CKEditor automatic text transformations](https://github.com/TriliumNext/Trilium/issues/1772) — Exposing a CKEditor option, especially suppressing transforms in inline code, is a reasonable editor config improvement.
|
||||
- [#1826 — insertDateTimeToText shortcut for labels](https://github.com/TriliumNext/Trilium/issues/1826) — Extending an existing shortcut to also work in label inputs is a small consistency fix.
|
||||
- [#1946 — Show attributes (relations) on link map](https://github.com/TriliumNext/Trilium/issues/1946) — Labeling edges by relation name on the link/note map is a reasonable visualization enhancement.
|
||||
- [#1991 — Relation constraints](https://github.com/TriliumNext/Trilium/issues/1991) — Type constraints on relation targets fit the promoted-attribute/template system as a power-user feature.
|
||||
- [#2051 — Embedding YouTube/Vimeo videos](https://github.com/TriliumNext/Trilium/issues/2051) — Media embed support in the rich text editor is a common expectation for a note app.
|
||||
- [#2064 — Improve default link map layout](https://github.com/TriliumNext/Trilium/issues/2064) — Better graph layout algorithm is a reasonable polish task for the existing note/link map.
|
||||
- [#2181 — Different icon for folder note with content vs without](https://github.com/TriliumNext/Trilium/issues/2181) — Small visual tweak to clarify the existing folder-note concept in the tree.
|
||||
- [#2185 — Alt+T should link day portion to day note](https://github.com/TriliumNext/Trilium/issues/2185) — Natural enhancement of the existing Alt+T shortcut given Trilium's day-note subsystem.
|
||||
- [#2293 — Include note section by markdown header](https://github.com/TriliumNext/Trilium/issues/2293) — Header-based section inclusion is a reasonable upgrade to the existing Include Note feature.
|
||||
- [#2303 — Note map live update](https://github.com/TriliumNext/Trilium/issues/2303) — Live refresh of the note map when links change is a reasonable QoL over the current static view.
|
||||
- [#2363 — Better linking from Mermaid diagrams](https://github.com/TriliumNext/Trilium/issues/2363) — A UI helper for inserting note links into Mermaid fits the existing Mermaid note type.
|
||||
- [#2420 — Link date-valued labels to day notes](https://github.com/TriliumNext/Trilium/issues/2420) — Surfacing date-label backlinks on day notes naturally extends date-note and attribute subsystems.
|
||||
### From Batch 12
|
||||
|
||||
- [#2524 — Custom shortcuts on the note toolbar](https://github.com/TriliumNext/Trilium/issues/2524) — Extending the scripting API's `addButtonToToolbar()` to target note-level tabs is a modest API addition.
|
||||
- [#2622 — Disable sync for certain notes](https://github.com/TriliumNext/Trilium/issues/2622) — Device-local notes via a label is a useful power-user knob that fits the existing sync/attribute systems.
|
||||
- [#2631 — Add service worker for caching large assets](https://github.com/TriliumNext/Trilium/issues/2631) — Performance improvement aligned with the web client architecture, though not core identity.
|
||||
- [#2636 — Tabbing off dropdown field should select](https://github.com/TriliumNext/Trilium/issues/2636) — Clear UX polish bug in the attribute editor.
|
||||
- [#2683 — Trigger asking whether to delete empty note more aggressively](https://github.com/TriliumNext/Trilium/issues/2683) — Small QoL refinement of existing delete-empty-note behavior.
|
||||
- [#2741 — Publish checksum of published assets](https://github.com/TriliumNext/Trilium/issues/2741) — Standard release hygiene improvement for the build/release pipeline.
|
||||
- [#2797 — Quicker way to create notes from a template](https://github.com/TriliumNext/Trilium/issues/2797) — Workflow improvement for the existing template subsystem that's central to power-user PKM.
|
||||
- [#2870 — Import folder and generate note tree](https://github.com/TriliumNext/Trilium/issues/2870) — Folder import already partly exists; making it create a matching tree is a reasonable importer enhancement.
|
||||
- [#2923 — Ignore spellcheck in context menu](https://github.com/TriliumNext/Trilium/issues/2923) — Small editor context menu addition aligned with existing spellcheck integration.
|
||||
- [#2960 — Internal links in Canvas](https://github.com/TriliumNext/Trilium/issues/2960) — Cross-note-type linking would improve Canvas integration with the PKM core.
|
||||
- [#2972 — Make Relation Map lines straight](https://github.com/TriliumNext/Trilium/issues/2972) — Minor rendering option in an existing note type.
|
||||
- [#3098 — Focus on the searched word](https://github.com/TriliumNext/Trilium/issues/3098) — Auto-scrolling search results to match position is a natural search UX improvement.
|
||||
- [#3138 — Template organization via template groups with drop-down menus](https://github.com/TriliumNext/Trilium/issues/3138) — Nested template menus are a reasonable QoL for the existing template system.
|
||||
- [#3184 — Auto-setup links when creating a template](https://github.com/TriliumNext/Trilium/issues/3184) — A `templateClone` relation is a sensible extension to the existing template/clone mechanics.
|
||||
### From Batch 11
|
||||
|
||||
- [#3244 — Prompt before exit option](https://github.com/TriliumNext/Trilium/issues/3244) — Simple preference in the existing settings system; reasonable safety QoL.
|
||||
- [#3304 — Shortcut to format selection as inline code](https://github.com/TriliumNext/Trilium/issues/3304) — Fits the existing keyboard shortcut/CKEditor integration, with real value for CJK input users.
|
||||
- [#3335 — Mouse wheel scroll instead of zoom in Mermaid notes](https://github.com/TriliumNext/Trilium/issues/3335) — Reasonable behavior tweak for the Mermaid note type.
|
||||
- [#3353 — Support NODE_EXTRA_CA_CERTS in Electron](https://github.com/TriliumNext/Trilium/issues/3353) — Legitimate self-hosting concern with a concrete Electron-level fix.
|
||||
- [#3356 — Collapsed child-note link toggles expansion on first click](https://github.com/TriliumNext/Trilium/issues/3356) — Small UX polish to the included note/child navigation behavior.
|
||||
- [#3389 — Preserve mobile image upload order](https://github.com/TriliumNext/Trilium/issues/3389) — Straightforward mobile upload bug/QoL fix.
|
||||
- [#3433 — Ship demo charts in hidden subtree](https://github.com/TriliumNext/Trilium/issues/3433) — Fits the hidden subtree templating system and keeps samples upgradable.
|
||||
- [#3458 — Show special characters (nbsp etc.) in editor](https://github.com/TriliumNext/Trilium/issues/3458) — Reasonable editor option for power users working with code.
|
||||
- [#3462 — Named color palette for highlight/font color](https://github.com/TriliumNext/Trilium/issues/3462) — Enables dark-mode-friendly colors via CKEditor's supported inline color definitions.
|
||||
- [#3484 — Slash/shortcut menu for format selection](https://github.com/TriliumNext/Trilium/issues/3484) — Common CKEditor-style command palette that fits the rich-text subsystem.
|
||||
- [#3541 — Configurable font color set](https://github.com/TriliumNext/Trilium/issues/3541) — Related editor-palette config concern, reasonable as an option.
|
||||
- [#3563 — Left panel fixed width, toggle shortcut, focus handling](https://github.com/TriliumNext/Trilium/issues/3563) — Concrete layout/keyboard QoL improvements to existing panel behavior.
|
||||
- [#3566 — Copy/clone as a search bulk action](https://github.com/TriliumNext/Trilium/issues/3566) — Fills an obvious gap alongside the existing move bulk action.
|
||||
- [#3593 — Disable auto-jump when dropping an image as child note](https://github.com/TriliumNext/Trilium/issues/3593) — Small behavior toggle that addresses a clear workflow annoyance.
|
||||
### From Batch 10
|
||||
|
||||
- [#3724 — Paste picture default settings (inline)](https://github.com/TriliumNext/Trilium/issues/3724) — Configurable default alignment for pasted images is a sensible editor preference.
|
||||
- [#3729 — Keep sidebar width more consistent](https://github.com/TriliumNext/Trilium/issues/3729) — UX polish for window-resize behavior, fits the existing layout system.
|
||||
- [#3743 — Minimize/close to tray icon](https://github.com/TriliumNext/Trilium/issues/3743) — Standard Electron desktop behavior that complements the existing tray integration.
|
||||
- [#3767 — Turn off Autoformat completely](https://github.com/TriliumNext/Trilium/issues/3767) — Adding an editor toggle to disable markdown autoformat is a reasonable CKEditor configuration option.
|
||||
- [#3785 — Standard label for opening default note](https://github.com/TriliumNext/Trilium/issues/3785) — A built-in "open on startup" note is a common PKM convenience, already approximated via fragile scripts.
|
||||
- [#3794 — Tiling images without resorting to tables](https://github.com/TriliumNext/Trilium/issues/3794) — Native side-by-side image layout is a reasonable rich-text editor improvement.
|
||||
- [#3878 — Sort Lines](https://github.com/TriliumNext/Trilium/issues/3878) — Standard code-editor action that fits the CodeMirror note type.
|
||||
- [#3899 — Preserve selected delete/import dialog options](https://github.com/TriliumNext/Trilium/issues/3899) — Small UX improvement to make dialogs remember recent choices.
|
||||
- [#3913 — Allow no timeout for protected notes](https://github.com/TriliumNext/Trilium/issues/3913) — Fixing the blank-field exception and allowing an explicit "never timeout" option is a legitimate settings fix.
|
||||
- [#3964 — API method to get all notes](https://github.com/TriliumNext/Trilium/issues/3964) — Exposing a bulk list/iterator endpoint (or documenting one) fits the ETAPI surface.
|
||||
- [#3983 — API function to refresh search note](https://github.com/TriliumNext/Trilium/issues/3983) — A small, well-scoped addition that improves scripting and external integration with search notes.
|
||||
- [#4002 — Internal link inside mermaid diagram](https://github.com/TriliumNext/Trilium/issues/4002) — Supporting internal note references in mermaid click handlers is consistent with Trilium's cross-note linking story.
|
||||
- [#4023 — Allow launchers to pass arguments to script notes](https://github.com/TriliumNext/Trilium/issues/4023) — Modest scripting-API extension that makes the launcher system dramatically more reusable.
|
||||
- [#4026 — Time attribute field](https://github.com/TriliumNext/Trilium/issues/4026) — Adding a time/duration type to promoted attributes rounds out the existing date/decimal/currency types.
|
||||
- [#4179 — Identify the current outline location](https://github.com/TriliumNext/Trilium/issues/4179) — Highlighting the current heading in the outline widget is a reasonable navigation improvement.
|
||||
### From Batch 09
|
||||
|
||||
- [#4296 — Remember position in file](https://github.com/TriliumNext/Trilium/issues/4296) — Useful QoL for long notes; scroll position persistence fits existing note context state.
|
||||
- [#4353 — Prevent correcting characters to symbols](https://github.com/TriliumNext/Trilium/issues/4353) — Reasonable toggle for CKEditor's autoformat/typography plugin.
|
||||
- [#4366 — Static log file name for trilium server](https://github.com/TriliumNext/Trilium/issues/4366) — Legitimate ops request to support standard logrotate workflows on self-hosted servers.
|
||||
- [#4375 — Data location - allow user to select](https://github.com/TriliumNext/Trilium/issues/4375) — Custom data directory is a standard desktop app feature; env var exists but a GUI/config option is reasonable.
|
||||
- [#4395 — Autocomplete dialog support via scripting API](https://github.com/TriliumNext/Trilium/issues/4395) — Exposing the existing noteAutocomplete service to scripts is a small, well-scoped API addition.
|
||||
- [#4396 — Ordering of templates](https://github.com/TriliumNext/Trilium/issues/4396) — Minor UX tweak to the "Add Child Note" menu that benefits template-heavy users.
|
||||
- [#4405 — Vim keybindings - yank/paste to system clipboard](https://github.com/TriliumNext/Trilium/issues/4405) — Standard CodeMirror vim-mode configuration that fits the existing code note editor.
|
||||
- [#4439 — In-app update mechanism](https://github.com/TriliumNext/Trilium/issues/4439) — Auto-update via electron-updater is a well-understood and expected desktop app feature.
|
||||
- [#4468 — Toggle button for promoted attribute on mobile](https://github.com/TriliumNext/Trilium/issues/4468) — Reasonable mobile UX improvement within existing promoted attributes widget.
|
||||
- [#4498 — Bulk convert to attachment](https://github.com/TriliumNext/Trilium/issues/4498) — Sensible migration helper for the existing image-to-attachment conversion flow.
|
||||
- [#4669 — Printed font size configuration](https://github.com/TriliumNext/Trilium/issues/4669) — Modest print CSS configuration improvement for the existing print feature.
|
||||
- [#4732 — Flathub Verification](https://github.com/TriliumNext/Trilium/issues/4732) — Simple distribution/packaging task that improves discoverability of the official Flatpak.
|
||||
- [#4813 — Horizontal scroll bar visible when not at bottom of Note](https://github.com/TriliumNext/Trilium/issues/4813) — Reasonable fix/UX improvement for large tables in the text editor viewport.
|
||||
- [#4818 — Set options for api import](https://github.com/TriliumNext/Trilium/issues/4818) — Small ETAPI gap; exposing existing import options as API parameters fits the external API.
|
||||
### From Batch 08
|
||||
|
||||
- [#4854 — Add a visual diff to split window](https://github.com/TriliumNext/Trilium/issues/4854) — A diff view between notes or revisions is a natural QoL extension of revisions and split view.
|
||||
- [#4870 — Synchronized Devices Dashboard](https://github.com/TriliumNext/Trilium/issues/4870) — Managing sync clients is a reasonable admin feature for the existing sync subsystem.
|
||||
- [#4885 — reload read position after "go back" from attachment view](https://github.com/TriliumNext/Trilium/issues/4885) — Simple navigation UX fix for the attachment viewer.
|
||||
- [#5049 — Appearance Settings Optional Sync](https://github.com/TriliumNext/Trilium/issues/5049) — Per-device appearance overrides is a legitimate options/sync QoL improvement for multi-device users.
|
||||
- [#5086 — Investigate Windows additional package managers](https://github.com/TriliumNext/Trilium/issues/5086) — Broader Windows package distribution is a reasonable release/distribution improvement.
|
||||
- [#5108 — Deploy to Flathub](https://github.com/TriliumNext/Trilium/issues/5108) — Expanding Linux packaging reach is a reasonable distribution improvement.
|
||||
- [#5122 — (Try to) sync app on shutdown](https://github.com/TriliumNext/Trilium/issues/5122) — A shutdown sync hook is a sensible reliability improvement for the sync subsystem.
|
||||
- [#5126 — AVIF image compression support](https://github.com/TriliumNext/Trilium/issues/5126) — Adding a modern image format option fits the existing image handling pipeline.
|
||||
- [#5190 — Drag and drop note icon to insert link in note](https://github.com/TriliumNext/Trilium/issues/5190) — Minor drag-and-drop UX enhancement that fits existing link-drag interactions.
|
||||
- [#5205 — Image zoom / gallery view for shared notes](https://github.com/TriliumNext/Trilium/issues/5205) — A useful viewer enhancement for the share subsystem.
|
||||
- [#5228 — SOCKS Proxy Support in Desktop App](https://github.com/TriliumNext/Trilium/issues/5228) — Reasonable networking option for self-hosted users behind restricted networks.
|
||||
- [#5281 — Change `clone` terminology](https://github.com/TriliumNext/Trilium/issues/5281) — Terminology cleanup that touches UI/i18n but is a legitimate usability consideration.
|
||||
### From Batch 07
|
||||
|
||||
- [#5303 — Creating human-readable URL aliases without sharing](https://github.com/TriliumNext/Trilium/issues/5303) — Extending the existing alias mechanism to internal navigation is a plausible quality-of-life improvement, though it touches routing in non-trivial ways.
|
||||
- [#5305 — Confirmation dialogue when dragging and dropping to move note](https://github.com/TriliumNext/Trilium/issues/5305) — An optional drag safeguard or toast undo is a reasonable enhancement to the tree widget.
|
||||
- [#5337 — Code blocks: sort mime type by most used](https://github.com/TriliumNext/Trilium/issues/5337) — Frequency-based sorting or type-ahead in the mime picker is a minor, sensible UX refinement.
|
||||
- [#5350 — Web-clipper prompt to add meta note](https://github.com/TriliumNext/Trilium/issues/5350) — A small, optional capture-time field fits naturally in the web-clipper flow.
|
||||
- [#5357 — Mind Map: Ability to add images as node](https://github.com/TriliumNext/Trilium/issues/5357) — Reasonable enhancement to the mind-map note type, depending on the upstream library's support.
|
||||
- [#5361 — UX: image options clarification](https://github.com/TriliumNext/Trilium/issues/5361) — Clarifying the compression settings and PNG handling is a straightforward settings/docs fix.
|
||||
- [#5363 — Option to open HTML attachment in browser instead of download](https://github.com/TriliumNext/Trilium/issues/5363) — Rendering HTML attachments inline is a reasonable extension to the attachments viewer with some security considerations.
|
||||
- [#5411 — Auto-hide the tab bar and toolbar in full-screen mode](https://github.com/TriliumNext/Trilium/issues/5411) — A focus/zen-mode refinement that fits existing layout controls.
|
||||
- [#5509 — Dynamic themes](https://github.com/TriliumNext/Trilium/issues/5509) — Allowing the desktop app to load a theme CSS from a local file or URL is a reasonable theming extension.
|
||||
### From Batch 06
|
||||
|
||||
- [#5562 — Pin tab](https://github.com/TriliumNext/Trilium/issues/5562) — Common tabbed-UI convenience that fits the existing tab system, though not mission-critical.
|
||||
- [#5579 — Allow Root note to be #shareRoot](https://github.com/TriliumNext/Trilium/issues/5579) — Reasonable sharing improvement; at minimum a clearer warning is a clean QoL fix to the share subsystem.
|
||||
- [#5583 — #rerunScriptsOnTemplateChange label](https://github.com/TriliumNext/Trilium/issues/5583) — Targeted enhancement to template/script lifecycle that fills a clear gap for power users.
|
||||
- [#5621 — Customize the format toolbar](https://github.com/TriliumNext/Trilium/issues/5621) — Editor customization is a common request and CKEditor5 supports configurable toolbars.
|
||||
- [#5638 — Ctrl+D Select Next Matching Occurrence](https://github.com/TriliumNext/Trilium/issues/5638) — Easy to do for code notes via CodeMirror's existing multi-cursor; text-note version is more speculative but the request is reasonable.
|
||||
- [#5640 — Support for importing ICS (iCalendar) file](https://github.com/TriliumNext/Trilium/issues/5640) — Natural companion to the new calendar view and fits the import/export subsystem.
|
||||
- [#5641 — Add showProtectedDialog() to frontend API](https://github.com/TriliumNext/Trilium/issues/5641) — Small, well-scoped addition to the frontend script API that unblocks protected-note workflows.
|
||||
- [#5686 — In-app Help links to public pages](https://github.com/TriliumNext/Trilium/issues/5686) — Small UX improvement with low implementation cost given docs are already mirrored.
|
||||
- [#5701 — Configurable tab width in code blocks](https://github.com/TriliumNext/Trilium/issues/5701) — CodeMirror supports this natively; straightforward configuration exposure.
|
||||
- [#5707 — OneNote import tool](https://github.com/TriliumNext/Trilium/issues/5707) — Import from major competing apps fits Trilium's migration story, though OneNote specifically is complex.
|
||||
- [#5725 — Add TriliumNext to TrueNAS apps](https://github.com/TriliumNext/Trilium/issues/5725) — Packaging/distribution task that expands self-hosted reach at low engineering cost.
|
||||
- [#5727 — Table borders](https://github.com/TriliumNext/Trilium/issues/5727) — Legitimate editor bug/QoL issue in the CKEditor5 table plugin.
|
||||
- [#5756 — Support Note Map Type as Shared Page](https://github.com/TriliumNext/Trilium/issues/5756) — Extending Shaca to render an existing note type is consistent with prior share improvements.
|
||||
### From Batch 05
|
||||
|
||||
- [#5795 — Drop image attachments without shrinking](https://github.com/TriliumNext/Trilium/issues/5795) — Sensible modifier-key / prompt enhancement to existing image drop handling in CKEditor.
|
||||
- [#5827 — Replace word/symbol with user-defined term](https://github.com/TriliumNext/Trilium/issues/5827) — Standard autocorrect/autoreplace in a rich text editor; fits CKEditor customization.
|
||||
- [#6144 — Custom styles for CKEditor](https://github.com/TriliumNext/Trilium/issues/6144) — Trilium already ships custom CKEditor plugins (admonitions, footnotes); exposing CKEditor5 Style feature is an incremental extension.
|
||||
- [#6162 — Global Tag View](https://github.com/TriliumNext/Trilium/issues/6162) — Labels are central and discoverability is a known gap; a browse-all-labels view fits the attribute subsystem.
|
||||
- [#6203 — Suppress messages on Frontend API scripts](https://github.com/TriliumNext/Trilium/issues/6203) — Small, well-scoped scripting API improvement (optional silent flag on `protectSubTree` and friends).
|
||||
- [#6259 — Geo-map undo on pin move](https://github.com/TriliumNext/Trilium/issues/6259) — Basic data-safety QoL for the geo-map type widget.
|
||||
- [#6296 — Auto hide sidebar](https://github.com/TriliumNext/Trilium/issues/6296) — A common layout preference that fits the existing layout/panel subsystem.
|
||||
- [#6410 — Display note count in folders](https://github.com/TriliumNext/Trilium/issues/6410) — Minor tree widget enhancement; aligns with existing child-counting logic.
|
||||
- [#6805 — Adaptive tray icon](https://github.com/TriliumNext/Trilium/issues/6805) — Standard Electron desktop polish for KDE/GNOME tray theming.
|
||||
- [#6836 — Handle HTTP redirects in sync configuration](https://github.com/TriliumNext/Trilium/issues/6836) — Small correctness fix in the sync HTTP client; supports realistic self-host reverse-proxy setups.
|
||||
- [#6841 — Drag note into split view](https://github.com/TriliumNext/Trilium/issues/6841) — Natural extension of the existing split view and drag-and-drop tab handling.
|
||||
### From Batch 04
|
||||
|
||||
- [#7113 — Use dateTime attribute for calendar child notes](https://github.com/TriliumNext/Trilium/issues/7113) — Consolidating date+time into a single datetime attribute simplifies sorting and fits the existing attribute/collection subsystem.
|
||||
- [#7198 — Code Editor Indent wrapping](https://github.com/TriliumNext/Trilium/issues/7198) — CodeMirror supports this natively; exposing the option in code/text notes is a small quality-of-life win.
|
||||
- [#7217 — Allow opening note directly instead of quick edit in collections](https://github.com/TriliumNext/Trilium/issues/7217) — Reasonable user-preference toggle for collection click behavior; minor change to existing view code.
|
||||
- [#7224 — Quick Notes from Everywhere using a Creation Window (Inbox-first approach)](https://github.com/TriliumNext/Trilium/issues/7224) — Inbox-first capture is a core PKM workflow and fits alongside the existing global shortcut and web clipper.
|
||||
- [#7279 — Implement Sticky tree view headers as a native feature](https://github.com/TriliumNext/Trilium/issues/7279) — Small tree UX improvement already prototyped by the community; natural fit for the note tree widget.
|
||||
- [#7403 — Option to disable fancy font ligatures](https://github.com/TriliumNext/Trilium/issues/7403) — Simple settings toggle affecting code/inline-code rendering; legitimate accessibility/readability preference.
|
||||
- [#7410 — Feature request: ability to reorder sections in the Table of Contents](https://github.com/TriliumNext/Trilium/issues/7410) — TOC already exists as a right-panel widget; adding drag-to-reorder sections fits the CKEditor-backed text note workflow.
|
||||
- [#7541 — Merging TOC and Highlights List](https://github.com/TriliumNext/Trilium/issues/7541) — Unifying two existing right-panel widgets is a reasonable UI consolidation.
|
||||
- [#7607 — Add API support to check and switch to an already opened note tab](https://github.com/TriliumNext/Trilium/issues/7607) — Small, well-scoped additions to the frontend script API that close a real gap for tab-aware scripts.
|
||||
- [#7636 — documents about scripting may need an update](https://github.com/TriliumNext/Trilium/issues/7636) — Scripting docs are core developer-facing material and keeping them current is legitimately needed maintenance work.
|
||||
- [#7646 — Add a setting to switch to 24-hours clock](https://github.com/TriliumNext/Trilium/issues/7646) — Basic localization/preference that belongs in settings; trivial but correct to add.
|
||||
- [#7666 — Allow adjustable widths for the Content and TOC (Bookmarks) panes in the Share view](https://github.com/TriliumNext/Trilium/issues/7666) — Share view is a supported subsystem and configurable pane widths are a reasonable layout improvement.
|
||||
### From Batch 03
|
||||
|
||||
- [#7827 — Increase donation visibility by adding a "Donate" entry in the Options page](https://github.com/TriliumNext/Trilium/issues/7827) — Simple Options page addition; fits an OSS project's sustainability goals without touching product scope.
|
||||
- [#7876 — Implement site search with type ahead (OpenSearch)](https://github.com/TriliumNext/Trilium/issues/7876) — A small server-side OpenSearch description endpoint naturally complements the existing search URL and web interface.
|
||||
- [#7885 — [quick-edit] new controls for quick-edit window management](https://github.com/TriliumNext/Trilium/issues/7885) — Concrete UI polish for an existing quick-edit widget with a clear mock-up.
|
||||
- [#7886 — Allow inserting video previews in notes](https://github.com/TriliumNext/Trilium/issues/7886) — Inline video playback for mp4/webm attachments is a natural extension of the existing CKEditor media handling.
|
||||
- [#7940 — Input Box Optimization: Add a Clear Button](https://github.com/TriliumNext/Trilium/issues/7940) — Minor form-control UX improvement that can be applied globally to attribute inputs.
|
||||
- [#8121 — Checking for dead links](https://github.com/TriliumNext/Trilium/issues/8121) — Reasonable backend utility for a knowledge-base tool; fits as an optional maintenance action over Becca.
|
||||
- [#8158 — Split lines into paragraphs](https://github.com/TriliumNext/Trilium/issues/8158) — Paste-handling tweak in CKEditor that addresses a common text-entry friction point.
|
||||
- [#8174 — Add the "Distribute Columns" feature to the table](https://github.com/TriliumNext/Trilium/issues/8174) — Standard table editing affordance matching CKEditor's table feature set.
|
||||
- [#8219 — Custom Icon Support (Upload/Delete Beyond Default Icons)](https://github.com/TriliumNext/Trilium/issues/8219) — Fits the existing icon/attribute system and is a commonly requested personalization feature.
|
||||
- [#8228 — Make Github releases immutable](https://github.com/TriliumNext/Trilium/issues/8228) — A one-click repo setting improving supply-chain security for released binaries.
|
||||
- [#8281 — Search history](https://github.com/TriliumNext/Trilium/issues/8281) — Small quality-of-life addition to the existing search bar; bounded scope.
|
||||
### From Batch 02
|
||||
|
||||
- [#8319 — Improved Note-Maps](https://github.com/TriliumNext/Trilium/issues/8319) — Relation/note maps exist as a core visualization and filtering/coloring by label or link-depth is a natural extension of that widget.
|
||||
- [#8332 — Global custom color palette for text background](https://github.com/TriliumNext/Trilium/issues/8332) — CKEditor5 supports configuring color palettes and exposing this via Options fits the existing theming/settings surface.
|
||||
- [#8333 — Quick access UI for frequently used text background colors](https://github.com/TriliumNext/Trilium/issues/8333) — Last-used/recent-colors is a standard CKEditor5 toolbar pattern and a modest UX improvement to the existing editor.
|
||||
- [#8372 — Support share_target in PWA to share files into Trilium notes](https://github.com/TriliumNext/Trilium/issues/8372) — Trilium ships a PWA and web clippers; registering a Web Share Target manifest entry fits the existing mobile-web story.
|
||||
- [#8389 — Make it possible to add preact to Dialogs](https://github.com/TriliumNext/Trilium/issues/8389) — The frontend is migrating to Preact and exposing a typed Preact-component dialog API is a natural extension of the scripting surface.
|
||||
- [#8466 — Naming and locking some note revisions](https://github.com/TriliumNext/Trilium/issues/8466) — Revisions are a core BRevision entity and pinning/naming individual revisions is a modest schema/UX addition with clear value.
|
||||
- [#8526 — Ctrl+Click to multi-select in note tree](https://github.com/TriliumNext/Trilium/issues/8526) — Multi-select in the tree already exists for ranged selection; adding the standard non-adjacent modifier (configurable) is a straightforward tree-widget fix.
|
||||
- [#8588 — Import .ics Calendar Support](https://github.com/TriliumNext/Trilium/issues/8588) — Trilium has a calendar/day-note subsystem and `.ics` import (one-shot or subscription) fits that existing surface.
|
||||
- [#8606 — Implement Authorization on OpenID](https://github.com/TriliumNext/Trilium/issues/8606) — OIDC login already exists; gating it on a claim/subject allowlist is a small but important hardening for single-user self-hosters.
|
||||
- [#8658 — OIDC groups claims for access control](https://github.com/TriliumNext/Trilium/issues/8658) — Same OIDC subsystem; evaluating a `groups` claim against an allowlist is a natural companion to the existing auth code.
|
||||
- [#8699 — Backup enhancements (custom path, retention)](https://github.com/TriliumNext/Trilium/issues/8699) — The built-in backup service already runs on a schedule; making the path and retention configurable is a small extension of existing options.
|
||||
- [#8720 — Inline Code copy button](https://github.com/TriliumNext/Trilium/issues/8720) — Block code already has a copy affordance; mirroring it on inline code fits the existing CKEditor5 code plugin.
|
||||
### From Batch 01
|
||||
|
||||
- [#8912 — macOS dynamic traffic light offset based on zoom factor](https://github.com/TriliumNext/Trilium/issues/8912) — Small, self-contained Electron polish fix for a real visual bug on macOS with custom title bar.
|
||||
- [#8941 — Ability to Download Backups](https://github.com/TriliumNext/Trilium/issues/8941) — Backups are a built-in feature and letting users download them from Settings is a natural, low-effort extension.
|
||||
- [#8954 — Allow filtering by categories for custom icon packs](https://github.com/TriliumNext/Trilium/issues/8954) — Icon picker is an existing widget and 16k+ icons clearly need category filtering to remain usable.
|
||||
- [#8955 — Simpler UI mode for new / casual users](https://github.com/TriliumNext/Trilium/issues/8955) — Reorganizing the context menu into the existing Advanced submenu is a reasonable onboarding improvement without removing functionality.
|
||||
- [#9003 — Drag-and-drop files/folders to insert clickable file:// hyperlinks](https://github.com/TriliumNext/Trilium/issues/9003) — Fits the existing drag-and-drop import flow as an alternate modifier-key behavior, useful for local-knowledge-hub workflows.
|
||||
- [#9029 — Integrated Web-Clipper](https://github.com/TriliumNext/Trilium/issues/9029) — An "import from URL" action in the web UI reuses existing clipper/import machinery and covers users who can't install the extension.
|
||||
- [#9032 — Horizontal scroll bar for improved tab row navigation](https://github.com/TriliumNext/Trilium/issues/9032) — Tabs are a core UI element and scroll/overflow handling with many open tabs is a reasonable UX fix.
|
||||
- [#9059 — Link Notes in PDF To Internal Notes](https://github.com/TriliumNext/Trilium/issues/9059) — Builds naturally on the existing internal link system and the new PDF viewer, complementing #8635.
|
||||
- [#9120 — Images as links](https://github.com/TriliumNext/Trilium/issues/9120) — Basic CKEditor capability users reasonably expect from a rich-text editor; likely a small plugin/config tweak.
|
||||
- [#9164 — PDF Export feature and font size](https://github.com/TriliumNext/Trilium/issues/9164) — Export is core functionality and inconsistent font sizing plus an export options dialog are reasonable improvements.
|
||||
- [#9311 — Official RISC-V (riscv64) Docker image support](https://github.com/TriliumNext/Trilium/issues/9311) — Self-hosting on ARM/x86 is already supported and the reporter has a working PoC plus CI contribution offer, making it low-risk to add to the build matrix.
|
||||
- [#9337 — Renaming Bookmarks](https://github.com/TriliumNext/Trilium/issues/9337) — Rename-propagation is already expected behavior for note links and bookmarks should behave consistently.
|
||||
- [#9353 — Zoom with a pen tablet on canvas notes](https://github.com/TriliumNext/Trilium/issues/9353) — Canvas (Excalidraw) is a supported note type and keyboard-modifier zoom is a reasonable accessibility-style addition.
|
||||
|
||||
## Niche / Scripting Territory (77)
|
||||
|
||||
These serve specific workflows or small audiences. Trilium already has a scripting API + custom note types + templates — most of these could be built as user scripts or plugins without touching core. Each rationale includes the suggested alternative.
|
||||
|
||||
### From Batch 15
|
||||
|
||||
- [#641 — npm install additional libraries](https://github.com/TriliumNext/Trilium/issues/641) — Arbitrary npm module loading is an advanced scripting-environment concern best handled by users extending their own backend scripts.
|
||||
- [#673 — External Resource Notes (npm/git-backed)](https://github.com/TriliumNext/Trilium/issues/673) — A highly speculative note type that could be prototyped as a custom note type or script rather than a core feature.
|
||||
- [#825 — Link preview](https://github.com/TriliumNext/Trilium/issues/825) — Rich external link previews are better implemented as a custom widget/script since they involve third-party metadata fetching.
|
||||
- [#986 — Community Code Library / Plugin System](https://github.com/TriliumNext/Trilium/issues/986) — A community plugin/theme registry is adjacent to Trilium's scripting model but is an ecosystem/infrastructure effort rather than a core feature.
|
||||
### From Batch 14
|
||||
|
||||
- [#1142 — enhance link map](https://github.com/TriliumNext/Trilium/issues/1142) — TheBrain-style parent/child/jump visualization is a specialized visualization overhaul better explored as a custom view.
|
||||
- [#1288 — save picture of linkmap](https://github.com/TriliumNext/Trilium/issues/1288) — Exporting the link map to image is niche and achievable via browser/devtools or scripting.
|
||||
- [#1507 — save & reset link map arrangement & zoom level](https://github.com/TriliumNext/Trilium/issues/1507) — Persisted link-map layouts are niche polish for a legacy visualization feature.
|
||||
- [#1650 — Copy notes from tree and paste into relation map](https://github.com/TriliumNext/Trilium/issues/1650) — Cross-widget clipboard into the (legacy) relation map is a narrow power-user workflow.
|
||||
- [#1654 — Contextual Similar notes algorithm based on search string](https://github.com/TriliumNext/Trilium/issues/1654) — Threading search context into similar-notes ranking is a speculative tweak to an existing heuristic.
|
||||
- [#1697 — Populate a hyperlinked md file from table rows](https://github.com/TriliumNext/Trilium/issues/1697) — Table-to-templated-note generation is squarely a scripting/template use case.
|
||||
- [#1716 — Generating citation from note attributes](https://github.com/TriliumNext/Trilium/issues/1716) — BibTeX generation from promoted attributes is a classic backend-script use case.
|
||||
### From Batch 13
|
||||
|
||||
- [#1850 — Collapsable bullets](https://github.com/TriliumNext/Trilium/issues/1850) — Outliner-style collapsible bullets are a CKEditor-heavy feature better handled as a custom plugin/script.
|
||||
- [#1949 — Fine-grained inheritance control (depth, conditions)](https://github.com/TriliumNext/Trilium/issues/1949) — Complex conditional inheritance is better expressed via scripted attribute logic.
|
||||
- [#1950 — Transclusion of attributes/searches into note body](https://github.com/TriliumNext/Trilium/issues/1950) — Already achievable via render notes / scripts as the author acknowledges.
|
||||
- [#1958 — Bulk note creation from text list](https://github.com/TriliumNext/Trilium/issues/1958) — One-off import/scaffold operation well-suited to a backend script.
|
||||
- [#2115 — BibTeX citation support like Zettlr](https://github.com/TriliumNext/Trilium/issues/2115) — Academic citation workflow is niche and better as a custom CKEditor plugin/script.
|
||||
- [#2186 — today/yesterday search terms for day notes](https://github.com/TriliumNext/Trilium/issues/2186) — Relative date search aliases are easily handled in a small script as the author already plans.
|
||||
- [#2330 — Aggregate unfinished TODO items from notes](https://github.com/TriliumNext/Trilium/issues/2330) — Canonical use case for a backend search/render script.
|
||||
- [#2351 — Documentation for mobile frontend plugin buttons](https://github.com/TriliumNext/Trilium/issues/2351) — Docs request about the scripting/launcher extension surface, handled in the script API docs.
|
||||
- [#2354 — Group edited-notes list by shared path](https://github.com/TriliumNext/Trilium/issues/2354) — Specific cosmetic preference for the edited-notes widget, easily done via a custom render script.
|
||||
### From Batch 12
|
||||
|
||||
- [#2526 — Simple recurring todo](https://github.com/TriliumNext/Trilium/issues/2526) — Todo/recurrence is not a first-class concept in Trilium and is well-suited to a backend script via the existing API.
|
||||
- [#2544 — Forms/Fields in a template](https://github.com/TriliumNext/Trilium/issues/2544) — Structured form fields are largely achievable today via promoted attributes and templates; further custom forms are scripting territory.
|
||||
- [#2802 — Shared SQL between SQL code notes](https://github.com/TriliumNext/Trilium/issues/2802) — An `%INCLUDE%` mechanism for ad-hoc SQL notes is a niche power-user tweak better done via scripting.
|
||||
- [#3037 — Upgrade the Relation Map (dynamic scripting)](https://github.com/TriliumNext/Trilium/issues/3037) — Dynamic scripted styling/rendering inside Relation Maps is niche and overlaps with Render Notes/scripting.
|
||||
### From Batch 11
|
||||
|
||||
- [#3269 — "Repeated but unique" relation constraint](https://github.com/TriliumNext/Trilium/issues/3269) — Highly personal citation-graph requirement that a backend script attribute-validator can handle.
|
||||
- [#3493 — Attribute inheritance across arbitrary relations](https://github.com/TriliumNext/Trilium/issues/3493) — Powerful but complex semantics; best prototyped via scripting before touching core attribute engine.
|
||||
- [#3498 — More ranking signals / ML for search and autocomplete](https://github.com/TriliumNext/Trilium/issues/3498) — Ambitious ranking overhaul with ML ambitions more suited to experimentation/plugin rather than core search.
|
||||
- [#3551 — Custom context-menu widget API](https://github.com/TriliumNext/Trilium/issues/3551) — A plugin/scripting extension point rather than a built-in product feature.
|
||||
- [#3557 — Full-text search via command line](https://github.com/TriliumNext/Trilium/issues/3557) — Niche CLI integration that ETAPI plus a small user script already covers.
|
||||
### From Batch 10
|
||||
|
||||
- [#3798 — Reference page listing all link locations](https://github.com/TriliumNext/Trilium/issues/3798) — Easily built as a backend script walking a subtree; too specific to warrant a core feature.
|
||||
- [#3840 — Transclusion as a note map relation type](https://github.com/TriliumNext/Trilium/issues/3840) — A very specialized note-map view that fits custom visualization scripting rather than a core toggle.
|
||||
- [#3902 — View child notes inside canvas note](https://github.com/TriliumNext/Trilium/issues/3902) — Excalidraw-specific cross-note rendering is niche and partially overlaps relation map; better suited as a custom canvas integration.
|
||||
- [#3905 — Central Excalidraw library for all canvas notes](https://github.com/TriliumNext/Trilium/issues/3905) — Niche Excalidraw workflow that can be handled via cloned library notes or scripting.
|
||||
- [#4052 — File selecting items stored in notes](https://github.com/TriliumNext/Trilium/issues/4052) — Exposing note attachments to OS file pickers is an OS/browser sandboxing issue beyond Trilium's scope, and partially scriptable.
|
||||
- [#4061 — Unix Days as calendar](https://github.com/TriliumNext/Trilium/issues/4061) — Extremely niche alternative calendar format that is better suited to a user script or custom day-note structure.
|
||||
### From Batch 09
|
||||
|
||||
- [#4203 — Import/Export multilevel node as single MD file](https://github.com/TriliumNext/Trilium/issues/4203) — Non-standard export format (flatten subtree into headings) better handled via a custom export script.
|
||||
- [#4354 — Input cursor always positioned in the center of screen](https://github.com/TriliumNext/Trilium/issues/4354) — Typewriter-mode is a niche editor preference better implemented as a user script/CSS.
|
||||
- [#4384 — Display attachments directly inside notes](https://github.com/TriliumNext/Trilium/issues/4384) — Conflicts with the note/attachment model; inline video/PDF playback for arbitrary attachments is a niche rendering ask handled by custom widgets.
|
||||
- [#4651 — Include webviews into text notes as preview](https://github.com/TriliumNext/Trilium/issues/4651) — Niche preview-in-note rendering that's better handled by custom scripts or note-type-specific widgets.
|
||||
- [#4668 — Create clone location when it doesn't exist](https://github.com/TriliumNext/Trilium/issues/4668) — Edge-case workflow tweak to the clone dialog that's unlikely to benefit most users.
|
||||
- [#4755 — Enable trilium iframe compatibility](https://github.com/TriliumNext/Trilium/issues/4755) — Weakens security headers (X-Frame-Options/CSP) for a niche reverse-proxy embed use case; at most a config option.
|
||||
- [#4811 — Attribute to change document link behaviour](https://github.com/TriliumNext/Trilium/issues/4811) — Small link-target preference that is easily handled by custom CSS or a user script.
|
||||
- [#4832 — Tag-based note connections in Note Map](https://github.com/TriliumNext/Trilium/issues/4832) — Relation Map already supports custom attribute-driven connections; this is a niche visualization tweak.
|
||||
### From Batch 08
|
||||
|
||||
- [#5217 — Friendly share urls: turn title into shareAlias](https://github.com/TriliumNext/Trilium/issues/5217) — The request itself explicitly proposes this as a user script/button action.
|
||||
- [#5268 — Register icon pack in mermaid](https://github.com/TriliumNext/Trilium/issues/5268) — Custom mermaid icon pack registration is a niche configuration better handled via scripting or mermaid config.
|
||||
### From Batch 07
|
||||
|
||||
- [#5410 — Add the ability to create a shell link (shortcut) for a note](https://github.com/TriliumNext/Trilium/issues/5410) — OS-specific shortcut file generation is better served by user scripts or manual URL-based shortcuts.
|
||||
- [#5480 — Notification API for scripts](https://github.com/TriliumNext/Trilium/issues/5480) — A narrow scripting API addition that benefits a small set of script authors; reasonable but scoped to the scripting surface.
|
||||
- [#5481 — Selected Note API for scripts](https://github.com/TriliumNext/Trilium/issues/5481) — Another targeted scripting API extension useful primarily for custom script workflows.
|
||||
- [#5511 — Calculated content in templates via inline Javascript](https://github.com/TriliumNext/Trilium/issues/5511) — Templating with inline JS overlaps with existing `runOnNoteCreation` scripting and is better handled by improving that path rather than adding a new evaluator.
|
||||
### From Batch 06
|
||||
|
||||
- [#5572 — API Function to Raise Window](https://github.com/TriliumNext/Trilium/issues/5572) — Very specific Electron convenience; could be added as a small frontend API helper, but is otherwise a user-script concern.
|
||||
- [#5585 — Search Prefix (JS code block for result prefixes)](https://github.com/TriliumNext/Trilium/issues/5585) — Arbitrary code hook for search rendering is better expressed as a custom render script or a render-note feature rather than a core search option.
|
||||
### From Batch 05
|
||||
|
||||
- [#5825 — Annotate image](https://github.com/TriliumNext/Trilium/issues/5825) — Would require a dedicated image editor; better covered by pasting into the existing Canvas (Excalidraw) note type and annotating there.
|
||||
- [#5849 — macOS-style label/tag system](https://github.com/TriliumNext/Trilium/issues/5849) — Duplicates Trilium's attribute/label system; any macOS-flavored UI could be a user CSS/script theme.
|
||||
- [#6350 — Repeat last action shortcut (Word-style F4)](https://github.com/TriliumNext/Trilium/issues/6350) — CKEditor doesn't expose a generic "last command" model; realistically a custom CKEditor plugin experiment rather than a core feature.
|
||||
- [#6407 — Kanban Board enhancements (subtasks, progress, drag-drop)](https://github.com/TriliumNext/Trilium/issues/6407) — Kanban is not a core Trilium subsystem; these project-management flourishes are better as a community template/script package.
|
||||
- [#6409 — Checklist progress](https://github.com/TriliumNext/Trilium/issues/6409) — A nice-to-have text editor sugar achievable today with a frontend script counting `<input type=checkbox>` in note content.
|
||||
- [#6779 — Embedded playbook / runnable script steps](https://github.com/TriliumNext/Trilium/issues/6779) — Overlaps with Trilium's existing backend script note type; a richer multi-step runbook UI is a narrow power-user workflow better built as a custom note type or script.
|
||||
### From Batch 04
|
||||
|
||||
- [#7006 — hope to add protect single note frontApi](https://github.com/TriliumNext/Trilium/issues/7006) — Per-note lock-on-tab-switch is a specific privacy workflow; exposing a frontend API hook is fine but the feature itself is better implemented as a user script using existing protected-session primitives.
|
||||
- [#7024 — where is my clone note? An easy way to find clone note](https://github.com/TriliumNext/Trilium/issues/7024) — The underlying request (locate clones of a specific note) is reasonable but the proposed solution overlaps with existing note-path and note-map features; a small script or a note-map filter would address it without new core UI.
|
||||
- [#7291 — Calendar view adds support for Resource Timeline](https://github.com/TriliumNext/Trilium/issues/7291) — Resource timelines are a scheduling/project-management use case well outside typical PKM; better addressed by a custom FullCalendar-based script or a dedicated template.
|
||||
- [#7635 — Option to use background images in presentations](https://github.com/TriliumNext/Trilium/issues/7635) — Reveal.js presentation polish for a specific subset of users; better handled via per-slide attributes or a script that sets reveal.js background properties.
|
||||
- [#7670 — Attachment link customization](https://github.com/TriliumNext/Trilium/issues/7670) — Custom share URL routing to enable Google Docs preview is a specific integration workflow; better as a share-layer customization or reverse-proxy rewrite than a core feature.
|
||||
### From Batch 03
|
||||
|
||||
- [#7893 — Add Podman installation to documentation](https://github.com/TriliumNext/Trilium/issues/7893) — Docs-only request for an alternate container runtime; better handled as a community wiki/docs PR than core work.
|
||||
- [#7923 — Auto Import Folder Contents To Trilium](https://github.com/TriliumNext/Trilium/issues/7923) — Filesystem watcher inbox is a specific workflow; better as a backend script using the existing import API.
|
||||
- [#8107 — Support Markdown (mindmap extension) syntax](https://github.com/TriliumNext/Trilium/issues/8107) — Unclear/niche mind-map markdown dialect request; more appropriate as a custom importer or script than built-in syntax.
|
||||
- [#8140 — "shareExternalLink"-type label for PDF generation](https://github.com/TriliumNext/Trilium/issues/8140) — Specialized collaboration workaround for DNS-blocked colleagues; a backend script rewriting links pre-export would fit the workflow.
|
||||
- [#8150 — Note header image](https://github.com/TriliumNext/Trilium/issues/8150) — Cosmetic SiYuan/Craft-style feature; achievable today via custom CSS or a script-injected template.
|
||||
### From Batch 02
|
||||
|
||||
- [#8382 — Inline tabs in pages](https://github.com/TriliumNext/Trilium/issues/8382) — An admonition-style tab block is doable but better shipped as a custom CKEditor5 plugin (similar to the existing admonition/footnotes packages) rather than as a core content primitive.
|
||||
- [#8590 — Custom Font Selection with System Font Support](https://github.com/TriliumNext/Trilium/issues/8590) — Font family is already configurable via CSS/themes; a system-font enumerator is a niche cosmetic feature better served by a theme or user CSS snippet.
|
||||
- [#8600 — Microsoft Word style whole-word formatting commands](https://github.com/TriliumNext/Trilium/issues/8600) — Very small CKEditor5 behavioral tweak serving a narrow muscle-memory preference; fine as an upstream config or frontend script.
|
||||
- [#8663 — Web Clipper for ChatGPT](https://github.com/TriliumNext/Trilium/issues/8663) — ChatGPT's virtualized DOM breaks the generic clipper; a site-specific extractor is a fragile, single-site special case better handled by a user script or Readability tweak.
|
||||
- [#8700 — Add G-code formatting](https://github.com/TriliumNext/Trilium/issues/8700) — CodeMirror/highlight.js already cover mainstream languages; G-code is a niche CNC domain better shipped as a user-contributed syntax mode than bundled by default.
|
||||
### From Batch 01
|
||||
|
||||
- [#8766 — Checkbox tree](https://github.com/TriliumNext/Trilium/issues/8766) — Multi-select-with-checkboxes on the note tree is a niche workflow; could be achieved via a frontend script or custom tree widget rather than core.
|
||||
- [#8957 — Better Separation Between Notes and System Scripts](https://github.com/TriliumNext/Trilium/issues/8957) — Trilium already has the hidden subtree and `#template`/`#appCss` attributes; users can organize their own scripts into a dedicated branch or use the existing hidden subtree conventions.
|
||||
- [#8963 — Bookmark while viewing pdf](https://github.com/TriliumNext/Trilium/issues/8963) — Per-PDF bookmarking is specific to heavy PDF readers; better served by the native PDF.js viewer's own features or a custom widget than by first-class note metadata.
|
||||
- [#9006 — Switch Alt Enter with Enter](https://github.com/TriliumNext/Trilium/issues/9006) — Personal keybinding preference that conflicts with standard rich-text paragraph behavior; users can remap via the existing keyboard shortcut settings.
|
||||
- [#9336 — Global Bookmarks](https://github.com/TriliumNext/Trilium/issues/9336) — This reinvents cross-note anchors/named links; the existing internal-link and `#` reference system already addresses the underlying need without a new global namespace.
|
||||
|
||||
## Out of Scope (55)
|
||||
|
||||
These don't fit Trilium's identity as a personal hierarchical note-taking app with power-user features. Common rejection themes: real-time collaboration, CMS-style publishing, IDE-like features, fundamental architectural rewrites (sync protocol, encryption model), tool replacements, vendor promos. Each rationale names what Trilium would have to become to accept it.
|
||||
|
||||
### From Batch 15
|
||||
|
||||
- [#1026 — Show Trilium content related to my web searches](https://github.com/TriliumNext/Trilium/issues/1026) — A browser search-results injection feature is outside the clipper's scope and raises privacy/complexity concerns.
|
||||
- [#242 — CalDAV Support](https://github.com/TriliumNext/Trilium/issues/242) — Implementing CalDAV server/client protocol for calendar and task sync is well outside Trilium's PKM scope.
|
||||
### From Batch 14
|
||||
|
||||
- [#1209 — Clipper for PDF files?](https://github.com/TriliumNext/Trilium/issues/1209) — Bulk PDF ingestion and metadata scraping is beyond the web clipper's scope; PDFs are already importable as file notes.
|
||||
- [#1233 — Block Reference and transclude function](https://github.com/TriliumNext/Trilium/issues/1233) — Obsidian/Roam-style block transclusion conflicts with Trilium's note-level model and CKEditor architecture.
|
||||
- [#1280 — Enabling custom Ckeditor plugins](https://github.com/TriliumNext/Trilium/issues/1280) — User-installable CKEditor plugins is an Obsidian-plugin-style ecosystem Trilium explicitly does not pursue.
|
||||
- [#1386 — Zotero integration](https://github.com/TriliumNext/Trilium/issues/1386) — Deep reference-manager integration is outside PKM core and better implemented via scripts/ETAPI.
|
||||
- [#1479 — Apache proxy setup notes](https://github.com/TriliumNext/Trilium/issues/1479) — This is wiki/documentation feedback, not a product feature.
|
||||
- [#1567 — Proof import / sanitize filenames](https://github.com/TriliumNext/Trilium/issues/1567) — Mixes a bug-style concern with niche filename-rewriting that would likely break round-trip import/export semantics.
|
||||
- [#1589 — Setting to reduce logging only to errors](https://github.com/TriliumNext/Trilium/issues/1589) — Log verbosity tuning is a low-value config knob; standard syslog filtering handles this externally.
|
||||
- [#1625 — Add custom MIME types for code notes](https://github.com/TriliumNext/Trilium/issues/1625) — Referenced race-condition history and CodeMirror maintenance burden make this an unattractive extension point.
|
||||
- [#1704 — Content block reference and embedding](https://github.com/TriliumNext/Trilium/issues/1704) — Same as #1233: block transclusion is fundamentally incompatible with Trilium's editor architecture.
|
||||
### From Batch 13
|
||||
|
||||
- [#1853 — Zotero engines.json integration](https://github.com/TriliumNext/Trilium/issues/1853) — Zotero-side config for external lookup, not something Trilium itself should ship.
|
||||
- [#1909 — One-way asymmetric encryption of notes](https://github.com/TriliumNext/Trilium/issues/1909) — Introduces a whole new crypto model duplicating the existing protected-notes feature with uncertain security benefit.
|
||||
- [#1927 — Andy Matuschak-style stacked note navigation](https://github.com/TriliumNext/Trilium/issues/1927) — Fundamentally different navigation paradigm that doesn't match Trilium's tab/tree model.
|
||||
- [#2159 — jsPlumb node groups in relation map](https://github.com/TriliumNext/Trilium/issues/2159) — Highly specific to the legacy relation-map implementation and unlikely to be prioritized.
|
||||
- [#2259 — Embedded Neovim support](https://github.com/TriliumNext/Trilium/issues/2259) — Embedding nvim turns Trilium into an IDE host, far outside its scope (Vim keybindings in CodeMirror already exist).
|
||||
- [#2261 — Chrome "create shortcut" start URL](https://github.com/TriliumNext/Trilium/issues/2261) — Browser-specific PWA launcher workaround; user can configure URL manually.
|
||||
- [#2391 — One-click CapRover installation](https://github.com/TriliumNext/Trilium/issues/2391) — Belongs in CapRover's own one-click apps catalog, not Trilium's repo.
|
||||
- [#2404 — Google-style full-text search results](https://github.com/TriliumNext/Trilium/issues/2404) — Vague ask to reskin search results as a web search engine; doesn't match a hierarchical note UI.
|
||||
### From Batch 12
|
||||
|
||||
- [#2620 — Expiration date & max requests for shared notes](https://github.com/TriliumNext/Trilium/issues/2620) — Share lifecycle/rate limiting leans toward a publishing/CMS feature beyond Trilium's personal PKM sharing model.
|
||||
- [#2637 — Allow styling of mini date selector](https://github.com/TriliumNext/Trilium/issues/2637) — The native browser control cannot be styled without rewriting the widget, for marginal benefit.
|
||||
- [#2654 — Server to Server Sync](https://github.com/TriliumNext/Trilium/issues/2654) — Multi-master/HA clustering fundamentally conflicts with Trilium's single-authoritative-server sync design.
|
||||
- [#2726 — Block References like Obsidian/Logseq](https://github.com/TriliumNext/Trilium/issues/2726) — Block-level referencing is a core data-model shift that doesn't fit Trilium's note-as-unit model.
|
||||
- [#2869 — Bypass auth for specific IP/subnet](https://github.com/TriliumNext/Trilium/issues/2869) — IP-based auth bypass is better handled by a reverse proxy and introduces security risk Trilium shouldn't own.
|
||||
### From Batch 11
|
||||
|
||||
- [#3246 — Integrate PlantUML via CKEditor plugin](https://github.com/TriliumNext/Trilium/issues/3246) — Relies on an unmaintained third-party plugin and overlaps with the existing Mermaid support.
|
||||
- [#3263 — Generalize the tree to arbitrary transitive relations](https://github.com/TriliumNext/Trilium/issues/3263) — Fundamental rethink of Trilium's core tree model, incompatible with existing UI/data assumptions.
|
||||
- [#3399 — Export descendants plus linked notes](https://github.com/TriliumNext/Trilium/issues/3399) — Expanding export beyond the hierarchy would require complex closure/cycle handling not aligned with the export model.
|
||||
- [#3633 — Web page snapshotting / Scrapyard-like offline capture](https://github.com/TriliumNext/Trilium/issues/3633) — Large archiving feature belongs in the web clipper domain, not the core app.
|
||||
### From Batch 10
|
||||
|
||||
- [#3825 — Office document support](https://github.com/TriliumNext/Trilium/issues/3825) — Embedding/editing Office documents is outside Trilium's PKM scope and is adequately handled by file attachments.
|
||||
- [#3865 — MyScript Handwriting integration](https://github.com/TriliumNext/Trilium/issues/3865) — Bundling a third-party commercial handwriting API is out of scope for a local-first PKM tool.
|
||||
- [#3906 — Host Trilium demo instance](https://github.com/TriliumNext/Trilium/issues/3906) — This is a community/hosting request, not a product feature, and unsuitable for a self-hosted multi-user app.
|
||||
- [#3978 — Login page custom background](https://github.com/TriliumNext/Trilium/issues/3978) — Cosmetic tweak to the server login page, already achievable via custom CSS and not worth a built-in setting.
|
||||
- [#4099 — Rename "clones" to "instances"](https://github.com/TriliumNext/Trilium/issues/4099) — Terminology rename of a deeply embedded concept would cause documentation and API churn for marginal clarity gains.
|
||||
### From Batch 09
|
||||
|
||||
- [#4345 — Sync API support for ETAPI](https://github.com/TriliumNext/Trilium/issues/4345) — Exposing the internal sync/changelog protocol via ETAPI risks corrupting the sync state machine and is outside ETAPI's mandate.
|
||||
- [#4701 — LanguageTool integration](https://github.com/TriliumNext/Trilium/issues/4701) — Grammar checking is an external service integration better left to browser extensions or user scripts, not core Trilium.
|
||||
- [#4816 — Public Link with Advanced Search on shared tree](https://github.com/TriliumNext/Trilium/issues/4816) — Pushes Shaca/shared notes toward becoming a publishing CMS with guest accounts, contrary to core identity.
|
||||
- [#4834 — Import PDF files into Canvas notes](https://github.com/TriliumNext/Trilium/issues/4834) — PDF-to-image rasterization is a heavy external dependency for a niche Excalidraw workflow.
|
||||
- [#4837 — Cloud Deployment](https://github.com/TriliumNext/Trilium/issues/4837) — Trilium already ships Docker; packaging for a dozen third-party PaaS platforms is not core team work.
|
||||
### From Batch 08
|
||||
|
||||
- [#4871 — Adding Elestio as deployment option](https://github.com/TriliumNext/Trilium/issues/4871) — Vendor promotional/partnership request, not a product feature.
|
||||
- [#4956 — Milestone: Multi-user support](https://github.com/TriliumNext/Trilium/issues/4956) — Multi-user/collaboration contradicts Trilium's stated single-user PKM identity.
|
||||
- [#4957 — End-to-end encryption (database-level)](https://github.com/TriliumNext/Trilium/issues/4957) — Conflicts with server-side features like search and share; Trilium already has per-note protected encryption.
|
||||
- [#4969 — Note editors other than CKEditor](https://github.com/TriliumNext/Trilium/issues/4969) — Swapping out the core rich text editor is infeasible and conflicts with the CKEditor-centric architecture.
|
||||
### From Batch 07
|
||||
|
||||
- [#5355 — Import/Merge another Trilium database into current database](https://github.com/TriliumNext/Trilium/issues/5355) — Merging entire databases conflicts with Trilium's sync model and would introduce severe entity-ID and revision conflicts; users should use sync instead.
|
||||
- [#5451 — Add polylines or polygons on the geomap note type](https://github.com/TriliumNext/Trilium/issues/5451) — Turning the geomap into a GIS drawing tool goes well beyond its note-pinning purpose.
|
||||
### From Batch 06
|
||||
|
||||
- [#5561 — task management (Kanban + progress + timeline + repetition)](https://github.com/TriliumNext/Trilium/issues/5561) — Turns Trilium into a task/PM tool; Kanban-first workflows and scheduled recurring tasks are outside core PKM identity.
|
||||
- [#5598 — Run multiple client instances / connect to multiple servers](https://github.com/TriliumNext/Trilium/issues/5598) — Requires fundamentally rethinking the single-profile Electron architecture and multi-server sync model.
|
||||
- [#5690 — markdown editor](https://github.com/TriliumNext/Trilium/issues/5690) — Duplicates the existing rich text editor's role; Trilium's model is CKEditor5 with markdown import/export, not a parallel raw-markdown note type.
|
||||
- [#5692 — codesandbox Sandpack note or plugin](https://github.com/TriliumNext/Trilium/issues/5692) — Embedding a live code sandbox turns Trilium into a code playground/IDE, far outside PKM scope.
|
||||
### From Batch 05
|
||||
|
||||
- [#6351 — Mount part of note tree as writable filesystem folder](https://github.com/TriliumNext/Trilium/issues/6351) — Would require a FUSE/WebDAV layer with bidirectional sync semantics, conflicting with Trilium's database-first architecture.
|
||||
- [#6406 — Packaging for Chocolatey](https://github.com/TriliumNext/Trilium/issues/6406) — Third-party package repository work; should live with a community maintainer, not in the core project.
|
||||
- [#6546 — Store file notes on the filesystem instead of the database](https://github.com/TriliumNext/Trilium/issues/6546) — Fundamental storage model change that breaks the single-file portability, sync, and protected-note guarantees Trilium is built around.
|
||||
### From Batch 04
|
||||
|
||||
- [#7411 — Better encryption algorithms](https://github.com/TriliumNext/Trilium/issues/7411) — Trilium already uses AES-128 with a deliberate tradeoff; swapping to XChaCha20-Poly1305/Argon2id means a migration path, sync-protocol changes, and cross-client crypto rewrites with low practical security ROI for personal notes.
|
||||
### From Batch 03
|
||||
|
||||
- [#8225 — Offline mode for the PWA](https://github.com/TriliumNext/Trilium/issues/8225) — Would require reimplementing the full Becca stack and sync engine in the browser (IndexedDB, service worker), essentially a new client architecture with very low ROI given the Electron app already exists.
|
||||
### From Batch 02
|
||||
|
||||
- [#8477 — Folders, folders, folders (installer/data dir picker)](https://github.com/TriliumNext/Trilium/issues/8477) — This is a packaging/installer complaint, not a product feature; the data directory is already configurable via env vars and the Electron installer is standard — it would require replacing the installer/packaging stack with no product benefit.
|
||||
- [#8534 — Password reset makes protected notes unrecoverable](https://github.com/TriliumNext/Trilium/issues/8534) — The proposed "deterministic key from password" fix would break the entire protected-session threat model (it is *designed* so that losing the password loses the data); this is a docs/UX warning issue, not a feature the product should adopt.
|
||||
|
||||
## Unclear (2)
|
||||
|
||||
These couldn't be judged without clarification from the reporter. Not rejections — ping the reporter.
|
||||
|
||||
### From Batch 08
|
||||
|
||||
- [#4922 — restore backed up database files to notes](https://github.com/TriliumNext/Trilium/issues/4922) — The request mixes a sync failure bug report with an unclear restore workflow; intent is ambiguous.
|
||||
### From Batch 03
|
||||
|
||||
- [#8122 — Continue updating on chocolatey repository](https://github.com/TriliumNext/Trilium/issues/8122) — Needs clarification on whether this refers to the legacy zadam/Trilium Chocolatey package or a new TriliumNext publish, and who would own maintenance.
|
||||
@@ -1,298 +0,0 @@
|
||||
# Likely Already Fixed — Trilium Issue Review
|
||||
|
||||
Consolidated from per-batch analysis of all 859 open issues (as of 2026-04-09).
|
||||
Total likely-already-fixed candidates: **58**
|
||||
|
||||
These issues show signs of being resolved in current `main`: references to removed/renamed files, commits that clearly address the symptom, or reproduction steps that no longer work. **Do not close blindly** — each one should be verified and ideally asked about by the maintainer before closing.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 01
|
||||
|
||||
### [#9009 — Option to easily toggle the fuzzy search on/off](https://github.com/TriliumNext/Trilium/issues/9009)
|
||||
- **Evidence**: Commit `f23a7b4842 feat(settings): also allow for fuzzy searching to just be disabled` (Mar 18 2026) adds a disable toggle in `apps/client/src/widgets/type_widgets/options/other.tsx`, wires it to `search_context.ts`, and updates `options_init.ts` + `options_interface.ts`. This lands after the issue was filed.
|
||||
- **Verification needed**: A maintainer can confirm the new toggle exists in the Options UI (Other tab) in a current build and ask the reporter whether it satisfies their need; also verify the "quick jump" fuzzy concern mentioned in the issue is covered by the same toggle.
|
||||
|
||||
### [#8866 — Cursor jumps to note beginning periodically, tabs reset — LauncherContainer](https://github.com/TriliumNext/Trilium/issues/8866)
|
||||
- **Evidence**: The error messages reference `LauncherContainer.js:545` (0.101.3). The current repo has `apps/client/src/widgets/launch_bar/LauncherContainer.tsx` — the widget was rewritten as a React component. Reported actions (`hideLeftPane`, `searchNotes`, `enterProtectedSession`) still exist but the rAF-in-launcher-container reflow storm described in the log looks gone after the rewrite.
|
||||
- **Verification needed**: Maintainer should ask the reporter to retest on 0.102.2+ since the underlying file no longer exists in its 0.101.x form.
|
||||
|
||||
### [#8790 — Some assets not work in share notes when serving under a different path](https://github.com/TriliumNext/Trilium/issues/8790)
|
||||
- **Evidence**: Issue references the path `assets/v0.99.3/src/share.js`. The share rendering pipeline has been completely replaced — share assets are now served from `packages/share-theme/` and `apps/server/src/share/content_renderer.ts` uses `basePath`-based asset URLs. The old `/assets/vX.X.X/src/share.js` path no longer exists.
|
||||
- **Verification needed**: Maintainer should have the reporter retest with 0.102.x and the current reverse-proxy guide; the specific 404 URL from the bug cannot occur in the current codebase.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 02
|
||||
|
||||
### [#8407 — Why was the title selection for new notes cancelled](https://github.com/TriliumNext/Trilium/issues/8407)
|
||||
- **Evidence**: `apps/client/src/widgets/note_title.tsx` (lines 61–69) explicitly calls `textBoxRef.current.select()` on `focusAndSelectTitle` events, and `apps/client/src/services/note_create.ts:92` triggers that event with `isNewNote: true`. A relevant fix `06cea99b40 fix(react): note title not selecting text` (Aug 2025) pre-dates the issue, but recent churn in the title widget (e.g. `c09ef3af80`, Feb 2026) suggests the bug may have returned and then been addressed after the reporter filed on 0.101.3.
|
||||
- **Verification needed**: Ask the reporter to retest on nightly / current main.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 03
|
||||
|
||||
### [#8060 — fix(search): Canvas notes with empty or missing elements cause quick search to crash](https://github.com/TriliumNext/Trilium/issues/8060)
|
||||
- **Evidence**: `git log -S "Array.isArray(elements)"` shows commit `ecb972c71c fix(search): add null check for canvas elements in fulltext search`. The canvas handling has since moved to `apps/server/src/services/search/expressions/note_content_fulltext_preprocessor.ts` where `processCanvasContent` (lines 83–108) now guards with `if (Array.isArray(elements))` and returns `""` otherwise — exactly the fix proposed in the issue.
|
||||
- **Verification needed**: Confirm with the reporter on a current nightly and close.
|
||||
|
||||
### [#7884 — Remove `docker-compose.rootless.yaml`](https://github.com/TriliumNext/Trilium/issues/7884)
|
||||
- **Evidence**: `Glob "docker-compose.rootless*"` at repo root returns no files; the file has been removed.
|
||||
- **Verification needed**: Grep any docs for dangling mentions of `docker-compose.rootless` and close. (Also listed under easy-fix in case any lingering references need cleanup.)
|
||||
|
||||
---
|
||||
|
||||
## From Batch 04
|
||||
|
||||
### [#6989 — New client sync issues](https://github.com/TriliumNext/Trilium/issues/6989)
|
||||
- **Evidence**: Reporter is on **0.95.0** (released mid-2025) and describes websocket connection drops against a reverse proxy. The codebase has had several sync/websocket robustness fixes since 0.98. Current version is ~0.99.4.
|
||||
- **Verification needed**: Ask reporter to retry on the latest version. If still reproducing, collect a fresh sync/WS log.
|
||||
|
||||
### [#6999 — Editing a Relation (from template) in mobile view, don't work](https://github.com/TriliumNext/Trilium/issues/6999)
|
||||
- **Evidence**: Reporter is on **0.91.1**, which is extremely old relative to current mobile rework. The mobile attribute editor has been largely rewritten (`apps/client/src/widgets/attribute_widgets/*.tsx` is now React/TSX).
|
||||
- **Verification needed**: Ask reporter to retry on 0.99.x; close if no repro.
|
||||
|
||||
### [#7393 — Note content overwritten when changing title of snippets](https://github.com/TriliumNext/Trilium/issues/7393)
|
||||
- **Evidence**: Reporter is on **0.97.1**. Text snippet handling (`#textSnippet`) has been refactored since — see `apps/client/src/widgets/type_widgets/text/EditableText.tsx` and related CKEditor 5 integration. The described "flashing + content swap" while editing title suggests the old debounced save path that was rewritten around 0.99.
|
||||
- **Verification needed**: Ask reporter to retry on 0.99.4 with the specific snippet-switching STR.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 05
|
||||
|
||||
### [#6390 — `arm64` docker image does not include `wget`](https://github.com/TriliumNext/Trilium/issues/6390)
|
||||
- **Evidence**: I read `apps/server/Dockerfile` and `Dockerfile.alpine`. Both use `HEALTHCHECK ... node /usr/src/app/docker_healthcheck.cjs` (line 28 / 26) — there is no longer any `wget`-based healthcheck. The runtime stage installs only `gosu` (Debian) or `su-exec` (Alpine). Commit `614958f16c chore(docker): reintroduce healthchecks` (Apr 2025) switched healthchecks from `wget` to a node script before this issue was filed (Jul 2025), so there is no dependency on `wget` in the current image — the issue may actually be about Coolify's external healthcheck expectations, not Trilium's image.
|
||||
- **Verification needed**: Maintainer should confirm that Trilium's own image indeed no longer requires wget for healthchecks and respond to the Coolify maintainer on the upstream template; close as "not a Trilium bug" or as a docs-only fix.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 06
|
||||
|
||||
### [#5669 — Add link dialog fails to link if you press enter twice too quickly](https://github.com/TriliumNext/Trilium/issues/5669)
|
||||
- **Evidence**: `git log --grep "enter twice\|link.*enter"` finds commit `f6201d8581` "fix: add link dialog enter act correctly" (Mar 2026) which touches `apps/client/src/widgets/dialogs/add_link.tsx` (+76 lines) and adds a 160-line spec file. Directly addresses this bug.
|
||||
- **Verification needed**: Run the reproduction steps from the issue in the latest main build and confirm it is no longer possible to trigger the "Choose note type" dialog by fast double-enter in the add-link flow.
|
||||
|
||||
### [#5606 — OpenID Connect support](https://github.com/TriliumNext/Trilium/issues/5606)
|
||||
- **Evidence**: `apps/server/src/services/open_id.ts` exists; `express-openid-connect` is a direct dependency and has been continuously updated (git log shows `2.20.1`, `2.20.0`, `2.19.4`, etc.); OIDC docs have been improved (commit `963f4586f3`). The feature has clearly shipped.
|
||||
- **Verification needed**: Confirm documentation covers configuration with Authelia/Keycloak/Authentik so the original reporter's use cases are answered, then close.
|
||||
|
||||
### [#5545 — Fancytree assertion failed: only init supported](https://github.com/TriliumNext/Trilium/issues/5545)
|
||||
- **Evidence**: fancytree has since been updated to v2.38.5 (`5db8b59b51`) plus a "partial integrate jquery.fancytree" refactor (`23db7fe602`) and a "missing fancytree dependencies" fix (`901ab54e64`). The assertion error from an older version may no longer reproduce.
|
||||
- **Verification needed**: Load the server build on a clean profile and check the browser console for the `only init supported` error on startup.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 07
|
||||
|
||||
### [#5341 — Duplicate HTML ids for tabs of the same view](https://github.com/TriliumNext/Trilium/issues/5341)
|
||||
- **Evidence**: The options UI has been migrated to Preact (`apps/client/src/widgets/type_widgets/options/*.tsx`). `FormGroup` now generates IDs via `useUniqueName(name)` which returns `${name}-${randomString(10)}` (see `apps/client/src/widgets/react/FormGroup.tsx:19` and `hooks.tsx:372`). `FormCheckbox`, `FormRadioGroup`, `Collapsible`, and `Dropdown` all use the same hook. Every rendered instance therefore gets a fresh random ID.
|
||||
- **Verification needed**: Open two options tabs in the same window and inspect the DOM to confirm no duplicate IDs remain across the multi-tab view.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 08
|
||||
|
||||
### [#5134 — Upgrade autocomplete dependencies](https://github.com/TriliumNext/Trilium/issues/5134)
|
||||
- **Evidence**: Grepped the git log and found commits `d1fc4780b7 refactor: remove old autocomplete completely`, `3b35dc50c5 feat(core): integrate autocomplete route`, plus a series of `feat(autocomplete)` / `test(autocomplete)` commits. The old autocomplete has been fully removed and replaced in-house.
|
||||
- **Verification needed**: Maintainer should confirm the new autocomplete is considered the replacement the reporter was asking for, then close.
|
||||
|
||||
### [#5174 — '@' Context menu's auto-completion not showing most relevant but most recent](https://github.com/TriliumNext/Trilium/issues/5174)
|
||||
- **Evidence**: The autocomplete subsystem was fully rewritten (see #5134 evidence). Fuzzy matching has been added (`f23a7b4842 feat(settings): also allow for fuzzy searching to just be disabled`) and a new autocomplete route exists. The old "most recent" behaviour may be gone.
|
||||
- **Verification needed**: Repro on current main — create ancient notes matching the query, a few recent ones, then `@` and check ordering.
|
||||
|
||||
### [#5196 — (Feature request) Cursor automatically in text box when embedding note](https://github.com/TriliumNext/Trilium/issues/5196)
|
||||
- **Evidence**: Commit `35bd210062 fix(react/dialogs): recent notes not triggered in autocomplete` (Aug 2025) refactored `triggerRecentNotes` in `apps/client/src/services/note_autocomplete.ts` to call `$el.trigger("focus").trigger("select")`. `apps/client/src/widgets/dialogs/include_note.tsx` invokes `triggerRecentNotes(autoCompleteRef.current)` in `onShown`, so the input should now focus automatically when the Include Note dialog opens.
|
||||
- **Verification needed**: Repro on current main — open a text note, click Include Note, confirm focus is in the search box without clicking.
|
||||
|
||||
### [#5254 — User configurable whitelist of html tags stripped on import](https://github.com/TriliumNext/Trilium/issues/5254)
|
||||
- **Evidence**: The issue's interim request — extend the default allowlist with `acronym`, `article`, `big`, `button`, `cite`, `col`, `colgroup`, `data`, `dd`, `fieldset`, `form`, `legend`, `meter`, `noscript`, `option`, `progress`, `rp`, `samp`, `small`, `sub`, `sup`, `template`, `textarea`, `tt` — is now done in `packages/commons/src/lib/shared_constants.ts` (`SANITIZER_DEFAULT_ALLOWED_TAGS`, comment references this same issue). Additionally, `apps/server/src/services/html_sanitizer.ts` already reads an `allowedHtmlTags` option (user-configurable).
|
||||
- **Verification needed**: Confirm the user-configurable option has a UI surface; if only programmatic, close the issue with a docs pointer.
|
||||
|
||||
### [#5131 — (Bug report) v0.90.4 docker does not read USER_UID and USER_GID from environment](https://github.com/TriliumNext/Trilium/issues/5131)
|
||||
- **Evidence**: Reporter's logs show `./start-docker.sh: 3: [[: not found` — the script was using bash `[[ ]]` under `/bin/sh`. Current `apps/server/start-docker.sh` uses POSIX `[ ! -z "${USER_UID}" ]` / `[ ! -z "${USER_GID}" ]`, so the bug is gone.
|
||||
- **Verification needed**: Spin up the latest docker image with `USER_UID=1001 USER_GID=1001` and confirm the container starts and writes the log dir.
|
||||
|
||||
### [#5066 — Fix `spec/etapi` tests and port to vitest](https://github.com/TriliumNext/Trilium/issues/5066)
|
||||
- **Evidence**: `apps/server/spec/etapi/` now contains 30+ `.spec.ts` files (e.g. `app-info.spec.ts`, `search.spec.ts`, `mcp.spec.ts`). The migration has happened.
|
||||
- **Verification needed**: Confirm `pnpm test:sequential` actually runs them and they pass.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 09
|
||||
|
||||
### [#4649 — (Bug report) Importing large ZIP-Files via etapi throws error and request hangs](https://github.com/TriliumNext/Trilium/issues/4649)
|
||||
- **Evidence**: The reported root cause was that `req.body` was undefined/unparsed on the `/etapi/notes/:noteId/import` POST. `apps/server/src/app.ts:94` now registers `express.raw({ limit: "500mb" })` globally, and `apps/server/src/etapi/notes.ts:180-190` still passes `req.body` straight to `zipImportService.importZip` — the raw buffer path now exists. Issue predates the monorepo restructure.
|
||||
- **Verification needed**: Reproduce the original Python import with a large zip against current main; verify `Content-Type: application/zip` is handled (Express `raw()` defaults to `application/octet-stream`, so users may need the right Content-Type or an explicit type in the raw handler).
|
||||
|
||||
### [#4261 — (Feature request) Make apps logs saving optional](https://github.com/TriliumNext/Trilium/issues/4261)
|
||||
- **Evidence**: Log retention is now configurable via `config.Logging.retentionDays` (`apps/server/src/services/log.ts:36-42`) with `-1` keeping all logs and positive values deleting older files. While fully disabling file logging isn’t wired up, the disk-space concern is mitigated by retention config.
|
||||
- **Verification needed**: Maintainer to decide whether the feature is satisfied by retention config or still needs an explicit “disable file logs” switch.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 10
|
||||
|
||||
### [#4184 — (Bug report) Search in read-only note does not work](https://github.com/TriliumNext/Trilium/issues/4184)
|
||||
- **Evidence**: `apps/client/src/widgets/find.ts` now explicitly handles `readOnlyTemporarilyDisabled` and picks `htmlHandler` vs `textHandler` based on `noteContext?.isReadOnly()` (lines 245-259). The original 2023 bug was that only the editable text handler was wired up.
|
||||
- **Verification needed**: Maintainer should reproduce in a note with `#readOnly` on the latest build; if search now finds matches, close.
|
||||
|
||||
### [#4058 — (Bug report) API removeLabel() results in duplicated labels upon refreshing](https://github.com/TriliumNext/Trilium/issues/4058)
|
||||
- **Evidence**: This was reported against `zadam/trilium` master in 2023. Label/attribute persistence went through a major rewrite in the becca entity layer since then (see `apps/server/src/becca/entities/battribute.ts` and the `PUT /api/notes/:noteId/attributes` route). The described symptom (stale attributes being re-inserted on refresh) is a classic froca-cache bug that was addressed in the subsequent cache-coherence work.
|
||||
- **Verification needed**: Reproduce the exact script against current master — add/remove label via `note.removeLabel(...)` from `api.runOnBackend` and verify the label stays removed after reopening.
|
||||
|
||||
### [#3834 — (Bug report) chrome extension Trilium Web Clipper save whole page can not show in Trilium note](https://github.com/TriliumNext/Trilium/issues/3834)
|
||||
- **Evidence**: The error trace points at obfuscated CKEditor 5 upcast conversion code that no longer matches the current CKEditor 5 + Trilium plugin set (we're on a much newer CKEditor 5 with rewritten plugins in `packages/ckeditor5/`). Web Clipper code has also been moved into `apps/web-clipper/`.
|
||||
- **Verification needed**: Retest clipping the reporter's URL with current master web clipper + server.
|
||||
|
||||
### [#3868 — docker log show chown operation not permitted](https://github.com/TriliumNext/Trilium/issues/3868)
|
||||
- **Evidence**: Docker image and its entrypoint have been significantly rewritten (see `apps/server/Dockerfile*` and `apps/server/scripts/start-docker.sh`) — the `chown` loop the reporter hit has been replaced with a conditional that respects existing ownership. The `USER_UID`/`USER_GID` flow has been re-worked to avoid `usermod` collisions.
|
||||
- **Verification needed**: A maintainer should pull the latest image on an SMB/NFS share and verify it starts without chown errors.
|
||||
|
||||
### [#4008 — Permissions issue: Can not set UID and GID to '0'](https://github.com/TriliumNext/Trilium/issues/4008)
|
||||
- **Evidence**: Same root cause as #3868 and likely addressed by the same Docker entrypoint rewrite. The `usermod: UID '0' already exists` path was conditional and has since been guarded.
|
||||
- **Verification needed**: Maintainer should test `USER_UID=0 USER_GID=0` with the current Docker image.
|
||||
|
||||
### [#3705 — Changing the size of inclusions in a note](https://github.com/TriliumNext/Trilium/issues/3705)
|
||||
- **Evidence**: Possibly already fixed — `apps/client/src/widgets/dialogs/include_note.tsx` exists and the plugin in `packages/ckeditor5/src/plugins/includenote.ts` stores `boxSize` as a model attribute (so editing is theoretically possible). Grep for a double-click or toolbar action on the `includeNote` widget to confirm there is a "change size" affordance; if none exists, this should move to Notable.
|
||||
- **Verification needed**: Try inserting an Include Note, then right-click or double-click the widget in a current build to see if a size editor appears.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 11
|
||||
|
||||
### [#3516 — (Bug report) Hidden notes appear in search results](https://github.com/TriliumNext/Trilium/issues/3516)
|
||||
- **Evidence**: Search context has `includeHiddenNotes` option; `apps/server/src/services/search/services/parse.ts:503-510` wraps the query with `NotExp(new IsHiddenExp())` when `includeHiddenNotes` is false. `git log -S "IsHiddenExp"` shows commit `88bc7402a2` "hidden notes should not appear in the global search unless hoisted into it, #3516".
|
||||
- **Verification needed**: Reproducer on a fresh 0.9x build — confirm `_hidden` subtree notes no longer show in global search.
|
||||
|
||||
### [#3627 — Invalid timezone in search using docker container](https://github.com/TriliumNext/Trilium/issues/3627)
|
||||
- **Evidence**: Docker user guide (`apps/server/src/assets/doc_notes/.../Using Docker.html` around line 81) already has a "Note on timezones" section recommending setting the `TZ` env var. The reporter's suggestion was to document this.
|
||||
- **Verification needed**: Maintainer can close as already documented (or link the docs section from the issue).
|
||||
|
||||
### [#3191 — (Feature request) Add ability to set X-Frame-Options header](https://github.com/TriliumNext/Trilium/issues/3191)
|
||||
- **Evidence**: `apps/server/src/app.ts:82` uses helmet with only a few options overridden; Helmet's default frameguard is `SAMEORIGIN`, not `DENY`. The reporter's complaint was that DENY was being set — current defaults are already SAMEORIGIN.
|
||||
- **Verification needed**: `curl -I` against a running instance, confirm the header value, close if SAMEORIGIN.
|
||||
|
||||
### [#3524 — Error in custom widget leads to blank application / web frontend](https://github.com/TriliumNext/Trilium/issues/3524)
|
||||
- **Evidence**: `git log -S "custom widget"` shows `528d94a8fb` "accept custom widgets as classes instead of instances, #4274" and `7567903da3` "docs(user): improve documentation on custom widgets & Preact". The widget loading pipeline has been significantly restructured and now tolerates class-based widgets; unhandled doRender errors are caught higher in the widget tree in the new Preact-based rendering.
|
||||
- **Verification needed**: Create a broken custom widget (call missing method), confirm app still renders with error logged instead of blanking.
|
||||
|
||||
### [#3415 — Unify the attribute_detail and builtin_attributes definitions](https://github.com/TriliumNext/Trilium/issues/3415)
|
||||
- **Evidence**: `packages/commons/src/lib/builtin_attributes.ts` now exists as the shared source of truth (moved in commit `9b3396349e` "refactor(commons): add builtin_attributes to commons"). However, `apps/client/src/widgets/attribute_widgets/attribute_detail.ts:202-271` still maintains its own hardcoded `ATTR_HELP` map. Partial unification.
|
||||
- **Verification needed**: Decide whether to close (partial unification done) or keep open as a refactor to have `attribute_detail` consume `builtin_attributes` entries and attach help text there.
|
||||
|
||||
### [#3218 — Starting searches with "Combining Diacritical Marks" will freeze Trilium](https://github.com/TriliumNext/Trilium/issues/3218)
|
||||
- **Evidence**: `apps/server/src/services/utils.ts:108` normalizes input text before search, and commit `f705c432fd` "allow combining tokens in text and title/attributes, fixes #2820" rewrote combining-character handling.
|
||||
- **Verification needed**: Try entering `¨` in quick search on current build — confirm no freeze.
|
||||
|
||||
### [#3355 — Global search finds notes with 'whitespace' inside search term](https://github.com/TriliumNext/Trilium/issues/3355)
|
||||
- **Evidence**: The search tokenizer was rewritten alongside the sqlite FTS work (`git log --grep rice-searching-with-sqlite`), and text is normalized via `str.normalize("NFC")` in `apps/server/src/services/utils.ts:532`.
|
||||
- **Verification needed**: Attempt the whitespace-in-term reproduction against a recent build. Likely no longer reproduces.
|
||||
|
||||
### [#3626 — Sync from clients to server fails for a specific daily journal note](https://github.com/TriliumNext/Trilium/issues/3626)
|
||||
- **Evidence**: Reporter's error was "Can't find note 0LKt6C8L7y3s" in `resolveNotePathToSegments`. Sync engine and `froca.resolveNotePathToSegments` have been heavily refactored since 0.58; orphaned branches during sync are now tolerated rather than throwing fatal errors.
|
||||
- **Verification needed**: Nothing to reproduce from the stale db. Close as stale / cannot-reproduce.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 12
|
||||
|
||||
### [#3177 — (Bug report) ERR_SOCKET_BAD_PORT - port set to NaN on server start](https://github.com/TriliumNext/Trilium/issues/3177)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/server/src/services/port.ts` now uses `parseAndValidate()` that explicitly checks `isNaN` and exits with a clear FATAL message; v0.55 parser issue appears rewritten.
|
||||
- **Verification needed**: Ask reporter to retry with current release and provide `config.ini` if still failing.
|
||||
|
||||
### [#3045 — Docker : Can't run by using user 1000:1000](https://github.com/TriliumNext/Trilium/issues/3045)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/server/Dockerfile.rootless` now exists — runs as non-root user with configurable UID/GID via build args and does not rely on `su-exec`/`setgroups`. Multiple rootless-related fixes present in git log.
|
||||
- **Verification needed**: Confirm with reporter that the rootless image solves their scenario.
|
||||
|
||||
### [#2957 — (Bug report) JavaScript error when attempting to run when an instance is already running](https://github.com/TriliumNext/Trilium/issues/2957)
|
||||
- **Evidence**: `/home/elian/Projects/Trilium/apps/desktop/src/main.ts:87` uses `app.requestSingleInstanceLock()` and exits gracefully (`process.exit(0)`) with a translated info message instead of throwing an unhandled error. There's also a `second-instance` handler that focuses the existing window.
|
||||
- **Verification needed**: Run two instances on Windows to confirm no more JS error.
|
||||
|
||||
### [#2722 — (Feature request) Make interface auth timeout configurable](https://github.com/TriliumNext/Trilium/issues/2722)
|
||||
- **Evidence**: `Session.cookieMaxAge` is configurable in `apps/server/src/assets/config-sample.ini` (line 39) and documented in `apps/server/src/assets/doc_notes/en/User Guide/.../Authentication.html`. Used by `apps/server/src/routes/session_parser.ts:110`.
|
||||
- **Verification needed**: Close as implemented, link to Authentication docs.
|
||||
|
||||
### [#2784 — (Feature request) Add an example documentation for self-signed certs in TLS configuration wiki page](https://github.com/TriliumNext/Trilium/issues/2784)
|
||||
- **Evidence**: `docs/User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS).md` contains 3 matches for `self-signed`/`self sign`, so self-signed guidance is now present.
|
||||
- **Verification needed**: Maintainer confirms current doc covers the scenario the reporter wanted.
|
||||
|
||||
### [#2909 — webclipper show not correct](https://github.com/TriliumNext/Trilium/issues/2909)
|
||||
- **Evidence**: Web-clipper was completely rewritten — new implementation lives in `apps/web-clipper/` (WXT-based). The reporter's 0.52.2-era bug with the old zadam web-clipper is no longer reproducible against the new codebase.
|
||||
- **Verification needed**: Ask reporter to retry with the current web-clipper.
|
||||
|
||||
### [#2621 — (Bug report) Inconsistency import pictures with Trilium Web Clipper Addon](https://github.com/TriliumNext/Trilium/issues/2621)
|
||||
- **Evidence**: Same as #2909 — web-clipper rewritten under `apps/web-clipper/`; old image-import inconsistency from v0.50 won't reproduce.
|
||||
- **Verification needed**: Ask reporter to retry "Save whole page" against modern web-clipper.
|
||||
|
||||
### [#2596 — (Bug report) Failed Start Up (Gnome Arc Menu extension)](https://github.com/TriliumNext/Trilium/issues/2596)
|
||||
- **Evidence**: Likely dead — Electron stack, Gnome shell extensions, and everything else has been updated many times since v0.49.5 (Jan 2022). No code in Trilium controls this; it's a third-party shell extension conflict.
|
||||
- **Verification needed**: Ask reporter to retry current release with Arc Menu; close as stale if not reproducible.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 13
|
||||
|
||||
### [#2290 — ERROR: Failed to deserialize sync response: Option "documentSecret" doesn't exist](https://github.com/TriliumNext/Trilium/issues/2290)
|
||||
- **Evidence**: `apps/server/src/services/options_init.ts` lines 10–13 call `initDocumentOptions()` which unconditionally creates `documentId` and `documentSecret` with `randomSecureToken(16)`. The option is also referenced in `sync.ts`, `setup.ts`, and the commons `options_interface.ts`. Sync/setup flow was rewritten since v0.48.
|
||||
- **Verification needed**: Have a maintainer reproduce the "remote docker killed mid-sync" scenario against a current build; the missing option should now be seeded.
|
||||
|
||||
### [#2340 — Denial of Service (setup page spawning main windows)](https://github.com/TriliumNext/Trilium/issues/2340)
|
||||
- **Evidence**: `apps/server/src/routes/setup.ts` no longer calls `createMainWindow` directly on the unauthenticated setup endpoint. It renders a setup page and only calls `windowService.createMainWindow(app)` from `handleElectronRedirect()` after the DB is already initialized. Commit `a155b6e8d5` ("create separate window for setup and then main window") addressed this.
|
||||
- **Verification needed**: Confirm that an unauthenticated `/setup` request against the current desktop build no longer spawns windows.
|
||||
|
||||
### [#2239 — Docker Compose file needs to be updated](https://github.com/TriliumNext/Trilium/issues/2239)
|
||||
- **Evidence**: `git log` shows commit `78b6614eea` "fix docker-compose.yml #2239" and `883e71612c` "Use `triliumnext/notes` as image in `docker-compose.yml`". The new compose file uses the correct image name and a persisted volume.
|
||||
- **Verification needed**: Run the repo's current `docker-compose.yml` and confirm data persists in the named volume.
|
||||
|
||||
### [#2413 — Note map does not display inherited relations](https://github.com/TriliumNext/Trilium/issues/2413)
|
||||
- **Evidence**: `apps/server/src/routes/api/note_map.ts` line 61 uses `note.getRelations()`, and `apps/server/src/becca/entities/bnote.ts` line 657 defines `getRelations()` as `getAttributes(RELATION, name)` which explicitly includes inherited attributes (the doc comment says "including inherited ones"). Only `template`/`inherit` relation names are filtered out (line 57), not the inherited relations themselves.
|
||||
- **Verification needed**: Reproduce with Template + Instance, open note map on Instance, confirm the `testRelation` edge to Target now appears.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 14
|
||||
|
||||
### [#1157 — Split Screen And Unlinked References](https://github.com/TriliumNext/Trilium/issues/1157)
|
||||
- **Evidence**: Split view is fully implemented. `apps/client/src/widgets/containers/split_note_container.js` exists, `link_context_menu.ts` has `openNoteInNewSplit` / `openNoteInOtherSplit`, `tree_context_menu.ts` has `openNoteInSplit`, and split-pane layout is wired into `desktop_layout.tsx` and `mobile_layout.tsx`.
|
||||
- **Verification needed**: Part 1 (split view) is done. Part 2 (unlinked references) is still an open feature request — maintainer should close as partial/duplicate of other unlinked-references requests in batch.
|
||||
|
||||
### [#1460 — [Feature request] Make use of HTML5 as audio/video embedding provider. Relies on having partial-content supported by server.](https://github.com/TriliumNext/Trilium/issues/1460)
|
||||
- **Evidence**: `apps/server/src/routes/api/files.ts` implements partial-content streaming (`range`, `start/end`, comment "Partial content request"). Client-side video/audio players exist in `apps/client/src/widgets/type_widgets/file/Video.tsx` and `MediaPlayer.tsx`.
|
||||
- **Verification needed**: Confirm video/audio notes can be seeked in the browser; if yes, close.
|
||||
|
||||
### [#1512 — Fail to define shortcut like Meta+[ or Meta+Shift+Left](https://github.com/TriliumNext/Trilium/issues/1512)
|
||||
- **Evidence**: `apps/server/src/services/keyboard_actions.ts` lines 22-33 now set Mac defaults to `CommandOrControl+[` / `CommandOrControl+]` for back/forward navigation — directly the shortcut the reporter asked for. Mac-specific branch is driven by `isMac`.
|
||||
- **Verification needed**: Confirm on Mac that `Meta+[` now binds; if yes, close.
|
||||
|
||||
### [#1544 — embedding image with url](https://github.com/TriliumNext/Trilium/issues/1544)
|
||||
- **Evidence**: `packages/ckeditor5/src/plugins.ts` lines 113-119 register `Image`, `ImageUpload`, `ImageInsert` family. CKEditor's native image insert dialog accepts URLs.
|
||||
- **Verification needed**: Test Insert Image via URL in the toolbar and close if works.
|
||||
|
||||
---
|
||||
|
||||
## From Batch 15
|
||||
|
||||
### [#1102 — Spellchecker is overly sensitive](https://github.com/TriliumNext/Trilium/issues/1102)
|
||||
- **Evidence**: Items (1) and (2) were rejected upstream (Electron/Blink limitation). Item (3) (runtime toggle shortcut) is still not supported — `apps/server/src/services/window.ts` reads `spellCheckEnabled` only at window creation, and no `toggleSpellCheck` shortcut exists in `keyboard_actions.ts`. However the original items 1 & 2 are effectively closed as "won't fix".
|
||||
- **Verification needed**: Close items 1-2 as won't-fix (Electron limitation); split out item 3 as a separate feature request if still wanted.
|
||||
|
||||
### [#1080 — Cell properties panel invisible when table cell content too large](https://github.com/TriliumNext/Trilium/issues/1080)
|
||||
- **Evidence**: Filed against Trilium 0.42.6 with CKEditor from that era. CKEditor5 has been upgraded many major versions since; table cell properties panel positioning is handled by upstream CKEditor. No custom override exists in `packages/ckeditor5/`.
|
||||
- **Verification needed**: Reproduce with current build — paste a huge text block into a table cell and try to open cell properties; if panel is visible, close.
|
||||
|
||||
### [#924 — Text following innerlink becomes part of the link after switching pages](https://github.com/TriliumNext/Trilium/issues/924)
|
||||
- **Evidence**: Reported against 0.40.6 — a CKEditor link-range bug from that era. CKEditor has been upgraded many versions; no custom link-range fix exists in `packages/ckeditor5/`. No commits touching "innerlink" in `git log`.
|
||||
- **Verification needed**: Reproduce: insert a Ctrl+L link, type text after it, switch notes and back; if the trailing text is no longer absorbed into the link, close.
|
||||
|
||||
### [#936 — unable to clip some pages](https://github.com/TriliumNext/Trilium/issues/936)
|
||||
- **Evidence**: 0.40-era web clipper timeout on a large GitHub markdown page. Clipper and server code have been rewritten since (`apps/web-clipper/`, clipping endpoint in `apps/server/src/routes/api/clipper.ts`).
|
||||
- **Verification needed**: Re-try clipping `https://github.com/learnbyexample/learn_gnuawk/blob/master/gnu_awk.md` with current clipper; if successful, close.
|
||||
|
||||
### [#75 — add standard attribute value autocomplete](https://github.com/TriliumNext/Trilium/issues/75)
|
||||
- **Evidence**: `apps/client/src/services/attribute_autocomplete.ts` exports `initLabelValueAutocomplete`, which calls `attribute-values/<name>` server endpoint and populates autocomplete suggestions. Wired up in `attribute_detail.ts` and `PromotedAttributes.tsx`. Exactly what was asked for.
|
||||
- **Verification needed**: None — can be closed as done.
|
||||
|
||||
### [#649 — Open/focus a note from command line / desktop URL handler (Trilium URL protocol)](https://github.com/TriliumNext/Trilium/issues/649)
|
||||
- **Evidence**: PR #9248 ("Add URL protocol support for trilium://") is referenced as submitted for this IssueHunt. No `trilium://` handler or `setAsDefaultProtocolClient` currently in the codebase (so PR is still open).
|
||||
- **Verification needed**: Track PR #9248 — once merged, close this issue.
|
||||
@@ -20,34 +20,34 @@
|
||||
"@codemirror/state": "6.6.0",
|
||||
"@codemirror/view": "6.41.0",
|
||||
"@eslint/js": "10.0.1",
|
||||
"@fsegurai/codemirror-theme-abcdef": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-abyss": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-android-studio": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-andromeda": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-basic-dark": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-basic-light": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-cobalt2": "6.0.4",
|
||||
"@fsegurai/codemirror-theme-forest": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-github-dark": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-github-light": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-gruvbox-dark": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-gruvbox-light": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-abcdef": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-abyss": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-android-studio": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-andromeda": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-basic-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-basic-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-cobalt2": "6.0.5",
|
||||
"@fsegurai/codemirror-theme-forest": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-github-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-github-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-gruvbox-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-gruvbox-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-high-contrast-dark": "6.0.2",
|
||||
"@fsegurai/codemirror-theme-high-contrast-light": "6.0.2",
|
||||
"@fsegurai/codemirror-theme-material-dark": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-material-light": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-material-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-material-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-material-ocean": "6.0.1",
|
||||
"@fsegurai/codemirror-theme-monokai": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-nord": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-palenight": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-solarized-dark": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-solarized-light": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-monokai": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-nord": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-palenight": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-solarized-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-solarized-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-synthwave-84": "6.0.2",
|
||||
"@fsegurai/codemirror-theme-tokyo-night-day": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-tokyo-night-storm": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-volcano": "6.2.4",
|
||||
"@fsegurai/codemirror-theme-vscode-dark": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-vscode-light": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-tokyo-night-day": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-tokyo-night-storm": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-volcano": "6.2.5",
|
||||
"@fsegurai/codemirror-theme-vscode-dark": "6.2.6",
|
||||
"@fsegurai/codemirror-theme-vscode-light": "6.2.6",
|
||||
"@replit/codemirror-indentation-markers": "6.5.3",
|
||||
"@replit/codemirror-lang-nix": "6.0.1",
|
||||
"@replit/codemirror-vim": "6.3.0",
|
||||
|
||||
240
pnpm-lock.yaml
generated
240
pnpm-lock.yaml
generated
@@ -1241,41 +1241,41 @@ importers:
|
||||
specifier: 10.0.1
|
||||
version: 10.0.1(eslint@10.2.0(jiti@2.6.1))
|
||||
'@fsegurai/codemirror-theme-abcdef':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-abyss':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-android-studio':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-andromeda':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-basic-dark':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-basic-light':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-cobalt2':
|
||||
specifier: 6.0.4
|
||||
version: 6.0.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.0.5
|
||||
version: 6.0.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-forest':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-github-dark':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-github-light':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-gruvbox-dark':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-gruvbox-light':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-high-contrast-dark':
|
||||
specifier: 6.0.2
|
||||
version: 6.0.2(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
@@ -1283,47 +1283,47 @@ importers:
|
||||
specifier: 6.0.2
|
||||
version: 6.0.2(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-material-dark':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-material-light':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-material-ocean':
|
||||
specifier: 6.0.1
|
||||
version: 6.0.1(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-monokai':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-nord':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-palenight':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-solarized-dark':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-solarized-light':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-synthwave-84':
|
||||
specifier: 6.0.2
|
||||
version: 6.0.2(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-tokyo-night-day':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-tokyo-night-storm':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-volcano':
|
||||
specifier: 6.2.4
|
||||
version: 6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-vscode-dark':
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.6
|
||||
version: 6.2.6(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@fsegurai/codemirror-theme-vscode-light':
|
||||
specifier: 6.2.5
|
||||
version: 6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
specifier: 6.2.6
|
||||
version: 6.2.6(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)
|
||||
'@replit/codemirror-indentation-markers':
|
||||
specifier: 6.5.3
|
||||
version: 6.5.3(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)
|
||||
@@ -3073,96 +3073,96 @@ packages:
|
||||
'@floating-ui/utils@0.2.11':
|
||||
resolution: {integrity: sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==}
|
||||
|
||||
'@fsegurai/codemirror-theme-abcdef@6.2.4':
|
||||
resolution: {integrity: sha512-+Q5RS9ExJf16Kgh8YoASdO/22g9zE9tjsFS8/yadb2Y/UNkmgNMCUU1vlYAkhNCbY+ODreCDXLmrBxUZiyoloA==}
|
||||
'@fsegurai/codemirror-theme-abcdef@6.2.5':
|
||||
resolution: {integrity: sha512-tLzQh6IZuvG5nxc6dYIn3+TTdTK8MfqXhqoW+UxCvBveDhKE488GXkoMZhTUcgk7ydUcwtL5wgftA7DdBe3eTA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-abyss@6.2.4':
|
||||
resolution: {integrity: sha512-1q8363+rbxRh9U/qTiIzsmGc8r96rgEaukqbuI2JNf+/NGPva/RaXgZIubvL9MtZ4hXQ1qT6fxAJR7KlnTbm8Q==}
|
||||
'@fsegurai/codemirror-theme-abyss@6.2.5':
|
||||
resolution: {integrity: sha512-kstZQWXsyCpLb7IIRHxs+72Bwj9G6jUEMmlEIMNijHNQO4DilUkSdsP1p84SX9c9bgvEEjMh0WGQV6f38DcLAg==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-android-studio@6.2.4':
|
||||
resolution: {integrity: sha512-KqwALoBBeTacWr7anYdaXReLX28IUVW7TSOc4Vws79D5LalmSPkV43IxElH2cjgsxDu53pn6v9Eb+ggul/Ih7w==}
|
||||
'@fsegurai/codemirror-theme-android-studio@6.2.5':
|
||||
resolution: {integrity: sha512-UaIeR1tjGJOv7BZoU39y1lpFiVeZgJqeG5hiIXwLECBOTxqPT/brspGnoOQB7n9WepVL4XMjb6yOaYEUiJkX9g==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-andromeda@6.2.4':
|
||||
resolution: {integrity: sha512-zAqMZo4B7IHN8E3l0Z5/XmMK4Ex10+p27wltswiCNxjcXejQnWImtXGyc4Rw86Ahrgk8lnb/YF3OKU/tCdDmmQ==}
|
||||
'@fsegurai/codemirror-theme-andromeda@6.2.5':
|
||||
resolution: {integrity: sha512-S9F9ES92+CkGBRMIu+HWgLIWnwxQZWezeCsYUB5TNtdp345CXiJJkZ/lBPo+GjrSzMJFvqlsYW2NKNfSjpkUIg==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-basic-dark@6.2.4':
|
||||
resolution: {integrity: sha512-eRVOWo+ewGVt07fF1hTLIfrINVoPCc+gZ+QXmGHZI2bd9Rn4sTdn1YaX85hISjVmb47Wmc1LO8GvXb6XrqUhWw==}
|
||||
'@fsegurai/codemirror-theme-basic-dark@6.2.5':
|
||||
resolution: {integrity: sha512-7KT5zSoR936R5+z70fUqAy6RdiGzmxBpYFNuYj+X9CdSO7O6krVrfqyX9MLbI/XzlJIrAXVdyuu+KfWXPwj6jw==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-basic-light@6.2.4':
|
||||
resolution: {integrity: sha512-lDF0S7ySfH31MSfkFZQif7IF2XbtyFPbouqhLNmniYe5316j9Bc5DGxb0TnH4LzM5ImtsuNXoZr5lrSAjnIjoA==}
|
||||
'@fsegurai/codemirror-theme-basic-light@6.2.5':
|
||||
resolution: {integrity: sha512-zZTahYPkZoWq9i0cCpg1Fg/sIKzNGw5q1x9agacuQoUn+2wcSunAPEW32/cDXem2MJuybEU2D2fCQ5x9MSk3Bg==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-cobalt2@6.0.4':
|
||||
resolution: {integrity: sha512-YiNUpXVQd2wk8qgiWAL21Hx9LpOiiBmrb8NW5n0M6lDr1zZKbPGsijGP7xVrg48e57AVxINwZ3vAMu2ne72Y1A==}
|
||||
'@fsegurai/codemirror-theme-cobalt2@6.0.5':
|
||||
resolution: {integrity: sha512-eblgO8U9HMuwB8r790W/Dc0mFf855R8gTxsK5Wgze7F8NYKBAfSJItZsbsw67OO4dMAMH/sh/72+tqAyJ2PcQQ==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-forest@6.2.4':
|
||||
resolution: {integrity: sha512-aHarQLOSaFMHvmfuyFNUJ2HrRq4bEyMKbB024nNn3eZI7O07eImvE6bCVS4TG/4DPJibipmU7J5JBWwMBmwNHA==}
|
||||
'@fsegurai/codemirror-theme-forest@6.2.5':
|
||||
resolution: {integrity: sha512-SXVVB44tdZRTRPrfil+suloQcmWk5mhx5uNNeK+hmnMBXkR4rowh/hU89cULoiYLOVry01F5p6VCMeLhvxJAyQ==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-github-dark@6.2.4':
|
||||
resolution: {integrity: sha512-JFMn6XKm5BHCPUVhuuQ7KUP9IQ8Gf70GqszZIhowdMJwbEzS/x4/nXJBE91HC+onmatFdju3wegSC7umb7KaJw==}
|
||||
'@fsegurai/codemirror-theme-github-dark@6.2.5':
|
||||
resolution: {integrity: sha512-l7TjaAefatsyohaMgmTrXMUrCZfulIsNk+MhdgV2niBcXiGuEk24go6jsxEQ11i/B+VJNklV0mD+AQ1SqOW0nQ==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-github-light@6.2.4':
|
||||
resolution: {integrity: sha512-NzbAMBYkgeLDoZVL9K7mX/1pn5vohyIAJh3zAkrlcVM4sFz8Co69HhZUgVyazAT67YOkjgQ8pxbsDbprb5F5Kg==}
|
||||
'@fsegurai/codemirror-theme-github-light@6.2.5':
|
||||
resolution: {integrity: sha512-F5G5Bs2txIrfbA2kBZl18Hdh4rYRVLyIeWz4txVIaYrOknUoaUFWCFred79nGYgM/WmySzbbm/tDIHNknHEGwg==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-gruvbox-dark@6.2.4':
|
||||
resolution: {integrity: sha512-oWjvqNUKd6giQzgy7lHDG3stTufVVzJK4a6BdzlJgR0orwxoR5LAM3MwWnu4FsLRY+ko8KGtxJcjCcWkIMOHxg==}
|
||||
'@fsegurai/codemirror-theme-gruvbox-dark@6.2.5':
|
||||
resolution: {integrity: sha512-Dh59SCH/axsI58k2QxfLdxHrB/BWB7AZgR3ZqBpHzchT1Eop1nNw3YMOKRybW1DoY13A7+ZcwKqEFwkoyu6c5A==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-gruvbox-light@6.2.4':
|
||||
resolution: {integrity: sha512-2fIxU+qPYNre2sSo9gHNxECZvPF/aBKwzQcSW/uRybMnfBWG/H3CFbs1N2CFLLQTFsiZDt+EZf+B6z3ubO5pOA==}
|
||||
'@fsegurai/codemirror-theme-gruvbox-light@6.2.5':
|
||||
resolution: {integrity: sha512-AnRHpM7YFI4lFG+m1+tW7skkOmH9j4KSFdXc0uK7DrNIBh8ue6gnBHEvZo2cLW9j5fNz9PkufyPb7lTuAb1Qnw==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
@@ -3185,16 +3185,16 @@ packages:
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-material-dark@6.2.4':
|
||||
resolution: {integrity: sha512-jQXWtRVJbmjWu2IjeBSD97fhCW91uxnKgH6IKd5wq2mSKkFXZ5JLLjdd/INfcODXjXz8CMoj4g/iuiSFztVkeA==}
|
||||
'@fsegurai/codemirror-theme-material-dark@6.2.5':
|
||||
resolution: {integrity: sha512-/5xGm1sGxNsNc+yZSUS7BWZXt7JoD8ZLNd5dKsSrWiwyvE4mMtrCSorzi2fzxIpWYuU9Trgnqb3ycKoySRaURQ==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-material-light@6.2.4':
|
||||
resolution: {integrity: sha512-7s9C/Xh/Dqk2rK85HVk+LML+SdGNa5ifegR1qBeAFhFFkuZCgSWs4618N6ZrKoDhmk8JBIVMpdGRtXq+4aTIYA==}
|
||||
'@fsegurai/codemirror-theme-material-light@6.2.5':
|
||||
resolution: {integrity: sha512-Y4r1R/babn4fQQuOK+uk6RGoz2QvzGcWDa+ossbz7uhB8DEpcgBaA7MACJGXXIN0qyuwagGFDHJauCNVk5SguA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
@@ -3209,40 +3209,40 @@ packages:
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-monokai@6.2.4':
|
||||
resolution: {integrity: sha512-pWiMJpoO3yKMKrahlUmAO8hZPRE7FxY10U1cMLNa+TDtuoWf2JrPEFRbkYf9wfOGSlUkGhx8HAn7xuXEEck4CQ==}
|
||||
'@fsegurai/codemirror-theme-monokai@6.2.5':
|
||||
resolution: {integrity: sha512-p3zrCbDMe3f6vwN322V6ZK1yKIPCYK4DSzDaoaF3w2imKv6zfX4qgrqizrsLSPF7hsREbYDKhwnTh2IGv7zAPA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-nord@6.2.4':
|
||||
resolution: {integrity: sha512-ELw/OnHm/PReHK534xKKrssU3y6Uu6mBCXQSyYGgOEkVuSv3JU+W3qUYuJITrIKDqigEb8wrxQ61LX0JJt6DXg==}
|
||||
'@fsegurai/codemirror-theme-nord@6.2.5':
|
||||
resolution: {integrity: sha512-5j2Pb7HuPQFNj+NydV81Akg6wFnwl64PczgIrKzqstWWhT4HfbdolcrWWEflrJpxbJgtoUcBTWpiV+awntST1A==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-palenight@6.2.4':
|
||||
resolution: {integrity: sha512-c+S78iLTkIgKrnk4FdUSKDOIgASr8vZhyhnm0zjzc6lF9Slqv8K3hjpwv7rRhUT6uziAD0Q/ABbCy0z4KSn+jA==}
|
||||
'@fsegurai/codemirror-theme-palenight@6.2.5':
|
||||
resolution: {integrity: sha512-Li+D8ltJF5op+E6nm8RDKLu2yc5JWaWRveWCdNlwO3RDRwDkDcf1/xVQiCNPTrhUMjfqNMDV1d/re9/ge/+jRQ==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-solarized-dark@6.2.4':
|
||||
resolution: {integrity: sha512-RM/U6KHGEdDc+dkXJgMrE2lGWSop2w7EAw3bVhLuMBc10Rx8aXHxDIqhHC0cXJBCsjLG+r6kzrb1bCJB4gbEBQ==}
|
||||
'@fsegurai/codemirror-theme-solarized-dark@6.2.5':
|
||||
resolution: {integrity: sha512-rYXKE2C1pixRUnEsaOqV6nok+P4tGNPYFi6A1/s3Ido5q197h6oyyPZkVLAkcsS844SzFQGKZSyDSNKHJ171lw==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-solarized-light@6.2.4':
|
||||
resolution: {integrity: sha512-69tILyKvll+/0fWfL+qeUSlcVbUpR4vi5ET2qAOAsm0ZvICNeQTXGp9sWKp+fJBCyI648+2ou5Qn2WkoSgNidA==}
|
||||
'@fsegurai/codemirror-theme-solarized-light@6.2.5':
|
||||
resolution: {integrity: sha512-3rb7ZMV6oCFtcWRagot7kltDlGwFp/Ac1/XQUB6kDnKhZpuBmK0E80j4ucjYHkOijDqqHHbUha3bhJVSRttKqA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
@@ -3257,40 +3257,40 @@ packages:
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-tokyo-night-day@6.2.4':
|
||||
resolution: {integrity: sha512-R8kRPwiZxgSkNQ0mzOyZONTabcK4Xp81s6TTkjJ02dybbi7wy+9nE2w+7AgO2TSZNor4z43ZleYGs6CG3jh60Q==}
|
||||
'@fsegurai/codemirror-theme-tokyo-night-day@6.2.5':
|
||||
resolution: {integrity: sha512-Ienq2pQ/I9VV1YkeeEe4bHStTG1ymac3bh+4VIIWJt2Ob2OiJVpmUF/XmjAX2+HJkChz0oZcUYHwpORz1ObWhA==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-tokyo-night-storm@6.2.4':
|
||||
resolution: {integrity: sha512-sgDfdDVz+v/cJL0d1XetMShXYDJyleMPF7s/zGnwdx2U/vXqU+4zwJJhA/wlXieXx/QVNMY83+io/Awde2FxKg==}
|
||||
'@fsegurai/codemirror-theme-tokyo-night-storm@6.2.5':
|
||||
resolution: {integrity: sha512-fAgTyEinXpLwh1p3jkOTa+c/d/pV9bLUwMDmTxt+LFUrUX2VeVlLdW2j6vYJKnXdGNnyaMlKKGURmNrkrwfV1Q==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-volcano@6.2.4':
|
||||
resolution: {integrity: sha512-rJDcxzaDwVwc9stEo4sfQrv8Sa/sVMwbcSKnSkvhjYh9yaPe8304GLGp8G9mPxL7t6mcLzvcXTr8TvB1x6qddw==}
|
||||
'@fsegurai/codemirror-theme-volcano@6.2.5':
|
||||
resolution: {integrity: sha512-jEUZ45GdxYj9QZE0Om1rgPNksTONQKc1trN1embVP8Wn7LCeZ0b5f06MkTx0DgYTAldq35KJIMS3olBjqxe9Xw==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-vscode-dark@6.2.5':
|
||||
resolution: {integrity: sha512-ejYiN38Hs8pNzEITnMt1LLuK9Z2ioJLTcMo4XyXL2xWlhMUClGBTZJ2BHgwHVa9LIivU41r1vQKP/ZdICRgOpw==}
|
||||
'@fsegurai/codemirror-theme-vscode-dark@6.2.6':
|
||||
resolution: {integrity: sha512-OTfvFnEaCyp8CZhuHvT6YozHdr5ulEgzMTVwS9WSaYsyEX6z10o+eP8fE4AcaLlM+qFWspDYOKuSCanKvZNMaw==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
'@codemirror/view': ^6.0.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-vscode-light@6.2.5':
|
||||
resolution: {integrity: sha512-pwHZX/qm/9wSt8ANSvCfB1GGkQ1AW/PEFzJPJgIw+iLiQDG8O9luZmAlpxKX54UkqLnGIzwDIxXVOXXTceMIjA==}
|
||||
'@fsegurai/codemirror-theme-vscode-light@6.2.6':
|
||||
resolution: {integrity: sha512-6KAcGm7E7cMGPbxG1gcAICtAwuE0BeKum8k3x9T7MUSCpC1+Q88QQx/LtCTTbp+V5fxBimvY1zCXY0F9pePTWg==}
|
||||
peerDependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': ^6.0.0
|
||||
@@ -16673,84 +16673,84 @@ snapshots:
|
||||
|
||||
'@floating-ui/utils@0.2.11': {}
|
||||
|
||||
'@fsegurai/codemirror-theme-abcdef@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-abcdef@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-abyss@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-abyss@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-android-studio@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-android-studio@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-andromeda@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-andromeda@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-basic-dark@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-basic-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-basic-light@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-basic-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-cobalt2@6.0.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-cobalt2@6.0.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-forest@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-forest@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-github-dark@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-github-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-github-light@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-github-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-gruvbox-dark@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-gruvbox-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-gruvbox-light@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-gruvbox-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
@@ -16771,14 +16771,14 @@ snapshots:
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-material-dark@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-material-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-material-light@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-material-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
@@ -16792,35 +16792,35 @@ snapshots:
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-monokai@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-monokai@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-nord@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-nord@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-palenight@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-palenight@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-solarized-dark@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-solarized-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-solarized-light@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-solarized-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
@@ -16834,35 +16834,35 @@ snapshots:
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-tokyo-night-day@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-tokyo-night-day@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-tokyo-night-storm@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-tokyo-night-storm@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-volcano@6.2.4(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-volcano@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-vscode-dark@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-vscode-dark@6.2.6(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
'@codemirror/view': 6.41.0
|
||||
'@lezer/highlight': 1.2.3
|
||||
|
||||
'@fsegurai/codemirror-theme-vscode-light@6.2.5(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
'@fsegurai/codemirror-theme-vscode-light@6.2.6(@codemirror/language@6.12.3)(@codemirror/state@6.6.0)(@codemirror/view@6.41.0)(@lezer/highlight@1.2.3)':
|
||||
dependencies:
|
||||
'@codemirror/language': 6.12.3
|
||||
'@codemirror/state': 6.6.0
|
||||
|
||||
@@ -1,150 +0,0 @@
|
||||
# Open PR Review — Summary
|
||||
|
||||
**Review date:** 2026-04-09
|
||||
**Open PRs analyzed:** 47
|
||||
**Individual analyses:** [pr-review/](./) (one `pr-<number>.md` per PR)
|
||||
|
||||
Each row points to the full individual analysis. Author's own WIP PRs (#9189, #8654) are listed but not actioned — they are the maintainer's own drafts.
|
||||
|
||||
---
|
||||
|
||||
## TL;DR — Action Matrix
|
||||
|
||||
| Action | Count | PRs |
|
||||
|---|---|---|
|
||||
| **MERGE** (ready now) | **10** | #9356, #9349, #9348, #9335, #9334, #9307, #9344, #9190, #8894, #9341 |
|
||||
| **MERGE after rebase / tiny nits** | **4** | #9338, #9342, #9104, #8640 |
|
||||
| **REQUEST CHANGES** | **22** | #9296, #9188, #9151, #9140, #9119, #9089, #9076, #9034, #8980, #8972, #8959, #8920, #8880, #8864, #8787, #8525, #8202, #9339, #9340, #9343, #7828, #7759 |
|
||||
| **CLOSE** (superseded / stale / duplicate) | **9** | #9355, #9153, #9316, #8693, #7841, #7287, #7222, #6839, (one of #8864/#8959) |
|
||||
| **MERGE (consolidation required)** | **1** | #9203 (supersedes #9153) |
|
||||
| **WIP — maintainer's own** | **2** | #9189, #8654 |
|
||||
|
||||
Total = 48 (one PR appears twice — #9203 consolidates #9153; #8864/#8959 are duplicates where one must close).
|
||||
|
||||
---
|
||||
|
||||
## 1. MERGE NOW — safe, green CI, low risk
|
||||
|
||||
These can go in today with no further changes.
|
||||
|
||||
| PR | Title | Author | Why |
|
||||
|---|---|---|---|
|
||||
| [#9356](pr-9356.md) | axios 1.15.0 [SECURITY] | renovate | CVE patch, CI green, lockfile correct. |
|
||||
| [#9349](pr-9349.md) | upath v3 | renovate | Dev-only dep, Node 20+ compatible. |
|
||||
| [#9348](pr-9348.md) | marked 17.0.6 | renovate | Patch bump, fixes async-hook race. |
|
||||
| [#9335](pr-9335.md) | fuse.js 7.3.0 | renovate | Minor, improves share-theme diacritic handling. |
|
||||
| [#9334](pr-9334.md) | eslint-linter-browserify 10.2.0 | renovate | Aligns with already-installed eslint 10.2.0. |
|
||||
| [#9307](pr-9307.md) | minimatch@3>brace-expansion v5 | renovate | Supply-chain hardening, tiny lockfile delta. |
|
||||
| [#9344](pr-9344.md) | fix(web-clipper): strip trailing `/` | bartv2 | Trivial, correct; Gemini warning is a false positive. |
|
||||
| [#9190](pr-9190.md) | feat: backup download button | Lorinc936 | Already **lgtm**'d, path-traversal guard correct. |
|
||||
| [#8894](pr-8894.md) | web-clipper: prevent cloning | contributor | Small, correct, CI green. |
|
||||
| [#9341](pr-9341.md) | feat(llm): stop generation button | Kureii | Self-contained, fixes error-swallowing from #9316. Lowest risk in the LLM series. |
|
||||
|
||||
---
|
||||
|
||||
## 2. MERGE AFTER MINOR WORK
|
||||
|
||||
Rebases, trivial filter fixes, or waiting on one dependency.
|
||||
|
||||
| PR | Title | What's needed |
|
||||
|---|---|---|
|
||||
| [#9338](pr-9338.md) | feat(llm): Ollama provider | Clean — minor `instanceof` refactor can land later. |
|
||||
| [#9342](pr-9342.md) | feat(llm): Tavily/SearXNG search | Note: API keys stored unencrypted (matches existing pattern); SSRF via SearXNG URL worth documenting. |
|
||||
| [#9104](pr-9104.md) | fix: relation map autocomplete | Already lgtm'd — just needs rebase to drop merge conflict. |
|
||||
| [#8640](pr-8640.md) | feat: relation name wildcard `~?` | Add `attr.type === "relation"` filter to avoid scanning all attributes; otherwise clean and well-tested. |
|
||||
|
||||
---
|
||||
|
||||
## 3. REQUEST CHANGES — real value, real blockers
|
||||
|
||||
These belong in Trilium but aren't ready.
|
||||
|
||||
### 3a. LLM series (Tomas Adamek / Kureii) — interdependent
|
||||
|
||||
| PR | Title | Primary blocker |
|
||||
|---|---|---|
|
||||
| [#9339](pr-9339.md) | LLM note mutation tools | Must land with/after #9340 (approval gate). Minor: duplicate `isContentAvailable()` in `move_note`. |
|
||||
| [#9340](pr-9340.md) | LLM tool approval system | **Security blocker:** new `POST /api/llm-chat/execute-tool` route is missing CSRF middleware. Also missing provenance check — route can execute any mutating tool without an LLM having proposed it. |
|
||||
| [#9343](pr-9343.md) | LLM knowledge base mode | Unbounded `getContent()` on large notes, `!important` CSS, auto-enables mutation tools → effectively depends on #9340. |
|
||||
|
||||
**Landing order:** #9338 → #9341 → #9340 (with CSRF fix) → #9339 → #9342 → #9343. #9316 closes once the split PRs land.
|
||||
|
||||
### 3b. Large feature PRs
|
||||
|
||||
| PR | Title | Biggest blocker |
|
||||
|---|---|---|
|
||||
| [#9296](pr-9296.md) | "fun take1" (actually RCE/security hardening) | Misleading title, CI red (E2E + dev), merge conflicts. **Must be split.** |
|
||||
| [#9188](pr-9188.md) | Link embed previews | Merge conflicts, hardcoded English (i18n rule), SSRF test gap, Google favicon privacy concern. Share SSRF helper with #9296. |
|
||||
| [#9076](pr-9076.md) | Codeblock format button | Bundle-size measurement pending, 1 failing ckeditor5 test, docs missing. Architecture refactor already done per review. |
|
||||
| [#9034](pr-9034.md) | Search perf "take1" | **Alternative to same author's #6839.** Maintainer must pick one track. Red CodeQL + arm64 E2E; 50K-note profiling test should be env-gated. |
|
||||
| [#8972](pr-8972.md) | Migrate autocomplete | Hover/debouncing/icon/indent regressions; strategic question on `@algolia/autocomplete-core` choice. Coordinates with #9104. |
|
||||
| [#9151](pr-9151.md) | New about dialog | Literal `"TODO"` placeholders in `en/translation.json`; stale-closure bug in `onLoad` useCallback. |
|
||||
|
||||
### 3c. Smaller correctness / quality issues
|
||||
|
||||
| PR | Title | What to fix |
|
||||
|---|---|---|
|
||||
| [#9140](pr-9140.md) | Chinese IME in relation map | Visible diff adds the new handler but doesn't show the old `keyup` wiring being replaced — verify replacement before merge. |
|
||||
| [#9119](pr-9119.md) | Copy note URL to clipboard | Real diff is ~14 lines (rest is translation reordering). Rebase, add shared URL helper, unify toast feedback. |
|
||||
| [#9089](pr-9089.md) | Auto-execute saved search | CI failing; **duplicate of #7841**. Close one. This one has cleaner impl. |
|
||||
| [#8980](pr-8980.md) | Mathlive fix + toggle | Patch targets 0.109.0 but main is on 0.109.1 — fix is currently dead code. |
|
||||
| [#8920](pr-8920.md) | Enforce TOTP on sync setup | Silently expands `checkCredentials` to enforce TOTP on **every** authenticated request — breaks existing sync/ETAPI clients. SSRF on `check-server-totp`. Split PR. |
|
||||
| [#8880](pr-8880.md) | Calendar day view + slot options | Maintainer already requested changes: crash on bad slot values, needs UI exposure in collection properties, docs on "slot" concept. |
|
||||
| [#8864](pr-8864.md) | Toolbar drag-drop customization | **Duplicate of #8959.** Uses forbidden `crypto.randomUUID()` (CLAUDE.md rule). XSS via user-supplied group label/icon SVG. Merge conflicts. |
|
||||
| [#8959](pr-8959.md) | Editable toolbar | **Duplicate of #8864.** Hardcoded English, cross-package icon imports. Cleaner than #8864 but less complete. Consolidate before merging. |
|
||||
| [#8787](pr-8787.md) | `childTitleTemplate` attribute | Maintainer already CHANGES_REQUESTED. Merge conflicts, backwards-compat for existing `titleTemplate` on parent notes, `child:template` inheritance coverage. |
|
||||
| [#8525](pr-8525.md) | Subtree expand depth limit | Hard-coded `4` needs constant, inconsistent return type, unparameterized UPDATE, no tests, arm64 E2E failing. Stale since January. |
|
||||
| [#8202](pr-8202.md) | Recently opened windows | Merge conflicts, potential sync loop from removing `openNoteContexts` filter in `froca_updater.ts`, extract LRU helper, magic `"main"` string. |
|
||||
| [#7828](pr-7828.md) | Share attachment auth | Author silent since maintainer review 2025-12-08. Mixes 3 concerns. Over-engineered `ContentAccessor` crypto without a threat model. |
|
||||
| [#7759](pr-7759.md) | Share path `{parent}/{note}` | Layered on top of #7828 and carries all its code. Only handles one parent level; relative-path rewriting is fragile; legacy redirect loses query strings. No tests. |
|
||||
|
||||
---
|
||||
|
||||
## 4. CLOSE — superseded, stale, or unfixable
|
||||
|
||||
| PR | Title | Why close |
|
||||
|---|---|---|
|
||||
| [#9355](pr-9355.md) | axios 1.15.0 (dependabot) | Duplicate of renovate's #9356 but missing the `pnpm-lock.yaml` update, so CI fails across the board. Also suggests **disabling Dependabot for npm** — repo is standardized on Renovate + pnpm. |
|
||||
| [#9153](pr-9153.md) | trilium:// protocol handler (argusagent) | **Strict subset of #9203.** #9203 has cleaner architecture (dedicated `protocol-handler.ts` vs inlined in `main.ts`) and adds the Copy-URL UI affordances. Close in favour of #9203. |
|
||||
| [#9316](pr-9316.md) | LLM chat enhancements (umbrella) | Superseded by the split PRs #9338–#9343 at the maintainer's request. Draft with merge conflicts. |
|
||||
| [#8693](pr-8693.md) | Leaflet → MapLibre GL | Stalled copilot-swe-agent PR. Visible `TODO: Fix` placeholders, hallucinated `mermaid` import, no maintainer engagement in 2 months, no tests for GPX path. |
|
||||
| [#7841](pr-7841.md) | Auto-execute saved search | Maintainer's architectural CHANGES_REQUESTED not addressed, UX concern with @rom1dep unresolved, 4+ months stale. **Superseded by #9089** (also needs work, but cleaner impl). |
|
||||
| [#7287](pr-7287.md) | Search → create-into-inbox | Misleading title (it's a sweeping note-creation refactor + AI chat command + rename of `getNoteIdFromUrl`). Failing CI (author admits). ~7 months, no maintainer engagement. Ask to split into 4 smaller PRs. |
|
||||
| [#7222](pr-7222.md) | Search ranking (draft) | Author **explicitly announced abandonment** 2025-11-23 in favour of equivalence-classes research direction. Close with thanks. |
|
||||
| [#6839](pr-6839.md) | FTS5 search | **14,758 lines / 43 files / 8 months old**, migration number collisions likely, mixes unrelated calendar timezone fix. Same author opened #9034 as a smaller active iteration. Close with reference to #9034. |
|
||||
|
||||
> Note: between #8864 and #8959, one must close — they're duplicates from the same contributor. Pick whichever the author wants to continue (#8864 is more complete but has the `crypto.randomUUID()` violation and XSS risk; #8959 is cleaner but less complete).
|
||||
|
||||
---
|
||||
|
||||
## 5. WIP — maintainer's own drafts (no action)
|
||||
|
||||
| PR | Title | Notes |
|
||||
|---|---|---|
|
||||
| [#9189](pr-9189.md) | Standalone | Strategic browser-client refactor. CI strong except CodeQL. Suggestion from review: split CLAUDE.md and `setup.tsx` out for easier review. |
|
||||
| [#8654](pr-8654.md) | Trilium preview import | Security feature (preview `.trilium` archives before import). Architecturally sound. Failing Test development + CodeQL; an unrelated IPC change is bundled. |
|
||||
|
||||
---
|
||||
|
||||
## 6. Cross-PR coordination you'll want to resolve first
|
||||
|
||||
Several PRs conflict or overlap. Decide these before acting on the individual tables:
|
||||
|
||||
1. **axios (#9356 ↔ #9355)** — Merge #9356, close #9355. Consider disabling Dependabot for npm (repo is pnpm + renovate).
|
||||
2. **trilium:// protocol (#9203 ↔ #9153)** — Merge #9203, close #9153. Both use the same branch name from different forks.
|
||||
3. **LLM split PRs (#9338–#9343) vs umbrella (#9316)** — Land the split PRs in order, then close #9316.
|
||||
4. **Auto-execute saved search (#9089 ↔ #7841)** — Pick one. #9089 has cleaner impl; #7841 has maintainer's architectural review already.
|
||||
5. **Search performance (#9034 ↔ #6839)** — Pick one track (in-memory flatTextIndex vs. FTS5). Same author, same problem. Close the loser.
|
||||
6. **Toolbar customization (#8864 ↔ #8959)** — Same feature, possibly same contributor. Consolidate on one branch.
|
||||
7. **Autocomplete migration (#8972) vs autocomplete fix (#9104)** — Coordinate: whichever lands first forces the other to rebase or drop its fix.
|
||||
8. **Share access (#7828 + #7759)** — Sister PRs from x1arch who went silent. Ping first; close if no reply in ~1 week.
|
||||
9. **SSRF protection helper (#9296 ↔ #9188)** — Both introduce outbound-HTTP validation. If both land, extract a shared helper in `@triliumnext/commons` or as a server service.
|
||||
|
||||
---
|
||||
|
||||
## 7. Recommended weekly cadence
|
||||
|
||||
- **Quick wins (today):** merge the 10 Section 1 PRs in one sitting. These are CI-green and low-risk.
|
||||
- **This week:** resolve the 9 cross-PR decisions in Section 6. Each close/merge call unblocks 1–3 PRs downstream.
|
||||
- **Next week:** drive the LLM series (#9338 → #9341 → #9340 → #9339 → #9342 → #9343) since it's the largest coherent feature block and the security review for #9340 is the bottleneck.
|
||||
- **Ongoing:** ping the "Request Changes" authors with specific, small asks. For any PR with no author response in 1+ week after a concrete ask, close with thanks.
|
||||
@@ -1,41 +0,0 @@
|
||||
# PR #6839: feat(search): implement FTS5 w/ sqlite for faster and better searching
|
||||
|
||||
- **Author**: perfectra1n (Jon Fuller)
|
||||
- **Branch**: (feature branch) → `main`
|
||||
- **Status**: Ready (non-draft), DIRTY (merge conflicts)
|
||||
- **Size**: +14,758 -1,557 across ~109 files (XXL)
|
||||
- **Created**: 2025-08 (oldest open PR in batch) | **Updated**: recent
|
||||
- **Labels**: (none listed)
|
||||
- **CI**: mixed
|
||||
|
||||
## Summary
|
||||
Replaces Trilium's JavaScript-based fulltext search with native SQLite FTS5 using trigram tokenization. Includes migration `0234__add_fts5_search.ts`, a new `fts/search_service.ts`, 18 new database indexes, content-snippet generation with highlights, and 16 new spec files. Author reports 50–100x speedups on LIKE-heavy substring queries and proper CJK/Cyrillic/Arabic support.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The direction is strongly aligned with Trilium's needs:
|
||||
- The existing JS search loads all note content into memory and scales poorly beyond ~10k notes.
|
||||
- FTS5 with trigram tokenizer is the standard SQLite solution for this.
|
||||
- Migration-based rollout (`0234__add_fts5_search.ts`) matches the repo's migration convention under `apps/server/src/migrations/`.
|
||||
- Protected notes are explicitly excluded from the FTS index and searched separately via decryption — correct.
|
||||
|
||||
**However, this PR is superseded by #9034** from the same author ("feat(search): try to improve search performance through some creative mechanisms", created 2026-03-12, +2017 / -108), which is a much smaller and more recent iteration of the same performance work. PR #9034 is active (updated 2026-04-03), while this PR has been sitting with conflicts since August 2025.
|
||||
|
||||
### Code Quality & Concerns
|
||||
Observable concerns from the diff sample:
|
||||
- **Enormous size (+14,758 / 109 files)**: Impractical to review holistically. Even split by concern (migration, FTS service, expression integration, tests) it's a multi-day review.
|
||||
- **Diff includes unrelated date/timezone fix** in `apps/client/src/widgets/collections/calendar/utils.ts` — pure scope creep into the calendar widget.
|
||||
- **`apps/server/spec/db/document.db` binary file changed** — binary test fixture changes should be justified (ideally regenerated via a deterministic script committed alongside).
|
||||
- **Test additions are extensive** (etapi search spec grows substantially) which is good, but the diff includes increased timeouts ("30000"ms) which often indicates flakiness hiding behind slow init paths.
|
||||
- **Schema migration**: Creating FTS virtual tables + triggers + 18 indexes is a heavyweight migration — needs a rollback path and careful first-run performance consideration for users with huge databases.
|
||||
- **Merge conflicts against main** after ~8 months open — the migration number (0234) may now collide with newer migrations.
|
||||
- The author's own table notes "Database Migration: **Medium** risk" — this is the biggest area to validate.
|
||||
|
||||
### Discussion Highlights
|
||||
(Discussion truncated due to PR size; key observations from PR metadata.)
|
||||
- Same author opened #9034 later with a different approach and smaller surface area — strong signal that the author themselves moved on.
|
||||
- No recent maintainer approval on this PR.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE as superseded by #9034**: This PR is 8 months old, 14.7k lines, has merge conflicts against a main that has moved significantly (new migrations would collide), mixes unrelated fixes (calendar timezone), and the same author has since opened a newer, smaller, and actively-maintained search-performance PR (#9034). Close with an explicit reference to #9034 and a thank-you; if any isolated components (e.g., specific test fixtures, particular indexes, the protected-notes exclusion logic) are worth preserving, ask the author to cherry-pick them into #9034 or follow-up PRs. Keeping this open just blocks review bandwidth.
|
||||
@@ -1,43 +0,0 @@
|
||||
# PR #7222: Draft: fix(search-ranking): add attributes and labels to search ranking
|
||||
|
||||
- **Author**: werererer
|
||||
- **Branch**: `search-ranking-improved` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +626 -213 across 9 files
|
||||
- **Created**: 2025-10-08 | **Updated**: 2025-11-23
|
||||
- **Labels**: merge-conflicts
|
||||
- **CI**: pass (last run 2025-10-17)
|
||||
|
||||
## Summary
|
||||
Rewrites `apps/server/src/services/search/search_result.ts` to rework the ranking function: labels are now considered (key and value separately, with tunable weights), note ID is considered, and the fuzzy matching path is reworked using trigram Jaccard prefilter + `fuzzysort`. Also excludes archived notes from ranking and caches normalized text / trigrams on `BNote` / `BAttribute`.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The search ranking code (`apps/server/src/services/search/search_result.ts`) is a legitimate area for improvement, and the author's observation that label keys/values are currently not factored into ranking (called a "bug prob") is plausible. Partially addresses:
|
||||
- #7085 (remove archived notes from ranking) — claimed solved
|
||||
- #6808 — claimed partially solved
|
||||
|
||||
However, the author themselves has clearly lost momentum on this PR. Their most recent comment (2025-11-23) says:
|
||||
|
||||
> "I am still quite confused tbh, since it is kinda an open question in research how to scale up search reliably ... I will have this open for a bit more, and will work on equivalence classes instead, till a clearer pattern emerges."
|
||||
|
||||
This is effectively the author announcing they no longer intend to finish the PR as-is and are instead pursuing a different research direction (folksonomy equivalence classes).
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **In-place monkey-patching of `BNote` / `BAttribute`**: adds `_normalizedTitle`, `_titleTrigrams`, `_normalizedKey`, `_normalizedValue` as public-ish underscored fields on the entity classes. Cache invalidation is hooked into `invalidateThisCache()` on BNote, but attribute invalidation is tied to `beforeSaving` only — stale caches are possible if an attribute is mutated without resaving.
|
||||
- **Changes `notePath` semantics**: `beccaService.getNoteTitleForPath(notePathArray) || ""` defaults to empty string instead of the previous behaviour — affects downstream display.
|
||||
- **New dependency on `fuzzysort`** (imported but the surrounding diff suggests use of ad-hoc trigram Jaccard anyway). Needs package.json review.
|
||||
- **Magic thresholds** (0.25 trigram Jaccard gate) with no justification or tests.
|
||||
- **Conflicts with PR #6839 / #9034** (FTS5 search) by the same-area author perfectra1n — both change `search_result.ts` and the fuzzy path.
|
||||
- **No tests** despite significant ranking-behaviour changes; author acknowledges "The search result order will differ due to new rankings."
|
||||
- Code formatting has unusual indentation (`else if` cascades deeply indented) making the ranking logic harder to audit.
|
||||
- Author's own TODO list includes "fine tune it" and "tweak it" — explicitly unfinished.
|
||||
|
||||
### Discussion Highlights
|
||||
- No maintainer review.
|
||||
- Author has stopped engaging with this PR and is drafting a different approach based on equivalence classes (issue #1045).
|
||||
- Author noted dissociation/conflicts with #6839 (the FTS5 PR).
|
||||
|
||||
## Recommendation
|
||||
**CLOSE**: The author has explicitly indicated (2025-11-23) that they are abandoning this approach in favor of an equivalence-classes research direction. The PR has been in draft for 6+ months, has merge conflicts, no tests, no maintainer review, and conflicts with the active FTS5 work in #6839/#9034. Close with a thank-you and an invitation to open a fresh PR when the equivalence-class approach has crystallized. Any specific small wins (e.g., "include label key/value in ranking") can be cherry-picked as a focused follow-up.
|
||||
@@ -1,38 +0,0 @@
|
||||
# PR #7287: feat(search): add create into inbox to search
|
||||
|
||||
- **Author**: werererer
|
||||
- **Branch**: `search-ranking-improved` (misleading name — actually note-creation UX work) → `main`
|
||||
- **Status**: Ready (non-draft), DIRTY (merge conflicts)
|
||||
- **Size**: +877 -? across 37 files
|
||||
- **Created**: (September 2025) | **Updated**: recent
|
||||
- **Labels**: merge-conflicts
|
||||
- **CI**: had failures per author comment ("can't get every checks to pass")
|
||||
|
||||
## Summary
|
||||
Refactors note creation across the client. Replaces scattered `createNote` call sites with a unified `createNoteIntoPath` / `createNoteIntoInbox` API, introduces a `CreateMode`/`MentionAction` enum, and adds "create into inbox" as a suggestion action in the autocomplete / CKEditor mention dropdown. Touches 37 files — this is a broad refactor, not a narrow feature.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The underlying goal is sound: the `note_create` service currently has multiple entry points scattered across `entrypoints.ts`, `main_tree_executors.ts`, `tree_context_menu.ts`, `root_command_executor.ts`, etc., and unifying them would reduce duplication. Adding a "create into inbox" shortcut is reasonable (issue #6817 is the motivation).
|
||||
|
||||
Concerns about fit:
|
||||
- PR also introduces a `createAiChatCommand` in `root_command_executor.ts` — that belongs in the LLM chat feature area, not a search/note-create refactor.
|
||||
- The suggestion model changes (`SuggestionAction`, `SuggestionMode` enums, `CreateNoteAction` re-exported from `@triliumnext/commons`) cross client/server and CKEditor boundaries — correct per CLAUDE.md shared-types policy, but increases the coordination surface.
|
||||
- The rename `getNoteIdFromUrl` → `getNoteIdFromLink` ripples through many unrelated files (`tab_manager.ts`, `hoisted_note.ts`, `link.ts`, `content_renderer_text.ts`) — pure churn for this PR's stated goal.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Very large (+877 / 37 files)** for what is described in the title. The title advertises "add create into inbox to search" but the diff is a sweeping refactor of note creation, a rename of a core utility function, and an AI chat command. This violates the "keep PRs minimal" guidance Elian has given other contributors.
|
||||
- **Author admits "can't get every checks to pass"** — CI is red, and the author's own comment acknowledges not fully debugging. A failing PR that has been sitting open for ~7 months is a strong signal for closure or rework.
|
||||
- **Duplicated enum definitions**: `SuggestionAction` and `CreateNoteAction` are deliberately kept as parallel enums that the author says "intentionally mirror ... 1:1". This is a code smell — single source of truth would be preferable.
|
||||
- **New `ExtendedMentionFeedObjectItem` type** just to bolt Trilium-specific fields onto `MentionFeedObjectItem` — should probably be a first-class type in `@triliumnext/commons` given it's shared.
|
||||
- **Merge conflicts**: With 37 touched files this will be hard to rebase, and likely needs to be done again because of overlap with other search/note-create work.
|
||||
- **Spanning multiple feature areas** (note creation, autocomplete, CKEditor mentions, AI chat, search) makes review impractical.
|
||||
|
||||
### Discussion Highlights
|
||||
- Author comment: "I can't get every checks to pass, I don't think this PR changes are at fault base[...]"
|
||||
- No maintainer review has been posted.
|
||||
- Sister PR #7222 from same author is also in draft with conflicts and also wanders into research territory.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE (with an invitation to re-submit split)**: The goal is worthwhile but the PR is too large, has failing CI, misleading title/scope, has been open for ~7 months with no maintainer engagement, and now has merge conflicts against a main that has moved significantly. Rather than ask for another rebase cycle, recommend closing and asking the author to re-open as a series of smaller PRs: (1) pure `getNoteIdFromUrl` → `getNoteIdFromLink` rename, (2) note-create API unification with no autocomplete changes, (3) "create into inbox" suggestion action, (4) AI chat command (if it belongs to a different area). Each of these is reviewable independently.
|
||||
@@ -1,36 +0,0 @@
|
||||
# PR #7759: [7641] Update share path to {parent_id}/{note_id}
|
||||
|
||||
- **Author**: x1arch
|
||||
- **Branch**: `fix/7641` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +230 -61 across 8 files
|
||||
- **Created**: 2025-11-16 | **Updated**: 2025-12-28
|
||||
- **Labels**: size:L, merge-conflicts
|
||||
- **CI**: pass (last run)
|
||||
|
||||
## Summary
|
||||
Changes the share URL scheme from `/share/{noteId}` to `/share/{parentShareId}/{noteId}` (issue #7641) so that notes with multiple parents in the shared subtree resolve to the correct share root. Old `/share/{noteId}` URLs are 302-redirected to the first-parent form. Also includes `#shareExclude` and is layered on top of PR #7828 (so carries all those same extra labels/content-access changes).
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Solves a genuine issue: when the same note is referenced under multiple shared parents, the current share renderer arbitrarily picks `parentBranches[0]`, so the breadcrumb/tree context is wrong. Scoping the URL with a parent ID is a standard solution. Elian called the idea "good" in his review.
|
||||
|
||||
However, changing the share URL format is a **public-facing breaking change** — existing deep links, bookmarks, SEO indexing, reverse-proxy rewrite rules (nginx/caddy/traefik), and embedded `<img>`/`<iframe>` references from third parties all currently point at `/share/{noteId}`. A 302 redirect helps casual use, but not everything (strict CORS, cached resources, rewrite rules that match exact paths).
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Still superset of #7828**: PR is explicitly "based on #7828" and includes all the `ContentAccessor` code, cookie handling, and multiple unrelated template labels. Elian asked to split this from #7828 in his review.
|
||||
- **Only two-level path**: The new route is `/share/:parentShareId/:shareId` — only one level of parent. Elian correctly notes this doesn't solve deeper hierarchies (e.g. `demo/section/first_note` vs `demo/first_note`), and suggests going to full note-path URLs like the Trilium docs site (`/user-guide/collections/kanban-board`). The author would need to extend the routing to cover arbitrary depth.
|
||||
- **Relative path rewriting is fragile**: All asset/API URLs in `content_renderer.ts` got an extra `../` prefix (e.g. `assets/styles.css` → `../assets/styles.css`). This only works because the path gained exactly one segment; it will break again if the design moves to full nested paths.
|
||||
- **Redirect on legacy route loses query strings**: `res.redirect(`${parent?.note?.noteId}/${shareId}`)` — no query-string preservation, no `301` (permanent redirect, which would matter for SEO), and no handling of the case when `parent` is undefined.
|
||||
- **No tests** for the route change or redirect.
|
||||
- The new `getParentId()` method and public `parentId` field on `SNote` are a side-channel used only to pass data from the route to `getSharedSubTreeRoot` — would be cleaner to pass parentId as a function argument.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini bot flagged broken relative-path construction.
|
||||
- **Elian (2025-11-20)**: asked to split the PR and raised concern about breakage of existing reverse-proxy rewrite rules. Also suggested using query parameters as a non-breaking alternative.
|
||||
- **Author**: declined query params ("it's looking ugly, like not from here") but agreed to split the PR and re-based on #7828.
|
||||
- **Elian (2025-12-08, CHANGES_REQUESTED)**: "The idea is good, but needs refinement. And #7828 needs to be removed from it as well ... doesn't seem to cover the case if you have two branches inside the same share tree ... theoretically fixed by further expanding the change in routes to contain the full note path ... within the scope of this PR to make the change because we are not going to change the sharing path twice."
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The core idea is endorsed, but this PR needs to (1) be rebased off #7828 so it contains only the routing change, (2) extend to full note-path URLs rather than a single parent level, (3) use a `301` permanent redirect and preserve query strings on the legacy `/share/{noteId}` form, and (4) include tests for the new route and redirect. Author has been silent since 2025-12-08 — worth one ping; if no response, close with an invitation to reopen once the above is addressed. Do **not** merge as-is because the path change is not idempotent (changing it again later would be a second breaking change).
|
||||
@@ -1,41 +0,0 @@
|
||||
# PR #7828: Fix share access to attachments for notes protected by login:password
|
||||
|
||||
- **Author**: x1arch
|
||||
- **Branch**: `share/access` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +201 -49 across 8 files
|
||||
- **Created**: 2025-11-21 | **Updated**: 2025-12-28
|
||||
- **Labels**: size:L, merge-conflicts
|
||||
- **CI**: pass (last run)
|
||||
|
||||
## Summary
|
||||
Adds cookie-based and query-parameter-based authorization for content assets (images, attachments, CSS, JS) on password-protected shared notes, since browsers do not forward `Authorization: Basic` headers for sub-resources. Also bundles in several unrelated share template enhancements (left-panel hiding, prev/next hiding, `#shareExclude`).
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Addresses a real usability gap in the share feature (`apps/server/src/share/`): assets embedded in credential-protected notes fail to load because browsers do not re-send HTTP Basic credentials for sub-requests. The fix is scoped to `shaca` entities and the share renderer/routes, which is the right place. The author confirmed the underlying chromium-side restriction in discussion.
|
||||
|
||||
The new labels (`#shareExclude`, `#shareTemplateNoPrevNext`, `#shareTemplateNoLeftPanel`, `#shareContentAccess`, `#shareAccessTokenTimeout`) align with the existing `#share*` attribute convention and are documented in `docs/User Guide/User Guide/Advanced Usage/Sharing.md`. However, as Elian pointed out in review, only 2 of the 5 labels are actually related to the attachment-access problem.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Scope creep**: PR mixes three concerns — (1) content access auth, (2) template layout toggles, (3) `#shareExclude`. Elian explicitly asked for minimal PRs.
|
||||
- **`ContentAccessor` (`apps/server/src/share/shaca/entities/content_accessor.ts`)**:
|
||||
- Uses AES-256-CBC to wrap a random token; the benefit of the encryption wrapper over just storing/comparing a raw random token is unclear — the key lives in-memory next to the plaintext token, so the cipher adds complexity without a threat model it defends against.
|
||||
- Private-intent methods use `__foo` naming instead of TypeScript `private`.
|
||||
- Missing trailing newline.
|
||||
- `type: string` should be a string literal union (`"cookie" | "query" | "basic"`).
|
||||
- `update()` regenerates the AES key every rotation, which invalidates all still-live tokens silently.
|
||||
- **`routes.ts` cookie handling**: The `trilium.cat` cookie is set with `httpOnly: true` but no `secure` / `sameSite` flags; for a share endpoint that may run behind HTTPS this is worth hardening.
|
||||
- **Token passed in query string**: Query-param tokens appear in web server access logs and browser history — the PR mitigates with short expiry, but should be called out.
|
||||
- **`addContentAccessQuery` helper**: The `secondEl` boolean flag (meaning "there's already a `?` in the URL") is fragile. A helper that takes the existing URL and appends `?` or `&` correctly would be safer.
|
||||
- The EJS template replacement `content.replace(/src="(api\/[^"]+)"/g, ...)` is a post-hoc regex rewrite over rendered HTML — brittle vs doing the substitution at render time.
|
||||
- Non-trivial REAMDE/`.gitignore` churn unrelated to the fix.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini bot flagged a type-safety issue, potential token leak, maintainability issues.
|
||||
- **Elian (2025-12-08, CHANGES_REQUESTED)**: "I'm quite fine with the implementation, apart from the requested changes. However, in the future please take the time to discuss first ... keep the PRs minimal ... in this PR there's also 5 different new labels that were introduced, with only 2 of them actually relating to the work at hand."
|
||||
- Author confirmed the need for tokens since `Authorization` header and `user:pass@` URL forms are not honored by browsers for images/assets.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The underlying problem is real and the approach is reasonable, but the PR needs to be split into focused sub-PRs (auth token mechanism vs. new template labels vs. `#shareExclude`), the `ContentAccessor` crypto simplified or justified with a threat model, and the cookie flags hardened. Author has been silent since 2025-12-08 — worth pinging; if no response in a few more weeks, consider closing and inviting them to reopen a smaller scoped version.
|
||||
@@ -1,41 +0,0 @@
|
||||
# PR #7841: Auto execute saved search note
|
||||
|
||||
- **Author**: contributor
|
||||
- **Branch**: `auto-execute-search` → `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +42 -2 across 6 files
|
||||
- **Created**: 2025-11-22 | **Updated**: 2025-12-15
|
||||
- **Labels**: size:M, merge-conflicts
|
||||
- **CI**: mostly pass; "Build and Deploy Documentation" FAILURE (likely docs pipeline)
|
||||
|
||||
## Summary
|
||||
Adds an `#autoExecuteSearch` label that, when present on a saved search note, auto-runs the search and switches to the Collection Properties tab as soon as the note is opened. Uses an in-memory guard (`lastAutoExecutedSearchNoteId`) to avoid re-executing the same note back-to-back. An earlier version used `sessionStorage` but was refactored based on review feedback.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The intent — treat a saved search note as a dynamic collection that refreshes on click — is useful and fits the Collections model. The change is very small:
|
||||
- `SearchDefinitionTab.tsx`: adds a `useEffect(..., [note])` hook that reads the `autoExecuteSearch` label, calls `refreshResults()`, and triggers `toggleRibbonTabBookProperties`.
|
||||
- `attribute_detail.ts` + `translation.json`: new `autoExecuteSearch` entry in `ATTR_HELP`.
|
||||
- `attribute_names.ts` (commons): adds the label name.
|
||||
- `Labels.html` / `Labels.md` docs: documented.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Wrong architectural layer**: Maintainer @eliandoran left direct feedback: the logic should NOT live in `SearchDefinitionTab.tsx` (a ribbon tab which is user configuration UI). It should be in the search-result rendering layer — pointing to `search_result.tsx` or the `root_command_executor.ts`/`searchNotesCommand` path which already does similar work for the launch-bar Search button. The PR as-submitted puts execution in the tab, which means the auto-execute only fires if that specific tab is rendered.
|
||||
- **Review conclusion was CHANGES_REQUESTED**, and the author did not follow up on the architectural relocation — they responded asking "what are the advantages of extracting this?" but no subsequent push addressed the core concern.
|
||||
- **Module-level singleton guard**: `executionState` is an IIFE module singleton holding `lastAutoExecutedSearchNoteId`. This works but is fragile — opening the same search note in two tabs/windows, or closing+reopening, may produce surprising behavior. The session-storage approach was actually better for multi-tab scenarios.
|
||||
- **Missing useEffect dependency**: The effect closes over `refreshResults`, `parentComponent`, `noteContext`, `executionState` but only depends on `[note]`. Gemini flagged this.
|
||||
- **User-visible interaction**: @rom1dep raised a meaningful UX concern — a "refresh this search on click" button already effectively exists (the refresh button on the search note itself, and the Search button under Search Parameters). Why introduce a new opt-in attribute that duplicates these? The author's answer — one-click browsing of saved search hierarchies — is valid but weak. The question of "do we really need more than that?" didn't get a clean answer.
|
||||
- **Potential supersession by #9089**: Per task notes, PR #9089 may supersede this one. Worth confirming before acting.
|
||||
- **Bug reports during review**: The conversation surfaced unrelated bugs (duplicate-list rendering with `#viewType(inheritable)=list`, collections showing as empty). Maintainer fixed those in main. Not blockers for this PR but show the author was actively testing.
|
||||
- **Merge conflicts** and the docs build is failing.
|
||||
- Stale since 2025-12-15 — nearly 4 months.
|
||||
|
||||
### Discussion Highlights
|
||||
- Maintainer @eliandoran explicitly CHANGES_REQUESTED with two clear asks: move the logic out of the ribbon tab, and update documentation.
|
||||
- Docs were added (Labels.html/Labels.md) but the architectural relocation was not done.
|
||||
- @rom1dep questioned whether the feature is needed at all given existing refresh mechanisms.
|
||||
- Author's last message was "added docs. ready for review" followed by the UX debate with @rom1dep that did not resolve.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE (unless superseded)**: First confirm whether PR #9089 actually supersedes this one. If yes, close this one with a pointer to #9089. If no, the maintainer's CHANGES_REQUESTED was not addressed, the architectural placement is wrong, the UX rationale is unclear, the branch is 4+ months stale with conflicts and a failing docs build, and the core question (do we even need this vs. existing refresh mechanisms) was not resolved. Either close as stale or explicitly ask the author to rebase and relocate the logic to `search_result.tsx`/`root_command_executor.ts` per @eliandoran's guidance, with a clear deadline before auto-closing.
|
||||
@@ -1,44 +0,0 @@
|
||||
# PR #8202: Feat: Record recently opened windows
|
||||
|
||||
- **Author**: SiriusXT
|
||||
- **Branch**: `feat/extra-window` → `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +295 -46 across 28 files
|
||||
- **Created**: 2025-12-29 | **Updated**: 2026-01-30
|
||||
- **Labels**: size:L, merge-conflicts
|
||||
- **CI**: mostly pass; "E2E tests on linux-arm64" FAILURE on last run
|
||||
|
||||
## Summary
|
||||
Adds window-id tracking so each Trilium window (main + extras) persists its own tab/context state across refreshes and app restarts. On desktop, recently-closed windows can be restored from the system tray (up to 10 tracked windows). Closes #3053. Includes a migration (`0234__migrate_open_note_contexts_format.ts`) to convert the existing single-window `openNoteContexts` option into the new windowed structure.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Solid feature and a long-requested enhancement. The implementation respects several Trilium conventions:
|
||||
- Client/desktop IPC uses the correct `ipcRenderer.send` / `ipcMain.on` pattern for the `create-extra-window` and `initial-render-complete` channels.
|
||||
- Server-side translations land in `apps/server/src/assets/translations/en/server.json` under tray keys, not in client `translation.json` — correct per CLAUDE.md.
|
||||
- Migration file at `apps/server/src/migrations/0234__migrate_open_note_contexts_format.ts` with `cls.init()` wrap — correct.
|
||||
- New types for `WindowState` and refactored `NoteContextState` in `tab_manager.ts`.
|
||||
- Adds tray images at multiple DPIs (1x, 1.25x, 1.5x, 2x) for both dark and light (inverted) variants — proper platform asset discipline.
|
||||
- `windowId` is propagated via `window.glob.windowId` and `CustomGlobals`, matching the existing pattern for `isMainWindow`.
|
||||
- The E2E test changes (`text.spec.ts`, `app.ts`) look like test stability improvements to avoid brittle exact-count assertions — fine as drive-bys.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Magic number `"main"` as windowId**: The code treats the string `"main"` as special (never evicted from the LRU). Better as a named constant like `MAIN_WINDOW_ID`.
|
||||
- **LRU eviction duplication**: The eviction logic is implemented inline inside `loadTabs()` — should be a helper. Gemini flagged a related "duplicated block" concern.
|
||||
- **`options.save` as new pattern**: `tab_manager.ts` calls `options.save(...)` — need to check that option exists and behaves the same as `server.put("options", ...)`. This is a behavioral change from the prior `server.put` call.
|
||||
- **Randomness**: `utils.randomString(4)` gives 4 chars — for window IDs that's fine (low collision risk, not security-sensitive). Gemini suggested `crypto.randomUUID()`, but per CLAUDE.md that's explicitly forbidden (not available in non-HTTPS contexts). Author's choice of `randomString` is correct.
|
||||
- **`normalizeOpenNoteContexts` in desktop main.ts**: Handles the crash-recovery case where a window died without setting `closedAt`. Sensible. But it dynamically imports `cls.js` — that's unusual, should be a top-level import unless there's a circular dependency reason.
|
||||
- **Potential data loss on close**: Gemini flagged an event-handler issue; the author has responded to multiple review rounds but the branch still has unresolved comments.
|
||||
- **`froca_updater.ts` change**: Removes the special-case that skipped `openNoteContexts` option changes ("only noise"). This means window-state updates will now trigger frontend option-reload events — could create a sync loop between windows. Needs careful thought: if window A saves its state, does window B reload and overwrite window A's state? The code tries to avoid this by only rewriting the current window's entry, but this deserves testing.
|
||||
- **`/gemini review` spam**: The author issued `/gemini review` at least 5 times in quick succession, suggesting iterative experimentation. Not a code issue but worth noting the Gemini feedback was noisy.
|
||||
- **Merge conflicts** and E2E arm64 failure on the last CI run.
|
||||
- Only 295 additions for 28 files touched is a good sign — surgical rather than sprawling.
|
||||
|
||||
### Discussion Highlights
|
||||
- @rom1dep asked about reconciliation with the larger "Sessions" concept from #7477. Author answered: desktop and web maintain independent tab states, with recovery via tray (desktop) or browser tab restore (web). Reasonable scope clarification.
|
||||
- Multiple Gemini code reviews addressed iteratively. No human-maintainer code review.
|
||||
- Last activity 2026-01-30, now roughly 2.5 months stale.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: Feature is valuable and mostly well-implemented, but needs: (1) rebase on main to resolve conflicts, (2) investigate the potential sync loop between windows caused by removing the `openNoteContexts` filter in `froca_updater.ts`, (3) extract the LRU eviction into a helper, (4) replace the magic `"main"` string with a constant, (5) confirm the arm64 E2E failure, and (6) a maintainer pass on the window lifecycle edge cases (abrupt close, concurrent writes across windows). If the author is still active, these are tractable.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #8525: fix: subtree expand only first level + depth limit
|
||||
|
||||
- **Author**: Nriver
|
||||
- **Branch**: `fix/subtree-expand-only-first-level` → `main`
|
||||
- **Status**: Ready, UNSTABLE (one CI job failed)
|
||||
- **Size**: +49 -14 across 1 file
|
||||
- **Created**: 2026-01-27 | **Updated**: 2026-01-27
|
||||
- **Labels**: size:M
|
||||
- **CI**: mostly pass; "E2E tests on linux-arm64" FAILURE
|
||||
|
||||
## Summary
|
||||
Rewrites `setExpandedForSubtree` in `apps/server/src/routes/api/branches.ts` to fix a correctness bug (expansion only recursed one level) and adds a depth limit of 4 when expanding (collapse remains unlimited). The recursive CTE now also only touches branches whose current `isExpanded` state differs from the target, reducing unnecessary writes.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Very narrow bug fix, entirely in one existing endpoint. It cleans up a real correctness issue:
|
||||
- Old code used `UNION` with `branches.isExpanded = 1` hard-coded in the recursive term, which meant that for the expand case (target = 1) the recursion stopped at any already-collapsed node — that's the "only first level" bug the PR title references.
|
||||
- New code parameterizes the current-state filter as `currentExpandedWeWantToChange = 1 - expanded`, correctly traversing only nodes that need a state flip.
|
||||
- Adds depth limit when expanding (`maxDepth = 4`) to prevent performance issues on very deep trees, while keeping collapse unlimited (`maxDepth = 9999`). Reasonable heuristic.
|
||||
- Adds validation (`[0, 1].includes(expanded)`) which is good hygiene.
|
||||
- Changes from `UNION` to `UNION ALL` — safe because the depth column now makes rows unique per traversal path.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Return type inconsistency**: Gemini flagged this — the function now sometimes returns `{ branchIds: [], updatedCount: 0, error: "expanded must be 0 or 1" }` for validation failure, sometimes `{ branchIds: [], updatedCount: 0, maxDepthApplied }` for empty result, and otherwise falls through to the original return path. The shape varies, and `updatedCount` isn't actually computed in the fallthrough path. Should be normalized or (cleaner) validation should `throw new ValidationError`.
|
||||
- **Hard-coded depth limit**: 4 is a magic number that isn't exposed as a config value. For users with deep workspace trees this may be surprising — expanding a subtree only goes 4 levels down now. Should at minimum be a named constant at the top of the file, and arguably should be user-configurable. The Gemini review did not catch this but it's a UX regression risk.
|
||||
- **Pre-existing `sql.executeMany` call**: the old line `sql.executeMany('UPDATE branches SET isExpanded = ${expanded} WHERE branchId IN (???)', branchIds);` uses string interpolation of `expanded` directly into the SQL string. Since `expanded` is now validated to be 0|1, this is safe in practice, but for defense-in-depth a parameterized query would be better.
|
||||
- **Depth 0 anchor edge case**: The recursive CTE anchor is `depth = 0` (the starting branch itself). If the starting branch is not in the target state, it will be included in the update. Is that the intent? When you click "expand all under X", should X itself change state? Probably yes, but worth confirming.
|
||||
- **E2E arm64 failure**: Not clearly related to this PR but needs checking before merge — if it's flaky, a rerun should resolve it.
|
||||
- **No new tests**: A change to a SQL traversal this subtle really should have a test. The `branches` API is not heavily unit-tested but there's room for at least a route-level test of the expand/collapse behavior.
|
||||
|
||||
### Discussion Highlights
|
||||
- Only Gemini code review, no human reviews. PR was opened and not touched after the initial Gemini review (Jan 27).
|
||||
- No author follow-up, no maintainer engagement.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The fix itself addresses a real bug and the SQL rewrite looks correct, but before merge: (1) normalize the return type / use `throw new ValidationError` for bad input, (2) extract the `4` depth limit into a named constant and document it, (3) parameterize the `UPDATE` statement, (4) add at least one integration test for the fixed expand/collapse behavior, and (5) confirm the arm64 E2E failure is unrelated by re-running. Small PR, small asks — should be quick to turn around if the author is still engaged.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #8640: Implement relation name wildcard feature
|
||||
|
||||
- **Author**: misch334
|
||||
- **Branch**: `feat_rel_wildcard` → `main`
|
||||
- **Status**: Ready, BLOCKED (awaiting review)
|
||||
- **Size**: +96 -1 across 5 files
|
||||
- **Created**: 2026-02-06 | **Updated**: 2026-02-23
|
||||
- **Labels**: size:M
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds a wildcard `~?` search operator that matches any relation (including internal links) rather than requiring users to spell out the specific relation name. Example: `~?.title = Tolkien` matches any note linked via any relation to a note titled "Tolkien".
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Strong fit. The pain point is real: Trilium distinguishes between implicit `internalLink` relations (from content references) and explicit relations, and users are forced to guess which type a given link uses. A wildcard reduces friction substantially. The PR makes the minimal right-sized change:
|
||||
- `apps/server/src/services/search/expressions/relation_where.ts`: adds `RELATION_NAME_WILDCARD = "?"` constant (chosen specifically to avoid lexer ambiguity with valid relation-name characters), and branches between `becca.findAttributes("relation", name)` and `Object.values(becca.attributes)` when the wildcard is used.
|
||||
- `relation_where.spec.ts`: new unit test with two cases — wildcard returns both internal links and explicit relations; specific name returns only the matching one. Mocks becca properly.
|
||||
- `SearchDefinitionOptions.tsx`: adds examples in the search help popover.
|
||||
- `translation.json`: new `search_string.relation_xyz` and `search_string.relation_wildcard` keys in English only (correct per CLAUDE.md).
|
||||
- `docs/User Guide/.../Search.md`: adds examples.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Performance**: For the wildcard path, the code iterates `Object.values(becca.attributes)` which includes *all* attributes in the entire becca cache (labels and relations both). The filter `attr.targetNote` will exclude non-relation entries but only after the full scan. On a large database (Gemini review noted 10k notes benchmark was OK, but attribute count can be much higher than note count), this is O(total_attributes) per query rather than O(relations). A filter like `attr.type === "relation"` before the `hasNoteId`/`targetNote` checks would help, and a `becca.findAttributes` variant that returns all relations would be even better.
|
||||
- **Test coverage**: Only two tests, both happy-path. Would benefit from a test against the larger `search` integration suite to confirm `~?.ancestors.title = X` chains work correctly through the expression tree.
|
||||
- **Syntax choice**: `?` is a reasonable character — not valid in relation names per the Trilium lexer rules, and the author explicitly documents the reasoning in a comment. Good.
|
||||
- **Scope**: Change is narrow, backward-compatible, and well-contained.
|
||||
- **Merge state BLOCKED**: `mergeable: MERGEABLE` but `mergeStateStatus: BLOCKED` — likely due to missing required reviews, not a conflict. No maintainer has reviewed yet.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini code review flagged the performance concern.
|
||||
- misch334 (the author) left three review comments (including self-responses) but no maintainer has commented.
|
||||
- No human review decision yet.
|
||||
|
||||
## Recommendation
|
||||
**MERGE (after minor changes)**: This is a clean, well-motivated, well-tested, narrow change that directly improves a long-standing search pain point. Recommend the author address the performance concern by adding a type filter (`attr.type === "relation"`) inside the wildcard branch before the `hasNoteId`/`targetNote` checks — or even better, promote it to a Becca helper like `becca.findAllRelations()`. Once that minor change is in and a maintainer looks at it, this is ready to merge.
|
||||
@@ -1,40 +0,0 @@
|
||||
# PR #8654: Trilium preview import
|
||||
|
||||
- **Author**: eliandoran (maintainer)
|
||||
- **Branch**: `feature/trilium_extension` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +1035 -164 across 22 files
|
||||
- **Created**: 2026-02-07 | **Updated**: 2026-02-15
|
||||
- **Labels**: merge-conflicts
|
||||
- **CI**: mostly pass, one "Test development" FAILURE + CodeQL failure (likely from the failing test job)
|
||||
|
||||
## Summary
|
||||
Maintainer's own work-in-progress: adds an import preview dialog for `.trilium` archives that scans the zip for dangerous attributes (client/server scripts, code execution, icon packs, web views) before the user commits to an import. Introduces a new `/api/notes/:parentNoteId/preview-import` + `/api/notes/:parentNoteId/execute-import` two-step flow and a countdown-gated "Import safely (recommended)" vs "Trust and enable active content" choice.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
This is a genuinely valuable security feature — Trilium's .trilium archives can carry scripts/widgets with full code-execution capability, and the current import flow gives no preview. The architecture is sound:
|
||||
- Server-side: `zip_preview.ts` walks `NoteMetaFile` entries recursively, cross-referencing `builtin_attributes.ts` (which is extended to tag entries with a `dangerCategory`). Preview and execute are two separate endpoints, with an `importStore` holding the uploaded file path keyed by a random ID between the two calls.
|
||||
- Client-side: a new `ImportPreviewDialog.tsx` with per-file stats (notes/attributes/attachments counts), category badges, and a timeout before the unsafe-import button becomes active.
|
||||
- Shared types (`ImportPreviewResponse`, `DangerousAttributeCategory`) are correctly placed in `@triliumnext/commons/src/lib/server_api.ts`.
|
||||
- Extracts a reusable `Card` component from `help.tsx` into `widgets/react/Card.tsx` — good refactor.
|
||||
- Adds a `zip_preview.spec.ts` for the server-side scanner — good.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Status per instructions**: Maintainer's own WIP. Do not recommend closing.
|
||||
- **Failing CI**: "Test development" workflow failed on the last run. CodeQL also failure. Before this can merge, those need investigating.
|
||||
- **Temp file / importStore lifecycle**: The `importStore` pattern (upload → preview → execute OR delete) is correct but raises a resource-leak concern if the user neither executes nor cancels (e.g. closes the tab). The PR has a cancel endpoint (`DELETE notes/preview-import/:id`) which helps, but there should also be a TTL-based cleanup on the server. Worth a follow-up.
|
||||
- **Middleware fork**: `createImportUploadMiddleware` / `importMiddlewareWithErrorHandling` introduces a second multer pathway specifically for preview uploads. Makes sense but means two places to keep in sync when changing upload limits.
|
||||
- **Translation keys** are present and use `_one`/`_other` plural forms correctly.
|
||||
- **Dangerous categories** (`DANGEROUS_CATEGORIES_MAPPINGS`, `SEVERITY_ORDER`) are defined client-side; should ideally be colocated with the server-side `dangerCategory` definitions to avoid drift, possibly in commons. Minor.
|
||||
- The `app_context.ts` change adds an `initial-render-complete` IPC to electron — looks unrelated to the import feature and probably belongs in a separate PR.
|
||||
- `executeUploadWithPreview` fires server.post calls in a `for` loop without awaiting them — works but should probably be explicit about it.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini code review flagged parallelization, async error handling, and resource leaks.
|
||||
- GitHub Advanced Security commented (likely the CodeQL flag).
|
||||
- No other human reviews — it's the maintainer's own branch.
|
||||
|
||||
## Recommendation
|
||||
**KEEP AS WIP**: This is the repository maintainer's own draft. The feature is a strong addition (security-relevant import preview), the architecture is sound, and it should continue to be iterated on by @eliandoran. Remaining work: resolve merge conflicts with main, fix the failing "Test development" job, address the CodeQL finding, separate the `initial-render-complete` IPC into its own PR, and add TTL cleanup for orphaned `importStore` entries. Not a close/merge decision — just acknowledge as WIP.
|
||||
@@ -1,32 +0,0 @@
|
||||
# PR #8693: Replace Leaflet with MapLibre GL for geo map collection
|
||||
|
||||
- **Author**: app/copilot-swe-agent (bot)
|
||||
- **Branch**: `copilot/switch-to-mapbox-gl` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +835 -420 across 20 files
|
||||
- **Created**: 2026-02-12 | **Updated**: 2026-02-16
|
||||
- **Labels**: merge-conflicts
|
||||
- **CI**: pass (but stale — last check 2026-02-16)
|
||||
|
||||
## Summary
|
||||
Auto-generated Copilot PR that switches the geo map collection renderer from Leaflet (DOM-based) to MapLibre GL (WebGL-based). It removes `leaflet`, `leaflet-gpx`, `@maplibre/maplibre-gl-leaflet`, `@types/leaflet`, and `@types/leaflet-gpx`, and adds `maplibre-gl` 5.18.0. GPX parsing is reimplemented as DOMParser + GeoJSON line layers.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The intent is reasonable — Trilium already pulls in MapLibre via the bridge package for vector tiles, so going native removes an adapter layer and would unlock better performance with many markers. The PR touches `apps/client/src/widgets/collections/geomap/` (map.tsx, marker.tsx, index.tsx, ContextMenus.ts, Markers.tsx) and introduces a `GeoMouseEvent` type replacing `LeafletMouseEvent` across `link_context_menu.ts` and `context_menu.ts`. That abstraction is the right call.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Bot-authored, unreviewed**: No human reviews, no comments from maintainers, no discussion at all. The PR was opened on 2026-02-12, last updated 2026-02-16, and has sat untouched for nearly two months despite the visible rewrite (+835/-420).
|
||||
- **Visible placeholder**: `Markers.tsx` contains `export const MARKER_SVG = "foo"; // TODO: Fix` — a placeholder the bot left in place. The actual marker SVG rendering depends on this variable being real content. This alone makes the PR not mergeable as-is.
|
||||
- **Stray import**: `NoteDetail.tsx` picked up an unrelated-looking import: `import { note } from "mermaid/dist/rendering-util/rendering-elements/shapes/note.js";` — almost certainly a bot hallucination that should not be there.
|
||||
- **Unrelated changes bundled in**: Changes to `NoteList.css`, `NoteDetail.tsx` full-height logic, and the `book.no_children_help` translation are mixed into a "replace Leaflet" PR. These should be separate.
|
||||
- **GPX track reimplementation**: Replacing `leaflet-gpx` with an in-house GeoJSON pipeline is risky without test coverage for the kinds of GPX files real users drop into Trilium. There are no new tests for the GPX path.
|
||||
- **CSS migration incomplete**: `.leaflet-div-icon`/`.leaflet-pane` → `.geo-marker`/`.maplibregl-*` — needs a careful sweep of all themes (including user themes) to not break visually.
|
||||
- **Merge conflicts** and CI was last green two months ago.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion. No maintainer engagement. The PR was created by `copilot-swe-agent` and appears abandoned.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE**: This is a stalled bot-generated PR with a visible `TODO: Fix` placeholder, a stray hallucinated import, unrelated drive-by changes, no tests for the replaced GPX functionality, and no human engagement in almost two months. If the Leaflet → MapLibre migration is wanted, it should be driven by a human contributor who can own the testing burden, untangle the unrelated changes, and see it through code review. Close with a comment pointing at the placeholder/import issues, and reopen manually if and when someone picks it up.
|
||||
@@ -1,32 +0,0 @@
|
||||
# PR #8787: feat: add childTitleTemplate attribute and update titleTemplate attri…
|
||||
|
||||
- **Author**: monotok
|
||||
- **Branch**: `feature/titleTemplate` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +230 -56 across 10 files
|
||||
- **Created**: 2026-02-21 | **Updated**: 2026-04-07
|
||||
- **Labels**: size:S, merge-conflicts
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Introduces a new `childTitleTemplate` label for default child note titles and narrows the existing `titleTemplate` so it only applies when creating from an explicit template note. Fixes issue #5080 by disambiguating the two concerns.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The feature aligns well with Trilium's label-based configuration model and complements the Templates / Default Note Title system. The new `childTitleTemplate` is added to `builtin_attributes.ts` (flagged as dangerous), registered in `attribute_detail.ts` `ATTR_HELP`, and has an English translation key added to `en/translation.json` — all in line with the conventions described in CLAUDE.md. The author also added integration tests in `apps/server/src/services/notes.spec.ts` covering three cases: template-only, parent-only, and precedence when both are set. User Guide HTML (`Default Note Title.html`) is updated with precedence documentation.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Backward compatibility break**: Splitting `titleTemplate` so it only applies to notes created *from* a template is a user-visible behavior change. Existing users who rely on `#titleTemplate` on a parent note will lose that behavior after upgrade. The Gemini review flagged this; the PR does not appear to include a migration to either auto-rename existing `titleTemplate` labels on non-template notes to `childTitleTemplate`, or a fallback code path that accepts both.
|
||||
- **Inherited templates via `child:template`**: The `resolveTitleTemplate` function only looks at `params.templateNoteId`; if a template is inherited through a `child:template` relation (a common Trilium pattern), the resolved template note won't be used to source `titleTemplate`. The Gemini reviewer also flagged this.
|
||||
- **Precedence rules are documented**: titleTemplate > childTitleTemplate > "new note" — matches the test expectations and the doc update.
|
||||
- Unrelated doc-pipeline edits: the user ran `pnpm edit-docs:edit-docs` which caused changes in unrelated `.html` and `!!!meta.json` files (AI.html, Documentation.md image ref, etc.). Author acknowledged they reverted most but some noise remains; this should be cleaned up before merge.
|
||||
- The `buildNote` helper usage in tests looks sound, and uses `cls.init(...)` properly (in line with CLAUDE.md guidance on CLS context).
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini code assist: flagged backward-compat break and inherited-template gap.
|
||||
- Maintainer (@eliandoran) requested: user guide update (done), comparison between `titleTemplate` and `childTitleTemplate` (partially done via new precedence section), and integration tests (done).
|
||||
- Status is CHANGES_REQUESTED and DRAFT; author paused waiting for review feedback before doing the doc work, then added tests and docs.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The author has been responsive and added most of the requested tests/docs, but three blockers remain before merge: (1) resolve merge conflicts with main, (2) handle the backward-compat break — either migrate existing `titleTemplate` usages or keep `titleTemplate` also applying to parents as a fallback when `childTitleTemplate` is absent, and (3) cover the `child:template` inherited-template case. Once those are addressed and noise commits from the doc pipeline are cleaned up, this is a solid addition.
|
||||
@@ -1,34 +0,0 @@
|
||||
# PR #8864: add toolbar customization over drag & drop
|
||||
|
||||
- **Author**: tuuuni-cell (NONE association)
|
||||
- **Branch**: `main` (fork) → `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +1303 -106 across 8 files
|
||||
- **Created**: 2026-03-01 | **Updated**: 2026-04-04
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: only "main" check ran (pass)
|
||||
|
||||
## Summary
|
||||
Adds a "Toolbar customization" section to the Text Notes options with drag-and-drop reordering, click-to-add chips, separators, group containers (···), and a delete zone. Introduces `textNoteToolbarConfig` option, a JSON-serialized custom layout, and refactors `text/toolbar.ts` to resolve classic/floating/block toolbars from the stored config with default fallbacks. Closes #5621.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Feature is highly requested (#5621). The toolbar builder refactor into `entriesToCKItems` / `DEFAULT_CLASSIC_TOOLBAR` / `DEFAULT_FLOATING_TOOLBAR` / `DEFAULT_BLOCK_TOOLBAR` is a reasonable architectural direction. Option wiring follows conventions. Handles classic, floating, AND block toolbars (unlike the sibling PR #8959 which only covers classic + floating).
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Duplicate with PR #8959**: Both PRs come from what appear to be the same contributor (`tuuuni-cell` / `tuuuni147`) and both claim to close #5621. #8959 is described as an "improved version" of this one. Only one should survive. #8864 is more thorough (handles block toolbar, has the `entriesToCKItems` helper with separator cleanup, plus richer defaults) but has merge conflicts and is older.
|
||||
- **`crypto.randomUUID()` usage**: `addGroup` calls `crypto.randomUUID()`, which is explicitly forbidden per `CLAUDE.md`: *"Do not use `crypto.randomUUID()` or other Web Crypto APIs that require secure contexts — Trilium can run over HTTP"*. Must be replaced with `randomString()` from `apps/client/src/services/utils.ts`.
|
||||
- **XSS vulnerability** (Gemini flagged): The custom toolbar config is user-controlled, and group `label`/`icon` values are rendered as HTML/SVG by the underlying editor components unsanitized. Since the option is per-user this is lower severity than multi-tenant XSS, but still needs sanitization or strict input validation — especially since `icon` accepts SVG.
|
||||
- **Hardcoded English labels**: `TOOLBAR_ITEM_LABELS` is in a separate `toolbar_config.ts` with English strings instead of using `t()`. Breaks i18n.
|
||||
- **Merge conflicts**: dirty.
|
||||
- **Inline styles everywhere**: A lot of inline styles in the editor (`style={{ ... }}`) that Gemini flagged as better extracted to CSS. Minor but the CSS code style is inconsistent.
|
||||
- **No tests or screenshots**.
|
||||
- **Size**: 1303 additions, XXL.
|
||||
|
||||
### Discussion Highlights
|
||||
- Only Gemini reviews. No maintainer review.
|
||||
- PR was updated most recently (2026-04-04) while #8959 was last touched 2026-03-08, so this branch might actually be the more maintained one.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES / CONSOLIDATE with #8959**: Ask the contributor which branch is canonical and close the other. Whichever survives must (1) replace `crypto.randomUUID()` with `randomString()`, (2) sanitize/validate group label+icon, (3) route labels through `t()` for i18n, (4) resolve merge conflicts, (5) add at least one screenshot or test. The architectural direction (JSON-serialized config with defaults fallback) is sound and I would lean toward keeping #8864's version if the contributor chooses it because of the broader toolbar coverage.
|
||||
@@ -1,33 +0,0 @@
|
||||
# PR #8880: Calendar: Add slotDuration and slotLabelInterval, Add Day View
|
||||
|
||||
- **Author**: BeatLink
|
||||
- **Branch**: `main` (fork) → `main`
|
||||
- **Status**: Draft, BLOCKED (CHANGES_REQUESTED)
|
||||
- **Size**: +70 -2 across 4 files
|
||||
- **Created**: 2026-03-02 | **Updated**: 2026-03-15
|
||||
- **Labels**: size:M
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Exposes two new calendar attributes — `#calendar:slotDuration` and `#calendar:slotLabelInterval` — so users can control how granular the time grid is in the calendar collection, and adds a new `timeGridDay` (Day) view option. Updates the user guide.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Follows established patterns for calendar configuration: uses `useNoteLabel` hooks in `calendar/index.tsx`, extends the `Labels` type in `@triliumnext/commons/attribute_names.ts`, and passes through to FullCalendar. New day view is wired into the existing `CALENDAR_VIEWS` array and has its own translation keys added to `en/translation.json`. Small, focused change.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Maintainer feedback unresolved** (eliandoran 2026-03-14):
|
||||
1. **UI exposure required**: Trilium convention requires all new options to also be exposed through the UI (collection properties), not only via attributes. This is the main blocker.
|
||||
2. **Input validation missing**: An invalid value like `#calendar:slotLabelInterval="00:aa:00"` crashes the calendar. The PR must validate input before passing it to FullCalendar (regex check, fallback to default on parse failure).
|
||||
- **Defaults**: The `DEFAULT_SLOT_DURATION`/`DEFAULT_SLOT_LABEL_INTERVAL` constants are declared but only used inline. Fine, but the user guide does not currently explain the defaults — rom1dep also asked for better documentation and screenshots.
|
||||
- **Day view**: Straightforward, small addition. No concerns.
|
||||
- **Docs**: The rewritten table in `Calendar.md` is improved but still missing the conceptual explanation of "slots" that rom1dep requested.
|
||||
|
||||
### Discussion Highlights
|
||||
- BeatLink has bumped the PR multiple times asking for review.
|
||||
- eliandoran requested changes with two specific asks (UI exposure and validation).
|
||||
- rom1dep suggested documentation improvements (screenshots, explanation of slots concept).
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The feature is welcome and small, but three concrete blockers remain: (1) crash on invalid label values needs validation + fallback, (2) maintainer wants the options exposed in collection properties UI (can be a follow-up PR per eliandoran's comment), (3) documentation needs the conceptual "what is a slot" explanation. Fixes (1) and (3) are small; (2) can legitimately be deferred. Once (1) lands, this is mergeable.
|
||||
@@ -1,29 +0,0 @@
|
||||
# PR #8894: web-clipper: prevent cloning when clipping to an existing note + optimizations
|
||||
|
||||
- **Author**: contributor
|
||||
- **Branch**: `web-clipper-prevent-note-cloning` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +12 -19 across 1 file
|
||||
- **Created**: 2026-03-03 | **Updated**: 2026-03-08
|
||||
- **Labels**: size:M
|
||||
- **CI**: pass (all checks green)
|
||||
|
||||
## Summary
|
||||
Removes the undesired auto-cloning to the clipper inbox when the web clipper appends to an existing note. Replaces the misleading `clipperInboxNote.searchNotesInSubtree` call with a direct `searchService.searchNotes` so the clipping-note lookup does not require fetching the inbox first, and only fetches the inbox when a new note actually needs to be created. Single-file, focused refactor in `apps/server/src/routes/api/clipper.ts`.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Clean use of existing services (`searchService`, `attributeFormatter`). The behavior change addresses a genuine annoyance (re-clips cloning into the inbox even after the user has moved the canonical note elsewhere). The removed code path was introduced by #4075 and the author correctly identifies that the original intent was probably to clone only the first time, but implementation cloned on every re-clip.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Behavior change**: the removed branch (`if ((clippingNote as any).parentNoteId !== clipperInbox.noteId)`) used `as any` and compared a non-existent property — effectively it was either always running or always skipping because `parentNoteId` is not a `BNote` field. The author's analysis aligns with that observation. Removing it is correct.
|
||||
- **Search scope broadened**: The old code searched *within* the clipper inbox subtree; the new code searches globally via `searchService.searchNotes` with the `pageUrl` attribute filter. This is a behavior change: a clip with a matching URL **anywhere** in the tree will now be treated as the target, not just clips inside the clipper inbox. That is probably desired (it's exactly the motivating use case in the PR description), but should be documented and tested to confirm it doesn't cause collisions with unrelated notes that happen to have the same `#pageUrl` label.
|
||||
- **No new tests**: Would benefit from at least one unit test around `findClippingNote`'s scoping.
|
||||
- **Size**: Small, surgical, and reviewable.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini reviews only. No human reviewer. No maintainer concerns raised.
|
||||
|
||||
## Recommendation
|
||||
**MERGE** (with a note): The fix is correct, the code cleaner, CI green, and the reasoning sound. I would suggest asking the contributor to add a brief test covering the "re-clip appends without cloning" and "clip with no matching note creates under inbox" cases, but that is optional. The broadened search scope (outside the inbox subtree) is intentional and matches the PR's stated goal.
|
||||
@@ -1,31 +0,0 @@
|
||||
# PR #8920: Enforce TOTP verification during desktop sync setup
|
||||
|
||||
- **Author**: JYC333 (member)
|
||||
- **Branch**: `totp` → `main`
|
||||
- **Status**: Ready, UNSTABLE
|
||||
- **Size**: +218 -41 across 16 files
|
||||
- **Created**: 2026-03-04 | **Updated**: 2026-03-20
|
||||
- **Labels**: size:L
|
||||
- **CI**: 1 failure (CodeQL), other checks pass
|
||||
|
||||
## Summary
|
||||
Makes the desktop sync setup honor TOTP when the remote sync server has 2FA enabled. Adds a `check-server-totp` endpoint, a TOTP token input on the sync-from-server setup screen (shown conditionally), propagates `trilium-totp` through the outgoing request headers, and extends `checkCredentials` middleware to enforce TOTP on every authenticated request. Addresses part of #5650, closes #8209 and #8272.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Aligns with Trilium's existing TOTP/OpenID auth design. Reuses the existing `totp` service and `recoveryCodeService`. Translation keys correctly land in `apps/server/src/assets/translations/en/server.json` (server-side). Route registration uses `asyncRoute` + `auth.checkAppNotInitialized` like neighbors, and `ExecOpts.auth.totpToken` is threaded through `request.ts`. New test coverage in `auth.spec.ts`.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Scope creep in `checkCredentials`**: This is the big one. The PR does not just enforce TOTP during *sync setup*; it adds TOTP verification to the *general* `checkCredentials` middleware, meaning **every** request that uses `trilium-cred` now also requires a `trilium-totp` header when TOTP is enabled. That is a sweeping behavior change affecting ETAPI (if it goes through that middleware), existing sync clients that do not set TOTP headers, and possibly login flows. This needs careful analysis and a migration plan — and ideally a scoped flag instead of a global policy shift. This could easily lock existing users out of their own sync clusters on upgrade.
|
||||
- **Conflict with existing TOTP flow**: Trilium already has a TOTP login flow for the web UI. The PR adds a separate header-based verification path. The interaction between session-based web login (which presumably already satisfies TOTP) and the new `trilium-totp` header requirement needs verification — is a web session request after login now rejected because the header is absent?
|
||||
- **CodeQL failure** needs investigation — possibly related to the SSRF concern Gemini raised (the new `checkServerTotpStatus` sends a request to a user-supplied host with no validation).
|
||||
- **SSRF**: The `check-server-totp` endpoint is exposed while the app is not initialized and issues an outbound HTTP request to the user-provided `syncServerHost`. Gemini flagged this; it is a legitimate concern even in the pre-init state because it can be used to probe the local network from the server's perspective.
|
||||
- **Test quality**: The added test only checks the "TOTP disabled" negative path; the positive path ("setup status returns totpEnabled: true") is tested but the middleware enforcement is not end-to-end tested with a valid TOTP.
|
||||
- **Minor**: lots of unrelated import reordering adds diff noise.
|
||||
|
||||
### Discussion Highlights
|
||||
- Only Gemini review — no human reviewer yet. Gemini raised SSRF and header-handling concerns.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The sync-setup UX additions are welcome, but the expansion of `checkCredentials` to enforce TOTP on *every* authenticated request is a breaking change that needs maintainer sign-off, a migration plan, and tests for existing sync clients/ETAPI. Also: fix the CodeQL failure, add SSRF protection to `check-server-totp`, and add a positive-path integration test. I would suggest splitting this into two PRs: (1) just the sync-setup UI and server-side TOTP propagation (low risk), (2) the middleware change as a separate, well-debated PR.
|
||||
@@ -1,32 +0,0 @@
|
||||
# PR #8959: Editable toolbar
|
||||
|
||||
- **Author**: tuuuni147 (NONE association)
|
||||
- **Branch**: `editable-toolbar` → `main`
|
||||
- **Status**: Ready, BLOCKED
|
||||
- **Size**: +1159 -0 across 8 files
|
||||
- **Created**: 2026-03-08 | **Updated**: 2026-03-08
|
||||
- **Labels**: size:XXL
|
||||
- **CI**: pass (only "main" check ran)
|
||||
|
||||
## Summary
|
||||
Adds a new "Toolbar" tab in Text Notes settings letting users drag-and-drop reorder, add, remove, and group CKEditor toolbar items. Introduces a new persisted option `textNoteToolbarConfig`. Described as "the improved version of #8864". Closes #5621.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Editable toolbars is a highly requested feature (#5621). Option wiring looks correct: `textNoteToolbarConfig` is added to `OptionDefinitions`, whitelisted in `options.ts`, and initialized in `options_init.ts`. Translations are added to `en/translation.json` only, per convention. The UI uses Preact hooks and the existing `OptionsSection` component.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Duplicate of PR #8864**: This PR is an "improved version" of #8864 by a different-looking but almost certainly related account (`tuuuni147` here vs `tuuuni-cell` there). Both are still open and both claim to close #5621. One must be closed. #8864 has slightly more code (+1303, includes block toolbar support, a save/reload button, a richer drag controller, and merge conflicts). #8959 is cleaner (+1159, 8 files, no conflicts) but appears to be a second attempt.
|
||||
- **Quality**: The diff adds a big `toolbar_customization.tsx` component with drag & drop, CSS, and a lot of hardcoded icon imports. Gemini flagged React best-practices issues (keys in list rendering, CSS compatibility, code duplication) in its review. No maintainer review yet.
|
||||
- **Hardcoded string fallbacks**: The ITEM_LABELS map hardcodes English strings rather than routing them through `t()`, which breaks i18n for toolbar item labels.
|
||||
- **Icon path**: Relative imports like `../../../../../../packages/ckeditor5-math/theme/icons/math.svg?raw` reach across package boundaries into `packages/`. Should use a workspace alias.
|
||||
- **Verification**: No screenshots, no unit tests, no e2e tests.
|
||||
- **XSS concern**: As Gemini flagged on the sibling PR #8864, the toolbar config contains user-controllable labels/icons that eventually land in the editor DOM as HTML/SVG. The same concern likely applies here unless icons are resolved server-side.
|
||||
|
||||
### Discussion Highlights
|
||||
- Only Gemini rounds; no maintainer review.
|
||||
- Both #8864 and #8959 were opened by apparently the same contributor(s) with `tuuuni` in the handle.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES / CONSOLIDATE**: Consolidate with PR #8864 — ask the contributor which PR they want to move forward with and close the other. Whichever survives needs (1) i18n for ITEM_LABELS, (2) workspace-relative icon imports, (3) XSS sanitization for any user-supplied labels/icons, (4) maintainer UX review, and (5) tests/screenshots. Right now it is blocked and has not received a human review.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #8972: Migrate autocomplete
|
||||
|
||||
- **Author**: JYC333 (member)
|
||||
- **Branch**: `autocomplete` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +2636 -676 across 34 files
|
||||
- **Created**: 2026-03-09 | **Updated**: 2026-03-28
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: pass (at last run)
|
||||
|
||||
## Summary
|
||||
Large migration replacing the legacy jQuery-based `autocomplete.js` integration with a headless `@algolia/autocomplete-core` implementation across attribute, note, and relation-map autocompletes. Introduces a shared headless panel controller and global close registry, refreshes CSS, adds unit/e2e tests, and drops `autocomplete.js` plus jQuery polyfills. Closes #5134.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Strategically desirable — Trilium is trying to move away from jQuery-era plugins, and the widespread use of `autocomplete.js` is a long-standing pain point. JYC333 has thoroughly tested the many consumer sites (attribute detail, jump-to-note, empty note, clone/move/link dialogs, bulk actions, collection board, search definition, etc.). The headless `autocomplete-core` approach is a sensible midpoint.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Scale & churn**: 34 files, +2636/-676, touching most of the client's autocomplete-adjacent code. The branch has bit-rotted (merge conflicts) and the author has asked for an early merge to avoid repeated rebases.
|
||||
- **Maintainer feedback unresolved** (from eliandoran on 2026-03-19):
|
||||
1. Hover style is missing.
|
||||
2. Typing fast slows the app to a crawl — debouncing is broken/missing.
|
||||
3. Icon alignment/size regressions.
|
||||
4. Sub-text indentation is off.
|
||||
5. Bigger question: "What's the role of Autocomplete Core? Can't we get rid of this dependency as well?" — suggests the maintainer is not fully convinced `@algolia/autocomplete-core` is the right target.
|
||||
- **XSS concern** raised by Gemini: headless rendering uses `innerHTML` with highlighted suggestions from user-controlled data in at least one path. Needs sanitization (DOMPurify or equivalent) before merge.
|
||||
- **Memory/DOM leaks** called out earlier but partly addressed via the cleanup functions and `WeakMap` instance tracking. Should be double-checked.
|
||||
- **CodeQL/advanced security review** did not run on the initial commit due to PR size.
|
||||
- **Related PR**: PR #9104 (Renatonet0) fixes a relation-map autocomplete bug in the legacy code path. That PR also has conflicts. If #8972 merges, #9104's fix should be ported into the new code; if #8972 is deferred, #9104 can land first. Not a blocker but needs coordination.
|
||||
|
||||
### Discussion Highlights
|
||||
- Author requested early merge to avoid rebase churn; maintainer instead requested changes with concrete manual-testing regressions and a strategic question about the dependency choice.
|
||||
- Multiple Gemini rounds; no other human reviewers.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: Worthwhile direction but not ready. Needs (1) answers to eliandoran's strategic question about whether `autocomplete-core` is the right target at all (vs. rolling our own), (2) fixing the four manual-testing regressions (hover style, debouncing, icon sizing, sub-text indent), (3) XSS sanitization for highlighted HTML, and (4) a rebase on main. Given the scope and the maintainer's architectural doubt, I would push for a reduced-scope alternative (custom minimal implementation) before committing to this approach. Stay in draft.
|
||||
@@ -1,31 +0,0 @@
|
||||
# PR #8980: feat(math): Fix mathlive rendering error and add user toggle for mathlive
|
||||
|
||||
- **Author**: Meinzzzz
|
||||
- **Branch**: `main` (fork) → `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +118 -30 across 15 files
|
||||
- **Created**: 2026-03-09 | **Updated**: 2026-04-05
|
||||
- **Labels**: size:L, merge-conflicts
|
||||
- **CI**: pass (at last run)
|
||||
|
||||
## Summary
|
||||
Patches a MathLive rendering/duplication bug (fix for `atomIsInRange`) via a pnpm patch to `mathlive@0.109.0`, and adds a new `mathFieldEnabled` user option exposing a toggle to disable the visual math field in favor of raw LaTeX editing. Addresses issue #8891.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
MathLive is still an active dependency — `packages/ckeditor5-math/package.json` declares `mathlive: 0.109.1` and the CKEditor math plugin uses it in `packages/ckeditor5-math/src/ui/mathinputview.ts`. The feature is relevant. The option flow follows existing conventions: added to `OptionDefinitions` in `@triliumnext/commons`, `ALLOWED_OPTIONS` allowlist, `defaultOptions`, and exposed via `EditorFeature` in `text_notes.tsx`. Translations correctly go to `en/translation.json` only. Config propagation from client through the CKEditor math plugin config is clean.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Stale patch version**: The patch file targets `mathlive@0.109.0`, but `packages/ckeditor5-math/package.json` in main already uses `mathlive: 0.109.1`. The pnpm `patchedDependencies` entry will not apply, so the MathLive rendering fix is effectively dead code after the merge conflicts are resolved. Patch must be re-targeted to `0.109.1` or whatever is current.
|
||||
- **Unminified mathlive**: The patch rewrites mathlive's `package.json` to point `import`/`require` to non-minified files (`mathlive.mjs`/`mathlive.js` instead of `.min.*`). Gemini flagged this as a performance concern. Likely done because the line-based patch needed to match source lines, but it should be revisited — either minify the patched output or patch the minified file directly.
|
||||
- **Global event dispatch**: The `mathlive:custom-shortcuts` custom event pattern (dispatching on `document` to collect shortcuts from external listeners) is a new, undocumented extension point. Fine for an internal plugin, but if it is meant for scripting API consumers it should be documented.
|
||||
- **Type loosening**: Several `window.mathVirtualKeyboard` references are replaced with `(window as any).mathVirtualKeyboard`, removing the previous global declaration. This is a regression in type safety; the global interface declaration should be kept.
|
||||
- **Merge conflicts** must be resolved before merging.
|
||||
|
||||
### Discussion Highlights
|
||||
- Gemini Code Assist flagged the unminified mathlive concern as the main code review item.
|
||||
- Only the author and the bot have interacted with the PR; no maintainer review yet.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: Good bug fix and a reasonable UX feature, but needs (1) the patch retargeted to the current mathlive version (0.109.1), (2) the unminified-file concern addressed, (3) the `window.mathVirtualKeyboard` type declaration restored instead of `as any`, and (4) merge conflicts resolved. Once fixed, it looks mergeable.
|
||||
@@ -1,51 +0,0 @@
|
||||
# PR #9034: feat(search): try to improve search performance through some creative mechanisms
|
||||
|
||||
- **Author**: perfectra1n (Jon Fuller)
|
||||
- **Branch**: `feat/search-perf-take1` -> `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +2017 -108 across 18 files
|
||||
- **Created**: 2026-03-12 | **Updated**: 2026-04-03
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: mostly green, but `E2E tests on linux-arm64` and `CodeQL` are **FAILURE**
|
||||
|
||||
## Summary
|
||||
Non-FTS5 search performance overhaul. Introduces a cached `flatTextIndex` on `Becca` (parallel arrays of notes + pre-normalized flat texts + noteId→index map) with incremental updates, pre-normalized `normalizedName`/`normalizedValue` on `BAttribute`, an autocomplete fast path that bypasses the recursive parent walk and uses `getBestNotePath()` directly for single-token searches, and a two-phase exact/fuzzy search that skips fuzzy fallback for limited (autocomplete) queries. Replaces `striptags` with regex HTML stripping in snippet extraction. Ships with a large integration-level profiling spec (50K notes) and a unit-level profiling spec. Also adds a UI toggle under Options → Other → Search for "Enable fuzzy matching" (new option `searchEnableFuzzyMatching`).
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Touches the core search hot path in exactly the right places: `apps/server/src/becca/becca-interface.ts`, `apps/server/src/becca/entities/bnote.ts`, `apps/server/src/becca/entities/battribute.ts`, `apps/server/src/services/search/services/search.ts`, and `apps/server/src/services/search/expressions/note_flat_text.ts`. New translation keys are added under `search.*` in `en/translation.json` only (correct per CLAUDE.md). A new option `searchEnableFuzzyMatching` plumbs through `apps/server/src/routes/api/options.ts` — presumably also added to the options whitelist elsewhere.
|
||||
|
||||
**Critical relationship with PR #6839** ("feat(search): implement FTS5 w/ sqlite for faster and better searching" by the same author, also still open): #6839 is the "proper" fix — switching to SQLite FTS5 — whereas #9034 is a set of creative in-memory optimizations that avoid touching the schema. These are architectural alternatives. PR #9034 was explicitly labeled "take1" by the author, suggesting this is the lighter-weight fallback if FTS5 proves too risky or takes longer. Only one of the two should land; having both would duplicate/conflict badly.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **flatTextIndex design**: Parallel arrays + noteId→index Map gives O(1) lookup for incremental updates and O(n) iteration with cache-friendly memory layout. `dirtyNoteFlatText(noteId)` is called from `BNote.invalidateThisCache()`, and `dirtyNoteSetCache()` clears the whole index when notes are added/removed. This is a solid, correct incremental caching scheme.
|
||||
- **Memory overhead**: the index stores a pre-normalized flat text for every note. For users with 240K notes this can be a non-trivial chunk of RAM. Worth a sanity check but likely acceptable.
|
||||
- **Autocomplete fast path**: Single-token + limit → skip recursive parent walk, use `getBestNotePath()` directly. This is the single biggest win for the common case. The implementation needs to gracefully fall back when multi-token or limit-less, which the diff claims it does (`note_flat_text.ts`).
|
||||
- **BAttribute normalization**: Pre-computing `normalizedName` and `normalizedValue` at construction trades a small amount of memory per attribute for zero repeated `normalize()` calls in hot loops. Correct optimization.
|
||||
- **Striptags → regex**: The old `striptags` library is slow; a tight regex (`/<[^>]*>/g` or similar) is much faster but riskier on pathological HTML. Should be stress-tested against content with `<script>`, CDATA, and malformed tags.
|
||||
- **Fuzzy matching UI option**: A new user-facing option under Options → Other → Search. The description mentions `searchEnableFuzzyMatching` is a server option. The PR adds the toggle in the correct React settings component, but the server-side wiring through `SearchContext` needs verification (the diff shows `new SearchContext({ fastSearch: true, enableFuzzyMatching: false })` in tests, so presumably `SearchContext` now honors a new field).
|
||||
- **Profiling specs**: The 50K-note integration test is extremely valuable as a perf regression guard — the console output is informative. But: this test seeds the DB with raw SQL and runs in 600s timeout. It will massively slow down `pnpm test:sequential`. Should probably be gated behind an env var or moved to a manually-run benchmark suite rather than running on every CI.
|
||||
- **CI failures**:
|
||||
- `E2E tests on linux-arm64`: FAILED. Could be flake or a real regression. Needs investigation.
|
||||
- `CodeQL`: FAILED. CodeQL failures are often syntax/dataflow — needs to be looked at. Gemini also flagged "one critical syntax error" in the initial review; this may be related.
|
||||
- **Merge conflicts**: Given the PR is 3+ weeks old and touches becca core, conflicts are inevitable. Rebase needed.
|
||||
|
||||
### Discussion Highlights
|
||||
- **gemini-code-assist**: Flagged one critical syntax error at initial review (not clear if addressed).
|
||||
- **github-advanced-security**: Commented — may be related to the CodeQL failure.
|
||||
- No human review yet.
|
||||
- Doc preview link was auto-posted.
|
||||
- Relationship to PR #6839 not explicitly discussed in this PR's thread.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES** — and importantly, decide between this PR and #6839:
|
||||
|
||||
1. **Architectural decision (blocking)**: This is "take1" and #6839 is the FTS5 "take2" by the same author. Maintainer should decide which direction to pursue. FTS5 is the long-term right answer but has schema migration cost; this PR is the lower-risk in-memory win. Only one should merge. If FTS5 is going to land, close this; if FTS5 is blocked/too risky, this is the fallback.
|
||||
2. **Fix CI**: CodeQL and linux-arm64 E2E are both red. The CodeQL failure + Gemini's "one critical syntax error" comment suggest there's a real bug to fix.
|
||||
3. **Gate the 50K profiling test**: running a 50K-note seed in every `test:sequential` run is too expensive. Put it behind an env var like `SEARCH_PROFILING=1` or move it to a benchmarks directory so CI doesn't run it by default.
|
||||
4. **Rebase** against current main to clear the merge-conflicts label.
|
||||
5. **Stress-test the regex HTML stripping** with pathological inputs (nested `<script>`, broken tags, very long lines) to ensure no regressions in snippet extraction.
|
||||
6. **Verify memory footprint** of the flat-text index for large databases (estimate: ~200 bytes/note × 240K notes ≈ 50MB, probably fine but worth documenting).
|
||||
|
||||
The code is genuinely impressive engineering work and the profiling methodology is exemplary. But without a decision between this and FTS5, and with red CI, it cannot merge as-is.
|
||||
@@ -1,48 +0,0 @@
|
||||
# PR #9076: feat(editor): add format button to codeblock toolbar
|
||||
|
||||
- **Author**: giuxtaposition (Giulia Ye)
|
||||
- **Branch**: `feat/add-format-codeblock-button` -> `main`
|
||||
- **Status**: Ready, BLOCKED (CHANGES_REQUESTED)
|
||||
- **Size**: +1415 -40 across 24 files
|
||||
- **Created**: 2026-03-16 | **Updated**: 2026-04-09
|
||||
- **Labels**: size:XXL
|
||||
- **CI**: pass (all green as of 2026-04-09)
|
||||
|
||||
## Summary
|
||||
Adds a "Format code block" button to the CKEditor5 codeblock toolbar. Uses Prettier (loaded on-demand via dynamic `import("prettier/plugins/...")` to keep the bundle small) to format code in the detected language. Introduces a `FormatterRegistry` / `CodeFormatter` strategy pattern so additional formatters can be plugged in alongside Prettier in the future. Supports JS/TS/JSX/TSX, JSON, CSS/SCSS/LESS, HTML, YAML, and Markdown. Comes with extensive unit tests for both the registry and the Prettier formatter.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The ambition and code quality are impressive — strategy pattern, dynamic imports, thorough test suite. However, the maintainer (eliandoran) explicitly called out in his CHANGES_REQUESTED review that the architecture as originally proposed is wrong:
|
||||
|
||||
> "Handling the actual formatting should not be the responsibility of the CKEditor plugin. The reasoning is that we might want to introduce the same for code notes, not just code blocks (or even different editors if we ever get to that). So move the formatting part into the client and provide an API to determine if formatting is enabled."
|
||||
|
||||
The author has clearly attempted this refactor: the latest diff places `FormatterRegistry` and `PrettierFormatter` under `apps/client/src/services/` (correct location per the feedback), and wires them into the CKEditor config via `buildCodeFormatterConfig()` in `apps/client/src/widgets/type_widgets/text/config.ts`. This looks like the right direction. The CKEditor plugin proper (`packages/ckeditor5/src/plugins/format_codeblock/`) should now just consume the registry from `editor.config`. Whether that wiring is complete needs verification.
|
||||
|
||||
Adds `prettier: ^3.5.3` as a production dependency in `apps/client/package.json` — this will grow the client bundle. Maintainer said he'd run a nightly build to measure the impact; unclear whether that check was completed.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Strategy pattern**: Very clean. `CodeFormatter` interface + `FormatterRegistry` + `PrettierFormatter` concrete implementation. 277 lines of `code_formatter.spec.ts` cover the registry exhaustively.
|
||||
- **Dynamic Prettier plugin loading**: `prettier/plugins/babel`, `typescript`, `estree`, `postcss`, `html`, `yaml`, `markdown` all loaded via `() => import(...)` — correct pattern for minimizing initial bundle. Gemini raised concerns about namespace vs. named exports; the author replied that Prettier's ESM plugins "explicitly re-export everything as named exports," so the pattern is correct.
|
||||
- **Bundle size**: Prettier + its plugins are heavy. Dynamic imports help, but prettier/standalone is still sizable. The fact that eliandoran explicitly called out measuring delivery size suggests this is the main blocker.
|
||||
- **Architecture refactor**: Appears done but needs human verification — previously the formatting was owned by the CKEditor plugin, now it lives in `apps/client/src/services/code_formatter.ts` and `prettier_formatter.ts` and is passed to CKEditor via `editor.config.codeFormatter`. The codeblock command in the CKEditor package then consumes `editor.config.get("codeFormatter")`.
|
||||
- **Documentation**: Maintainer asked for docs covering supported languages and the "auto language" limitation. Unclear if this has landed.
|
||||
- **Language mapping**: Uses Trilium's internal MIME-style language IDs like `application-javascript-env-frontend`, `text-x-scss`. Correct; matches how the codeblock plugin identifies languages.
|
||||
- **Some unrelated noise**: The diff also tightens typings for `onNotificationWarning` in `EditableText.tsx` (replacing `any` with `EventInfo`/`NotificationShowEventData`). Good cleanup but unrelated — splitting into its own PR would shrink this one.
|
||||
- Author noted one pre-existing test was failing because ckeditor5-package tests weren't running in CI before this PR. Needs confirmation that the test is fixed or removed.
|
||||
|
||||
### Discussion Highlights
|
||||
- **eliandoran** (CHANGES_REQUESTED, 2026-03-19): 1) measuring delivery size on his end; 2) move formatting out of the CKEditor plugin into the client (so code notes can also use it); 3) docs must be added.
|
||||
- Author has been iterating actively and engaged with every Gemini review.
|
||||
- Multiple Gemini-code-assist passes with various nits (XML formatting, text extraction, test stability, dynamic import syntax). Most addressed.
|
||||
- CI is finally all green as of 2026-04-09 after many iterations.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES** (blocked on maintainer verification + docs):
|
||||
1. **Verify the architecture refactor**: confirm that `FormatterRegistry` is fully extracted into `apps/client/src/services/` and consumed by the CKEditor plugin via config, so the same registry can be reused by code notes later. From the diff this appears done, but a human reviewer should walk the call chain once.
|
||||
2. **Bundle size check**: eliandoran committed to triggering a nightly build to measure the size impact of adding Prettier. That measurement needs to happen and be acceptable before merge.
|
||||
3. **Documentation**: add docs listing supported languages and noting that the button is disabled when the codeblock language is set to auto.
|
||||
4. **Fix or delete** the pre-existing failing ckeditor5 test the author flagged.
|
||||
5. **Optional split**: the `onNotificationWarning` typing cleanup should ideally be a separate PR.
|
||||
The feature is high quality and desirable. Once the bundle-size measurement and documentation are in place, this is good to merge.
|
||||
@@ -1,36 +0,0 @@
|
||||
# PR #9089: feat(search): auto-execute saved search when note is opened
|
||||
|
||||
- **Author**: argusagent
|
||||
- **Branch**: `fix/saved-search-auto-execute` -> `main`
|
||||
- **Status**: Ready, BLOCKED
|
||||
- **Size**: +13 -0 across 1 file
|
||||
- **Created**: 2026-03-18 | **Updated**: 2026-03-20
|
||||
- **Labels**: size:S
|
||||
- **CI**: **FAILURE** — Test development, E2E linux-x64, E2E linux-arm64 all failing
|
||||
|
||||
## Summary
|
||||
Closes #5658. Adds a `useEffect` in `SearchResult` that automatically triggers the `searchNotes` command when a user navigates to a saved search note that hasn't been executed yet, eliminating the "Search has not been executed yet" placeholder. Uses a `lastExecutedNoteId` state to ensure it only fires once per navigation per note.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Correct widget (`apps/client/src/widgets/search_result.tsx`), uses existing `appContext.triggerCommand` and React hook patterns. The feature itself is reasonable UX — a saved search whose entire purpose is displaying results is a natural candidate for auto-execute.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Clean, minimal implementation. The guard `note.type === "search" && !note?.searchResultsLoaded && note.noteId !== lastExecutedNoteId` correctly prevents re-firing on re-renders and prevents re-running while the user edits the query on the same note.
|
||||
- The dependency list `[note, lastExecutedNoteId]` is correct (addresses Gemini's initial "exhaustive-deps" concern, as the author explicitly called out in a follow-up comment).
|
||||
- **CI is failing** on three checks: Test development, E2E linux-x64, E2E linux-arm64. These failures happened at the latest push (2026-03-20) and nothing has been updated since. Possible causes: existing E2E tests expected the "Search has not been executed yet" empty state and now break because the search runs immediately; or an unrelated flake. Must be investigated before merge.
|
||||
- **Critical duplicate concern**: PR #7841 "Auto execute saved search note" (contributor, 2025-11-22) is still open with the same goal. These two PRs are functionally duplicates of each other. Only one should land; the other should be closed.
|
||||
- No user-facing option to disable auto-execute. The PR description argues this is intentional ("No config option needed — this matches the expected UX for a note type whose entire purpose is to display search results"), which is defensible but a config flag would cost little and match the project's tendency toward configurability.
|
||||
|
||||
### Discussion Highlights
|
||||
- **gemini-code-assist**: Flagged initial exhaustive-deps concern; author addressed it in the revised implementation.
|
||||
- No human review yet.
|
||||
- Author comment on 2026-03-20 explained the `useState`-based approach over suppressing the lint rule — reasonable.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES** (and address the duplication):
|
||||
1. **Decide which PR to keep**: PR #7841 (older, created 2025-11-22) targets the same issue. Maintainer should pick one and close the other. This PR (#9089) has the cleaner implementation, so likely this is the keeper and #7841 should be closed with a reference to this one.
|
||||
2. **Fix the failing CI**: Test development + both E2E jobs fail. Likely an existing E2E test asserts on the "not executed yet" placeholder and needs updating to match the new behavior. This is blocking.
|
||||
3. Optional: consider whether a `#disableAutoExecute` label on the search note (or a global option under Settings → Search) would be worth adding for users who prefer the current behavior. Not required but nice.
|
||||
Once CI is green and the duplication is resolved, this is a clean one-file merge.
|
||||
@@ -1,32 +0,0 @@
|
||||
# PR #9104: Fix #6929: relation map ignores selected autocomplete name
|
||||
|
||||
- **Author**: Renatonet0
|
||||
- **Branch**: `fix/partially-typed-relation` -> `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +87 -0 across 2 files
|
||||
- **Created**: 2026-03-19 | **Updated**: 2026-04-07
|
||||
- **Labels**: size:M, **lgtm**, merge-conflicts
|
||||
- **CI**: last run before conflicts was all green
|
||||
|
||||
## Summary
|
||||
Fixes #6929: in the relation map, when the user selects an item from the autocomplete for a relation name, the internal model still held the partially typed text because the original handler only fired on `keyup`. The fix dispatches a bubbling `input` event on `blur` and on `Enter` so the autocomplete value gets synced into whatever listener downstream of the input is consuming `input` events. Adds vitest coverage for all four scenarios (Enter, blur, non-Enter keys, parent bubbling).
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Targeted fix in the right place (`RelationMap.tsx`), uses the same jQuery idioms as the surrounding legacy code. Tests follow the existing vitest conventions. No translation, no API, no schema changes. Maintainer eliandoran already approved with: "OK as a first implementation, although the long-term fix is to get rid of the jQuery and use a custom dialog. The test is OK-ish, although I feel it's quite a bit complicated." So the approach has green light.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- The new `setupAnswerEventHandlers($answer)` helper is correctly wired into `useRelationCreation` at the call site (visible in the diff: `setupAnswerEventHandlers($answer);` added right before the existing `$answer.on("keyup", ...)`). Good.
|
||||
- Dispatching a synthetic `input` event with `bubbles: true` is the standard pattern for forcing downstream handlers to re-read the value.
|
||||
- Tests cover Enter, blur, non-Enter keys, and bubbling. The test "does not dispatch input event for non-Enter keys" is slightly fragile because it filters after the fact, but it's correct.
|
||||
- Minor: the helper dispatches on every `blur`, including blurs triggered by the user clicking elsewhere without intending a commit. In practice this is fine for the relation-map flow, but worth keeping in mind if issues come up later.
|
||||
- Merge conflict is almost certainly trivial — the file was touched by other recent RelationMap work (or by the IME PR #9140, which edits the same file).
|
||||
|
||||
### Discussion Highlights
|
||||
- **eliandoran**: APPROVED on 2026-03-19. Noted it's a first-pass fix and that long-term the jQuery wiring should be replaced with a custom dialog.
|
||||
- **gemini-code-assist**: Suggested refactoring the two small handlers for conciseness — non-blocking nit.
|
||||
- PR carries the `lgtm` label already.
|
||||
|
||||
## Recommendation
|
||||
**MERGE** (after rebase). This is approved, well-tested, surgical, and carries the lgtm label. The only blocker is the `merge-conflicts` label — needs a rebase against main (likely trivial conflict against RelationMap.tsx from adjacent recent work). Once rebased and CI reruns green, merge as-is.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #9119: feat: add "Copy note URL to clipboard" option (#5728)
|
||||
|
||||
- **Author**: argusagent
|
||||
- **Branch**: `fix/copy-note-url-to-clipboard` -> `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +2245 -2231 across 3 files (size:S label — the real change is ~14 lines)
|
||||
- **Created**: 2026-03-20 | **Updated**: 2026-03-20
|
||||
- **Labels**: size:S, merge-conflicts
|
||||
- **CI**: (no rollup — stale, needs rebase)
|
||||
|
||||
## Summary
|
||||
Adds "Copy note URL to clipboard" to both the tree context menu and the breadcrumb empty-area context menu. The URL is built by stripping any hash from `window.location.href` and appending `#${notePath}`, which works for web, Electron, and reverse-proxy setups. Closes #5728.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Clean, tiny feature. Fits well next to the existing "Copy note path to clipboard" menu item, uses the same `bx bx-link` icon convention and a translation key in `en/translation.json` under the existing `tree-context-menu` namespace. No shared-type changes needed.
|
||||
|
||||
**On the -2231 deletion count**: this is a merge artifact, NOT a real deletion. The diff shows the entire `apps/client/src/translations/en/translation.json` was rewritten (the whole file appears as removed and re-added with what looks like a reordered key layout), which is why the raw line totals are huge despite GitHub correctly labeling it `size:S`. The actual semantic change is ~14 lines of TS plus one translation key. The translation-file churn is likely from an earlier rebase against a main that reordered keys — it will cause the merge conflict and must be cleaned up.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Implementation in `tree_context_menu.ts` is 3 lines and correct. Breadcrumb change mirrors the same inline logic.
|
||||
- **Code duplication**: the URL-building `window.location.href.replace(/#.*$/, "")` logic is inlined in two places. Gemini correctly flagged this — a shared helper (e.g. `buildNoteUrl(notePath)` in `apps/client/src/services/link.ts` or similar) would be cleaner.
|
||||
- **Inconsistent UX feedback**: the tree context menu just calls `navigator.clipboard.writeText(...)` with no toast, while the breadcrumb version uses `copyTextWithToast(...)`. Gemini flagged this too. The tree version should also show a "Copied!" toast for consistency with the existing "Copy note path" flow.
|
||||
- `navigator.clipboard.writeText` is fine for Electron and HTTPS; over plain HTTP this can fail silently in some browsers. The existing "copy note path" has the same caveat, so not a regression.
|
||||
- The massive translation.json replacement must be resolved before merging — it will both create the conflict with main AND make the diff un-reviewable. A rebase against current main should shrink the real change to ~14 lines.
|
||||
|
||||
### Discussion Highlights
|
||||
Only Gemini has reviewed (code duplication + UX inconsistency). No human review. No author response. Completely stale since 2026-03-20.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The feature is genuinely useful and the core logic is right, but this PR needs:
|
||||
1. **Rebase to resolve the translation.json churn** — the 2231-line deletion is not a real change and must be cleaned up. Without this, the merge conflict cannot be resolved and the diff is unreviewable.
|
||||
2. Extract the URL-building logic into a shared helper used by both call sites.
|
||||
3. Use `copyTextWithToast` in the tree context menu for consistent UX feedback.
|
||||
4. Consider whether the menu item should also appear on the subtree export/share flows (not blocking).
|
||||
Once rebased and the two trivial fixes applied, this is an easy merge.
|
||||
@@ -1,35 +0,0 @@
|
||||
# PR #9140: Fixes #8676: Fix Chinese IME input in relation map
|
||||
|
||||
- **Author**: Dinis-Ou
|
||||
- **Branch**: `bug-fix_8676` -> `main`
|
||||
- **Status**: Draft, BLOCKED
|
||||
- **Size**: +108 -0 across 2 files
|
||||
- **Created**: 2026-03-22 | **Updated**: 2026-04-09
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass (Checks green; status shows only "main" check, blocked on review/draft)
|
||||
|
||||
## Summary
|
||||
Fixes #8676: when typing Chinese in a relation map's attribute-name input, the keyup-driven filter fired mid-composition and clobbered the intermediate pinyin, breaking IME input. Replaces the `keyup` handler with IME-aware `compositionstart`/`compositionend`/`input` events via a new exported `setupImeAwareInput()` helper, and adds unit tests covering mid-composition, post-composition, mixed Latin, and sequential compositions.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
The fix is in `apps/client/src/widgets/type_widgets/relation_map/RelationMap.tsx` — exactly where it belongs. The new helper is exported so the test file can import it, consistent with Trilium's vitest patterns. Tests use vitest + jquery the same way other client tests do. No translations, no API, no shared types needed — minimal blast radius.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- The logic is correct: set an `isComposing` flag on `compositionstart`, bail out of the input handler while true, clear on `compositionend` and filter once post-composition. This is the textbook fix for this class of bug.
|
||||
- Small concern: when `compositionend` fires in some browsers, a subsequent `input` event also fires. The current code handles both (post-composition input → filter; input with `isComposing=false` → filter) so behavior is consistent.
|
||||
- Minor: `setupImeAwareInput` is exported but only used internally (aside from tests). That's fine for testability.
|
||||
- There's a small DRY opportunity between the `compositionend` and `input` branches — both do the same `filterAttributeName` + `val()` dance. Gemini flagged this; a low-priority nit.
|
||||
- Gemini also flagged that the test's mock of `filterAttributeName` (`val.replace(/[^a-z0-9]/gi, '')`) does not match the real `utils.filterAttributeName` implementation, which may let tests pass while the real code misbehaves. Worth verifying the mock matches production behavior.
|
||||
- **Important integration concern**: the diff adds `setupImeAwareInput` as a standalone export, but I don't see a call-site change within `useRelationCreation` replacing the existing `$answer.on("keyup", ...)`. If the new helper is defined but not actually wired in, the fix won't take effect. Needs verification — the visible diff only shows the new function and tests.
|
||||
|
||||
### Discussion Highlights
|
||||
Gemini-code-assist flagged the mock mismatch and refactoring opportunity. Author pinged for review on 2026-03-30. No human review yet. Still in draft.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The approach is correct and well-tested, but before merging:
|
||||
1. Verify (and if missing, add) the call-site replacement so `setupImeAwareInput($answer)` is actually invoked from `useRelationCreation` in place of the old `keyup` handler. From the visible diff, only the helper and tests are added — the old `keyup` handler may still be running alongside.
|
||||
2. Align the test mock of `filterAttributeName` with the production implementation so tests reflect real behavior.
|
||||
3. Flip the PR out of Draft once those are resolved.
|
||||
Otherwise this is a solid, low-risk accessibility fix that should land.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #9151: A new about dialog
|
||||
|
||||
- **Author**: adoriandoran
|
||||
- **Branch**: `feat/about-dialog-overhaul` -> `main`
|
||||
- **Status**: Draft, CLEAN (mergeable)
|
||||
- **Size**: +670 -60 across 13 files
|
||||
- **Created**: 2026-03-23 | **Updated**: 2026-03-31
|
||||
- **Labels**: (none)
|
||||
- **CI**: pass (all checks green)
|
||||
|
||||
## Summary
|
||||
Completely overhauls the About dialog from a simple borderless table into a card-style layout with new SVG icons (default, nightly, classic/easter-egg), a dynamic contributors list loaded from a repo-committed `contributors.json`, build-info line, and a footer with GitHub/License/Donate links. Also adds a script to auto-refresh the contributors file from the GitHub API.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Author is a maintainer (MEMBER association), so the visual direction is presumably approved. The dialog is a Preact component using the existing `Modal`, `useTriliumEvent`, and `useTooltip` abstractions, which matches conventions. Translation keys are added only to `en/translation.json` per CLAUDE.md guidance. The build info uses `<Trans>` from react-i18next for the interpolated revision link, which is exactly the right call per the translation rules in CLAUDE.md. New types `Contributor`/`ContributorList` appear to go in `@triliumnext/commons` (correct shared-types location).
|
||||
|
||||
### Code Quality & Concerns
|
||||
- The translation file contains `"TODO"` placeholders for `role_brief_history.lead-dev` and `role_brief_history.original-dev`. These must be filled before merge — the PR is still marked draft likely for exactly this reason.
|
||||
- `onLoad` is declared with `useCallback(..., [])` but reads `appInfo` from the outer scope — classic stale-closure, will always see the initial `null`. In practice the `if (!appInfo)` check "works" only because the first fetch populates state, but Gemini flagged this and the fix hasn't landed in the review flow yet.
|
||||
- `CachedContributors` is created via `useMemo(() => memo(...), [])` — this works but is an unusual pattern; a plain memoized component factored out of the render function would be cleaner.
|
||||
- `createContributorHoverHandler` uses a `let timeoutID` without an explicit type and no cleanup on unmount; small leak risk if the dialog closes mid-hover.
|
||||
- CSS file uses body.light-theme/body.dark-theme nesting — consistent with existing `theme-next-light.css` patterns.
|
||||
- There's a theme-next-light.css tooltip background change from white to near-black bundled into this PR — unrelated to the about dialog and should probably be in a separate commit.
|
||||
- `contributors.json` is imported directly via `import contributors from "../../../../../contributors.json"` — a fragile deep relative import. Acceptable, but a shared alias would be nicer.
|
||||
- The update-contributor-list script (per Gemini summary) has untyped parameters in `contributorOrderer`.
|
||||
|
||||
### Discussion Highlights
|
||||
All reviews are from gemini-code-assist. Author triggered `/gemini review` twice after commits. Main flagged issues: stale closure in `onLoad`, missing `key` in list render, untyped script parameters, TODO translation placeholders, and word-break on long directory paths. No human review yet.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: The direction and styling are solid and it's a maintainer-authored PR, but it cannot merge in its current form because:
|
||||
1. TODO placeholders in `en/translation.json` (`role_brief_history.lead-dev`, `role_brief_history.original-dev`) must be real English text.
|
||||
2. Stale-closure bug in `onLoad` useCallback needs fixing (deps `[appInfo]` or a ref).
|
||||
3. Unrelated tooltip color change in `theme-next-light.css` should be split out or justified.
|
||||
4. Once the draft flag comes off and the TODOs are resolved, this should be a straightforward merge.
|
||||
@@ -1,50 +0,0 @@
|
||||
# PR #9153: feat(desktop): add trilium:// custom protocol handler and --open-note CLI arg
|
||||
|
||||
- **Author**: argusagent (CONTRIBUTOR)
|
||||
- **Branch**: `feat/trilium-protocol-handler` -> `main`
|
||||
- **Status**: Ready, UNSTABLE
|
||||
- **Size**: +125 -0 across 1 file
|
||||
- **Created**: 2026-03-23 | **Updated**: 2026-03-25
|
||||
- **Labels**: size:L
|
||||
- **CI**: mostly pass, but **E2E tests on linux-arm64: FAILURE**. Everything else green (main Checks, Analyze, Test development, E2E linux-x64, Docker build).
|
||||
|
||||
## Summary
|
||||
|
||||
Implements a `trilium://` custom URI scheme plus a `--open-note=<noteId>` CLI flag, entirely inlined into `apps/desktop/src/main.ts`. Three helpers (`parseTriliumUrl`, `extractTriliumUrlFromArgs`, `navigateToNote`) handle URL parsing, argv extraction, and window focus/navigation. Uses `open-url` on macOS and `second-instance`/argv on Windows/Linux. After review feedback, the author switched from a 1500ms `setTimeout` heuristic to event-driven `webContents.isLoading()` + `did-finish-load` + `browser-window-created`. Closes #649.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
- Desktop-only feature correctly scoped to `apps/desktop/src/main.ts`. Uses the existing `openInSameTab` IPC channel (no new channel needed).
|
||||
- No client-side UI affordances are added — users get deep-link support but no in-app way to **copy** a `trilium://` URL, which limits the practical utility.
|
||||
- Single-file change keeps blast radius small.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- **IMPORTANT — this PR competes with #9203** (phusi319, same branch name `feat/trilium-protocol-handler`). See PR #9203's review for the full comparison. In short, #9203 is a superset: it factors the logic into a dedicated `protocol-handler.ts` module and adds the missing "Copy note URL to clipboard" UI entries.
|
||||
- **CI failure**: E2E linux-arm64 is failing. The author never addressed this. For a desktop-only, Electron-specific change, an ARM64 Playwright failure could be unrelated flakiness or an actual regression in window lifecycle — worth re-running and investigating.
|
||||
- **AI-heavy contribution**: maintainer @eliandoran explicitly flagged this as feeling "a bit AI-heavy" and asked for the testing breakdown. The author's response is transparent: Windows was tested end-to-end including registry verification and cold/warm-start; macOS and Linux were **not manually tested**, only followed known Electron patterns. This is acceptable disclosure but means macOS and Linux code paths are unverified.
|
||||
- **Parser quality**: `parseTriliumUrl` handles both `trilium://note/<id>` and shorthand `trilium://<id>` correctly, with `try/catch` around `new URL()`. The argv extraction handles `--open-note=<id>` via regex and wraps matches into a synthetic `trilium://note/<id>` URL, which is a slightly odd shape (it re-serializes just to re-parse) but works.
|
||||
- **navigateToNote** checks `isDestroyed()` and handles minimized windows — good.
|
||||
- **No unit tests** for the pure functions. Both parsers are trivially testable and should have at least a small spec file.
|
||||
- **After review**, the author replaced the `setTimeout(1500)` heuristic with event-driven waiting — good engineering response.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- eliandoran pushed back on AI-heavy feel and asked for a testing matrix; author responded thoroughly.
|
||||
- Gemini-code-assist review flagged the `setTimeout` heuristic and a double-navigation case on macOS (argv + open-url both firing). Author addressed both in the latest commit.
|
||||
- No further maintainer review after the fixes.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**CLOSE in favour of #9203**, with thanks and acknowledgement.
|
||||
|
||||
Rationale:
|
||||
1. PR #9203 is a strict superset — same core feature with cleaner architecture (dedicated `protocol-handler.ts` module instead of inlining in `main.ts`) and includes the necessary UI affordances (Copy note URL in tree + breadcrumb context menus) that make the feature actually useful end-to-end.
|
||||
2. PR #9203's CI is fully green; this PR has an unresolved linux-arm64 E2E failure.
|
||||
3. Both share the same branch name, which suggests they may be closely related or even forked from each other — keeping both open is confusing.
|
||||
4. The author of this PR did responsive, constructive work addressing review feedback, so close with acknowledgement rather than dismissively.
|
||||
|
||||
Alternatively, if there is uncertainty about #9203's author responsiveness or there's any concern that #9203 might stall: **REQUEST CHANGES** here by asking for the linux-arm64 E2E failure to be investigated, unit tests for the parsers, and a follow-up PR adding "Copy note URL" UI. But the cleaner path is to consolidate on #9203.
|
||||
|
||||
@@ -1,65 +0,0 @@
|
||||
# PR #9188: feat: add link embed previews (mention, URL, embed)
|
||||
|
||||
- **Author**: stexz01 (Abrar Hussain)
|
||||
- **Branch**: `feat/link-embed-previews` -> `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +1367 -25 across 21 files
|
||||
- **Created**: 2026-03-26 | **Updated**: 2026-03-31
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: pass (Checks green at the time of last run; no full dev/E2E workflow trigger visible)
|
||||
|
||||
## Summary
|
||||
|
||||
Adds Notion-style link embed previews to rich-text notes. When a URL is pasted, a floating popup offers three conversion modes: **@ Mention** (inline favicon + title chip), **URL** (plain link, default), or **Embed** (YouTube iframe / OpenGraph card). New server endpoint `GET /api/link-embed/metadata` fetches OpenGraph metadata and favicons with SSRF protection. CKEditor plugin `linkembed.ts` introduces two model elements (`linkEmbed` block widget, `linkMention` inline widget). Works in editable, read-only, and shared/published notes. 14 unit tests added for URL parsing utilities.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
- **Shared types in commons**: The PR correctly adds `packages/commons/src/lib/link_embed.ts` with `LinkEmbedMetadata` and re-exports it from the package index. Aligns with the shared-types policy.
|
||||
- **New CKEditor plugin in `packages/ckeditor5/src/plugins/`** (`linkembed.ts`) registered via `plugins.ts` — follows the documented pattern for adding custom plugins. Also introduces a helper `widget_utils.ts` and a new icon.
|
||||
- **Client service** `link_embed.ts` uses the existing `server` wrapper and caches metadata requests, deduping concurrent calls — sensible.
|
||||
- **Server route** `apps/server/src/routes/api/link_embed.ts` registered in `routes.ts`. Uses SSRF protection (blocks private IPs per the PR description).
|
||||
- **Share renderer** updated (`apps/server/src/share/content_renderer.ts`) so embeds render in public/share notes too.
|
||||
- **Dialog** (`apps/client/src/widgets/dialogs/link_embed.tsx`) uses Preact hooks and the existing `Modal`/`Button`/`FormGroup` React components — consistent with the in-progress Preact migration.
|
||||
- **Translation hygiene issue**: String literals like `"Insert link"`, `"URL"`, `"Paste as"`, `"@ Mention"`, `"Embed"` are hardcoded in `link_embed.tsx` rather than using `t()` from i18next. Per CLAUDE.md, these should be added to `en/translation.json`. This is a must-fix before merge.
|
||||
- **CSS footprint**: New `LinkEmbed.css` file in `widgets/type_widgets/text/` — 256+ lines. Self-contained, seems fine.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- **Merge conflicts** (DIRTY): Needs rebase against main. Given the CKEditor plugin registration and router changes, conflicts are likely in `plugins.ts` and `routes.ts`.
|
||||
- **Tests exist but thin**: `link_embed.spec.ts` covers `extractYouTubeVideoId`, `detectEmbedType`, `safeHostname` — good for URL parsing, but no tests for the actual CKEditor plugin behaviour, metadata fetching with mocked responses, or the SSRF protection. The SSRF guard is the highest-risk new server code and should have a dedicated spec.
|
||||
- **SSRF protection**: The PR description claims it blocks private IPs, but the actual implementation needs review against the guidance in PR #9296's `url_validator.ts` (use Node built-ins for IP parsing). These two PRs overlap in scope and should ideally share a single SSRF helper in `@triliumnext/commons` or a shared server service.
|
||||
- **YouTube referrerpolicy/cookies**: Uses `youtube-nocookie.com` embed with `rel=0` — privacy-conscious, good.
|
||||
- **Favicon fallback** hits `https://www.google.com/s2/favicons?...` — introduces a third-party dependency on Google for every mention without a favicon. Consider proxying through the server or at least making this a configurable option, since privacy-minded users will object.
|
||||
- **OpenGraph fetch has no content-type check** visible in the diff I read; ensure the server validates `Content-Type: text/html*` before parsing, enforces a max body size, and uses a short timeout. Worth asking.
|
||||
- **Read-only + share rendering**: `renderPreview()` is shared between editable and read-only contexts, and the share `content_renderer.ts` is also touched — good coverage. But this means any XSS in OpenGraph `title`/`description` propagates to shared pages, so server-side output escaping is critical.
|
||||
- **@ mention UX**: inline chip with favicon + title — nice UX but semantically these are inline widgets. Ensure they round-trip correctly through export/import (Markdown, HTML, sync) and that search indexes the title text.
|
||||
- **Gemini review feedback** (from the PR summary): unused parameters, complex JSX refactorable to mapping objects, better error logging, centralize duplicated regex patterns. Should be addressed.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- Author posted a screenshot demo (2 thumbs up).
|
||||
- Only an automated gemini-code-assist review so far; no human maintainer review.
|
||||
- No questions answered by the author yet on the substantive security/i18n concerns.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**REQUEST CHANGES**: This is a substantial, well-structured feature that would be a nice user-facing win, but it can't merge as-is.
|
||||
|
||||
Must-fix before merge:
|
||||
1. **Translation keys** — replace all hardcoded English strings in `link_embed.tsx` with `t()` calls, and add entries to `en/translation.json`.
|
||||
2. **Rebase onto main** to resolve conflicts.
|
||||
3. **SSRF protection test coverage** — add a spec that verifies private/loopback/link-local IPs are blocked; consider sharing the validator with PR #9296's `url_validator.ts` if it lands.
|
||||
4. **OpenGraph fetch hardening** — confirm content-type check, max body size, and request timeout are in place.
|
||||
5. **Output escaping** — ensure titles/descriptions rendered in the share view and DOM are safely escaped (DOMPurify or equivalent on server + client).
|
||||
6. **Favicon privacy** — at minimum document the Google favicon fallback; ideally make it configurable or proxy through the server.
|
||||
7. Address gemini feedback on dead parameters and duplicated regex.
|
||||
|
||||
Nice-to-have:
|
||||
- CKEditor plugin integration tests.
|
||||
- Anchor support alongside the URL parser (re: request from #9203).
|
||||
- Document behavior of the new model elements in export/import flows.
|
||||
|
||||
Do not close — this is a valuable feature and the author has clearly put work into it.
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
# PR #9189: Standalone
|
||||
|
||||
- **Author**: eliandoran (maintainer — this is the repo owner's own WIP)
|
||||
- **Branch**: `standalone` -> `main`
|
||||
- **Status**: **Draft**, UNSTABLE
|
||||
- **Size**: +23099 -17201 across 469 files
|
||||
- **Created**: 2026-03-26 | **Updated**: 2026-04-09
|
||||
- **Labels**: size:XXL
|
||||
- **CI**: mostly green — main Checks, Dev, Docker, E2E (linux-x64 & linux-arm64), i18n, Deploy Standalone App, and Deploy Documentation all pass. Only one **CodeQL** job reports FAILURE (likely a precision warning or security hotspot).
|
||||
|
||||
## Summary
|
||||
|
||||
This is the repo owner's in-progress **standalone/browser-only** client refactor. Introduces a whole new `apps/client-standalone/` application that runs the Trilium client in a browser without a Node.js backend, using a SQLite-WASM backend via a dedicated service worker (`local-server-worker.ts`, `sw.ts`) and provider modules for CLS, crypto, messaging, platform, request, SQL, translation, and zip export. The standalone client has its own Vite config, HTML entrypoint, manifest, PWA headers, and CI deploy workflow (`.github/workflows/deploy-app.yml`) that pushes to `https://pr-<num>.trilium-app.pages.dev` and `https://app.triliumnotes.org`. It also touches CLAUDE.md, many client widgets (formatters, dialogs, FormRadioGroup, etc.), `apps/client/src/setup.tsx` (rewriting the setup UI from `.ts` to `.tsx`), Electron's main process for the new protocol provider, and deletes all non-English server translation JSONs (+0/-41 in each — those translation files are being managed differently going forward).
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
This is a major architectural direction: moving toward a runnable-in-browser Trilium with a service-worker-hosted SQLite backend. It's clearly the maintainer's own strategic work and extends the existing three-layer cache model (Becca/Froca/Shaca) with a new client-side provider abstraction layer so the same Froca-based UI can run either against a Node server, Electron, or entirely in a browser. The `platform_provider.ts` + `crypto_provider.ts` + `sql_provider.ts` split follows the existing pattern of app-specific providers.
|
||||
|
||||
A live preview deploy exists at `https://pr-9189.trilium-app.pages.dev`. There is also a documentation preview at `https://pr-9189.trilium-docs.pages.dev`. Both are wired into CI.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
As a WIP draft PR from the maintainer, the goal of this review is *direction*, not line-by-line critique. Observations:
|
||||
|
||||
- **Status**: Draft. Not intended for merge yet. The single open item in the PR body checklist is resolving a pnpm-lock.yaml conflict from merging `origin/main` — already resolved via copilot-swe-agent in commit 12b946157.
|
||||
- **CI health is strong** for a PR of this size: only a CodeQL check failure (the description mentions "hardcoded secrets, high-severity issues with service worker configuration and synchronous crypto API usage, and potential CORS misconfigurations" — those came from the initial gemini review and are legitimate flags that a standalone browser app has to address carefully).
|
||||
- The client-side API restrictions in CLAUDE.md warn against `crypto.randomUUID()` in contexts that require secure contexts. A standalone PWA running over HTTPS can safely use Web Crypto, but the same code path still has to work for the Electron/server client where HTTP is allowed. The `crypto_provider.ts` abstraction is the right fix for this.
|
||||
- The deletion of non-English `apps/server/src/assets/translations/<lang>/server.json` (+0/-41 everywhere) — worth double-checking this doesn't break runtime loading of translated hidden-subtree titles. Probably these are being regenerated by Weblate or moved.
|
||||
- Large churn in `apps/client/src/setup.tsx` (replaces the old `.ts` setup flow with a `.tsx` Preact-based one) — expected as part of the Preact migration visible elsewhere in the tree.
|
||||
- Two `github-advanced-security` comment reviews and the one gemini review include unaddressed-looking feedback. Given this is draft, that's expected.
|
||||
- CLAUDE.md itself is updated substantially (+174/-112); this is notable because the project conventions file is being reshaped as part of this refactor.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- Preview deployments for both app and docs are automated and working.
|
||||
- Maintainer pinged `@copilot` to resolve the pnpm-lock conflict; copilot-swe-agent did so and reported the exact resolution (keep standalone's `react-i18next@17.0.0` with `typescript@5.9.3`, bump `react-i18next@17.0.1` to `typescript@6.0.2`).
|
||||
- No external human reviewers — consistent with a maintainer-owned WIP.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**No action — this is the maintainer's WIP draft.**
|
||||
|
||||
- Keep as draft until:
|
||||
1. The CodeQL failure is investigated (likely service-worker scope, sync-crypto, or CORS flags that need to be acknowledged or fixed).
|
||||
2. The initial gemini feedback on hardcoded secrets, service worker config, sync crypto API, and CORS is addressed or intentionally deferred.
|
||||
3. A plan is in place for the deleted non-English `server.json` files (regenerate via Weblate? Move to commons?).
|
||||
- Consider splitting the CLAUDE.md update out into its own PR so documentation improvements can land independently of the standalone refactor.
|
||||
- The Preact-ification of `setup.ts` -> `setup.tsx` might also make sense as a separate smaller PR if it can stand alone.
|
||||
|
||||
Do not close. This is strategic direction work by the repo owner.
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
# PR #9190: feat: add download button for backups
|
||||
|
||||
- **Author**: Lorinc936
|
||||
- **Branch**: `main` -> `main` (author branched from their fork's `main`)
|
||||
- **Status**: Ready, BLOCKED (probably branch-protection admin merge, not CI)
|
||||
- **Size**: +60 -21 across 7 files
|
||||
- **Created**: 2026-03-26 | **Updated**: 2026-04-09
|
||||
- **Labels**: size:M, **lgtm** (already approved by maintainer)
|
||||
- **CI**: pass (Checks green)
|
||||
|
||||
## Summary
|
||||
|
||||
Adds a "Download" button next to each existing backup row in the Backup settings screen, letting users pull a backup file directly through the browser. Closes #8941.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
- Adds a new server route `GET /api/database/backup/download` in `apps/server/src/routes/api/database.ts` and registers it in `routes.ts` under `auth.checkApiAuthOrElectron` (no CSRF since it's a GET download — consistent with the existing backup listing route).
|
||||
- Client-side adds a Download button in `apps/client/src/widgets/type_widgets/options/backup.tsx`, using a plain `<a href=... download>` wrapper around the existing `Button` component. Simple and correct.
|
||||
- Documentation updated in `docs/User Guide/User Guide/Installation & Setup/Backup.md`.
|
||||
- Translation keys added to `en`, `ar`, and `es` translation files — note that per CLAUDE.md, only `en` should be touched and others should be managed via Weblate. This is a minor convention violation but not harmful; the ar/es entries will eventually be overwritten by Weblate.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- **Path traversal guard is correct**: `path.resolve(filePath)` is compared against `path.resolve(dataDir.BACKUP_DIR) + path.sep` using `startsWith`. Adding the `path.sep` prevents a `/data/backups-evil` bypass. Good.
|
||||
- `fs.existsSync` followed by `res.download` — standard pattern for Express downloads.
|
||||
- Uses `req.query.filePath` which is fine, but the client passes the **full filesystem path** from the backup listing endpoint; it would be slightly cleaner to pass just the basename and resolve it server-side. Not a security issue given the guard, just API shape.
|
||||
- Imports were reordered in `database.ts` (changing CommonJS-style require-like ordering to sorted imports). That's a drive-by cleanup — harmless.
|
||||
- Client file touches cosmetic whitespace/semicolons in addition to the feature — minor noise in the diff but doesn't change behaviour.
|
||||
- Adds a 3rd table column with `col width="1%"` for the download button. Standard technique.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- Approved by **@eliandoran** on 2026-04-06 (lgtm label applied).
|
||||
- Automated gemini review gave no feedback.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**MERGE**: Already approved by the maintainer, CI is green, path-traversal guard is sound, small focused change. The only nit is that ar/es translations were modified directly — ignore for a single-key addition; Weblate will reconcile. Ready to merge.
|
||||
|
||||
@@ -1,71 +0,0 @@
|
||||
# PR #9203: feat: register trilium:// custom protocol handler for deep linking
|
||||
|
||||
- **Author**: phusi319 (Phu Si On, NONE)
|
||||
- **Branch**: `feat/trilium-protocol-handler` -> `main`
|
||||
- **Status**: Ready, BLOCKED
|
||||
- **Size**: +180 -0 across 6 files
|
||||
- **Created**: 2026-03-27 | **Updated**: 2026-03-29
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass (Checks green; no E2E/dev run triggered because it only touches desktop+client menus)
|
||||
|
||||
## Summary
|
||||
|
||||
Implements a `trilium://` custom URI scheme so external apps, the OS, or CLI invocations can launch the Trilium desktop app and navigate directly to a specific note. Adds a dedicated `protocol-handler.ts` module (not inlined into `main.ts`), handles macOS `open-url` cold-start via a pending-note queue, reuses the existing `openInSameTab` IPC channel, and gracefully waits for the renderer via `did-finish-load` (no `setTimeout` heuristic). Also adds "Copy note URL to clipboard" entries in both the tree context menu and the breadcrumb context menu. Closes #649.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
- Desktop-only feature that correctly lives in `apps/desktop/src/` (protocol handler) + `apps/client/src/` (UI affordances).
|
||||
- Uses existing `openInSameTab` IPC channel rather than inventing a new one, which is the right call and matches the "tray open" path.
|
||||
- Translation key added to `apps/client/src/translations/en/translation.json` only, per CLAUDE.md policy.
|
||||
- Adds `copyNoteUrlToClipboard` to the client `CommandMappings` union — small, idiomatic extension.
|
||||
- The navigation logic is careful about minimized windows (`restore()` + `show()` + `focus()`) and destroyed windows.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- **IMPORTANT — This PR competes with #9153** (argusagent), which implements the same `trilium://` protocol feature on the same branch name (`feat/trilium-protocol-handler`). See "Duplicate flag" below.
|
||||
- `protocol-handler.ts` is cleanly organized, exports a default object (consistent with other service modules in the codebase).
|
||||
- `parseTriliumUrl()` correctly handles both canonical (`trilium://note/<id>`) and shorthand (`trilium://<id>`) formats, filters empty path segments, and returns `null` on parse failures.
|
||||
- `navigateToNote()` has proper `isDestroyed()` check, handles `isLoading()` state with `did-finish-load` (no timeouts — this is the cleanest approach).
|
||||
- macOS cold-start handled via a `pendingNoteId` queue that gets drained after `onReady()` — correct, because `open-url` fires before `ready`.
|
||||
- The "Copy note URL" breadcrumb handler builds the URL via `notePath?.split("/").pop()` — fine for the empty-area menu, but there's no validation that the noteId looks reasonable. Minor.
|
||||
- Missing: no unit tests for `parseTriliumUrl` or `extractNoteIdFromArgs`. Both are pure functions and trivially testable — would be worth adding.
|
||||
- Missing: no anchor/section support (user `arigit` asked about this in comments; the author acknowledged it as a future extension).
|
||||
|
||||
### Duplicate flag — compare with #9153
|
||||
|
||||
**Both PRs use the same branch name `feat/trilium-protocol-handler` and implement the same `trilium://` feature.** They are from different authors (phusi319 here, argusagent in #9153). Comparison:
|
||||
|
||||
| Aspect | #9203 (phusi319) | #9153 (argusagent) |
|
||||
| ------------------------------ | --------------------------------------------- | ----------------------------------------------------- |
|
||||
| Size | +180/-0 across 6 files | +125/-0 across 1 file |
|
||||
| Structure | New `protocol-handler.ts` module | Helpers inlined in `main.ts` |
|
||||
| UI affordances | Adds "Copy note URL" to tree + breadcrumb | None |
|
||||
| Wait strategy | `webContents.isLoading()` + `did-finish-load` | Same (after review feedback, replaced earlier 1500ms) |
|
||||
| macOS cold-start pending queue | Explicit `pendingNoteId` field | Uses `browser-window-created` once-listener |
|
||||
| CI | Green | E2E linux-arm64 failure |
|
||||
| Author maintainer response | None yet | Answered eliandoran's testing question |
|
||||
|
||||
**#9203 is essentially a superset and more cleanly factored** (dedicated module, better testability, UI integration included). They are clearly variants of the same idea — possibly #9203 was written after seeing #9153, or both authors independently attacked issue #649.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- `arigit` asked about anchor-level scrolling (`trilium://note/<id>#<anchor>`); phusi319 acknowledged it as a future enhancement and offered to add it in this PR if desired. No answer from maintainers.
|
||||
- Two automated reviews (gemini-code-assist and copilot-pull-request-reviewer) ran; no human maintainer review yet.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**MERGE (with minor changes)** — prefer this PR over #9153.
|
||||
|
||||
Rationale:
|
||||
1. Cleaner architecture: dedicated `protocol-handler.ts` module instead of inlining in `main.ts`.
|
||||
2. Includes the UI side ("Copy note URL to clipboard") that users actually need for the workflow to be useful.
|
||||
3. Uses the event-driven `did-finish-load` approach from the start (no `setTimeout` heuristic baggage).
|
||||
4. CI is green.
|
||||
|
||||
Before merging:
|
||||
- Ask author to add simple unit tests for `parseTriliumUrl` and `extractNoteIdFromArgs` (pure functions, trivial to test).
|
||||
- Decide whether to land anchor support now or defer to a follow-up (user-visible request from the comments).
|
||||
- **Close #9153 in favour of this PR**, acknowledging both contributors.
|
||||
|
||||
@@ -1,59 +0,0 @@
|
||||
# PR #9296: Feat/fun take1
|
||||
|
||||
- **Author**: perfectra1n (Jon Fuller, MEMBER)
|
||||
- **Branch**: `feat/fun-take1` -> `main`
|
||||
- **Status**: Ready, DIRTY (merge conflicts)
|
||||
- **Size**: +2332 -93 across 45 files
|
||||
- **Created**: 2026-04-05 | **Updated**: 2026-04-06
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: multiple FAILURES (Deploy Documentation, Dev test development, Playwright linux-x64 and linux-arm64)
|
||||
|
||||
## Summary
|
||||
|
||||
Despite the obscure "Feat/fun take1" title, this is actually a sweeping **security/RCE hardening** PR. It introduces client-side HTML sanitization (DOMPurify), an SVG sanitizer, a safe template evaluator replacing `eval()`, a config-gated scripting system (backend/frontend scripts disabled by default on servers), SSRF protection for image downloads, path traversal guards for file uploads and backups, session regeneration, and Electron security fuses. There is also a `docs/plans/2026-02-19-rce-hardening-design.md` design document.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
Strongly aligned with ongoing security concerns. Touches the three-layer cache/share system (`share/content_renderer.ts`, `share/routes.ts`), route handlers (`routes/api/*`), and core services (`backup.ts`, `bulk_actions.ts`, `notes.ts`, `script_context.ts`). The new modules — `safe_template.ts`, `scripting_guard.ts`, `svg_sanitizer.ts`, `url_validator.ts`, client `sanitize_content.ts` — are well-named, well-placed, and follow the project structure. The server sanitizer mirrors `SANITIZER_DEFAULT_ALLOWED_TAGS` from `@triliumnext/commons`, which is the right pattern per the shared-types policy in CLAUDE.md.
|
||||
|
||||
The config-gated script execution is a major behavioural change: any existing user relying on backend/frontend scripts on a server deployment will need to explicitly opt in via config. This is defensible from a security standpoint but needs clear release notes and a migration path.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- **Scale vs. title**: The PR title "Feat/fun take1" is completely misleading for a 2300-line security-critical change. This should be renamed before merge to something like "feat(security): RCE hardening, HTML/SVG sanitization, and script execution gating".
|
||||
- **CI failures are serious**: Playwright E2E (both archs), unit test dev workflow, and docs deploy are all red. For a security-hardening PR these must be green before merge — E2E failures likely indicate the new sanitizer is stripping legitimate content or the scripting guard is breaking existing functionality.
|
||||
- **Merge conflicts**: dirty against main, needs rebase.
|
||||
- **Gemini review flags** (from the summaries in the PR):
|
||||
- Invalid Electron version in desktop package config (critical)
|
||||
- Regex discrepancy in document name sanitizer
|
||||
- Use `path.join` for cross-platform compatibility
|
||||
- Add security logging for blocked module access
|
||||
- Optimize regex compilation in SVG sanitizer
|
||||
- Use built-in utilities for IP parsing (the `url_validator.ts` SSRF logic)
|
||||
- **Dependency-of-a-dependency**: Relies on DOMPurify as a transitive dep from mermaid. That's fragile — should be declared as a direct dep of the client package.
|
||||
- **Design doc in `docs/plans/`**: good for traceability but per the CLAUDE.md conventions, ensure this belongs in the checked-in docs (not the public User Guide).
|
||||
- **Breaking change surface**: disabling scripts by default on servers and adding an aggressive sanitizer will likely surface regressions. The 45-file blast radius across routes, services, and share rendering is significant.
|
||||
- **Scripting guard spec exists** (`scripting_guard.spec.ts`, `svg_sanitizer.spec.ts`, `sanitize_content.spec.ts`) which is good — at least the new primitives have test coverage.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- Two gemini-code-assist review passes with concrete feedback (Electron version, regex, path handling, logging, SSRF utilities).
|
||||
- Author triggered `/gemini review` themselves; no other human reviewers have weighed in yet.
|
||||
- No discussion on the rename or the E2E failures.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**REQUEST CHANGES**: The substance of the PR is important and well-motivated, but it is not mergeable in its current form.
|
||||
|
||||
1. **Rename the PR** to accurately describe a security-hardening change; "Feat/fun take1" will confuse reviewers and the git log.
|
||||
2. **Fix CI**: all Playwright + Dev workflow failures must be investigated — these are the most important signal about regressions the sanitizer/guard might cause.
|
||||
3. **Resolve merge conflicts** against main.
|
||||
4. **Address gemini feedback**, especially the Electron version and SSRF IP parsing.
|
||||
5. **Split if possible**: DOMPurify sanitization, SVG sanitizer, script guard, session fixation, and Electron fuses are conceptually separable and would be easier to review individually. Given this is from a repo member, splitting could also avoid merge conflicts recurring.
|
||||
6. **Promote DOMPurify to a direct dependency** of the client.
|
||||
7. **Write release notes** explaining the scripting-default-off change.
|
||||
|
||||
Do not close — this is important work. But it needs another iteration.
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
# PR #9307: Update dependency minimatch@3>brace-expansion to v5
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/minimatch3-brace-expansion-5.x` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +4 -21 across 2 files
|
||||
- **Created**: 2026-04-06 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, Docker builds, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of a pnpm **override**: `minimatch@3>brace-expansion` is changed from `^1.1.13` to `^5.0.0`. This forces any transitive `minimatch@3.x` consumer to use `brace-expansion@5` instead of 1.1.13, eliminating the old `balanced-match@1.0.2` / `concat-map@0.0.1` tree.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
This is a security-flavored transitive hardening. The repo already pins several overrides (`handlebars`, `qs`, `serialize-javascript`, `webpack`) in the root `package.json`, so adding/updating one more is fully in keeping with the project's supply-chain hygiene pattern. The earlier override was a workaround for a ReDoS-style issue in `brace-expansion@1.x`; v5 is the current line and removes the workaround's age.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Major override bump (1 → 5), but applied at the pnpm-overrides layer rather than at a direct dependency. Risk is bounded to whatever `minimatch@3` consumers exist transitively.
|
||||
- The lockfile diff shows `balanced-match@1.0.2`, `brace-expansion@1.1.13`, and `concat-map@0.0.1` all being removed — only `balanced-match@4.0.3` / `brace-expansion@5.0.5` remain. Net is `-21/+4`, so the tree is strictly simpler post-merge.
|
||||
- `minimatch@3.1.5` snapshot is now resolved with `brace-expansion: 5.0.5`, confirming the override is reaching its target.
|
||||
- brace-expansion@5 requires Node 18/20/>=22, which matches Trilium's Node baseline.
|
||||
- Full CI pass across Checks, Dev, playwright linux-x64/arm64, and both Docker images — this is strong signal given that minimatch is a foundational utility used by globbing all over the toolchain.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion, no reviews.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Clean supply-chain tightening with a net reduction in the dependency graph, CI fully green. The security rationale (staying on the current brace-expansion line) mirrors existing overrides in the same `package.json`.
|
||||
@@ -1,43 +0,0 @@
|
||||
# PR #9316: Feat/llm chat enhancements
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-chat-enhancements` → `main`
|
||||
- **Status**: Draft, DIRTY (merge conflicts)
|
||||
- **Size**: +1418 -100 across 33 files
|
||||
- **Created**: 2026-04-06 | **Updated**: 2026-04-07
|
||||
- **Labels**: size:XXL, merge-conflicts
|
||||
- **CI**: pass (last run before conflicts)
|
||||
|
||||
## Summary
|
||||
Umbrella PR bundling seven features: Ollama provider, note mutation tools, tool approval system, knowledge base mode, stop generation button, Tavily/SearXNG web search engines, and configurable search timeout. Per a maintainer comment, the author was asked on 2026-04-07 to split this into smaller PRs — which resulted in PRs #9338, #9339, #9340, #9341, #9342, #9343.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
This is the original combined PR. The individual split PRs (#9338–#9343) are the maintainer-requested breakdown of this work. As a single PR it is too large and too cross-cutting to review as one unit — touching providers, tool registry, stream protocol, UI, options, docs, and i18n simultaneously. The split PRs are the right level for individual review.
|
||||
|
||||
Conceptually the feature set is strong and well-aligned with Trilium's direction:
|
||||
- Ollama brings local/self-hosted LLM support.
|
||||
- Tool approval + mutation tools adds agentic capability with a safety gate.
|
||||
- KB mode aligns with the note-taking use case.
|
||||
- Stop generation and web search are polish/QoL.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Superseded by the split PRs**. All seven features are represented in #9338–#9343. This PR should not be merged as-is.
|
||||
- **Merge conflicts**: status is `DIRTY` / `CONFLICTING` against `main` — since the split PRs have moved on, this branch is stale.
|
||||
- **Draft**: correctly marked as draft.
|
||||
- The review comments on this PR (`gemini-code-assist`) flagged three issues that have all been addressed in the split PRs:
|
||||
- KB preview performance (markdown → HTML strip): fixed in #9343
|
||||
- Missing Ollama fetch timeout: fixed in #9338
|
||||
- `rename_note` missing title validation: fixed in #9339
|
||||
- The author confirmed testing was done with gemma4:27b, gemma3:27b, qwen3.5:27b, and mistral-small3.2:24b — with mixed results. Only gemma4:27b works well; others have tool-calling or iteration issues. The author correctly noted this is a local-model limitation not a Trilium bug, and the architecture is designed to be extensible.
|
||||
- The author explicitly confirmed the tool approval system holds up against attempts to bypass it, even with lower-quality models — important validation of the security gate in #9340.
|
||||
|
||||
### Discussion Highlights
|
||||
- 2026-04-06: gemini-code-assist automated review (3 concerns, all since fixed).
|
||||
- 2026-04-06: @eliandoran asked what Ollama models had been tested.
|
||||
- 2026-04-07: @Kureii replied with detailed test matrix (gemma4:27b works, others partial/broken), and reported fixes for the 3 gemini concerns.
|
||||
- 2026-04-07: @eliandoran requested the PR be split into per-feature PRs for easier review. This request was acted on and the split PRs now exist.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE**: This PR has been split into #9338–#9343 at the maintainer's request. The split PRs contain the same commits, rebased and scoped. Keeping #9316 open risks double-review and accidental merge of the stale/conflicted branch. Close with a pointer to the split PRs and thank the author for doing the split work. If the author wants to track the overall series, use a GitHub tracking issue or project board rather than this draft PR.
|
||||
@@ -1,29 +0,0 @@
|
||||
# PR #9334: Update dependency eslint-linter-browserify to v10.2.0
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/eslint-linter-browserify-10.x` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +7 -6 across 2 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, Docker builds, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of `eslint-linter-browserify` from 10.1.0 to 10.2.0 in `packages/codemirror`. Minor release that tracks upstream ESLint 10.2.0.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
`eslint-linter-browserify` provides in-browser ESLint for Trilium's CodeMirror integration, enabling live lint feedback inside code notes. Keeping it aligned with the upstream `eslint` version already used in the repo (the lockfile already resolves `eslint@10.2.0`) is the right move.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Minor bump (10.1.0 → 10.2.0) — no changelog detail is published beyond the compare link, but it tracks the upstream ESLint minor.
|
||||
- Single workspace consumer (`packages/codemirror`) — small blast radius.
|
||||
- Whole suite of E2E tests, including playwright on both arches, runs green — includes whatever exercises the code-note editor.
|
||||
- Peer/bundled ESLint version in the lockfile already points at 10.2.0, so the browserify wrapper is catching up. No risk of version skew.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion, no reviews.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Trivial minor bump, single consumer, CI green. Aligns the browser ESLint build with the project's own ESLint version.
|
||||
@@ -1,30 +0,0 @@
|
||||
# PR #9335: Update dependency fuse.js to v7.3.0
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/fuse.js-7.x` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +6 -6 across 2 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, Docs deploy, Docker builds, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of `fuse.js` from 7.2.0 to 7.3.0 inside `packages/share-theme`. Minor release adding features and bug fixes around fuzzy search, BigInt support, and diacritic handling.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
`fuse.js` is consumed by the `share-theme` package, which powers fuzzy search on publicly shared notes (Shaca / share UI). A minor bump that strengthens diacritic handling and fixes extended-search edge cases is directly beneficial to that feature. Only this single workspace package consumes it.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Minor bump (7.2.0 → 7.3.0) — should be backward-compatible per semver.
|
||||
- Notable additions: BigInt indexing support, `Fuse.match()` static helper, token search with IDF scoring, keyless string entries in logical queries.
|
||||
- Notable fixes: diacritic stripping for non-decomposable characters (likely helps non-English search in share-theme), overlapping match-index merging, quoted tokens with inner spaces, inverse patterns across multiple keys.
|
||||
- No existing API should break; the existing `Fuse` constructor path is unchanged.
|
||||
- Docs preview was built for this PR and passes — confirms the share-theme consumer still builds.
|
||||
|
||||
### Discussion Highlights
|
||||
A github-actions bot comment indicates the documentation preview was successfully generated (https://pr-9335.trilium-docs.pages.dev). No human reviewer comments.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Clean minor bump, single consumer, CI and docs preview both green. The fix for non-decomposable diacritics is a nice incidental improvement for international shared notes.
|
||||
@@ -1,31 +0,0 @@
|
||||
# PR #9338: feat(llm): add Ollama provider support
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-ollama-provider` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +252 -26 across 9 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds a new `OllamaProvider` that talks to a local Ollama instance via its OpenAI-compatible `/v1` endpoint and discovers models dynamically from `/api/tags`. Introduces optional API-key / base-URL fields on `AddProviderModal`, converts `getModels` to an async route, and adds a "Free" label for zero-cost models.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Fits cleanly into the existing LLM provider abstraction. `OllamaProvider extends BaseProvider` and reuses the `@ai-sdk/openai` SDK the way it is done for OpenAI, which is a nice minimal-delta approach. Provider registration in the factory map (`apps/server/src/services/llm/index.ts`) mirrors the Anthropic/OpenAI/Google pattern. The `needsApiKey`/`needsBaseUrl` metadata on `PROVIDER_TYPES` is a forward-looking extension point for any future self-hosted providers (LMStudio, vLLM, etc.). Translation keys (`llm_chat.free`, `llm.base_url`) are correctly placed in `en/translation.json` only, consistent with project i18n policy.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Architecture is sound, but `loadModels()` is called as an explicit side-effect from three call sites (`streamChat`, `chat_title`, `getAllModels`) via `instanceof OllamaProvider` checks. That is a leaky abstraction — a provider-level `async init()` hook on `BaseProvider` would be cleaner and avoid provider-specific branches in shared code. Gemini raised a similar "caching/avoid re-fetch" concern; the `modelsLoaded` flag does cache per instance, but the cached provider lives in `cachedProviders[config.id]`, so a server restart or new config still hits `/api/tags`. Acceptable for now.
|
||||
- The `loadModels()` method has a `timeout: AbortSignal.timeout(5000)` — good, this was addressed in response to PR #9316 review.
|
||||
- `titleModel` heuristic (`parseParamSize < 4B` or regex on names) is a reasonable heuristic but will silently fall back to the default (often 27B+) model for anything without parameter metadata, meaning chat title generation on Ollama may be slow. Worth a note but not blocking.
|
||||
- `PROVIDER_TYPES` array in `AddProviderModal.tsx` is mutated by the form state (`defaultBaseUrl` lookup) but also re-rendered as a plain const — fine, no shared mutation.
|
||||
- No tests for the new provider. Given how other providers are tested (or not), this is consistent with the rest of the codebase.
|
||||
- Security: Ollama default `http://localhost:11434` is fine, but since users can paste any base URL, the server will happily make outbound fetches to arbitrary URLs on behalf of any authenticated user. Not a regression vs. the existing "paste API key" flow but worth thinking about in the context of SSRF hardening later.
|
||||
|
||||
### Discussion Highlights
|
||||
One automated review from `gemini-code-assist` suggesting simplifying redundant logic in `getAllModels` and caching loaded models to avoid unnecessary fetches. No human reviews. No merge conflicts.
|
||||
|
||||
## Recommendation
|
||||
**MERGE** (after optional cleanup): This is the foundation the rest of the LLM series builds on and the cleanest PR of the batch. Works, tests pass, no i18n violations. Optional follow-up: refactor the three `instanceof OllamaProvider` branches into a `BaseProvider.ensureInitialized()` hook so future async-discovery providers don't each need three touch-points. Safe to merge as-is since the abstraction leak is small and contained.
|
||||
@@ -1,42 +0,0 @@
|
||||
# PR #9339: feat(llm): add note mutation tools (rename, delete, move, clone)
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-note-mutation-tools` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +170 -2 across 4 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-09
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds four new mutating LLM tools — `rename_note`, `delete_note` (in `note_tools.ts`), `move_note`, `clone_note` (in `hierarchy_tools.ts`) — plus a shared `PROTECTED_SYSTEM_NOTES` set in `helpers.ts`. All four are marked `mutates: true` so they integrate with the approval system in PR #9340. English translation keys are added under `llm.tools.*`.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Follows the `defineTools({...})` convention from CLAUDE.md perfectly: Zod `inputSchema`, `description`, `mutates: true`, and synchronous `execute` functions. Uses the existing `branchService.moveBranchToNote` and `cloningService.cloneNoteToParentNote` internal services — it does not re-invent mutation logic or bypass Becca. Translation keys are placed only in `en/translation.json` under `llm.tools.*` with imperative phrasing ("Rename note", "Delete note", etc.), matching the LLM tool naming convention in CLAUDE.md. `PROTECTED_SYSTEM_NOTES` is correctly centralized in `tools/helpers.ts` so future tools can share it (addressing the Gemini reviewer's feedback).
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Bug: duplicate `isContentAvailable()` check in `move_note`** — lines
|
||||
```
|
||||
if (!targetParent.isContentAvailable()) {
|
||||
return { error: "Cannot move note to a protected parent" };
|
||||
}
|
||||
if (!targetParent.isContentAvailable()) {
|
||||
return { error: "Cannot move note to a protected parent" };
|
||||
}
|
||||
```
|
||||
appear twice back-to-back. Harmless but should be cleaned up before merge.
|
||||
- `delete_note`'s description correctly notes "soft delete (recoverable via 'Recent Changes')" — addresses Gemini's flagged concern.
|
||||
- `rename_note` trims whitespace and rejects empty titles — addresses the #9316 review feedback.
|
||||
- **CLS wrapping**: These tools call `note.save()`, `note.deleteNote()`, `branchService.moveBranchToNote`, `cloningService.cloneNoteToParentNote`. Per CLAUDE.md, `note.setContent()` and similar write operations require CLS context. The tools are invoked via the LLM tool-call path (from an Express route handler for `stream` or `execute-tool`), which should already have CLS. However, the `tool_registry.ts` previously wrapped mutating tools in `sql.transactional()` — PR #9340 moves that wrapping to the `execute-tool` route. This PR alone (without #9340) still has the wrapping in `toToolSet()`, so it is currently safe. Flag: if #9340 is merged before this or the two are rebased, verify CLS/transaction coverage is still intact.
|
||||
- `move_note` uses `branches[0]` — the primary parent branch — which is a reasonable default but means moving a cloned note only affects one of its parents. The LLM has no way to choose which branch. A `sourceBranchId` or `sourceParentNoteId` parameter would be more precise. Not blocking but worth a follow-up.
|
||||
- `delete_note` creates a `TaskContext("no-progress-reporting", "deleteNotes", null)` inline — this mirrors how deletions are done in `notes.ts`. Fine.
|
||||
- `rename_note` uses `note.title = ...; note.save();` — consistent with how other `note_tools.ts` tools manipulate notes (not `setContent` so no CLS issue).
|
||||
- No tests. The ETAPI paths for move/clone/delete have tests but this parallel surface does not.
|
||||
|
||||
### Discussion Highlights
|
||||
Automated review from `gemini-code-assist` raised: (1) expand system-note protection beyond root, (2) add protected-parent checks for move and clone, (3) clarify `delete_note` description as soft delete, (4) centralize `PROTECTED_SYSTEM_NOTES`. All four have been addressed in the current diff. No human discussion.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES** (minor): Fix the duplicated `isContentAvailable()` check in `move_note`. Consider adding a `sourceBranchId` parameter to `move_note` for disambiguation on cloned notes. Otherwise the PR is clean and well-scoped. Should be merged together with or after #9340 (tool approval) so that the mutations are gated behind human-in-the-loop confirmation from the moment they land.
|
||||
@@ -1,36 +0,0 @@
|
||||
# PR #9340: feat(llm): add tool approval system for mutating operations
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-tool-approval` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +257 -32 across 13 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Introduces a human-in-the-loop approval flow for mutating LLM tools. In `tool_registry.ts.toToolSet()`, tools with `mutates: true` are registered **without** an `execute` function, so the AI SDK emits a `tool-call` chunk but does not auto-run them. The stream includes a `requiresApproval` flag, the UI renders Approve/Reject buttons on `ToolCallCard`, and a new `POST /api/llm-chat/execute-tool` endpoint runs approved calls inside `sql.transactional()`.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Excellent design. By leveraging the AI SDK's own "no execute → emit tool-call only" behavior, the approval mechanism is enforced at the protocol layer rather than bolted on. `getMutatingToolNames()` is added to `ToolRegistry` and surfaced via the stream options so the server consistently tags `tool_use` chunks as requiring approval. The client-side `approveToolCall` / `rejectToolCall` callbacks update the tool call block immutably — proper React/Preact state handling. `ExpandableCard`/`ExpandableSection` gains a `defaultExpanded` prop so pending approvals auto-expand, a nice UX touch.
|
||||
|
||||
Critically, this is the **security gate** that makes the mutation tools from #9339 safe for users. Without this, an LLM could delete/rename notes without user confirmation. New translation keys (`llm_chat.approve`, `llm_chat.reject`, `llm_chat.pending_approval`, `llm_chat.rejected_by_user`) are correctly placed in `en/translation.json` only.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Transactional wrapping moved correctly**: previously `toToolSet()` wrapped `def.execute` in `sql.transactional()` for mutating tools. Now that wrapping is gone from the toolset path (since mutating tools have no `execute` there), but the new `executeTool` route correctly wraps `def.execute(toolInput)` in `sql.transactional()`. Good.
|
||||
- **Missing CSRF middleware on `/api/llm-chat/execute-tool`**: the new route is registered with `apiRoute(PST, ...)` without `csrfMiddleware`, unlike the streaming route which uses `[auth.checkApiAuthOrElectron, csrfMiddleware]`. Since this endpoint executes *mutating* operations, it absolutely needs CSRF protection. Even though requiring approval from the UI prevents the LLM from auto-triggering, a malicious cross-origin page could POST to this endpoint once the user is logged in. **This is the primary blocker.**
|
||||
- **No authz on `toolInput`**: the `executeTool` handler accepts arbitrary `toolInput` from the client and runs it. This means the UI can be bypassed and the endpoint used to rename/delete any note by POSTing directly, regardless of what the LLM originally proposed. Consider signing/storing pending tool calls server-side keyed by a short-lived token, or at least verifying the tool call originated from an active stream. Current approach effectively exposes every mutating tool as an unauthenticated (well, session-auth'd) REST API. This is acceptable as "the user has full access to their notes anyway" but pairs poorly with the missing CSRF check.
|
||||
- **No `asyncApiRoute`**: `executeTool` is synchronous (`def.execute` is sync). Fine since the tools themselves are sync.
|
||||
- **Client approval is best-effort**: `approveToolCall` updates state but does not feed the tool result back into the LLM conversation so the model can react to it. The approved result becomes part of the displayed content block but (as far as I can see from the diff) is not re-sent to the model for iteration. This matches Kureii's own note in #9316 that local models "stop after first tool call" — the design seems to be "one tool call, then user continues the chat". Worth clarifying in docs or a follow-up, but not a merge blocker.
|
||||
- `onToolUse` callback signature now takes an optional `requiresApproval` flag — backward-compatible.
|
||||
- Rejection still writes a rejected message into the tool call content block with `result: t("llm_chat.rejected_by_user")`. Good UX, no server round-trip for rejection.
|
||||
- Yield-to-Preact hack (`await new Promise(r => setTimeout(r, 1))`) in `onToolUse` is pre-existing, not introduced here.
|
||||
- Duplicate import of `sql` removed from `tool_registry.ts` — tidy.
|
||||
|
||||
### Discussion Highlights
|
||||
Automated review from `gemini-code-assist` with no actionable feedback. No human discussion.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES**: Add `csrfMiddleware` to the `execute-tool` route registration in `routes.ts` (analogous to `streamChat`). Consider whether the endpoint should validate that the tool call matches a recently-streamed proposal (anti-replay / anti-tamper) — can be a follow-up. Everything else is well-designed and the core architecture is sound. Once CSRF is added this is a strong merge. Should land together with #9339 (mutation tools) so mutations are always gated.
|
||||
@@ -1,35 +0,0 @@
|
||||
# PR #9341: feat(llm): add stop generation button
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-stop-generation` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +78 -43 across 5 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds a stop button that toggles with the send button during streaming. Uses an `AbortController` passed into `streamChatCompletion`, and on abort finalizes any collected text/tool-call/thinking content blocks into a regular assistant message. `finalizeStream()` is factored out so both `onDone` and `AbortError` paths share the same cleanup.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Pure client-side change — no server impact. Uses standard `AbortController`/`AbortSignal` which is already available in all supported runtimes (browser + Electron). The `fetch({ signal })` usage is correct. The refactor moves the finalization block out of the `onDone` callback into a shared `finalizeStream()` closure, then the outer `streamChatCompletion().catch()` filters `DOMException.name === "AbortError"` to invoke it. This directly addresses the gemini-code-assist review on #9316 about not swallowing non-abort errors (other errors are re-thrown).
|
||||
|
||||
Translation key `llm_chat.stop` is correctly added under the existing `llm_chat` namespace in `en/translation.json` only.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Good**: `finalizeStream()` closes over `contentBlocks`, `citations`, `thinkingContent`, `usage`, `newMessages` — these are all captured at the time `handleSubmit` runs, so aborting mid-stream correctly preserves whatever was collected up to that point. Proper closure usage.
|
||||
- **Good**: error re-throw path — non-AbortError exceptions are re-thrown, preserving existing error handling. Addresses the gemini review concern directly.
|
||||
- The `.catch` is attached at the await site but `handleSubmit` is `async`, so thrown errors will reject its returned promise. No `onError` callback wiring is changed — if there was existing error handling via `callbacks.onError`, that still runs before re-throw. Worth confirming that non-abort rejections don't hit `onDone` cleanup *and* the `.catch` path (double-finalization). Looking at the diff: `onDone` calls `finalizeStream()` itself, and `.catch` only calls it on `AbortError`. Non-abort errors re-throw before `finalizeStream()`, which means streaming state (`isStreaming`, etc.) would be left in an inconsistent state on error. Minor — check if any existing `onError` already resets those.
|
||||
- `abortControllerRef.current = null` inside `finalizeStream()` is correct.
|
||||
- Stop button uses `chat.isStreaming ? chat.stopStreaming : handleSubmit` and disables only when not streaming and input is empty — UX is good, user can always abort.
|
||||
- Button styling uses `.llm-chat-stop-btn` with `color: var(--danger-color, #dc3545)`, consistent with the theme var convention.
|
||||
- Icon is `bx bx-stop` which is standard BoxIcons, already available.
|
||||
- No new options, no i18n additions beyond the one key. Smallest of the series.
|
||||
|
||||
### Discussion Highlights
|
||||
Automated review from `gemini-code-assist` pointing out the earlier error-swallowing and cleanup duplication in #9316. Both issues are fixed in this PR. No human discussion.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Small, self-contained, fixes reviewer feedback from the umbrella PR, and has no interdependencies with other PRs in the series. Lowest-risk of the batch. Optionally follow up on the "non-abort error leaves streaming state stale" edge case but not blocking.
|
||||
@@ -1,37 +0,0 @@
|
||||
# PR #9342: feat(llm): add configurable web search engines (Tavily, SearXNG)
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-web-search-engines` → `main`
|
||||
- **Size**: +242 -1 across 7 files
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds Tavily and SearXNG as alternatives to provider-built-in web search for the LLM agent. Introduces four new synced options (`llmWebSearchEngine`, `llmTavilyApiKey`, `llmSearxngUrl`, `llmSearchTimeout`), a new `WebSearchSettings` component in the LLM options panel, and a new `web_search_tools.ts` module with `addTavilySearchTool()` / `addSearxngSearchTool()` factories that inject into the AI SDK tool set. `BaseProvider.buildCoreTools()` consults the option and routes accordingly, falling back to the provider's built-in search if the custom engine is misconfigured.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Correct extension point. Hooks into `BaseProvider.addWebSearchTool` which already exists for per-provider built-in search. Configuration is stored in existing options infrastructure — correctly added to both `options_init.ts` defaults and `options.ts` `ALLOWED_OPTIONS` whitelist, and typed in `packages/commons/src/lib/options_interface.ts`. This is the right pattern for adding synced settings. The UI uses `useTriliumOption` and `OptionsRow`/`OptionsSection` from the existing options framework, with conditional rendering based on the selected engine. Translation keys are in `llm.*` namespace in `en/translation.json` only — follows CLAUDE.md i18n policy.
|
||||
|
||||
Important for the Ollama path: Ollama has no built-in web search, so this gives self-hosted users a way to enable web search at all. That is a genuinely useful pairing with #9338.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Security: API key stored unencrypted as a synced option.** `llmTavilyApiKey` is marked `isSynced: true`. In a sync cluster or backup export, the key travels in plaintext with the options table. Anthropic/OpenAI/Google keys go through `llmProviders` which is likewise unencrypted — so this is consistent with existing behavior but should eventually move to protected options or an encrypted store. Not a new vulnerability, just extending the existing weakness. Flag only, not blocking.
|
||||
- **Security: SSRF via `llmSearxngUrl`**. The user can paste any URL (including internal hosts like `http://169.254.169.254/...` or `http://localhost:8080/api/...`) and the server will fetch it on behalf of an authenticated user. Since anyone with LLM settings access is already an admin of the instance (they set up providers), this is not a new attack surface, but worth documenting. Not blocking.
|
||||
- **Good**: Uses `AbortSignal.timeout(ms)` correctly on both Tavily and SearXNG fetches. Timeout is clamped to a sensible default (15s) if the parsed value is non-positive.
|
||||
- **Good**: Error handling wraps `fetch` in try/catch and returns `{ error: ... }` on failure — the AI SDK passes that back to the model gracefully.
|
||||
- **Concern**: Both `addTavilySearchTool` and `addSearxngSearchTool` unconditionally assign `tools.web_search = tool({...})`. This name collides with any provider-built-in `web_search` — which is intentional since only one is active per-call — but the `tools` object is mutated directly. Not an issue given the caller pattern in `base_provider.ts` (builds `tools: ToolSet = {}` fresh per request).
|
||||
- **Minor duplication**: the Tavily and SearXNG functions share most of their scaffolding (description, `query` Zod schema, error handling). Could be factored into a common helper, but two implementations is manageable. Gemini raised a similar dedup comment.
|
||||
- `getOptionOrNull("llmSearchTimeout")` returns a string; `parseInt(..., 10) || 15` falls back on NaN. Good.
|
||||
- `searchEngine === "tavily"` with missing API key → `customToolAdded = false` → falls back to provider built-in, which for Ollama means no search at all. Could log a warning to help users debug.
|
||||
- Default engine is `"provider"` so existing users see zero change in behavior. Good.
|
||||
- No tests for the new search tool factories. The tool-calling path is notoriously untested across the codebase, so consistent but a gap.
|
||||
|
||||
### Discussion Highlights
|
||||
Automated review from `gemini-code-assist` suggesting a refactor to reduce duplication in `BaseProvider` search-engine-selection logic. No human discussion.
|
||||
|
||||
## Recommendation
|
||||
**MERGE** (with optional polish): Well-structured, follows the options/commons pattern correctly, and genuinely needed for Ollama users who otherwise have no web search. Suggested follow-ups: (1) consider encrypting `llmTavilyApiKey`, (2) log a warning when the configured engine falls back to provider-default due to missing config, (3) dedupe the two factory functions. None are blockers. Not interdependent with other PRs in the series — can merge independently.
|
||||
@@ -1,43 +0,0 @@
|
||||
# PR #9343: feat(llm): add knowledge base mode for source-grounded conversations
|
||||
|
||||
- **Author**: Kureii
|
||||
- **Branch**: `feat/llm-knowledge-base` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +394 -8 across 9 files
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:L
|
||||
- **CI**: pass
|
||||
|
||||
## Summary
|
||||
Adds a "knowledge base" mode where the user selects one or more notes as authoritative sources for the LLM conversation, similar to Google NotebookLM. The system prompt gains a `buildKnowledgeBaseSources()` section that injects metadata, child-note listings, and up-to-1500-char content previews per source, along with Harvard-style citation instructions. Note tools are auto-enabled whenever any source notes are selected, and `sourceNoteIds` is persisted with the chat note content. A new doc page is added under User Guide / AI / Knowledge Base.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Concept is a good fit for a note-taking app — "RAG over your own notes" is arguably the killer use case for Trilium + LLM. The implementation wisely uses a hybrid approach: previews in the system prompt plus note tools for follow-up drill-down. This keeps context size bounded while still allowing deep exploration.
|
||||
|
||||
Integration is clean:
|
||||
- `LlmChatConfig.sourceNoteIds` added to `packages/commons/src/lib/llm_api.ts` (shared types, correct location per CLAUDE.md).
|
||||
- `sourceNoteIds` is persisted as part of `LlmChatContent` and loaded/saved via `loadFromContent`/`getContent` — using existing chat note persistence.
|
||||
- The `NoteAutocomplete` component is reused for source picking, with a new `closeOnBlur` option added to `note_autocomplete.ts` to support the bottom-sheet-style dropdown. Reasonable minor extension.
|
||||
- UI chips for sources are rendered with note title resolution via `froca.getNote(id, true)` — proper cache usage.
|
||||
- Translation keys under `llm_chat.knowledge_base*` in `en/translation.json` only. Matches policy.
|
||||
- Documentation added as `apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI/Knowledge Base.html` — the correct location for Trilium's built-in docs.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **System prompt bloat**: with 20 sources × 1500 chars plus metadata, the KB section can add ~30k chars (~8k tokens) to every request, on top of whatever the provider already sends. For local Ollama models with 8k context windows, this will silently truncate the conversation. Not wrong, but should be documented or the preview length should be adaptive to the model's context window.
|
||||
- **`getContent()` cost**: `note.getContent()` pulls the full note content from the DB and then the KB code HTML-strips it with a regex. For a selected note that is 10MB, this loads 10MB, strips it, then keeps 1500 chars. The `CONTENT_PREVIEW_SIZE_THRESHOLD = 10_000` threshold that exists in `helpers.ts` for tools is not applied here. Consider checking `note.contentLength` (or equivalent) before calling `getContent()`.
|
||||
- **HTML stripping with regex**: `content.replace(/<[^>]+>/g, " ")` is a known-imperfect approach (won't handle CDATA, comments, etc.) but it addresses the gemini-review concern about full markdown conversion being expensive. Acceptable trade-off.
|
||||
- **Citations format**: the Harvard-style `[1]`/`[2]` + References section with `[[noteId]]` wiki links is a clever alignment with Trilium's internal link format. Very well chosen.
|
||||
- **Auto-enabling note tools**: `enableNoteTools: enableNoteTools || sourceNoteIds.length > 0` in `useLlmChat.ts` silently flips note tools on. The UI doesn't communicate this clearly. Minor UX nit; doc page mentions it.
|
||||
- **Protected notes**: `buildKnowledgeBaseSources` calls `note.getTitleOrProtected()` (good) and `note.isContentAvailable()` before reading content (good). Protected notes without an active session will be listed by ID only, which is correct behavior.
|
||||
- **System prompt block conditionally adds the "you can fully manage the user's notes" section whenever `enableNoteTools || hasKnowledgeBase`**. This is a significant system prompt expansion that turns every KB chat into a tool-empowered agent. If the user enabled KB but only wants read access, they cannot. Should probably branch on read-only vs. full mutation. Currently KB always pulls in the full tool list including mutation tools — which makes the approval system (PR #9340) essential here.
|
||||
- **Dependency on tool registry**: `base_provider.ts` imports `allToolRegistries` unconditionally. This tightly couples base provider to tools, which was already the case pre-PR but is now more load-bearing.
|
||||
- **Autocomplete container**: the KB panel uses a custom `closeOnBlur` workaround for a bottom-positioned dropdown. The CSS uses `!important` flags (`position: absolute !important`, `bottom: 100% !important`, `top: auto !important`) to override the autocomplete library's positioning. Gemini's review flagged this — it works but is fragile. A cleaner approach would be to add an "above" mode to `NoteAutocomplete` itself. Not blocking.
|
||||
- No tests.
|
||||
|
||||
### Discussion Highlights
|
||||
Automated review from `gemini-code-assist` raised: (1) avoid `!important` in CSS, (2) simplify the content preview generation. The second is addressed (simple HTML strip instead of `toMarkdown()`). The first is not. No human discussion.
|
||||
|
||||
## Recommendation
|
||||
**REQUEST CHANGES** (minor): (1) Guard the `getContent()` call behind a content-length check to avoid loading giant notes, (2) clean up the `!important` CSS overrides or add a proper "above" mode to `NoteAutocomplete`, (3) consider distinguishing KB read-only from KB-with-mutation-tools in the system prompt. The feature itself is strong and fits Trilium's value prop well. Depends on #9338/#9339/#9340 at the conceptual level (mutation tools in KB mode are scary without approval), but no code-level hard dependency. Merge after those or plan to land them together.
|
||||
@@ -1,35 +0,0 @@
|
||||
# PR #9344: fix(web-clipper): Remove trailing / from triliumServerUrl
|
||||
|
||||
- **Author**: bartv2
|
||||
- **Branch**: `fix/web-clipper-end-slash` -> `main`
|
||||
- **Status**: Ready, BLOCKED (likely awaiting review/approval)
|
||||
- **Size**: +4 -2 across 1 file
|
||||
- **Created**: 2026-04-08 | **Updated**: 2026-04-08
|
||||
- **Labels**: size:XS
|
||||
- **CI**: pass (Checks workflow green)
|
||||
|
||||
## Summary
|
||||
|
||||
Trims whitespace and strips any trailing `/` characters from the Trilium server URL entered in the web-clipper options screen before it is used for the login token request and stored in `browser.storage.sync`. Fixes #9330.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
|
||||
Tiny, targeted fix in `apps/web-clipper/entrypoints/options/index.ts`. No cross-cutting conventions to worry about. The behaviour aligns with how users naturally copy/paste URLs (often with a trailing slash) and prevents double-slash URLs like `https://my.server//api/login/token`.
|
||||
|
||||
### Code Quality & Concerns
|
||||
|
||||
- The fix computes `triliumServerUrl` once from `$triliumServerUrl.val()`, trims, and strips trailing slashes via `/\/+$/`, then uses that value for both the fetch URL and the stored value. Clean and consistent.
|
||||
- The earlier gemini-code-assist review flagged a "critical issue" about assigning a value to an undefined variable — looking at the current diff, this has already been addressed: the author uses a local `const triliumServerUrl` rather than trying to reassign the jQuery selector, which is the correct approach.
|
||||
- Only one file changed, no test coverage added, but for a 4-line sanitization fix that's acceptable.
|
||||
- Could theoretically also handle `trim()` before the empty check earlier in the function, but that is out of scope.
|
||||
|
||||
### Discussion Highlights
|
||||
|
||||
- Only a single gemini-code-assist automated review comment that appears to already be addressed by the current state of the diff. No human reviewer comments yet.
|
||||
|
||||
## Recommendation
|
||||
|
||||
**MERGE**: Trivial, correct, well-scoped fix for a legitimate user-visible bug (#9330). CI is green and the gemini concern is a false positive on the current code. Safe to merge as-is.
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
# PR #9348: Update dependency marked to v17.0.6
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/marked-17.x` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +13 -12 across 4 files
|
||||
- **Created**: 2026-04-09 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, Docker builds, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of `marked` from 17.0.5 to 17.0.6 across `apps/client`, `apps/server`, and `packages/commons`. Patch-level bug-fix release.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
`marked` is core to Trilium's markdown rendering/import path and is imported from `@triliumnext/commons` (per CLAUDE.md's shared types policy). The PR correctly bumps all three places using the same version, keeping the monorepo consistent — this is the desired pattern since mismatched versions across workspaces would cause dedupe/runtime issues.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Patch bump (17.0.5 → 17.0.6) — lowest risk tier.
|
||||
- Upstream fixes: (1) race condition in async parallel parse/parseInline with hooks, (2) CLI positional input file handling, (3) CLI config import using file URL. The race-condition fix is directly relevant if Trilium uses async hooks with marked.
|
||||
- Note: `packages/commons/package.json` is modified without a trailing newline preserved (`\ No newline at end of file`) — pre-existing state of that file, not introduced by this PR.
|
||||
- No API surface changes expected at this patch level.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion, no reviews.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Low-risk patch bump correctly applied across all three workspace consumers, CI fully green.
|
||||
@@ -1,33 +0,0 @@
|
||||
# PR #9349: Update dependency upath to v3
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/upath-3.x` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +10 -3 across 2 files
|
||||
- **Created**: 2026-04-09 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, Docker builds, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of `upath` from 2.0.1 to 3.0.5 at the workspace root `devDependencies`. This is a **major version bump** with breaking changes: TypeScript rewrite, Node 20+ required, narrower type signatures, and removal of `_makeLong` from the top-level exports.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
`upath` is a dev-only dependency used by tooling/scripts (not shipped to runtime). The repo already targets Node 20+ — `upath@3` requiring Node >= 20 is compatible. Since it is at the workspace root devDeps and not exposed in shipped artifacts, the blast radius is limited to tooling.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Major version** — the changelog calls out several breaking changes:
|
||||
- Node >= 20 required (fine, Trilium is already there).
|
||||
- `join`/`resolve`/`joinSafe` type params narrowed from `any[]` → `string[]` — any TS consumer passing non-strings will fail to compile.
|
||||
- `_makeLong` removed from top-level exports (use `toNamespacedPath`).
|
||||
- Boxed `String` objects no longer accepted (unlikely to matter).
|
||||
- CJS exports now include `__esModule`/`default` — Babel-style interop still works.
|
||||
- CI fully green across the board, including E2E, which suggests no actual consumer code broke after the upgrade. It's worth a grep on the repo to confirm no direct `upath._makeLong` or non-string arguments exist, but the passing playwright/e2e suite is strong signal.
|
||||
- Only the root `package.json` and `pnpm-lock.yaml` change; no source file touches.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion, no reviews.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Major bump but CI is fully green and `upath` is dev-only. The narrower types and Node 20 requirement are both acceptable given the repo's baseline. Quick grep for `upath` usages before merging would be prudent but not blocking.
|
||||
@@ -1,29 +0,0 @@
|
||||
# PR #9355: chore(deps-dev): bump axios from 1.14.0 to 1.15.0 in /apps/server
|
||||
|
||||
- **Author**: app/dependabot
|
||||
- **Branch**: `dependabot/npm_and_yarn/apps/server/axios-1.15.0` → `main`
|
||||
- **Status**: Ready, BLOCKED
|
||||
- **Size**: +1 -1 across 1 file
|
||||
- **Created**: 2026-04-09 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, size:XS, javascript
|
||||
- **CI**: FAILING — main Checks, Test development, E2E linux-x64, E2E linux-arm64 all failed. CodeQL passed.
|
||||
|
||||
## Summary
|
||||
Dependabot bump of `axios` from 1.14.0 to 1.15.0 in `apps/server`. This targets the same security advisory (GHSA-3p68-rc4w-qgx5) as PR #9356 but only touches `package.json` (not the `pnpm-lock.yaml`), which is why the repo's checks are failing — the lockfile is out of sync with the manifest.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Trilium is a pnpm monorepo, and dependabot (which was designed around npm/yarn) doesn't update `pnpm-lock.yaml` here. That is exactly what renovate is for in this repo. Having dependabot enabled for the same npm ecosystem is producing noise.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- **Duplicate** of PR #9356 (renovate), which is CLEAN and green.
|
||||
- **CI failing** because only `package.json` changed — no corresponding lockfile update. Every check that runs `pnpm install --frozen-lockfile` (Checks, Dev, both E2E jobs) fails.
|
||||
- The underlying upgrade is desirable, but this specific PR cannot be merged as-is without a lockfile update.
|
||||
- Potential process issue: maintainers may want to disable dependabot for npm to avoid this duplication going forward.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion, no reviews.
|
||||
|
||||
## Recommendation
|
||||
**CLOSE**: Superseded by PR #9356 which handles the same bump correctly (lockfile included, CI green). Closing also frees up noise — consider disabling dependabot for the npm ecosystem since renovate is the canonical dependency manager here.
|
||||
@@ -1,30 +0,0 @@
|
||||
# PR #9356: Update dependency axios to v1.15.0 [SECURITY]
|
||||
|
||||
- **Author**: app/renovate
|
||||
- **Branch**: `renovate/npm-axios-vulnerability` → `main`
|
||||
- **Status**: Ready, CLEAN
|
||||
- **Size**: +6 -6 across 2 files
|
||||
- **Created**: 2026-04-09 | **Updated**: 2026-04-09
|
||||
- **Labels**: dependencies, renovate
|
||||
- **CI**: All checks passing (Checks, Dev, E2E linux-x64/arm64, CodeQL)
|
||||
|
||||
## Summary
|
||||
Renovate bump of `axios` from 1.14.0 to 1.15.0 in `apps/server`, triggered by a security advisory (GHSA-3p68-rc4w-qgx5 / CVE-2025-62718). This is a patch-level release carrying two security fixes.
|
||||
|
||||
## Analysis
|
||||
|
||||
### Fit with Trilium Ecosystem
|
||||
Trilium's server uses axios for HTTP calls (sync, OAuth/OpenID, LLM providers, etc.). Keeping axios current is standard hygiene, and the advisory applies to the server's proxy handling, which is relevant if users deploy behind `NO_PROXY` configurations. The change is limited to `apps/server/package.json` plus the lockfile — no API surface changes.
|
||||
|
||||
### Code Quality & Concerns
|
||||
- Minor version bump (1.14.0 → 1.15.0) — semver-compatible.
|
||||
- Upstream fixes: (1) `no_proxy` hostname normalization bypass leading to SSRF, (2) unrestricted cloud metadata exfiltration via header injection chain. Both are real security drivers.
|
||||
- Also includes a deprecation fix (replaces `url.parse()` usage) and Deno/Bun runtime support — no impact for Trilium.
|
||||
- **Duplicate work**: PR #9355 (dependabot) bumps the exact same package to the exact same version. Only one should land; renovate is the project's primary dependency manager (CLAUDE.md-adjacent convention, plus renovate PR passes CI while dependabot's fails).
|
||||
- No tests needed — this is a dependency-only patch.
|
||||
|
||||
### Discussion Highlights
|
||||
No discussion. No reviews filed.
|
||||
|
||||
## Recommendation
|
||||
**MERGE**: Security patch bump with full CI green. After merging, close the duplicate dependabot PR #9355.
|
||||
Reference in New Issue
Block a user