From ef82c3d48b5cc8d67cda3a4c4bd2c7a8645c18c5 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sun, 2 Nov 2025 16:48:05 +0800 Subject: [PATCH 01/54] fix(electron): port-in-use dialog shown when opening a new window | --- apps/server/src/www.ts | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/apps/server/src/www.ts b/apps/server/src/www.ts index 7f3445312..4149d518b 100644 --- a/apps/server/src/www.ts +++ b/apps/server/src/www.ts @@ -158,14 +158,13 @@ function startHttpServer(app: Express) { // Not all situations require showing an error dialog. When Trilium is already open, // clicking the shortcut, the software icon, or the taskbar icon, or when creating a new window, // should simply focus on the existing window or open a new one, without displaying an error message. - if ("code" in error && error.code == "EADDRINUSE") { - if (process.argv.includes("--new-window") || !app.requestSingleInstanceLock()) { - console.error(message); - process.exit(1); - } + if ("code" in error && error.code === "EADDRINUSE" && (process.argv.includes("--new-window") || !app.requestSingleInstanceLock())) { + console.error(message); + process.exit(1); + } else { + dialog.showErrorBox("Error while initializing the server", message); + process.exit(1); } - dialog.showErrorBox("Error while initializing the server", message); - process.exit(1); }); } else { console.error(message); From f3f07cdd28f2fdb5e8b2e734d6dffe57389d41e1 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Sun, 2 Nov 2025 20:30:01 +0800 Subject: [PATCH 02/54] fix(electron): port-in-use dialog shown when opening a new window --- apps/server/src/www.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/server/src/www.ts b/apps/server/src/www.ts index 4149d518b..130d3a380 100644 --- a/apps/server/src/www.ts +++ b/apps/server/src/www.ts @@ -160,11 +160,10 @@ function startHttpServer(app: Express) { // should simply focus on the existing window or open a new one, without displaying an error message. if ("code" in error && error.code === "EADDRINUSE" && (process.argv.includes("--new-window") || !app.requestSingleInstanceLock())) { console.error(message); - process.exit(1); } else { dialog.showErrorBox("Error while initializing the server", message); - process.exit(1); } + process.exit(1); }); } else { console.error(message); From 4c5b2a7c7524ab21dfd0b5c392ff1b92e7a778b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:39:44 +0000 Subject: [PATCH 03/54] Initial plan From 3b02eb8851875e306bd6326f9817a03609939679 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:47:17 +0000 Subject: [PATCH 04/54] Initial plan From 3e0d1bfa4444248d336226fec4862fcc6df466c6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:47:57 +0000 Subject: [PATCH 05/54] Initial plan From 4fc434a52e518f73d57db75af8b60c8004d4a69f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:52:02 +0000 Subject: [PATCH 06/54] Implement multi-branch prefix editing functionality - Add setPrefixBatch API endpoint to handle batch prefix updates - Update branch_prefix dialog to support multiple branches - Remove noSelectedNotes constraint from edit branch prefix menu - Add translations for multi-branch prefix editing Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- apps/client/src/menus/tree_context_menu.ts | 2 +- .../src/translations/en/translation.json | 5 +- .../src/widgets/dialogs/branch_prefix.tsx | 97 ++++++++++++++----- apps/server/src/routes/api/branches.ts | 26 ++++- apps/server/src/routes/routes.ts | 1 + .../ckeditor5-admonition/sample/ckeditor.d.ts | 7 ++ .../ckeditor5-admonition/sample/ckeditor.js | 81 ++++++++++++++++ .../sample/ckeditor.js.map | 1 + .../src/admonition.js.map | 1 + .../src/admonitionautoformat.js.map | 1 + .../src/admonitioncommand.js.map | 1 + .../src/admonitionediting.js.map | 1 + .../src/admonitionui.js.map | 1 + .../src/augmentation.js.map | 1 + .../ckeditor5-admonition/src/index.js.map | 1 + .../ckeditor5-footnotes/sample/ckeditor.d.ts | 7 ++ .../ckeditor5-footnotes/sample/ckeditor.js | 81 ++++++++++++++++ .../sample/ckeditor.js.map | 1 + .../src/augmentation.js.map | 1 + .../ckeditor5-footnotes/src/constants.js.map | 1 + .../footnote-editing/auto-formatting.js.map | 1 + .../src/footnote-editing/converters.js.map | 1 + .../footnote-editing/footnote-editing.js.map | 1 + .../src/footnote-editing/schema.js.map | 1 + .../src/footnote-ui.js.map | 1 + .../ckeditor5-footnotes/src/footnotes.js.map | 1 + packages/ckeditor5-footnotes/src/index.js.map | 1 + .../src/insert-footnote-command.js.map | 1 + packages/ckeditor5-footnotes/src/utils.js.map | 1 + .../sample/ckeditor.d.ts | 7 ++ .../sample/ckeditor.js | 81 ++++++++++++++++ .../sample/ckeditor.js.map | 1 + .../src/augmentation.js.map | 1 + .../src/index.js.map | 1 + .../ckeditor5-keyboard-marker/src/kbd.js.map | 1 + .../src/kbdediting.js.map | 1 + .../src/kbdui.js.map | 1 + packages/ckeditor5-math/sample/ckeditor.d.ts | 7 ++ packages/ckeditor5-math/sample/ckeditor.js | 81 ++++++++++++++++ .../ckeditor5-math/sample/ckeditor.js.map | 1 + .../ckeditor5-math/src/augmentation.js.map | 1 + .../ckeditor5-math/src/autoformatmath.js.map | 1 + packages/ckeditor5-math/src/automath.js.map | 1 + packages/ckeditor5-math/src/index.js.map | 1 + packages/ckeditor5-math/src/math.js.map | 1 + .../ckeditor5-math/src/mathcommand.js.map | 1 + .../ckeditor5-math/src/mathediting.js.map | 1 + packages/ckeditor5-math/src/mathui.js.map | 1 + .../src/typings-external.js.map | 1 + .../ckeditor5-math/src/ui/mainformview.js.map | 1 + .../ckeditor5-math/src/ui/mathview.js.map | 1 + packages/ckeditor5-math/src/utils.js.map | 1 + .../ckeditor5-mermaid/sample/ckeditor.d.ts | 7 ++ packages/ckeditor5-mermaid/sample/ckeditor.js | 81 ++++++++++++++++ .../ckeditor5-mermaid/sample/ckeditor.js.map | 1 + .../ckeditor5-mermaid/src/augmentation.js.map | 1 + .../src/commands/insertMermaidCommand.js.map | 1 + .../src/commands/mermaidPreviewCommand.js.map | 1 + .../commands/mermaidSourceViewCommand.js.map | 1 + .../commands/mermaidSplitViewCommand.js.map | 1 + packages/ckeditor5-mermaid/src/index.js.map | 1 + packages/ckeditor5-mermaid/src/mermaid.js.map | 1 + .../src/mermaidediting.js.map | 1 + .../src/mermaidtoolbar.js.map | 1 + .../ckeditor5-mermaid/src/mermaidui.js.map | 1 + packages/ckeditor5-mermaid/src/utils.js.map | 1 + .../src/scripts/common/debounce.d.ts | 2 + .../src/scripts/common/debounce.d.ts.map | 1 + .../src/scripts/common/parents.d.ts | 2 + .../src/scripts/common/parents.d.ts.map | 1 + .../src/scripts/common/parsehtml.d.ts | 2 + .../src/scripts/common/parsehtml.d.ts.map | 1 + packages/share-theme/src/scripts/index.d.ts | 3 + .../share-theme/src/scripts/index.d.ts.map | 1 + .../share-theme/src/scripts/modules/api.d.ts | 11 +++ .../src/scripts/modules/api.d.ts.map | 1 + .../src/scripts/modules/expanders.d.ts | 2 + .../src/scripts/modules/expanders.d.ts.map | 1 + .../share-theme/src/scripts/modules/math.d.ts | 3 + .../src/scripts/modules/math.d.ts.map | 1 + .../src/scripts/modules/mermaid.d.ts | 2 + .../src/scripts/modules/mermaid.d.ts.map | 1 + .../src/scripts/modules/mobile.d.ts | 2 + .../src/scripts/modules/mobile.d.ts.map | 1 + .../src/scripts/modules/search.d.ts | 2 + .../src/scripts/modules/search.d.ts.map | 1 + .../src/scripts/modules/theme.d.ts | 8 ++ .../src/scripts/modules/theme.d.ts.map | 1 + .../share-theme/src/scripts/modules/toc.d.ts | 12 +++ .../src/scripts/modules/toc.d.ts.map | 1 + packages/share-theme/src/scripts/test.d.ts | 2 + .../share-theme/src/scripts/test.d.ts.map | 1 + 92 files changed, 663 insertions(+), 25 deletions(-) create mode 100644 packages/ckeditor5-admonition/sample/ckeditor.d.ts create mode 100644 packages/ckeditor5-admonition/sample/ckeditor.js create mode 100644 packages/ckeditor5-admonition/sample/ckeditor.js.map create mode 100644 packages/ckeditor5-admonition/src/admonition.js.map create mode 100644 packages/ckeditor5-admonition/src/admonitionautoformat.js.map create mode 100644 packages/ckeditor5-admonition/src/admonitioncommand.js.map create mode 100644 packages/ckeditor5-admonition/src/admonitionediting.js.map create mode 100644 packages/ckeditor5-admonition/src/admonitionui.js.map create mode 100644 packages/ckeditor5-admonition/src/augmentation.js.map create mode 100644 packages/ckeditor5-admonition/src/index.js.map create mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.d.ts create mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.js create mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.js.map create mode 100644 packages/ckeditor5-footnotes/src/augmentation.js.map create mode 100644 packages/ckeditor5-footnotes/src/constants.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnote-ui.js.map create mode 100644 packages/ckeditor5-footnotes/src/footnotes.js.map create mode 100644 packages/ckeditor5-footnotes/src/index.js.map create mode 100644 packages/ckeditor5-footnotes/src/insert-footnote-command.js.map create mode 100644 packages/ckeditor5-footnotes/src/utils.js.map create mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts create mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.js create mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map create mode 100644 packages/ckeditor5-keyboard-marker/src/augmentation.js.map create mode 100644 packages/ckeditor5-keyboard-marker/src/index.js.map create mode 100644 packages/ckeditor5-keyboard-marker/src/kbd.js.map create mode 100644 packages/ckeditor5-keyboard-marker/src/kbdediting.js.map create mode 100644 packages/ckeditor5-keyboard-marker/src/kbdui.js.map create mode 100644 packages/ckeditor5-math/sample/ckeditor.d.ts create mode 100644 packages/ckeditor5-math/sample/ckeditor.js create mode 100644 packages/ckeditor5-math/sample/ckeditor.js.map create mode 100644 packages/ckeditor5-math/src/augmentation.js.map create mode 100644 packages/ckeditor5-math/src/autoformatmath.js.map create mode 100644 packages/ckeditor5-math/src/automath.js.map create mode 100644 packages/ckeditor5-math/src/index.js.map create mode 100644 packages/ckeditor5-math/src/math.js.map create mode 100644 packages/ckeditor5-math/src/mathcommand.js.map create mode 100644 packages/ckeditor5-math/src/mathediting.js.map create mode 100644 packages/ckeditor5-math/src/mathui.js.map create mode 100644 packages/ckeditor5-math/src/typings-external.js.map create mode 100644 packages/ckeditor5-math/src/ui/mainformview.js.map create mode 100644 packages/ckeditor5-math/src/ui/mathview.js.map create mode 100644 packages/ckeditor5-math/src/utils.js.map create mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.d.ts create mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.js create mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.js.map create mode 100644 packages/ckeditor5-mermaid/src/augmentation.js.map create mode 100644 packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map create mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map create mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map create mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map create mode 100644 packages/ckeditor5-mermaid/src/index.js.map create mode 100644 packages/ckeditor5-mermaid/src/mermaid.js.map create mode 100644 packages/ckeditor5-mermaid/src/mermaidediting.js.map create mode 100644 packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map create mode 100644 packages/ckeditor5-mermaid/src/mermaidui.js.map create mode 100644 packages/ckeditor5-mermaid/src/utils.js.map create mode 100644 packages/share-theme/src/scripts/common/debounce.d.ts create mode 100644 packages/share-theme/src/scripts/common/debounce.d.ts.map create mode 100644 packages/share-theme/src/scripts/common/parents.d.ts create mode 100644 packages/share-theme/src/scripts/common/parents.d.ts.map create mode 100644 packages/share-theme/src/scripts/common/parsehtml.d.ts create mode 100644 packages/share-theme/src/scripts/common/parsehtml.d.ts.map create mode 100644 packages/share-theme/src/scripts/index.d.ts create mode 100644 packages/share-theme/src/scripts/index.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/api.d.ts create mode 100644 packages/share-theme/src/scripts/modules/api.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/expanders.d.ts create mode 100644 packages/share-theme/src/scripts/modules/expanders.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/math.d.ts create mode 100644 packages/share-theme/src/scripts/modules/math.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/mermaid.d.ts create mode 100644 packages/share-theme/src/scripts/modules/mermaid.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/mobile.d.ts create mode 100644 packages/share-theme/src/scripts/modules/mobile.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/search.d.ts create mode 100644 packages/share-theme/src/scripts/modules/search.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/theme.d.ts create mode 100644 packages/share-theme/src/scripts/modules/theme.d.ts.map create mode 100644 packages/share-theme/src/scripts/modules/toc.d.ts create mode 100644 packages/share-theme/src/scripts/modules/toc.d.ts.map create mode 100644 packages/share-theme/src/scripts/test.d.ts create mode 100644 packages/share-theme/src/scripts/test.d.ts.map diff --git a/apps/client/src/menus/tree_context_menu.ts b/apps/client/src/menus/tree_context_menu.ts index 6504b49eb..7384573d8 100644 --- a/apps/client/src/menus/tree_context_menu.ts +++ b/apps/client/src/menus/tree_context_menu.ts @@ -137,7 +137,7 @@ export default class TreeContextMenu implements SelectMenuItemEventListener(); + const [ branches, setBranches ] = useState([]); const [ prefix, setPrefix ] = useState(""); const branchInput = useRef(null); - useTriliumEvent("editBranchPrefix", async () => { - const notePath = appContext.tabManager.getActiveContextNotePath(); - if (!notePath) { + useTriliumEvent("editBranchPrefix", async (data?: ContextMenuCommandData) => { + let branchIds: string[] = []; + + if (data?.selectedOrActiveBranchIds && data.selectedOrActiveBranchIds.length > 0) { + // Multi-select mode from tree context menu + branchIds = data.selectedOrActiveBranchIds.filter((branchId) => !branchId.startsWith("virt-")); + } else { + // Single branch mode from keyboard shortcut or when no selection + const notePath = appContext.tabManager.getActiveContextNotePath(); + if (!notePath) { + return; + } + + const { noteId, parentNoteId } = tree.getNoteIdAndParentIdFromUrl(notePath); + + if (!noteId || !parentNoteId) { + return; + } + + const branchId = await froca.getBranchId(parentNoteId, noteId); + if (!branchId) { + return; + } + const parentNote = await froca.getNote(parentNoteId); + if (!parentNote || parentNote.type === "search") { + return; + } + + branchIds = [branchId]; + } + + if (branchIds.length === 0) { return; } - const { noteId, parentNoteId } = tree.getNoteIdAndParentIdFromUrl(notePath); + const newBranches = branchIds + .map(id => froca.getBranch(id)) + .filter((branch): branch is FBranch => branch !== null); - if (!noteId || !parentNoteId) { + if (newBranches.length === 0) { return; } - const newBranchId = await froca.getBranchId(parentNoteId, noteId); - if (!newBranchId) { - return; - } - const parentNote = await froca.getNote(parentNoteId); - if (!parentNote || parentNote.type === "search") { - return; - } - - const newBranch = froca.getBranch(newBranchId); - setBranch(newBranch); - setPrefix(newBranch?.prefix ?? ""); + setBranches(newBranches); + // Use the prefix of the first branch as the initial value + setPrefix(newBranches[0]?.prefix ?? ""); setShown(true); }); async function onSubmit() { - if (!branch) { + if (branches.length === 0) { return; } - savePrefix(branch.branchId, prefix); + if (branches.length === 1) { + await savePrefix(branches[0].branchId, prefix); + } else { + await savePrefixBatch(branches.map(b => b.branchId), prefix); + } setShown(false); } + const isSingleBranch = branches.length === 1; + const titleKey = isSingleBranch ? "branch_prefix.edit_branch_prefix" : "branch_prefix.edit_branch_prefix_multiple"; + return ( branchInput.current?.focus()} onHidden={() => setShown(false)} @@ -69,9 +99,27 @@ export default function BranchPrefixDialog() {
setPrefix((e.target as HTMLInputElement).value)} /> -
- {branch && branch.getNoteFromCache().title}
+ {isSingleBranch && branches[0] && ( +
- {branches[0].getNoteFromCache().title}
+ )}
+ {!isSingleBranch && ( +
+ {t("branch_prefix.affected_branches", { count: branches.length })} +
    + {branches.map((branch) => { + const note = branch.getNoteFromCache(); + return ( +
  • + {branch.prefix && {branch.prefix} - } + {note.title} +
  • + ); + })} +
+
+ )}
); } @@ -80,3 +128,8 @@ async function savePrefix(branchId: string, prefix: string) { await server.put(`branches/${branchId}/set-prefix`, { prefix: prefix }); toast.showMessage(t("branch_prefix.branch_prefix_saved")); } + +async function savePrefixBatch(branchIds: string[], prefix: string) { + await server.put("branches/set-prefix-batch", { branchIds, prefix }); + toast.showMessage(t("branch_prefix.branch_prefix_saved_multiple", { count: branchIds.length })); +} diff --git a/apps/server/src/routes/api/branches.ts b/apps/server/src/routes/api/branches.ts index 810deaba7..86699f5ba 100644 --- a/apps/server/src/routes/api/branches.ts +++ b/apps/server/src/routes/api/branches.ts @@ -270,6 +270,29 @@ function setPrefix(req: Request) { branch.save(); } +function setPrefixBatch(req: Request) { + const { branchIds, prefix } = req.body; + + if (!Array.isArray(branchIds)) { + throw new ValidationError("branchIds must be an array"); + } + + const normalizedPrefix = utils.isEmptyOrWhitespace(prefix) ? null : prefix; + + for (const branchId of branchIds) { + const branch = becca.getBranch(branchId); + if (branch) { + branch.prefix = normalizedPrefix; + branch.save(); + } + } + + return { + success: true, + count: branchIds.length + }; +} + export default { moveBranchToParent, moveBranchBeforeNote, @@ -277,5 +300,6 @@ export default { setExpanded, setExpandedForSubtree, deleteBranch, - setPrefix + setPrefix, + setPrefixBatch }; diff --git a/apps/server/src/routes/routes.ts b/apps/server/src/routes/routes.ts index 9074789f2..78a1380b7 100644 --- a/apps/server/src/routes/routes.ts +++ b/apps/server/src/routes/routes.ts @@ -154,6 +154,7 @@ function register(app: express.Application) { apiRoute(PUT, "/api/branches/:branchId/expanded-subtree/:expanded", branchesApiRoute.setExpandedForSubtree); apiRoute(DEL, "/api/branches/:branchId", branchesApiRoute.deleteBranch); apiRoute(PUT, "/api/branches/:branchId/set-prefix", branchesApiRoute.setPrefix); + apiRoute(PUT, "/api/branches/set-prefix-batch", branchesApiRoute.setPrefixBatch); apiRoute(GET, "/api/notes/:noteId/attachments", attachmentsApiRoute.getAttachments); apiRoute(PST, "/api/notes/:noteId/attachments", attachmentsApiRoute.saveAttachment); diff --git a/packages/ckeditor5-admonition/sample/ckeditor.d.ts b/packages/ckeditor5-admonition/sample/ckeditor.d.ts new file mode 100644 index 000000000..e838419a2 --- /dev/null +++ b/packages/ckeditor5-admonition/sample/ckeditor.d.ts @@ -0,0 +1,7 @@ +declare global { + interface Window { + editor: ClassicEditor; + } +} +import { ClassicEditor } from 'ckeditor5'; +import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-admonition/sample/ckeditor.js b/packages/ckeditor5-admonition/sample/ckeditor.js new file mode 100644 index 000000000..d61e2e416 --- /dev/null +++ b/packages/ckeditor5-admonition/sample/ckeditor.js @@ -0,0 +1,81 @@ +import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; +import Admonition from '../src/admonition.js'; +import 'ckeditor5/ckeditor5.css'; +ClassicEditor + .create(document.getElementById('editor'), { + licenseKey: 'GPL', + plugins: [ + Admonition, + Essentials, + Autoformat, + BlockQuote, + Bold, + Heading, + Image, + ImageCaption, + ImageStyle, + ImageToolbar, + ImageUpload, + Indent, + Italic, + Link, + List, + MediaEmbed, + Paragraph, + Table, + TableToolbar, + CodeBlock, + Code, + Base64UploadAdapter + ], + toolbar: [ + 'undo', + 'redo', + '|', + 'admonition', + '|', + 'heading', + '|', + 'bold', + 'italic', + 'link', + 'code', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'uploadImage', + 'blockQuote', + 'insertTable', + 'mediaEmbed', + 'codeBlock' + ], + image: { + toolbar: [ + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'imageTextAlternative' + ] + }, + table: { + contentToolbar: [ + 'tableColumn', + 'tableRow', + 'mergeTableCells' + ] + } +}) + .then(editor => { + window.editor = editor; + CKEditorInspector.attach(editor); + window.console.log('CKEditor 5 is ready.', editor); +}) + .catch(err => { + window.console.error(err.stack); +}); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-admonition/sample/ckeditor.js.map b/packages/ckeditor5-admonition/sample/ckeditor.js.map new file mode 100644 index 000000000..ca410d012 --- /dev/null +++ b/packages/ckeditor5-admonition/sample/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,YAAY;QACZ,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonition.js.map b/packages/ckeditor5-admonition/src/admonition.js.map new file mode 100644 index 000000000..6d951e1d8 --- /dev/null +++ b/packages/ckeditor5-admonition/src/admonition.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admonition.js","sourceRoot":"","sources":["admonition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AACvD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAEtC,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,CAAW,CAAC;IAC3E,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,YAAqB,CAAC;IAC9B,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionautoformat.js.map b/packages/ckeditor5-admonition/src/admonitionautoformat.js.map new file mode 100644 index 000000000..89440d086 --- /dev/null +++ b/packages/ckeditor5-admonition/src/admonitionautoformat.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admonitionautoformat.js","sourceRoot":"","sources":["admonitionautoformat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1E,SAAS,sBAAsB,CAAC,KAAuB;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACR,CAAC;IAED,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC,CAAC,CAAmB,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,MAAM;IAEvD,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,UAAU,CAAE,CAAC;IACvB,CAAC;IAED,SAAS;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,MAAM,QAAQ,GAAI,IAAY,CAAC;QAC/B,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChF,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,IAAI,EAAE,CAAC;gBACV,4DAA4D;gBAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACP,qFAAqF;gBACrF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;gBACrE,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitioncommand.js.map b/packages/ckeditor5-admonition/src/admonitioncommand.js.map new file mode 100644 index 000000000..c92080a67 --- /dev/null +++ b/packages/ckeditor5-admonition/src/admonitioncommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admonitioncommand.js","sourceRoot":"","sources":["admonitioncommand.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionediting.js.map b/packages/ckeditor5-admonition/src/admonitionediting.js.map new file mode 100644 index 000000000..ac02c16ad --- /dev/null +++ b/packages/ckeditor5-admonition/src/admonitionediting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admonitionediting.js","sourceRoot":"","sources":["admonitionediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionui.js.map b/packages/ckeditor5-admonition/src/admonitionui.js.map new file mode 100644 index 000000000..4ac94e179 --- /dev/null +++ b/packages/ckeditor5-admonition/src/admonitionui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"admonitionui.js","sourceRoot":"","sources":["admonitionui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/augmentation.js.map b/packages/ckeditor5-admonition/src/augmentation.js.map new file mode 100644 index 000000000..39249be26 --- /dev/null +++ b/packages/ckeditor5-admonition/src/augmentation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/index.js.map b/packages/ckeditor5-admonition/src/index.js.map new file mode 100644 index 000000000..ebdd4b71d --- /dev/null +++ b/packages/ckeditor5-admonition/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG5E,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,cAAc;CACd,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.d.ts b/packages/ckeditor5-footnotes/sample/ckeditor.d.ts new file mode 100644 index 000000000..e838419a2 --- /dev/null +++ b/packages/ckeditor5-footnotes/sample/ckeditor.d.ts @@ -0,0 +1,7 @@ +declare global { + interface Window { + editor: ClassicEditor; + } +} +import { ClassicEditor } from 'ckeditor5'; +import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.js b/packages/ckeditor5-footnotes/sample/ckeditor.js new file mode 100644 index 000000000..77a18d9fd --- /dev/null +++ b/packages/ckeditor5-footnotes/sample/ckeditor.js @@ -0,0 +1,81 @@ +import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; +import Footnotes from '../src/footnotes.js'; +import 'ckeditor5/ckeditor5.css'; +ClassicEditor + .create(document.getElementById('editor'), { + licenseKey: 'GPL', + plugins: [ + Footnotes, + Essentials, + Autoformat, + BlockQuote, + Bold, + Heading, + Image, + ImageCaption, + ImageStyle, + ImageToolbar, + ImageUpload, + Indent, + Italic, + Link, + List, + MediaEmbed, + Paragraph, + Table, + TableToolbar, + CodeBlock, + Code, + Base64UploadAdapter + ], + toolbar: [ + 'undo', + 'redo', + '|', + 'footnotes', + '|', + 'heading', + '|', + 'bold', + 'italic', + 'link', + 'code', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'uploadImage', + 'blockQuote', + 'insertTable', + 'mediaEmbed', + 'codeBlock' + ], + image: { + toolbar: [ + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'imageTextAlternative' + ] + }, + table: { + contentToolbar: [ + 'tableColumn', + 'tableRow', + 'mergeTableCells' + ] + } +}) + .then(editor => { + window.editor = editor; + CKEditorInspector.attach(editor); + window.console.log('CKEditor 5 is ready.', editor); +}) + .catch(err => { + window.console.error(err.stack); +}); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.js.map b/packages/ckeditor5-footnotes/sample/ckeditor.js.map new file mode 100644 index 000000000..6f02908e9 --- /dev/null +++ b/packages/ckeditor5-footnotes/sample/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAE5C,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,SAAS;QACT,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,WAAW;QACX,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/augmentation.js.map b/packages/ckeditor5-footnotes/src/augmentation.js.map new file mode 100644 index 000000000..39249be26 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/augmentation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/constants.js.map b/packages/ckeditor5-footnotes/src/constants.js.map new file mode 100644 index 000000000..06bd57032 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/constants.js.map @@ -0,0 +1 @@ +{"version":3,"file":"constants.js","sourceRoot":"","sources":["constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG;IACtB,eAAe,EAAE,kBAAkB;IACnC,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,oBAAoB;IACvC,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,oBAAoB;IACtC,SAAS,EAAE,WAAW,EAAE,6DAA6D;IACrF,MAAM,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,cAAc,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,eAAe,EAAE,uBAAuB;IACxC,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,yBAAyB;IAC5C,eAAe,EAAE,uBAAuB;IACxC,gBAAgB,EAAE,yBAAyB;IAC3C,oBAAoB,EAAE,8BAA8B;CACpD,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map new file mode 100644 index 000000000..e5a24d9f6 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"auto-formatting.js","sourceRoot":"","sources":["auto-formatting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map new file mode 100644 index 000000000..8d92168fe --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map @@ -0,0 +1 @@ +{"version":3,"file":"converters.js","sourceRoot":"","sources":["converters.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map new file mode 100644 index 000000000..45a94eb8a --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map @@ -0,0 +1 @@ +{"version":3,"file":"footnote-editing.js","sourceRoot":"","sources":["footnote-editing.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map new file mode 100644 index 000000000..e10b42239 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map @@ -0,0 +1 @@ +{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAE,MAAmB,EAAS,EAAE;IAC3D;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,EAAE;QAC1C,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,QAAQ,CAAC,YAAY;QACpC,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,CAAE;KAC/C,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,YAAY,EAAE;QACvC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,OAAO;QACvB,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAE;KAChG,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,EAAE;QAC1C,OAAO,EAAE,QAAQ,CAAC,YAAY;QAC9B,cAAc,EAAE,OAAO;QACvB,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,CAAE;KAC/C,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,iBAAiB,EAAE;QAC5C,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAE;KAClG,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,gBAAgB,EAAE;QAC3C,OAAO,EAAE,QAAQ,CAAC,YAAY;QAC9B,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,CAAE,UAAU,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAE;KACvE,CAAE,CAAC;IAEJ,MAAM,CAAC,aAAa,CAAE,CAAE,OAAO,EAAE,eAAe,EAAG,EAAE;QACpD,IAAK,OAAO,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,CAAE,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,EAAG,CAAC;YACzG,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAK,OAAO,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,CAAE,IAAI,eAAe,CAAC,IAAI,KAAK,UAAU,EAAG,CAAC;YAC3F,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAE,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-ui.js.map b/packages/ckeditor5-footnotes/src/footnote-ui.js.map new file mode 100644 index 000000000..756c97e42 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnote-ui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"footnote-ui.js","sourceRoot":"","sources":["footnote-ui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnotes.js.map b/packages/ckeditor5-footnotes/src/footnotes.js.map new file mode 100644 index 000000000..8f266e255 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/footnotes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"footnotes.js","sourceRoot":"","sources":["footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,eAAe,MAAM,wCAAwC,CAAC;AACrE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,MAAM;IACrC,MAAM,KAAK,UAAU;QAC3B,OAAO,WAAoB,CAAC;IAC7B,CAAC;IAEM,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,eAAe,EAAE,UAAU,CAAW,CAAC;IACjD,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/index.js.map b/packages/ckeditor5-footnotes/src/index.js.map new file mode 100644 index 000000000..cfaafa124 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,0CAA0C,CAAC;AAC1E,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,kBAAkB;CAClB,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map b/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map new file mode 100644 index 000000000..441d6a4e4 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map @@ -0,0 +1 @@ +{"version":3,"file":"insert-footnote-command.js","sourceRoot":"","sources":["insert-footnote-command.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/utils.js.map b/packages/ckeditor5-footnotes/src/utils.js.map new file mode 100644 index 000000000..d80b38c11 --- /dev/null +++ b/packages/ckeditor5-footnotes/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts b/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts new file mode 100644 index 000000000..e838419a2 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts @@ -0,0 +1,7 @@ +declare global { + interface Window { + editor: ClassicEditor; + } +} +import { ClassicEditor } from 'ckeditor5'; +import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js new file mode 100644 index 000000000..850bb57e8 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js @@ -0,0 +1,81 @@ +import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; +import Kbd from '../src/kbd.js'; +import 'ckeditor5/ckeditor5.css'; +ClassicEditor + .create(document.getElementById('editor'), { + licenseKey: 'GPL', + plugins: [ + Kbd, + Essentials, + Autoformat, + BlockQuote, + Bold, + Heading, + Image, + ImageCaption, + ImageStyle, + ImageToolbar, + ImageUpload, + Indent, + Italic, + Link, + List, + MediaEmbed, + Paragraph, + Table, + TableToolbar, + CodeBlock, + Code, + Base64UploadAdapter + ], + toolbar: [ + 'undo', + 'redo', + '|', + 'keyboardMarker', + '|', + 'heading', + '|', + 'bold', + 'italic', + 'link', + 'code', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'uploadImage', + 'blockQuote', + 'insertTable', + 'mediaEmbed', + 'codeBlock' + ], + image: { + toolbar: [ + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'imageTextAlternative' + ] + }, + table: { + contentToolbar: [ + 'tableColumn', + 'tableRow', + 'mergeTableCells' + ] + } +}) + .then(editor => { + window.editor = editor; + CKEditorInspector.attach(editor); + window.console.log('CKEditor 5 is ready.', editor); +}) + .catch(err => { + window.console.error(err.stack); +}); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map new file mode 100644 index 000000000..4b6fa9283 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,GAAG,MAAM,eAAe,CAAC;AAEhC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,GAAG;QACH,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,gBAAgB;QAChB,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/augmentation.js.map b/packages/ckeditor5-keyboard-marker/src/augmentation.js.map new file mode 100644 index 000000000..39249be26 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/src/augmentation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/index.js.map b/packages/ckeditor5-keyboard-marker/src/index.js.map new file mode 100644 index 000000000..8493287a6 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AACjD,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,OAAO;CACP,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbd.js.map b/packages/ckeditor5-keyboard-marker/src/kbd.js.map new file mode 100644 index 000000000..3dc6dcb3e --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/src/kbd.js.map @@ -0,0 +1 @@ +{"version":3,"file":"kbd.js","sourceRoot":"","sources":["kbd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,MAAM;IAEtC,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,UAAU,EAAE,KAAK,CAAE,CAAC;IAC9B,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,KAAc,CAAC;IACvB,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map b/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map new file mode 100644 index 000000000..d92aebc98 --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"kbdediting.js","sourceRoot":"","sources":["kbdediting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAEtC,MAAM,KAAK,UAAU;QAC3B,OAAO,YAAqB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,qCAAqC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,CAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAE,GAAG,EAAE;YAChD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;SACjB,CAAE,CAAC;QAEJ,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAE;YACrC,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,GAAG;SACT,CAAE,CAAC;QAEJ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,GAAG,EAAE,IAAI,gBAAgB,CAAE,MAAM,EAAE,GAAG,CAAE,CAAE,CAAC;QAChE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAE,YAAY,EAAE,GAAG,CAAE,CAAC;IAC5C,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbdui.js.map b/packages/ckeditor5-keyboard-marker/src/kbdui.js.map new file mode 100644 index 000000000..36e50266b --- /dev/null +++ b/packages/ckeditor5-keyboard-marker/src/kbdui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"kbdui.js","sourceRoot":"","sources":["kbdui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAEjD,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,MAAM;IAEjC,MAAM,KAAK,UAAU;QAC3B,OAAO,OAAgB,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAE,GAAG,EAAE,MAAM,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,GAAG,CAAsB,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAE,MAAM,CAAE,CAAC;YAEtC,IAAI,CAAC,GAAG,CAAE;gBACT,KAAK,EAAE,CAAC,CAAE,mBAAmB,CAAE;gBAC/B,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;aAClB,CAAE,CAAC;YAEJ,IAAI,CAAC,IAAI,CAAE,MAAM,EAAE,WAAW,CAAE,CAAC,EAAE,CAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAE,CAAC;YAErE,mBAAmB;YACnB,IAAI,CAAC,QAAQ,CAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,OAAO,CAAE,GAAG,CAAE,CAAC;gBACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAE,CAAC;YAEJ,OAAO,IAAI,CAAC;QACb,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/sample/ckeditor.d.ts b/packages/ckeditor5-math/sample/ckeditor.d.ts new file mode 100644 index 000000000..e838419a2 --- /dev/null +++ b/packages/ckeditor5-math/sample/ckeditor.d.ts @@ -0,0 +1,7 @@ +declare global { + interface Window { + editor: ClassicEditor; + } +} +import { ClassicEditor } from 'ckeditor5'; +import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-math/sample/ckeditor.js b/packages/ckeditor5-math/sample/ckeditor.js new file mode 100644 index 000000000..370a359aa --- /dev/null +++ b/packages/ckeditor5-math/sample/ckeditor.js @@ -0,0 +1,81 @@ +import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; +import Math from '../src/math.js'; +import 'ckeditor5/ckeditor5.css'; +ClassicEditor + .create(document.getElementById('editor'), { + licenseKey: 'GPL', + plugins: [ + Math, + Essentials, + Autoformat, + BlockQuote, + Bold, + Heading, + Image, + ImageCaption, + ImageStyle, + ImageToolbar, + ImageUpload, + Indent, + Italic, + Link, + List, + MediaEmbed, + Paragraph, + Table, + TableToolbar, + CodeBlock, + Code, + Base64UploadAdapter + ], + toolbar: [ + 'undo', + 'redo', + '|', + 'math', + '|', + 'heading', + '|', + 'bold', + 'italic', + 'link', + 'code', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'uploadImage', + 'blockQuote', + 'insertTable', + 'mediaEmbed', + 'codeBlock' + ], + image: { + toolbar: [ + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'imageTextAlternative' + ] + }, + table: { + contentToolbar: [ + 'tableColumn', + 'tableRow', + 'mergeTableCells' + ] + } +}) + .then(editor => { + window.editor = editor; + CKEditorInspector.attach(editor); + window.console.log('CKEditor 5 is ready.', editor); +}) + .catch(err => { + window.console.error(err.stack); +}); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-math/sample/ckeditor.js.map b/packages/ckeditor5-math/sample/ckeditor.js.map new file mode 100644 index 000000000..253baa75e --- /dev/null +++ b/packages/ckeditor5-math/sample/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAElC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,IAAI;QACJ,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,MAAM;QACN,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/augmentation.js.map b/packages/ckeditor5-math/src/augmentation.js.map new file mode 100644 index 000000000..39249be26 --- /dev/null +++ b/packages/ckeditor5-math/src/augmentation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/autoformatmath.js.map b/packages/ckeditor5-math/src/autoformatmath.js.map new file mode 100644 index 000000000..7fa8b54a2 --- /dev/null +++ b/packages/ckeditor5-math/src/autoformatmath.js.map @@ -0,0 +1 @@ +{"version":3,"file":"autoformatmath.js","sourceRoot":"","sources":["autoformatmath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvE,4FAA4F;AAC5F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,MAAM;IAC1C,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,IAAI,EAAE,YAAY,CAAW,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,IAAI;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,MAAM,CAAE,EAAG,CAAC;YACrC,UAAU,CAAE,iCAAiC,EAAE,MAAM,CAAE,CAAC;QACzD,CAAC;IACF,CAAC;IAEM,SAAS;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,MAAM,CAAE,CAAC;QAE9C,IAAK,OAAO,YAAY,WAAW,EAAG,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACrB,IAAK,CAAC,OAAO,CAAC,SAAS,EAAG,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBAEvB,mCAAmC;gBACnC,MAAM,CAAC,UAAU,CAChB,GAAG,EAAE;oBACJ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,QAAQ,CAAE,CAAC;oBACtD,IAAK,cAAc,YAAY,MAAM,EAAG,CAAC;wBACxC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC1B,CAAC;gBACF,CAAC,EACD,EAAE,CACF,CAAC;YACH,CAAC,CAAC;YAEF,wHAAwH;YACxH,sBAAsB,CAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAE,CAAC;YAC3D,wHAAwH;YACxH,sBAAsB,CAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAE,CAAC;QAC5D,CAAC;IACF,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,gBAAyB,CAAC;IAClC,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/automath.js.map b/packages/ckeditor5-math/src/automath.js.map new file mode 100644 index 000000000..80183ef09 --- /dev/null +++ b/packages/ckeditor5-math/src/automath.js.map @@ -0,0 +1 @@ +{"version":3,"file":"automath.js","sourceRoot":"","sources":["automath.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/index.js.map b/packages/ckeditor5-math/src/index.js.map new file mode 100644 index 000000000..aaf6b7ac6 --- /dev/null +++ b/packages/ckeditor5-math/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ;CACR,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/math.js.map b/packages/ckeditor5-math/src/math.js.map new file mode 100644 index 000000000..a7a614dc4 --- /dev/null +++ b/packages/ckeditor5-math/src/math.js.map @@ -0,0 +1 @@ +{"version":3,"file":"math.js","sourceRoot":"","sources":["math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,MAAM;IAChC,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAW,CAAC;IAC3D,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,MAAe,CAAC;IACxB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathcommand.js.map b/packages/ckeditor5-math/src/mathcommand.js.map new file mode 100644 index 000000000..1d80830c3 --- /dev/null +++ b/packages/ckeditor5-math/src/mathcommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mathcommand.js","sourceRoot":"","sources":["mathcommand.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathediting.js.map b/packages/ckeditor5-math/src/mathediting.js.map new file mode 100644 index 000000000..dbc082614 --- /dev/null +++ b/packages/ckeditor5-math/src/mathediting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mathediting.js","sourceRoot":"","sources":["mathediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathui.js.map b/packages/ckeditor5-math/src/mathui.js.map new file mode 100644 index 000000000..7ba56ce3a --- /dev/null +++ b/packages/ckeditor5-math/src/mathui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mathui.js","sourceRoot":"","sources":["mathui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/typings-external.js.map b/packages/ckeditor5-math/src/typings-external.js.map new file mode 100644 index 000000000..3f121d309 --- /dev/null +++ b/packages/ckeditor5-math/src/typings-external.js.map @@ -0,0 +1 @@ +{"version":3,"file":"typings-external.js","sourceRoot":"","sources":["typings-external.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/ui/mainformview.js.map b/packages/ckeditor5-math/src/ui/mainformview.js.map new file mode 100644 index 000000000..f1a361307 --- /dev/null +++ b/packages/ckeditor5-math/src/ui/mainformview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mainformview.js","sourceRoot":"","sources":["mainformview.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/ui/mathview.js.map b/packages/ckeditor5-math/src/ui/mathview.js.map new file mode 100644 index 000000000..b63bd4e19 --- /dev/null +++ b/packages/ckeditor5-math/src/ui/mathview.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mathview.js","sourceRoot":"","sources":["mathview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,IAAI;IAYzC,YACC,MAOY,EACZ,QAA6C,EAC7C,MAAc,EACd,UAAkB,EAClB,gBAA+B,EAC/B,kBAAgC;QAEhC,KAAK,CAAE,MAAM,CAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAE,OAAO,EAAE,EAAE,CAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAE,SAAS,EAAE,KAAK,CAAE,CAAC;QAE7B,IAAI,CAAC,EAAE,CAAE,QAAQ,EAAE,GAAG,EAAE;YACvB,IAAK,IAAI,CAAC,UAAU,EAAG,CAAC;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;QACF,CAAC,CAAE,CAAC;QAEJ,IAAI,CAAC,WAAW,CAAE;YACjB,GAAG,EAAE,KAAK;YACV,UAAU,EAAE;gBACX,KAAK,EAAE,CAAE,IAAI,EAAE,iBAAiB,EAAE,uBAAuB,CAAE;aAC3D;SACD,CAAE,CAAC;IACL,CAAC;IAEM,UAAU;QAChB,IAAK,IAAI,CAAC,OAAO,EAAG,CAAC;YACpB,KAAK,cAAc,CAClB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,EACJ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,kBAAkB,CACvB,CAAC;QACH,CAAC;IACF,CAAC;IAEe,MAAM;QACrB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/utils.js.map b/packages/ckeditor5-math/src/utils.js.map new file mode 100644 index 000000000..cb543f421 --- /dev/null +++ b/packages/ckeditor5-math/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.d.ts b/packages/ckeditor5-mermaid/sample/ckeditor.d.ts new file mode 100644 index 000000000..e838419a2 --- /dev/null +++ b/packages/ckeditor5-mermaid/sample/ckeditor.d.ts @@ -0,0 +1,7 @@ +declare global { + interface Window { + editor: ClassicEditor; + } +} +import { ClassicEditor } from 'ckeditor5'; +import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.js b/packages/ckeditor5-mermaid/sample/ckeditor.js new file mode 100644 index 000000000..92fe6af36 --- /dev/null +++ b/packages/ckeditor5-mermaid/sample/ckeditor.js @@ -0,0 +1,81 @@ +import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; +import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; +import Mermaid from '../src/mermaid.js'; +import 'ckeditor5/ckeditor5.css'; +ClassicEditor + .create(document.getElementById('editor'), { + licenseKey: 'GPL', + plugins: [ + Mermaid, + Essentials, + Autoformat, + BlockQuote, + Bold, + Heading, + Image, + ImageCaption, + ImageStyle, + ImageToolbar, + ImageUpload, + Indent, + Italic, + Link, + List, + MediaEmbed, + Paragraph, + Table, + TableToolbar, + CodeBlock, + Code, + Base64UploadAdapter + ], + toolbar: [ + 'undo', + 'redo', + '|', + 'mermaid', + '|', + 'heading', + '|', + 'bold', + 'italic', + 'link', + 'code', + 'bulletedList', + 'numberedList', + '|', + 'outdent', + 'indent', + '|', + 'uploadImage', + 'blockQuote', + 'insertTable', + 'mediaEmbed', + 'codeBlock' + ], + image: { + toolbar: [ + 'imageStyle:inline', + 'imageStyle:block', + 'imageStyle:side', + '|', + 'imageTextAlternative' + ] + }, + table: { + contentToolbar: [ + 'tableColumn', + 'tableRow', + 'mergeTableCells' + ] + } +}) + .then(editor => { + window.editor = editor; + CKEditorInspector.attach(editor); + window.console.log('CKEditor 5 is ready.', editor); +}) + .catch(err => { + window.console.error(err.stack); +}); +//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.js.map b/packages/ckeditor5-mermaid/sample/ckeditor.js.map new file mode 100644 index 000000000..93d6202ab --- /dev/null +++ b/packages/ckeditor5-mermaid/sample/ckeditor.js.map @@ -0,0 +1 @@ +{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAExC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,OAAO;QACP,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,SAAS;QACT,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/augmentation.js.map b/packages/ckeditor5-mermaid/src/augmentation.js.map new file mode 100644 index 000000000..39249be26 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/augmentation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map b/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map new file mode 100644 index 000000000..c826455dd --- /dev/null +++ b/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"insertMermaidCommand.js","sourceRoot":"","sources":["insertMermaidCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,mBAAmB,GAAG;;QAEpB,CAAC;AAET;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IAE/C,OAAO;QACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAE/D,IAAK,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAG,CAAC;YAC7D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,CAAC;IACF,CAAC;IAEQ,OAAO;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,WAAW,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,WAAW,GAAG,MAAM,CAAC,aAAa,CAAE,SAAS,EAAE;gBAC9C,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,mBAAmB;aAC3B,CAAE,CAAC;YAEJ,KAAK,CAAC,aAAa,CAAE,WAAW,CAAE,CAAC;QACpC,CAAC,CAAE,CAAC;QAEJ,OAAO,WAAW,CAAC;IACpB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map new file mode 100644 index 000000000..af6477508 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidPreviewCommand.js","sourceRoot":"","sources":["mermaidPreviewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,OAAO;IAEhD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,SAAS,CAAE,CAAC;IAC7C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,IAAI,WAAW,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;gBACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,SAAS,EAAG,CAAC;oBAC/D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,SAAS,EAAE,WAAW,CAAE,CAAC;gBAC9D,CAAC;YACF,CAAC,CAAE,CAAC;QACL,CAAC;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map new file mode 100644 index 000000000..40b7b1ea2 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidSourceViewCommand.js","sourceRoot":"","sources":["mermaidSourceViewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,OAAO;IAEnD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,QAAQ,CAAE,CAAC;IAC5C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,QAAQ,EAAG,CAAC;gBAC9D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAE,CAAC;YAC7D,CAAC;QACF,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map new file mode 100644 index 000000000..cea071e90 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidSplitViewCommand.js","sourceRoot":"","sources":["mermaidSplitViewCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,OAAO;IAElD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,OAAO,CAAE,CAAC;IAC3C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,OAAO,EAAG,CAAC;gBAC7D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAE,CAAC;YAC5D,CAAC;QACF,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/index.js.map b/packages/ckeditor5-mermaid/src/index.js.map new file mode 100644 index 000000000..b0b1a8b82 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,eAAe,MAAM,uCAAuC,CAAC;AACpE,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAChE,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAClE,OAAO,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ;IACR,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,cAAc;CACd,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaid.js.map b/packages/ckeditor5-mermaid/src/mermaid.js.map new file mode 100644 index 000000000..95cac22e5 --- /dev/null +++ b/packages/ckeditor5-mermaid/src/mermaid.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,MAAM;IAE1C,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,cAAc,EAAE,cAAc,EAAE,SAAS,CAAE,CAAC;IACtD,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,SAAkB,CAAC;IAC3B,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidediting.js.map b/packages/ckeditor5-mermaid/src/mermaidediting.js.map new file mode 100644 index 000000000..61e3f2adc --- /dev/null +++ b/packages/ckeditor5-mermaid/src/mermaidediting.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidediting.js","sourceRoot":"","sources":["mermaidediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map b/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map new file mode 100644 index 000000000..0aa81301d --- /dev/null +++ b/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidtoolbar.js","sourceRoot":"","sources":["mermaidtoolbar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAsC,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAGhG,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,MAAM;IAEjD,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,uBAAuB,CAAE,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,UAAU;QACpB,OAAO,gBAAyB,CAAC;IAClC,CAAC;IAED,SAAS;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEnB,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,uBAAuB,CAAE,CAAC;QAC9E,MAAM,mBAAmB,GAAG,CAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,EAAE,aAAa,CAAE,CAAC;QAE9G,IAAK,mBAAmB,EAAG,CAAC;YAC3B,uBAAuB,CAAC,QAAQ,CAAE,gBAAgB,EAAE;gBACnD,SAAS,EAAE,CAAC,CAAE,iBAAiB,CAAE;gBACjC,KAAK,EAAE,mBAAmB;gBAC1B,iBAAiB,EAAE,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAE,SAAS,CAAE;aAC/D,CAAE,CAAC;QACL,CAAC;IACF,CAAC;CACD;AAED,SAAS,kBAAkB,CAAE,SAAgC;IAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,EAA4B,CAAC;IAE7E,IAAK,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAE,qBAAqB,CAAE,EAAG,CAAC;QACpE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidui.js.map b/packages/ckeditor5-mermaid/src/mermaidui.js.map new file mode 100644 index 000000000..217972c2f --- /dev/null +++ b/packages/ckeditor5-mermaid/src/mermaidui.js.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaidui.js","sourceRoot":"","sources":["mermaidui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/utils.js.map b/packages/ckeditor5-mermaid/src/utils.js.map new file mode 100644 index 000000000..633a5826c --- /dev/null +++ b/packages/ckeditor5-mermaid/src/utils.js.map @@ -0,0 +1 @@ +{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAE,MAAc,EAAE,WAAmB;;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClD,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,EAAE,KAAI,MAAA,SAAS,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAC;IAE1F,IAAK,WAAW,IAAI,WAAW,CAAC,EAAE,CAAE,SAAS,EAAE,SAAS,CAAE,IAAI,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,WAAW,EAAG,CAAC;QAC1H,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/debounce.d.ts b/packages/share-theme/src/scripts/common/debounce.d.ts new file mode 100644 index 000000000..0f211accc --- /dev/null +++ b/packages/share-theme/src/scripts/common/debounce.d.ts @@ -0,0 +1,2 @@ +export default function debounce unknown>(executor: T, delay: number): (...args: Parameters) => void; +//# sourceMappingURL=debounce.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/debounce.d.ts.map b/packages/share-theme/src/scripts/common/debounce.d.ts.map new file mode 100644 index 000000000..b93906d0e --- /dev/null +++ b/packages/share-theme/src/scripts/common/debounce.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["debounce.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAElF,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,KAAG,IAAI,CAQhD"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parents.d.ts b/packages/share-theme/src/scripts/common/parents.d.ts new file mode 100644 index 000000000..71e3141fb --- /dev/null +++ b/packages/share-theme/src/scripts/common/parents.d.ts @@ -0,0 +1,2 @@ +export default function parents(el: T, selector: string): HTMLElement[]; +//# sourceMappingURL=parents.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parents.d.ts.map b/packages/share-theme/src/scripts/common/parents.d.ts.map new file mode 100644 index 000000000..6de9cf805 --- /dev/null +++ b/packages/share-theme/src/scripts/common/parents.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parents.d.ts","sourceRoot":"","sources":["parents.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,iBAM7E"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parsehtml.d.ts b/packages/share-theme/src/scripts/common/parsehtml.d.ts new file mode 100644 index 000000000..14388138c --- /dev/null +++ b/packages/share-theme/src/scripts/common/parsehtml.d.ts @@ -0,0 +1,2 @@ +export default function parseHTML(html: string, fragment?: boolean): Node | NodeListOf; +//# sourceMappingURL=parsehtml.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parsehtml.d.ts.map b/packages/share-theme/src/scripts/common/parsehtml.d.ts.map new file mode 100644 index 000000000..666bc507a --- /dev/null +++ b/packages/share-theme/src/scripts/common/parsehtml.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parsehtml.d.ts","sourceRoot":"","sources":["parsehtml.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,gCAM/D"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/index.d.ts b/packages/share-theme/src/scripts/index.d.ts new file mode 100644 index 000000000..e8e54e326 --- /dev/null +++ b/packages/share-theme/src/scripts/index.d.ts @@ -0,0 +1,3 @@ +import "highlight.js/styles/default.css"; +import "@triliumnext/ckeditor5/src/theme/ck-content.css"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/index.d.ts.map b/packages/share-theme/src/scripts/index.d.ts.map new file mode 100644 index 000000000..251337575 --- /dev/null +++ b/packages/share-theme/src/scripts/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAQA,OAAO,iCAAiC,CAAC;AACzC,OAAO,iDAAiD,CAAC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/api.d.ts b/packages/share-theme/src/scripts/modules/api.d.ts new file mode 100644 index 000000000..5f21d8839 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/api.d.ts @@ -0,0 +1,11 @@ +/** + * Fetch note with given ID from backend + * + * @param noteId of the given note to be fetched. If false, fetches current note. + */ +declare function fetchNote(noteId?: string | null): Promise; +declare const _default: { + fetchNote: typeof fetchNote; +}; +export default _default; +//# sourceMappingURL=api.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/api.d.ts.map b/packages/share-theme/src/scripts/modules/api.d.ts.map new file mode 100644 index 000000000..2867b765b --- /dev/null +++ b/packages/share-theme/src/scripts/modules/api.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iBAAe,SAAS,CAAC,MAAM,GAAE,MAAM,GAAG,IAAW,gBAQpD;;;;AAED,wBAEE"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/expanders.d.ts b/packages/share-theme/src/scripts/modules/expanders.d.ts new file mode 100644 index 000000000..b3b2fee98 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/expanders.d.ts @@ -0,0 +1,2 @@ +export default function setupExpanders(): void; +//# sourceMappingURL=expanders.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/expanders.d.ts.map b/packages/share-theme/src/scripts/modules/expanders.d.ts.map new file mode 100644 index 000000000..725e08f8c --- /dev/null +++ b/packages/share-theme/src/scripts/modules/expanders.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"expanders.d.ts","sourceRoot":"","sources":["expanders.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,cAAc,SAkBrC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/math.d.ts b/packages/share-theme/src/scripts/modules/math.d.ts new file mode 100644 index 000000000..0efafccd5 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/math.d.ts @@ -0,0 +1,3 @@ +import "katex/dist/katex.min.css"; +export default function setupMath(): Promise; +//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/math.d.ts.map b/packages/share-theme/src/scripts/modules/math.d.ts.map new file mode 100644 index 000000000..07dc005cf --- /dev/null +++ b/packages/share-theme/src/scripts/modules/math.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["math.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,wBAA8B,SAAS,kBAatC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mermaid.d.ts b/packages/share-theme/src/scripts/modules/mermaid.d.ts new file mode 100644 index 000000000..5f8cdb13c --- /dev/null +++ b/packages/share-theme/src/scripts/modules/mermaid.d.ts @@ -0,0 +1,2 @@ +export default function setupMermaid(): Promise; +//# sourceMappingURL=mermaid.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mermaid.d.ts.map b/packages/share-theme/src/scripts/modules/mermaid.d.ts.map new file mode 100644 index 000000000..58a556c4a --- /dev/null +++ b/packages/share-theme/src/scripts/modules/mermaid.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["mermaid.ts"],"names":[],"mappings":"AAAA,wBAA8B,YAAY,kBAqBzC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mobile.d.ts b/packages/share-theme/src/scripts/modules/mobile.d.ts new file mode 100644 index 000000000..284da2404 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/mobile.d.ts @@ -0,0 +1,2 @@ +export default function setupMobileMenu(): void; +//# sourceMappingURL=mobile.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mobile.d.ts.map b/packages/share-theme/src/scripts/modules/mobile.d.ts.map new file mode 100644 index 000000000..caf6de3c8 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/mobile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["mobile.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,SAqBtC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/search.d.ts b/packages/share-theme/src/scripts/modules/search.d.ts new file mode 100644 index 000000000..737734b84 --- /dev/null +++ b/packages/share-theme/src/scripts/modules/search.d.ts @@ -0,0 +1,2 @@ +export default function setupSearch(): void; +//# sourceMappingURL=search.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/search.d.ts.map b/packages/share-theme/src/scripts/modules/search.d.ts.map new file mode 100644 index 000000000..78491705d --- /dev/null +++ b/packages/share-theme/src/scripts/modules/search.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,OAAO,UAAU,WAAW,SAqClC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/theme.d.ts b/packages/share-theme/src/scripts/modules/theme.d.ts new file mode 100644 index 000000000..f357f8ddd --- /dev/null +++ b/packages/share-theme/src/scripts/modules/theme.d.ts @@ -0,0 +1,8 @@ +/** + * Note: + * + * - Setting of the .theme-dark or .theme-light is done in the share template's to avoid a flash. + * - Setting of the value of the checkbox is also done in the template, near the definition of the input box. + */ +export default function setupThemeSelector(): void; +//# sourceMappingURL=theme.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/theme.d.ts.map b/packages/share-theme/src/scripts/modules/theme.d.ts.map new file mode 100644 index 000000000..560bad1fa --- /dev/null +++ b/packages/share-theme/src/scripts/modules/theme.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["theme.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,CAAC,OAAO,UAAU,kBAAkB,SAOzC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/toc.d.ts b/packages/share-theme/src/scripts/modules/toc.d.ts new file mode 100644 index 000000000..e6e80805c --- /dev/null +++ b/packages/share-theme/src/scripts/modules/toc.d.ts @@ -0,0 +1,12 @@ +/** + * The ToC is now generated in the page template so + * it even exists for users without client-side js + * and that means it loads with the page so it avoids + * all potential reshuffling or layout recalculations. + * + * So, all this function needs to do is make the links + * perform smooth animation, and adjust the "active" + * entry as the user scrolls. + */ +export default function setupToC(): void; +//# sourceMappingURL=toc.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/toc.d.ts.map b/packages/share-theme/src/scripts/modules/toc.d.ts.map new file mode 100644 index 000000000..1d2a8b0ce --- /dev/null +++ b/packages/share-theme/src/scripts/modules/toc.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["toc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,SAoC/B"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/test.d.ts b/packages/share-theme/src/scripts/test.d.ts new file mode 100644 index 000000000..9bcc4712a --- /dev/null +++ b/packages/share-theme/src/scripts/test.d.ts @@ -0,0 +1,2 @@ +export {}; +//# sourceMappingURL=test.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/test.d.ts.map b/packages/share-theme/src/scripts/test.d.ts.map new file mode 100644 index 000000000..ffac09233 --- /dev/null +++ b/packages/share-theme/src/scripts/test.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":""} \ No newline at end of file From 25ac9e2aa109afd11eadf5af8aa98de12b249932 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:54:40 +0000 Subject: [PATCH 07/54] Fix spelling, grammar, and broken links in documentation Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/User Guide/User Guide/AI.md | 2 +- .../Advanced Usage/Custom Request Handler.md | 8 +++---- .../Basic Concepts and Features/Notes.md | 2 +- docs/User Guide/User Guide/Note Types.md | 2 +- docs/User Guide/User Guide/Troubleshooting.md | 4 ++-- docs/index.md | 22 +++++++++---------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/User Guide/User Guide/AI.md b/docs/User Guide/User Guide/AI.md index d17f454c3..57302d77d 100644 --- a/docs/User Guide/User Guide/AI.md +++ b/docs/User Guide/User Guide/AI.md @@ -21,7 +21,7 @@ You will then need to set up the AI “provider” that you wish to use to creat In the following example, we're going to use our self-hosted Ollama instance to create the embeddings for our Notes. You can see additional documentation about installing your own Ollama locally in Installing Ollama. -To see what embedding models Ollama has available, you can check out [this search](https://ollama.com/search?c=embedding)on their website, and then `pull` whichever one you want to try out. As of 4/15/25, my personal favorite is `mxbai-embed-large`. +To see what embedding models Ollama has available, you can check out [this search](https://ollama.com/search?c=embedding) on their website, and then `pull` whichever one you want to try out. A popular choice is `mxbai-embed-large`. First, we'll need to select the Ollama provider from the tabs of providers, then we will enter in the Base URL for our Ollama. Since our Ollama is running on our local machine, our Base URL is `http://localhost:11434`. We will then hit the “refresh” button to have it fetch our models: diff --git a/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md b/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md index 52991f136..6d2c1e734 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md +++ b/docs/User Guide/User Guide/Advanced Usage/Custom Request Handler.md @@ -14,7 +14,7 @@ const {secret, title, content} = req.body; if (req.method == 'POST' && secret === 'secret-password') { // notes must be saved somewhere in the tree hierarchy specified by a parent note. // This is defined by a relation from this code note to the "target" parent note - // alternetively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note) + // alternatively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note) const targetParentNoteId = api.currentNote.getRelationValue('targetNote'); const {note} = api.createTextNote(targetParentNoteId, title, content); @@ -37,7 +37,7 @@ This script note has also following two attributes: Let's test this by using an HTTP client to send a request: ``` -POST http://my.trilium.org/custom/create-note +POST http://your-trilium-server/custom/create-note Content-Type: application/json { @@ -70,7 +70,7 @@ For more information, see [Custom Resource Providers](Custom%20Resource%20Provi REST request paths often contain parameters in the URL, e.g.: ``` -http://my.trilium.org/custom/notes/123 +http://your-trilium-server/custom/notes/123 ``` The last part is dynamic so the matching of the URL must also be dynamic - for this reason the matching is done with regular expressions. Following `customRequestHandler` value would match it: @@ -85,4 +85,4 @@ Additionally, this also defines a matching group with the use of parenthesis whi const noteId = api.pathParams[0]; ``` -Often you also need query params (as in e.g. `http://my.trilium.org/custom/notes?noteId=123`), you can get those with standard express `req.query.noteId`. \ No newline at end of file +Often you also need query params (as in e.g. `http://your-trilium-server/custom/notes?noteId=123`), you can get those with standard express `req.query.noteId`. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md b/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md index 8cb069e53..d461a3506 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Notes.md @@ -25,7 +25,7 @@ When you delete a note in Trilium, it is actually only marked for deletion (soft Within (by default) 7 days, it is possible to undelete these soft-deleted notes - open the Recent Changes dialog, and you will see a list of all modified notes including the deleted ones. Notes available for undeletion have a link to do so. This is kind of "trash can" functionality known from e.g. Windows. -Clicking an undelete will recover the note, it's content and attributes - note should be just as before being deleted. This action will also undelete note's children which have been deleted in the same action. +Clicking an undelete will recover the note, its content and attributes - note should be just as before being deleted. This action will also undelete note's children which have been deleted in the same action. To be able to undelete a note, it is necessary that deleted note's parent must be undeleted (otherwise there's no place where we can undelete it to). This might become a problem when you delete more notes in succession - the solution is then undelete in the reverse order of your deletion. diff --git a/docs/User Guide/User Guide/Note Types.md b/docs/User Guide/User Guide/Note Types.md index 2e0540dcf..27958b4ab 100644 --- a/docs/User Guide/User Guide/Note Types.md +++ b/docs/User Guide/User Guide/Note Types.md @@ -1,5 +1,5 @@ # Note Types -One core features of Trilium is that it supports multiple types of notes, depending on the need. +One of the core features of Trilium is that it supports multiple types of notes, depending on the need. ## Creating a new note with a different type via the note tree diff --git a/docs/User Guide/User Guide/Troubleshooting.md b/docs/User Guide/User Guide/Troubleshooting.md index f439d1185..b97b459ed 100644 --- a/docs/User Guide/User Guide/Troubleshooting.md +++ b/docs/User Guide/User Guide/Troubleshooting.md @@ -1,5 +1,5 @@ # Troubleshooting -As Trilium is currently in beta, encountering bugs is to be expected. +While Trilium is actively maintained and stable, encountering bugs is possible. ## General Quick Fix @@ -21,7 +21,7 @@ TRILIUM_START_NOTE_ID=root ./trilium ## Broken Script Prevents Application Startup -If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: +If a custom script causes Trilium to crash, and it is set as a startup script or in an active [custom widget](Scripting/Custom%20Widgets.md), start Trilium in "safe mode" to prevent any custom scripts from executing: ``` TRILIUM_SAFE_MODE=true ./trilium diff --git a/docs/index.md b/docs/index.md index 5bf104216..33bbff30d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,27 +21,27 @@ Trilium Notes is a powerful, feature-rich note-taking application designed for b
-- :material-rocket-launch-outline: **[Quick Start Guide](User%20Guide/quick-start.md)** +- :material-rocket-launch-outline: **[Quick Start Guide](User%20Guide/User%20Guide/Quick%20Start.md)** Get up and running with Trilium in minutes -- :material-download: **[Installation](User%20Guide/installation.md)** +- :material-download: **[Desktop Installation](User%20Guide/User%20Guide/Installation%20%26%20Setup/Desktop%20Installation.md)** - Download and install Trilium on your platform + Download and install Trilium on your desktop -- :material-docker: **[Docker Setup](User%20Guide/docker.md)** +- :material-server: **[Server Installation](User%20Guide/User%20Guide/Installation%20%26%20Setup/Server%20Installation.md)** - Deploy Trilium using Docker containers + Deploy Trilium as a server -- :material-book-open-variant: **[User Guide](User%20Guide/index.md)** +- :material-book-open-variant: **[User Guide](User%20Guide/User%20Guide.md)** Comprehensive guide to all features -- :material-code-braces: **[Script API](Script%20API/index.md)** +- :material-code-braces: **[Script API](Script%20API/index.html)** Automate and extend Trilium with scripting -- :material-wrench: **[Developer Guide](Developer%20Guide/index.md)** +- :material-wrench: **[Developer Guide](Developer%20Guide/Developer%20Guide/Environment%20Setup.md)** Contributing and development documentation @@ -80,14 +80,14 @@ Trilium Notes is a powerful, feature-rich note-taking application designed for b ## Getting Help -- **[FAQ](support/faq.md)** - Frequently asked questions -- **[Troubleshooting](support/troubleshooting.md)** - Common issues and solutions +- **[FAQ](User%20Guide/User%20Guide/FAQ.md)** - Frequently asked questions +- **[Troubleshooting](User%20Guide/User%20Guide/Troubleshooting.md)** - Common issues and solutions - **[Community Forum](https://github.com/triliumnext/trilium/discussions)** - Ask questions and share tips - **[Issue Tracker](https://github.com/triliumnext/trilium/issues)** - Report bugs and request features ## Contributing -Trilium is open-source and welcomes contributions! Check out our [Contributing Guide](Developer%20Guide/contributing.md) to get started. +Trilium is open-source and welcomes contributions! Check out our [GitHub repository](https://github.com/triliumnext/trilium) to get started. ## License From 7cdd8ffbe2f8a39c367647507b86098fae60e9ff Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:56:46 +0000 Subject: [PATCH 08/54] Add gitignore for build artifacts and verify tests pass Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- .gitignore | 4 ++++ packages/ckeditor5-admonition/sample/ckeditor.js.map | 1 - packages/ckeditor5-admonition/src/admonition.js.map | 1 - packages/ckeditor5-admonition/src/admonitionautoformat.js.map | 1 - packages/ckeditor5-admonition/src/admonitioncommand.js.map | 1 - packages/ckeditor5-admonition/src/admonitionediting.js.map | 1 - packages/ckeditor5-admonition/src/admonitionui.js.map | 1 - packages/ckeditor5-admonition/src/augmentation.js.map | 1 - packages/ckeditor5-admonition/src/index.js.map | 1 - packages/ckeditor5-footnotes/sample/ckeditor.js.map | 1 - packages/ckeditor5-footnotes/src/augmentation.js.map | 1 - packages/ckeditor5-footnotes/src/constants.js.map | 1 - packages/ckeditor5-footnotes/src/footnote-ui.js.map | 1 - packages/ckeditor5-footnotes/src/footnotes.js.map | 1 - packages/ckeditor5-footnotes/src/index.js.map | 1 - .../ckeditor5-footnotes/src/insert-footnote-command.js.map | 1 - packages/ckeditor5-footnotes/src/utils.js.map | 1 - packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map | 1 - packages/ckeditor5-keyboard-marker/src/augmentation.js.map | 1 - packages/ckeditor5-keyboard-marker/src/index.js.map | 1 - packages/ckeditor5-keyboard-marker/src/kbd.js.map | 1 - packages/ckeditor5-keyboard-marker/src/kbdediting.js.map | 1 - packages/ckeditor5-keyboard-marker/src/kbdui.js.map | 1 - packages/ckeditor5-math/sample/ckeditor.js.map | 1 - packages/ckeditor5-math/src/augmentation.js.map | 1 - packages/ckeditor5-math/src/autoformatmath.js.map | 1 - packages/ckeditor5-math/src/automath.js.map | 1 - packages/ckeditor5-math/src/index.js.map | 1 - packages/ckeditor5-math/src/math.js.map | 1 - packages/ckeditor5-math/src/mathcommand.js.map | 1 - packages/ckeditor5-math/src/mathediting.js.map | 1 - packages/ckeditor5-math/src/mathui.js.map | 1 - packages/ckeditor5-math/src/typings-external.js.map | 1 - packages/ckeditor5-math/src/utils.js.map | 1 - packages/ckeditor5-mermaid/sample/ckeditor.js.map | 1 - packages/ckeditor5-mermaid/src/augmentation.js.map | 1 - packages/ckeditor5-mermaid/src/index.js.map | 1 - packages/ckeditor5-mermaid/src/mermaid.js.map | 1 - packages/ckeditor5-mermaid/src/mermaidediting.js.map | 1 - packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map | 1 - packages/ckeditor5-mermaid/src/mermaidui.js.map | 1 - packages/ckeditor5-mermaid/src/utils.js.map | 1 - 42 files changed, 4 insertions(+), 41 deletions(-) delete mode 100644 packages/ckeditor5-admonition/sample/ckeditor.js.map delete mode 100644 packages/ckeditor5-admonition/src/admonition.js.map delete mode 100644 packages/ckeditor5-admonition/src/admonitionautoformat.js.map delete mode 100644 packages/ckeditor5-admonition/src/admonitioncommand.js.map delete mode 100644 packages/ckeditor5-admonition/src/admonitionediting.js.map delete mode 100644 packages/ckeditor5-admonition/src/admonitionui.js.map delete mode 100644 packages/ckeditor5-admonition/src/augmentation.js.map delete mode 100644 packages/ckeditor5-admonition/src/index.js.map delete mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.js.map delete mode 100644 packages/ckeditor5-footnotes/src/augmentation.js.map delete mode 100644 packages/ckeditor5-footnotes/src/constants.js.map delete mode 100644 packages/ckeditor5-footnotes/src/footnote-ui.js.map delete mode 100644 packages/ckeditor5-footnotes/src/footnotes.js.map delete mode 100644 packages/ckeditor5-footnotes/src/index.js.map delete mode 100644 packages/ckeditor5-footnotes/src/insert-footnote-command.js.map delete mode 100644 packages/ckeditor5-footnotes/src/utils.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/src/augmentation.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/src/index.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/src/kbd.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/src/kbdediting.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/src/kbdui.js.map delete mode 100644 packages/ckeditor5-math/sample/ckeditor.js.map delete mode 100644 packages/ckeditor5-math/src/augmentation.js.map delete mode 100644 packages/ckeditor5-math/src/autoformatmath.js.map delete mode 100644 packages/ckeditor5-math/src/automath.js.map delete mode 100644 packages/ckeditor5-math/src/index.js.map delete mode 100644 packages/ckeditor5-math/src/math.js.map delete mode 100644 packages/ckeditor5-math/src/mathcommand.js.map delete mode 100644 packages/ckeditor5-math/src/mathediting.js.map delete mode 100644 packages/ckeditor5-math/src/mathui.js.map delete mode 100644 packages/ckeditor5-math/src/typings-external.js.map delete mode 100644 packages/ckeditor5-math/src/utils.js.map delete mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.js.map delete mode 100644 packages/ckeditor5-mermaid/src/augmentation.js.map delete mode 100644 packages/ckeditor5-mermaid/src/index.js.map delete mode 100644 packages/ckeditor5-mermaid/src/mermaid.js.map delete mode 100644 packages/ckeditor5-mermaid/src/mermaidediting.js.map delete mode 100644 packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map delete mode 100644 packages/ckeditor5-mermaid/src/mermaidui.js.map delete mode 100644 packages/ckeditor5-mermaid/src/utils.js.map diff --git a/.gitignore b/.gitignore index b2c4e3c46..81eb71234 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,7 @@ upload # docs site/ + +# TypeScript and JavaScript maps +*.js.map +*.d.ts.map diff --git a/packages/ckeditor5-admonition/sample/ckeditor.js.map b/packages/ckeditor5-admonition/sample/ckeditor.js.map deleted file mode 100644 index ca410d012..000000000 --- a/packages/ckeditor5-admonition/sample/ckeditor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,UAAU,MAAM,sBAAsB,CAAC;AAE9C,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,UAAU;QACV,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,YAAY;QACZ,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonition.js.map b/packages/ckeditor5-admonition/src/admonition.js.map deleted file mode 100644 index 6d951e1d8..000000000 --- a/packages/ckeditor5-admonition/src/admonition.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"admonition.js","sourceRoot":"","sources":["admonition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,iBAAiB,MAAM,wBAAwB,CAAC;AACvD,OAAO,YAAY,MAAM,mBAAmB,CAAC;AAC7C,OAAO,oBAAoB,MAAM,2BAA2B,CAAC;AAE7D,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAEtC,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,iBAAiB,EAAE,YAAY,EAAE,oBAAoB,CAAW,CAAC;IAC3E,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,YAAqB,CAAC;IAC9B,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionautoformat.js.map b/packages/ckeditor5-admonition/src/admonitionautoformat.js.map deleted file mode 100644 index 89440d086..000000000 --- a/packages/ckeditor5-admonition/src/admonitionautoformat.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"admonitionautoformat.js","sourceRoot":"","sources":["admonitionautoformat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACvE,OAAO,EAAkB,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1E,SAAS,sBAAsB,CAAC,KAAuB;IACtD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO;IACR,CAAC;IAED,IAAK,gBAAsC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChE,OAAO,KAAK,CAAC,CAAC,CAAmB,CAAC;IACnC,CAAC;AACF,CAAC;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,MAAM;IAEvD,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,UAAU,CAAE,CAAC;IACvB,CAAC;IAED,SAAS;QACR,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,OAAO;QACR,CAAC;QAED,MAAM,QAAQ,GAAI,IAAY,CAAC;QAC/B,sBAAsB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE;;YAChF,MAAM,IAAI,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;YAE3C,IAAI,IAAI,EAAE,CAAC;gBACV,4DAA4D;gBAC5D,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACP,qFAAqF;gBACrF,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBAClC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACtB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,CAAC,MAAA,KAAK,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;gBACrE,CAAC;YACF,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitioncommand.js.map b/packages/ckeditor5-admonition/src/admonitioncommand.js.map deleted file mode 100644 index c92080a67..000000000 --- a/packages/ckeditor5-admonition/src/admonitioncommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"admonitioncommand.js","sourceRoot":"","sources":["admonitioncommand.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionediting.js.map b/packages/ckeditor5-admonition/src/admonitionediting.js.map deleted file mode 100644 index ac02c16ad..000000000 --- a/packages/ckeditor5-admonition/src/admonitionediting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"admonitionediting.js","sourceRoot":"","sources":["admonitionediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/admonitionui.js.map b/packages/ckeditor5-admonition/src/admonitionui.js.map deleted file mode 100644 index 4ac94e179..000000000 --- a/packages/ckeditor5-admonition/src/admonitionui.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"admonitionui.js","sourceRoot":"","sources":["admonitionui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/augmentation.js.map b/packages/ckeditor5-admonition/src/augmentation.js.map deleted file mode 100644 index 39249be26..000000000 --- a/packages/ckeditor5-admonition/src/augmentation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-admonition/src/index.js.map b/packages/ckeditor5-admonition/src/index.js.map deleted file mode 100644 index ebdd4b71d..000000000 --- a/packages/ckeditor5-admonition/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,MAAM,mCAAmC,CAAC;AAC/D,OAAO,mBAAmB,CAAC;AAC3B,OAAO,yBAAyB,CAAC;AAEjC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAG5E,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,cAAc;CACd,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.js.map b/packages/ckeditor5-footnotes/sample/ckeditor.js.map deleted file mode 100644 index 6f02908e9..000000000 --- a/packages/ckeditor5-footnotes/sample/ckeditor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,SAAS,MAAM,qBAAqB,CAAC;AAE5C,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,SAAS;QACT,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,WAAW;QACX,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/augmentation.js.map b/packages/ckeditor5-footnotes/src/augmentation.js.map deleted file mode 100644 index 39249be26..000000000 --- a/packages/ckeditor5-footnotes/src/augmentation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/constants.js.map b/packages/ckeditor5-footnotes/src/constants.js.map deleted file mode 100644 index 06bd57032..000000000 --- a/packages/ckeditor5-footnotes/src/constants.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"constants.js","sourceRoot":"","sources":["constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAC;AACjD,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC;AAEnD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,YAAY,EAAE,cAAc;IAC5B,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,gBAAgB,EAAE,kBAAkB;CACpC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG;IACtB,eAAe,EAAE,kBAAkB;IACnC,YAAY,EAAE,eAAe;IAC7B,iBAAiB,EAAE,oBAAoB;IACvC,eAAe,EAAE,kBAAkB;IACnC,gBAAgB,EAAE,oBAAoB;IACtC,SAAS,EAAE,WAAW,EAAE,6DAA6D;IACrF,MAAM,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACvB,cAAc,EAAE,gBAAgB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB,eAAe,EAAE,uBAAuB;IACxC,UAAU,EAAE,kBAAkB;IAC9B,aAAa,EAAE,qBAAqB;IACpC,YAAY,EAAE,oBAAoB;IAClC,iBAAiB,EAAE,yBAAyB;IAC5C,eAAe,EAAE,uBAAuB;IACxC,gBAAgB,EAAE,yBAAyB;IAC3C,oBAAoB,EAAE,8BAA8B;CACpD,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-ui.js.map b/packages/ckeditor5-footnotes/src/footnote-ui.js.map deleted file mode 100644 index 756c97e42..000000000 --- a/packages/ckeditor5-footnotes/src/footnote-ui.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"footnote-ui.js","sourceRoot":"","sources":["footnote-ui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,SAAS,EAAmC,UAAU,EAAE,MAAM,WAAW,CAAC;AAE/I,OAAO,EACN,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,sBAAsB,EACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,kBAAkB,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAEtC,MAAM,KAAK,UAAU;QAC3B,OAAO,YAAqB,CAAC;IAC9B,CAAC;IAEM,IAAI;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAC,EAAE;YAChE,MAAM,YAAY,GAAG,cAAc,CAAE,MAAM,EAAE,eAAe,CAAE,CAAC;YAC/D,MAAM,eAAe,GAAG,YAAY,CAAC,UAAU,CAAC;YAEhD,gDAAgD;YAChD,sFAAsF;YACtF,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,QAAQ,CAAC,cAAc,CAAE,CAAC;YAC/D,IAAK,CAAC,OAAO,EAAG,CAAC;gBAChB,MAAM,IAAI,KAAK,CAAE,oBAAoB,CAAE,CAAC;YACzC,CAAC;YAED,eAAe,CAAC,GAAG,CAAE;gBACpB,KAAK,EAAE,SAAS,CAAE,UAAU,CAAE;gBAC9B,IAAI,EAAE,kBAAkB;gBACxB,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;aAClB,CAAE,CAAC;YACJ,eAAe,CAAC,IAAI,CAAE,MAAM,CAAE,CAAC,EAAE,CAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAE,CAAC;YACxE,eAAe,CAAC,EAAE,CAAE,SAAS,EAAE,GAAG,EAAE;gBACnC,MAAM,CAAC,OAAO,CAAE,QAAQ,CAAC,cAAc,EAAE;oBACxC,aAAa,EAAE,CAAC;iBAChB,CAAE,CAAC;gBACJ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAE,CAAC;YAEJ,YAAY,CAAC,KAAK,GAAG,wBAAwB,CAAC;YAC9C,YAAY,CAAC,IAAI,CAAE,WAAW,CAAE,CAAC,EAAE,CAAE,OAAO,CAAE,CAAC;YAC/C,YAAY,CAAC,EAAE,CACd,eAAe,EACf,CAAE,GAAG,EAAE,YAAY,EAAE,QAAQ,EAAG,EAAE;;gBACjC,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,0CAAE,KAAK,CAAC,KAAK,EAAE,CAAC;gBACtC,IAAK,QAAQ,EAAG,CAAC;oBAChB,iBAAiB,CAChB,YAAY,EACZ,IAAI,CAAC,2BAA2B,EAAS,CACzC,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACP,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,0CAAE,KAAK,CAAC,KAAK,EAAE,CAAC;oBACtC,MAAM,WAAW,GAAG,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,QAAQ,0CAAE,OAAO,CAAC;oBACpD,IAAK,WAAW,IAAI,WAAW,CAAC,UAAU,EAAG,CAAC;wBAC7C,WAAW,CAAC,UAAU,CAAC,WAAW,CAAE,WAAW,CAAE,CAAC;oBACnD,CAAC;gBACF,CAAC;YACF,CAAC,CACD,CAAC;YACF,oEAAoE;YACpE,IAAI,CAAC,QAAQ,CAAE,YAAY,EAAE,SAAS,EAAE,GAAG,CAAC,EAAE;gBAC7C,MAAM,CAAC,OAAO,CAAE,QAAQ,CAAC,cAAc,EAAE;oBACxC,aAAa,EAAI,GAAG,CAAC,MAAe,CAAC,YAAY;iBACjD,CAAE,CAAC;gBACJ,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAE,CAAC;YAEJ,OAAO,YAAY,CAAC;QACrB,CAAC,CAAE,CAAC;IACL,CAAC;IAEM,2BAA2B;QACjC,MAAM,eAAe,GAAG,IAAI,UAAU,EAA8B,CAAC;QACrE,MAAM,UAAU,GAA+B;YAC9C,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,IAAI,SAAS,CAAE;gBACrB,YAAY,EAAE,CAAC;gBACf,KAAK,EAAE,cAAc;gBACrB,QAAQ,EAAE,IAAI;aACd,CAAE;SACH,CAAC;QACF,eAAe,CAAC,GAAG,CAAE,UAAU,CAAE,CAAC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACzD,IAAK,CAAC,WAAW,EAAG,CAAC;YACpB,MAAM,IAAI,KAAK,CAAE,+BAA+B,CAAE,CAAC;QACpD,CAAC;QAED,MAAM,eAAe,GAAG,iBAAiB,CACxC,IAAI,CAAC,MAAM,EACX,WAAW,EACX,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAE,SAAS,EAAE,QAAQ,CAAC,eAAe,CAAE,CAC5D,CAAC;QAEF,IAAK,eAAe,EAAG,CAAC;YACvB,MAAM,aAAa,GAAG,qBAAqB,CAC1C,IAAI,CAAC,MAAM,EACX,WAAW,EACX,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAE,SAAS,EAAE,QAAQ,CAAC,YAAY,CAAE,CACzD,CAAC;YACF,aAAa,CAAC,OAAO,CAAE,QAAQ,CAAC,EAAE;gBACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,YAAY,CAAE,UAAU,CAAC,aAAa,CAAE,CAAC;gBAChE,MAAM,UAAU,GAA+B;oBAC9C,IAAI,EAAE,QAAQ;oBACd,KAAK,EAAE,IAAI,SAAS,CAAE;wBACrB,YAAY,EAAE,KAAK;wBACnB,KAAK,EAAE,mBAAoB,KAAM,EAAE;wBACnC,QAAQ,EAAE,IAAI;qBACd,CAAE;iBACH,CAAC;gBAEF,eAAe,CAAC,GAAG,CAAE,UAAU,CAAE,CAAC;YACnC,CAAC,CAAE,CAAC;QACL,CAAC;QAED,OAAO,eAAe,CAAC;IACxB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnotes.js.map b/packages/ckeditor5-footnotes/src/footnotes.js.map deleted file mode 100644 index 8f266e255..000000000 --- a/packages/ckeditor5-footnotes/src/footnotes.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"footnotes.js","sourceRoot":"","sources":["footnotes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,eAAe,MAAM,wCAAwC,CAAC;AACrE,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAE1C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,MAAM;IACrC,MAAM,KAAK,UAAU;QAC3B,OAAO,WAAoB,CAAC;IAC7B,CAAC;IAEM,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,eAAe,EAAE,UAAU,CAAW,CAAC;IACjD,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/index.js.map b/packages/ckeditor5-footnotes/src/index.js.map deleted file mode 100644 index cfaafa124..000000000 --- a/packages/ckeditor5-footnotes/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,kBAAkB,MAAM,0CAA0C,CAAC;AAC1E,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,kBAAkB;CAClB,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map b/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map deleted file mode 100644 index 441d6a4e4..000000000 --- a/packages/ckeditor5-footnotes/src/insert-footnote-command.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"insert-footnote-command.js","sourceRoot":"","sources":["insert-footnote-command.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/utils.js.map b/packages/ckeditor5-footnotes/src/utils.js.map deleted file mode 100644 index d80b38c11..000000000 --- a/packages/ckeditor5-footnotes/src/utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map deleted file mode 100644 index 4b6fa9283..000000000 --- a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,GAAG,MAAM,eAAe,CAAC;AAEhC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,GAAG;QACH,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,gBAAgB;QAChB,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/augmentation.js.map b/packages/ckeditor5-keyboard-marker/src/augmentation.js.map deleted file mode 100644 index 39249be26..000000000 --- a/packages/ckeditor5-keyboard-marker/src/augmentation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/index.js.map b/packages/ckeditor5-keyboard-marker/src/index.js.map deleted file mode 100644 index 8493287a6..000000000 --- a/packages/ckeditor5-keyboard-marker/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,4BAA4B,CAAC;AACjD,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,OAAO;CACP,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbd.js.map b/packages/ckeditor5-keyboard-marker/src/kbd.js.map deleted file mode 100644 index 3dc6dcb3e..000000000 --- a/packages/ckeditor5-keyboard-marker/src/kbd.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"kbd.js","sourceRoot":"","sources":["kbd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,UAAU,MAAM,iBAAiB,CAAC;AACzC,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,GAAI,SAAQ,MAAM;IAEtC,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,UAAU,EAAE,KAAK,CAAE,CAAC;IAC9B,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,KAAc,CAAC;IACvB,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map b/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map deleted file mode 100644 index d92aebc98..000000000 --- a/packages/ckeditor5-keyboard-marker/src/kbdediting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"kbdediting.js","sourceRoot":"","sources":["kbdediting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAErD,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,MAAM;IAEtC,MAAM,KAAK,UAAU;QAC3B,OAAO,YAAqB,CAAC;IAC9B,CAAC;IAED;;OAEG;IACH,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,qCAAqC;QACrC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAE,OAAO,EAAE,EAAE,eAAe,EAAE,GAAG,EAAE,CAAE,CAAC;QAChE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,sBAAsB,CAAE,GAAG,EAAE;YAChD,YAAY,EAAE,IAAI;YAClB,WAAW,EAAE,IAAI;SACjB,CAAE,CAAC;QAEJ,MAAM,CAAC,UAAU,CAAC,kBAAkB,CAAE;YACrC,KAAK,EAAE,GAAG;YACV,IAAI,EAAE,GAAG;SACT,CAAE,CAAC;QAEJ,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,GAAG,EAAE,IAAI,gBAAgB,CAAE,MAAM,EAAE,GAAG,CAAE,CAAE,CAAC;QAChE,MAAM,CAAC,UAAU,CAAC,GAAG,CAAE,YAAY,EAAE,GAAG,CAAE,CAAC;IAC5C,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/src/kbdui.js.map b/packages/ckeditor5-keyboard-marker/src/kbdui.js.map deleted file mode 100644 index 36e50266b..000000000 --- a/packages/ckeditor5-keyboard-marker/src/kbdui.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"kbdui.js","sourceRoot":"","sources":["kbdui.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,OAAO,MAAM,4BAA4B,CAAC;AAEjD,MAAM,GAAG,GAAG,KAAK,CAAC;AAElB;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,MAAM;IAEjC,MAAM,KAAK,UAAU;QAC3B,OAAO,OAAgB,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,IAAI;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEnB,MAAM,CAAC,EAAE,CAAC,gBAAgB,CAAC,GAAG,CAAE,GAAG,EAAE,MAAM,CAAC,EAAE;YAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,GAAG,CAAsB,CAAC;YAC/D,MAAM,IAAI,GAAG,IAAI,UAAU,CAAE,MAAM,CAAE,CAAC;YAEtC,IAAI,CAAC,GAAG,CAAE;gBACT,KAAK,EAAE,CAAC,CAAE,mBAAmB,CAAE;gBAC/B,IAAI,EAAE,OAAO;gBACb,SAAS,EAAE,YAAY;gBACvB,OAAO,EAAE,IAAI;gBACb,YAAY,EAAE,IAAI;aAClB,CAAE,CAAC;YAEJ,IAAI,CAAC,IAAI,CAAE,MAAM,EAAE,WAAW,CAAE,CAAC,EAAE,CAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAE,CAAC;YAErE,mBAAmB;YACnB,IAAI,CAAC,QAAQ,CAAE,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE;gBACpC,MAAM,CAAC,OAAO,CAAE,GAAG,CAAE,CAAC;gBACtB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAC7B,CAAC,CAAE,CAAC;YAEJ,OAAO,IAAI,CAAC;QACb,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/sample/ckeditor.js.map b/packages/ckeditor5-math/sample/ckeditor.js.map deleted file mode 100644 index 253baa75e..000000000 --- a/packages/ckeditor5-math/sample/ckeditor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,IAAI,MAAM,gBAAgB,CAAC;AAElC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,IAAI;QACJ,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,MAAM;QACN,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/augmentation.js.map b/packages/ckeditor5-math/src/augmentation.js.map deleted file mode 100644 index 39249be26..000000000 --- a/packages/ckeditor5-math/src/augmentation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/autoformatmath.js.map b/packages/ckeditor5-math/src/autoformatmath.js.map deleted file mode 100644 index 7fa8b54a2..000000000 --- a/packages/ckeditor5-math/src/autoformatmath.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"autoformatmath.js","sourceRoot":"","sources":["autoformatmath.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAC;AACvE,4FAA4F;AAC5F,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,MAAM;IAC1C,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,IAAI,EAAE,YAAY,CAAW,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,IAAI;QACV,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE3B,IAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,MAAM,CAAE,EAAG,CAAC;YACrC,UAAU,CAAE,iCAAiC,EAAE,MAAM,CAAE,CAAC;QACzD,CAAC;IACF,CAAC;IAEM,SAAS;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAE,MAAM,CAAE,CAAC;QAE9C,IAAK,OAAO,YAAY,WAAW,EAAG,CAAC;YACtC,MAAM,QAAQ,GAAG,GAAG,EAAE;gBACrB,IAAK,CAAC,OAAO,CAAC,SAAS,EAAG,CAAC;oBAC1B,OAAO,KAAK,CAAC;gBACd,CAAC;gBAED,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;gBAEvB,mCAAmC;gBACnC,MAAM,CAAC,UAAU,CAChB,GAAG,EAAE;oBACJ,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,QAAQ,CAAE,CAAC;oBACtD,IAAK,cAAc,YAAY,MAAM,EAAG,CAAC;wBACxC,cAAc,CAAC,OAAO,EAAE,CAAC;oBAC1B,CAAC;gBACF,CAAC,EACD,EAAE,CACF,CAAC;YACH,CAAC,CAAC;YAEF,wHAAwH;YACxH,sBAAsB,CAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAE,CAAC;YAC3D,wHAAwH;YACxH,sBAAsB,CAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAE,CAAC;QAC5D,CAAC;IACF,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,gBAAyB,CAAC;IAClC,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/automath.js.map b/packages/ckeditor5-math/src/automath.js.map deleted file mode 100644 index 80183ef09..000000000 --- a/packages/ckeditor5-math/src/automath.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"automath.js","sourceRoot":"","sources":["automath.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/index.js.map b/packages/ckeditor5-math/src/index.js.map deleted file mode 100644 index aaf6b7ac6..000000000 --- a/packages/ckeditor5-math/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,mBAAmB,CAAC;AAC3B,OAAO,uBAAuB,CAAC;AAE/B,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ;CACR,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/math.js.map b/packages/ckeditor5-math/src/math.js.map deleted file mode 100644 index a7a614dc4..000000000 --- a/packages/ckeditor5-math/src/math.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"math.js","sourceRoot":"","sources":["math.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,MAAM;IAChC,MAAM,KAAK,QAAQ;QACzB,OAAO,CAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAW,CAAC;IAC3D,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,MAAe,CAAC;IACxB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathcommand.js.map b/packages/ckeditor5-math/src/mathcommand.js.map deleted file mode 100644 index 1d80830c3..000000000 --- a/packages/ckeditor5-math/src/mathcommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mathcommand.js","sourceRoot":"","sources":["mathcommand.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathediting.js.map b/packages/ckeditor5-math/src/mathediting.js.map deleted file mode 100644 index dbc082614..000000000 --- a/packages/ckeditor5-math/src/mathediting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mathediting.js","sourceRoot":"","sources":["mathediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/mathui.js.map b/packages/ckeditor5-math/src/mathui.js.map deleted file mode 100644 index 7ba56ce3a..000000000 --- a/packages/ckeditor5-math/src/mathui.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mathui.js","sourceRoot":"","sources":["mathui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/typings-external.js.map b/packages/ckeditor5-math/src/typings-external.js.map deleted file mode 100644 index 3f121d309..000000000 --- a/packages/ckeditor5-math/src/typings-external.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"typings-external.js","sourceRoot":"","sources":["typings-external.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/utils.js.map b/packages/ckeditor5-math/src/utils.js.map deleted file mode 100644 index cb543f421..000000000 --- a/packages/ckeditor5-math/src/utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.js.map b/packages/ckeditor5-mermaid/sample/ckeditor.js.map deleted file mode 100644 index 93d6202ab..000000000 --- a/packages/ckeditor5-mermaid/sample/ckeditor.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"ckeditor.js","sourceRoot":"","sources":["ckeditor.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,aAAa,EACb,UAAU,EACV,mBAAmB,EACnB,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,SAAS,EACT,UAAU,EACV,OAAO,EACP,KAAK,EACL,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,WAAW,EACX,MAAM,EACN,MAAM,EACN,IAAI,EACJ,IAAI,EACJ,UAAU,EACV,SAAS,EACT,KAAK,EACL,YAAY,EACZ,MAAM,WAAW,CAAC;AAEnB,OAAO,iBAAiB,MAAM,+BAA+B,CAAC;AAE9D,OAAO,OAAO,MAAM,mBAAmB,CAAC;AAExC,OAAO,yBAAyB,CAAC;AAEjC,aAAa;KACX,MAAM,CAAE,QAAQ,CAAC,cAAc,CAAE,QAAQ,CAAG,EAAE;IAC9C,UAAU,EAAE,KAAK;IACjB,OAAO,EAAE;QACR,OAAO;QACP,UAAU;QACV,UAAU;QACV,UAAU;QACV,IAAI;QACJ,OAAO;QACP,KAAK;QACL,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;QACX,MAAM;QACN,MAAM;QACN,IAAI;QACJ,IAAI;QACJ,UAAU;QACV,SAAS;QACT,KAAK;QACL,YAAY;QACZ,SAAS;QACT,IAAI;QACJ,mBAAmB;KACnB;IACD,OAAO,EAAE;QACR,MAAM;QACN,MAAM;QACN,GAAG;QACH,SAAS;QACT,GAAG;QACH,SAAS;QACT,GAAG;QACH,MAAM;QACN,QAAQ;QACR,MAAM;QACN,MAAM;QACN,cAAc;QACd,cAAc;QACd,GAAG;QACH,SAAS;QACT,QAAQ;QACR,GAAG;QACH,aAAa;QACb,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,WAAW;KACX;IACD,KAAK,EAAE;QACN,OAAO,EAAE;YACR,mBAAmB;YACnB,kBAAkB;YAClB,iBAAiB;YACjB,GAAG;YACH,sBAAsB;SACtB;KACD;IACD,KAAK,EAAE;QACN,cAAc,EAAE;YACf,aAAa;YACb,UAAU;YACV,iBAAiB;SACjB;KACD;CACD,CAAE;KACF,IAAI,CAAE,MAAM,CAAC,EAAE;IACf,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,iBAAiB,CAAC,MAAM,CAAE,MAAM,CAAE,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,sBAAsB,EAAE,MAAM,CAAE,CAAC;AACtD,CAAC,CAAE;KACF,KAAK,CAAE,GAAG,CAAC,EAAE;IACb,MAAM,CAAC,OAAO,CAAC,KAAK,CAAE,GAAG,CAAC,KAAK,CAAE,CAAC;AACnC,CAAC,CAAE,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/augmentation.js.map b/packages/ckeditor5-mermaid/src/augmentation.js.map deleted file mode 100644 index 39249be26..000000000 --- a/packages/ckeditor5-mermaid/src/augmentation.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"augmentation.js","sourceRoot":"","sources":["augmentation.ts"],"names":[],"mappings":""} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/index.js.map b/packages/ckeditor5-mermaid/src/index.js.map deleted file mode 100644 index b0b1a8b82..000000000 --- a/packages/ckeditor5-mermaid/src/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,mBAAmB,CAAC;AAE3B,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,QAAQ,MAAM,+BAA+B,CAAC;AACrD,OAAO,iBAAiB,MAAM,iCAAiC,CAAC;AAChE,OAAO,eAAe,MAAM,uCAAuC,CAAC;AACpE,OAAO,aAAa,MAAM,qCAAqC,CAAC;AAChE,OAAO,cAAc,MAAM,sCAAsC,CAAC;AAClE,OAAO,sBAAsB,CAAC;AAE9B,MAAM,CAAC,MAAM,KAAK,GAAG;IACpB,QAAQ;IACR,iBAAiB;IACjB,eAAe;IACf,aAAa;IACb,cAAc;CACd,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaid.js.map b/packages/ckeditor5-mermaid/src/mermaid.js.map deleted file mode 100644 index 95cac22e5..000000000 --- a/packages/ckeditor5-mermaid/src/mermaid.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["mermaid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAEnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAEvC,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,MAAM;IAE1C,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,cAAc,EAAE,cAAc,EAAE,SAAS,CAAE,CAAC;IACtD,CAAC;IAEM,MAAM,KAAK,UAAU;QAC3B,OAAO,SAAkB,CAAC;IAC3B,CAAC;CAED"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidediting.js.map b/packages/ckeditor5-mermaid/src/mermaidediting.js.map deleted file mode 100644 index 61e3f2adc..000000000 --- a/packages/ckeditor5-mermaid/src/mermaidediting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidediting.js","sourceRoot":"","sources":["mermaidediting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map b/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map deleted file mode 100644 index 0aa81301d..000000000 --- a/packages/ckeditor5-mermaid/src/mermaidtoolbar.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidtoolbar.js","sourceRoot":"","sources":["mermaidtoolbar.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAsC,uBAAuB,EAAE,MAAM,WAAW,CAAC;AAGhG,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,MAAM;IAEjD,MAAM,KAAK,QAAQ;QAClB,OAAO,CAAE,uBAAuB,CAAE,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,UAAU;QACpB,OAAO,gBAAyB,CAAC;IAClC,CAAC;IAED,SAAS;QACR,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;QAEnB,MAAM,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAE,uBAAuB,CAAE,CAAC;QAC9E,MAAM,mBAAmB,GAAG,CAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,GAAG,EAAE,aAAa,CAAE,CAAC;QAE9G,IAAK,mBAAmB,EAAG,CAAC;YAC3B,uBAAuB,CAAC,QAAQ,CAAE,gBAAgB,EAAE;gBACnD,SAAS,EAAE,CAAC,CAAE,iBAAiB,CAAE;gBACjC,KAAK,EAAE,mBAAmB;gBAC1B,iBAAiB,EAAE,SAAS,CAAC,EAAE,CAAC,kBAAkB,CAAE,SAAS,CAAE;aAC/D,CAAE,CAAC;QACL,CAAC;IACF,CAAC;CACD;AAED,SAAS,kBAAkB,CAAE,SAAgC;IAC5D,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,EAA4B,CAAC;IAE7E,IAAK,WAAW,IAAI,WAAW,CAAC,QAAQ,CAAE,qBAAqB,CAAE,EAAG,CAAC;QACpE,OAAO,WAAW,CAAC;IACpB,CAAC;IAED,OAAO,IAAI,CAAC;AACb,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/mermaidui.js.map b/packages/ckeditor5-mermaid/src/mermaidui.js.map deleted file mode 100644 index 217972c2f..000000000 --- a/packages/ckeditor5-mermaid/src/mermaidui.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidui.js","sourceRoot":"","sources":["mermaidui.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/utils.js.map b/packages/ckeditor5-mermaid/src/utils.js.map deleted file mode 100644 index 633a5826c..000000000 --- a/packages/ckeditor5-mermaid/src/utils.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"utils.js","sourceRoot":"","sources":["utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CAAE,MAAc,EAAE,WAAmB;;IAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;IAClD,MAAM,WAAW,GAAG,SAAS,CAAC,kBAAkB,EAAE,KAAI,MAAA,SAAS,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAC;IAE1F,IAAK,WAAW,IAAI,WAAW,CAAC,EAAE,CAAE,SAAS,EAAE,SAAS,CAAE,IAAI,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,WAAW,EAAG,CAAC;QAC1H,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"} \ No newline at end of file From daec11b9810a9fc08b381e3b3e6cb6136e2f807f Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:57:26 +0000 Subject: [PATCH 09/54] Fix additional grammar and clarity issues in documentation Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/User Guide/User Guide/Collections.md | 2 +- .../User Guide/Installation & Setup/Desktop Installation.md | 2 +- docs/User Guide/User Guide/Scripting.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/User Guide/User Guide/Collections.md b/docs/User Guide/User Guide/Collections.md index b97b4d952..b80bc49d8 100644 --- a/docs/User Guide/User Guide/Collections.md +++ b/docs/User Guide/User Guide/Collections.md @@ -1,5 +1,5 @@ # Collections -Collections are a unique type of notes that don't have a content, but instead display its child notes in various presentation methods. +Collections are a unique type of notes that don't have content, but instead display their child notes in various presentation methods. ## Main collections diff --git a/docs/User Guide/User Guide/Installation & Setup/Desktop Installation.md b/docs/User Guide/User Guide/Installation & Setup/Desktop Installation.md index c96a1e1cd..c8eb58ee5 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Desktop Installation.md +++ b/docs/User Guide/User Guide/Installation & Setup/Desktop Installation.md @@ -16,4 +16,4 @@ Trilium offers various startup scripts to customize your experience: ## Synchronization -For Trilium desktp users who wish to synchronize their data with a server instance, refer to the Synchronization guide for detailed instructions. \ No newline at end of file +For Trilium desktop users who wish to synchronize their data with a server instance, refer to the Synchronization guide for detailed instructions. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting.md b/docs/User Guide/User Guide/Scripting.md index f5724f8a3..16146aef2 100644 --- a/docs/User Guide/User Guide/Scripting.md +++ b/docs/User Guide/User Guide/Scripting.md @@ -1,7 +1,7 @@ # Scripting Trilium supports creating Code notes, i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside Trilium which can in conjunction with Script API provide extra functionality. -## Scripting +## Architecture Overview To go further I must explain basic architecture of Trilium - in its essence it is a classic web application - it has these two main components: From b1729ad7ec86a20b9a626b9386eed235adb3ccfb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:59:22 +0000 Subject: [PATCH 10/54] Fix additional clarity and grammar issues Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- .../User Guide/Basic Concepts and Features/Navigation/Search.md | 2 +- .../User Guide/Installation & Setup/Server Installation.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md index 70dd3632a..36aebff51 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.md @@ -13,7 +13,7 @@ Note search enables you to find notes by searching for text in the title, conten To search for notes, click on the magnifying glass icon on the toolbar or press the keyboard [shortcut](../Keyboard%20Shortcuts.md). 1. Set the text to search for in the _Search string_ field. - 1. Apart from searching for words ad-literam, there is also the possibility to search for attributes or properties of notes. + 1. Apart from searching for words literally, there is also the possibility to search for attributes or properties of notes. 2. See the examples below for more information. 2. To limit the search to a note and its sub-children, set a note in _Ancestor_. 1. This value is also pre-filled if the search is triggered from a [hoisted note](Note%20Hoisting.md) or a [workspace](Workspaces.md). diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation.md index eb0054c91..ceae67f84 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Server Installation.md +++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation.md @@ -32,7 +32,7 @@ export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data ### Disabling / Modifying the Upload Limit -If you're running into the 250MB limit imposed on the server by default, and you'd like to increase the upload limit, you can set the `TRILIUM_NO_UPLOAD_LIMIT` environment variable to `true` disable it completely: +If you're running into the 250MB limit imposed on the server by default, and you'd like to increase the upload limit, you can set the `TRILIUM_NO_UPLOAD_LIMIT` environment variable to `true` to disable it completely: ``` export TRILIUM_NO_UPLOAD_LIMIT=true From 154492e454392cd642919ff89c067dbe0debc7aa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 21:59:29 +0000 Subject: [PATCH 11/54] Add comprehensive technical and architectural documentation Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/ARCHITECTURE.md | 1016 +++++++++++++++++++++++++++++++ docs/DATABASE.md | 736 ++++++++++++++++++++++ docs/README.md | 22 +- docs/SCRIPTING.md | 734 ++++++++++++++++++++++ docs/SECURITY_ARCHITECTURE.md | 834 +++++++++++++++++++++++++ docs/SYNCHRONIZATION.md | 583 ++++++++++++++++++ docs/TECHNICAL_DOCUMENTATION.md | 423 +++++++++++++ 7 files changed, 4347 insertions(+), 1 deletion(-) create mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/DATABASE.md create mode 100644 docs/SCRIPTING.md create mode 100644 docs/SECURITY_ARCHITECTURE.md create mode 100644 docs/SYNCHRONIZATION.md create mode 100644 docs/TECHNICAL_DOCUMENTATION.md diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 000000000..44d4f99fd --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,1016 @@ +# Trilium Notes - Technical Architecture Documentation + +> **Version:** 0.99.3 +> **Last Updated:** November 2025 +> **Maintainer:** TriliumNext Team + +## Table of Contents + +1. [Introduction](#introduction) +2. [High-Level Architecture](#high-level-architecture) +3. [Monorepo Structure](#monorepo-structure) +4. [Core Architecture Patterns](#core-architecture-patterns) +5. [Data Layer](#data-layer) +6. [Caching System](#caching-system) +7. [Frontend Architecture](#frontend-architecture) +8. [Backend Architecture](#backend-architecture) +9. [API Architecture](#api-architecture) +10. [Build System](#build-system) +11. [Testing Strategy](#testing-strategy) +12. [Security Architecture](#security-architecture) +13. [Related Documentation](#related-documentation) + +--- + +## Introduction + +Trilium Notes is a hierarchical note-taking application built as a TypeScript monorepo. It supports multiple deployment modes (desktop, server, mobile web) and features advanced capabilities including synchronization, scripting, encryption, and rich content editing. + +### Key Characteristics + +- **Monorepo Architecture**: Uses pnpm workspaces for dependency management +- **Multi-Platform**: Desktop (Electron), Server (Node.js/Express), and Mobile Web +- **TypeScript-First**: Strong typing throughout the codebase +- **Plugin-Based**: Extensible architecture for note types and UI components +- **Offline-First**: Full functionality without network connectivity +- **Synchronization-Ready**: Built-in sync protocol for multi-device usage + +### Technology Stack + +- **Runtime**: Node.js (backend), Browser/Electron (frontend) +- **Language**: TypeScript, JavaScript +- **Database**: SQLite (better-sqlite3) +- **Build Tools**: Vite, ESBuild, pnpm +- **UI Framework**: Custom widget-based system +- **Rich Text**: CKEditor 5 (customized) +- **Code Editing**: CodeMirror 6 +- **Desktop**: Electron +- **Server**: Express.js + +--- + +## High-Level Architecture + +Trilium follows a **client-server architecture** even in desktop mode, where Electron runs both the backend server and frontend client within the same process. + +``` +┌─────────────────────────────────────────────────────────────┐ +│ Frontend │ +│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ +│ │ Widgets │ │ Froca │ │ UI │ │ +│ │ System │ │ Cache │ │ Services │ │ +│ └────────────┘ └────────────┘ └────────────┘ │ +│ │ │ +│ WebSocket / REST API │ +│ │ │ +└─────────────────────────┼────────────────────────────────────┘ + │ +┌─────────────────────────┼────────────────────────────────────┐ +│ Backend Server │ +│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ +│ │ Express │ │ Becca │ │ Script │ │ +│ │ Routes │ │ Cache │ │ Engine │ │ +│ └────────────┘ └────────────┘ └────────────┘ │ +│ │ │ +│ ┌────┴─────┐ │ +│ │ SQLite │ │ +│ │ Database │ │ +│ └──────────┘ │ +└─────────────────────────────────────────────────────────────┘ +``` + +### Deployment Modes + +1. **Desktop Application** + - Electron wrapper running both frontend and backend + - Local SQLite database + - Full offline functionality + - Cross-platform (Windows, macOS, Linux) + +2. **Server Installation** + - Node.js server exposing web interface + - Multi-user capable + - Can sync with desktop clients + - Docker deployment supported + +3. **Mobile Web** + - Optimized responsive interface + - Accessed via browser + - Requires server installation + +--- + +## Monorepo Structure + +Trilium uses **pnpm workspaces** to manage its monorepo structure, with apps and packages clearly separated. + +``` +trilium/ +├── apps/ # Runnable applications +│ ├── client/ # Frontend application (shared by server & desktop) +│ ├── server/ # Node.js server with web interface +│ ├── desktop/ # Electron desktop application +│ ├── web-clipper/ # Browser extension for web content capture +│ ├── db-compare/ # Database comparison tool +│ ├── dump-db/ # Database export tool +│ ├── edit-docs/ # Documentation editing tool +│ ├── build-docs/ # Documentation build tool +│ └── website/ # Marketing website +│ +├── packages/ # Shared libraries +│ ├── commons/ # Shared interfaces and utilities +│ ├── ckeditor5/ # Custom rich text editor +│ ├── codemirror/ # Code editor customizations +│ ├── highlightjs/ # Syntax highlighting +│ ├── ckeditor5-admonition/ # CKEditor plugin: admonitions +│ ├── ckeditor5-footnotes/ # CKEditor plugin: footnotes +│ ├── ckeditor5-keyboard-marker/# CKEditor plugin: keyboard shortcuts +│ ├── ckeditor5-math/ # CKEditor plugin: math equations +│ ├── ckeditor5-mermaid/ # CKEditor plugin: diagrams +│ ├── express-partial-content/ # HTTP partial content middleware +│ ├── share-theme/ # Shared note theme +│ ├── splitjs/ # Split pane library +│ └── turndown-plugin-gfm/ # Markdown conversion +│ +├── docs/ # Documentation +├── scripts/ # Build and utility scripts +└── patches/ # Package patches (via pnpm) +``` + +### Package Dependencies + +The monorepo uses workspace protocol (`workspace:*`) for internal dependencies: + +``` +desktop → client → commons +server → client → commons +client → ckeditor5, codemirror, highlightjs +ckeditor5 → ckeditor5-* plugins +``` + +--- + +## Core Architecture Patterns + +### Three-Layer Cache System + +Trilium implements a sophisticated **three-tier caching system** to optimize performance and enable offline functionality: + +#### 1. Becca (Backend Cache) + +Located at: `apps/server/src/becca/` + +```typescript +// Becca caches all entities in memory +class Becca { + notes: Record + branches: Record + attributes: Record + attachments: Record + // ... other entity collections +} +``` + +**Responsibilities:** +- Server-side entity cache +- Maintains complete note tree in memory +- Handles entity relationships and integrity +- Provides fast lookups without database queries +- Manages entity lifecycle (create, update, delete) + +**Key Files:** +- `becca.ts` - Main cache instance +- `becca_loader.ts` - Loads entities from database +- `becca_service.ts` - Cache management operations +- `entities/` - Entity classes (BNote, BBranch, etc.) + +#### 2. Froca (Frontend Cache) + +Located at: `apps/client/src/services/froca.ts` + +```typescript +// Froca is a read-only mirror of backend data +class Froca { + notes: Record + branches: Record + attributes: Record + // ... other entity collections +} +``` + +**Responsibilities:** +- Frontend read-only cache +- Lazy loading of note tree +- Minimizes API calls +- Enables fast UI rendering +- Synchronizes with backend via WebSocket + +**Loading Strategy:** +- Initial load: root notes and immediate children +- Lazy load: notes loaded when accessed +- When note is loaded, all parent and child branches load +- Deleted entities tracked via missing branches + +#### 3. Shaca (Share Cache) + +Located at: `apps/server/src/share/` + +**Responsibilities:** +- Optimized cache for shared/published notes +- Handles public note access without authentication +- Performance-optimized for high-traffic scenarios +- Separate from main Becca to isolate concerns + +### Entity System + +Trilium's data model is based on five core entities: + +``` +┌──────────────────────────────────────────────────────────┐ +│ Note Tree │ +│ │ +│ ┌─────────┐ │ +│ │ Note │ │ +│ │ (BNote) │ │ +│ └────┬────┘ │ +│ │ │ +│ │ linked by │ +│ ▼ │ +│ ┌──────────┐ ┌─────────────┐ │ +│ │ Branch │◄────────│ Attribute │ │ +│ │(BBranch) │ │ (BAttribute)│ │ +│ └──────────┘ └─────────────┘ │ +│ │ │ +│ │ creates │ +│ ▼ │ +│ ┌──────────┐ ┌─────────────┐ │ +│ │ Revision │ │ Attachment │ │ +│ │(BRevision│ │(BAttachment)│ │ +│ └──────────┘ └─────────────┘ │ +│ │ +└──────────────────────────────────────────────────────────┘ +``` + +#### Entity Definitions + +**1. BNote** (`apps/server/src/becca/entities/bnote.ts`) +- Represents a note with title, content, and metadata +- Type can be: text, code, file, image, canvas, mermaid, etc. +- Contains content via blob reference +- Can be protected (encrypted) +- Has creation and modification timestamps + +**2. BBranch** (`apps/server/src/becca/entities/bbranch.ts`) +- Represents parent-child relationship between notes +- Enables note cloning (multiple parents) +- Contains positioning information +- Has optional prefix for customization +- Tracks expansion state in tree + +**3. BAttribute** (`apps/server/src/becca/entities/battribute.ts`) +- Key-value metadata attached to notes +- Two types: labels (tags) and relations (links) +- Can be inheritable to child notes +- Used for search, organization, and scripting +- Supports promoted attributes (displayed prominently) + +**4. BRevision** (`apps/server/src/becca/entities/brevision.ts`) +- Stores historical versions of note content +- Automatic versioning on edits +- Retains title, type, and content +- Enables note history browsing and restoration + +**5. BAttachment** (`apps/server/src/becca/entities/battachment.ts`) +- File attachments linked to notes +- Has owner (note), role, and mime type +- Content stored in blobs +- Can be protected (encrypted) + +**6. BBlob** (`apps/server/src/becca/entities/bblob.ts`) +- Binary large object storage +- Stores actual note content and attachments +- Referenced by notes, revisions, and attachments +- Supports encryption for protected content + +### Widget-Based UI + +The frontend uses a **widget system** for modular, reusable UI components. + +Located at: `apps/client/src/widgets/` + +```typescript +// Widget Hierarchy +BasicWidget +├── NoteContextAwareWidget (responds to note changes) +│ ├── RightPanelWidget (displayed in right sidebar) +│ └── Type-specific widgets +├── Container widgets (tabs, ribbons, etc.) +└── Specialized widgets (search, calendar, etc.) +``` + +**Base Classes:** + +1. **BasicWidget** (`basic_widget.ts`) + - Base class for all UI components + - Lifecycle: construction → rendering → events → destruction + - Handles DOM manipulation + - Event subscription management + - Child widget management + +2. **NoteContextAwareWidget** (`note_context_aware_widget.ts`) + - Extends BasicWidget + - Automatically updates when active note changes + - Accesses current note context + - Used for note-dependent UI + +3. **RightPanelWidget** + - Widgets displayed in right sidebar + - Collapsible sections + - Context-specific tools and information + +**Type-Specific Widgets:** + +Located at: `apps/client/src/widgets/type_widgets/` + +Each note type has a dedicated widget: +- `text_type_widget.ts` - CKEditor integration +- `code_type_widget.ts` - CodeMirror integration +- `file_type_widget.ts` - File preview and download +- `image_type_widget.ts` - Image display and editing +- `canvas_type_widget.ts` - Excalidraw integration +- `mermaid_type_widget.ts` - Diagram rendering +- And more... + +--- + +## Data Layer + +### Database Schema + +Trilium uses **SQLite** as its database engine, managed via `better-sqlite3`. + +Schema location: `apps/server/src/assets/db/schema.sql` + +**Core Tables:** + +```sql +-- Notes: Core content storage +notes ( + noteId, title, isProtected, type, mime, + blobId, isDeleted, dateCreated, dateModified +) + +-- Branches: Tree relationships +branches ( + branchId, noteId, parentNoteId, notePosition, + prefix, isExpanded, isDeleted +) + +-- Attributes: Metadata +attributes ( + attributeId, noteId, type, name, value, + position, isInheritable, isDeleted +) + +-- Revisions: Version history +revisions ( + revisionId, noteId, type, mime, title, + blobId, utcDateLastEdited +) + +-- Attachments: File attachments +attachments ( + attachmentId, ownerId, role, mime, title, + blobId, isProtected, isDeleted +) + +-- Blobs: Binary content +blobs ( + blobId, content, dateModified +) + +-- Options: Application settings +options ( + name, value, isSynced +) + +-- Entity Changes: Sync tracking +entity_changes ( + entityName, entityId, hash, changeId, + isSynced, utcDateChanged +) +``` + +### Data Access Patterns + +**Direct SQL:** +```typescript +// apps/server/src/services/sql.ts +sql.getRows("SELECT * FROM notes WHERE type = ?", ['text']) +sql.execute("UPDATE notes SET title = ? WHERE noteId = ?", [title, noteId]) +``` + +**Through Becca:** +```typescript +// Recommended approach - uses cache +const note = becca.getNote('noteId') +note.title = 'New Title' +note.save() +``` + +**Through Froca (Frontend):** +```typescript +// Read-only access +const note = froca.getNote('noteId') +console.log(note.title) +``` + +### Database Migrations + +Migration system: `apps/server/src/migrations/` + +- Sequential numbered files (e.g., `XXXX_migration_name.sql`) +- Automatic execution on version upgrade +- Schema version tracked in options table +- Both SQL and JavaScript migrations supported + +--- + +## Caching System + +### Cache Initialization + +**Backend (Becca):** +```typescript +// On server startup +await becca_loader.load() // Loads all entities into memory +becca.loaded = true +``` + +**Frontend (Froca):** +```typescript +// On app initialization +await froca.loadInitialTree() // Loads root and visible notes +// Lazy load on demand +const note = await froca.getNote(noteId) // Triggers load if not cached +``` + +### Cache Invalidation + +**Server-Side:** +- Entities automatically update cache on save +- WebSocket broadcasts changes to all clients +- Synchronization updates trigger cache refresh + +**Client-Side:** +- WebSocket listeners update Froca +- Manual reload via `froca.loadSubTree(noteId)` +- Full reload on protected session changes + +### Cache Consistency + +**Entity Change Tracking:** +```typescript +// Every entity modification tracked +entity_changes ( + entityName: 'notes', + entityId: 'note123', + hash: 'abc...', + changeId: 'change456', + utcDateChanged: '2025-11-02...' +) +``` + +**Sync Protocol:** +1. Client requests changes since last sync +2. Server returns entity_changes records +3. Client applies changes to Froca +4. Client sends local changes to server +5. Server updates Becca and database + +--- + +## Frontend Architecture + +### Application Entry Point + +**Desktop:** `apps/client/src/desktop.ts` +**Web:** `apps/client/src/index.ts` + +### Service Layer + +Located at: `apps/client/src/services/` + +Key services: +- `froca.ts` - Frontend cache +- `server.ts` - API communication +- `ws.ts` - WebSocket connection +- `tree_service.ts` - Note tree management +- `note_context.ts` - Active note tracking +- `protected_session.ts` - Encryption key management +- `link.ts` - Note linking and navigation +- `export.ts` - Note export functionality + +### UI Components + +**Main Layout:** +``` +┌──────────────────────────────────────────────────────┐ +│ Title Bar │ +├──────────┬────────────────────────┬──────────────────┤ +│ │ │ │ +│ Note │ Note Detail │ Right Panel │ +│ Tree │ Editor │ (Info, Links) │ +│ │ │ │ +│ │ │ │ +├──────────┴────────────────────────┴──────────────────┤ +│ Status Bar │ +└──────────────────────────────────────────────────────┘ +``` + +**Component Locations:** +- `widgets/containers/` - Layout containers +- `widgets/buttons/` - Toolbar buttons +- `widgets/dialogs/` - Modal dialogs +- `widgets/ribbon_widgets/` - Tab widgets +- `widgets/type_widgets/` - Note type editors + +### Event System + +**Application Events:** +```typescript +// Subscribe to events +appContext.addBeforeUnloadListener(() => { + // Cleanup before page unload +}) + +// Trigger events +appContext.trigger('noteTreeLoaded') +``` + +**Note Context Events:** +```typescript +// NoteContextAwareWidget automatically receives: +- noteSwitched() +- noteChanged() +- refresh() +``` + +### State Management + +Trilium uses **custom state management** rather than Redux/MobX: + +- `note_context.ts` - Active note and context +- `froca.ts` - Entity cache +- Component local state +- URL parameters for shareable state + +--- + +## Backend Architecture + +### Application Entry Point + +Location: `apps/server/src/main.ts` + +**Startup Sequence:** +1. Load configuration +2. Initialize database +3. Run migrations +4. Load Becca cache +5. Start Express server +6. Initialize WebSocket +7. Start scheduled tasks + +### Service Layer + +Located at: `apps/server/src/services/` + +**Core Services:** + +- **Notes Management** + - `notes.ts` - CRUD operations + - `note_contents.ts` - Content handling + - `note_types.ts` - Type-specific logic + - `cloning.ts` - Note cloning/multi-parent + +- **Tree Operations** + - `tree.ts` - Tree structure management + - `branches.ts` - Branch operations + - `consistency_checks.ts` - Tree integrity + +- **Search** + - `search/search.ts` - Main search engine + - `search/expressions/` - Search expression parsing + - `search/services/` - Search utilities + +- **Sync** + - `sync.ts` - Synchronization protocol + - `sync_update.ts` - Update handling + - `sync_mutex.ts` - Concurrency control + +- **Scripting** + - `backend_script_api.ts` - Backend script API + - `script_context.ts` - Script execution context + +- **Import/Export** + - `import/` - Various import formats + - `export/` - Export to different formats + - `zip.ts` - Archive handling + +- **Security** + - `encryption.ts` - Note encryption + - `protected_session.ts` - Session management + - `password.ts` - Password handling + +### Route Structure + +Located at: `apps/server/src/routes/` + +``` +routes/ +├── index.ts # Route registration +├── api/ # REST API endpoints +│ ├── notes.ts +│ ├── branches.ts +│ ├── attributes.ts +│ ├── search.ts +│ ├── login.ts +│ └── ... +└── custom/ # Special endpoints + ├── setup.ts + ├── share.ts + └── ... +``` + +**API Endpoint Pattern:** +```typescript +router.get('/api/notes/:noteId', (req, res) => { + const noteId = req.params.noteId + const note = becca.getNote(noteId) + res.json(note.getPojoWithContent()) +}) +``` + +### Middleware + +Key middleware components: +- `auth.ts` - Authentication +- `csrf.ts` - CSRF protection +- `request_context.ts` - Request-scoped data +- `error_handling.ts` - Error responses + +--- + +## API Architecture + +### Internal API + +**REST Endpoints** (`/api/*`) + +Used by the frontend for all operations: + +**Note Operations:** +- `GET /api/notes/:noteId` - Get note +- `POST /api/notes/:noteId/content` - Update content +- `PUT /api/notes/:noteId` - Update metadata +- `DELETE /api/notes/:noteId` - Delete note + +**Tree Operations:** +- `GET /api/tree` - Get note tree +- `POST /api/branches` - Create branch +- `PUT /api/branches/:branchId` - Update branch +- `DELETE /api/branches/:branchId` - Delete branch + +**Search:** +- `GET /api/search?query=...` - Search notes +- `GET /api/search-note/:noteId` - Execute search note + +### ETAPI (External API) + +Located at: `apps/server/src/etapi/` + +**Purpose:** Third-party integrations and automation + +**Authentication:** Token-based (ETAPI tokens) + +**OpenAPI Spec:** Auto-generated + +**Key Endpoints:** +- `/etapi/notes` - Note CRUD +- `/etapi/branches` - Branch management +- `/etapi/attributes` - Attribute operations +- `/etapi/attachments` - Attachment handling + +**Example:** +```bash +curl -H "Authorization: YOUR_TOKEN" \ + https://trilium.example.com/etapi/notes/noteId +``` + +### WebSocket API + +Located at: `apps/server/src/services/ws.ts` + +**Purpose:** Real-time updates and synchronization + +**Protocol:** WebSocket (Socket.IO-like custom protocol) + +**Message Types:** +- `sync` - Synchronization request +- `entity-change` - Entity update notification +- `refresh-tree` - Tree structure changed +- `open-note` - Open note in UI + +**Client Subscribe:** +```typescript +ws.subscribe('entity-change', (data) => { + froca.processEntityChange(data) +}) +``` + +--- + +## Build System + +### Package Manager: pnpm + +**Why pnpm:** +- Fast, disk-efficient +- Strict dependency isolation +- Native monorepo support via workspaces +- Patch package support + +**Workspace Configuration:** +```yaml +# pnpm-workspace.yaml +packages: + - 'apps/*' + - 'packages/*' +``` + +### Build Tools + +**Vite** (Development & Production) +- Fast HMR for development +- Optimized production builds +- Asset handling +- Plugin ecosystem + +**ESBuild** (TypeScript compilation) +- Fast TypeScript transpilation +- Bundling support +- Minification + +**TypeScript** +- Project references for monorepo +- Strict type checking +- Shared `tsconfig.base.json` + +### Build Scripts + +**Root `package.json` scripts:** +```json +{ + "server:start": "pnpm run --filter server dev", + "server:build": "pnpm run --filter server build", + "client:build": "pnpm run --filter client build", + "desktop:build": "pnpm run --filter desktop build", + "test:all": "pnpm test:parallel && pnpm test:sequential" +} +``` + +### Build Process + +**Development:** +```bash +pnpm install # Install dependencies +pnpm server:start # Start dev server (port 8080) +# or +pnpm desktop:start # Start Electron dev +``` + +**Production (Server):** +```bash +pnpm server:build # Build server + client +node apps/server/dist/main.js +``` + +**Production (Desktop):** +```bash +pnpm desktop:build # Build Electron app +# Creates distributable in apps/desktop/out/make/ +``` + +**Docker:** +```bash +docker build -t trilium . +docker run -p 8080:8080 trilium +``` + +### Asset Pipeline + +**Client Assets:** +- Entry: `apps/client/src/index.html` +- Bundled by Vite +- Output: `apps/client/dist/` + +**Server Static:** +- Serves client assets in production +- Public directory: `apps/server/public/` + +**Desktop:** +- Packages client assets +- Electron main process: `apps/desktop/src/main.ts` +- Electron renderer: loads client app + +--- + +## Testing Strategy + +### Test Organization + +**Parallel Tests** (can run simultaneously): +- Client tests +- Package tests +- E2E tests (isolated databases) + +**Sequential Tests** (shared resources): +- Server tests (shared database) +- CKEditor plugin tests + +### Test Frameworks + +- **Vitest** - Unit and integration tests +- **Playwright** - E2E tests +- **Happy-DOM** - DOM testing environment + +### Running Tests + +```bash +pnpm test:all # All tests +pnpm test:parallel # Fast parallel tests +pnpm test:sequential # Sequential tests only +pnpm coverage # With coverage reports +``` + +### Test Locations + +``` +apps/ +├── server/ +│ └── src/**/*.spec.ts # Server tests +├── client/ +│ └── src/**/*.spec.ts # Client tests +└── server-e2e/ + └── tests/**/*.spec.ts # E2E tests +``` + +### E2E Testing + +**Server E2E:** +- Tests full REST API +- Tests WebSocket functionality +- Tests sync protocol + +**Desktop E2E:** +- Playwright with Electron +- Tests full desktop app +- Screenshot comparison + +--- + +## Security Architecture + +### Encryption System + +**Per-Note Encryption:** +- Notes can be individually protected +- AES-256 encryption +- Password-derived encryption key (PBKDF2) +- Separate protected session management + +**Protected Session:** +- Time-limited access to protected notes +- Automatic timeout +- Re-authentication required +- Frontend: `protected_session.ts` +- Backend: `protected_session.ts` + +### Authentication + +**Password Auth:** +- PBKDF2 key derivation +- Salt per installation +- Hash verification + +**OpenID Connect:** +- External identity provider support +- OAuth 2.0 flow +- Configurable providers + +**TOTP (2FA):** +- Time-based one-time passwords +- QR code setup +- Backup codes + +### Authorization + +**Single-User Model:** +- Desktop: single user (owner) +- Server: single user per installation + +**Share Notes:** +- Public access without authentication +- Separate Shaca cache +- Read-only access + +### CSRF Protection + +**CSRF Tokens:** +- Required for state-changing operations +- Token in header or cookie +- Validation middleware + +### Input Sanitization + +**XSS Prevention:** +- DOMPurify for HTML sanitization +- CKEditor content filtering +- CSP headers + +**SQL Injection:** +- Parameterized queries only +- Better-sqlite3 prepared statements +- No string concatenation in SQL + +### Dependency Security + +**Vulnerability Scanning:** +- Renovate bot for updates +- npm audit integration +- Override vulnerable sub-dependencies + +--- + +## Related Documentation + +### User Documentation +- [User Guide](User%20Guide/User%20Guide/) - End-user features and usage +- [Installation Guide](User%20Guide/User%20Guide/Installation%20&%20Setup/) +- [Basic Concepts](User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/) + +### Developer Documentation +- [Developer Guide](Developer%20Guide/Developer%20Guide/) - Development setup +- [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) +- [Project Structure](Developer%20Guide/Developer%20Guide/Project%20Structure.md) +- [Adding Note Types](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Adding%20a%20new%20note%20type/) +- [Database Schema](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) + +### API Documentation +- [Script API](Script%20API/) - User scripting API +- [ETAPI Documentation](https://triliumnext.github.io/Docs/Wiki/etapi) - External API + +### Additional Resources +- [CLAUDE.md](../CLAUDE.md) - AI assistant guidance +- [README.md](../README.md) - Project overview +- [SECURITY.md](../SECURITY.md) - Security policy + +--- + +## Appendices + +### Glossary + +- **Becca**: Backend Cache - server-side entity cache +- **Froca**: Frontend Cache - client-side entity mirror +- **Shaca**: Share Cache - cache for public shared notes +- **ETAPI**: External API for third-party integrations +- **Protected Note**: Encrypted note requiring password +- **Clone**: Note with multiple parent branches +- **Branch**: Parent-child relationship between notes +- **Attribute**: Metadata (label or relation) attached to note +- **Blob**: Binary large object containing note content + +### File Naming Conventions + +- `BEntity` - Backend entity (e.g., BNote, BBranch) +- `FEntity` - Frontend entity (e.g., FNote, FBranch) +- `*_widget.ts` - Widget classes +- `*_service.ts` - Service modules +- `*.spec.ts` - Test files +- `XXXX_*.sql` - Migration files + +### Architecture Decision Records + +For historical context on major architectural decisions, see: +- Migration to TypeScript monorepo +- Adoption of pnpm workspaces +- CKEditor 5 upgrade +- Entity change tracking system + +--- + +**Document Maintainer:** TriliumNext Team +**Last Review:** November 2025 +**Next Review:** When major architectural changes occur diff --git a/docs/DATABASE.md b/docs/DATABASE.md new file mode 100644 index 000000000..d02452f21 --- /dev/null +++ b/docs/DATABASE.md @@ -0,0 +1,736 @@ +# Trilium Database Architecture + +> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [Database Schema](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) + +## Overview + +Trilium uses **SQLite** as its embedded database engine, providing a reliable, file-based storage system that requires no separate database server. The database stores all notes, their relationships, metadata, and configuration. + +## Database File + +**Location:** +- Desktop: `~/.local/share/trilium-data/document.db` (Linux/Mac) or `%APPDATA%/trilium-data/document.db` (Windows) +- Server: Configured via `TRILIUM_DATA_DIR` environment variable +- Docker: Mounted volume at `/home/node/trilium-data/` + +**Characteristics:** +- Single-file database +- Embedded (no server required) +- ACID compliant +- Cross-platform +- Supports up to 281 TB database size +- Efficient for 100k+ notes + +## Database Driver + +**Library:** `better-sqlite3` + +**Why better-sqlite3:** +- Native performance (C++ bindings) +- Synchronous API (simpler code) +- Prepared statements +- Transaction support +- Type safety + +**Usage:** +```typescript +// apps/server/src/services/sql.ts +import Database from 'better-sqlite3' + +const db = new Database('document.db') +const stmt = db.prepare('SELECT * FROM notes WHERE noteId = ?') +const note = stmt.get(noteId) +``` + +## Schema Overview + +Schema location: `apps/server/src/assets/db/schema.sql` + +**Entity Tables:** +- `notes` - Core note data +- `branches` - Tree relationships +- `attributes` - Metadata (labels/relations) +- `revisions` - Version history +- `attachments` - File attachments +- `blobs` - Binary content storage + +**System Tables:** +- `options` - Application configuration +- `entity_changes` - Change tracking for sync +- `recent_notes` - Recently accessed notes +- `etapi_tokens` - API authentication tokens +- `user_data` - User credentials +- `sessions` - Web session storage + +## Entity Tables + +### Notes Table + +```sql +CREATE TABLE notes ( + noteId TEXT NOT NULL PRIMARY KEY, + title TEXT NOT NULL DEFAULT "note", + isProtected INT NOT NULL DEFAULT 0, + type TEXT NOT NULL DEFAULT 'text', + mime TEXT NOT NULL DEFAULT 'text/html', + blobId TEXT DEFAULT NULL, + isDeleted INT NOT NULL DEFAULT 0, + deleteId TEXT DEFAULT NULL, + dateCreated TEXT NOT NULL, + dateModified TEXT NOT NULL, + utcDateCreated TEXT NOT NULL, + utcDateModified TEXT NOT NULL +); + +-- Indexes for performance +CREATE INDEX IDX_notes_title ON notes (title); +CREATE INDEX IDX_notes_type ON notes (type); +CREATE INDEX IDX_notes_dateCreated ON notes (dateCreated); +CREATE INDEX IDX_notes_dateModified ON notes (dateModified); +CREATE INDEX IDX_notes_utcDateModified ON notes (utcDateModified); +CREATE INDEX IDX_notes_blobId ON notes (blobId); +``` + +**Field Descriptions:** + +| Field | Type | Description | +|-------|------|-------------| +| `noteId` | TEXT | Unique identifier (UUID or custom) | +| `title` | TEXT | Note title (displayed in tree) | +| `isProtected` | INT | 1 if encrypted, 0 if not | +| `type` | TEXT | Note type: text, code, file, image, etc. | +| `mime` | TEXT | MIME type: text/html, application/json, etc. | +| `blobId` | TEXT | Reference to content in blobs table | +| `isDeleted` | INT | Soft delete flag | +| `deleteId` | TEXT | Unique delete operation ID | +| `dateCreated` | TEXT | Creation date (local timezone) | +| `dateModified` | TEXT | Last modified (local timezone) | +| `utcDateCreated` | TEXT | Creation date (UTC) | +| `utcDateModified` | TEXT | Last modified (UTC) | + +**Note Types:** +- `text` - Rich text with HTML +- `code` - Source code +- `file` - Binary file +- `image` - Image file +- `search` - Saved search +- `render` - Custom HTML rendering +- `relation-map` - Relationship diagram +- `canvas` - Excalidraw drawing +- `mermaid` - Mermaid diagram +- `book` - Container for documentation +- `web-view` - Embedded web page +- `mindmap` - Mind map +- `geomap` - Geographical map + +### Branches Table + +```sql +CREATE TABLE branches ( + branchId TEXT NOT NULL PRIMARY KEY, + noteId TEXT NOT NULL, + parentNoteId TEXT NOT NULL, + notePosition INTEGER NOT NULL, + prefix TEXT, + isExpanded INTEGER NOT NULL DEFAULT 0, + isDeleted INTEGER NOT NULL DEFAULT 0, + deleteId TEXT DEFAULT NULL, + utcDateModified TEXT NOT NULL +); + +-- Indexes +CREATE INDEX IDX_branches_noteId_parentNoteId ON branches (noteId, parentNoteId); +CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId); +``` + +**Field Descriptions:** + +| Field | Type | Description | +|-------|------|-------------| +| `branchId` | TEXT | Unique identifier for this branch | +| `noteId` | TEXT | Child note ID | +| `parentNoteId` | TEXT | Parent note ID | +| `notePosition` | INT | Sort order among siblings | +| `prefix` | TEXT | Optional prefix text (e.g., "Chapter 1:") | +| `isExpanded` | INT | Tree expansion state | +| `isDeleted` | INT | Soft delete flag | +| `deleteId` | TEXT | Delete operation ID | +| `utcDateModified` | TEXT | Last modified (UTC) | + +**Key Concepts:** +- **Cloning:** A note can have multiple branches (multiple parents) +- **Position:** Siblings ordered by `notePosition` +- **Prefix:** Display text before note title in tree +- **Soft Delete:** Allows sync before permanent deletion + +### Attributes Table + +```sql +CREATE TABLE attributes ( + attributeId TEXT NOT NULL PRIMARY KEY, + noteId TEXT NOT NULL, + type TEXT NOT NULL, + name TEXT NOT NULL, + value TEXT DEFAULT '' NOT NULL, + position INT DEFAULT 0 NOT NULL, + utcDateModified TEXT NOT NULL, + isDeleted INT NOT NULL, + deleteId TEXT DEFAULT NULL, + isInheritable INT DEFAULT 0 NULL +); + +-- Indexes +CREATE INDEX IDX_attributes_name_value ON attributes (name, value); +CREATE INDEX IDX_attributes_noteId ON attributes (noteId); +CREATE INDEX IDX_attributes_value ON attributes (value); +``` + +**Field Descriptions:** + +| Field | Type | Description | +|-------|------|-------------| +| `attributeId` | TEXT | Unique identifier | +| `noteId` | TEXT | Note this attribute belongs to | +| `type` | TEXT | 'label' or 'relation' | +| `name` | TEXT | Attribute name | +| `value` | TEXT | Attribute value (text for labels, noteId for relations) | +| `position` | INT | Display order | +| `utcDateModified` | TEXT | Last modified (UTC) | +| `isDeleted` | INT | Soft delete flag | +| `deleteId` | TEXT | Delete operation ID | +| `isInheritable` | INT | Inherited by child notes | + +**Attribute Types:** + +**Labels** (key-value pairs): +```sql +-- Example: #priority=high +INSERT INTO attributes (attributeId, noteId, type, name, value) +VALUES ('attr1', 'note123', 'label', 'priority', 'high') +``` + +**Relations** (links to other notes): +```sql +-- Example: ~author=[[noteId]] +INSERT INTO attributes (attributeId, noteId, type, name, value) +VALUES ('attr2', 'note123', 'relation', 'author', 'author-note-id') +``` + +**Special Attributes:** +- `#run=frontendStartup` - Execute script on frontend load +- `#run=backendStartup` - Execute script on backend load +- `#customWidget` - Custom widget implementation +- `#iconClass` - Custom tree icon +- `#cssClass` - CSS class for note +- `#sorted` - Auto-sort children +- `#hideChildrenOverview` - Don't show child list + +### Revisions Table + +```sql +CREATE TABLE revisions ( + revisionId TEXT NOT NULL PRIMARY KEY, + noteId TEXT NOT NULL, + type TEXT DEFAULT '' NOT NULL, + mime TEXT DEFAULT '' NOT NULL, + title TEXT NOT NULL, + isProtected INT NOT NULL DEFAULT 0, + blobId TEXT DEFAULT NULL, + utcDateLastEdited TEXT NOT NULL, + utcDateCreated TEXT NOT NULL, + utcDateModified TEXT NOT NULL, + dateLastEdited TEXT NOT NULL, + dateCreated TEXT NOT NULL +); + +-- Indexes +CREATE INDEX IDX_revisions_noteId ON revisions (noteId); +CREATE INDEX IDX_revisions_utcDateCreated ON revisions (utcDateCreated); +CREATE INDEX IDX_revisions_utcDateLastEdited ON revisions (utcDateLastEdited); +CREATE INDEX IDX_revisions_blobId ON revisions (blobId); +``` + +**Revision Strategy:** +- Automatic revision created on note modification +- Configurable interval (default: daily max) +- Stores complete note snapshot +- Allows reverting to previous versions +- Can be disabled with `#disableVersioning` + +### Attachments Table + +```sql +CREATE TABLE attachments ( + attachmentId TEXT NOT NULL PRIMARY KEY, + ownerId TEXT NOT NULL, + role TEXT NOT NULL, + mime TEXT NOT NULL, + title TEXT NOT NULL, + isProtected INT NOT NULL DEFAULT 0, + position INT DEFAULT 0 NOT NULL, + blobId TEXT DEFAULT NULL, + dateModified TEXT NOT NULL, + utcDateModified TEXT NOT NULL, + utcDateScheduledForErasureSince TEXT DEFAULT NULL, + isDeleted INT NOT NULL, + deleteId TEXT DEFAULT NULL +); + +-- Indexes +CREATE INDEX IDX_attachments_ownerId_role ON attachments (ownerId, role); +CREATE INDEX IDX_attachments_blobId ON attachments (blobId); +``` + +**Attachment Roles:** +- `file` - Regular file attachment +- `image` - Image file +- `cover-image` - Note cover image +- Custom roles for specific purposes + +### Blobs Table + +```sql +CREATE TABLE blobs ( + blobId TEXT NOT NULL PRIMARY KEY, + content TEXT NULL DEFAULT NULL, + dateModified TEXT NOT NULL, + utcDateModified TEXT NOT NULL +); +``` + +**Blob Usage:** +- Stores actual content (text or binary) +- Referenced by notes, revisions, attachments +- Deduplication via hash-based blobId +- TEXT type stores both text and binary (base64) + +**Content Types:** +- **Text notes:** HTML content +- **Code notes:** Plain text source code +- **Binary notes:** Base64 encoded data +- **Protected notes:** Encrypted content + +## System Tables + +### Options Table + +```sql +CREATE TABLE options ( + name TEXT NOT NULL PRIMARY KEY, + value TEXT NOT NULL, + isSynced INTEGER DEFAULT 0 NOT NULL, + utcDateModified TEXT NOT NULL +); +``` + +**Key Options:** +- `documentId` - Unique installation ID +- `dbVersion` - Schema version +- `syncVersion` - Sync protocol version +- `passwordVerificationHash` - Password verification +- `encryptedDataKey` - Encryption key (encrypted) +- `theme` - UI theme +- Various feature flags and settings + +**Synced Options:** +- `isSynced = 1` - Synced across devices +- `isSynced = 0` - Local to this installation + +### Entity Changes Table + +```sql +CREATE TABLE entity_changes ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + entityName TEXT NOT NULL, + entityId TEXT NOT NULL, + hash TEXT NOT NULL, + isErased INT NOT NULL, + changeId TEXT NOT NULL, + componentId TEXT NOT NULL, + instanceId TEXT NOT NULL, + isSynced INTEGER NOT NULL, + utcDateChanged TEXT NOT NULL +); + +-- Indexes +CREATE UNIQUE INDEX IDX_entityChanges_entityName_entityId + ON entity_changes (entityName, entityId); +CREATE INDEX IDX_entity_changes_changeId ON entity_changes (changeId); +``` + +**Purpose:** Track all entity modifications for synchronization + +**Entity Types:** +- `notes` +- `branches` +- `attributes` +- `revisions` +- `attachments` +- `options` +- `etapi_tokens` + +### Recent Notes Table + +```sql +CREATE TABLE recent_notes ( + noteId TEXT NOT NULL PRIMARY KEY, + notePath TEXT NOT NULL, + utcDateCreated TEXT NOT NULL +); +``` + +**Purpose:** Track recently accessed notes for quick access + +### Sessions Table + +```sql +CREATE TABLE sessions ( + sid TEXT PRIMARY KEY, + sess TEXT NOT NULL, + expired TEXT NOT NULL +); +``` + +**Purpose:** HTTP session storage for web interface + +### User Data Table + +```sql +CREATE TABLE user_data ( + tmpID INT PRIMARY KEY, + username TEXT, + email TEXT, + userIDEncryptedDataKey TEXT, + userIDVerificationHash TEXT, + salt TEXT, + derivedKey TEXT, + isSetup TEXT DEFAULT "false" +); +``` + +**Purpose:** Store user authentication credentials + +### ETAPI Tokens Table + +```sql +CREATE TABLE etapi_tokens ( + etapiTokenId TEXT PRIMARY KEY NOT NULL, + name TEXT NOT NULL, + tokenHash TEXT NOT NULL, + utcDateCreated TEXT NOT NULL, + utcDateModified TEXT NOT NULL, + isDeleted INT NOT NULL DEFAULT 0 +); +``` + +**Purpose:** API token authentication for external access + +## Data Relationships + +``` + ┌──────────────┐ + │ Notes │ + └───┬──────────┘ + │ + ┌───────────┼───────────┐ + │ │ │ + ▼ ▼ ▼ + ┌────────┐ ┌──────────┐ ┌───────────┐ + │Branches│ │Attributes│ │Attachments│ + └────────┘ └──────────┘ └─────┬─────┘ + │ │ + │ │ + │ ┌──────────┐ │ + └──────▶│ Blobs │◀────────┘ + └──────────┘ + ▲ + │ + ┌────┴─────┐ + │Revisions │ + └──────────┘ +``` + +**Relationships:** +- Notes ↔ Branches (many-to-many via noteId) +- Notes → Attributes (one-to-many) +- Notes → Blobs (one-to-one) +- Notes → Revisions (one-to-many) +- Notes → Attachments (one-to-many) +- Attachments → Blobs (one-to-one) +- Revisions → Blobs (one-to-one) + +## Database Access Patterns + +### Direct SQL Access + +**Location:** `apps/server/src/services/sql.ts` + +```typescript +// Execute query (returns rows) +const notes = sql.getRows('SELECT * FROM notes WHERE type = ?', ['text']) + +// Execute query (returns single row) +const note = sql.getRow('SELECT * FROM notes WHERE noteId = ?', [noteId]) + +// Execute statement (no return) +sql.execute('UPDATE notes SET title = ? WHERE noteId = ?', [title, noteId]) + +// Insert +sql.insert('notes', { + noteId: 'new-note-id', + title: 'New Note', + type: 'text', + // ... +}) + +// Transactions +sql.transactional(() => { + sql.execute('UPDATE ...') + sql.execute('INSERT ...') +}) +``` + +### Entity-Based Access (Recommended) + +**Via Becca Cache:** + +```typescript +// Get entity from cache +const note = becca.getNote(noteId) + +// Modify and save +note.title = 'Updated Title' +note.save() // Writes to database + +// Create new +const newNote = becca.createNote({ + parentNoteId: 'root', + title: 'New Note', + type: 'text', + content: 'Hello World' +}) + +// Delete +note.markAsDeleted() +``` + +## Database Migrations + +**Location:** `apps/server/src/migrations/` + +**Migration Files:** +- Format: `XXXX_migration_name.sql` or `XXXX_migration_name.js` +- Executed in numerical order +- Version tracked in `options.dbVersion` + +**SQL Migration Example:** +```sql +-- 0280_add_new_column.sql +ALTER TABLE notes ADD COLUMN newField TEXT DEFAULT NULL; + +UPDATE options SET value = '280' WHERE name = 'dbVersion'; +``` + +**JavaScript Migration Example:** +```javascript +// 0285_complex_migration.js +module.exports = () => { + const notes = sql.getRows('SELECT * FROM notes WHERE type = ?', ['old-type']) + + for (const note of notes) { + sql.execute('UPDATE notes SET type = ? WHERE noteId = ?', + ['new-type', note.noteId]) + } +} +``` + +**Migration Process:** +1. Server checks `dbVersion` on startup +2. Compares with latest migration number +3. Executes pending migrations in order +4. Updates `dbVersion` after each +5. Restarts if migrations ran + +## Database Maintenance + +### Backup + +**Full Backup:** +```bash +# Copy database file +cp document.db document.db.backup + +# Or use Trilium's backup feature +# Settings → Backup +``` + +**Automatic Backups:** +- Daily backup (configurable) +- Stored in `backup/` directory +- Retention policy (keep last N backups) + +### Vacuum + +**Purpose:** Reclaim unused space, defragment + +```sql +VACUUM; +``` + +**When to vacuum:** +- After deleting many notes +- Database file size larger than expected +- Performance degradation + +### Integrity Check + +```sql +PRAGMA integrity_check; +``` + +**Result:** "ok" or list of errors + +### Consistency Checks + +**Built-in Consistency Checks:** + +Location: `apps/server/src/services/consistency_checks.ts` + +- Orphaned branches +- Missing parent notes +- Circular dependencies +- Invalid entity references +- Blob reference integrity + +**Run Checks:** +```typescript +// Via API +POST /api/consistency-check + +// Or from backend script +api.runConsistencyChecks() +``` + +## Performance Optimization + +### Indexes + +**Existing Indexes:** +- `notes.title` - Fast title searches +- `notes.type` - Filter by type +- `notes.dateCreated/Modified` - Time-based queries +- `branches.noteId_parentNoteId` - Tree navigation +- `attributes.name_value` - Attribute searches + +**Query Optimization:** +```sql +-- Use indexed columns in WHERE clause +SELECT * FROM notes WHERE type = 'text' -- Uses index + +-- Avoid functions on indexed columns +SELECT * FROM notes WHERE LOWER(title) = 'test' -- No index + +-- Better +SELECT * FROM notes WHERE title = 'Test' -- Uses index +``` + +### Connection Settings + +```typescript +// apps/server/src/services/sql.ts +const db = new Database('document.db', { + // Enable WAL mode for better concurrency + verbose: console.log +}) + +db.pragma('journal_mode = WAL') +db.pragma('synchronous = NORMAL') +db.pragma('cache_size = -64000') // 64MB cache +db.pragma('temp_store = MEMORY') +``` + +**WAL Mode Benefits:** +- Better concurrency (readers don't block writers) +- Faster commits +- More robust + +### Query Performance + +**Use EXPLAIN QUERY PLAN:** +```sql +EXPLAIN QUERY PLAN +SELECT * FROM notes +WHERE type = 'text' + AND dateCreated > '2025-01-01' +``` + +**Analyze slow queries:** +- Check index usage +- Avoid SELECT * +- Use prepared statements +- Batch operations in transactions + +## Database Size Management + +**Typical Sizes:** +- 1,000 notes: ~5-10 MB +- 10,000 notes: ~50-100 MB +- 100,000 notes: ~500 MB - 1 GB + +**Size Reduction Strategies:** + +1. **Delete old revisions** +2. **Remove large attachments** +3. **Vacuum database** +4. **Compact blobs** +5. **Archive old notes** + +**Blob Deduplication:** +- Blobs identified by content hash +- Identical content shares one blob +- Automatic deduplication on insert + +## Security Considerations + +### Protected Notes Encryption + +**Encryption Process:** +```typescript +// Encrypt blob content +const encryptedContent = encrypt(content, dataKey) +blob.content = encryptedContent + +// Store encrypted +sql.insert('blobs', { blobId, content: encryptedContent }) +``` + +**Encryption Details:** +- Algorithm: AES-256-CBC +- Key derivation: PBKDF2 (10,000 iterations) +- Per-note encryption +- Master key encrypted with user password + +### SQL Injection Prevention + +**Always use parameterized queries:** +```typescript +// GOOD - Safe from SQL injection +sql.execute('SELECT * FROM notes WHERE title = ?', [userInput]) + +// BAD - Vulnerable to SQL injection +sql.execute(`SELECT * FROM notes WHERE title = '${userInput}'`) +``` + +### Database File Protection + +**File Permissions:** +- Owner read/write only +- No group/other access +- Located in user-specific directory + +--- + +**See Also:** +- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture +- [Database Schema Files](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) +- [Migration Scripts](../apps/server/src/migrations/) diff --git a/docs/README.md b/docs/README.md index be65024ee..ea2fdd378 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,4 +1,17 @@ -# Trilium Notes +# Trilium Notes Documentation + +## 📚 Technical Documentation + +**NEW:** Comprehensive technical and architectural documentation is now available! + +- **[Technical Documentation Index](TECHNICAL_DOCUMENTATION.md)** - Complete index to all technical docs +- **[Architecture Overview](ARCHITECTURE.md)** - System design and core patterns +- **[Database Architecture](DATABASE.md)** - Complete database documentation +- **[Synchronization](SYNCHRONIZATION.md)** - Sync protocol and implementation +- **[Scripting System](SCRIPTING.md)** - User scripting guide and API +- **[Security Architecture](SECURITY_ARCHITECTURE.md)** - Security implementation details + +## 📖 User Documentation Please see the [main documentation](index.md) or visit one of our translated versions: @@ -9,4 +22,11 @@ Please see the [main documentation](index.md) or visit one of our translated ver - [简体中文](README-ZH_CN.md) - [繁體中文](README-ZH_TW.md) +## 🔧 Developer Documentation + +- [Developer Guide](Developer%20Guide/Developer%20Guide/) - Development environment and contribution guide +- [Script API](Script%20API/) - Complete scripting API reference + +## 🔗 Additional Resources + For the full application README, please visit our [GitHub repository](https://github.com/triliumnext/trilium). \ No newline at end of file diff --git a/docs/SCRIPTING.md b/docs/SCRIPTING.md new file mode 100644 index 000000000..49e548c50 --- /dev/null +++ b/docs/SCRIPTING.md @@ -0,0 +1,734 @@ +# Trilium Scripting System + +> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [Script API Documentation](Script%20API/) + +## Overview + +Trilium features a **powerful scripting system** that allows users to extend and customize the application without modifying source code. Scripts are written in JavaScript and can execute both in the **frontend (browser)** and **backend (Node.js)** contexts. + +## Script Types + +### Frontend Scripts + +**Location:** Attached to notes with `#run=frontendStartup` attribute + +**Execution Context:** Browser environment + +**Access:** +- Trilium Frontend API +- Browser APIs (DOM, localStorage, etc.) +- Froca (frontend cache) +- UI widgets +- No direct file system access + +**Lifecycle:** +- `frontendStartup` - Run once when Trilium loads +- `frontendReload` - Run on every note context change + +**Example:** +```javascript +// Attach to note with #run=frontendStartup +const api = window.api + +// Add custom button to toolbar +api.addButtonToToolbar({ + title: 'My Button', + icon: 'star', + action: () => { + api.showMessage('Hello from frontend!') + } +}) +``` + +### Backend Scripts + +**Location:** Attached to notes with `#run=backendStartup` attribute + +**Execution Context:** Node.js server environment + +**Access:** +- Trilium Backend API +- Node.js APIs (fs, http, etc.) +- Becca (backend cache) +- Database (SQL) +- External libraries (via require) + +**Lifecycle:** +- `backendStartup` - Run once when server starts +- Event handlers (custom events) + +**Example:** +```javascript +// Attach to note with #run=backendStartup +const api = require('@triliumnext/api') + +// Listen for note creation +api.dayjs // Example: access dayjs library + +api.onNoteCreated((note) => { + if (note.title.includes('TODO')) { + note.setLabel('priority', 'high') + } +}) +``` + +### Render Scripts + +**Location:** Attached to notes with `#customWidget` or similar attributes + +**Purpose:** Custom note rendering/widgets + +**Example:** +```javascript +// Custom widget for a note +class MyWidget extends api.NoteContextAwareWidget { + doRender() { + this.$widget = $('
') + .text('Custom widget content') + return this.$widget + } +} + +module.exports = MyWidget +``` + +## Script API + +### Frontend API + +**Location:** `apps/client/src/services/frontend_script_api.ts` + +**Global Access:** `window.api` + +**Key Methods:** + +```typescript +// Note Operations +api.getNote(noteId) // Get note object +api.getBranch(branchId) // Get branch object +api.getActiveNote() // Currently displayed note +api.openNote(noteId, activateNote) // Open note in UI + +// UI Operations +api.showMessage(message) // Show toast notification +api.showDialog() // Show modal dialog +api.confirm(message) // Show confirmation dialog +api.prompt(message, defaultValue) // Show input prompt + +// Tree Operations +api.getTree() // Get note tree structure +api.expandTree(noteId) // Expand tree branch +api.collapseTree(noteId) // Collapse tree branch + +// Search +api.searchForNotes(searchQuery) // Search notes +api.searchForNote(searchQuery) // Get single note + +// Navigation +api.openTabWithNote(noteId) // Open note in new tab +api.closeActiveTab() // Close current tab +api.activateNote(noteId) // Switch to note + +// Attributes +api.getAttribute(noteId, type, name) // Get attribute +api.getAttributes(noteId, type, name) // Get all matching attributes + +// Custom Widgets +api.addButtonToToolbar(def) // Add toolbar button +api.addCustomWidget(def) // Add custom widget + +// Events +api.runOnNoteOpened(callback) // Note opened event +api.runOnNoteContentChange(callback) // Content changed event + +// Utilities +api.dayjs // Date/time library +api.formatDate(date) // Format date +api.log(message) // Console log +``` + +### Backend API + +**Location:** `apps/server/src/services/backend_script_api.ts` + +**Access:** `require('@triliumnext/api')` or global `api` + +**Key Methods:** + +```typescript +// Note Operations +api.getNote(noteId) // Get note from Becca +api.getNoteWithContent(noteId) // Get note with content +api.createNote(parentNoteId, title) // Create new note +api.deleteNote(noteId) // Delete note + +// Branch Operations +api.getBranch(branchId) // Get branch +api.createBranch(noteId, parentNoteId) // Create branch (clone) + +// Attribute Operations +api.getAttribute(noteId, type, name) // Get attribute +api.createAttribute(noteId, type, name, value) // Create attribute + +// Database Access +api.sql.getRow(query, params) // Execute SQL query (single row) +api.sql.getRows(query, params) // Execute SQL query (multiple rows) +api.sql.execute(query, params) // Execute SQL statement + +// Events +api.onNoteCreated(callback) // Note created event +api.onNoteUpdated(callback) // Note updated event +api.onNoteDeleted(callback) // Note deleted event +api.onAttributeCreated(callback) // Attribute created event + +// Search +api.searchForNotes(searchQuery) // Search notes + +// Date/Time +api.dayjs // Date/time library +api.now() // Current date/time + +// Logging +api.log(message) // Log message +api.error(message) // Log error + +// External Communication +api.axios // HTTP client library + +// Utilities +api.backup.backupNow() // Trigger backup +api.export.exportSubtree(noteId) // Export notes +``` + +## Script Attributes + +### Execute Attributes + +- `#run=frontendStartup` - Execute on frontend startup +- `#run=backendStartup` - Execute on backend startup +- `#run=hourly` - Execute every hour +- `#run=daily` - Execute daily + +### Widget Attributes + +- `#customWidget` - Custom note widget +- `#widget` - Standard widget integration + +### Other Attributes + +- `#disableVersioning` - Disable automatic versioning for this note +- `#hideChildrenOverview` - Hide children in overview +- `#iconClass` - Custom icon for note + +## Entity Classes + +### Frontend Entities + +**FNote** (`apps/client/src/entities/fnote.ts`) + +```typescript +class FNote { + noteId: string + title: string + type: string + mime: string + + // Relationships + getParentNotes(): FNote[] + getChildNotes(): FNote[] + getBranches(): FBranch[] + + // Attributes + getAttribute(type, name): FAttribute + getAttributes(type?, name?): FAttribute[] + hasLabel(name): boolean + getLabelValue(name): string + + // Content + getContent(): Promise + + // Navigation + open(): void +} +``` + +**FBranch** + +```typescript +class FBranch { + branchId: string + noteId: string + parentNoteId: string + prefix: string + notePosition: number + + getNote(): FNote + getParentNote(): FNote +} +``` + +**FAttribute** + +```typescript +class FAttribute { + attributeId: string + noteId: string + type: 'label' | 'relation' + name: string + value: string + + getNote(): FNote + getTargetNote(): FNote // For relations +} +``` + +### Backend Entities + +**BNote** (`apps/server/src/becca/entities/bnote.ts`) + +```typescript +class BNote { + noteId: string + title: string + type: string + mime: string + isProtected: boolean + + // Content + getContent(): string | Buffer + setContent(content: string | Buffer): void + + // Relationships + getParentNotes(): BNote[] + getChildNotes(): BNote[] + getBranches(): BBranch[] + + // Attributes + getAttribute(type, name): BAttribute + getAttributes(type?, name?): BAttribute[] + setLabel(name, value): BAttribute + setRelation(name, targetNoteId): BAttribute + hasLabel(name): boolean + getLabelValue(name): string + + // Operations + save(): void + markAsDeleted(): void +} +``` + +**BBranch** + +```typescript +class BBranch { + branchId: string + noteId: string + parentNoteId: string + prefix: string + notePosition: number + + getNote(): BNote + getParentNote(): BNote + save(): void +} +``` + +**BAttribute** + +```typescript +class BAttribute { + attributeId: string + noteId: string + type: 'label' | 'relation' + name: string + value: string + + getNote(): BNote + getTargetNote(): BNote // For relations + save(): void +} +``` + +## Script Examples + +### Frontend Examples + +**1. Custom Toolbar Button** + +```javascript +// #run=frontendStartup +api.addButtonToToolbar({ + title: 'Export to PDF', + icon: 'file-export', + action: async () => { + const note = api.getActiveNote() + if (note) { + await api.runOnBackend('exportToPdf', [note.noteId]) + api.showMessage('Export started') + } + } +}) +``` + +**2. Auto-Save Reminder** + +```javascript +// #run=frontendStartup +let saveTimer +api.runOnNoteContentChange(() => { + clearTimeout(saveTimer) + saveTimer = setTimeout(() => { + api.showMessage('Remember to save your work!') + }, 300000) // 5 minutes +}) +``` + +**3. Note Statistics Widget** + +```javascript +// #customWidget +class StatsWidget extends api.NoteContextAwareWidget { + doRender() { + this.$widget = $('
') + return this.$widget + } + + async refreshWithNote(note) { + const content = await note.getContent() + const words = content.split(/\s+/).length + const chars = content.length + + this.$widget.html(` +
Words: ${words}
+
Characters: ${chars}
+ `) + } +} + +module.exports = StatsWidget +``` + +### Backend Examples + +**1. Auto-Tagging on Note Creation** + +```javascript +// #run=backendStartup +api.onNoteCreated((note) => { + // Auto-tag TODO notes + if (note.title.includes('TODO')) { + note.setLabel('type', 'todo') + note.setLabel('priority', 'normal') + } + + // Auto-tag meeting notes by date + if (note.title.match(/Meeting \d{4}-\d{2}-\d{2}/)) { + note.setLabel('type', 'meeting') + const dateMatch = note.title.match(/(\d{4}-\d{2}-\d{2})/) + if (dateMatch) { + note.setLabel('date', dateMatch[1]) + } + } +}) +``` + +**2. Daily Backup Reminder** + +```javascript +// #run=daily +const todayNote = api.getTodayNote() +todayNote.setLabel('backupDone', 'false') + +// Create reminder note +api.createNote(todayNote.noteId, '🔔 Backup Reminder', { + content: 'Remember to verify today\'s backup!', + type: 'text' +}) +``` + +**3. External API Integration** + +```javascript +// #run=backendStartup +api.onNoteCreated(async (note) => { + // Sync new notes to external service + if (note.hasLabel('sync-external')) { + try { + await api.axios.post('https://external-api.com/sync', { + noteId: note.noteId, + title: note.title, + content: note.getContent() + }) + note.setLabel('lastSync', api.dayjs().format()) + } catch (error) { + api.log('Sync failed: ' + error.message) + } + } +}) +``` + +**4. Database Cleanup** + +```javascript +// #run=weekly +// Clean up old revisions +const cutoffDate = api.dayjs().subtract(90, 'days').format() + +const oldRevisions = api.sql.getRows(` + SELECT revisionId FROM revisions + WHERE utcDateCreated < ? +`, [cutoffDate]) + +api.log(`Deleting ${oldRevisions.length} old revisions`) + +for (const row of oldRevisions) { + api.sql.execute('DELETE FROM revisions WHERE revisionId = ?', [row.revisionId]) +} +``` + +## Script Storage + +**Storage Location:** Scripts are stored as regular notes + +**Identifying Scripts:** +- Have `#run` attribute or `#customWidget` attribute +- Type is typically `code` with MIME `application/javascript` + +**Script Note Structure:** +``` +📁 Scripts (folder note) +├── 📜 Frontend Scripts +│ ├── Custom Toolbar Button (#run=frontendStartup) +│ └── Statistics Widget (#customWidget) +└── 📜 Backend Scripts + ├── Auto-Tagger (#run=backendStartup) + └── Daily Backup (#run=daily) +``` + +## Script Execution + +### Frontend Execution + +**Timing:** +1. Trilium frontend loads +2. Froca cache initializes +3. Script notes with `#run=frontendStartup` are found +4. Scripts execute in dependency order + +**Isolation:** +- Each script runs in separate context +- Shared `window.api` object +- Can access global window object + +### Backend Execution + +**Timing:** +1. Server starts +2. Becca cache loads +3. Script notes with `#run=backendStartup` are found +4. Scripts execute in dependency order + +**Isolation:** +- Each script is a separate module +- Can require Node.js modules +- Shared `api` global + +### Error Handling + +**Frontend:** +```javascript +try { + // Script code +} catch (error) { + api.showError('Script error: ' + error.message) + console.error(error) +} +``` + +**Backend:** +```javascript +try { + // Script code +} catch (error) { + api.log('Script error: ' + error.message) + console.error(error) +} +``` + +## Security Considerations + +### Frontend Scripts + +**Risks:** +- Can access all notes via Froca +- Can manipulate DOM +- Can make API calls +- Limited by browser security model + +**Mitigations:** +- User must trust scripts they add +- Scripts run with user privileges +- No access to file system + +### Backend Scripts + +**Risks:** +- Full Node.js access +- Can execute system commands +- Can access file system +- Can make network requests + +**Mitigations:** +- Scripts are user-created (trusted) +- Single-user model (no privilege escalation) +- Review scripts before adding `#run` attribute + +### Best Practices + +1. **Review script code** before adding execution attributes +2. **Use specific attributes** rather than wildcard searches +3. **Avoid eval()** and dynamic code execution +4. **Validate inputs** in scripts +5. **Handle errors** gracefully +6. **Log important actions** for audit trail + +## Performance Considerations + +### Optimization Tips + +**1. Cache Results:** +```javascript +// Bad: Re-query on every call +function getConfig() { + return api.getNote('config').getContent() +} + +// Good: Cache the result +let cachedConfig +function getConfig() { + if (!cachedConfig) { + cachedConfig = api.getNote('config').getContent() + } + return cachedConfig +} +``` + +**2. Use Efficient Queries:** +```javascript +// Bad: Load all notes and filter +const todos = api.searchForNotes('#type=todo') + +// Good: Use specific search +const todos = api.searchForNotes('#type=todo #status=pending') +``` + +**3. Batch Operations:** +```javascript +// Bad: Save after each change +notes.forEach(note => { + note.title = 'Updated' + note.save() +}) + +// Good: Batch changes +notes.forEach(note => { + note.title = 'Updated' +}) +// Save happens in batch +``` + +**4. Debounce Event Handlers:** +```javascript +let timeout +api.runOnNoteContentChange(() => { + clearTimeout(timeout) + timeout = setTimeout(() => { + // Process change + }, 500) +}) +``` + +## Debugging Scripts + +### Frontend Debugging + +**Browser DevTools:** +```javascript +console.log('Debug info:', data) +debugger // Breakpoint +``` + +**Trilium Log:** +```javascript +api.log('Script executed') +``` + +### Backend Debugging + +**Console Output:** +```javascript +console.log('Backend debug:', data) +api.log('Script log message') +``` + +**Inspect Becca:** +```javascript +api.log('Note count:', Object.keys(api.becca.notes).length) +``` + +## Advanced Topics + +### Custom Note Types + +Scripts can implement custom note type handlers: + +```javascript +// Register custom type +api.registerNoteType({ + type: 'mytype', + mime: 'application/x-mytype', + renderNote: (note) => { + // Custom rendering + } +}) +``` + +### External Libraries + +**Frontend:** +```javascript +// Load external library +const myLib = await import('https://cdn.example.com/lib.js') +``` + +**Backend:** +```javascript +// Use Node.js require +const fs = require('fs') +const axios = require('axios') +``` + +### State Persistence + +**Frontend:** +```javascript +// Use localStorage +localStorage.setItem('myScript:data', JSON.stringify(data)) +const data = JSON.parse(localStorage.getItem('myScript:data')) +``` + +**Backend:** +```javascript +// Store in special note +const stateNote = api.getNote('script-state-note') +stateNote.setContent(JSON.stringify(data)) + +const data = JSON.parse(stateNote.getContent()) +``` + +--- + +**See Also:** +- [Script API Documentation](Script%20API/) - Complete API reference +- [Advanced Showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) - Example scripts +- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture diff --git a/docs/SECURITY_ARCHITECTURE.md b/docs/SECURITY_ARCHITECTURE.md new file mode 100644 index 000000000..27993deac --- /dev/null +++ b/docs/SECURITY_ARCHITECTURE.md @@ -0,0 +1,834 @@ +# Trilium Security Architecture + +> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [SECURITY.md](../SECURITY.md) + +## Overview + +Trilium implements a **defense-in-depth security model** with multiple layers of protection for user data. The security architecture covers authentication, authorization, encryption, input sanitization, and secure communication. + +## Security Principles + +1. **Data Privacy**: User data is protected at rest and in transit +2. **Encryption**: Per-note encryption for sensitive content +3. **Authentication**: Multiple authentication methods supported +4. **Authorization**: Single-user model with granular protected sessions +5. **Input Validation**: All user input sanitized +6. **Secure Defaults**: Security features enabled by default +7. **Transparency**: Open source allows security audits + +## Threat Model + +### Threats Considered + +1. **Unauthorized Access** + - Physical access to device + - Network eavesdropping + - Stolen credentials + - Session hijacking + +2. **Data Exfiltration** + - Malicious scripts + - XSS attacks + - SQL injection + - CSRF attacks + +3. **Data Corruption** + - Malicious modifications + - Database tampering + - Sync conflicts + +4. **Privacy Leaks** + - Unencrypted backups + - Search indexing + - Temporary files + - Memory dumps + +### Out of Scope + +- Nation-state attackers +- Zero-day vulnerabilities in dependencies +- Hardware vulnerabilities (Spectre, Meltdown) +- Physical access with unlimited time +- Quantum computing attacks + +## Authentication + +### Password Authentication + +**Implementation:** `apps/server/src/services/password.ts` + +**Password Storage:** +```typescript +// Password is never stored directly +const salt = crypto.randomBytes(32) +const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') +const verificationHash = crypto.createHash('sha256') + .update(derivedKey) + .digest('hex') + +// Store only salt and verification hash +sql.insert('user_data', { + salt: salt.toString('hex'), + derivedKey: derivedKey.toString('hex') // Used for encryption +}) + +sql.insert('options', { + name: 'passwordVerificationHash', + value: verificationHash +}) +``` + +**Password Requirements:** +- Minimum length: 4 characters (configurable) +- No maximum length +- All characters allowed +- Can be changed by user + +**Login Process:** +```typescript +// 1. User submits password +POST /api/login/password +Body: { password: "user-password" } + +// 2. Server derives key +const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') + +// 3. Verify against stored hash +const verificationHash = crypto.createHash('sha256') + .update(derivedKey) + .digest('hex') + +if (verificationHash === storedHash) { + // 4. Create session + req.session.loggedIn = true + req.session.regenerate() +} +``` + +### TOTP (Two-Factor Authentication) + +**Implementation:** `apps/server/src/routes/api/login.ts` + +**Setup Process:** +```typescript +// 1. Generate secret +const secret = speakeasy.generateSecret({ + name: `Trilium (${username})`, + length: 32 +}) + +// 2. Store encrypted secret +const encryptedSecret = encrypt(secret.base32, dataKey) +sql.insert('options', { + name: 'totpSecret', + value: encryptedSecret +}) + +// 3. Generate QR code +const qrCodeUrl = secret.otpauth_url +``` + +**Verification:** +```typescript +// User submits TOTP token +POST /api/login/totp +Body: { token: "123456" } + +// Verify token +const secret = decrypt(encryptedSecret, dataKey) +const verified = speakeasy.totp.verify({ + secret: secret, + encoding: 'base32', + token: token, + window: 1 // Allow 1 time step tolerance +}) +``` + +### OpenID Connect + +**Implementation:** `apps/server/src/routes/api/login.ts` + +**Supported Providers:** +- Any OpenID Connect compatible provider +- Google, GitHub, Auth0, etc. + +**Flow:** +```typescript +// 1. Redirect to provider +GET /api/login/openid + +// 2. Provider redirects back with code +GET /api/login/openid/callback?code=... + +// 3. Exchange code for tokens +const tokens = await openidClient.callback(redirectUri, req.query) + +// 4. Verify ID token +const claims = tokens.claims() + +// 5. Create session +req.session.loggedIn = true +``` + +### Session Management + +**Session Storage:** SQLite database (sessions table) + +**Session Configuration:** +```typescript +app.use(session({ + secret: sessionSecret, + resave: false, + saveUninitialized: false, + rolling: true, + cookie: { + maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days + httpOnly: true, + secure: isHttps, + sameSite: 'lax' + }, + store: new SqliteStore({ + db: db, + table: 'sessions' + }) +})) +``` + +**Session Invalidation:** +- Automatic timeout after inactivity +- Manual logout clears session +- Server restart invalidates all sessions (optional) + +## Authorization + +### Single-User Model + +**Desktop:** +- Single user (owner of device) +- No multi-user support +- Full access to all notes + +**Server:** +- Single user per installation +- Authentication required for all operations +- No user roles or permissions + +### Protected Sessions + +**Purpose:** Temporary access to encrypted (protected) notes + +**Implementation:** `apps/server/src/services/protected_session.ts` + +**Workflow:** +```typescript +// 1. User enters password for protected notes +POST /api/protected-session/enter +Body: { password: "protected-password" } + +// 2. Derive encryption key +const protectedDataKey = deriveKey(password) + +// 3. Verify password (decrypt known encrypted value) +const decrypted = decrypt(testValue, protectedDataKey) +if (decrypted === expectedValue) { + // 4. Store in memory (not in session) + protectedSessionHolder.setProtectedDataKey(protectedDataKey) + + // 5. Set timeout + setTimeout(() => { + protectedSessionHolder.clearProtectedDataKey() + }, timeout) +} +``` + +**Protected Session Timeout:** +- Default: 10 minutes (configurable) +- Extends on activity +- Cleared on browser close +- Separate from main session + +### API Authorization + +**Internal API:** +- Requires authenticated session +- CSRF token validation +- Same-origin policy + +**ETAPI (External API):** +- Token-based authentication +- No session required +- Rate limiting + +## Encryption + +### Note Encryption + +**Encryption Algorithm:** AES-256-CBC + +**Key Hierarchy:** +``` +User Password + ↓ (PBKDF2) +Data Key (for protected notes) + ↓ (AES-256) +Protected Note Content +``` + +**Encryption Process:** +```typescript +// 1. Generate IV (initialization vector) +const iv = crypto.randomBytes(16) + +// 2. Encrypt content +const cipher = crypto.createCipheriv('aes-256-cbc', dataKey, iv) +let encrypted = cipher.update(content, 'utf8', 'base64') +encrypted += cipher.final('base64') + +// 3. Prepend IV to encrypted content +const encryptedBlob = iv.toString('base64') + ':' + encrypted + +// 4. Store in database +sql.insert('blobs', { + blobId: blobId, + content: encryptedBlob +}) +``` + +**Decryption Process:** +```typescript +// 1. Split IV and encrypted content +const [ivBase64, encryptedData] = encryptedBlob.split(':') +const iv = Buffer.from(ivBase64, 'base64') + +// 2. Decrypt +const decipher = crypto.createDecipheriv('aes-256-cbc', dataKey, iv) +let decrypted = decipher.update(encryptedData, 'base64', 'utf8') +decrypted += decipher.final('utf8') + +return decrypted +``` + +**Protected Note Metadata:** +- Title is NOT encrypted (for tree display) +- Type and MIME are NOT encrypted +- Content IS encrypted +- Attributes CAN be encrypted (optional) + +### Data Key Management + +**Master Data Key:** +```typescript +// Generated once during setup +const dataKey = crypto.randomBytes(32) // 256 bits + +// Encrypted with derived key from user password +const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') +const encryptedDataKey = encrypt(dataKey, derivedKey) + +// Stored in database +sql.insert('options', { + name: 'encryptedDataKey', + value: encryptedDataKey.toString('hex') +}) +``` + +**Key Rotation:** +- Not currently supported +- Requires re-encrypting all protected notes +- Planned for future version + +### Transport Encryption + +**HTTPS:** +- Required for server installations (recommended) +- TLS 1.2+ only +- Strong cipher suites preferred +- Certificate validation enabled + +**Desktop:** +- Local communication (no network) +- No HTTPS required + +### Backup Encryption + +**Database Backups:** +- Protected notes remain encrypted in backup +- Backup file should be protected separately +- Consider encrypting backup storage location + +## Input Sanitization + +### XSS Prevention + +**HTML Sanitization:** + +Location: `apps/client/src/services/dompurify.ts` + +```typescript +import DOMPurify from 'dompurify' + +// Configure DOMPurify +DOMPurify.setConfig({ + ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'br', 'div', ...], + ALLOWED_ATTR: ['href', 'title', 'class', 'id', ...], + ALLOW_DATA_ATTR: false +}) + +// Sanitize HTML before rendering +const cleanHtml = DOMPurify.sanitize(userHtml) +``` + +**CKEditor Configuration:** +```typescript +// apps/client/src/widgets/type_widgets/text_type_widget.ts +ClassicEditor.create(element, { + // Restrict allowed content + htmlSupport: { + allow: [ + { name: /./, attributes: true, classes: true, styles: true } + ], + disallow: [ + { name: 'script' }, + { name: 'iframe', attributes: /^(?!src$).*/ } + ] + } +}) +``` + +**Content Security Policy:** +```typescript +// apps/server/src/main.ts +app.use((req, res, next) => { + res.setHeader('Content-Security-Policy', + "default-src 'self'; " + + "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " + + "style-src 'self' 'unsafe-inline'; " + + "img-src 'self' data: blob:;" + ) + next() +}) +``` + +### SQL Injection Prevention + +**Parameterized Queries:** +```typescript +// GOOD - Safe from SQL injection +const notes = sql.getRows( + 'SELECT * FROM notes WHERE title = ?', + [userInput] +) + +// BAD - Vulnerable to SQL injection +const notes = sql.getRows( + `SELECT * FROM notes WHERE title = '${userInput}'` +) +``` + +**ORM Usage:** +```typescript +// Entity-based access prevents SQL injection +const note = becca.getNote(noteId) +note.title = userInput // Sanitized by entity +note.save() // Parameterized query +``` + +### CSRF Prevention + +**CSRF Token Validation:** + +Location: `apps/server/src/routes/middleware/csrf.ts` + +```typescript +// Generate CSRF token +const csrfToken = crypto.randomBytes(32).toString('hex') +req.session.csrfToken = csrfToken + +// Validate on state-changing requests +app.use((req, res, next) => { + if (['POST', 'PUT', 'DELETE'].includes(req.method)) { + const token = req.headers['x-csrf-token'] + if (token !== req.session.csrfToken) { + return res.status(403).json({ error: 'CSRF token mismatch' }) + } + } + next() +}) +``` + +**Client-Side:** +```typescript +// apps/client/src/services/server.ts +const csrfToken = getCsrfToken() + +fetch('/api/notes', { + method: 'POST', + headers: { + 'X-CSRF-Token': csrfToken, + 'Content-Type': 'application/json' + }, + body: JSON.stringify(data) +}) +``` + +### File Upload Validation + +**Validation:** +```typescript +// apps/server/src/routes/api/attachments.ts +const allowedMimeTypes = [ + 'image/jpeg', + 'image/png', + 'application/pdf', + // ... +] + +if (!allowedMimeTypes.includes(file.mimetype)) { + throw new Error('File type not allowed') +} + +// Validate file size +const maxSize = 100 * 1024 * 1024 // 100 MB +if (file.size > maxSize) { + throw new Error('File too large') +} + +// Sanitize filename +const sanitizedFilename = path.basename(file.originalname) + .replace(/[^a-z0-9.-]/gi, '_') +``` + +## Network Security + +### HTTPS Configuration + +**Server Setup:** +```typescript +// apps/server/src/main.ts +const httpsOptions = { + key: fs.readFileSync('server.key'), + cert: fs.readFileSync('server.cert') +} + +https.createServer(httpsOptions, app).listen(443) +``` + +**Certificate Validation:** +- Require valid certificates in production +- Self-signed certificates allowed for development +- Certificate pinning not implemented + +### Secure Headers + +```typescript +// apps/server/src/main.ts +app.use((req, res, next) => { + // Prevent clickjacking + res.setHeader('X-Frame-Options', 'SAMEORIGIN') + + // Prevent MIME sniffing + res.setHeader('X-Content-Type-Options', 'nosniff') + + // XSS protection + res.setHeader('X-XSS-Protection', '1; mode=block') + + // Referrer policy + res.setHeader('Referrer-Policy', 'same-origin') + + // HTTPS upgrade + if (req.secure) { + res.setHeader('Strict-Transport-Security', 'max-age=31536000') + } + + next() +}) +``` + +### Rate Limiting + +**API Rate Limiting:** +```typescript +// apps/server/src/routes/middleware/rate_limit.ts +const rateLimit = require('express-rate-limit') + +const apiLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, // 15 minutes + max: 1000, // Limit each IP to 1000 requests per window + message: 'Too many requests from this IP' +}) + +app.use('/api/', apiLimiter) +``` + +**Login Rate Limiting:** +```typescript +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, + max: 5, // 5 failed attempts + skipSuccessfulRequests: true +}) + +app.post('/api/login/password', loginLimiter, loginHandler) +``` + +## Data Security + +### Secure Data Deletion + +**Soft Delete:** +```typescript +// Mark as deleted (sync first) +note.isDeleted = 1 +note.deleteId = generateUUID() +note.save() + +// Entity change tracked for sync +addEntityChange('notes', noteId, note) +``` + +**Hard Delete (Erase):** +```typescript +// After sync completed +sql.execute('DELETE FROM notes WHERE noteId = ?', [noteId]) +sql.execute('DELETE FROM branches WHERE noteId = ?', [noteId]) +sql.execute('DELETE FROM attributes WHERE noteId = ?', [noteId]) + +// Mark entity change as erased +sql.execute('UPDATE entity_changes SET isErased = 1 WHERE entityId = ?', [noteId]) +``` + +**Blob Cleanup:** +```typescript +// Find orphaned blobs (not referenced by any note/revision/attachment) +const orphanedBlobs = sql.getRows(` + SELECT blobId FROM blobs + WHERE blobId NOT IN (SELECT blobId FROM notes WHERE blobId IS NOT NULL) + AND blobId NOT IN (SELECT blobId FROM revisions WHERE blobId IS NOT NULL) + AND blobId NOT IN (SELECT blobId FROM attachments WHERE blobId IS NOT NULL) +`) + +// Delete orphaned blobs +for (const blob of orphanedBlobs) { + sql.execute('DELETE FROM blobs WHERE blobId = ?', [blob.blobId]) +} +``` + +### Memory Security + +**Protected Data in Memory:** +- Protected data keys stored in memory only +- Cleared on timeout +- Not written to disk +- Not in session storage + +**Memory Cleanup:** +```typescript +// Clear sensitive data +const clearSensitiveData = () => { + protectedDataKey = null + + // Force garbage collection if available + if (global.gc) { + global.gc() + } +} +``` + +### Temporary Files + +**Secure Temporary Files:** +```typescript +const tempDir = os.tmpdir() +const tempFile = path.join(tempDir, `trilium-${crypto.randomBytes(16).toString('hex')}`) + +// Write temp file +fs.writeFileSync(tempFile, data, { mode: 0o600 }) // Owner read/write only + +// Clean up after use +fs.unlinkSync(tempFile) +``` + +## Dependency Security + +### Vulnerability Scanning + +**Tools:** +- `npm audit` - Check for known vulnerabilities +- Renovate bot - Automatic dependency updates +- GitHub Dependabot alerts + +**Process:** +```bash +# Check for vulnerabilities +npm audit + +# Fix automatically +npm audit fix + +# Manual review for breaking changes +npm audit fix --force +``` + +### Dependency Pinning + +**package.json:** +```json +{ + "dependencies": { + "express": "4.18.2", // Exact version + "better-sqlite3": "^9.2.2" // Compatible versions + } +} +``` + +**pnpm Overrides:** +```json +{ + "pnpm": { + "overrides": { + "lodash@<4.17.21": ">=4.17.21", // Force minimum version + "axios@<0.21.2": ">=0.21.2" + } + } +} +``` + +### Patch Management + +**pnpm Patches:** +```bash +# Create patch +pnpm patch @ckeditor/ckeditor5 + +# Edit files in temporary directory +# ... + +# Generate patch file +pnpm patch-commit /tmp/ckeditor5-patch + +# Patch applied automatically on install +``` + +## Security Best Practices + +### For Users + +1. **Strong Passwords** + - Use unique password for Trilium + - Enable TOTP 2FA + - Protect password manager + +2. **Protected Notes** + - Use for sensitive information + - Set reasonable session timeout + - Don't leave sessions unattended + +3. **Backups** + - Regular backups to secure location + - Encrypt backup storage + - Test backup restoration + +4. **Server Setup** + - Use HTTPS only + - Keep software updated + - Firewall configuration + - Use reverse proxy (nginx, Caddy) + +5. **Scripts** + - Review scripts before using + - Be cautious with external scripts + - Understand script permissions + +### For Developers + +1. **Code Review** + - Review all security-related changes + - Test authentication/authorization changes + - Validate input sanitization + +2. **Testing** + - Write security tests + - Test edge cases + - Penetration testing + +3. **Dependencies** + - Regular updates + - Audit new dependencies + - Monitor security advisories + +4. **Secrets** + - No secrets in source code + - Use environment variables + - Secure key generation + +## Security Auditing + +### Logs + +**Security Events Logged:** +- Login attempts (success/failure) +- Protected session access +- Password changes +- ETAPI token usage +- Failed CSRF validations + +**Log Location:** +- Desktop: Console output +- Server: Log files or stdout + +### Monitoring + +**Metrics to Monitor:** +- Failed login attempts +- API error rates +- Unusual database changes +- Large exports/imports + +## Incident Response + +### Security Issue Reporting + +**Process:** +1. Email security@triliumnext.com +2. Include vulnerability details +3. Provide reproduction steps +4. Allow reasonable disclosure time + +**Response:** +1. Acknowledge within 48 hours +2. Investigate and validate +3. Develop fix +4. Coordinate disclosure +5. Release patch + +### Breach Response + +**If Compromised:** +1. Change password immediately +2. Review recent activity +3. Check for unauthorized changes +4. Restore from backup if needed +5. Update security settings + +## Future Security Enhancements + +**Planned:** +- Hardware security key support (U2F/WebAuthn) +- End-to-end encryption for sync +- Zero-knowledge architecture option +- Encryption key rotation +- Audit log enhancements +- Per-note access controls + +**Under Consideration:** +- Multi-user support with permissions +- Blockchain-based sync verification +- Homomorphic encryption for search +- Quantum-resistant encryption + +--- + +**See Also:** +- [SECURITY.md](../SECURITY.md) - Security policy +- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture +- [Protected Notes Guide](https://triliumnext.github.io/Docs/Wiki/protected-notes) diff --git a/docs/SYNCHRONIZATION.md b/docs/SYNCHRONIZATION.md new file mode 100644 index 000000000..2f39eee40 --- /dev/null +++ b/docs/SYNCHRONIZATION.md @@ -0,0 +1,583 @@ +# Trilium Synchronization Architecture + +> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [User Guide: Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) + +## Overview + +Trilium implements a sophisticated **bidirectional synchronization system** that allows users to sync their note databases across multiple devices (desktop clients and server instances). The sync protocol is designed to handle: + +- Concurrent modifications across devices +- Conflict resolution +- Partial sync (only changed entities) +- Protected note synchronization +- Efficient bandwidth usage + +## Sync Architecture + +``` +┌─────────────┐ ┌─────────────┐ +│ Desktop 1 │ │ Desktop 2 │ +│ (Client) │ │ (Client) │ +└──────┬──────┘ └──────┬──────┘ + │ │ + │ WebSocket/HTTP │ + │ │ + ▼ ▼ +┌────────────────────────────────────────────────┐ +│ Sync Server │ +│ ┌──────────────────────────────────────┐ │ +│ │ Sync Service │ │ +│ │ - Entity Change Management │ │ +│ │ - Conflict Resolution │ │ +│ │ - Version Tracking │ │ +│ └──────────────────────────────────────┘ │ +│ │ │ +│ ┌──────┴───────┐ │ +│ │ Database │ │ +│ │ (entity_changes)│ │ +│ └──────────────┘ │ +└────────────────────────────────────────────────┘ +``` + +## Core Concepts + +### Entity Changes + +Every modification to any entity (note, branch, attribute, etc.) creates an **entity change** record: + +```sql +entity_changes ( + id, -- Auto-increment ID + entityName, -- 'notes', 'branches', 'attributes', etc. + entityId, -- ID of the changed entity + hash, -- Content hash for integrity + isErased, -- If entity was erased (deleted permanently) + changeId, -- Unique change identifier + componentId, -- Installation identifier + instanceId, -- Process instance identifier + isSynced, -- Whether synced to server + utcDateChanged -- When change occurred +) +``` + +**Key Properties:** +- **changeId**: Globally unique identifier (UUID) for the change +- **componentId**: Unique per Trilium installation (persists across restarts) +- **instanceId**: Unique per process (changes on restart) +- **hash**: SHA-256 hash of entity data for integrity verification + +### Sync Versions + +Each Trilium installation tracks: +- **Local sync version**: Highest change ID seen locally +- **Server sync version**: Highest change ID on server +- **Entity versions**: Last sync version for each entity type + +### Change Tracking + +**When an entity is modified:** + +```typescript +// apps/server/src/services/entity_changes.ts +function addEntityChange(entityName, entityId, entity) { + const hash = calculateHash(entity) + const changeId = generateUUID() + + sql.insert('entity_changes', { + entityName, + entityId, + hash, + changeId, + componentId: config.componentId, + instanceId: config.instanceId, + isSynced: 0, + utcDateChanged: now() + }) +} +``` + +**Entity modification triggers:** +- Note content update +- Note metadata change +- Branch creation/deletion/reorder +- Attribute addition/removal +- Options modification + +## Sync Protocol + +### Sync Handshake + +**Step 1: Client Initiates Sync** + +```typescript +// Client sends current sync version +POST /api/sync/check +{ + "sourceId": "client-component-id", + "maxChangeId": 12345 +} +``` + +**Step 2: Server Responds with Status** + +```typescript +// Server checks for changes +Response: +{ + "entityChanges": 567, // Changes on server + "maxChangeId": 12890, // Server's max change ID + "outstandingPushCount": 23 // Client changes not yet synced +} +``` + +**Step 3: Decision** + +- If `entityChanges > 0`: Pull changes from server +- If `outstandingPushCount > 0`: Push changes to server +- Both can happen in sequence + +### Pull Sync (Server → Client) + +**Client Requests Changes:** + +```typescript +POST /api/sync/pull +{ + "sourceId": "client-component-id", + "lastSyncedChangeId": 12345 +} +``` + +**Server Responds:** + +```typescript +Response: +{ + "notes": [ + { noteId: "abc", title: "New Note", ... } + ], + "branches": [...], + "attributes": [...], + "revisions": [...], + "attachments": [...], + "entityChanges": [ + { entityName: "notes", entityId: "abc", changeId: "...", ... } + ], + "maxChangeId": 12890 +} +``` + +**Client Processing:** + +1. Apply entity changes to local database +2. Update Froca cache +3. Update local sync version +4. Trigger UI refresh + +### Push Sync (Client → Server) + +**Client Sends Changes:** + +```typescript +POST /api/sync/push +{ + "sourceId": "client-component-id", + "entities": [ + { + "entity": { + "noteId": "xyz", + "title": "Modified Note", + ... + }, + "entityChange": { + "changeId": "change-uuid", + "entityName": "notes", + ... + } + } + ] +} +``` + +**Server Processing:** + +1. Validate changes +2. Check for conflicts +3. Apply changes to database +4. Update Becca cache +5. Mark as synced +6. Broadcast to other connected clients via WebSocket + +**Conflict Detection:** + +```typescript +// Check if entity was modified on server since client's last sync +const serverEntity = becca.getNote(noteId) +const serverLastModified = serverEntity.utcDateModified + +if (serverLastModified > clientSyncVersion) { + // CONFLICT! + resolveConflict(serverEntity, clientEntity) +} +``` + +## Conflict Resolution + +### Conflict Types + +**1. Content Conflict** +- Both client and server modified same note content +- **Resolution**: Last-write-wins based on `utcDateModified` + +**2. Structure Conflict** +- Branch moved/deleted on one side, modified on other +- **Resolution**: Tombstone records, reconciliation + +**3. Attribute Conflict** +- Same attribute modified differently +- **Resolution**: Last-write-wins + +### Conflict Resolution Strategy + +**Last-Write-Wins:** +```typescript +if (clientEntity.utcDateModified > serverEntity.utcDateModified) { + // Client wins, apply client changes + applyClientChange(clientEntity) +} else { + // Server wins, reject client change + // Client will pull server version on next sync +} +``` + +**Tombstone Records:** +- Deleted entities leave tombstone in `entity_changes` +- Prevents re-sync of deleted items +- `isErased = 1` for permanent deletions + +### Protected Notes Sync + +**Challenge:** Encrypted content can't be synced without password + +**Solution:** + +1. **Protected session required**: User must unlock protected notes +2. **Encrypted sync**: Content synced in encrypted form +3. **Hash verification**: Integrity checked without decryption +4. **Lazy decryption**: Only decrypt when accessed + +**Sync Flow:** + +```typescript +// Client side +if (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable()) { + // Skip protected notes if session not active + continue +} + +// Server side +if (note.isProtected) { + // Sync encrypted blob + // Don't decrypt for sync + syncEncryptedBlob(note.blobId) +} +``` + +## Sync States + +### Connection States + +- **Connected**: WebSocket connection active +- **Disconnected**: No connection to sync server +- **Syncing**: Actively transferring data +- **Conflict**: Sync paused due to conflict + +### Entity Sync States + +Each entity can be in: +- **Synced**: In sync with server +- **Pending**: Local changes not yet pushed +- **Conflict**: Conflicting changes detected + +### UI Indicators + +```typescript +// apps/client/src/widgets/sync_status.ts +class SyncStatusWidget { + showSyncStatus() { + if (isConnected && allSynced) { + showIcon('synced') + } else if (isSyncing) { + showIcon('syncing-spinner') + } else if (hasConflicts) { + showIcon('conflict-warning') + } else { + showIcon('not-synced') + } + } +} +``` + +## Performance Optimizations + +### Incremental Sync + +Only entities changed since last sync are transferred: + +```sql +SELECT * FROM entity_changes +WHERE id > :lastSyncedChangeId +ORDER BY id ASC +LIMIT 1000 +``` + +### Batch Processing + +Changes sent in batches to reduce round trips: + +```typescript +const BATCH_SIZE = 1000 +const changes = getUnsyncedChanges(BATCH_SIZE) +await syncBatch(changes) +``` + +### Hash-Based Change Detection + +```typescript +// Only sync if hash differs +const localHash = calculateHash(localEntity) +const serverHash = getServerHash(entityId) + +if (localHash !== serverHash) { + syncEntity(localEntity) +} +``` + +### Compression + +Large payloads compressed before transmission: + +```typescript +// Server sends compressed response +res.setHeader('Content-Encoding', 'gzip') +res.send(gzip(syncData)) +``` + +## Error Handling + +### Network Errors + +**Retry Strategy:** +```typescript +const RETRY_DELAYS = [1000, 2000, 5000, 10000, 30000] + +async function syncWithRetry(attempt = 0) { + try { + await performSync() + } catch (error) { + if (attempt < RETRY_DELAYS.length) { + setTimeout(() => { + syncWithRetry(attempt + 1) + }, RETRY_DELAYS[attempt]) + } + } +} +``` + +### Sync Integrity Checks + +**Hash Verification:** +```typescript +// Verify entity hash matches +const calculatedHash = calculateHash(entity) +const receivedHash = entityChange.hash + +if (calculatedHash !== receivedHash) { + throw new Error('Hash mismatch - data corruption detected') +} +``` + +**Consistency Checks:** +- Orphaned branches detection +- Missing parent notes +- Invalid entity references +- Circular dependencies + +## Sync Server Configuration + +### Server Setup + +**Required Options:** +```javascript +{ + "syncServerHost": "https://sync.example.com", + "syncServerTimeout": 60000, + "syncProxy": "" // Optional HTTP proxy +} +``` + +**Authentication:** +- Username/password or +- Sync token (generated on server) + +### Client Setup + +**Desktop Client:** +```javascript +// Settings → Sync +{ + "syncServerHost": "https://sync.example.com", + "username": "user@example.com", + "password": "********" +} +``` + +**Test Connection:** +```typescript +POST /api/sync/test +Response: { "success": true } +``` + +## Sync API Endpoints + +Located at: `apps/server/src/routes/api/sync.ts` + +**Endpoints:** + +- `POST /api/sync/check` - Check sync status +- `POST /api/sync/pull` - Pull changes from server +- `POST /api/sync/push` - Push changes to server +- `POST /api/sync/finished` - Mark sync complete +- `POST /api/sync/test` - Test connection +- `GET /api/sync/stats` - Sync statistics + +## WebSocket Sync Updates + +Real-time sync via WebSocket: + +```typescript +// Server broadcasts change to all connected clients +ws.broadcast('entity-change', { + entityName: 'notes', + entityId: 'abc123', + changeId: 'change-uuid', + sourceId: 'originating-component-id' +}) + +// Client receives and applies +ws.on('entity-change', (data) => { + if (data.sourceId !== myComponentId) { + froca.processEntityChange(data) + } +}) +``` + +## Sync Scheduling + +### Automatic Sync + +**Desktop:** +- Sync on startup +- Periodic sync (configurable interval, default: 60s) +- Sync before shutdown + +**Server:** +- Sync on entity modification +- WebSocket push to connected clients + +### Manual Sync + +User can trigger: +- Full sync +- Sync now +- Sync specific subtree + +## Troubleshooting + +### Common Issues + +**Sync stuck:** +```sql +-- Reset sync state +UPDATE entity_changes SET isSynced = 0; +DELETE FROM options WHERE name LIKE 'sync%'; +``` + +**Hash mismatch:** +- Data corruption detected +- Re-sync from backup +- Check database integrity + +**Conflict loop:** +- Manual intervention required +- Export conflicting notes +- Choose winning version +- Re-sync + +### Sync Diagnostics + +**Check sync status:** +```typescript +GET /api/sync/stats +Response: { + "unsyncedChanges": 0, + "lastSyncDate": "2025-11-02T12:00:00Z", + "syncVersion": 12890 +} +``` + +**Entity change log:** +```sql +SELECT * FROM entity_changes +WHERE isSynced = 0 +ORDER BY id DESC; +``` + +## Security Considerations + +### Encrypted Sync + +- Protected notes synced encrypted +- No plain text over network +- Server cannot read protected content + +### Authentication + +- Username/password over HTTPS only +- Sync tokens for token-based auth +- Session cookies with CSRF protection + +### Authorization + +- Users can only sync their own data +- No cross-user sync support +- Sync server validates ownership + +## Performance Metrics + +**Typical Sync Performance:** +- 1000 changes: ~2-5 seconds +- 10000 changes: ~20-50 seconds +- Initial full sync (100k notes): ~5-10 minutes + +**Factors:** +- Network latency +- Database size +- Number of protected notes +- Attachment sizes + +## Future Improvements + +**Planned Enhancements:** +- Differential sync (binary diff) +- Peer-to-peer sync (no central server) +- Multi-server sync +- Partial sync (subtree only) +- Sync over Tor/I2P + +--- + +**See Also:** +- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture +- [Sync User Guide](https://triliumnext.github.io/Docs/Wiki/synchronization) +- [Sync API Source](../apps/server/src/routes/api/sync.ts) diff --git a/docs/TECHNICAL_DOCUMENTATION.md b/docs/TECHNICAL_DOCUMENTATION.md new file mode 100644 index 000000000..445df0530 --- /dev/null +++ b/docs/TECHNICAL_DOCUMENTATION.md @@ -0,0 +1,423 @@ +# Trilium Notes - Technical Documentation Index + +Welcome to the comprehensive technical and architectural documentation for Trilium Notes. This index provides quick access to all technical documentation resources. + +## 📚 Core Architecture Documentation + +### [ARCHITECTURE.md](ARCHITECTURE.md) +**Main technical architecture document** covering the complete system design. + +**Topics Covered:** +- High-level architecture overview +- Monorepo structure and organization +- Core architecture patterns (Becca, Froca, Shaca) +- Entity system and data model +- Widget-based UI architecture +- Frontend and backend architecture +- API architecture (Internal, ETAPI, WebSocket) +- Build system and tooling +- Testing strategy +- Security overview + +**Audience:** Developers, architects, contributors + +--- + +### [DATABASE.md](DATABASE.md) +**Complete database architecture and schema documentation.** + +**Topics Covered:** +- SQLite database structure +- Entity tables (notes, branches, attributes, revisions, attachments, blobs) +- System tables (options, entity_changes, sessions) +- Data relationships and integrity +- Database access patterns +- Migrations and versioning +- Performance optimization +- Backup and maintenance +- Security considerations + +**Audience:** Backend developers, database administrators + +--- + +### [SYNCHRONIZATION.md](SYNCHRONIZATION.md) +**Detailed synchronization protocol and implementation.** + +**Topics Covered:** +- Sync architecture overview +- Entity change tracking +- Sync protocol (handshake, pull, push) +- Conflict resolution strategies +- Protected notes synchronization +- Performance optimizations +- Error handling and retry logic +- Sync server configuration +- WebSocket real-time updates +- Troubleshooting guide + +**Audience:** Advanced users, sync server administrators, contributors + +--- + +### [SCRIPTING.md](SCRIPTING.md) +**Comprehensive guide to the Trilium scripting system.** + +**Topics Covered:** +- Script types (frontend, backend, render) +- Frontend API reference +- Backend API reference +- Entity classes (FNote, BNote, etc.) +- Script examples and patterns +- Script storage and execution +- Security considerations +- Performance optimization +- Debugging techniques +- Advanced topics + +**Audience:** Power users, script developers, plugin creators + +--- + +### [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) +**In-depth security architecture and implementation.** + +**Topics Covered:** +- Security principles and threat model +- Authentication methods (password, TOTP, OpenID) +- Session management +- Authorization and protected sessions +- Encryption (notes, transport, backups) +- Input sanitization (XSS, SQL injection, CSRF) +- Network security (HTTPS, headers, rate limiting) +- Data security and secure deletion +- Dependency security +- Security best practices +- Incident response + +**Audience:** Security engineers, administrators, auditors + +--- + +## 🔧 Developer Documentation + +### [Developer Guide](Developer%20Guide/Developer%20Guide/) +Collection of developer-focused documentation for contributing to Trilium. + +**Key Documents:** +- [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) - Setting up development environment +- [Project Structure](Developer%20Guide/Developer%20Guide/Project%20Structure.md) - Monorepo organization +- [Development and Architecture](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/) - Various development topics + +**Topics Include:** +- Local development setup +- Building and deployment +- Adding new note types +- Database schema details +- Internationalization +- Icons and UI customization +- Docker development +- Troubleshooting + +**Audience:** Contributors, developers + +--- + +## 📖 User Documentation + +### [User Guide](User%20Guide/User%20Guide/) +Comprehensive end-user documentation for using Trilium. + +**Key Sections:** +- Installation & Setup +- Basic Concepts and Features +- Note Types +- Advanced Usage +- Synchronization +- Import/Export + +**Audience:** End users, administrators + +--- + +### [Script API](Script%20API/) +Complete API reference for user scripting. + +**Coverage:** +- Frontend API methods +- Backend API methods +- Entity properties and methods +- Event handlers +- Utility functions + +**Audience:** Script developers, power users + +--- + +## 🚀 Quick Start Guides + +### For Users +1. [Installation Guide](User%20Guide/User%20Guide/Installation%20&%20Setup/) - Get Trilium running +2. [Basic Concepts](User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/) - Learn the fundamentals +3. [Scripting Guide](SCRIPTING.md) - Extend Trilium with scripts + +### For Developers +1. [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) - Setup development environment +2. [Architecture Overview](ARCHITECTURE.md) - Understand the system +3. [Contributing Guide](../README.md#-contribute) - Start contributing + +### For Administrators +1. [Server Installation](User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) - Deploy Trilium server +2. [Synchronization Setup](SYNCHRONIZATION.md) - Configure sync +3. [Security Best Practices](SECURITY_ARCHITECTURE.md#security-best-practices) - Secure your installation + +--- + +## 🔍 Documentation by Topic + +### Architecture & Design +- [Overall Architecture](ARCHITECTURE.md) +- [Monorepo Structure](ARCHITECTURE.md#monorepo-structure) +- [Three-Layer Cache System](ARCHITECTURE.md#three-layer-cache-system) +- [Entity System](ARCHITECTURE.md#entity-system) +- [Widget-Based UI](ARCHITECTURE.md#widget-based-ui) + +### Data & Storage +- [Database Architecture](DATABASE.md) +- [Entity Tables](DATABASE.md#entity-tables) +- [Data Relationships](DATABASE.md#data-relationships) +- [Blob Storage](DATABASE.md#blobs-table) +- [Database Migrations](DATABASE.md#database-migrations) + +### Synchronization +- [Sync Architecture](SYNCHRONIZATION.md#sync-architecture) +- [Sync Protocol](SYNCHRONIZATION.md#sync-protocol) +- [Conflict Resolution](SYNCHRONIZATION.md#conflict-resolution) +- [Protected Notes Sync](SYNCHRONIZATION.md#protected-notes-sync) +- [WebSocket Sync](SYNCHRONIZATION.md#websocket-sync-updates) + +### Security +- [Authentication](SECURITY_ARCHITECTURE.md#authentication) +- [Encryption](SECURITY_ARCHITECTURE.md#encryption) +- [Input Sanitization](SECURITY_ARCHITECTURE.md#input-sanitization) +- [Network Security](SECURITY_ARCHITECTURE.md#network-security) +- [Security Best Practices](SECURITY_ARCHITECTURE.md#security-best-practices) + +### Scripting & Extensibility +- [Script Types](SCRIPTING.md#script-types) +- [Frontend API](SCRIPTING.md#frontend-api) +- [Backend API](SCRIPTING.md#backend-api) +- [Script Examples](SCRIPTING.md#script-examples) +- [Custom Widgets](SCRIPTING.md#render-scripts) + +### Frontend +- [Client Architecture](ARCHITECTURE.md#frontend-architecture) +- [Widget System](ARCHITECTURE.md#widget-based-ui) +- [Event System](ARCHITECTURE.md#event-system) +- [Froca Cache](ARCHITECTURE.md#2-froca-frontend-cache) +- [UI Components](ARCHITECTURE.md#ui-components) + +### Backend +- [Server Architecture](ARCHITECTURE.md#backend-architecture) +- [Service Layer](ARCHITECTURE.md#service-layer) +- [Route Structure](ARCHITECTURE.md#route-structure) +- [Becca Cache](ARCHITECTURE.md#1-becca-backend-cache) +- [Middleware](ARCHITECTURE.md#middleware) + +### Build & Deploy +- [Build System](ARCHITECTURE.md#build-system) +- [Package Manager](ARCHITECTURE.md#package-manager-pnpm) +- [Build Tools](ARCHITECTURE.md#build-tools) +- [Docker](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Docker.md) +- [Deployment](Developer%20Guide/Developer%20Guide/Building%20and%20deployment/) + +### Testing +- [Testing Strategy](ARCHITECTURE.md#testing-strategy) +- [Test Organization](ARCHITECTURE.md#test-organization) +- [E2E Testing](ARCHITECTURE.md#e2e-testing) + +--- + +## 📋 Reference Documentation + +### File Locations +``` +trilium/ +├── apps/ +│ ├── client/ # Frontend application +│ ├── server/ # Backend server +│ ├── desktop/ # Electron app +│ └── ... +├── packages/ +│ ├── commons/ # Shared code +│ ├── ckeditor5/ # Rich text editor +│ └── ... +├── docs/ +│ ├── ARCHITECTURE.md # Main architecture doc +│ ├── DATABASE.md # Database documentation +│ ├── SYNCHRONIZATION.md # Sync documentation +│ ├── SCRIPTING.md # Scripting guide +│ ├── SECURITY_ARCHITECTURE.md # Security documentation +│ ├── Developer Guide/ # Developer docs +│ ├── User Guide/ # User docs +│ └── Script API/ # API reference +└── ... +``` + +### Key Source Files +- **Backend Entry:** `apps/server/src/main.ts` +- **Frontend Entry:** `apps/client/src/desktop.ts` / `apps/client/src/index.ts` +- **Becca Cache:** `apps/server/src/becca/becca.ts` +- **Froca Cache:** `apps/client/src/services/froca.ts` +- **Database Schema:** `apps/server/src/assets/db/schema.sql` +- **Backend API:** `apps/server/src/services/backend_script_api.ts` +- **Frontend API:** `apps/client/src/services/frontend_script_api.ts` + +### Important Directories +- **Entities:** `apps/server/src/becca/entities/` +- **Widgets:** `apps/client/src/widgets/` +- **Services:** `apps/server/src/services/` +- **Routes:** `apps/server/src/routes/` +- **Migrations:** `apps/server/src/migrations/` +- **Tests:** Various `*.spec.ts` files throughout + +--- + +## 🎯 Common Tasks + +### Understanding the Codebase +1. Read [ARCHITECTURE.md](ARCHITECTURE.md) for overview +2. Explore [Monorepo Structure](ARCHITECTURE.md#monorepo-structure) +3. Review [Entity System](ARCHITECTURE.md#entity-system) +4. Check [Key Files](ARCHITECTURE.md#key-files-for-understanding-architecture) + +### Adding Features +1. Review relevant architecture documentation +2. Check [Developer Guide](Developer%20Guide/Developer%20Guide/) +3. Follow existing patterns in codebase +4. Write tests +5. Update documentation + +### Debugging Issues +1. Check [Troubleshooting](Developer%20Guide/Developer%20Guide/Troubleshooting/) +2. Review [Database](DATABASE.md) for data issues +3. Check [Synchronization](SYNCHRONIZATION.md) for sync issues +4. Review [Security](SECURITY_ARCHITECTURE.md) for auth issues + +### Performance Optimization +1. [Database Performance](DATABASE.md#performance-optimization) +2. [Cache Optimization](ARCHITECTURE.md#caching-system) +3. [Build Optimization](ARCHITECTURE.md#build-system) +4. [Script Performance](SCRIPTING.md#performance-considerations) + +--- + +## 🔗 External Resources + +### Official Links +- **Website:** https://triliumnotes.org +- **Documentation:** https://docs.triliumnotes.org +- **GitHub:** https://github.com/TriliumNext/Trilium +- **Discussions:** https://github.com/TriliumNext/Trilium/discussions +- **Matrix Chat:** https://matrix.to/#/#triliumnext:matrix.org + +### Community Resources +- **Awesome Trilium:** https://github.com/Nriver/awesome-trilium +- **TriliumRocks:** https://trilium.rocks/ +- **Wiki:** https://triliumnext.github.io/Docs/Wiki/ + +### Related Projects +- **TriliumDroid:** https://github.com/FliegendeWurst/TriliumDroid +- **Web Clipper:** Included in main repository + +--- + +## 📝 Documentation Conventions + +### Document Structure +- Overview section +- Table of contents +- Main content with headings +- Code examples where relevant +- "See Also" references + +### Code Examples +```typescript +// TypeScript examples with comments +const example = 'value' +``` + +```sql +-- SQL examples with formatting +SELECT * FROM notes WHERE noteId = ? +``` + +### Cross-References +- Use relative links: `[text](path/to/file.md)` +- Reference sections: `[text](file.md#section)` +- External links: Full URLs + +### Maintenance +- Review on major releases +- Update for architectural changes +- Add examples for new features +- Keep API references current + +--- + +## 🤝 Contributing to Documentation + +### What to Document +- New features and APIs +- Architecture changes +- Migration guides +- Performance tips +- Security considerations + +### How to Contribute +1. Edit markdown files in `docs/` +2. Follow existing structure and style +3. Include code examples +4. Test links and formatting +5. Submit pull request + +### Documentation Standards +- Clear, concise language +- Complete code examples +- Proper markdown formatting +- Cross-references to related docs +- Updated version numbers + +--- + +## 📅 Version Information + +- **Documentation Version:** 0.99.3 +- **Last Updated:** November 2025 +- **Trilium Version:** 0.99.3+ +- **Next Review:** When major architectural changes occur + +--- + +## 💡 Getting Help + +### For Users +- [User Guide](User%20Guide/User%20Guide/) +- [GitHub Discussions](https://github.com/TriliumNext/Trilium/discussions) +- [Matrix Chat](https://matrix.to/#/#triliumnext:matrix.org) + +### For Developers +- [Developer Guide](Developer%20Guide/Developer%20Guide/) +- [Architecture Docs](ARCHITECTURE.md) +- [GitHub Issues](https://github.com/TriliumNext/Trilium/issues) + +### For Contributors +- [Contributing Guidelines](../README.md#-contribute) +- [Code of Conduct](../CODE_OF_CONDUCT) +- [Developer Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) + +--- + +**Maintained by:** TriliumNext Team +**License:** AGPL-3.0-only +**Repository:** https://github.com/TriliumNext/Trilium From 5b8bb8587d850d32137dd03ebae2742a22228f12 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:00:54 +0000 Subject: [PATCH 12/54] Address code review feedback - add logging and constant for virtual branches Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- apps/client/src/widgets/dialogs/branch_prefix.tsx | 5 ++++- apps/server/src/routes/api/branches.ts | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/dialogs/branch_prefix.tsx b/apps/client/src/widgets/dialogs/branch_prefix.tsx index 4a1c025b0..26f6f0dff 100644 --- a/apps/client/src/widgets/dialogs/branch_prefix.tsx +++ b/apps/client/src/widgets/dialogs/branch_prefix.tsx @@ -12,6 +12,9 @@ import { useTriliumEvent } from "../react/hooks.jsx"; import FBranch from "../../entities/fbranch.js"; import type { ContextMenuCommandData } from "../../components/app_context.js"; +// Virtual branches (e.g., from search results) start with this prefix +const VIRTUAL_BRANCH_PREFIX = "virt-"; + export default function BranchPrefixDialog() { const [ shown, setShown ] = useState(false); const [ branches, setBranches ] = useState([]); @@ -23,7 +26,7 @@ export default function BranchPrefixDialog() { if (data?.selectedOrActiveBranchIds && data.selectedOrActiveBranchIds.length > 0) { // Multi-select mode from tree context menu - branchIds = data.selectedOrActiveBranchIds.filter((branchId) => !branchId.startsWith("virt-")); + branchIds = data.selectedOrActiveBranchIds.filter((branchId) => !branchId.startsWith(VIRTUAL_BRANCH_PREFIX)); } else { // Single branch mode from keyboard shortcut or when no selection const notePath = appContext.tabManager.getActiveContextNotePath(); diff --git a/apps/server/src/routes/api/branches.ts b/apps/server/src/routes/api/branches.ts index 86699f5ba..977fd34a7 100644 --- a/apps/server/src/routes/api/branches.ts +++ b/apps/server/src/routes/api/branches.ts @@ -278,18 +278,22 @@ function setPrefixBatch(req: Request) { } const normalizedPrefix = utils.isEmptyOrWhitespace(prefix) ? null : prefix; + let updatedCount = 0; for (const branchId of branchIds) { const branch = becca.getBranch(branchId); if (branch) { branch.prefix = normalizedPrefix; branch.save(); + updatedCount++; + } else { + log.info(`Branch ${branchId} not found, skipping prefix update`); } } return { success: true, - count: branchIds.length + count: updatedCount }; } From 07fe42d04e3cefc8a4fb9f6f63892199c9e947fa Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:01:17 +0000 Subject: [PATCH 13/54] Add quick reference guide for technical documentation Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/QUICK_REFERENCE.md | 155 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 docs/QUICK_REFERENCE.md diff --git a/docs/QUICK_REFERENCE.md b/docs/QUICK_REFERENCE.md new file mode 100644 index 000000000..396cc0dd6 --- /dev/null +++ b/docs/QUICK_REFERENCE.md @@ -0,0 +1,155 @@ +# Trilium Technical Documentation - Quick Reference + +> **Start here:** [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) - Complete index of all documentation + +## 📖 Documentation Files + +| Document | Description | Size | Lines | +|----------|-------------|------|-------| +| [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) | Main index and navigation hub | 13KB | 423 | +| [ARCHITECTURE.md](ARCHITECTURE.md) | Complete system architecture | 30KB | 1,016 | +| [DATABASE.md](DATABASE.md) | Database schema and operations | 19KB | 736 | +| [SYNCHRONIZATION.md](SYNCHRONIZATION.md) | Sync protocol and implementation | 14KB | 583 | +| [SCRIPTING.md](SCRIPTING.md) | User scripting system guide | 17KB | 734 | +| [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) | Security implementation details | 19KB | 834 | + +**Total:** 112KB of comprehensive documentation across 4,326 lines! + +## 🎯 Quick Access by Role + +### 👤 End Users +- **Getting Started:** [User Guide](User%20Guide/User%20Guide/) +- **Scripting:** [SCRIPTING.md](SCRIPTING.md) +- **Sync Setup:** [SYNCHRONIZATION.md](SYNCHRONIZATION.md) + +### 💻 Developers +- **Architecture:** [ARCHITECTURE.md](ARCHITECTURE.md) +- **Development Setup:** [Developer Guide](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) +- **Database:** [DATABASE.md](DATABASE.md) + +### 🔒 Security Auditors +- **Security:** [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) +- **Encryption:** [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) +- **Auth:** [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) + +### 🏗️ System Architects +- **Overall Design:** [ARCHITECTURE.md](ARCHITECTURE.md) +- **Cache System:** [ARCHITECTURE.md#three-layer-cache-system](ARCHITECTURE.md#three-layer-cache-system) +- **Entity Model:** [ARCHITECTURE.md#entity-system](ARCHITECTURE.md#entity-system) + +### 🔧 DevOps Engineers +- **Server Installation:** [User Guide - Server Installation](User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) +- **Docker:** [Developer Guide - Docker](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Docker.md) +- **Sync Server:** [SYNCHRONIZATION.md#sync-server-configuration](SYNCHRONIZATION.md#sync-server-configuration) + +### 📊 Database Administrators +- **Schema:** [DATABASE.md#database-schema](DATABASE.md#database-schema) +- **Maintenance:** [DATABASE.md#database-maintenance](DATABASE.md#database-maintenance) +- **Performance:** [DATABASE.md#performance-optimization](DATABASE.md#performance-optimization) + +## 🔍 Quick Topic Finder + +### Core Concepts +- **Becca Cache:** [ARCHITECTURE.md#1-becca-backend-cache](ARCHITECTURE.md#1-becca-backend-cache) +- **Froca Cache:** [ARCHITECTURE.md#2-froca-frontend-cache](ARCHITECTURE.md#2-froca-frontend-cache) +- **Entity System:** [ARCHITECTURE.md#entity-system](ARCHITECTURE.md#entity-system) +- **Widget System:** [ARCHITECTURE.md#widget-based-ui](ARCHITECTURE.md#widget-based-ui) + +### Database +- **Schema Overview:** [DATABASE.md#schema-overview](DATABASE.md#schema-overview) +- **Notes Table:** [DATABASE.md#notes-table](DATABASE.md#notes-table) +- **Branches Table:** [DATABASE.md#branches-table](DATABASE.md#branches-table) +- **Migrations:** [DATABASE.md#database-migrations](DATABASE.md#database-migrations) + +### Synchronization +- **Sync Protocol:** [SYNCHRONIZATION.md#sync-protocol](SYNCHRONIZATION.md#sync-protocol) +- **Conflict Resolution:** [SYNCHRONIZATION.md#conflict-resolution](SYNCHRONIZATION.md#conflict-resolution) +- **Entity Changes:** [SYNCHRONIZATION.md#entity-changes](SYNCHRONIZATION.md#entity-changes) + +### Scripting +- **Frontend Scripts:** [SCRIPTING.md#frontend-scripts](SCRIPTING.md#frontend-scripts) +- **Backend Scripts:** [SCRIPTING.md#backend-scripts](SCRIPTING.md#backend-scripts) +- **Script Examples:** [SCRIPTING.md#script-examples](SCRIPTING.md#script-examples) +- **API Reference:** [SCRIPTING.md#script-api](SCRIPTING.md#script-api) + +### Security +- **Authentication:** [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) +- **Encryption:** [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) +- **Input Sanitization:** [SECURITY_ARCHITECTURE.md#input-sanitization](SECURITY_ARCHITECTURE.md#input-sanitization) +- **Best Practices:** [SECURITY_ARCHITECTURE.md#security-best-practices](SECURITY_ARCHITECTURE.md#security-best-practices) + +## 📚 Learning Paths + +### New to Trilium Development +1. Read [ARCHITECTURE.md](ARCHITECTURE.md) - System overview +2. Setup environment: [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) +3. Explore [DATABASE.md](DATABASE.md) - Understand data model +4. Check [Developer Guide](Developer%20Guide/Developer%20Guide/) + +### Want to Create Scripts +1. Read [SCRIPTING.md](SCRIPTING.md) - Complete guide +2. Check [Script API](Script%20API/) - API reference +3. Review examples: [SCRIPTING.md#script-examples](SCRIPTING.md#script-examples) +4. Explore [Advanced Showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) + +### Setting Up Sync +1. Understand protocol: [SYNCHRONIZATION.md](SYNCHRONIZATION.md) +2. Configure server: [SYNCHRONIZATION.md#sync-server-configuration](SYNCHRONIZATION.md#sync-server-configuration) +3. Setup clients: [SYNCHRONIZATION.md#client-setup](SYNCHRONIZATION.md#client-setup) +4. Troubleshoot: [SYNCHRONIZATION.md#troubleshooting](SYNCHRONIZATION.md#troubleshooting) + +### Security Review +1. Read threat model: [SECURITY_ARCHITECTURE.md#threat-model](SECURITY_ARCHITECTURE.md#threat-model) +2. Review authentication: [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) +3. Check encryption: [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) +4. Verify best practices: [SECURITY_ARCHITECTURE.md#security-best-practices](SECURITY_ARCHITECTURE.md#security-best-practices) + +## 🗺️ Documentation Map + +``` +docs/ +├── TECHNICAL_DOCUMENTATION.md ← START HERE (Index) +│ +├── Core Technical Docs +│ ├── ARCHITECTURE.md (System design) +│ ├── DATABASE.md (Data layer) +│ ├── SYNCHRONIZATION.md (Sync system) +│ ├── SCRIPTING.md (User scripting) +│ └── SECURITY_ARCHITECTURE.md (Security) +│ +├── Developer Guide/ +│ └── Developer Guide/ (Development setup) +│ +├── User Guide/ +│ └── User Guide/ (End-user docs) +│ +└── Script API/ (API reference) +``` + +## 💡 Tips for Reading Documentation + +1. **Start with the index:** [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) provides an overview +2. **Use search:** Press Ctrl+F / Cmd+F to find specific topics +3. **Follow links:** Documents are cross-referenced for easy navigation +4. **Code examples:** Most docs include practical code examples +5. **See Also sections:** Check bottom of each doc for related resources + +## 🔗 External Resources + +- **Website:** https://triliumnotes.org +- **Online Docs:** https://docs.triliumnotes.org +- **GitHub:** https://github.com/TriliumNext/Trilium +- **Discussions:** https://github.com/TriliumNext/Trilium/discussions +- **Matrix Chat:** https://matrix.to/#/#triliumnext:matrix.org + +## 🤝 Contributing to Documentation + +Found an error or want to improve the docs? See: +- [Contributing Guide](../README.md#-contribute) +- [Documentation Standards](TECHNICAL_DOCUMENTATION.md#documentation-conventions) + +--- + +**Version:** 0.99.3 +**Last Updated:** November 2025 +**Maintained by:** TriliumNext Team From cf406383c306d83bcba5ace3c7e7181bade52e20 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:01:44 +0000 Subject: [PATCH 14/54] Standardize spelling to American English (behavior, categorizing) Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/User Guide/User Guide/Advanced Usage/Attributes.md | 4 ++-- .../Basic Concepts and Features/UI Elements/Ribbon.md | 2 +- docs/User Guide/User Guide/Collections.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes.md b/docs/User Guide/User Guide/Advanced Usage/Attributes.md index 1cfe040d8..89d397e33 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes.md @@ -3,14 +3,14 @@ In Trilium, attributes are key-value pairs assigned to notes, providing additional metadata or functionality. There are two primary types of attributes: -1. Labels can be used for a variety of purposes, such as storing metadata or configuring the behaviour of notes. Labels are also searchable, enhancing note retrieval. +1. Labels can be used for a variety of purposes, such as storing metadata or configuring the behavior of notes. Labels are also searchable, enhancing note retrieval. For more information, including predefined labels, see Labels. 2. Relations define connections between notes, similar to links. These can be used for metadata and scripting purposes. For more information, including a list of predefined relations, see Relations. -These attributes play a crucial role in organizing, categorising, and enhancing the functionality of notes. +These attributes play a crucial role in organizing, categorizing, and enhancing the functionality of notes. ## Viewing the list of attributes diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md index 8fd7e37d2..5cbfc0ff3 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.md @@ -20,7 +20,7 @@ If you are using the _Fixed_ formatting toolbar, all the formatting buttons for * As a more advanced use, it's possible to change the note type in order to modify the [source code](../../Advanced%20Usage/Note%20source.md) of a note. * _**Protect the note**_ toggles whether the current note is encrypted and accessible only by entering the protected session. See [Protected Notes](../Notes/Protected%20Notes.md) for more information. * _**Editable**_ changes whether the current note: - * Enters [read-only mode](../Notes/Read-Only%20Notes.md) automatically if the note is too big (default behaviour). + * Enters [read-only mode](../Notes/Read-Only%20Notes.md) automatically if the note is too big (default behavior). * Is always in read-only mode (however it can still be edited temporarily). * Is always editable, regardless of its size. * _**Bookmark**_ toggles the display of the current note into the [Launch Bar](Launch%20Bar.md) for easy access. See [Bookmarks](../Navigation/Bookmarks.md) for more information. diff --git a/docs/User Guide/User Guide/Collections.md b/docs/User Guide/User Guide/Collections.md index b80bc49d8..3f79ca071 100644 --- a/docs/User Guide/User Guide/Collections.md +++ b/docs/User Guide/User Guide/Collections.md @@ -28,7 +28,7 @@ To change the configuration of a collection or even switch to a different collec ## Archived notes -By default, [archived notes](Basic%20Concepts%20and%20Features/Notes/Archived%20Notes.md) will not be shown in collections. This behaviour can be changed by going to _Collection Properties_ in the Ribbon and checking _Show archived notes_. +By default, [archived notes](Basic%20Concepts%20and%20Features/Notes/Archived%20Notes.md) will not be shown in collections. This behavior can be changed by going to _Collection Properties_ in the Ribbon and checking _Show archived notes_. Archived notes will be generally indicated by being greyed out as opposed to the normal ones. From a62c9a1a2f2c70bcfd95aa58f888ea7faec29a01 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:03:29 +0000 Subject: [PATCH 15/54] Fix broken wiki-style link in Scripting.md Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/User Guide/User Guide/Scripting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/User Guide/User Guide/Scripting.md b/docs/User Guide/User Guide/Scripting.md index 16146aef2..e22bf49a5 100644 --- a/docs/User Guide/User Guide/Scripting.md +++ b/docs/User Guide/User Guide/Scripting.md @@ -8,7 +8,7 @@ To go further I must explain basic architecture of Trilium - in its essence it i * frontend running in the browser (using HTML, CSS, JavaScript) - this is mainly used to interact with the user, display notes etc. * backend running JavaScript code in node.js runtime - this is responsible for e.g. storing notes, encrypting them etc. -So we have frontend and backend, each with their own set of responsibilities, but their common feature is that they both run JavaScript code. Add to this the fact, that we're able to create JavaScript \[\[code notes\]\] and we're onto something. +So we have frontend and backend, each with their own set of responsibilities, but their common feature is that they both run JavaScript code. Add to this the fact, that we're able to create JavaScript code notes and we're onto something. ## Use cases From ff4cd7eae5d5f62ff65f767cd71d73dc21f6d502 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:04:34 +0000 Subject: [PATCH 16/54] =?UTF-8?q?Fix=20grammar:=20'type=20of=20notes'=20?= =?UTF-8?q?=E2=86=92=20'type=20of=20note'=20in=20Collections.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/User Guide/User Guide/Collections.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/User Guide/User Guide/Collections.md b/docs/User Guide/User Guide/Collections.md index 3f79ca071..3a9fc9728 100644 --- a/docs/User Guide/User Guide/Collections.md +++ b/docs/User Guide/User Guide/Collections.md @@ -1,5 +1,5 @@ # Collections -Collections are a unique type of notes that don't have content, but instead display their child notes in various presentation methods. +Collections are a unique type of note that don't have content, but instead display their child notes in various presentation methods. ## Main collections From 82e5de22619ca7a933fc81242f0205de0f646453 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 2 Nov 2025 22:06:14 +0000 Subject: [PATCH 17/54] Add input validation for prefix to address security concerns Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- apps/server/src/routes/api/branches.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/apps/server/src/routes/api/branches.ts b/apps/server/src/routes/api/branches.ts index 977fd34a7..73ce03a7a 100644 --- a/apps/server/src/routes/api/branches.ts +++ b/apps/server/src/routes/api/branches.ts @@ -277,6 +277,11 @@ function setPrefixBatch(req: Request) { throw new ValidationError("branchIds must be an array"); } + // Validate that prefix is a string or null/undefined to prevent prototype pollution + if (prefix !== null && prefix !== undefined && typeof prefix !== 'string') { + throw new ValidationError("prefix must be a string or null"); + } + const normalizedPrefix = utils.isEmptyOrWhitespace(prefix) ? null : prefix; let updatedCount = 0; From 50a69248a76f0ffc53a1ae0ae621430c59ebe2e5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 3 Nov 2025 08:01:56 +0000 Subject: [PATCH 18/54] Fix keyboard shortcut support and address code review feedback - Add editBranchPrefixCommand in note_tree.ts to support F2 keyboard shortcut with multi-selection - Extract CSS to separate branch_prefix.css file - Remove hard-coded color, use CSS class instead - Fix translation key usage to keep t() calls visible in IDE - Remove all inline styles Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- apps/client/src/widgets/dialogs/branch_prefix.css | 13 +++++++++++++ apps/client/src/widgets/dialogs/branch_prefix.tsx | 10 +++++----- apps/client/src/widgets/note_tree.ts | 14 ++++++++++++++ 3 files changed, 32 insertions(+), 5 deletions(-) create mode 100644 apps/client/src/widgets/dialogs/branch_prefix.css diff --git a/apps/client/src/widgets/dialogs/branch_prefix.css b/apps/client/src/widgets/dialogs/branch_prefix.css new file mode 100644 index 000000000..3470f1018 --- /dev/null +++ b/apps/client/src/widgets/dialogs/branch_prefix.css @@ -0,0 +1,13 @@ +.branch-prefix-dialog .branch-prefix-notes-list { + margin-top: 10px; +} + +.branch-prefix-dialog .branch-prefix-notes-list ul { + max-height: 200px; + overflow: auto; + margin-top: 5px; +} + +.branch-prefix-dialog .branch-prefix-current { + opacity: 0.6; +} diff --git a/apps/client/src/widgets/dialogs/branch_prefix.tsx b/apps/client/src/widgets/dialogs/branch_prefix.tsx index 26f6f0dff..e715c894f 100644 --- a/apps/client/src/widgets/dialogs/branch_prefix.tsx +++ b/apps/client/src/widgets/dialogs/branch_prefix.tsx @@ -11,6 +11,7 @@ import FormGroup from "../react/FormGroup.js"; import { useTriliumEvent } from "../react/hooks.jsx"; import FBranch from "../../entities/fbranch.js"; import type { ContextMenuCommandData } from "../../components/app_context.js"; +import "./branch_prefix.css"; // Virtual branches (e.g., from search results) start with this prefix const VIRTUAL_BRANCH_PREFIX = "virt-"; @@ -84,12 +85,11 @@ export default function BranchPrefixDialog() { } const isSingleBranch = branches.length === 1; - const titleKey = isSingleBranch ? "branch_prefix.edit_branch_prefix" : "branch_prefix.edit_branch_prefix_multiple"; return ( branchInput.current?.focus()} onHidden={() => setShown(false)} @@ -108,14 +108,14 @@ export default function BranchPrefixDialog() {
{!isSingleBranch && ( -
+
{t("branch_prefix.affected_branches", { count: branches.length })} -
    +
      {branches.map((branch) => { const note = branch.getNoteFromCache(); return (
    • - {branch.prefix && {branch.prefix} - } + {branch.prefix && {branch.prefix} - } {note.title}
    • ); diff --git a/apps/client/src/widgets/note_tree.ts b/apps/client/src/widgets/note_tree.ts index f1c2ca736..cb2120687 100644 --- a/apps/client/src/widgets/note_tree.ts +++ b/apps/client/src/widgets/note_tree.ts @@ -1591,6 +1591,20 @@ export default class NoteTreeWidget extends NoteContextAwareWidget { this.clearSelectedNodes(); } + async editBranchPrefixCommand({ node }: CommandListenerData<"editBranchPrefix">) { + const branchIds = this.getSelectedOrActiveBranchIds(node).filter((branchId) => !branchId.startsWith("virt-")); + + if (!branchIds.length) { + return; + } + + // Trigger the event with the selected branch IDs + appContext.triggerEvent("editBranchPrefix", { + selectedOrActiveBranchIds: branchIds, + node: node + }); + } + canBeMovedUpOrDown(node: Fancytree.FancytreeNode) { if (node.data.noteId === "root") { return false; From aa7ecaf6842c40416999c0a7c85d46c9bb43f21a Mon Sep 17 00:00:00 2001 From: contributor Date: Mon, 3 Nov 2025 15:13:06 +0200 Subject: [PATCH 19/54] edited notes: space instead of comma for flexible styling --- apps/client/src/widgets/ribbon/EditedNotesTab.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/apps/client/src/widgets/ribbon/EditedNotesTab.tsx b/apps/client/src/widgets/ribbon/EditedNotesTab.tsx index 5bab1c816..4bdae4126 100644 --- a/apps/client/src/widgets/ribbon/EditedNotesTab.tsx +++ b/apps/client/src/widgets/ribbon/EditedNotesTab.tsx @@ -13,8 +13,8 @@ export default function EditedNotesTab({ note }: TabContext) { useEffect(() => { if (!note) return; server.get(`edited-notes/${note.getLabelValue("dateNote")}`).then(async editedNotes => { - editedNotes = editedNotes.filter((n) => n.noteId !== note.noteId); - const noteIds = editedNotes.flatMap((n) => n.noteId); + editedNotes = editedNotes.filter((n) => n.noteId !== note.noteId); + const noteIds = editedNotes.flatMap((n) => n.noteId); await froca.getNotes(noteIds, true); // preload all at once setEditedNotes(editedNotes); }); @@ -41,11 +41,11 @@ export default function EditedNotesTab({ note }: TabContext) { )} ) - }))} + }), " ")}
) : (
{t("edited_notes.no_edited_notes_found")}
)}
- ) + ) } From 5a7349121a436e452435c0a9df3d3aa5b70bf127 Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Tue, 4 Nov 2025 09:24:18 +0800 Subject: [PATCH 20/54] fix: incorrect options description --- apps/client/src/widgets/type_widgets/options/text_notes.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/client/src/widgets/type_widgets/options/text_notes.tsx b/apps/client/src/widgets/type_widgets/options/text_notes.tsx index 4e2475922..0dd102145 100644 --- a/apps/client/src/widgets/type_widgets/options/text_notes.tsx +++ b/apps/client/src/widgets/type_widgets/options/text_notes.tsx @@ -72,8 +72,8 @@ function EditorFeatures() { return ( - - + + ); } From caf88473f64b9b91c8c62c2213e7abef055e4148 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:38:35 +0000 Subject: [PATCH 21/54] chore(deps): update dependency sax to v1.4.2 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 26 ++++++++++++-------------- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index d6d634be2..360890656 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -115,7 +115,7 @@ "safe-compare": "1.1.4", "sanitize-filename": "1.6.3", "sanitize-html": "2.17.0", - "sax": "1.4.1", + "sax": "1.4.2", "serve-favicon": "2.5.1", "stream-throttle": "0.1.3", "strip-bom": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c93f61d..8ba30f57b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -745,8 +745,8 @@ importers: specifier: 2.17.0 version: 2.17.0 sax: - specifier: 1.4.1 - version: 1.4.1 + specifier: 1.4.2 + version: 1.4.2 serve-favicon: specifier: 2.5.1 version: 2.5.1 @@ -12879,8 +12879,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.1: - resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.2: + resolution: {integrity: sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==} saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} @@ -15684,8 +15684,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15940,8 +15938,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -16438,6 +16434,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -17720,7 +17718,7 @@ snapshots: '@file-type/xml@0.4.3': dependencies: - sax: 1.4.1 + sax: 1.4.2 strtok3: 10.2.2 '@floating-ui/core@1.6.9': @@ -27378,7 +27376,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.1 + sax: 1.4.2 optional: true negotiator@0.6.3: {} @@ -29817,7 +29815,7 @@ snapshots: '@parcel/watcher': 2.5.1 optional: true - sax@1.4.1: {} + sax@1.4.2: {} saxes@5.0.1: dependencies: @@ -30813,7 +30811,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.4.1 + sax: 1.4.2 swagger-jsdoc@6.2.8(openapi-types@12.1.3): dependencies: @@ -32147,12 +32145,12 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.4.1 + sax: 1.4.2 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.1 + sax: 1.4.2 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} From 25d9695db03a8b14fdd86ea778f31f438d3ece66 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:40:28 +0000 Subject: [PATCH 22/54] fix(deps): update dependency eslint-linter-browserify to v9.39.1 --- packages/codemirror/package.json | 2 +- pnpm-lock.yaml | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json index dfb44d686..7bdc83796 100644 --- a/packages/codemirror/package.json +++ b/packages/codemirror/package.json @@ -50,6 +50,6 @@ "codemirror-lang-elixir": "4.0.0", "codemirror-lang-hcl": "0.1.0", "codemirror-lang-mermaid": "0.5.0", - "eslint-linter-browserify": "9.39.0" + "eslint-linter-browserify": "9.39.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c93f61d..a8d3a6ab1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1319,8 +1319,8 @@ importers: specifier: 0.5.0 version: 0.5.0 eslint-linter-browserify: - specifier: 9.39.0 - version: 9.39.0 + specifier: 9.39.1 + version: 9.39.1 packages/commons: {} @@ -8013,8 +8013,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-linter-browserify@9.39.0: - resolution: {integrity: sha512-SmFk1DwXcC+p2IjHAouYjjJcAKAiSMlMrJgc8w2s1W3D00FM2sC6SHeCd8Axy1T5sB8oMVMt23GuCun8/UFo1Q==} + eslint-linter-browserify@9.39.1: + resolution: {integrity: sha512-XdoocZkDVe9svpVe1V9q0cW3pufacQ0z7Unhu4E4AaeHHxF4AZa5+HRHYMKO30NUKEQfDv+ITibXUNi1C6QGbQ==} eslint-plugin-ckeditor5-rules@12.2.0: resolution: {integrity: sha512-WgQP9aZo1N7bIDwwf2Wsnd0RpL20MAVxEehhYoFWy7HAMAnV3IliKuU3dsFA35O8cK4q7eKz7FiObwSRAfttQA==} @@ -15684,8 +15684,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15940,8 +15938,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -16438,6 +16434,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -24065,7 +24063,7 @@ snapshots: dependencies: eslint: 9.39.0(jiti@2.6.1) - eslint-linter-browserify@9.39.0: {} + eslint-linter-browserify@9.39.1: {} eslint-plugin-ckeditor5-rules@12.2.0: dependencies: From 3b531544a3663fe4699fbdb2b879db5524a514b3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:41:09 +0000 Subject: [PATCH 23/54] fix(deps): update dependency react-i18next to v16.2.4 --- apps/client/package.json | 2 +- apps/website/package.json | 2 +- pnpm-lock.yaml | 16 +++++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/apps/client/package.json b/apps/client/package.json index c080281ec..28a7446b3 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -59,7 +59,7 @@ "normalize.css": "8.0.1", "panzoom": "9.4.3", "preact": "10.27.2", - "react-i18next": "16.2.3", + "react-i18next": "16.2.4", "reveal.js": "5.2.1", "svg-pan-zoom": "3.6.2", "tabulator-tables": "6.3.1", diff --git a/apps/website/package.json b/apps/website/package.json index 51a78d27c..f9500c7f4 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -14,7 +14,7 @@ "preact": "10.27.2", "preact-iso": "2.11.0", "preact-render-to-string": "6.6.3", - "react-i18next": "16.2.3" + "react-i18next": "16.2.4" }, "devDependencies": { "@preact/preset-vite": "2.10.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c93f61d..1a6afe0ce 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -284,8 +284,8 @@ importers: specifier: 10.27.2 version: 10.27.2 react-i18next: - specifier: 16.2.3 - version: 16.2.3(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + specifier: 16.2.4 + version: 16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) reveal.js: specifier: 5.2.1 version: 5.2.1 @@ -814,8 +814,8 @@ importers: specifier: 6.6.3 version: 6.6.3(preact@10.27.2) react-i18next: - specifier: 16.2.3 - version: 16.2.3(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) + specifier: 16.2.4 + version: 16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3) devDependencies: '@preact/preset-vite': specifier: 2.10.2 @@ -12320,8 +12320,8 @@ packages: peerDependencies: react: ^19.2.0 - react-i18next@16.2.3: - resolution: {integrity: sha512-O0t2zvmIz7nHWKNfIL+O/NTIbpTaOPY0vZov779hegbep3IZ+xcqkeVPKWBSXwzdkiv77q8zmq9toKIUys1x3A==} + react-i18next@16.2.4: + resolution: {integrity: sha512-pvbcPQ+YuQQoRkKBA4VCU9aO8dOgP/vdKEizIYXcAk3+AmI8yQKSJaCzxQQu4Kgg2zWZm3ax9KqHv8ItUlRY0A==} peerDependencies: i18next: '>= 25.5.2' react: '>= 16.8.0' @@ -16438,6 +16438,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -29110,7 +29112,7 @@ snapshots: react: 19.2.0 scheduler: 0.27.0 - react-i18next@16.2.3(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): + react-i18next@16.2.4(i18next@25.6.0(typescript@5.9.3))(react-dom@19.2.0(react@19.2.0))(react@19.2.0)(typescript@5.9.3): dependencies: '@babel/runtime': 7.28.4 html-parse-stringify: 3.0.1 From 4c90319c9e248a5c5d8300ba5f3244d06a99c305 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:41:49 +0000 Subject: [PATCH 24/54] fix(deps): update eslint monorepo to v9.39.1 --- _regroup/package.json | 2 +- apps/client/package.json | 2 +- apps/website/package.json | 2 +- package.json | 2 +- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- packages/share-theme/package.json | 2 +- pnpm-lock.yaml | 206 +++++++++--------- 11 files changed, 113 insertions(+), 113 deletions(-) diff --git a/_regroup/package.json b/_regroup/package.json index fd13c78f1..ce0e70d45 100644 --- a/_regroup/package.json +++ b/_regroup/package.json @@ -41,7 +41,7 @@ "@types/node": "24.10.0", "@types/yargs": "17.0.34", "@vitest/coverage-v8": "3.2.4", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-plugin-simple-import-sort": "12.1.1", "esm": "3.2.25", "jsdoc": "4.0.5", diff --git a/apps/client/package.json b/apps/client/package.json index c080281ec..7bece4697 100644 --- a/apps/client/package.json +++ b/apps/client/package.json @@ -15,7 +15,7 @@ "circular-deps": "dpdm -T src/**/*.ts --tree=false --warning=false --skip-dynamic-imports=circular" }, "dependencies": { - "@eslint/js": "9.39.0", + "@eslint/js": "9.39.1", "@excalidraw/excalidraw": "0.18.0", "@fullcalendar/core": "6.1.19", "@fullcalendar/daygrid": "6.1.19", diff --git a/apps/website/package.json b/apps/website/package.json index 51a78d27c..ce3042b13 100644 --- a/apps/website/package.json +++ b/apps/website/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@preact/preset-vite": "2.10.2", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-preact": "2.0.0", "typescript": "5.9.3", "user-agent-data-types": "0.4.2", diff --git a/package.json b/package.json index e27962d2f..0bb66772d 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "cross-env": "10.1.0", "dpdm": "3.14.0", "esbuild": "0.25.12", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-prettier": "10.1.8", "eslint-plugin-playwright": "2.3.0", "eslint-plugin-react-hooks": "7.0.1", diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index bc32ffc98..5b2d4d01c 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -29,7 +29,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.6", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 2835113b1..635e85d9e 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -30,7 +30,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.6", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index cfbef699b..756ae241f 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -32,7 +32,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.6", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index 97573e4aa..bb69ab804 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -33,7 +33,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.6", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index c924a95b6..f0123cca6 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -32,7 +32,7 @@ "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", - "eslint": "9.39.0", + "eslint": "9.39.1", "eslint-config-ckeditor5": ">=9.1.0", "http-server": "14.1.1", "lint-staged": "16.2.6", diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index 1fd56501e..0919ebf10 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -36,7 +36,7 @@ "@typescript-eslint/parser": "8.46.2", "dotenv": "17.2.3", "esbuild": "0.25.12", - "eslint": "9.39.0", + "eslint": "9.39.1", "highlight.js": "11.11.1", "typescript": "5.9.3" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c93f61d..4f12ed67b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -74,17 +74,17 @@ importers: specifier: 0.25.12 version: 0.25.12 eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-prettier: specifier: 10.1.8 - version: 10.1.8(eslint@9.39.0(jiti@2.6.1)) + version: 10.1.8(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-playwright: specifier: 2.3.0 - version: 2.3.0(eslint@9.39.0(jiti@2.6.1)) + version: 2.3.0(eslint@9.39.1(jiti@2.6.1)) eslint-plugin-react-hooks: specifier: 7.0.1 - version: 7.0.1(eslint@9.39.0(jiti@2.6.1)) + version: 7.0.1(eslint@9.39.1(jiti@2.6.1)) happy-dom: specifier: ~20.0.0 version: 20.0.10 @@ -111,7 +111,7 @@ importers: version: 5.9.3 typescript-eslint: specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) upath: specifier: 2.0.1 version: 2.0.1 @@ -152,8 +152,8 @@ importers: apps/client: dependencies: '@eslint/js': - specifier: 9.39.0 - version: 9.39.0 + specifier: 9.39.1 + version: 9.39.1 '@excalidraw/excalidraw': specifier: 0.18.0 version: 0.18.0(@types/react-dom@19.1.6(@types/react@19.1.7))(@types/react@19.1.7)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -821,11 +821,11 @@ importers: specifier: 2.10.2 version: 2.10.2(@babel/core@7.28.0)(preact@10.27.2)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-preact: specifier: 2.0.0 - version: 2.0.0(eslint@9.39.0(jiti@2.6.1)) + version: 2.0.0(eslint@9.39.1(jiti@2.6.1)) typescript: specifier: 5.9.3 version: 5.9.3 @@ -880,10 +880,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -894,11 +894,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -940,10 +940,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -954,11 +954,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1000,10 +1000,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1014,11 +1014,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1067,10 +1067,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1081,11 +1081,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1134,10 +1134,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1148,11 +1148,11 @@ importers: specifier: 47.1.0 version: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) eslint-config-ckeditor5: specifier: '>=9.1.0' - version: 12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) http-server: specifier: 14.1.1 version: 14.1.1 @@ -1371,10 +1371,10 @@ importers: version: link:../ckeditor5 '@typescript-eslint/eslint-plugin': specifier: 8.46.2 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': specifier: 8.46.2 - version: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) dotenv: specifier: 17.2.3 version: 17.2.3 @@ -1382,8 +1382,8 @@ importers: specifier: 0.25.12 version: 0.25.12 eslint: - specifier: 9.39.0 - version: 9.39.0(jiti@2.6.1) + specifier: 9.39.1 + version: 9.39.1(jiti@2.6.1) highlight.js: specifier: 11.11.1 version: 11.11.1 @@ -2831,8 +2831,8 @@ packages: resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.39.0': - resolution: {integrity: sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==} + '@eslint/js@9.39.1': + resolution: {integrity: sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/markdown@6.6.0': @@ -8074,8 +8074,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.39.0: - resolution: {integrity: sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==} + eslint@9.39.1: + resolution: {integrity: sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -15328,11 +15328,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.28.4(@babel/core@7.28.0)(eslint@9.39.0(jiti@2.6.1))': + '@babel/eslint-parser@7.28.4(@babel/core@7.28.0)(eslint@9.39.1(jiti@2.6.1))': dependencies: '@babel/core': 7.28.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 2.1.0 semver: 6.3.1 @@ -15747,8 +15747,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -16438,6 +16436,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -17576,9 +17576,9 @@ snapshots: '@esbuild/win32-x64@0.25.12': optional: true - '@eslint-community/eslint-utils@4.9.0(eslint@9.39.0(jiti@2.6.1))': + '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))': dependencies: - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -17621,7 +17621,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.39.0': {} + '@eslint/js@9.39.1': {} '@eslint/markdown@6.6.0': dependencies: @@ -20170,10 +20170,10 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@stylistic/eslint-plugin@4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@stylistic/eslint-plugin@4.4.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 estraverse: 5.3.0 @@ -20869,15 +20869,15 @@ snapshots: '@types/node': 24.10.0 optional: true - '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.46.2 - '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.2 - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 @@ -20886,14 +20886,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) '@typescript-eslint/visitor-keys': 8.46.2 debug: 4.4.3(supports-color@6.0.0) - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -20916,13 +20916,13 @@ snapshots: dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3(supports-color@6.0.0) - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) typescript: 5.9.3 transitivePeerDependencies: @@ -20946,13 +20946,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/types': 8.46.2 '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color @@ -24032,38 +24032,38 @@ snapshots: optionalDependencies: source-map: 0.6.1 - eslint-config-ckeditor5@12.2.0(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + eslint-config-ckeditor5@12.2.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@eslint/js': 9.39.0 + '@eslint/js': 9.39.1 '@eslint/markdown': 6.6.0 - '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.0(jiti@2.6.1) + '@stylistic/eslint-plugin': 4.4.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) eslint-plugin-ckeditor5-rules: 12.2.0 - eslint-plugin-mocha: 11.2.0(eslint@9.39.0(jiti@2.6.1)) + eslint-plugin-mocha: 11.2.0(eslint@9.39.1(jiti@2.6.1)) globals: 16.5.0 typescript: 5.9.3 - typescript-eslint: 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + typescript-eslint: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color - eslint-config-preact@2.0.0(eslint@9.39.0(jiti@2.6.1)): + eslint-config-preact@2.0.0(eslint@9.39.1(jiti@2.6.1)): dependencies: '@babel/core': 7.28.0 - '@babel/eslint-parser': 7.28.4(@babel/core@7.28.0)(eslint@9.39.0(jiti@2.6.1)) + '@babel/eslint-parser': 7.28.4(@babel/core@7.28.0)(eslint@9.39.1(jiti@2.6.1)) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.0) '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.0) - '@eslint/js': 9.39.0 - eslint: 9.39.0(jiti@2.6.1) - eslint-plugin-compat: 6.0.2(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-react: 7.37.5(eslint@9.39.0(jiti@2.6.1)) - eslint-plugin-react-hooks: 5.2.0(eslint@9.39.0(jiti@2.6.1)) + '@eslint/js': 9.39.1 + eslint: 9.39.1(jiti@2.6.1) + eslint-plugin-compat: 6.0.2(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react: 7.37.5(eslint@9.39.1(jiti@2.6.1)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.39.1(jiti@2.6.1)) globals: 16.5.0 transitivePeerDependencies: - supports-color - eslint-config-prettier@10.1.8(eslint@9.39.0(jiti@2.6.1)): + eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) eslint-linter-browserify@9.39.0: {} @@ -24077,45 +24077,45 @@ snapshots: validate-npm-package-name: 6.0.2 yaml: 2.8.1 - eslint-plugin-compat@6.0.2(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-compat@6.0.2(eslint@9.39.1(jiti@2.6.1)): dependencies: '@mdn/browser-compat-data': 5.7.6 ast-metadata-inferer: 0.8.1 browserslist: 4.26.2 caniuse-lite: 1.0.30001743 - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) find-up: 5.0.0 globals: 15.15.0 lodash.memoize: 4.1.2 semver: 7.7.2 - eslint-plugin-mocha@11.2.0(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-mocha@11.2.0(eslint@9.39.1(jiti@2.6.1)): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) - eslint: 9.39.0(jiti@2.6.1) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + eslint: 9.39.1(jiti@2.6.1) globals: 15.15.0 - eslint-plugin-playwright@2.3.0(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-playwright@2.3.0(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) globals: 16.5.0 - eslint-plugin-react-hooks@5.2.0(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-react-hooks@5.2.0(eslint@9.39.1(jiti@2.6.1)): dependencies: - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) - eslint-plugin-react-hooks@7.0.1(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-react-hooks@7.0.1(eslint@9.39.1(jiti@2.6.1)): dependencies: '@babel/core': 7.28.0 '@babel/parser': 7.28.4 - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) hermes-parser: 0.25.1 zod: 4.1.12 zod-validation-error: 3.5.3(zod@4.1.12) transitivePeerDependencies: - supports-color - eslint-plugin-react@7.37.5(eslint@9.39.0(jiti@2.6.1)): + eslint-plugin-react@7.37.5(eslint@9.39.1(jiti@2.6.1)): dependencies: array-includes: 3.1.9 array.prototype.findlast: 1.2.5 @@ -24123,7 +24123,7 @@ snapshots: array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 es-iterator-helpers: 1.2.1 - eslint: 9.39.0(jiti@2.6.1) + eslint: 9.39.1(jiti@2.6.1) estraverse: 5.3.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 @@ -24153,15 +24153,15 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.39.0(jiti@2.6.1): + eslint@9.39.1(jiti@2.6.1): dependencies: - '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.0(jiti@2.6.1)) + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.1 '@eslint/config-helpers': 0.4.2 '@eslint/core': 0.17.0 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.39.0 + '@eslint/js': 9.39.1 '@eslint/plugin-kit': 0.4.1 '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 @@ -31299,13 +31299,13 @@ snapshots: typescript: 5.9.3 yaml: 2.8.1 - typescript-eslint@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3): + typescript-eslint@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/typescript-estree': 8.46.2(typescript@5.9.3) - '@typescript-eslint/utils': 8.46.2(eslint@9.39.0(jiti@2.6.1))(typescript@5.9.3) - eslint: 9.39.0(jiti@2.6.1) + '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color From f8b8edd5aa97937ff21b35276477e57b4fa401c3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 01:42:30 +0000 Subject: [PATCH 25/54] chore(deps): update dependency openai to v6.8.0 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 16 +++++++--------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index d6d634be2..e18105c4d 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -110,7 +110,7 @@ "multer": "2.0.2", "normalize-strings": "1.1.1", "ollama": "0.6.2", - "openai": "6.7.0", + "openai": "6.8.0", "rand-token": "1.0.1", "safe-compare": "1.1.4", "sanitize-filename": "1.6.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 98c93f61d..43dce8be7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -730,8 +730,8 @@ importers: specifier: 0.6.2 version: 0.6.2 openai: - specifier: 6.7.0 - version: 6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12) + specifier: 6.8.0 + version: 6.8.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12) rand-token: specifier: 1.0.1 version: 1.0.1 @@ -10928,8 +10928,8 @@ packages: resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} engines: {node: '>=18'} - openai@6.7.0: - resolution: {integrity: sha512-mgSQXa3O/UXTbA8qFzoa7aydbXBJR5dbLQXCRapAOtoNT+v69sLdKMZzgiakpqhclRnhPggPAXoniVGn2kMY2A==} + openai@6.8.0: + resolution: {integrity: sha512-GQUpzb9FoNkh1wqJuDIQ8e/Sq8dW+T3GakG6wJTXBE8Lufx1GaUcgZd087vhm8f/MiOzsTEkfRamYxzJ/jOoiw==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -15684,8 +15684,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15940,8 +15938,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -16438,6 +16434,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-restricted-editing@47.1.0': dependencies: @@ -27733,7 +27731,7 @@ snapshots: is-inside-container: 1.0.0 wsl-utils: 0.1.0 - openai@6.7.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): + openai@6.8.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5))(zod@4.1.12): optionalDependencies: ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@6.0.5) zod: 4.1.12 From 1fa3420abe9021e1a12fdfe0ff3b67b39c0e38d6 Mon Sep 17 00:00:00 2001 From: "Francis C." Date: Mon, 3 Nov 2025 02:12:04 +0100 Subject: [PATCH 26/54] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (387 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/zh_Hant/ --- apps/server/src/assets/translations/tw/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/tw/server.json b/apps/server/src/assets/translations/tw/server.json index 8d29cc64f..33c9faa8c 100644 --- a/apps/server/src/assets/translations/tw/server.json +++ b/apps/server/src/assets/translations/tw/server.json @@ -417,7 +417,7 @@ "end-time": "結束時間", "geolocation": "地理位置", "built-in-templates": "內建模版", - "board": "儀表板", + "board": "看板", "status": "狀態", "board_note_first": "第一個筆記", "board_note_second": "第二個筆記", From f89c14b35ad5f353c7532eb5ba7b64b4c0244321 Mon Sep 17 00:00:00 2001 From: Giovi Date: Mon, 3 Nov 2025 13:11:49 +0100 Subject: [PATCH 27/54] Translated using Weblate (Italian) Currently translated at 100.0% (1617 of 1617 strings) Translation: Trilium Notes/Client Translate-URL: https://hosted.weblate.org/projects/trilium/client/it/ --- apps/client/src/translations/it/translation.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/client/src/translations/it/translation.json b/apps/client/src/translations/it/translation.json index 5105b13f3..52c029ffb 100644 --- a/apps/client/src/translations/it/translation.json +++ b/apps/client/src/translations/it/translation.json @@ -109,7 +109,8 @@ "export_type_single": "Solo questa nota, senza le sottostanti", "format_opml": "OPML - formato per scambio informazioni outline. Formattazione, immagini e files non sono inclusi.", "opml_version_1": "OPML v.1.0 - solo testo semplice", - "opml_version_2": "OPML v2.0 - supporta anche HTML" + "opml_version_2": "OPML v2.0 - supporta anche HTML", + "share-format": "HTML per la pubblicazione sul web - utilizza lo stesso tema utilizzato per le note condivise, ma può essere pubblicato come sito web statico." }, "password_not_set": { "body1": "Le note protette sono crittografate utilizzando una password utente, ma la password non è stata ancora impostata.", From 33c64b604e354173dcec84eaf8b2a4c90f600d54 Mon Sep 17 00:00:00 2001 From: Giovi Date: Mon, 3 Nov 2025 13:12:41 +0100 Subject: [PATCH 28/54] Translated using Weblate (Italian) Currently translated at 99.7% (386 of 387 strings) Translation: Trilium Notes/Server Translate-URL: https://hosted.weblate.org/projects/trilium/server/it/ --- apps/server/src/assets/translations/it/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/assets/translations/it/server.json b/apps/server/src/assets/translations/it/server.json index 1b88e03d7..0b64f0fee 100644 --- a/apps/server/src/assets/translations/it/server.json +++ b/apps/server/src/assets/translations/it/server.json @@ -420,7 +420,7 @@ "end-time": "Ora di fine", "geolocation": "Geolocalizzazione", "built-in-templates": "Modelli integrati", - "board": "Tavola", + "board": "Kanban Board", "status": "Stato", "board_note_first": "Prima nota", "board_note_second": "Seconda nota", From a42daccc2ef9f0b78e0f44f6b856c3fad838b540 Mon Sep 17 00:00:00 2001 From: Giovi Date: Mon, 3 Nov 2025 13:12:27 +0100 Subject: [PATCH 29/54] Translated using Weblate (Italian) Currently translated at 99.3% (151 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/it/ --- apps/website/src/translations/it/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/translations/it/translation.json b/apps/website/src/translations/it/translation.json index 03792e5ed..915396c1a 100644 --- a/apps/website/src/translations/it/translation.json +++ b/apps/website/src/translations/it/translation.json @@ -70,7 +70,7 @@ "calendar_description": "Organizza i tuoi eventi personali o professionali utilizzando un calendario, con supporto per eventi di un giorno intero o di più giorni. Visualizza i tuoi eventi a colpo d'occhio con le viste settimanale, mensile e annuale. Interazione semplice per aggiungere o trascinare eventi.", "table_title": "Tabella", "table_description": "Visualizza e modifica le informazioni relative alle note in una struttura tabellare, con vari tipi di colonne quali testo, numeri, caselle di controllo, data e ora, collegamenti e colori, oltre al supporto per le relazioni. Facoltativamente, è possibile visualizzare le note all'interno di una gerarchia ad albero all'interno della tabella.", - "board_title": "Board", + "board_title": "Kanban Board", "board_description": "Organizza le tue attività o lo stato dei tuoi progetti in una lavagna Kanban con un modo semplice per creare nuovi elementi e colonne e modificare facilmente il loro stato trascinandoli sulla lavagna.", "geomap_title": "Geomappa", "geomap_description": "Pianifica le tue vacanze o segna i tuoi punti di interesse direttamente su una mappa geografica utilizzando indicatori personalizzabili. Visualizza le tracce GPX registrate per seguire gli itinerari.", From 93d77ca06e3297ed1621c6e4df8b0234b535db95 Mon Sep 17 00:00:00 2001 From: "Francis C." Date: Mon, 3 Nov 2025 02:11:50 +0100 Subject: [PATCH 30/54] Translated using Weblate (Chinese (Traditional Han script)) Currently translated at 100.0% (152 of 152 strings) Translation: Trilium Notes/Website Translate-URL: https://hosted.weblate.org/projects/trilium/website/zh_Hant/ --- apps/website/src/translations/zh-Hant/translation.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/website/src/translations/zh-Hant/translation.json b/apps/website/src/translations/zh-Hant/translation.json index 79ac2185b..f5ef4764b 100644 --- a/apps/website/src/translations/zh-Hant/translation.json +++ b/apps/website/src/translations/zh-Hant/translation.json @@ -70,7 +70,7 @@ "calendar_description": "使用行事曆規劃個人或專業活動,支援全天及多日活動。透過週、月、年檢視模式,一覽所有活動。通過簡單互動即可新增或拖曳活動。", "table_title": "表格", "table_description": "以表格結構顯示並編輯筆記資訊,支援多種欄位類型,包括文字、數字、核取方塊、日期與時間、連結及顏色,並支援關聯功能。可選擇性地在表格內以樹狀層級結構顯示筆記內容。", - "board_title": "儀表板", + "board_title": "看板", "board_description": "將您的任務或專案狀態整理成看板,輕鬆建立新項目與欄位,並透過在看板上拖曳即可簡單變更狀態。", "geomap_title": "地理地圖", "geomap_description": "使用可自訂的標記,直接在地圖上規劃您的假期行程或標記感興趣的地點。顯示已記錄的GPX軌跡,以便追蹤行程路線。", From 3faac9f26e43ff510fe90e51e12d1360f5619a1f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Nov 2025 05:35:53 +0000 Subject: [PATCH 31/54] chore(deps): update typescript-eslint monorepo to v8.46.3 --- package.json | 2 +- packages/ckeditor5-admonition/package.json | 2 +- packages/ckeditor5-footnotes/package.json | 2 +- .../ckeditor5-keyboard-marker/package.json | 2 +- packages/ckeditor5-math/package.json | 2 +- packages/ckeditor5-mermaid/package.json | 2 +- packages/share-theme/package.json | 4 +- pnpm-lock.yaml | 254 +++++++++++++++--- 8 files changed, 224 insertions(+), 46 deletions(-) diff --git a/package.json b/package.json index 0bb66772d..9533d10c1 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "tslib": "2.8.1", "tsx": "4.20.6", "typescript": "~5.9.0", - "typescript-eslint": "8.46.2", + "typescript-eslint": "8.46.3", "upath": "2.0.1", "vite": "7.1.12", "vite-plugin-dts": "~4.5.0", diff --git a/packages/ckeditor5-admonition/package.json b/packages/ckeditor5-admonition/package.json index 5b2d4d01c..7b75a79ba 100644 --- a/packages/ckeditor5-admonition/package.json +++ b/packages/ckeditor5-admonition/package.json @@ -25,7 +25,7 @@ "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "4.1.1", "@typescript-eslint/eslint-plugin": "~8.46.0", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/parser": "8.46.3", "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", diff --git a/packages/ckeditor5-footnotes/package.json b/packages/ckeditor5-footnotes/package.json index 635e85d9e..d3fdac60a 100644 --- a/packages/ckeditor5-footnotes/package.json +++ b/packages/ckeditor5-footnotes/package.json @@ -26,7 +26,7 @@ "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "4.1.1", "@typescript-eslint/eslint-plugin": "~8.46.0", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/parser": "8.46.3", "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", diff --git a/packages/ckeditor5-keyboard-marker/package.json b/packages/ckeditor5-keyboard-marker/package.json index 756ae241f..69f9ee4cf 100644 --- a/packages/ckeditor5-keyboard-marker/package.json +++ b/packages/ckeditor5-keyboard-marker/package.json @@ -28,7 +28,7 @@ "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "4.1.1", "@typescript-eslint/eslint-plugin": "~8.46.0", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/parser": "8.46.3", "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", diff --git a/packages/ckeditor5-math/package.json b/packages/ckeditor5-math/package.json index bb69ab804..85d1358cc 100644 --- a/packages/ckeditor5-math/package.json +++ b/packages/ckeditor5-math/package.json @@ -29,7 +29,7 @@ "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "4.1.1", "@typescript-eslint/eslint-plugin": "~8.46.0", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/parser": "8.46.3", "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", diff --git a/packages/ckeditor5-mermaid/package.json b/packages/ckeditor5-mermaid/package.json index f0123cca6..f83566bc4 100644 --- a/packages/ckeditor5-mermaid/package.json +++ b/packages/ckeditor5-mermaid/package.json @@ -28,7 +28,7 @@ "@ckeditor/ckeditor5-inspector": ">=4.1.0", "@ckeditor/ckeditor5-package-tools": "4.1.1", "@typescript-eslint/eslint-plugin": "~8.46.0", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/parser": "8.46.3", "@vitest/browser": "3.2.4", "@vitest/coverage-istanbul": "3.2.4", "ckeditor5": "47.1.0", diff --git a/packages/share-theme/package.json b/packages/share-theme/package.json index 0919ebf10..fbd289fbc 100644 --- a/packages/share-theme/package.json +++ b/packages/share-theme/package.json @@ -32,8 +32,8 @@ "devDependencies": { "@digitak/esrun": "3.2.26", "@triliumnext/ckeditor5": "workspace:*", - "@typescript-eslint/eslint-plugin": "8.46.2", - "@typescript-eslint/parser": "8.46.2", + "@typescript-eslint/eslint-plugin": "8.46.3", + "@typescript-eslint/parser": "8.46.3", "dotenv": "17.2.3", "esbuild": "0.25.12", "eslint": "9.39.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f12ed67b..253fb4505 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -110,8 +110,8 @@ importers: specifier: ~5.9.0 version: 5.9.3 typescript-eslint: - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) upath: specifier: 2.0.1 version: 2.0.1 @@ -880,10 +880,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -940,10 +940,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1000,10 +1000,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1067,10 +1067,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1134,10 +1134,10 @@ importers: version: 4.1.1(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@24.10.0)(bufferutil@4.0.9)(esbuild@0.25.12)(utf-8-validate@6.0.5) '@typescript-eslint/eslint-plugin': specifier: ~8.46.0 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@vitest/browser': specifier: 3.2.4 version: 3.2.4(bufferutil@4.0.9)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(playwright@1.56.1)(utf-8-validate@6.0.5)(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))(vitest@3.2.4)(webdriverio@9.20.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)) @@ -1370,11 +1370,11 @@ importers: specifier: workspace:* version: link:../ckeditor5 '@typescript-eslint/eslint-plugin': - specifier: 8.46.2 - version: 8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: 8.46.2 - version: 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + specifier: 8.46.3 + version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) dotenv: specifier: 17.2.3 version: 17.2.3 @@ -2304,11 +2304,11 @@ packages: engines: {node: '>=14.14'} hasBin: true - '@emnapi/core@1.6.0': - resolution: {integrity: sha512-zq/ay+9fNIJJtJiZxdTnXS20PllcYMX3OE23ESc4HK/bdYu3cOWYVhsOhVnXALfU/uqJIxn5NBPd9z4v+SfoSg==} + '@emnapi/core@1.7.0': + resolution: {integrity: sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==} - '@emnapi/runtime@1.6.0': - resolution: {integrity: sha512-obtUmAHTMjll499P+D9A3axeJFlhdjOWdKUNs/U6QIGT7V5RjcUW1xToAzjvmgTSQhDbYn/NwfTRoJcQ2rNBxA==} + '@emnapi/runtime@1.7.0': + resolution: {integrity: sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==} '@emnapi/wasi-threads@1.1.0': resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} @@ -2807,6 +2807,10 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint-community/regexpp@4.12.2': + resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/config-array@0.21.1': resolution: {integrity: sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5628,6 +5632,14 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/eslint-plugin@8.46.3': + resolution: {integrity: sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.46.3 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.46.2': resolution: {integrity: sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5635,22 +5647,45 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/parser@8.46.3': + resolution: {integrity: sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.46.2': resolution: {integrity: sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/project-service@8.46.3': + resolution: {integrity: sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/scope-manager@8.46.2': resolution: {integrity: sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/scope-manager@8.46.3': + resolution: {integrity: sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/tsconfig-utils@8.46.2': resolution: {integrity: sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/tsconfig-utils@8.46.3': + resolution: {integrity: sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.46.2': resolution: {integrity: sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5658,16 +5693,33 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/type-utils@8.46.3': + resolution: {integrity: sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/types@8.46.2': resolution: {integrity: sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/types@8.46.3': + resolution: {integrity: sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/typescript-estree@8.46.2': resolution: {integrity: sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/typescript-estree@8.46.3': + resolution: {integrity: sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.46.2': resolution: {integrity: sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5675,10 +5727,21 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/utils@8.46.3': + resolution: {integrity: sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + '@typescript-eslint/visitor-keys@8.46.2': resolution: {integrity: sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@typescript-eslint/visitor-keys@8.46.3': + resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -12882,6 +12945,9 @@ packages: sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + sax@1.4.2: + resolution: {integrity: sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==} + saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -13993,6 +14059,13 @@ packages: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' + typescript-eslint@8.46.3: + resolution: {integrity: sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <6.0.0' + typescript@5.0.4: resolution: {integrity: sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==} engines: {node: '>=12.20'} @@ -15451,7 +15524,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.3(supports-color@6.0.0) + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -15684,8 +15757,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15938,8 +16009,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -17308,13 +17377,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@emnapi/core@1.6.0': + '@emnapi/core@1.7.0': dependencies: '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.6.0': + '@emnapi/runtime@1.7.0': dependencies: tslib: 2.8.1 optional: true @@ -17337,7 +17406,7 @@ snapshots: '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.46.2 + '@typescript-eslint/types': 8.46.3 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 4.1.0 @@ -17583,6 +17652,8 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} + '@eslint-community/regexpp@4.12.2': {} + '@eslint/config-array@0.21.1': dependencies: '@eslint/object-schema': 2.1.7 @@ -18593,8 +18664,8 @@ snapshots: '@napi-rs/wasm-runtime@1.0.7': dependencies: - '@emnapi/core': 1.6.0 - '@emnapi/runtime': 1.6.0 + '@emnapi/core': 1.7.0 + '@emnapi/runtime': 1.7.0 '@tybys/wasm-util': 0.10.1 optional: true @@ -20172,7 +20243,7 @@ snapshots: '@stylistic/eslint-plugin@4.4.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.1(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -20871,7 +20942,7 @@ snapshots: '@typescript-eslint/eslint-plugin@8.46.2(@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@eslint-community/regexpp': 4.12.1 + '@eslint-community/regexpp': 4.12.2 '@typescript-eslint/parser': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/scope-manager': 8.46.2 '@typescript-eslint/type-utils': 8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) @@ -20886,6 +20957,23 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/eslint-plugin@8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/regexpp': 4.12.2 + '@typescript-eslint/parser': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/type-utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.3 + eslint: 9.39.1(jiti@2.6.1) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/parser@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/scope-manager': 8.46.2 @@ -20898,6 +20986,18 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.46.3 + debug: 4.4.3(supports-color@6.0.0) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/project-service@8.46.2(typescript@5.9.3)': dependencies: '@typescript-eslint/tsconfig-utils': 8.46.2(typescript@5.9.3) @@ -20907,15 +21007,33 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/project-service@8.46.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) + '@typescript-eslint/types': 8.46.3 + debug: 4.4.3(supports-color@6.0.0) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/scope-manager@8.46.2': dependencies: '@typescript-eslint/types': 8.46.2 '@typescript-eslint/visitor-keys': 8.46.2 + '@typescript-eslint/scope-manager@8.46.3': + dependencies: + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/visitor-keys': 8.46.3 + '@typescript-eslint/tsconfig-utils@8.46.2(typescript@5.9.3)': dependencies: typescript: 5.9.3 + '@typescript-eslint/tsconfig-utils@8.46.3(typescript@5.9.3)': + dependencies: + typescript: 5.9.3 + '@typescript-eslint/type-utils@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/types': 8.46.2 @@ -20928,8 +21046,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + debug: 4.4.3(supports-color@6.0.0) + eslint: 9.39.1(jiti@2.6.1) + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@8.46.2': {} + '@typescript-eslint/types@8.46.3': {} + '@typescript-eslint/typescript-estree@8.46.2(typescript@5.9.3)': dependencies: '@typescript-eslint/project-service': 8.46.2(typescript@5.9.3) @@ -20946,6 +21078,22 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/typescript-estree@8.46.3(typescript@5.9.3)': + dependencies: + '@typescript-eslint/project-service': 8.46.3(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.46.3(typescript@5.9.3) + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/visitor-keys': 8.46.3 + debug: 4.4.3(supports-color@6.0.0) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.3 + ts-api-utils: 2.1.0(typescript@5.9.3) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/utils@8.46.2(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) @@ -20957,11 +21105,27 @@ snapshots: transitivePeerDependencies: - supports-color + '@typescript-eslint/utils@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': + dependencies: + '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1)) + '@typescript-eslint/scope-manager': 8.46.3 + '@typescript-eslint/types': 8.46.3 + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/visitor-keys@8.46.2': dependencies: '@typescript-eslint/types': 8.46.2 eslint-visitor-keys: 4.2.1 + '@typescript-eslint/visitor-keys@8.46.3': + dependencies: + '@typescript-eslint/types': 8.46.3 + eslint-visitor-keys: 4.2.1 + '@ungap/structured-clone@1.3.0': {} '@uploadcare/cname-prefix@6.17.0': {} @@ -27378,7 +27542,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.1 + sax: 1.4.2 optional: true negotiator@0.6.3: {} @@ -29819,6 +29983,9 @@ snapshots: sax@1.4.1: {} + sax@1.4.2: + optional: true + saxes@5.0.1: dependencies: xmlchars: 2.2.0 @@ -31310,6 +31477,17 @@ snapshots: transitivePeerDependencies: - supports-color + typescript-eslint@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.46.3(typescript@5.9.3) + '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) + eslint: 9.39.1(jiti@2.6.1) + typescript: 5.9.3 + transitivePeerDependencies: + - supports-color + typescript@5.0.4: {} typescript@5.4.5: {} From 5186ea3fff675a8f26598e227a265ce7b55f67fa Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 08:51:54 +0200 Subject: [PATCH 32/54] chore(deps): duplicate dependency in lock --- pnpm-lock.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 908df92b1..84d33e6c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12945,9 +12945,6 @@ packages: sax@1.4.2: resolution: {integrity: sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==} - sax@1.4.2: - resolution: {integrity: sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==} - saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -29983,9 +29980,6 @@ snapshots: sax@1.4.2: {} - sax@1.4.2: - optional: true - saxes@5.0.1: dependencies: xmlchars: 2.2.0 From aeb0f44a432a4e5bead11467e3b65f3105aaee8b Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 08:55:05 +0200 Subject: [PATCH 33/54] chore(website): fix typecheck issue --- apps/website/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/website/tsconfig.json b/apps/website/tsconfig.json index 4d67635d7..68e45adef 100644 --- a/apps/website/tsconfig.json +++ b/apps/website/tsconfig.json @@ -10,7 +10,8 @@ "jsxImportSource": "preact", "skipLibCheck": true, "types": [ - "vite/client" + "vite/client", + "vitest/config" ], "paths": { "react": ["../../node_modules/preact/compat/"], From 757a0464749080fe8ae956acff91bcc414cc00db Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 09:13:12 +0200 Subject: [PATCH 34/54] feat(build-docs): add root 404 page --- apps/build-docs/src/main.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/build-docs/src/main.ts b/apps/build-docs/src/main.ts index 19d533420..d94ada167 100644 --- a/apps/build-docs/src/main.ts +++ b/apps/build-docs/src/main.ts @@ -22,8 +22,9 @@ async function main() { buildSwagger(context); buildScriptApi(context); - // Copy index file. + // Copy index and 404 files. cpSync(join(__dirname, "index.html"), join(context.baseDir, "index.html")); + cpSync(join(context.baseDir, "user-guide/404.html"), join(context.baseDir, "404.html")); } main(); From 59a2ef7527c90f0d23d4a8a2a0995d7a1a0b3c2d Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 09:13:41 +0200 Subject: [PATCH 35/54] chore(build-docs): add preview entrypoint --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../User Guide/Advanced Usage/Safe mode.html | 13 +- docs/Developer Guide/!!!meta.json | 91 +++++---- .../Developer Guide/Building/Documentation.md | 5 +- docs/User Guide/!!!meta.json | 32 +-- package.json | 2 + pnpm-lock.yaml | 187 +++++++++++++++++- 7 files changed, 261 insertions(+), 71 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index 54c139517..25388c0b2 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Safe mode.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Safe mode.html index a169f3800..87c50d2b7 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Safe mode.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Safe mode.html @@ -4,12 +4,9 @@ script to enable it.

What it does:

    -
  • Disables customWidget launcher types in app/widgets/containers/launcher.js.
  • -
  • Disables the running of mobileStartup or frontendStartup scripts.
  • -
  • Displays the root note instead of the previously saved session.
  • -
  • Disables the running of backendStartup, hourly, daily scripts - and checks for the hidden subtree.
  • +
  • Disables customWidget launcher types in app/widgets/containers/launcher.js.
  • +
  • Disables the running of mobileStartup or frontendStartup scripts.
  • +
  • Displays the root note instead of the previously saved session.
  • +
  • Disables the running of backendStartup, hourly, daily scripts + and checks for the hidden subtree.
\ No newline at end of file diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index f384978f2..5cc741ff6 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -56,6 +56,13 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "TLXJwBDo8Rdv", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "iconClass", @@ -69,13 +76,6 @@ "value": "environment-setup", "isInheritable": false, "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "TLXJwBDo8Rdv", - "isInheritable": false, - "position": 30 } ], "format": "markdown", @@ -96,6 +96,13 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "a0mkxxB4Uvbf", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "iconClass", @@ -109,13 +116,6 @@ "value": "project-structure", "isInheritable": false, "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "a0mkxxB4Uvbf", - "isInheritable": false, - "position": 30 } ], "format": "markdown", @@ -246,25 +246,25 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "shareAlias", - "value": "dev-build", + "type": "relation", + "name": "internalLink", + "value": "mXFYlhuEr1mZ", "isInheritable": false, - "position": 20 + "position": 10 }, { "type": "relation", "name": "internalLink", "value": "T2W7WCZrYZBU", "isInheritable": false, - "position": 30 + "position": 20 }, { - "type": "relation", - "name": "internalLink", - "value": "mXFYlhuEr1mZ", + "type": "label", + "name": "shareAlias", + "value": "dev-build", "isInheritable": false, - "position": 40 + "position": 20 } ], "format": "markdown", @@ -736,14 +736,14 @@ "name": "internalLink", "value": "DSkl8C325tEC", "isInheritable": false, - "position": 20 + "position": 10 }, { "type": "relation", "name": "internalLink", "value": "tM3rIZQzlum4", "isInheritable": false, - "position": 30 + "position": 20 }, { "type": "label", @@ -1082,16 +1082,16 @@ "mime": "text/html", "attributes": [ { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "DSkl8C325tEC", + "value": "VIcWnKGs0sMh", "isInheritable": false, "position": 20 }, @@ -1103,11 +1103,11 @@ "position": 30 }, { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", + "type": "label", + "name": "iconClass", + "value": "bx bx-table", "isInheritable": false, - "position": 40 + "position": 10 }, { "type": "label", @@ -1243,14 +1243,14 @@ { "type": "relation", "name": "internalLink", - "value": "PXzm2t3sCdsP", + "value": "oLhKpfi2kGON", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "oLhKpfi2kGON", + "value": "PXzm2t3sCdsP", "isInheritable": false, "position": 20 }, @@ -1876,6 +1876,13 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "k7RavjuXQt8z", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "shareAlias", @@ -1883,13 +1890,6 @@ "isInheritable": false, "position": 20 }, - { - "type": "relation", - "name": "internalLink", - "value": "k7RavjuXQt8z", - "isInheritable": false, - "position": 40 - }, { "type": "label", "name": "iconClass", @@ -2228,6 +2228,13 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "IxkDdjTogO18", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "shareAlias", diff --git a/docs/Developer Guide/Developer Guide/Building/Documentation.md b/docs/Developer Guide/Developer Guide/Building/Documentation.md index bd3124b55..d7e78f42e 100644 --- a/docs/Developer Guide/Developer Guide/Building/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Building/Documentation.md @@ -14,4 +14,7 @@ The `deploy-docs` workflow triggers the documentation build and uploads it to Cl ## Building locally -In the Git root, run `pnpm docs:build`. The built documentation will be available in `site` at Git root. \ No newline at end of file +In the Git root: + +* Run `pnpm docs:build`. The built documentation will be available in `site` at Git root. +* To also run a webserver to test it, run `pnpm docs:preview` (this will not build the documentation) and navigate to `localhost:9000`. \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index ee9df7820..24e168341 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -1166,6 +1166,22 @@ "dataFileName": "Multi-Factor Authentication.md", "attachments": [] }, + { + "isClone": true, + "noteId": "Un4wj2Mak2Ky", + "notePath": [ + "pOsGYCXsbNQG", + "Otzi9La2YAUX", + "WOcw2SLH6tbX", + "Un4wj2Mak2Ky" + ], + "title": "Nix flake", + "prefix": null, + "dataFileName": "Nix flake.clone.md", + "type": "text", + "format": "markdown", + "isExpanded": false + }, { "isClone": false, "noteId": "yeEaYqosGLSh", @@ -1256,22 +1272,6 @@ "format": "markdown", "dataFileName": "System Requirements.md", "attachments": [] - }, - { - "isClone": true, - "noteId": "Un4wj2Mak2Ky", - "notePath": [ - "pOsGYCXsbNQG", - "Otzi9La2YAUX", - "WOcw2SLH6tbX", - "Un4wj2Mak2Ky" - ], - "title": "Nix flake", - "prefix": null, - "dataFileName": "Nix flake.clone.md", - "type": "text", - "format": "markdown", - "isExpanded": false } ] }, diff --git a/package.json b/package.json index 9533d10c1..402997ce5 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "chore:update-build-info": "tsx ./scripts/update-build-info.ts", "chore:update-version": "tsx ./scripts/update-version.ts", "docs:build": "pnpm run --filter build-docs start", + "docs:preview": "pnpm http-server site -p 9000", "edit-docs:edit-docs": "pnpm run --filter edit-docs edit-docs", "edit-docs:edit-demo": "pnpm run --filter edit-docs edit-demo", "test:all": "pnpm test:parallel && pnpm test:sequential", @@ -54,6 +55,7 @@ "eslint-plugin-playwright": "2.3.0", "eslint-plugin-react-hooks": "7.0.1", "happy-dom": "~20.0.0", + "http-server": "14.1.1", "jiti": "2.6.1", "jsonc-eslint-parser": "2.4.1", "react-refresh": "0.18.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 84d33e6c0..1054a98c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -88,6 +88,9 @@ importers: happy-dom: specifier: ~20.0.0 version: 20.0.10 + http-server: + specifier: 14.1.1 + version: 14.1.1 jiti: specifier: 2.6.1 version: 2.6.1 @@ -835,6 +838,9 @@ importers: vite: specifier: 7.1.12 version: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + vitest: + specifier: 4.0.6 + version: 4.0.6(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -4996,6 +5002,9 @@ packages: '@ssddanbrown/codemirror-lang-twig@1.0.0': resolution: {integrity: sha512-7WIMIh8Ssc54TooGCY57WU2rKEqZZrcV2tZSVRPtd0gKYsrDEKCSLWpQjUWEx7bdgh3NKHUjq1O4ugIzI/+dwQ==} + '@standard-schema/spec@1.0.0': + resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} + '@stylistic/eslint-plugin@4.4.1': resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5794,6 +5803,9 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.0.6': + resolution: {integrity: sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==} + '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: @@ -5805,18 +5817,41 @@ packages: vite: optional: true + '@vitest/mocker@4.0.6': + resolution: {integrity: sha512-3COEIew5HqdzBFEYN9+u0dT3i/NCwppLnO1HkjGfAP1Vs3vti1Hxm/MvcbC4DAn3Szo1M7M3otiAaT83jvqIjA==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + '@vitest/pretty-format@4.0.6': + resolution: {integrity: sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==} + '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/runner@4.0.6': + resolution: {integrity: sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==} + '@vitest/snapshot@3.2.4': resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/snapshot@4.0.6': + resolution: {integrity: sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==} + '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} + '@vitest/spy@4.0.6': + resolution: {integrity: sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==} + '@vitest/ui@3.2.4': resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} peerDependencies: @@ -5825,6 +5860,9 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.0.6': + resolution: {integrity: sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==} + '@volar/language-core@2.4.13': resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} @@ -6606,6 +6644,10 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} + chai@6.2.0: + resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} + engines: {node: '>=18'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -8233,6 +8275,10 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} + expect-type@1.2.2: + resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + engines: {node: '>=12.0.0'} + exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} @@ -10141,6 +10187,9 @@ packages: magic-string@0.30.18: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} + magic-string@0.30.21: + resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} + magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -13832,6 +13881,10 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tinyspy@4.0.3: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} @@ -14446,6 +14499,40 @@ packages: jsdom: optional: true + vitest@4.0.6: + resolution: {integrity: sha512-gR7INfiVRwnEOkCk47faros/9McCZMp5LM+OMNWGLaDBSvJxIzwjgNFufkuePBNaesGRnLmNfW+ddbUJRZn0nQ==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.6 + '@vitest/browser-preview': 4.0.6 + '@vitest/browser-webdriverio': 4.0.6 + '@vitest/ui': 4.0.6 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + void-elements@2.0.1: resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} engines: {node: '>=0.10.0'} @@ -15521,7 +15608,7 @@ snapshots: '@babel/parser': 7.28.4 '@babel/template': 7.27.2 '@babel/types': 7.28.4 - debug: 4.4.1 + debug: 4.4.3(supports-color@6.0.0) transitivePeerDependencies: - supports-color @@ -15754,6 +15841,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -16028,8 +16117,6 @@ snapshots: '@ckeditor/ckeditor5-table': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-emoji@47.1.0': dependencies: @@ -20238,6 +20325,8 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 + '@standard-schema/spec@1.0.0': {} + '@stylistic/eslint-plugin@4.4.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) @@ -21221,6 +21310,15 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 + '@vitest/expect@4.0.6': + dependencies: + '@standard-schema/spec': 1.0.0 + '@types/chai': 5.2.2 + '@vitest/spy': 4.0.6 + '@vitest/utils': 4.0.6 + chai: 6.2.0 + tinyrainbow: 3.0.3 + '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 @@ -21230,26 +21328,52 @@ snapshots: msw: 2.7.5(@types/node@24.10.0)(typescript@5.9.3) vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + '@vitest/mocker@4.0.6(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': + dependencies: + '@vitest/spy': 4.0.6 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + msw: 2.7.5(@types/node@24.10.0)(typescript@5.9.3) + vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 + '@vitest/pretty-format@4.0.6': + dependencies: + tinyrainbow: 3.0.3 + '@vitest/runner@3.2.4': dependencies: '@vitest/utils': 3.2.4 pathe: 2.0.3 strip-literal: 3.0.0 + '@vitest/runner@4.0.6': + dependencies: + '@vitest/utils': 4.0.6 + pathe: 2.0.3 + '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 magic-string: 0.30.18 pathe: 2.0.3 + '@vitest/snapshot@4.0.6': + dependencies: + '@vitest/pretty-format': 4.0.6 + magic-string: 0.30.21 + pathe: 2.0.3 + '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 + '@vitest/spy@4.0.6': {} + '@vitest/ui@3.2.4(vitest@3.2.4)': dependencies: '@vitest/utils': 3.2.4 @@ -21267,6 +21391,11 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 + '@vitest/utils@4.0.6': + dependencies: + '@vitest/pretty-format': 4.0.6 + tinyrainbow: 3.0.3 + '@volar/language-core@2.4.13': dependencies: '@volar/source-map': 2.4.13 @@ -22221,6 +22350,8 @@ snapshots: loupe: 3.1.4 pathval: 2.0.1 + chai@6.2.0: {} + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -24435,6 +24566,8 @@ snapshots: expect-type@1.2.1: {} + expect-type@1.2.2: {} + exponential-backoff@3.1.2: {} exponential-backoff@3.1.3: {} @@ -26663,6 +26796,10 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 + magic-string@0.30.21: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + magicast@0.3.5: dependencies: '@babel/parser': 7.28.4 @@ -31193,6 +31330,8 @@ snapshots: tinyrainbow@2.0.0: {} + tinyrainbow@3.0.3: {} + tinyspy@4.0.3: {} tldts-core@6.1.86: @@ -31863,6 +32002,48 @@ snapshots: - tsx - yaml + vitest@4.0.6(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): + dependencies: + '@vitest/expect': 4.0.6 + '@vitest/mocker': 4.0.6(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) + '@vitest/pretty-format': 4.0.6 + '@vitest/runner': 4.0.6 + '@vitest/snapshot': 4.0.6 + '@vitest/spy': 4.0.6 + '@vitest/utils': 4.0.6 + debug: 4.4.3(supports-color@6.0.0) + es-module-lexer: 1.7.0 + expect-type: 1.2.2 + magic-string: 0.30.21 + pathe: 2.0.3 + picomatch: 4.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.15 + tinyrainbow: 3.0.3 + vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 24.10.0 + '@vitest/ui': 3.2.4(vitest@3.2.4) + happy-dom: 20.0.10 + jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + void-elements@2.0.1: {} void-elements@3.1.0: {} From db644f20ed27af43c9fae51e3b4b8a6e8560eebb Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 09:21:44 +0200 Subject: [PATCH 36/54] docs(dev): releasing a new version --- docs/Developer Guide/!!!meta.json | 68 +++++++++---------- .../Developer Guide/Building/Documentation.md | 4 ++ .../Building/Releasing a new version.md | 19 ++++++ .../Old documentation/Releasing a version.md | 22 ------ 4 files changed, 57 insertions(+), 56 deletions(-) create mode 100644 docs/Developer Guide/Developer Guide/Building/Releasing a new version.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Releasing a version.md diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index 5cc741ff6..e3c2d4362 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -433,6 +433,40 @@ "format": "markdown", "dataFileName": "Documentation.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "4nwtTJyjNDKd", + "notePath": [ + "jdjRLhLV3TtI", + "a0mkxxB4Uvbf", + "4nwtTJyjNDKd" + ], + "title": "Releasing a new version", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zdQzavvHDl1k", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rocket", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Releasing a new version.md", + "attachments": [] } ] }, @@ -2213,40 +2247,6 @@ "attachments": [], "dirFileName": "Old documentation", "children": [ - { - "isClone": false, - "noteId": "rLWcPPQi7Eso", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "rLWcPPQi7Eso" - ], - "title": "Releasing a version", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "IxkDdjTogO18", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "releasing", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Releasing a version.md", - "attachments": [] - }, { "isClone": false, "noteId": "6BWwXzPCph4G", diff --git a/docs/Developer Guide/Developer Guide/Building/Documentation.md b/docs/Developer Guide/Developer Guide/Building/Documentation.md index d7e78f42e..6ce33eeaf 100644 --- a/docs/Developer Guide/Developer Guide/Building/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Building/Documentation.md @@ -1,4 +1,8 @@ # Documentation +## Editing the documentation + +To edit the documentation run `pnpm edit-docs:edit-docs`. This will spin up a custom Trilium desktop instance which automatically imports the documentation into memory. Any changes will update in the background the files which can then be committed. + ## Automation The documentation is built via `apps/build-docs`: diff --git a/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md new file mode 100644 index 000000000..8e62e8f36 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md @@ -0,0 +1,19 @@ +# Releasing a new version +Releasing is mostly handled by the CI: + +* The version on GitHub is published automatically, including the description with the change log which is taken from the documentation. +* A PR is created automatically on the Winget repository to update to the new version. + +Releases are usually made directly from the `main` branch. + +The process is as follows: + +1. Edit the Documentation to add a corresponding entry in the _Release notes_ section. +2. In the root `package.json`, set `version` to the new version to be released. +3. Run `chore:update-version` to automatically update the version of the rest of the `package.json` files. +4. Run `pnpm i` to update the package lock as well. +5. Commit the changes to the `package.json` files and the `package-lock.json`. The commit message is usually `chore(release): prepare for v1.2.3`. +6. Tag the newly created commit: `git tag v1.2.3` +7. Push the commit and the newly created tag: `git push; git push --tags`. +8. Wait for the CI to finish. +9. When the release is automatically created in GitHub, download it to make sure it works OK. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Releasing a version.md b/docs/Developer Guide/Developer Guide/Old documentation/Releasing a version.md deleted file mode 100644 index ed3706f7e..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Releasing a version.md +++ /dev/null @@ -1,22 +0,0 @@ -# Releasing a version -On NixOS: - -``` -nix-shell -p dpkg fakeroot jq nodejs_20 -``` - -Then simply run from project root: - -``` -./bin/release.sh 1.2.3 -``` - -where `1.2.3` is the desired release version. - -If a version ends with `-beta`, it will automatically be marked as pre-release in GitHub. - -This will automatically generate a release in GitHub if everything goes according to plan. - -Note that the Windows installer is not automatically uploaded yet, it has to be taken from the [main workflow of the CI from the `develop` branch](../Architecture/CI/Main.md). - -Make sure to check test the artifacts of the release. \ No newline at end of file From 0ae4defc6dc51b7d9e4750803c15751a88770dae Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 10:55:48 +0200 Subject: [PATCH 37/54] docs(dev): reorganize and clean up technical documentation --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../Advanced Usage/Nightly release.html | 35 + .../{ => Backend scripts}/Events.html | 0 .../Backend scripts/Server-side imports.html | 7 + .../{ => Frontend Basics}/Custom Widgets.html | 0 .../Frontend Basics/Custom Widgets/CSS.html | 9 + .../Custom Widgets/Right pane widget.html | 30 + .../Custom Widgets/Widget Basics.html | 23 +- .../Custom Widgets/Word count widget.html | 0 .../Word count widget_image.png | Bin .../Downloading responses from Goo.html | 0 .../Examples/New Task launcher button.html | 0 .../Examples/New Task launcher button_i.png | Bin .../Examples/Using promoted attributes .png | Bin .../Using promoted attributes to c.html | 0 docs/Developer Guide/!!!meta.json | 1412 +++++------------ .../Developer Guide/Building/Documentation.md | 24 - .../Building/Releasing a new version.md | 2 +- .../CKEditor.md | 0 .../CKEditor/Differences from upstream.md | 2 +- .../CKEditor/Plugin migration guide.md | 0 .../Dependencies/CKEditor/ckeditor5-math.md | 16 + .../CKEditor}/ckeditor5-math_image.png | Bin .../Per-dependency checks.md} | 4 +- .../bettersqlite binaries.md | 25 + .../{Old documentation => }/Documentation.md | 57 +- .../Documentation references in th.md | 12 +- .../Old documentation/Documentation_image.png | Bin 7317 -> 0 bytes .../Download latest nightly and in.md | 12 - .../bettersqlite binaries.md | 41 - .../Scripting/Server-side imports.md | 16 - .../Old documentation/Scripting/Widgets.md | 33 - .../CKEditor/Building the editor.md | 21 - .../CKEditor/Environment setup.md | 26 - .../Updating to a newer version of.md | 65 - .../CKEditor/Versions and external plugins.md | 8 - .../Sub-projects/ckeditor5-math.md | 29 - .../Release management & continuou.md | 16 - .../ckeditor5-math/Updating with upstream.md | 21 - .../1_Setting up authentication_.png | Bin 9957 -> 0 bytes .../Integration testing/Running tests.md | 38 - .../Setting up authentication.md | 12 - .../Setting up authentication_.png | Bin 15080 -> 0 bytes .../{Old documentation => }/Testing.md | 9 +- .../Testing/End-to-end tests.md | 31 + .../Testing/Integration testing.md | 0 .../Test database.md | 0 .../Error [TransformError] The pac.md | 2 +- docs/User Guide/!!!meta.json | 679 +++++--- .../Advanced Showcases/Task Manager.md | 2 +- .../Advanced Usage/Attributes/Labels.md | 2 +- .../Advanced Usage/Attributes/Relations.md | 2 +- .../Advanced Usage/Nightly release.md | 34 + .../UI Elements/Launch Bar.md | 2 +- docs/User Guide/User Guide/Scripting.md | 4 +- .../Scripting/{ => Backend scripts}/Events.md | 6 +- .../Backend scripts/Server-side imports.md | 11 + .../Examples/New Task launcher button.md | 47 - .../User Guide/Scripting/Frontend Basics.md | 2 +- .../{ => Frontend Basics}/Custom Widgets.md | 0 .../Frontend Basics/Custom Widgets}/CSS.md | 0 .../Custom Widgets}/Right pane widget.md | 0 .../Custom Widgets/Widget Basics.md | 15 +- .../Custom Widgets/Word count widget.md | 6 +- .../Word count widget_image.png | Bin .../Downloading responses from Goo.md | 0 .../Examples/New Task launcher button.md | 47 + .../Examples/New Task launcher button_i.png | Bin .../Examples/Using promoted attributes .png | Bin .../Using promoted attributes to c.md | 0 docs/User Guide/User Guide/Troubleshooting.md | 2 +- 71 files changed, 1144 insertions(+), 1757 deletions(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Backend scripts}/Events.html (100%) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets.html (100%) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Widget Basics.html (71%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Word count widget.html (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Word count widget_image.png (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Downloading responses from Goo.html (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/New Task launcher button.html (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/New Task launcher button_i.png (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Using promoted attributes .png (100%) rename apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Using promoted attributes to c.html (100%) delete mode 100644 docs/Developer Guide/Developer Guide/Building/Documentation.md rename docs/Developer Guide/Developer Guide/{Project Structure => Dependencies}/CKEditor.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation/Sub-projects => Dependencies}/CKEditor/Differences from upstream.md (81%) rename docs/Developer Guide/Developer Guide/{Project Structure => Dependencies}/CKEditor/Plugin migration guide.md (100%) create mode 100644 docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md rename docs/Developer Guide/Developer Guide/{Old documentation/Sub-projects => Dependencies/CKEditor}/ckeditor5-math_image.png (100%) rename docs/Developer Guide/Developer Guide/{Old documentation/Project maintenance/Updating dependencies.md => Dependencies/Per-dependency checks.md} (96%) create mode 100644 docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md rename docs/Developer Guide/Developer Guide/{Old documentation => }/Documentation.md (66%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Documentation/Documentation references in th.md (69%) delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md delete mode 100644 docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png rename docs/Developer Guide/Developer Guide/{Old documentation => }/Testing.md (77%) create mode 100644 docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md create mode 100644 docs/Developer Guide/Developer Guide/Testing/Integration testing.md rename docs/Developer Guide/Developer Guide/{Old documentation/Testing/Integration testing => Testing}/Test database.md (100%) rename docs/Developer Guide/Developer Guide/{Old documentation => }/Troubleshooting/Error [TransformError] The pac.md (99%) create mode 100644 docs/User Guide/User Guide/Advanced Usage/Nightly release.md rename docs/User Guide/User Guide/Scripting/{ => Backend scripts}/Events.md (78%) create mode 100644 docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md delete mode 100644 docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets.md (100%) rename docs/{Developer Guide/Developer Guide/Old documentation/Scripting/Widgets => User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets}/CSS.md (100%) rename docs/{Developer Guide/Developer Guide/Old documentation/Scripting/Widgets => User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets}/Right pane widget.md (100%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Widget Basics.md (75%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Word count widget.md (88%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Custom Widgets/Word count widget_image.png (100%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Downloading responses from Goo.md (100%) create mode 100644 docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/New Task launcher button_i.png (100%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Using promoted attributes .png (100%) rename docs/User Guide/User Guide/Scripting/{ => Frontend Basics}/Examples/Using promoted attributes to c.md (100%) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index 25388c0b2..c9517ba7b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]},{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html new file mode 100644 index 000000000..d3cdc2008 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Nightly release.html @@ -0,0 +1,35 @@ +

Nightly releases are versions built every day, containing the latest improvements + and bugfixes, directly from the main development branch. These versions + are generally useful in preparation for a release, to ensure that there + are no significant bugs that need to be addressed first, or they can be + used to confirm whether a particular bug is fixed or feature is well implemented.

+

Regarding the stability

+

Despite being on a development branch, generally the main branch is pretty + stable since PRs are tested before they are merged. If you notice any issues, + feel free to report them either via a ticket or via the Matrix.

+

Downloading the nightly release manually

+

Go to github.com/TriliumNext/Trilium/releases/tag/nightly and + look for the artifacts starting with TriliumNotes-main. Choose + the appropriate one for your platform (e.g. windows-x64.zip).

+

Depending on your use case, you can either test the portable version or + even use the installer.

+ + +

Automatically download and install the latest nightly

+

This is pretty useful if you are a beta tester that wants to periodically + update their version:

+

On Ubuntu:

#!/usr/bin/env bash
+
+name=TriliumNotes-linux-x64-nightly.deb
+rm -f $name*
+wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name
+sudo apt-get install ./$name
+rm $name
\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Events.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Events.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Events.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html new file mode 100644 index 000000000..7820ccfe2 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.html @@ -0,0 +1,7 @@ +

Older versions of Trilium Notes allowed the use of Common.js module imports + inside backend scripts, such as:

const isBetween = require('dayjs/plugin/isBetween')
+api.dayjs.extend(isBetween)
+

For newer versions, Node.js imports are not officially supported anymore, + since we've added a bundler which makes it more difficult to reuse dependencies.

+

Theoretically it's still possible to use imports by manually setting up + a node_modules in the server directory via npm or pnpm.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html new file mode 100644 index 000000000..249da3ad3 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.html @@ -0,0 +1,9 @@ +

In doRender():

this.cssBlock(`#my-widget {
+	position: absolute;
+    bottom: 40px;
+    left: 60px;
+    z-index: 1;
+}`)
+
+

Reference: https://trilium.rocks/X7pxYpiu0lgU +

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html new file mode 100644 index 000000000..7b571b628 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.html @@ -0,0 +1,30 @@ +
    +
  • doRender must not be overridden, instead doRenderBody() has + to be overridden.
  • +
  • parentWidget() must be set to “rightPane”.
  • +
  • widgetTitle() getter can optionally be overriden, otherwise + the widget will be displayed as “Untitled widget”.
  • +
const template = `<div>Hi</div>`;
+
+class ToDoListWidget extends api.RightPanelWidget {
+    
+    get widgetTitle() {
+        return "Title goes here";
+    }
+        
+    get parentWidget() { return "right-pane" }
+    
+    doRenderBody() {
+        this.$body.empty().append($(template));
+    }   
+    
+    async refreshWithNote(note) {
+        this.toggleInt(false);                
+        this.triggerCommand("reEvaluateRightPaneVisibility");
+        this.toggleInt(true);
+        this.triggerCommand("reEvaluateRightPaneVisibility");
+    }
+}
+
+module.exports = new ToDoListWidget();
+

The implementation is in src/public/app/widgets/right_panel_widget.js.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html similarity index 71% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html index 273dbaae6..57a0a834b 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html @@ -16,11 +16,11 @@ module.exports = new MyWidget();

To implement this widget:

    -
  1. Create a new JS Frontend note in Trilium and paste in the code +
  2. Create a new JS Frontend note in Trilium and paste in the code above.
  3. -
  4. Assign the #widget attribute to +
  5. Assign the #widget attribute to the note.
  6. -
  7. Restart Trilium or reload the window.
  8. +
  9. Restart Trilium or reload the window.

To verify that the widget is working, open the developer tools (Cmd + Shift + I) and run document.querySelector("#my-widget"). If the element @@ -87,5 +87,18 @@ module.exports = new MyWidget(); } module.exports = new MyWidget(); -

Reload the application one last time. When you click the button, a "Hello - World!" message should appear, confirming that your widget is fully functional.

\ No newline at end of file +

parentWidget() can be given the following values:

+
    +
  • left-pane - This renders the widget on the left side of the + screen where the note tree lives.
  • +
  • center-pane - This renders the widget in the center of the + layout in the same location that notes and splits appear.
  • +
  • note-detail-pane - This renders the widget with the + note in the center pane. This means it can appear multiple times with splits.
  • +
  • right-pane - This renders the widget to the right of any opened + notes.
  • +
+

Reload the application + one last time. When you click the button, a "Hello World!" message should + appear, confirming that your widget is fully functional.

\ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.html diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.html similarity index 100% rename from apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.html rename to apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.html diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index e3c2d4362..e75df02a9 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -120,80 +120,75 @@ ], "format": "markdown", "dataFileName": "Project Structure.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "zdQzavvHDl1k", + "notePath": [ + "jdjRLhLV3TtI", + "zdQzavvHDl1k" + ], + "title": "Documentation", + "notePosition": 280, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "documentation", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-book-open", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "T2W7WCZrYZBU", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Documentation.md", "attachments": [], - "dirFileName": "Project Structure", + "dirFileName": "Documentation", "children": [ { "isClone": false, - "noteId": "Jg7clqogFOyD", + "noteId": "LjqM0VUL1CrU", "notePath": [ "jdjRLhLV3TtI", - "cxfTSHIUQtt2", - "Jg7clqogFOyD" + "zdQzavvHDl1k", + "LjqM0VUL1CrU" ], - "title": "CKEditor", + "title": "Documentation references in the application", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "BRhQZHgwaGyw", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-package", - "isInheritable": false, - "position": 10 - }, { "type": "label", "name": "shareAlias", - "value": "ckeditor", + "value": "doc-references", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "CKEditor.md", - "attachments": [], - "dirFileName": "CKEditor", - "children": [ - { - "isClone": false, - "noteId": "BRhQZHgwaGyw", - "notePath": [ - "jdjRLhLV3TtI", - "cxfTSHIUQtt2", - "Jg7clqogFOyD", - "BRhQZHgwaGyw" - ], - "title": "Plugin migration guide", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "plugin-migration", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Plugin migration guide.md", - "attachments": [] - } - ] + "dataFileName": "Documentation references in th.md", + "attachments": [] } ] }, @@ -205,7 +200,7 @@ "a0mkxxB4Uvbf" ], "title": "Building", - "notePosition": 280, + "notePosition": 290, "prefix": null, "isExpanded": false, "type": "text", @@ -400,40 +395,6 @@ "dataFileName": "Build deliveries locally.md", "attachments": [] }, - { - "isClone": false, - "noteId": "zdQzavvHDl1k", - "notePath": [ - "jdjRLhLV3TtI", - "a0mkxxB4Uvbf", - "zdQzavvHDl1k" - ], - "title": "Documentation", - "notePosition": 60, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "documentation", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-book-open", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Documentation.md", - "attachments": [] - }, { "isClone": false, "noteId": "4nwtTJyjNDKd", @@ -470,6 +431,250 @@ } ] }, + { + "isClone": false, + "noteId": "qalhAaJoQ7AN", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN" + ], + "title": "Dependencies", + "notePosition": 310, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-component", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "attachments": [], + "dirFileName": "Dependencies", + "children": [ + { + "isClone": false, + "noteId": "fa6hAJ9Ith3A", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "fa6hAJ9Ith3A" + ], + "title": "Per-dependency checks", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Xfi1ScuBTKJf", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "updating-deps", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Per-dependency checks.md", + "attachments": [], + "dirFileName": "Per-dependency checks", + "children": [ + { + "isClone": false, + "noteId": "Xfi1ScuBTKJf", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "fa6hAJ9Ith3A", + "Xfi1ScuBTKJf" + ], + "title": "bettersqlite binaries", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "bettersqlite-binaries", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "bettersqlite binaries.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "Jg7clqogFOyD", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD" + ], + "title": "CKEditor", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "BRhQZHgwaGyw", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-package", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "ckeditor", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "CKEditor.md", + "attachments": [], + "dirFileName": "CKEditor", + "children": [ + { + "isClone": false, + "noteId": "BRhQZHgwaGyw", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "BRhQZHgwaGyw" + ], + "title": "Plugin migration guide", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "plugin-migration", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Plugin migration guide.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "5gBYmUqiupBl", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "5gBYmUqiupBl" + ], + "title": "Differences from upstream", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "lY19SLxUMj3J", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "fullContentWidth", + "value": "", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "differences-from-upstream", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Differences from upstream.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "lY19SLxUMj3J", + "notePath": [ + "jdjRLhLV3TtI", + "qalhAaJoQ7AN", + "Jg7clqogFOyD", + "lY19SLxUMj3J" + ], + "title": "ckeditor5-math", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "ckeditor5-math", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "ckeditor5-math.md", + "attachments": [ + { + "attachmentId": "UlSZYhYX8Kfj", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "ckeditor5-math_image.png" + } + ] + } + ] + } + ] + }, { "isClone": false, "noteId": "yeqU0zo0ZQ83", @@ -478,7 +683,7 @@ "yeqU0zo0ZQ83" ], "title": "Architecture", - "notePosition": 300, + "notePosition": 320, "prefix": null, "isExpanded": false, "type": "text", @@ -1234,7 +1439,7 @@ "UzRirf46Xi46" ], "title": "Hidden notes", - "notePosition": 70, + "notePosition": 80, "prefix": null, "isExpanded": false, "type": "text", @@ -1268,7 +1473,7 @@ "m2W35hwSDUeh" ], "title": "Icons", - "notePosition": 80, + "notePosition": 90, "prefix": null, "isExpanded": false, "type": "text", @@ -1309,7 +1514,7 @@ "TLXJwBDo8Rdv" ], "title": "Internationalisation / Translations", - "notePosition": 90, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -1444,7 +1649,7 @@ "Usiyzn9C4WFv" ], "title": "Launchers", - "notePosition": 100, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", @@ -1471,7 +1676,7 @@ "qjQNyaYXSNWu" ], "title": "Note Revisions", - "notePosition": 110, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -1505,7 +1710,7 @@ "7RBJMqVz2EsJ" ], "title": "Note Types", - "notePosition": 120, + "notePosition": 130, "prefix": null, "isExpanded": false, "type": "text", @@ -1839,7 +2044,7 @@ "6dC7ha5vjqqS" ], "title": "Options", - "notePosition": 130, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -1904,7 +2109,7 @@ "W0msUwLxm40d" ], "title": "Printing and exporting to PDF", - "notePosition": 140, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -1945,7 +2150,7 @@ "UvXpeSqfYc6d" ], "title": "Protected entities", - "notePosition": 150, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -2000,7 +2205,7 @@ "vphziLmQeQHY" ], "title": "Share", - "notePosition": 160, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -2034,7 +2239,7 @@ "n9wYW9nUTynV" ], "title": "Synchronisation", - "notePosition": 170, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -2098,7 +2303,7 @@ "k7RavjuXQt8z" ], "title": "Syntax highlighting", - "notePosition": 180, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -2132,7 +2337,7 @@ "7BCukQTCm7fv" ], "title": "Themes", - "notePosition": 190, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -2167,7 +2372,7 @@ "YjerxU7Aii8X" ], "title": "Troubleshooting", - "notePosition": 340, + "notePosition": 360, "prefix": null, "isExpanded": false, "type": "text", @@ -2218,18 +2423,45 @@ "format": "markdown", "dataFileName": "better-sqlite3 was compiled ag.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "QUb0fRhbpT8E", + "notePath": [ + "jdjRLhLV3TtI", + "YjerxU7Aii8X", + "QUb0fRhbpT8E" + ], + "title": "Error [TransformError]: The package \"@esbuild/linux-x64\" could not be found, and is needed by esbuild.", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "esbuild-error", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Error [TransformError] The pac.md", + "attachments": [] } ] }, { "isClone": false, - "noteId": "ibAPHul7Efvr", + "noteId": "dtKC3FmoWOrv", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr" + "dtKC3FmoWOrv" ], - "title": "Old documentation", - "notePosition": 350, + "title": "Testing", + "notePosition": 380, "prefix": null, "isExpanded": false, "type": "text", @@ -2238,25 +2470,40 @@ { "type": "label", "name": "shareAlias", - "value": "old-documentation", + "value": "testing", "isInheritable": false, "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-eyedropper", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "w6gMvKh0UAVT", + "isInheritable": false, + "position": 40 } ], "format": "markdown", + "dataFileName": "Testing.md", "attachments": [], - "dirFileName": "Old documentation", + "dirFileName": "Testing", "children": [ { "isClone": false, - "noteId": "6BWwXzPCph4G", + "noteId": "C5MUQczZ5R9N", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G" + "dtKC3FmoWOrv", + "C5MUQczZ5R9N" ], - "title": "Project maintenance", - "notePosition": 60, + "title": "Integration testing", + "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", @@ -2265,101 +2512,25 @@ { "type": "label", "name": "shareAlias", - "value": "project-maintenance", + "value": "integration", "isInheritable": false, "position": 20 } ], "format": "markdown", - "attachments": [], - "dirFileName": "Project maintenance", - "children": [ - { - "isClone": false, - "noteId": "fa6hAJ9Ith3A", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G", - "fa6hAJ9Ith3A" - ], - "title": "Updating dependencies", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "Xfi1ScuBTKJf", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating-deps", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Updating dependencies.md", - "attachments": [], - "dirFileName": "Updating dependencies", - "children": [ - { - "isClone": false, - "noteId": "Xfi1ScuBTKJf", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "6BWwXzPCph4G", - "fa6hAJ9Ith3A", - "Xfi1ScuBTKJf" - ], - "title": "bettersqlite binaries", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "PXzm2t3sCdsP", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "bettersqlite-binaries", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "bettersqlite binaries.md", - "attachments": [] - } - ] - } - ] + "dataFileName": "Integration testing.md", + "attachments": [] }, { "isClone": false, - "noteId": "re0QTuqiYnVb", + "noteId": "bIfKwfCnqpeI", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb" + "dtKC3FmoWOrv", + "bIfKwfCnqpeI" ], - "title": "Scripting", - "notePosition": 80, + "title": "Test database", + "notePosition": 20, "prefix": null, "isExpanded": false, "type": "text", @@ -2368,144 +2539,25 @@ { "type": "label", "name": "shareAlias", - "value": "scripting", + "value": "test-database", "isInheritable": false, "position": 20 } ], "format": "markdown", - "attachments": [], - "dirFileName": "Scripting", - "children": [ - { - "isClone": false, - "noteId": "gz6zq5rlHqMa", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa" - ], - "title": "Widgets", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "widgets", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Widgets.md", - "attachments": [], - "dirFileName": "Widgets", - "children": [ - { - "isClone": false, - "noteId": "M8IppdwVHSjG", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa", - "M8IppdwVHSjG" - ], - "title": "Right pane widget", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "right-pane-widget", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Right pane widget.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VqGQnnPGnqAU", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "gz6zq5rlHqMa", - "VqGQnnPGnqAU" - ], - "title": "CSS", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "css", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "CSS.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "fZ2IGYFXjkEy", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "re0QTuqiYnVb", - "fZ2IGYFXjkEy" - ], - "title": "Server-side imports", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "server-imports", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Server-side imports.md", - "attachments": [] - } - ] + "dataFileName": "Test database.md", + "attachments": [] }, { "isClone": false, - "noteId": "Sow7ThJozkzJ", + "noteId": "w6gMvKh0UAVT", "notePath": [ "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "Sow7ThJozkzJ" + "dtKC3FmoWOrv", + "w6gMvKh0UAVT" ], - "title": "Documentation", - "notePosition": 90, + "title": "End-to-end tests", + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", @@ -2514,718 +2566,14 @@ { "type": "label", "name": "shareAlias", - "value": "documentation", + "value": "running-tests", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "Documentation.md", - "attachments": [ - { - "attachmentId": "2bUrJyt2yfsd", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Documentation_image.png" - } - ], - "dirFileName": "Documentation", - "children": [ - { - "isClone": false, - "noteId": "LjqM0VUL1CrU", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "Sow7ThJozkzJ", - "LjqM0VUL1CrU" - ], - "title": "Documentation references in the application", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "doc-references", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Documentation references in th.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "dtKC3FmoWOrv", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv" - ], - "title": "Testing", - "notePosition": 100, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "testing", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Testing.md", - "attachments": [], - "dirFileName": "Testing", - "children": [ - { - "isClone": false, - "noteId": "C5MUQczZ5R9N", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N" - ], - "title": "Integration testing", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "integration", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Integration testing", - "children": [ - { - "isClone": false, - "noteId": "pH4RsxqifVpK", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "pH4RsxqifVpK" - ], - "title": "Setting up authentication", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "auth", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Setting up authentication.md", - "attachments": [ - { - "attachmentId": "aWFXFuXNon7J", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Setting up authentication_.png" - }, - { - "attachmentId": "JRbtB4byzewo", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "1_Setting up authentication_.png" - } - ] - }, - { - "isClone": false, - "noteId": "bIfKwfCnqpeI", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "bIfKwfCnqpeI" - ], - "title": "Test database", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "test-database", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Test database.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "w6gMvKh0UAVT", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dtKC3FmoWOrv", - "C5MUQczZ5R9N", - "w6gMvKh0UAVT" - ], - "title": "Running tests", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "running-tests", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Running tests.md", - "attachments": [] - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "dHfw0XZE515z", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z" - ], - "title": "Sub-projects", - "notePosition": 110, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "subprojects", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Sub-projects", - "children": [ - { - "isClone": false, - "noteId": "JkTy2zz8Zbyq", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq" - ], - "title": "CKEditor", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "ckeditor", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "CKEditor", - "children": [ - { - "isClone": false, - "noteId": "5yWZVlKPjLCC", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "5yWZVlKPjLCC" - ], - "title": "Environment setup", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "environment-setup", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Environment setup.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "CaInsmrlZhR6", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "CaInsmrlZhR6" - ], - "title": "Building the editor", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "5yWZVlKPjLCC", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "building-the-editor", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Building the editor.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "5gBYmUqiupBl", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "5gBYmUqiupBl" - ], - "title": "Differences from upstream", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "lY19SLxUMj3J", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "fullContentWidth", - "value": "", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "differences-from-upstream", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Differences from upstream.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "Q9FyKVERd1Lb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "Q9FyKVERd1Lb" - ], - "title": "Updating to a newer version of CKEditor", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "5yWZVlKPjLCC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yAFSS6awVbaZ", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "Updating to a newer version of.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "yAFSS6awVbaZ", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "JkTy2zz8Zbyq", - "yAFSS6awVbaZ" - ], - "title": "Versions and external plugins", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "lY19SLxUMj3J", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "external-plugin-and-versions", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Versions and external plugins.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "lY19SLxUMj3J", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J" - ], - "title": "ckeditor5-math", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "JkTy2zz8Zbyq", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UMN2ABrBU5D7", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "CaInsmrlZhR6", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "ckeditor5-math", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "ckeditor5-math.md", - "attachments": [ - { - "attachmentId": "UlSZYhYX8Kfj", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "ckeditor5-math_image.png" - } - ], - "dirFileName": "ckeditor5-math", - "children": [ - { - "isClone": false, - "noteId": "vpbbBaypScLb", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J", - "vpbbBaypScLb" - ], - "title": "Updating with upstream", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "UMN2ABrBU5D7", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "updating-upstream", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Updating with upstream.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "UMN2ABrBU5D7", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "dHfw0XZE515z", - "lY19SLxUMj3J", - "UMN2ABrBU5D7" - ], - "title": "Release management & continuous integration", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "release-management", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Release management & continuou.md", - "attachments": [] - } - ] - } - ] - }, - { - "isClone": false, - "noteId": "QRLbiDXNxoWN", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "QRLbiDXNxoWN" - ], - "title": "Troubleshooting", - "notePosition": 120, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "troubleshooting", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Troubleshooting", - "children": [ - { - "isClone": false, - "noteId": "QUb0fRhbpT8E", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "QRLbiDXNxoWN", - "QUb0fRhbpT8E" - ], - "title": "Error [TransformError]: The package \"@esbuild/linux-x64\" could not be found, and is needed by esbuild.", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "esbuild-error", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Error [TransformError] The pac.md", - "attachments": [] - } - ] - }, - { - "isClone": false, - "noteId": "x6lgrdztQwVB", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "x6lgrdztQwVB" - ], - "title": "Installation", - "notePosition": 130, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "installation", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Installation", - "children": [ - { - "isClone": false, - "noteId": "bOjeTrUViwLw", - "notePath": [ - "jdjRLhLV3TtI", - "ibAPHul7Efvr", - "x6lgrdztQwVB", - "bOjeTrUViwLw" - ], - "title": "Download latest nightly and install it", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "download-nightly", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Download latest nightly and in.md", - "attachments": [] - } - ] + "dataFileName": "End-to-end tests.md", + "attachments": [] } ] } diff --git a/docs/Developer Guide/Developer Guide/Building/Documentation.md b/docs/Developer Guide/Developer Guide/Building/Documentation.md deleted file mode 100644 index 6ce33eeaf..000000000 --- a/docs/Developer Guide/Developer Guide/Building/Documentation.md +++ /dev/null @@ -1,24 +0,0 @@ -# Documentation -## Editing the documentation - -To edit the documentation run `pnpm edit-docs:edit-docs`. This will spin up a custom Trilium desktop instance which automatically imports the documentation into memory. Any changes will update in the background the files which can then be committed. - -## Automation - -The documentation is built via `apps/build-docs`: - -1. The output directory is cleared. -2. The User Guide and the Developer Guide are built. - 1. The documentation from the repo is archived and imported into an in-memory instance. - 2. The documentation is exported using the shared theme. -3. The API docs (internal and ETAPI) are statically rendered via Redocly. -4. The script API is generated via `typedoc` - -The `deploy-docs` workflow triggers the documentation build and uploads it to CloudFlare Pages. - -## Building locally - -In the Git root: - -* Run `pnpm docs:build`. The built documentation will be available in `site` at Git root. -* To also run a webserver to test it, run `pnpm docs:preview` (this will not build the documentation) and navigate to `localhost:9000`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md index 8e62e8f36..19e3427ec 100644 --- a/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md +++ b/docs/Developer Guide/Developer Guide/Building/Releasing a new version.md @@ -8,7 +8,7 @@ Releases are usually made directly from the `main` branch. The process is as follows: -1. Edit the Documentation to add a corresponding entry in the _Release notes_ section. +1. Edit the Documentation to add a corresponding entry in the _Release notes_ section. 2. In the root `package.json`, set `version` to the new version to be released. 3. Run `chore:update-version` to automatically update the version of the rest of the `package.json` files. 4. Run `pnpm i` to update the package lock as well. diff --git a/docs/Developer Guide/Developer Guide/Project Structure/CKEditor.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Project Structure/CKEditor.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md similarity index 81% rename from docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md index a5230d8f7..d8e2db46b 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Differences from upstream.md +++ b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Differences from upstream.md @@ -1,5 +1,5 @@ # Differences from upstream -* Embeds [`~~isaul32/ckeditor5-math~~`](https://github.com/isaul32/ckeditor5-math)  ckeditor5-math, which is a third-party plugin for adding math support. CKEditor itself also has a [math plugin](https://ckeditor.com/docs/ckeditor5/latest/features/math-equations.html) with MathType and ChemType but it's premium-only. +* Embeds [`~~isaul32/ckeditor5-math~~`](https://github.com/isaul32/ckeditor5-math)  ckeditor5-math, which is a third-party plugin for adding math support. CKEditor itself also has a [math plugin](https://ckeditor.com/docs/ckeditor5/latest/features/math-equations.html) with MathType and ChemType but it's premium-only. * Zadam left a TODO in `findandreplaceUI`: `// FIXME: keyboard shortcut doesn't work:` [`https://github.com/ckeditor/ckeditor5/issues/10645`](https://github.com/ckeditor/ckeditor5/issues/10645) * `packages\ckeditor5-build-balloon-block\src\mention_customization.js` introduces note insertion via `@` character. diff --git a/docs/Developer Guide/Developer Guide/Project Structure/CKEditor/Plugin migration guide.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Plugin migration guide.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Project Structure/CKEditor/Plugin migration guide.md rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/Plugin migration guide.md diff --git a/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md new file mode 100644 index 000000000..e47a59f12 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math.md @@ -0,0 +1,16 @@ +# ckeditor5-math +
ckeditor5-math in action.
+ +A fork of [isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math), which is the CKEditor5 plugin which adds the math functionality. We keep our own version to be able to use it on the latest version of CKEditor, alongside some custom improvements. + +## Development environment + +* Tested on Node.js 20. +* The package manager is yarn 1 (v1.22.22 is known to be working fine for it at the time of writing). + +Important commands: + +* To check if the code has any formatting issues: `yarn lint` +* To start a live preview: `yarn start` +* To run the tests: `yarn test` + * Note that this requires Chromium, on NixOS this can be achieved by running a `nix-shell -p chromium`, and running `CHROME_BIN=$(which chromium) yarn test` inside it. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math_image.png b/docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math_image.png rename to docs/Developer Guide/Developer Guide/Dependencies/CKEditor/ckeditor5-math_image.png diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md similarity index 96% rename from docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md rename to docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md index fb27cb6bf..309042ffc 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies.md +++ b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks.md @@ -1,2 +1,2 @@ -# Updating dependencies -
DependencyName in library_loaderThings to check for a basic sanity check Protected by unit tests
better-sqlite3 See bettersqlite binaries.  
jsdom 
  • Note map
  • Clipper
  • Note similarity
Protected by typings, should catch any potential changes in API.Yes
async-mutex 
  • Sync
  
axios 
  • Can't be directly tested, as it's exposed only via the backend script API.
  
sax 
  • EverNote imports
  
  • ws
  • debounce
 
  • Check any action is reported from server to client (e.g. delete a note).
  
ejs 
  • Onboarding / first setup
  
dayjs 
  • Day notes
  
semver 
  • Application should start.
  
https-proxy-agent ???  
sax 
  • EverNote import
  
ini 
  • Affects config, generally if the application starts then it should be OK.
  
jsplumbRELATION_MAP
  • Relation map note type
  
jquery.mark.es6MARKJS
  • In search, when highlighting the text that matched.
  • In search in HTML, which might not actually be used since it seems to have been replaced by CKEditor's own find & replace dialog.
  
knockout.js 
  • Used in rendering the login and main layout of the application.
  
normalize.min.css 
  • Used in shared notes.
  
wheel-zoom.min.jsWHEEL_ZOOM
  • When opening a image that is in attachment.
  • When opening a stand-alone image note.
  • When zooming in a mermaid chart.
  
fancytree 
  • The note tree should be fully functional.
  
bootstrap 
  • Check mostly the on-boarding pages, when there is no database.
  
electron-debug 
  • Run electron using npm run start-electron and check that the debug hotkeys are still working (Ctrl+Shift+I on Windows/Linux, Cmd+Alt+I for dev tools, Cmd/Ctrl+R for reload).
  
electron-dl    
eslint    
marked 
  • Importing a markdown note.
 Yes
force-graph 
  • Note map
  
\ No newline at end of file +# Per-dependency checks +
DependencyName in library_loaderThings to check for a basic sanity check Protected by unit tests
better-sqlite3 See bettersqlite binaries.  
jsdom 
  • Note map
  • Clipper
  • Note similarity
Protected by typings, should catch any potential changes in API.Yes
async-mutex 
  • Sync
  
axios 
  • Can't be directly tested, as it's exposed only via the backend script API.
  
sax 
  • EverNote imports
  
  • ws
  • debounce
 
  • Check any action is reported from server to client (e.g. delete a note).
  
ejs 
  • Onboarding / first setup
  
dayjs 
  • Day notes
  
semver 
  • Application should start.
  
https-proxy-agent ???  
sax 
  • EverNote import
  
ini 
  • Affects config, generally if the application starts then it should be OK.
  
jsplumbRELATION_MAP
  • Relation map note type
  
jquery.mark.es6MARKJS
  • In search, when highlighting the text that matched.
  • In search in HTML, which might not actually be used since it seems to have been replaced by CKEditor's own find & replace dialog.
  
knockout.js 
  • Used in rendering the login and main layout of the application.
  
normalize.min.css 
  • Used in shared notes.
  
wheel-zoom.min.jsWHEEL_ZOOM
  • When opening a image that is in attachment.
  • When opening a stand-alone image note.
  • When zooming in a mermaid chart.
  
fancytree 
  • The note tree should be fully functional.
  
bootstrap 
  • Check mostly the on-boarding pages, when there is no database.
  
electron-debug 
  • Run electron using npm run start-electron and check that the debug hotkeys are still working (Ctrl+Shift+I on Windows/Linux, Cmd+Alt+I for dev tools, Cmd/Ctrl+R for reload).
  
electron-dl    
eslint    
marked 
  • Importing a markdown note.
 Yes
force-graph 
  • Note map
  
\ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md new file mode 100644 index 000000000..5a473b5e5 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Dependencies/Per-dependency checks/bettersqlite binaries.md @@ -0,0 +1,25 @@ +# bettersqlite binaries +### The native node bindings + +`better-sqlite3` has native Node bindings. With updates of `better-sqlite3`, but also of Electron and Node.js versions, these bindings need to be updated. + +Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js. + +During development, `pnpm install` tries to build or reuse prebuilt natives for the current Node.js version. This makes `npm run start-server` work out of the box. Trying to run `npm run start-electron` with these versions generally causes an error such as this: + +``` +Uncaught Exception: +Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node' +was compiled against a different Node.js version using +NODE_MODULE_VERSION 108. This version of Node.js requires +NODE_MODULE_VERSION 116. Please try re-compiling or re-installing +the module (for instance, using `npm rebuild` or `npm install`). +``` + +### How the natives are handled + +To avoid issues between the `server` and the `desktop`, the `desktop` build gets its own copy of the `bettersqlite3` dependency in its `node_module`. This copy is then rebuilt automatically to match the Electron version. + +This process of rebuilding is handled by `scripts/electron-rebuild.mts` which runs automatically after `pnpm install` (via `postinstall`). + +If needed, the script can be run manually again via `pnpm postinstall`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md similarity index 66% rename from docs/Developer Guide/Developer Guide/Old documentation/Documentation.md rename to docs/Developer Guide/Developer Guide/Documentation.md index 987582cac..4874aaa1d 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,29 +1,32 @@ # Documentation -
- -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. * _Release Notes_, this contains the change log for each released or soon-to-be-released version. The release notes are used automatically by the CI when releasing a version. * The _Script API_, which is an automatically generated documentation for the front-end and back-end APIs for scripts. -## Editing documentation +## Location of the documentation + +All documentation is stored in the [Trilium](https://github.com/TriliumNext/Trilium) repository: + +* `docs/Developer Guide` contains Markdown documentation that can be modified either externally (using a Markdown editor, or internally using Trilium). +* `docs/Release Notes` is also stored in Markdown format and can be freely edited. +* `docs/Script API` contains auto-generated files and thus must not be modified. +* `docs/User Guide` contains also Markdown-only documentation but must generally not be edited externally. + * The reason is that the `pnpm edit-docs:edit-docs` feature will not only import/export this documentation, but also generate the corresponding HTML documentation and meta structure in `src/public/app/doc_notes/en/User Guide`. + * It's theoretically possible to edit the Markdown files externally and then run `docs:edit` and trigger a change in order to build the documentation, but that would not be a very productive workflow. + +## Editing the documentation There are two ways to modify documentation: * Using a special mode of Trilium. * By manually editing the files. -### Using `docs:edit` +### Using the `edit-docs` app -To edit the documentation using Trilium, set up a working development environment and run the following commands: - -* On most operating systems, `npm run electron:switch` followed by `npm run docs:edit` -* On NixOS, `npm run docs:edit-nix`. - -> [!NOTE] -> `npm run docs:edit` acts very similar to `npm run electron:start` in the sense that you cannot both be editing documentation and starting a server. Using both `npm run electron:start` and `docs:edit` is possible, since they are using the same Electron instance. +To edit the documentation using Trilium, set up a working development environment via Environment Setup and run the following command: `pnpm edit-docs:edit-docs`. How it works: @@ -50,24 +53,30 @@ Important aspects to consider: * The Trilium import/export mechanism is not perfect, so if you make some modifications to the documentation using `docs:edit`, at the next import/export/import cycle some whitespace might get thrown in. It's generally safe to commit the changes as-is. * Since we are importing Markdown, editing HTML and then exporting the HTML back to Markdown there might be some edge cases where the formatting is not properly preserved. Try to identify such cases and report them in order to get them fixed (this will benefit also the users). -## Location of the documentation +## Automation -All documentation is stored in the [Notes](https://github.com/TriliumNext/Trilium) repository: +The documentation is built via `apps/build-docs`: -* `docs/Developer Guide` contains Markdown documentation that can be modified either externally (using a Markdown editor, or internally using Trilium). -* `docs/Release Notes` is also stored in Markdown format and can be freely edited. -* `docs/Script API` contains auto-generated files and thus must not be modified. -* `docs/User Guide` contains also Markdown-only documentation but must generally not be edited externally. - * The reason is that the `docs:edit` feature will not only import/export this documentation, but also generate the corresponding HTML documentation and meta structure in `src/public/app/doc_notes/en/User Guide`. - * It's theoretically possible to edit the Markdown files externally and then run `docs:edit` and trigger a change in order to build the documentation, but that would not be a very productive workflow. +1. The output directory is cleared. +2. The User Guide and the Developer Guide are built. + 1. The documentation from the repo is archived and imported into an in-memory instance. + 2. The documentation is exported using the shared theme. +3. The API docs (internal and ETAPI) are statically rendered via Redocly. +4. The script API is generated via `typedoc` + +The `deploy-docs` workflow triggers the documentation build and uploads it to CloudFlare Pages. ## Updating the Script API As mentioned previously, the Script API is not manually editable since it is auto-generated using TypeDoc. -To update the API documentation, simply run `npm run docs:build`. Compare the changes (if any) and commit them. +To update the API documentation, simply run `pnpm docs:build`. Compare the changes (if any) and commit them. -Note that in order to simulate the environment a script would have, some fake source files (in the sense that they are only used for documentation) are being used as entrypoints for the documentation: +Note that in order to simulate the environment a script would have, some fake source files (in the sense that they are only used for documentation) are being used as entrypoints for the documentation. Look for `backend_script_entrypoint` and `frontend_script_entrypoint` in `apps/build-docs/src`. -* For back-end scripts, the script is located in `src/services/backend_script_entrypoint.ts`. -* For front-end scripts, the script is located in `src/public/app/services/frontend_script_entrypoint.ts`. \ No newline at end of file +## Building locally + +In the Git root: + +* Run `pnpm docs:build`. The built documentation will be available in `site` at Git root. +* To also run a webserver to test it, run `pnpm docs:preview` (this will not build the documentation) and navigate to `localhost:9000`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md b/docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md similarity index 69% rename from docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md rename to docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md index 1c9a9fea9..79c1bd80e 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Documentation/Documentation references in th.md +++ b/docs/Developer Guide/Developer Guide/Documentation/Documentation references in th.md @@ -13,6 +13,8 @@ https://triliumnext.github.io/Docs/Wiki/ There is a pattern of “?” buttons throughout the application which make use of the `data-help-page` attribute. Whenever these buttons are pressed, the user is redirected to the corresponding wiki page by prepending the wiki root URL to the `data-help-page` attribute. +### Deprecated `help-page` attribute + Since the current wiki has a different structure than the original, for example to link to [https://github.com/TriliumNext/Docs/blob/main/Wiki/tree-concepts.md](https://github.com/TriliumNext/Docs/blob/main/Wiki/tree-concepts.md) the `data-help-page` attribute must be set to `tree-concepts.md`. For links to headings, simply add the heading after the `.md`: `tree-concepts.md#prefix` @@ -20,4 +22,12 @@ For links to headings, simply add the heading after the `.md`: `tree-concepts.md You can identify those by looking for: * `.attr("data-help-page"` -* `data-help-page="` \ No newline at end of file +* `data-help-page="` + +### More modern `data-in-app-help` attribute + +Instead of opening in a web browser, this opens the help directly in the application in a split view. This is handled via the `data-in-app-help` attribute, where the value is the note ID of the help page without the `_help_` prefix. + +### React + +Use the `HelpButton` component in the same fashion as the `data-in-app-help` attribute. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png b/docs/Developer Guide/Developer Guide/Old documentation/Documentation_image.png deleted file mode 100644 index 542bb7858c9c03a5643192dfd2d2a8d4e10bc6e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7317 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 diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md b/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md deleted file mode 100644 index 0d5f2a2e4..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Installation/Download latest nightly and in.md +++ /dev/null @@ -1,12 +0,0 @@ -# Download latest nightly and install it -On Ubuntu: - -``` -#!/usr/bin/env bash - -name=TriliumNotes-linux-x64-nightly.deb -rm -f $name* -wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name -sudo apt-get install ./$name -rm $name -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md b/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md deleted file mode 100644 index 5538646ca..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Project maintenance/Updating dependencies/bettersqlite binaries.md +++ /dev/null @@ -1,41 +0,0 @@ -# bettersqlite binaries -### The native node bindings - -`better-sqlite3` has native Node bindings. With updates of `better-sqlite3`, but also of Electron and Node.js versions, these bindings need to be updated. - -Note that Electron and Node.js versions need different versions of these bindings, since Electron usually packs a different version of Node.js. - -During development, `npm install` tries to build or reuse prebuilt natives for the current Node.js version. This makes `npm run start-server` work out of the box. Trying to run `npm run start-electron` with these versions generally causes an error such as this: - -``` -Uncaught Exception: -Error: The module '/Users/elian/Projects/Notes/node_modules/better-sqlite3/build/Release/better_sqlite3.node' -was compiled against a different Node.js version using -NODE_MODULE_VERSION 108. This version of Node.js requires -NODE_MODULE_VERSION 116. Please try re-compiling or re-installing -the module (for instance, using `npm rebuild` or `npm install`). -``` - -### How the natives are handled - -Locally, this can be fixed by rebuilding the binaries, which is what `npm run switch-electron` does, which uses `electron-rebuild` under the hood. - -When the deliveries are built (see Build deliveries locally), it is not feasible to rebuild the dependencies since we are building for multiple platforms. Luckily, `better-sqlite3` provides these prebuilt binaries from us, available as artifacts on [their GitHub releases page](https://github.com/WiseLibs/better-sqlite3/releases/).  - -The build script manages the natives for `better-sqlite3` by keeping a copy of the `.node` file for every platform in `bin/better-sqlite3`. - -Whenever the version of `better-sqlite3` changes, the `.node` files must also be renewed based on their releases page. To simplify this process, a script was created in `bin/better-sqlite3/update.sh`. - -## How to update the natives - -The update script needs to know the version of Electron or Node.js for which to download the prebuilt binaries. - -If you get errors during download, check on the [releases page](https://github.com/WiseLibs/better-sqlite3/releases/) to ensure that this particular combination of Electron/Node actually exists for the given release. - -To determine the `NODE_MODULE_VERSION` that is required, look for `This version of Node.js requires` -`NODE_MODULE_VERSION` in the error when starting Trilium via: - -* `npm run start-electron` (or run any Electron [delivery](../../../Building/Build%20deliveries%20locally.md)), case in which the `ELECTRON_VERSION` variable needs to be changed. -* `npm run start-server` (or run the Linux server delivery), case in which the `NODE_VERSION` variable needs to be changed. - -Check which files got changed after running the update script and for each platform that got changed, test it locally via Build deliveries locally or via the CI. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md b/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md deleted file mode 100644 index c19366cee..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Server-side imports.md +++ /dev/null @@ -1,16 +0,0 @@ -# Server-side imports -Trilium Notes allowed the use of Common.js module imports inside backend scripts, such as: - -``` -const isBetween = require('dayjs/plugin/isBetween') -api.dayjs.extend(isBetween) -``` - -For TriliumNext, the backend has been switched to use ESM which has a slightly more complicated syntax. Instead of `require` we now have `import` but which is asynchronous so it will require an `await`: - -``` -const isBetween = (await import("dayjs/plugin/isBetween")).default; -api.dayjs.extend(isBetween); -``` - -Note that `.default` is also usually needed to obtain the same behaviour as a CJS import. When in doubt, use `console.log` to see the output of the value returned by `await import`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md b/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md deleted file mode 100644 index 57de0ad15..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets.md +++ /dev/null @@ -1,33 +0,0 @@ -# Widgets -To create a basic widget, simply create a code note with type “JS frontend”. Add the `#widget` label in order for it to be loaded at startup. - -``` -const template = `
`; - -class MyWidget extends api.BasicWidget { - get position() { return 1; } - get parentWidget() { return "left-pane" } - - doRender() { - this.$widget = $(template); - return this.$widget; - } -} - -module.exports = new MyWidget(); -``` - -`parentWidget()` can be given the following values: - -* `left-pane` - This renders the widget on the left side of the screen where the note tree lives. -* `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. -* `note-detail-pane` - This renders the widget _with_ the note in the center pane. This means it can appear multiple times with splits. -* `right-pane` - This renders the widget to the right of any opened notes. - -* * * - -Reference: - -* [https://trilium.rocks/X7pxYpiu0lgU](https://trilium.rocks/X7pxYpiu0lgU) -* [https://github.com/zadam/trilium/wiki/Widget-Basics](https://github.com/zadam/trilium/wiki/Widget-Basics) -* [https://github.com/zadam/trilium/wiki/Frontend-Basics](https://github.com/zadam/trilium/wiki/Frontend-Basics) \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md deleted file mode 100644 index 940617026..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Building the editor.md +++ /dev/null @@ -1,21 +0,0 @@ -# Building the editor -First, make sure Environment setup is set up. - -## Trigger the build - -``` -cd packages/ckeditor5-build-trilium -yarn build -``` - -This will trigger a change in the `build` directory. - -## Copy the build artifact to the main repo - -Go to `packages/ckeditor5-build-balloon-trilium/build` and copy `ckeditor.js` and `ckeditor.js.map` to `libraries/ckeditor` in the `Notes` repository. - -An example shell command to copy it: - -``` -cp build/ckeditor.* ~/Projects/TriliumNext/Notes/libraries/ckeditor/ -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md deleted file mode 100644 index 76819a12b..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Environment setup.md +++ /dev/null @@ -1,26 +0,0 @@ -# Environment setup -## Clone the repository - -To set up the repository: - -``` -git clone https://github.com/TriliumNext/trilium-ckeditor5.git -``` - -## Install dependencies - -First, install root dependencies: - -``` -cd trilium-ckeditor5 -yarn install -``` - -Secondly, install the Trilium build dependencies: - -``` -cd packages/ckeditor5-build-trilium -yarn install -``` - -To trigger the build, see Building the editor. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md deleted file mode 100644 index 6e7808f67..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Updating to a newer version of.md +++ /dev/null @@ -1,65 +0,0 @@ -# Updating to a newer version of CKEditor -## Before updating - -Make sure that all the plugins are compatible with this version:  Versions and external plugins. If not, they will need to be updated to the same version as the one you are updating, by altering their `package.json`. - -If the plugin is external to the Trilium organisation, it needs to be forked first. - -## Environment setup - -The first step is to add the CKEditor source as a remote. This only needs to be done once. - -``` -git remote add upstream ssh://git@github.com/ckeditor/ckeditor5.git -git fetch upstream -``` - -## Update steps - -Due to how the repository is structured, updates to the CKEditor are a bit difficult. - -1. `git fetch upstream` -2. Pick a version and merge with it: `git merge -X theirs v99.2.0` -3. When there are complicated conflicts, sometimes it's easier to take everything from the target version instead, for a given path: `git checkout v99.2.0 -- "packages/ckeditor5-list/**"`. -4. Go in `packages/ckeditor5-build-trilium/package.json` and run `node sync-version.js` to update the `package.json` with the new versions. Review and commit the change. -5. Follow again the dependency setup in Environment setup, as they have changed. -6. [Run the build](Building%20the%20editor.md) and check that it works. - -## Final steps - -1. Start the TriliumNext server -2. If updated to a newer version of CKEditor, check type `CKEDITOR_VERSION` in the browser/Electron console to ensure that the correct version is used. -3. Do a basic sanity check as well. -4. Commit and push the change on both sides (in the `trilium-ckeditor5` repo and in the `Notes` repo). - -## Troubleshooting client side errors - -These errors might show up when testing the Trilium app: - -``` -ReferenceError: CKEditor is not defined -``` - -Usually this is a side effect of another error, check the logs carefully to see if there is any other related error (perhaps a `CKEditorError`). - -* * * - -``` -Uncaught error: Message: CKEditorError: ckeditor-duplicated-modules -``` - -Most likely cause is one of the external plugins is incompatible with this version. - -For example, to disable the Math plugin, go to `packages/ckeditor5-build-trilium/src/config.ts` and modify: - -```diff --import Math from '@triliumnext/ckeditor5-math/src/math'; --import AutoformatMath from '@triliumnext/ckeditor5-math/src/autoformatmath'; - -export const COMMON_PLUGINS = [ -- Math, -- AutoformatMath, -] -``` - -In this case, make sure to align the version of all the external plugins with the one you are updating to, usually by forking the external plugin and updating its versions. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md deleted file mode 100644 index 2fe124c31..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/CKEditor/Versions and external plugins.md +++ /dev/null @@ -1,8 +0,0 @@ -# Versions and external plugins -## External plugins - -| | | | -| --- | --- | --- | -| trilium-ckeditor5 | 43.2.0 | | -| `ckeditor5-math` | | See ckeditor5-math. | -| | | | \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md deleted file mode 100644 index 91b6b265f..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math.md +++ /dev/null @@ -1,29 +0,0 @@ -# ckeditor5-math -
ckeditor5-math in action.
- -A fork of [isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math), which is the CKEditor5 plugin which adds the math functionality. The fork was created to handle #297: Insert Math appears to be broken. - -## Development environment - -* Tested on Node.js 20. -* The package manager is yarn 1 (v1.22.22 is known to be working fine for it at the time of writing). - -Important commands: - -* To check if the code has any formatting issues: `yarn lint` -* To start a live preview: `yarn start` -* To run the tests: `yarn test` - * Note that this requires Chromium, on NixOS this can be achieved by running a `nix-shell -p chromium`, and running `CHROME_BIN=$(which chromium) yarn test` inside it. - -## 📦 Packages - -The built artifact of the plugin is released by the CI and available on the [GitHub NPM registry](https://github.com/TriliumNext/ckeditor5-math/pkgs/npm/ckeditor5-math). - -Note that due to limitations on GitHub's registry, it is not possible to install this package without setting up a personal access token (even though the package itself is public). See [missing note] for more information. - -## ⬆️ Integrating with CKEditor - -1. Release a new version: Release management & continuous integration -2. In `trilium-ckeditor5`, go to `packages/ckeditor5-build-trilium/package.json` in the CKEditor repository and change the dependency of `@triliumnext/ckeditor5-math` to the newly released version. -3. Run `yarn install`. -4. Proceed with Building the editor to integrate everything into TriliumNext and then commit the change. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md deleted file mode 100644 index 1511f4bfc..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Release management & continuou.md +++ /dev/null @@ -1,16 +0,0 @@ -# Release management & continuous integration -To automate the release process, a GitHub workflow has been added which builds the package and releases it over to GitHub NPM registry. - -The workflow publishes a release whenever a tag with the correct format is pushed. - -The steps are as follows: - -1. Ensure that the source code is clean and ready for a release. -2. Go to `package.json` and bump the `version` field. -3. Commit the changes. -4. Tag the commit with `v1.2.3`, with the correct version number. -5. Push the changes. - -Then follow the CI and it should indicate success. Afterwards, check the [package](https://github.com/TriliumNext/ckeditor5-math/pkgs/npm/ckeditor5-math)section to ensure that the package is in the “Recent Versions” section. - -If the changes could benefit upstream, consider opening a pull request with the changes there as well. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md b/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md deleted file mode 100644 index b69003358..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Sub-projects/ckeditor5-math/Updating with upstream.md +++ /dev/null @@ -1,21 +0,0 @@ -# Updating with upstream -If there was a change in the upstream repository ([isaul32/ckeditor5-math](https://github.com/isaul32/ckeditor5-math)), it can be integrated as follows: - -1. Add the upstream as remote (`git remote add upstream ssh://git@github.com/isaul32/ckeditor5-math.git`). -2. Fetch the changes: `git fetch upstream` -3. Merge with a tag: `git merge v43.1.2` -4. Solve the conflict in `package.json` by: - 1. Taking the same version as the upcoming one and appending `-hotfix1`. - 2. Keeping the `@triliumnext/ckeditor5-math` name. -5. Install dependencies: `yarn install` -6. Check that the build works via `yarn prepublishOnly`. -7. Commit the changes, push them. -8. Release a version with Release management & continuous integration. - -## CI job not triggered after pushing all the upstream tags - -If the CI job was not triggered, you might have accidentally pushed a lot of tags using `git push --tags`. Manually delete the tag and push it again: - -```diff -git push -d origin v43.1.2-hotfix1 && git push --tags -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/1_Setting up authentication_.png deleted file mode 100644 index 020472c6d94f186ac08e26d9e42e6a5c179b952e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9957 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 diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md deleted file mode 100644 index 3ab98a39c..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Running tests.md +++ /dev/null @@ -1,38 +0,0 @@ -# Running tests -## First-time run - -Before starting Playwright, it has to be installed locally via: - -``` -npx playwright install -``` - -## Starting the integration test server - -There are two types of integration test servers: - -* `npm run integration-mem-db` will run a server with dev mode disabled. - * This is usually what the end user will see when accessing a server instance. - * It will not test the Electron/desktop side of the application. - * Changes to the public scripts will not take effect until running `npm run webpack`. -* `npm run integration-mem-db-dev` will run a server with dev mode enabled. - * This is usually what a dev sees when running `npm run start-server`. - * The difference with the production one is that the assets are loaded directly from files and as such it does not require `npm run webpack` to see changes. - -Either options will open up a server on [localhost:8082](http://localhost:8082) that can be accessed either manually via the browser or via Playwright. - -When asked for a password, the password is `demo1234`. - -## Starting the interactive test runner - -After starting the integration test server, to run the Playwright UI, run in the terminal: - -``` -npx playwright test --ui -``` - -It is also possible to run the interactive code generator instead: - -``` -npx playwright codegen -``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md deleted file mode 100644 index 4df7880fe..000000000 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication.md +++ /dev/null @@ -1,12 +0,0 @@ -# Setting up authentication -There is a setup test that stores the authentication token so that it can be reused throughout all the tests. - -If tests fail due to being stuck on login, then it must be run. - -To run it manually press “all” near the “Status:” text on top-left of the window - -
- -Then check “setup” and look for `auth.setup.ts` and press its corresponding Run button: - -
\ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png b/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Setting up authentication_.png deleted file mode 100644 index 4b260dfbc7d3033d1d58ad680b8bc330bdfc0598..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15080 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 XKO%y|H|qi?Sdk|Za^i(z`u_h1pk_^7 diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing.md b/docs/Developer Guide/Developer Guide/Testing.md similarity index 77% rename from docs/Developer Guide/Developer Guide/Old documentation/Testing.md rename to docs/Developer Guide/Developer Guide/Testing.md index 95efd9919..a1f8a1983 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Testing.md +++ b/docs/Developer Guide/Developer Guide/Testing.md @@ -17,17 +17,14 @@ Note that some integration tests rely on an in-memory database in order to funct ### REST API testing for the server -Some original work was done by Zadam in `/test-etapi`, using `.http` files. - -New effort using `vitest` and `supertest` to initialize the Express server and run assertions without having to make actual requests to the server. +API tests are handled via `vitest` and `supertest` to initialize the Express server and run assertions without having to make actual requests to the server. An important aspect is that we have access to the Express `app` which allows for interesting assertions such as checking the state of the server, registering debug middleware and so on. -One example is `src/share/routes.spec.ts`. +One example is `src/share/routes.spec.ts`, or for the ETAPI in `apps/server/spec/etapi`. These integration tests are run alongside unit tests. ## End-to-end testing -* This tests both the client and the server, by running the server and then using Playwright to query the state of the page. -* These can be found in `/e2e`. \ No newline at end of file +See e2e tests. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md new file mode 100644 index 000000000..387940158 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md @@ -0,0 +1,31 @@ +# End-to-end tests +* This tests both the client and the server, by running the server and then using Playwright to query the state of the page. +* These can be found in `apps/server-e2e` and `apps/desktop/e2e`. + +## First-time run + +Before starting Playwright, it has to be installed locally via: + +``` +pnpm playwright install +``` + +## Starting the integration test server + +Simply run `pnpm e2e` in one of the e2e projects. + +The integration server doesn't have authentication enabled to avoid login issues. + +## Starting the interactive test runner + +After starting the integration test server, to run the Playwright UI, run in the terminal: + +``` +pnpm playwright test --ui +``` + +It is also possible to run the interactive code generator instead: + +``` +pnpm playwright codegen +``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Testing/Integration testing.md b/docs/Developer Guide/Developer Guide/Testing/Integration testing.md new file mode 100644 index 000000000..e69de29bb diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Test database.md b/docs/Developer Guide/Developer Guide/Testing/Test database.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Testing/Integration testing/Test database.md rename to docs/Developer Guide/Developer Guide/Testing/Test database.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md b/docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md similarity index 99% rename from docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md rename to docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md index 8a93a52be..82a5d93a8 100644 --- a/docs/Developer Guide/Developer Guide/Old documentation/Troubleshooting/Error [TransformError] The pac.md +++ b/docs/Developer Guide/Developer Guide/Troubleshooting/Error [TransformError] The pac.md @@ -36,5 +36,5 @@ The solution is to remove `node_modules` and reinstall all dependencies: ``` rm -r node_modules -npm install +pnpm install ``` \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 24e168341..a38998354 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14081,6 +14081,33 @@ "format": "markdown", "dataFileName": "Safe mode.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "HAIOFBoYIIdO", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "HAIOFBoYIIdO" + ], + "title": "Nightly release", + "notePosition": 260, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-moon", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Nightly release.md", + "attachments": [] } ] }, @@ -14617,152 +14644,238 @@ { "type": "label", "name": "iconClass", - "value": "bx bx-info-circle", + "value": "bx bx-window", "isInheritable": false, "position": 40 } ], "format": "markdown", "dataFileName": "Frontend Basics.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "es8OU2GuguFU", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "es8OU2GuguFU" - ], - "title": "Examples", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "examples", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-code-alt", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", "attachments": [], - "dirFileName": "Examples", + "dirFileName": "Frontend Basics", "children": [ { "isClone": false, - "noteId": "TjLYAo3JMO8X", + "noteId": "MgibgPcfeuGz", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "es8OU2GuguFU", - "TjLYAo3JMO8X" + "yIhgI5H7A2Sm", + "MgibgPcfeuGz" ], - "title": "\"New Task\" launcher button", + "title": "Custom Widgets", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", - "mime": "text/html", + "mime": "text/markdown", "attributes": [ { - "type": "relation", - "name": "internalLink", - "value": "xYjQUYhpbUEW", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "xYmIYSP6wE3F", + "type": "label", + "name": "shareAlias", + "value": "custom-widget", "isInheritable": false, "position": 20 }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "m1lbrzyKDaRB", - "isInheritable": false, - "position": 50 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 60 - }, - { - "type": "relation", - "name": "internalLink", - "value": "yIhgI5H7A2Sm", - "isInheritable": false, - "position": 70 - }, { "type": "label", "name": "iconClass", - "value": "bx bx-task", + "value": "bx bxs-widget", "isInheritable": false, - "position": 80 - }, - { - "type": "label", - "name": "shareAlias", - "value": "new-task-button", - "isInheritable": false, - "position": 90 + "position": 30 } ], "format": "markdown", - "dataFileName": "New Task launcher button.md", - "attachments": [ + "dataFileName": "Custom Widgets.md", + "attachments": [], + "dirFileName": "Custom Widgets", + "children": [ { - "attachmentId": "9C2JA6tdtRpN", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "New Task launcher button_i.png" + "isClone": false, + "noteId": "YNxAqkI5Kg1M", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "YNxAqkI5Kg1M" + ], + "title": "Word count widget", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "6tZeKvSHEUiB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "word-count", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Word count widget.md", + "attachments": [ + { + "attachmentId": "JhM9NWfebzPi", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Word count widget_image.png" + } + ] + }, + { + "isClone": false, + "noteId": "SynTBQiBsdYJ", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "SynTBQiBsdYJ" + ], + "title": "Widget Basics", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BFs8mudNFgCS", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GLks18SNjxmC", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "widget-basics", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "Widget Basics.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "M8IppdwVHSjG", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "M8IppdwVHSjG" + ], + "title": "Right pane widget", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "right-pane-widget", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Right pane widget.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VqGQnnPGnqAU", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "MgibgPcfeuGz", + "VqGQnnPGnqAU" + ], + "title": "CSS", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "css", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "CSS.md", + "attachments": [] } ] }, { "isClone": false, - "noteId": "7kZPMD0uFwkH", + "noteId": "es8OU2GuguFU", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "es8OU2GuguFU", - "7kZPMD0uFwkH" + "yIhgI5H7A2Sm", + "es8OU2GuguFU" ], - "title": "Downloading responses from Google Forms", + "title": "Examples", "notePosition": 20, "prefix": null, "isExpanded": false, @@ -14772,49 +14885,182 @@ { "type": "label", "name": "shareAlias", - "value": "responses-from-google-forms", + "value": "examples", "isInheritable": false, "position": 20 - } - ], - "format": "markdown", - "dataFileName": "Downloading responses from Goo.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DL92EjAaXT26", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "es8OU2GuguFU", - "DL92EjAaXT26" - ], - "title": "Using promoted attributes to configure scripts", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ + }, { "type": "label", - "name": "shareAlias", - "value": "promoted-attributes-config", + "name": "iconClass", + "value": "bx bx-code-alt", "isInheritable": false, - "position": 20 + "position": 30 } ], "format": "markdown", - "dataFileName": "Using promoted attributes to c.md", - "attachments": [ + "attachments": [], + "dirFileName": "Examples", + "children": [ { - "attachmentId": "7P3jzVEa1mk7", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Using promoted attributes .png" + "isClone": false, + "noteId": "TjLYAo3JMO8X", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "TjLYAo3JMO8X" + ], + "title": "\"New Task\" launcher button", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "xYjQUYhpbUEW", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6f9hih2hXXZk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zEY4DaJG4YT5", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "m1lbrzyKDaRB", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "s8alTXmpFR61", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yIhgI5H7A2Sm", + "isInheritable": false, + "position": 70 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-task", + "isInheritable": false, + "position": 80 + }, + { + "type": "label", + "name": "shareAlias", + "value": "new-task-button", + "isInheritable": false, + "position": 90 + } + ], + "format": "markdown", + "dataFileName": "New Task launcher button.md", + "attachments": [ + { + "attachmentId": "9C2JA6tdtRpN", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "New Task launcher button_i.png" + } + ] + }, + { + "isClone": false, + "noteId": "7kZPMD0uFwkH", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "7kZPMD0uFwkH" + ], + "title": "Downloading responses from Google Forms", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "responses-from-google-forms", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Downloading responses from Goo.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DL92EjAaXT26", + "notePath": [ + "pOsGYCXsbNQG", + "CdNpE2pqjmI6", + "yIhgI5H7A2Sm", + "es8OU2GuguFU", + "DL92EjAaXT26" + ], + "title": "Using promoted attributes to configure scripts", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "promoted-attributes-config", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Using promoted attributes to c.md", + "attachments": [ + { + "attachmentId": "7P3jzVEa1mk7", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Using promoted attributes .png" + } + ] } ] } @@ -14822,162 +15068,76 @@ }, { "isClone": false, - "noteId": "GPERMystNGTB", + "noteId": "SPirpZypehBG", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "GPERMystNGTB" + "SPirpZypehBG" ], - "title": "Events", - "notePosition": 70, + "title": "Backend scripts", + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", - "mime": "text/markdown", + "mime": "text/html", "attributes": [ { - "type": "relation", - "name": "internalLink", - "value": "CdNpE2pqjmI6", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "c5xB8m4g2IY6", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "zEY4DaJG4YT5", + "type": "label", + "name": "shareAlias", + "value": "backend-basics", "isInheritable": false, "position": 30 }, - { - "type": "label", - "name": "shareAlias", - "value": "events", - "isInheritable": false, - "position": 10 - }, { "type": "label", "name": "iconClass", - "value": "bx bx-rss", + "value": "bx bx-server", "isInheritable": false, - "position": 20 + "position": 40 } ], "format": "markdown", - "dataFileName": "Events.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "MgibgPcfeuGz", - "notePath": [ - "pOsGYCXsbNQG", - "CdNpE2pqjmI6", - "MgibgPcfeuGz" - ], - "title": "Custom Widgets", - "notePosition": 80, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/markdown", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "custom-widget", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bxs-widget", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "dataFileName": "Custom Widgets.md", "attachments": [], - "dirFileName": "Custom Widgets", + "dirFileName": "Backend scripts", "children": [ { "isClone": false, - "noteId": "YNxAqkI5Kg1M", + "noteId": "fZ2IGYFXjkEy", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "MgibgPcfeuGz", - "YNxAqkI5Kg1M" + "SPirpZypehBG", + "fZ2IGYFXjkEy" ], - "title": "Word count widget", + "title": "Server-side imports", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "6tZeKvSHEUiB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "6f9hih2hXXZk", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "s8alTXmpFR61", - "isInheritable": false, - "position": 30 - }, { "type": "label", "name": "shareAlias", - "value": "word-count", + "value": "server-imports", "isInheritable": false, - "position": 40 + "position": 20 } ], "format": "markdown", - "dataFileName": "Word count widget.md", - "attachments": [ - { - "attachmentId": "JhM9NWfebzPi", - "title": "image.png", - "role": "image", - "mime": "image/png", - "position": 10, - "dataFileName": "Word count widget_image.png" - } - ] + "dataFileName": "Server-side imports.md", + "attachments": [] }, { "isClone": false, - "noteId": "SynTBQiBsdYJ", + "noteId": "GPERMystNGTB", "notePath": [ "pOsGYCXsbNQG", "CdNpE2pqjmI6", - "MgibgPcfeuGz", - "SynTBQiBsdYJ" + "SPirpZypehBG", + "GPERMystNGTB" ], - "title": "Widget Basics", + "title": "Events", "notePosition": 20, "prefix": null, "isExpanded": false, @@ -14987,34 +15147,41 @@ { "type": "relation", "name": "internalLink", - "value": "zEY4DaJG4YT5", + "value": "CdNpE2pqjmI6", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "BFs8mudNFgCS", + "value": "c5xB8m4g2IY6", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "GLks18SNjxmC", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 30 }, { "type": "label", "name": "shareAlias", - "value": "widget-basics", + "value": "events", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-rss", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "Widget Basics.md", + "dataFileName": "Events.md", "attachments": [] } ] @@ -15028,7 +15195,7 @@ "GLks18SNjxmC" ], "title": "Script API", - "notePosition": 90, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -15191,7 +15358,7 @@ "vElnKeDNPSVl" ], "title": "Logging", - "notePosition": 100, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", diff --git a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md index 20cf37c5e..13a4a5d94 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md +++ b/docs/User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager.md @@ -15,7 +15,7 @@ New tasks are created in the TODO note which has `~child:template` [relation](.. ### Attributes -Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Scripting/Events.md) handler which is run on attribute change. This [script](../../Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. +Task template defines several [promoted attributes](../Attributes/Promoted%20Attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](../../Scripting/Backend%20scripts/Events.md) handler which is run on attribute change. This [script](../../Scripting.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. ### New task button diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md index 1a90f31cb..cb68dab93 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Labels.md @@ -39,4 +39,4 @@ This is a list of labels that Trilium natively supports. > [!TIP] > Some labels presented here end with a `*`. That means that there are multiple labels with the same prefix, consult the specific page linked in the description of that label for more information. -
LabelDescription
disableVersioningDisables automatic creation of Note Revisions for a particular note. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting.
versioningLimitLimits the maximum number of Note Revisions for a particular note, overriding the global settings.
calendarRootMarks the note which should be used as root for Day Notes. Only one should be marked as such.
archivedHides notes from default search results and dialogs. Archived notes can optionally be hidden in the Note Tree.
excludeFromExportExcludes this note and its children when exporting.
run, runOnInstance, runAtHourSee Events.
disableInclusionScripts with this label won't be included into parent script execution.
sorted

Keeps child notes sorted by title alphabetically.

When given a value, it will sort by the value of another label instead. If one of the child notes doesn't have the specified label, the title will be used for them instead.

sortDirection

If sorted is applied, specifies the direction of the sort:

  • ASC, ascending (default)
  • DESC, descending
sortFoldersFirstIf sorted is applied, folders (notes with children) will be sorted as a group at the top, and the rest will be sorted.
topIf sorted is applied to the parent note, keeps given note on top in its parent.
hidePromotedAttributesHide Promoted Attributes on this note. Generally useful when defining inherited attributes, but the parent note doesn't need them.
readOnlyMarks a note to be always be read-only, if it's a supported note (text, code, mermaid).
autoReadOnlyDisabledDisables automatic read-only mode for the given note.
appCssMarks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks. See Custom app-wide CSS for more info.
appThemeMarks CSS notes which are full Trilium themes and are thus available in Trilium options. See Theme development for more information.
appThemeBaseSet to next, next-light, or next-dark to use the corresponding TriliumNext theme (auto, light or dark) as the base for a custom theme, instead of the legacy one. See Customize the Next theme for more information.
cssClassValue of this label is then added as CSS class to the node representing given note in the Note Tree. This can be useful for advanced theming. Can be used in template notes.
iconClassvalue of this label is added as a CSS class to the icon on the tree which can help visually distinguish the notes in the tree. Example might be bx bx-home - icons are taken from boxicons. Can be used in template notes.
pageSizeSpecifies the number of items per page in Note List.
customRequestHandlerSee Custom Request Handler.
customResourceProviderSee Custom Resource Providers.
widgetMarks this note as a custom widget which will be added to the Trilium component tree. See Custom Widgets for more information.
searchHomeNew search notes will be created as children of this note (see Saved Search).
workspace and related attributesSee Workspaces.
inboxdefault inbox location for new notes - when you create a note using new note button in the sidebar, notes will be created as child notes in the note marked as with #inbox label.
sqlConsoleHomeDefault location of SQL Console notes
bookmarkedIndicates this note is a bookmark.
bookmarkFolderNote with this label will appear in bookmarks as folder (allowing access to its children). See Bookmarks for more information.
share*See the attribute reference in Sharing.
displayRelations, hideRelationsComma delimited names of relations which should be displayed/hidden in a Relation Map (both the note type and the Note Map (Link map, Tree map) general functionality).
titleTemplate

Default title of notes created as children of this note. This value is evaluated as a JavaScript string and thus can be enriched with dynamic content via the injected now and parentNote variables.

Examples:

  • \({parentNote.getLabel('authorName')}'s literary works
  • Log for \){now.format('YYYY-MM-DD HH:mm:ss')}
  • to mirror the parent's template.

See Default Note Title for more info.

templateThis note will appear in the selection of available template when creating new note. See Templates for more information.
tocControls the display of the Table of contents for a given note. #toc or #toc=show to always display the table of contents, #toc=false to always hide it.
colordefines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f
Note: this color may be automatically adjusted when displayed to ensure sufficient contrast with the background.
keyboardShortcutDefines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.
keepCurrentHoistingOpening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.
executeButtonTitle of the button which will execute the current code note
executeDescriptionLonger description of the current code note displayed together with the execute button
excludeFromNoteMapNotes with this label will be hidden from the Note Map.
newNotesOnTopNew notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidgetHides the Highlights list widget
hideChildrenOverviewHides the Note List for that particular note.
printLandscapeWhen exporting to PDF, changes the orientation of the page to landscape instead of portrait.
printPageSizeWhen exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocationIndicates the latitude and longitude of a note, to be displayed in a Geo Map.
calendar:*Defines specific options for the Calendar View.
viewTypeSets the view of child notes (e.g. grid or list). See Note List for more information.
\ No newline at end of file +
LabelDescription
disableVersioningDisables automatic creation of Note Revisions for a particular note. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting.
versioningLimitLimits the maximum number of Note Revisions for a particular note, overriding the global settings.
calendarRootMarks the note which should be used as root for Day Notes. Only one should be marked as such.
archivedHides notes from default search results and dialogs. Archived notes can optionally be hidden in the Note Tree.
excludeFromExportExcludes this note and its children when exporting.
run, runOnInstance, runAtHourSee Events.
disableInclusionScripts with this label won't be included into parent script execution.
sorted

Keeps child notes sorted by title alphabetically.

When given a value, it will sort by the value of another label instead. If one of the child notes doesn't have the specified label, the title will be used for them instead.

sortDirection

If sorted is applied, specifies the direction of the sort:

  • ASC, ascending (default)
  • DESC, descending
sortFoldersFirstIf sorted is applied, folders (notes with children) will be sorted as a group at the top, and the rest will be sorted.
topIf sorted is applied to the parent note, keeps given note on top in its parent.
hidePromotedAttributesHide Promoted Attributes on this note. Generally useful when defining inherited attributes, but the parent note doesn't need them.
readOnlyMarks a note to be always be read-only, if it's a supported note (text, code, mermaid).
autoReadOnlyDisabledDisables automatic read-only mode for the given note.
appCssMarks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks. See Custom app-wide CSS for more info.
appThemeMarks CSS notes which are full Trilium themes and are thus available in Trilium options. See Theme development for more information.
appThemeBaseSet to next, next-light, or next-dark to use the corresponding TriliumNext theme (auto, light or dark) as the base for a custom theme, instead of the legacy one. See Customize the Next theme for more information.
cssClassValue of this label is then added as CSS class to the node representing given note in the Note Tree. This can be useful for advanced theming. Can be used in template notes.
iconClassvalue of this label is added as a CSS class to the icon on the tree which can help visually distinguish the notes in the tree. Example might be bx bx-home - icons are taken from boxicons. Can be used in template notes.
pageSizeSpecifies the number of items per page in Note List.
customRequestHandlerSee Custom Request Handler.
customResourceProviderSee Custom Resource Providers.
widgetMarks this note as a custom widget which will be added to the Trilium component tree. See Custom Widgets for more information.
searchHomeNew search notes will be created as children of this note (see Saved Search).
workspace and related attributesSee Workspaces.
inboxdefault inbox location for new notes - when you create a note using new note button in the sidebar, notes will be created as child notes in the note marked as with #inbox label.
sqlConsoleHomeDefault location of SQL Console notes
bookmarkedIndicates this note is a bookmark.
bookmarkFolderNote with this label will appear in bookmarks as folder (allowing access to its children). See Bookmarks for more information.
share*See the attribute reference in Sharing.
displayRelations, hideRelationsComma delimited names of relations which should be displayed/hidden in a Relation Map (both the note type and the Note Map (Link map, Tree map) general functionality).
titleTemplate

Default title of notes created as children of this note. This value is evaluated as a JavaScript string and thus can be enriched with dynamic content via the injected now and parentNote variables.

Examples:

  • \({parentNote.getLabel('authorName')}'s literary works
  • Log for \){now.format('YYYY-MM-DD HH:mm:ss')}
  • to mirror the parent's template.

See Default Note Title for more info.

templateThis note will appear in the selection of available template when creating new note. See Templates for more information.
tocControls the display of the Table of contents for a given note. #toc or #toc=show to always display the table of contents, #toc=false to always hide it.
colordefines color of the note in note tree, links etc. Use any valid CSS color value like 'red' or #a13d5f
Note: this color may be automatically adjusted when displayed to ensure sufficient contrast with the background.
keyboardShortcutDefines a keyboard shortcut which will immediately jump to this note. Example: 'ctrl+alt+e'. Requires frontend reload for the change to take effect.
keepCurrentHoistingOpening this link won't change hoisting even if the note is not displayable in the current hoisted subtree.
executeButtonTitle of the button which will execute the current code note
executeDescriptionLonger description of the current code note displayed together with the execute button
excludeFromNoteMapNotes with this label will be hidden from the Note Map.
newNotesOnTopNew notes will be created at the top of the parent note, not on the bottom.
hideHighlightWidgetHides the Highlights list widget
hideChildrenOverviewHides the Note List for that particular note.
printLandscapeWhen exporting to PDF, changes the orientation of the page to landscape instead of portrait.
printPageSizeWhen exporting to PDF, changes the size of the page. Supported values: A0, A1, A2, A3, A4, A5, A6, Legal, Letter, Tabloid, Ledger.
geolocationIndicates the latitude and longitude of a note, to be displayed in a Geo Map.
calendar:*Defines specific options for the Calendar View.
viewTypeSets the view of child notes (e.g. grid or list). See Note List for more information.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md index 454e7d007..6e1e9aa1f 100644 --- a/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md +++ b/docs/User Guide/User Guide/Advanced Usage/Attributes/Relations.md @@ -43,7 +43,7 @@ These relations are supported and used internally by Trilium. | Label | Description | | --- | --- | -| `runOn*` | See Events | +| `runOn*` | See Events | | `template` | note's attributes will be inherited even without a parent-child relationship, note's content and subtree will be added to instance notes if empty. See documentation for details. | | `inherit` | note's attributes will be inherited even without a parent-child relationship. See Templates for a similar concept. See Attribute Inheritance in the documentation. | | `renderNote` | notes of type Render Note will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered | diff --git a/docs/User Guide/User Guide/Advanced Usage/Nightly release.md b/docs/User Guide/User Guide/Advanced Usage/Nightly release.md new file mode 100644 index 000000000..c9c2aac09 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Nightly release.md @@ -0,0 +1,34 @@ +# Nightly release +Nightly releases are versions built every day, containing the latest improvements and bugfixes, directly from the main development branch. These versions are generally useful in preparation for a release, to ensure that there are no significant bugs that need to be addressed first, or they can be used to confirm whether a particular bug is fixed or feature is well implemented. + +## Regarding the stability + +Despite being on a development branch, generally the main branch is pretty stable since PRs are tested before they are merged. If you notice any issues, feel free to report them either via a ticket or via the Matrix. + +## Downloading the nightly release manually + +Go to [github.com/TriliumNext/Trilium/releases/tag/nightly](https://github.com/TriliumNext/Trilium/releases/tag/nightly) and look for the artifacts starting with `TriliumNotes-main`. Choose the appropriate one for your platform (e.g. `windows-x64.zip`). + +Depending on your use case, you can either test the portable version or even use the installer. + +> [!NOTE] +> If you choose the installable version (e.g. the .exe on Windows), it will replace your stable installation. + +> [!IMPORTANT] +> By default, the nightly uses the same database as the production version. Generally you could easily downgrade if needed. However, if there are changes to the database or sync version, it will not be possible to downgrade without having to restore from a backup. + +## Automatically download and install the latest nightly + +This is pretty useful if you are a beta tester that wants to periodically update their version: + +On Ubuntu: + +``` +#!/usr/bin/env bash + +name=TriliumNotes-linux-x64-nightly.deb +rm -f $name* +wget https://github.com/TriliumNext/Trilium/releases/download/nightly/$name +sudo apt-get install ./$name +rm $name +``` \ No newline at end of file diff --git a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md index 795e02602..d0ba7aecf 100644 --- a/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md +++ b/docs/User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar.md @@ -56,7 +56,7 @@ Right click either the _Available launchers_ or _Visible launchers_ sections and 2. Optionally, set a `keyboardShortcut` to trigger the launcher. 3. **Custom Widget** - Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Custom%20Widgets/Widget%20Basics.md) for more information. + Allows defining a custom widget to be rendered inside the launcher. See [Widget Basics](../../Scripting/Frontend%20Basics/Custom%20Widgets/Widget%20Basics.md) for more information. 4. **Spacers** Launchers that create some distance between other launchers for better visual distinction. diff --git a/docs/User Guide/User Guide/Scripting.md b/docs/User Guide/User Guide/Scripting.md index f5724f8a3..54a08c16b 100644 --- a/docs/User Guide/User Guide/Scripting.md +++ b/docs/User Guide/User Guide/Scripting.md @@ -12,7 +12,7 @@ So we have frontend and backend, each with their own set of responsibilities, bu ## Use cases -* "New Task" launcher button +* "New Task" launcher button ## Action handler @@ -34,7 +34,7 @@ You can see more scripting with explanation in Events. +See Events. ## Script API diff --git a/docs/User Guide/User Guide/Scripting/Events.md b/docs/User Guide/User Guide/Scripting/Backend scripts/Events.md similarity index 78% rename from docs/User Guide/User Guide/Scripting/Events.md rename to docs/User Guide/User Guide/Scripting/Backend scripts/Events.md index 6dbeeeba6..227acd5f1 100644 --- a/docs/User Guide/User Guide/Scripting/Events.md +++ b/docs/User Guide/User Guide/Scripting/Backend scripts/Events.md @@ -1,15 +1,15 @@ # Events -[Script](../Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. +[Script](../../Scripting.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. ## Global events Global events are attached to the script note via label. Simply create e.g. "run" label with some of these values and script note will be executed once the event occurs. -
LabelDescription
run

Defines on which events script should run. Possible values are:

  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • backendStartup - when Trilium backend starts up
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour, on the back-end.
  • daily - run once a day, on the back-end
runOnInstanceSpecifies that the script should only run on a particular Trilium instance.
runAtHourOn which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.
+
LabelDescription
run

Defines on which events script should run. Possible values are:

  • frontendStartup - when Trilium frontend starts up (or is refreshed), but not on mobile.
  • mobileStartup - when Trilium frontend starts up (or is refreshed), on mobile.
  • backendStartup - when Trilium backend starts up
  • hourly - run once an hour. You can use additional label runAtHour to specify at which hour, on the back-end.
  • daily - run once a day, on the back-end
runOnInstanceSpecifies that the script should only run on a particular Trilium instance.
runAtHourOn which hour should this run. Should be used together with #run=hourly. Can be defined multiple times for more runs during the day.
## Entity events -Other events are bound to some entity, these are defined as [relations](../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). +Other events are bound to some entity, these are defined as [relations](../../Advanced%20Usage/Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). | Relation | Description | | --- | --- | diff --git a/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md b/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md new file mode 100644 index 000000000..ddc795aa0 --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Backend scripts/Server-side imports.md @@ -0,0 +1,11 @@ +# Server-side imports +Older versions of Trilium Notes allowed the use of Common.js module imports inside backend scripts, such as: + +``` +const isBetween = require('dayjs/plugin/isBetween') +api.dayjs.extend(isBetween) +``` + +For newer versions, Node.js imports are **not officially supported anymore**, since we've added a bundler which makes it more difficult to reuse dependencies. + +Theoretically it's still possible to use imports by manually setting up a `node_modules` in the server directory via `npm` or `pnpm`. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md b/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md deleted file mode 100644 index 85e834b8b..000000000 --- a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button.md +++ /dev/null @@ -1,47 +0,0 @@ -# "New Task" launcher button -In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. - -## Creating the note - -1. First, create a new Code note type with the _JS frontend_ language. -2. Define the `#run=frontendStartup` label in Attributes. - -## Content of the script - -Copy-paste the following script: - -```javascript -api.addButtonToToolbar({ - title: "New task", - icon: "task", - shortcut: "alt+n", - action: async () => { - const taskNoteId = await api.runOnBackend(() => { - const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); - const resp = api.createTextNote(todoRootNote.noteId, "New task", "") - return resp.note.noteId; - }); - - await api.waitUntilSynced(); - await api.activateNewNote(taskNoteId); - } -}); -``` - -## Testing the functionality - -Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../Troubleshooting/Refreshing%20the%20application.md). - -## Understanding how the script works - -
api.addButtonToToolbar({
-	title: "New task",
-    icon: "task",
-    shortcut: "alt+n",
-    action: async () => {
-    	// [...]
-    }
-});

This uses the Front-end API to create a icon in the Launch Bar, by specifying:

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
-    // Shown below.           
-    return resp.note.noteId;
-});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Frontend Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics.md index 2557deed7..13c47823d 100644 --- a/docs/User Guide/User Guide/Scripting/Frontend Basics.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics.md @@ -54,4 +54,4 @@ Conversely to scripts, widgets do have some specific requirements in order to wo ### Tutorial -For more information on building widgets, take a look at [Widget Basics](Custom%20Widgets/Widget%20Basics.md). \ No newline at end of file +For more information on building widgets, take a look at [Widget Basics](Frontend%20Basics/Custom%20Widgets/Widget%20Basics.md). \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Custom Widgets.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/CSS.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/CSS.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS.md diff --git a/docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/Right pane widget.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Old documentation/Scripting/Widgets/Right pane widget.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget.md diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md similarity index 75% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md index b6e2a95ca..474cba983 100644 --- a/docs/User Guide/User Guide/Scripting/Custom Widgets/Widget Basics.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.md @@ -22,10 +22,10 @@ module.exports = new MyWidget(); To implement this widget: 1. Create a new `JS Frontend` note in Trilium and paste in the code above. -2. Assign the `#widget` [attribute](../../Advanced%20Usage/Attributes.md) to the [note](../../Basic%20Concepts%20and%20Features/Notes.md). +2. Assign the `#widget` [attribute](../../../Advanced%20Usage/Attributes.md) to the [note](../../../Basic%20Concepts%20and%20Features/Notes.md). 3. Restart Trilium or reload the window. -To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../../Advanced%20Usage/Attributes.md). +To verify that the widget is working, open the developer tools (`Cmd` + `Shift` + `I`) and run `document.querySelector("#my-widget")`. If the element is found, the widget is functioning correctly. If `undefined` is returned, double-check that the [note](../../../Basic%20Concepts%20and%20Features/Notes.md) has the `#widget` [attribute](../../../Advanced%20Usage/Attributes.md). ### Step 2: Adding an UI Element @@ -85,7 +85,7 @@ After reloading Trilium, the button should now appear at the bottom left of the ### Step 4: Adding User Interaction -Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../Script%20API.md). +Let’s make the button interactive by showing a message when it’s clicked. We'll use the `api.showMessage` method from the [Script API](../../Script%20API.md). ``` class MyWidget extends api.BasicWidget { @@ -108,4 +108,11 @@ class MyWidget extends api.BasicWidget { module.exports = new MyWidget(); ``` -Reload the application one last time. When you click the button, a "Hello World!" message should appear, confirming that your widget is fully functional. \ No newline at end of file +`parentWidget()` can be given the following values: + +* `left-pane` - This renders the widget on the left side of the screen where the note tree lives. +* `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. +* `note-detail-pane` - This renders the widget _with_ the note in the center pane. This means it can appear multiple times with splits. +* `right-pane` - This renders the widget to the right of any opened notes. + +[Reload](../../../Troubleshooting/Refreshing%20the%20application.md) the application one last time. When you click the button, a "Hello World!" message should appear, confirming that your widget is fully functional. \ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md similarity index 88% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md index ad8c1c351..8b6be5684 100644 --- a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget.md +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget.md @@ -1,8 +1,8 @@ # Word count widget > [!TIP] -> This widget is also present in new installations in the Demo Notes. +> This widget is also present in new installations in the Demo Notes. -Create a Code note of type JS frontend and **give it a** `#widget` **label**. +Create a Code note of type JS frontend and **give it a** `#widget` **label**. ``` /* @@ -82,7 +82,7 @@ class WordCountWidget extends api.NoteContextAwareWidget { module.exports = new WordCountWidget(); ``` -After you make changes it is necessary to [restart Trilium](../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. +After you make changes it is necessary to [restart Trilium](../../../Troubleshooting/Refreshing%20the%20application.md) so that the layout can be rebuilt. At the bottom of the note you can see the resulting widget: diff --git a/docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Custom Widgets/Word count widget_image.png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget_image.png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Downloading responses from Goo.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo.md diff --git a/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md new file mode 100644 index 000000000..6740c047f --- /dev/null +++ b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button.md @@ -0,0 +1,47 @@ +# "New Task" launcher button +In this example we are going to extend the functionality of Task Manager showcase (which comes by default with Trilium) by adding a button in the Launch Bar  (![](New%20Task%20launcher%20button_i.png)) to create a new task automatically and open it. + +## Creating the note + +1. First, create a new Code note type with the _JS frontend_ language. +2. Define the `#run=frontendStartup` label in Attributes. + +## Content of the script + +Copy-paste the following script: + +```javascript +api.addButtonToToolbar({ + title: "New task", + icon: "task", + shortcut: "alt+n", + action: async () => { + const taskNoteId = await api.runOnBackend(() => { + const todoRootNote = api.getNoteWithLabel("taskTodoRoot"); + const resp = api.createTextNote(todoRootNote.noteId, "New task", "") + return resp.note.noteId; + }); + + await api.waitUntilSynced(); + await api.activateNewNote(taskNoteId); + } +}); +``` + +## Testing the functionality + +Since we set the script to be run on start-up, all we need to do is to [refresh the application](../../../Troubleshooting/Refreshing%20the%20application.md). + +## Understanding how the script works + +
api.addButtonToToolbar({
+	title: "New task",
+    icon: "task",
+    shortcut: "alt+n",
+    action: async () => {
+    	// [...]
+    }
+});

This uses the Front-end API to create a icon in the Launch Bar, by specifying:

  • A title
  • A corresponding boxicons icon (without the bx- prefix).
  • Optionally, a keyboard shortcut to assign to it.
  • The action, which will be executed when the button is pressed.
const taskNoteId = await api.runOnBackend(() => {
+    // Shown below.           
+    return resp.note.noteId;
+});
  • This portion of code is actually executed on the server (backend) and not on the client (i.e. browser).
    • The reason is that the creating notes is the responsibility of the server.
  • Here we can also see that it is possible to return results from the server execution and read them in the client (taskNoteId).
const todoRootNote = api.getNoteWithLabel("taskTodoRoot");
  • Here we identify a note with the label #taskTodoRoot. This is how the Task Manager showcase knows where to place all the different tasks.
  • Normally this might return a null value if no such note could be identified, but error handling is outside the scope of this example. 
const resp = api.createTextNote(todoRootNote.noteId, "New task", "")
  • We create a new child note within the to-do root note (first argument) with the title “New task" (second argument) and no content by default (third argument).
await api.waitUntilSynced();
  • Back on the client, since we created a new note on the server, we now need to wait for the change to be reflected in the client.
await api.activateNewNote(taskNoteId);
  • Since we know the ID of the newly created note, all we have to do now is to show this note to the user.
\ No newline at end of file diff --git a/docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/New Task launcher button_i.png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button_i.png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes .png rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes .png diff --git a/docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md b/docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.md similarity index 100% rename from docs/User Guide/User Guide/Scripting/Examples/Using promoted attributes to c.md rename to docs/User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c.md diff --git a/docs/User Guide/User Guide/Troubleshooting.md b/docs/User Guide/User Guide/Troubleshooting.md index f439d1185..7ef4d2716 100644 --- a/docs/User Guide/User Guide/Troubleshooting.md +++ b/docs/User Guide/User Guide/Troubleshooting.md @@ -21,7 +21,7 @@ TRILIUM_START_NOTE_ID=root ./trilium ## Broken Script Prevents Application Startup -If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: +If a custom script causes Triliumto crash, and it is set as a startup script or in an active [custom widget](Scripting/Frontend%20Basics/Custom%20Widgets.md), start Triliumin "safe mode" to prevent any custom scripts from executing: ``` TRILIUM_SAFE_MODE=true ./trilium From 0494032fb5184048e68c31b9e8d00da65295c79a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 4 Nov 2025 12:35:56 +0000 Subject: [PATCH 38/54] Convert ASCII diagrams to Mermaid.js format Co-authored-by: eliandoran <21236836+eliandoran@users.noreply.github.com> --- docs/ARCHITECTURE.md | 125 +++++++++++++++++++++------------------- docs/DATABASE.md | 42 +++++++------- docs/SYNCHRONIZATION.md | 36 +++++------- 3 files changed, 99 insertions(+), 104 deletions(-) diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 44d4f99fd..53f35dbd2 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -53,30 +53,30 @@ Trilium Notes is a hierarchical note-taking application built as a TypeScript mo Trilium follows a **client-server architecture** even in desktop mode, where Electron runs both the backend server and frontend client within the same process. -``` -┌─────────────────────────────────────────────────────────────┐ -│ Frontend │ -│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ -│ │ Widgets │ │ Froca │ │ UI │ │ -│ │ System │ │ Cache │ │ Services │ │ -│ └────────────┘ └────────────┘ └────────────┘ │ -│ │ │ -│ WebSocket / REST API │ -│ │ │ -└─────────────────────────┼────────────────────────────────────┘ - │ -┌─────────────────────────┼────────────────────────────────────┐ -│ Backend Server │ -│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ -│ │ Express │ │ Becca │ │ Script │ │ -│ │ Routes │ │ Cache │ │ Engine │ │ -│ └────────────┘ └────────────┘ └────────────┘ │ -│ │ │ -│ ┌────┴─────┐ │ -│ │ SQLite │ │ -│ │ Database │ │ -│ └──────────┘ │ -└─────────────────────────────────────────────────────────────┘ +```mermaid +graph TB + subgraph Frontend + Widgets[Widgets
System] + Froca[Froca
Cache] + UIServices[UI
Services] + end + + subgraph Backend["Backend Server"] + Express[Express
Routes] + Becca[Becca
Cache] + ScriptEngine[Script
Engine] + Database[(SQLite
Database)] + end + + Widgets -.-> API[WebSocket / REST API] + Froca -.-> API + UIServices -.-> API + API -.-> Express + API -.-> Becca + API -.-> ScriptEngine + Becca --> Database + Express --> Database + ScriptEngine --> Database ``` ### Deployment Modes @@ -225,30 +225,24 @@ Located at: `apps/server/src/share/` Trilium's data model is based on five core entities: -``` -┌──────────────────────────────────────────────────────────┐ -│ Note Tree │ -│ │ -│ ┌─────────┐ │ -│ │ Note │ │ -│ │ (BNote) │ │ -│ └────┬────┘ │ -│ │ │ -│ │ linked by │ -│ ▼ │ -│ ┌──────────┐ ┌─────────────┐ │ -│ │ Branch │◄────────│ Attribute │ │ -│ │(BBranch) │ │ (BAttribute)│ │ -│ └──────────┘ └─────────────┘ │ -│ │ │ -│ │ creates │ -│ ▼ │ -│ ┌──────────┐ ┌─────────────┐ │ -│ │ Revision │ │ Attachment │ │ -│ │(BRevision│ │(BAttachment)│ │ -│ └──────────┘ └─────────────┘ │ -│ │ -└──────────────────────────────────────────────────────────┘ +```mermaid +graph TD + Note[Note
BNote] + Branch[Branch
BBranch] + Attribute[Attribute
BAttribute] + Revision[Revision
BRevision] + Attachment[Attachment
BAttachment] + + Note -->|linked by| Branch + Note -.->|metadata| Attribute + Branch -->|creates| Revision + Note -->|has| Attachment + + style Note fill:#e1f5ff + style Branch fill:#fff4e1 + style Attribute fill:#ffe1f5 + style Revision fill:#f5ffe1 + style Attachment fill:#ffe1e1 ``` #### Entity Definitions @@ -514,18 +508,29 @@ Key services: ### UI Components **Main Layout:** -``` -┌──────────────────────────────────────────────────────┐ -│ Title Bar │ -├──────────┬────────────────────────┬──────────────────┤ -│ │ │ │ -│ Note │ Note Detail │ Right Panel │ -│ Tree │ Editor │ (Info, Links) │ -│ │ │ │ -│ │ │ │ -├──────────┴────────────────────────┴──────────────────┤ -│ Status Bar │ -└──────────────────────────────────────────────────────┘ + +```mermaid +graph TD + subgraph TriliumUI[" "] + TitleBar[Title Bar] + + subgraph MainArea[" "] + NoteTree[Note Tree] + NoteDetail[Note Detail
Editor] + RightPanel[Right Panel
Info, Links] + end + + StatusBar[Status Bar] + end + + TitleBar -.-> MainArea + MainArea -.-> StatusBar + + style TitleBar fill:#e1f5ff + style NoteTree fill:#fff4e1 + style NoteDetail fill:#f5ffe1 + style RightPanel fill:#ffe1f5 + style StatusBar fill:#e1f5ff ``` **Component Locations:** diff --git a/docs/DATABASE.md b/docs/DATABASE.md index d02452f21..52df42e0b 100644 --- a/docs/DATABASE.md +++ b/docs/DATABASE.md @@ -427,27 +427,27 @@ CREATE TABLE etapi_tokens ( ## Data Relationships -``` - ┌──────────────┐ - │ Notes │ - └───┬──────────┘ - │ - ┌───────────┼───────────┐ - │ │ │ - ▼ ▼ ▼ - ┌────────┐ ┌──────────┐ ┌───────────┐ - │Branches│ │Attributes│ │Attachments│ - └────────┘ └──────────┘ └─────┬─────┘ - │ │ - │ │ - │ ┌──────────┐ │ - └──────▶│ Blobs │◀────────┘ - └──────────┘ - ▲ - │ - ┌────┴─────┐ - │Revisions │ - └──────────┘ +```mermaid +graph TB + Notes[Notes] + Branches[Branches] + Attributes[Attributes] + Attachments[Attachments] + Blobs[(Blobs)] + Revisions[Revisions] + + Notes --> Branches + Notes --> Attributes + Notes --> Attachments + Notes --> Blobs + Notes --> Revisions + + Branches --> Blobs + Attachments --> Blobs + Revisions --> Blobs + + style Notes fill:#e1f5ff + style Blobs fill:#ffe1e1 ``` **Relationships:** diff --git a/docs/SYNCHRONIZATION.md b/docs/SYNCHRONIZATION.md index 2f39eee40..0945e533a 100644 --- a/docs/SYNCHRONIZATION.md +++ b/docs/SYNCHRONIZATION.md @@ -14,29 +14,19 @@ Trilium implements a sophisticated **bidirectional synchronization system** that ## Sync Architecture -``` -┌─────────────┐ ┌─────────────┐ -│ Desktop 1 │ │ Desktop 2 │ -│ (Client) │ │ (Client) │ -└──────┬──────┘ └──────┬──────┘ - │ │ - │ WebSocket/HTTP │ - │ │ - ▼ ▼ -┌────────────────────────────────────────────────┐ -│ Sync Server │ -│ ┌──────────────────────────────────────┐ │ -│ │ Sync Service │ │ -│ │ - Entity Change Management │ │ -│ │ - Conflict Resolution │ │ -│ │ - Version Tracking │ │ -│ └──────────────────────────────────────┘ │ -│ │ │ -│ ┌──────┴───────┐ │ -│ │ Database │ │ -│ │ (entity_changes)│ │ -│ └──────────────┘ │ -└────────────────────────────────────────────────┘ +```mermaid +graph TB + Desktop1[Desktop 1
Client] + Desktop2[Desktop 2
Client] + + subgraph SyncServer["Sync Server"] + SyncService[Sync Service
- Entity Change Management
- Conflict Resolution
- Version Tracking] + SyncDB[(Database
entity_changes)] + end + + Desktop1 <-->|WebSocket/HTTP| SyncService + Desktop2 <-->|WebSocket/HTTP| SyncService + SyncService --> SyncDB ``` ## Core Concepts From 58ac3256344c4baabc3a1b3d095ddd9fe8fea99f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 15:51:54 +0200 Subject: [PATCH 39/54] docs(dev): integrate some of the architecture notes --- .../en/User Guide/User Guide/AI.html | 2 +- .../User Guide/Advanced Usage/Attributes.html | 4 +- .../Custom Request Handler.html | 8 +- .../Navigation/Search.html | 2 +- .../Basic Concepts and Features/Notes.html | 2 +- .../UI Elements/Ribbon.html | 2 +- .../en/User Guide/User Guide/Collections.html | 6 +- .../Desktop Installation.html | 2 +- .../Server Installation.html | 2 +- .../en/User Guide/User Guide/Note Types.html | 4 +- .../en/User Guide/User Guide/Scripting.html | 6 +- .../Custom Widgets/Widget Basics.html | 21 +- .../User Guide/Troubleshooting.html | 5 +- docs/ARCHITECTURE.md | 742 ---------- docs/Developer Guide/!!!meta.json | 1314 ++++++++++------- .../Developer Guide/Architecture.md | 118 ++ .../Developer Guide/Architecture/API.md | 72 + .../Client-server architecture/Backend.md | 88 ++ .../Client-server architecture/Frontend.md | 61 + .../Developer Guide/Architecture/Database.md | 40 + .../Database structure/attachments.md | 4 +- .../Database structure/attributes.md | 2 +- .../Database structure/blobs.md | 0 .../Database structure/branches.md | 4 +- .../Database structure/entity_changes.md | 0 .../Database structure/etapi_tokens.md | 2 +- .../Database structure/notes.md | 4 +- .../Database structure/options.md | 0 .../Database structure/recent_notes.md | 0 .../Database structure/revisions.md | 2 +- .../Architecture/Protected entities.md | 6 - .../{Architecture => Concepts}/Backlinks.md | 0 .../Branch prefixes.md | 0 .../CI/1_Main_image.png | Bin .../{Architecture => Concepts}/CI/Main.md | 0 .../CI/Main_image.png | Bin .../Developer Guide/Concepts/Cache.md | 111 ++ .../Deleted notes.md | 0 .../Demo document.md | 0 .../Developer Guide/Concepts/Entities.md | 109 ++ .../Hidden notes.md | 0 .../{Architecture => Concepts}/Icons.md | 0 .../Internationalisation Translat.md | 0 .../Guidelines.md | 0 .../Server translations.md | 0 .../i18n-ally.md | 0 .../{Architecture => Concepts}/Launchers.md | 0 .../Note Revisions.md | 0 .../Copy image reference to the cl.md | 0 .../Export diagram as SVG.md | 0 .../Adding a new note type/First steps.md | 0 .../First steps/mind_map.js | 0 .../Adding a new note type/Loading data.md | 0 .../Note type checklist.md | 0 .../Adding a new note type/SVG rendering.md | 0 .../Saving data via spaced update.md | 0 .../{Architecture => Concepts}/Options.md | 0 .../Options/Creating a new option.md | 0 .../Printing and exporting to PDF.md | 0 .../Concepts/Protected entities.md | 6 + .../{Architecture => Concepts}/Share.md | 0 .../Synchronisation/Content hashing.md | 0 .../Syntax highlighting.md | 0 .../{Architecture => Concepts}/Themes.md | 0 .../Developer Guide/Documentation.md | 2 +- .../Developer Guide/Environment Setup.md | 2 +- docs/User Guide/!!!meta.json | 26 +- 67 files changed, 1428 insertions(+), 1353 deletions(-) create mode 100644 docs/Developer Guide/Developer Guide/Architecture.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/API.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Database.md rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/attachments.md (90%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/attributes.md (84%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/blobs.md (100%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/branches.md (82%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/entity_changes.md (100%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/etapi_tokens.md (90%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/notes.md (90%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/options.md (100%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/recent_notes.md (100%) rename docs/Developer Guide/Developer Guide/Architecture/{ => Database}/Database structure/revisions.md (94%) delete mode 100644 docs/Developer Guide/Developer Guide/Architecture/Protected entities.md rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Backlinks.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Branch prefixes.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/CI/1_Main_image.png (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/CI/Main.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/CI/Main_image.png (100%) create mode 100644 docs/Developer Guide/Developer Guide/Concepts/Cache.md rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Deleted notes.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Demo document.md (100%) create mode 100644 docs/Developer Guide/Developer Guide/Concepts/Entities.md rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Hidden notes.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Icons.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Internationalisation Translat.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Internationalisation Translations/Guidelines.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Internationalisation Translations/Server translations.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Internationalisation Translations/i18n-ally.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Launchers.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Revisions.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/Copy image reference to the cl.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/Export diagram as SVG.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/First steps.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/First steps/mind_map.js (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/Loading data.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/Note type checklist.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/SVG rendering.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Note Types/Adding a new note type/Saving data via spaced update.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Options.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Options/Creating a new option.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Printing and exporting to PDF.md (100%) create mode 100644 docs/Developer Guide/Developer Guide/Concepts/Protected entities.md rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Share.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Synchronisation/Content hashing.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Syntax highlighting.md (100%) rename docs/Developer Guide/Developer Guide/{Architecture => Concepts}/Themes.md (100%) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html index e94560b68..0fc11a28d 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html @@ -36,7 +36,7 @@ class="image image_resized" style="width:74.04%;">

To see what embedding models Ollama has available, you can check out this searchon their website, and then pull whichever one - you want to try out. As of 4/15/25, my personal favorite is mxbai-embed-large.

+ you want to try out. A popular choice is mxbai-embed-large.

First, we'll need to select the Ollama provider from the tabs of providers, then we will enter in the Base URL for our Ollama. Since our Ollama is running on our local machine, our Base URL is http://localhost:11434. diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html index 8f28f72f4..d46a3e51c 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Attributes.html @@ -8,7 +8,7 @@

  • Labels can be used for a variety of purposes, such as storing metadata or configuring - the behaviour of notes. Labels are also searchable, enhancing note retrieval.

    + the behavior of notes. Labels are also searchable, enhancing note retrieval.

    For more information, including predefined labels, see Labels.

  • @@ -21,7 +21,7 @@ class="reference-link" href="#root/_help_Cq5X6iKQop6R">Relations.

    -

    These attributes play a crucial role in organizing, categorising, and +

    These attributes play a crucial role in organizing, categorizing, and enhancing the functionality of notes.

    Viewing the list of attributes

    Both the labels and relations for the current note are displayed in the Owned Attributes section diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html index d7068f7eb..196996eed 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Custom Request Handler.html @@ -11,7 +11,7 @@ const {secret, title, content} = req.body; if (req.method == 'POST' && secret === 'secret-password') { // notes must be saved somewhere in the tree hierarchy specified by a parent note. // This is defined by a relation from this code note to the "target" parent note - // alternetively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note) + // alternatively you can just use constant noteId for simplicity (get that from "Note Info" dialog of the desired parent note) const targetParentNoteId = api.currentNote.getRelationValue('targetNote'); const {note} = api.createTextNote(targetParentNoteId, title, content); @@ -30,7 +30,7 @@ else { be saved

    Explanation

    -

    Let's test this by using an HTTP client to send a request:

    POST http://my.trilium.org/custom/create-note
    +

    Let's test this by using an HTTP client to send a request:

    POST http://your-trilium-server/custom/create-note
     Content-Type: application/json
     
     {
    @@ -64,12 +64,12 @@ Content-Type: application/json
       can always look into its documentation for
       details.

    Parameters

    -

    REST request paths often contain parameters in the URL, e.g.:

    http://my.trilium.org/custom/notes/123
    +

    REST request paths often contain parameters in the URL, e.g.:

    http://your-trilium-server/custom/notes/123

    The last part is dynamic so the matching of the URL must also be dynamic - for this reason the matching is done with regular expressions. Following customRequestHandler value would match it:

    notes/([0-9]+)

    Additionally, this also defines a matching group with the use of parenthesis which then makes it easier to extract the value. The matched groups are available in api.pathParams:

    const noteId = api.pathParams[0];
    -

    Often you also need query params (as in e.g. http://my.trilium.org/custom/notes?noteId=123), +

    Often you also need query params (as in e.g. http://your-trilium-server/custom/notes?noteId=123), you can get those with standard express req.query.noteId.

    \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.html index 5a93064e8..0911a8b6c 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Navigation/Search.html @@ -21,7 +21,7 @@
    1. Set the text to search for in the Search string field.
        -
      1. Apart from searching for words ad-literam, there is also the possibility +
      2. Apart from searching for words literally, there is also the possibility to search for attributes or properties of notes.
      3. See the examples below for more information.
      diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html index 26efd0947..42e484e70 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/Notes.html @@ -31,7 +31,7 @@ and you will see a list of all modified notes including the deleted ones. Notes available for undeletion have a link to do so. This is kind of "trash can" functionality known from e.g. Windows.

      -

      Clicking an undelete will recover the note, it's content and attributes +

      Clicking an undelete will recover the note, its content and attributes - note should be just as before being deleted. This action will also undelete note's children which have been deleted in the same action.

      To be able to undelete a note, it is necessary that deleted note's parent diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.html index 96db62c4b..e23f83d72 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon.html @@ -29,7 +29,7 @@

    2. Editable changes whether the current note:
      • Enters read-only mode automatically if - the note is too big (default behaviour).
      • + the note is too big (default behavior).
      • Is always in read-only mode (however it can still be edited temporarily).
      • Is always editable, regardless of its size.
      diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections.html index fa40dcfbd..3aaad0a7e 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Collections.html @@ -1,5 +1,5 @@ -

      Collections are a unique type of notes that don't have a content, but - instead display its child notes in various presentation methods.

      +

      Collections are a unique type of note that don't have content, but instead + display their child notes in various presentation methods.

      Main collections

      @@ -94,7 +94,7 @@ in the Ribbon.

      Archived notes

      By default, archived notes will not be - shown in collections. This behaviour can be changed by going to Collection Properties in + shown in collections. This behavior can be changed by going to Collection Properties in the Ribbon and checking Show archived notes.

      Archived notes will be generally indicated by being greyed out as opposed diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Desktop Installation.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Desktop Installation.html index b213daf6e..5adf8dbe1 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Desktop Installation.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Desktop Installation.html @@ -27,6 +27,6 @@ any startup scripts that might cause the application to crash.

      Synchronization

      -

      For Trilium desktp users who wish to synchronize their data with a server +

      For Trilium desktop users who wish to synchronize their data with a server instance, refer to the Synchronization guide for detailed instructions.

      \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html index 0c34a40ae..dfaa68a0d 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation.html @@ -40,7 +40,7 @@

      Disabling / Modifying the Upload Limit

      If you're running into the 250MB limit imposed on the server by default, and you'd like to increase the upload limit, you can set the TRILIUM_NO_UPLOAD_LIMIT environment - variable to true disable it completely:

      export TRILIUM_NO_UPLOAD_LIMIT=true 
      + variable to true to disable it completely:

      export TRILIUM_NO_UPLOAD_LIMIT=true 

      Or, if you'd simply like to increase the upload limit size to something beyond 250MB, you can set the MAX_ALLOWED_FILE_SIZE_MB environment variable to something larger than the integer 250 (e.g. 450 in diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types.html index 9c69cade3..1369ccfa6 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Note Types.html @@ -1,5 +1,5 @@ -

      One core features of Trilium is that it supports multiple types of notes, - depending on the need.

      +

      One of the core features of Trilium is that it supports multiple types + of notes, depending on the need.

      Creating a new note with a different type via the note tree

      The default note type in Trilium (e.g. when creating a new note) is  Script API provide extra functionality.

      -

      Scripting

      +

      Architecture Overview

      To go further I must explain basic architecture of Trilium - in its essence it is a classic web application - it has these two main components:

        @@ -14,8 +14,8 @@

      So we have frontend and backend, each with their own set of responsibilities, but their common feature is that they both run JavaScript code. Add to - this the fact, that we're able to create JavaScript [[code notes]] and - we're onto something.

      + this the fact, that we're able to create JavaScript code notes and we're onto something.

      Use cases

      • "New Task" launcher button diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html index 57a0a834b..84a15c29e 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics.html @@ -16,11 +16,11 @@ module.exports = new MyWidget();

        To implement this widget:

          -
        1. Create a new JS Frontend note in Trilium and paste in the code +
        2. Create a new JS Frontend note in Trilium and paste in the code above.
        3. -
        4. Assign the #widget attribute to +
        5. Assign the #widget attribute to the note.
        6. -
        7. Restart Trilium or reload the window.
        8. +
        9. Restart Trilium or reload the window.

        To verify that the widget is working, open the developer tools (Cmd + Shift + I) and run document.querySelector("#my-widget"). If the element @@ -89,16 +89,15 @@ module.exports = new MyWidget(); module.exports = new MyWidget();

        parentWidget() can be given the following values:

          -
        • left-pane - This renders the widget on the left side of the +
        • left-pane - This renders the widget on the left side of the screen where the note tree lives.
        • -
        • center-pane - This renders the widget in the center of the +
        • center-pane - This renders the widget in the center of the layout in the same location that notes and splits appear.
        • -
        • note-detail-pane - This renders the widget with the +
        • note-detail-pane - This renders the widget with the note in the center pane. This means it can appear multiple times with splits.
        • -
        • right-pane - This renders the widget to the right of any opened +
        • right-pane - This renders the widget to the right of any opened notes.
        -

        Reload the application - one last time. When you click the button, a "Hello World!" message should - appear, confirming that your widget is fully functional.

        \ No newline at end of file +

        Reload the application one last time. + When you click the button, a "Hello World!" message should appear, confirming + that your widget is fully functional.

        \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Troubleshooting.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Troubleshooting.html index cc53090a9..11b6cdc3c 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Troubleshooting.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Troubleshooting.html @@ -1,4 +1,5 @@ -

        As Trilium is currently in beta, encountering bugs is to be expected.

        +

        While Trilium is actively maintained and stable, encountering bugs is + possible.

        General Quick Fix

        The first step in troubleshooting is often a restart.

        If you experience an UI issue, the frontend may have entered an inconsistent @@ -15,7 +16,7 @@ variable to reset the open tabs to a single specified note ID (e.g., root). In Linux, you can set it as follows:

        TRILIUM_START_NOTE_ID=root ./trilium

        Broken Script Prevents Application Startup

        -

        If a custom script causes Triliumto crash, and it is set as a startup +

        If a custom script causes Trilium to crash, and it is set as a startup script or in an active custom widget, start Triliumin "safe mode" to prevent any custom scripts from executing:

        TRILIUM_SAFE_MODE=true ./trilium

        Depending on your Trilium distribution, you may have pre-made scripts diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md index 53f35dbd2..1c1d6638b 100644 --- a/docs/ARCHITECTURE.md +++ b/docs/ARCHITECTURE.md @@ -1,741 +1,5 @@ -# Trilium Notes - Technical Architecture Documentation - -> **Version:** 0.99.3 -> **Last Updated:** November 2025 -> **Maintainer:** TriliumNext Team - -## Table of Contents - -1. [Introduction](#introduction) -2. [High-Level Architecture](#high-level-architecture) -3. [Monorepo Structure](#monorepo-structure) -4. [Core Architecture Patterns](#core-architecture-patterns) -5. [Data Layer](#data-layer) -6. [Caching System](#caching-system) -7. [Frontend Architecture](#frontend-architecture) -8. [Backend Architecture](#backend-architecture) -9. [API Architecture](#api-architecture) -10. [Build System](#build-system) -11. [Testing Strategy](#testing-strategy) -12. [Security Architecture](#security-architecture) -13. [Related Documentation](#related-documentation) - ---- - -## Introduction - -Trilium Notes is a hierarchical note-taking application built as a TypeScript monorepo. It supports multiple deployment modes (desktop, server, mobile web) and features advanced capabilities including synchronization, scripting, encryption, and rich content editing. - -### Key Characteristics - -- **Monorepo Architecture**: Uses pnpm workspaces for dependency management -- **Multi-Platform**: Desktop (Electron), Server (Node.js/Express), and Mobile Web -- **TypeScript-First**: Strong typing throughout the codebase -- **Plugin-Based**: Extensible architecture for note types and UI components -- **Offline-First**: Full functionality without network connectivity -- **Synchronization-Ready**: Built-in sync protocol for multi-device usage - -### Technology Stack - -- **Runtime**: Node.js (backend), Browser/Electron (frontend) -- **Language**: TypeScript, JavaScript -- **Database**: SQLite (better-sqlite3) -- **Build Tools**: Vite, ESBuild, pnpm -- **UI Framework**: Custom widget-based system -- **Rich Text**: CKEditor 5 (customized) -- **Code Editing**: CodeMirror 6 -- **Desktop**: Electron -- **Server**: Express.js - ---- - -## High-Level Architecture - -Trilium follows a **client-server architecture** even in desktop mode, where Electron runs both the backend server and frontend client within the same process. - -```mermaid -graph TB - subgraph Frontend - Widgets[Widgets
        System] - Froca[Froca
        Cache] - UIServices[UI
        Services] - end - - subgraph Backend["Backend Server"] - Express[Express
        Routes] - Becca[Becca
        Cache] - ScriptEngine[Script
        Engine] - Database[(SQLite
        Database)] - end - - Widgets -.-> API[WebSocket / REST API] - Froca -.-> API - UIServices -.-> API - API -.-> Express - API -.-> Becca - API -.-> ScriptEngine - Becca --> Database - Express --> Database - ScriptEngine --> Database -``` - -### Deployment Modes - -1. **Desktop Application** - - Electron wrapper running both frontend and backend - - Local SQLite database - - Full offline functionality - - Cross-platform (Windows, macOS, Linux) - -2. **Server Installation** - - Node.js server exposing web interface - - Multi-user capable - - Can sync with desktop clients - - Docker deployment supported - -3. **Mobile Web** - - Optimized responsive interface - - Accessed via browser - - Requires server installation - ---- - -## Monorepo Structure - -Trilium uses **pnpm workspaces** to manage its monorepo structure, with apps and packages clearly separated. - -``` -trilium/ -├── apps/ # Runnable applications -│ ├── client/ # Frontend application (shared by server & desktop) -│ ├── server/ # Node.js server with web interface -│ ├── desktop/ # Electron desktop application -│ ├── web-clipper/ # Browser extension for web content capture -│ ├── db-compare/ # Database comparison tool -│ ├── dump-db/ # Database export tool -│ ├── edit-docs/ # Documentation editing tool -│ ├── build-docs/ # Documentation build tool -│ └── website/ # Marketing website -│ -├── packages/ # Shared libraries -│ ├── commons/ # Shared interfaces and utilities -│ ├── ckeditor5/ # Custom rich text editor -│ ├── codemirror/ # Code editor customizations -│ ├── highlightjs/ # Syntax highlighting -│ ├── ckeditor5-admonition/ # CKEditor plugin: admonitions -│ ├── ckeditor5-footnotes/ # CKEditor plugin: footnotes -│ ├── ckeditor5-keyboard-marker/# CKEditor plugin: keyboard shortcuts -│ ├── ckeditor5-math/ # CKEditor plugin: math equations -│ ├── ckeditor5-mermaid/ # CKEditor plugin: diagrams -│ ├── express-partial-content/ # HTTP partial content middleware -│ ├── share-theme/ # Shared note theme -│ ├── splitjs/ # Split pane library -│ └── turndown-plugin-gfm/ # Markdown conversion -│ -├── docs/ # Documentation -├── scripts/ # Build and utility scripts -└── patches/ # Package patches (via pnpm) -``` - -### Package Dependencies - -The monorepo uses workspace protocol (`workspace:*`) for internal dependencies: - -``` -desktop → client → commons -server → client → commons -client → ckeditor5, codemirror, highlightjs -ckeditor5 → ckeditor5-* plugins -``` - ---- - -## Core Architecture Patterns - -### Three-Layer Cache System - -Trilium implements a sophisticated **three-tier caching system** to optimize performance and enable offline functionality: - -#### 1. Becca (Backend Cache) - -Located at: `apps/server/src/becca/` - -```typescript -// Becca caches all entities in memory -class Becca { - notes: Record - branches: Record - attributes: Record - attachments: Record - // ... other entity collections -} -``` - -**Responsibilities:** -- Server-side entity cache -- Maintains complete note tree in memory -- Handles entity relationships and integrity -- Provides fast lookups without database queries -- Manages entity lifecycle (create, update, delete) - -**Key Files:** -- `becca.ts` - Main cache instance -- `becca_loader.ts` - Loads entities from database -- `becca_service.ts` - Cache management operations -- `entities/` - Entity classes (BNote, BBranch, etc.) - -#### 2. Froca (Frontend Cache) - -Located at: `apps/client/src/services/froca.ts` - -```typescript -// Froca is a read-only mirror of backend data -class Froca { - notes: Record - branches: Record - attributes: Record - // ... other entity collections -} -``` - -**Responsibilities:** -- Frontend read-only cache -- Lazy loading of note tree -- Minimizes API calls -- Enables fast UI rendering -- Synchronizes with backend via WebSocket - -**Loading Strategy:** -- Initial load: root notes and immediate children -- Lazy load: notes loaded when accessed -- When note is loaded, all parent and child branches load -- Deleted entities tracked via missing branches - -#### 3. Shaca (Share Cache) - -Located at: `apps/server/src/share/` - -**Responsibilities:** -- Optimized cache for shared/published notes -- Handles public note access without authentication -- Performance-optimized for high-traffic scenarios -- Separate from main Becca to isolate concerns - -### Entity System - -Trilium's data model is based on five core entities: - -```mermaid -graph TD - Note[Note
        BNote] - Branch[Branch
        BBranch] - Attribute[Attribute
        BAttribute] - Revision[Revision
        BRevision] - Attachment[Attachment
        BAttachment] - - Note -->|linked by| Branch - Note -.->|metadata| Attribute - Branch -->|creates| Revision - Note -->|has| Attachment - - style Note fill:#e1f5ff - style Branch fill:#fff4e1 - style Attribute fill:#ffe1f5 - style Revision fill:#f5ffe1 - style Attachment fill:#ffe1e1 -``` - -#### Entity Definitions - -**1. BNote** (`apps/server/src/becca/entities/bnote.ts`) -- Represents a note with title, content, and metadata -- Type can be: text, code, file, image, canvas, mermaid, etc. -- Contains content via blob reference -- Can be protected (encrypted) -- Has creation and modification timestamps - -**2. BBranch** (`apps/server/src/becca/entities/bbranch.ts`) -- Represents parent-child relationship between notes -- Enables note cloning (multiple parents) -- Contains positioning information -- Has optional prefix for customization -- Tracks expansion state in tree - -**3. BAttribute** (`apps/server/src/becca/entities/battribute.ts`) -- Key-value metadata attached to notes -- Two types: labels (tags) and relations (links) -- Can be inheritable to child notes -- Used for search, organization, and scripting -- Supports promoted attributes (displayed prominently) - -**4. BRevision** (`apps/server/src/becca/entities/brevision.ts`) -- Stores historical versions of note content -- Automatic versioning on edits -- Retains title, type, and content -- Enables note history browsing and restoration - -**5. BAttachment** (`apps/server/src/becca/entities/battachment.ts`) -- File attachments linked to notes -- Has owner (note), role, and mime type -- Content stored in blobs -- Can be protected (encrypted) - -**6. BBlob** (`apps/server/src/becca/entities/bblob.ts`) -- Binary large object storage -- Stores actual note content and attachments -- Referenced by notes, revisions, and attachments -- Supports encryption for protected content - -### Widget-Based UI - -The frontend uses a **widget system** for modular, reusable UI components. - -Located at: `apps/client/src/widgets/` - -```typescript -// Widget Hierarchy -BasicWidget -├── NoteContextAwareWidget (responds to note changes) -│ ├── RightPanelWidget (displayed in right sidebar) -│ └── Type-specific widgets -├── Container widgets (tabs, ribbons, etc.) -└── Specialized widgets (search, calendar, etc.) -``` - -**Base Classes:** - -1. **BasicWidget** (`basic_widget.ts`) - - Base class for all UI components - - Lifecycle: construction → rendering → events → destruction - - Handles DOM manipulation - - Event subscription management - - Child widget management - -2. **NoteContextAwareWidget** (`note_context_aware_widget.ts`) - - Extends BasicWidget - - Automatically updates when active note changes - - Accesses current note context - - Used for note-dependent UI - -3. **RightPanelWidget** - - Widgets displayed in right sidebar - - Collapsible sections - - Context-specific tools and information - -**Type-Specific Widgets:** - -Located at: `apps/client/src/widgets/type_widgets/` - -Each note type has a dedicated widget: -- `text_type_widget.ts` - CKEditor integration -- `code_type_widget.ts` - CodeMirror integration -- `file_type_widget.ts` - File preview and download -- `image_type_widget.ts` - Image display and editing -- `canvas_type_widget.ts` - Excalidraw integration -- `mermaid_type_widget.ts` - Diagram rendering -- And more... - ---- - -## Data Layer - -### Database Schema - -Trilium uses **SQLite** as its database engine, managed via `better-sqlite3`. - -Schema location: `apps/server/src/assets/db/schema.sql` - -**Core Tables:** - -```sql --- Notes: Core content storage -notes ( - noteId, title, isProtected, type, mime, - blobId, isDeleted, dateCreated, dateModified -) - --- Branches: Tree relationships -branches ( - branchId, noteId, parentNoteId, notePosition, - prefix, isExpanded, isDeleted -) - --- Attributes: Metadata -attributes ( - attributeId, noteId, type, name, value, - position, isInheritable, isDeleted -) - --- Revisions: Version history -revisions ( - revisionId, noteId, type, mime, title, - blobId, utcDateLastEdited -) - --- Attachments: File attachments -attachments ( - attachmentId, ownerId, role, mime, title, - blobId, isProtected, isDeleted -) - --- Blobs: Binary content -blobs ( - blobId, content, dateModified -) - --- Options: Application settings -options ( - name, value, isSynced -) - --- Entity Changes: Sync tracking -entity_changes ( - entityName, entityId, hash, changeId, - isSynced, utcDateChanged -) -``` - -### Data Access Patterns - -**Direct SQL:** -```typescript -// apps/server/src/services/sql.ts -sql.getRows("SELECT * FROM notes WHERE type = ?", ['text']) -sql.execute("UPDATE notes SET title = ? WHERE noteId = ?", [title, noteId]) -``` - -**Through Becca:** -```typescript -// Recommended approach - uses cache -const note = becca.getNote('noteId') -note.title = 'New Title' -note.save() -``` - -**Through Froca (Frontend):** -```typescript -// Read-only access -const note = froca.getNote('noteId') -console.log(note.title) -``` - -### Database Migrations - -Migration system: `apps/server/src/migrations/` - -- Sequential numbered files (e.g., `XXXX_migration_name.sql`) -- Automatic execution on version upgrade -- Schema version tracked in options table -- Both SQL and JavaScript migrations supported - ---- - -## Caching System - -### Cache Initialization - -**Backend (Becca):** -```typescript -// On server startup -await becca_loader.load() // Loads all entities into memory -becca.loaded = true -``` - -**Frontend (Froca):** -```typescript -// On app initialization -await froca.loadInitialTree() // Loads root and visible notes -// Lazy load on demand -const note = await froca.getNote(noteId) // Triggers load if not cached -``` - -### Cache Invalidation - -**Server-Side:** -- Entities automatically update cache on save -- WebSocket broadcasts changes to all clients -- Synchronization updates trigger cache refresh - -**Client-Side:** -- WebSocket listeners update Froca -- Manual reload via `froca.loadSubTree(noteId)` -- Full reload on protected session changes - -### Cache Consistency - -**Entity Change Tracking:** -```typescript -// Every entity modification tracked -entity_changes ( - entityName: 'notes', - entityId: 'note123', - hash: 'abc...', - changeId: 'change456', - utcDateChanged: '2025-11-02...' -) -``` - -**Sync Protocol:** -1. Client requests changes since last sync -2. Server returns entity_changes records -3. Client applies changes to Froca -4. Client sends local changes to server -5. Server updates Becca and database - ---- - -## Frontend Architecture - -### Application Entry Point - -**Desktop:** `apps/client/src/desktop.ts` -**Web:** `apps/client/src/index.ts` - -### Service Layer - -Located at: `apps/client/src/services/` - -Key services: -- `froca.ts` - Frontend cache -- `server.ts` - API communication -- `ws.ts` - WebSocket connection -- `tree_service.ts` - Note tree management -- `note_context.ts` - Active note tracking -- `protected_session.ts` - Encryption key management -- `link.ts` - Note linking and navigation -- `export.ts` - Note export functionality - -### UI Components - -**Main Layout:** - -```mermaid -graph TD - subgraph TriliumUI[" "] - TitleBar[Title Bar] - - subgraph MainArea[" "] - NoteTree[Note Tree] - NoteDetail[Note Detail
        Editor] - RightPanel[Right Panel
        Info, Links] - end - - StatusBar[Status Bar] - end - - TitleBar -.-> MainArea - MainArea -.-> StatusBar - - style TitleBar fill:#e1f5ff - style NoteTree fill:#fff4e1 - style NoteDetail fill:#f5ffe1 - style RightPanel fill:#ffe1f5 - style StatusBar fill:#e1f5ff -``` - -**Component Locations:** -- `widgets/containers/` - Layout containers -- `widgets/buttons/` - Toolbar buttons -- `widgets/dialogs/` - Modal dialogs -- `widgets/ribbon_widgets/` - Tab widgets -- `widgets/type_widgets/` - Note type editors - -### Event System - -**Application Events:** -```typescript -// Subscribe to events -appContext.addBeforeUnloadListener(() => { - // Cleanup before page unload -}) - -// Trigger events -appContext.trigger('noteTreeLoaded') -``` - -**Note Context Events:** -```typescript -// NoteContextAwareWidget automatically receives: -- noteSwitched() -- noteChanged() -- refresh() -``` - -### State Management - -Trilium uses **custom state management** rather than Redux/MobX: - -- `note_context.ts` - Active note and context -- `froca.ts` - Entity cache -- Component local state -- URL parameters for shareable state - ---- - -## Backend Architecture - -### Application Entry Point - -Location: `apps/server/src/main.ts` - -**Startup Sequence:** -1. Load configuration -2. Initialize database -3. Run migrations -4. Load Becca cache -5. Start Express server -6. Initialize WebSocket -7. Start scheduled tasks - -### Service Layer - -Located at: `apps/server/src/services/` - -**Core Services:** - -- **Notes Management** - - `notes.ts` - CRUD operations - - `note_contents.ts` - Content handling - - `note_types.ts` - Type-specific logic - - `cloning.ts` - Note cloning/multi-parent - -- **Tree Operations** - - `tree.ts` - Tree structure management - - `branches.ts` - Branch operations - - `consistency_checks.ts` - Tree integrity - -- **Search** - - `search/search.ts` - Main search engine - - `search/expressions/` - Search expression parsing - - `search/services/` - Search utilities - -- **Sync** - - `sync.ts` - Synchronization protocol - - `sync_update.ts` - Update handling - - `sync_mutex.ts` - Concurrency control - -- **Scripting** - - `backend_script_api.ts` - Backend script API - - `script_context.ts` - Script execution context - -- **Import/Export** - - `import/` - Various import formats - - `export/` - Export to different formats - - `zip.ts` - Archive handling - -- **Security** - - `encryption.ts` - Note encryption - - `protected_session.ts` - Session management - - `password.ts` - Password handling - -### Route Structure - -Located at: `apps/server/src/routes/` - -``` -routes/ -├── index.ts # Route registration -├── api/ # REST API endpoints -│ ├── notes.ts -│ ├── branches.ts -│ ├── attributes.ts -│ ├── search.ts -│ ├── login.ts -│ └── ... -└── custom/ # Special endpoints - ├── setup.ts - ├── share.ts - └── ... -``` - -**API Endpoint Pattern:** -```typescript -router.get('/api/notes/:noteId', (req, res) => { - const noteId = req.params.noteId - const note = becca.getNote(noteId) - res.json(note.getPojoWithContent()) -}) -``` - -### Middleware - -Key middleware components: -- `auth.ts` - Authentication -- `csrf.ts` - CSRF protection -- `request_context.ts` - Request-scoped data -- `error_handling.ts` - Error responses - ---- - ## API Architecture -### Internal API - -**REST Endpoints** (`/api/*`) - -Used by the frontend for all operations: - -**Note Operations:** -- `GET /api/notes/:noteId` - Get note -- `POST /api/notes/:noteId/content` - Update content -- `PUT /api/notes/:noteId` - Update metadata -- `DELETE /api/notes/:noteId` - Delete note - -**Tree Operations:** -- `GET /api/tree` - Get note tree -- `POST /api/branches` - Create branch -- `PUT /api/branches/:branchId` - Update branch -- `DELETE /api/branches/:branchId` - Delete branch - -**Search:** -- `GET /api/search?query=...` - Search notes -- `GET /api/search-note/:noteId` - Execute search note - -### ETAPI (External API) - -Located at: `apps/server/src/etapi/` - -**Purpose:** Third-party integrations and automation - -**Authentication:** Token-based (ETAPI tokens) - -**OpenAPI Spec:** Auto-generated - -**Key Endpoints:** -- `/etapi/notes` - Note CRUD -- `/etapi/branches` - Branch management -- `/etapi/attributes` - Attribute operations -- `/etapi/attachments` - Attachment handling - -**Example:** -```bash -curl -H "Authorization: YOUR_TOKEN" \ - https://trilium.example.com/etapi/notes/noteId -``` - -### WebSocket API - -Located at: `apps/server/src/services/ws.ts` - -**Purpose:** Real-time updates and synchronization - -**Protocol:** WebSocket (Socket.IO-like custom protocol) - -**Message Types:** -- `sync` - Synchronization request -- `entity-change` - Entity update notification -- `refresh-tree` - Tree structure changed -- `open-note` - Open note in UI - -**Client Subscribe:** -```typescript -ws.subscribe('entity-change', (data) => { - froca.processEntityChange(data) -}) -``` - ---- - ## Build System ### Package Manager: pnpm @@ -1013,9 +277,3 @@ For historical context on major architectural decisions, see: - Adoption of pnpm workspaces - CKEditor 5 upgrade - Entity change tracking system - ---- - -**Document Maintainer:** TriliumNext Team -**Last Review:** November 2025 -**Next Review:** When major architectural changes occur diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index e75df02a9..a871c66f5 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -124,18 +124,687 @@ }, { "isClone": false, - "noteId": "zdQzavvHDl1k", + "noteId": "MhwWMgxwDTZL", "notePath": [ "jdjRLhLV3TtI", - "zdQzavvHDl1k" + "MhwWMgxwDTZL" ], - "title": "Documentation", + "title": "Architecture", "notePosition": 280, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "architecture", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-arch", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Architecture.md", + "attachments": [], + "dirFileName": "Architecture", + "children": [ + { + "isClone": false, + "noteId": "2DJZgzpTJ078", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "2DJZgzpTJ078" + ], + "title": "Client-server architecture", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "attachments": [], + "dirFileName": "Client-server architecture", + "children": [ + { + "isClone": false, + "noteId": "dsMq2EIOMOBU", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "2DJZgzpTJ078", + "dsMq2EIOMOBU" + ], + "title": "Frontend", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Frontend.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "tsswRlmHEnYW", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "2DJZgzpTJ078", + "tsswRlmHEnYW" + ], + "title": "Backend", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Backend.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "pRZhrVIGCbMu", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu" + ], + "title": "Database", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "database", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Database.md", + "attachments": [], + "dirFileName": "Database", + "children": [ + { + "isClone": false, + "noteId": "vNMojjUN76jc", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc" + ], + "title": "Database structure", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "tables", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "attachments": [], + "dirFileName": "Database structure", + "children": [ + { + "isClone": false, + "noteId": "e6GnYOXeIWjg", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "e6GnYOXeIWjg" + ], + "title": "attachments", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 40 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "attachments", + "isInheritable": false, + "position": 50 + } + ], + "format": "markdown", + "dataFileName": "attachments.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "ciL84vNBNi9y", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "ciL84vNBNi9y" + ], + "title": "attributes", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "attributes", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "attributes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VIcWnKGs0sMh", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "VIcWnKGs0sMh" + ], + "title": "blobs", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "blobs", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "blobs.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "GskLPkgY5n6E", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "GskLPkgY5n6E" + ], + "title": "branches", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "h8AsuFjSD4fB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "branches", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "branches.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "ohhExR078MPU", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "ohhExR078MPU" + ], + "title": "entity_changes", + "notePosition": 51, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "entity-changes", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "entity_changes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "bRqbIg633nCs", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "bRqbIg633nCs" + ], + "title": "etapi_tokens", + "notePosition": 52, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "etapi-tokens", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "etapi_tokens.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "DSkl8C325tEC", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "DSkl8C325tEC" + ], + "title": "notes", + "notePosition": 53, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "tM3rIZQzlum4", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "notes", + "isInheritable": false, + "position": 40 + } + ], + "format": "markdown", + "dataFileName": "notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "4oeftEmy77Bt", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "4oeftEmy77Bt" + ], + "title": "options", + "notePosition": 54, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "options", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "options.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "VyFirdgAOoh5", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "VyFirdgAOoh5" + ], + "title": "recent_notes", + "notePosition": 55, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "recent-notes", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "recent_notes.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "s7ZBiaJVNumK", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "pRZhrVIGCbMu", + "vNMojjUN76jc", + "s7ZBiaJVNumK" + ], + "title": "revisions", + "notePosition": 56, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "DSkl8C325tEC", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "VIcWnKGs0sMh", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "UvXpeSqfYc6d", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-table", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "shareAlias", + "value": "revisions", + "isInheritable": false, + "position": 50 + } + ], + "format": "markdown", + "dataFileName": "revisions.md", + "attachments": [] + } + ] + } + ] + }, + { + "isClone": false, + "noteId": "Wxn82Em8B7U5", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "Wxn82Em8B7U5" + ], + "title": "API", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "API.md", + "attachments": [] + } + ] + }, + { + "isClone": false, + "noteId": "zdQzavvHDl1k", + "notePath": [ + "jdjRLhLV3TtI", + "zdQzavvHDl1k" + ], + "title": "Documentation", + "notePosition": 290, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "T2W7WCZrYZBU", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "shareAlias", @@ -149,13 +818,6 @@ "value": "bx bx-book-open", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "T2W7WCZrYZBU", - "isInheritable": false, - "position": 40 } ], "format": "markdown", @@ -200,7 +862,7 @@ "a0mkxxB4Uvbf" ], "title": "Building", - "notePosition": 290, + "notePosition": 300, "prefix": null, "isExpanded": false, "type": "text", @@ -415,7 +1077,7 @@ "name": "internalLink", "value": "zdQzavvHDl1k", "isInheritable": false, - "position": 20 + "position": 10 }, { "type": "label", @@ -439,7 +1101,7 @@ "qalhAaJoQ7AN" ], "title": "Dependencies", - "notePosition": 310, + "notePosition": 320, "prefix": null, "isExpanded": false, "type": "text", @@ -682,8 +1344,8 @@ "jdjRLhLV3TtI", "yeqU0zo0ZQ83" ], - "title": "Architecture", - "notePosition": 320, + "title": "Concepts", + "notePosition": 330, "prefix": null, "isExpanded": false, "type": "text", @@ -692,14 +1354,14 @@ { "type": "label", "name": "shareAlias", - "value": "architecture", + "value": "concepts", "isInheritable": false, "position": 10 }, { "type": "label", "name": "iconClass", - "value": "bx bx-arch", + "value": "bx bx-sitemap", "isInheritable": false, "position": 20 }, @@ -713,7 +1375,7 @@ ], "format": "markdown", "attachments": [], - "dirFileName": "Architecture", + "dirFileName": "Concepts", "children": [ { "isClone": false, @@ -776,6 +1438,33 @@ "dataFileName": "Branch prefixes.md", "attachments": [] }, + { + "isClone": false, + "noteId": "6Yms5izbd0GF", + "notePath": [ + "jdjRLhLV3TtI", + "yeqU0zo0ZQ83", + "6Yms5izbd0GF" + ], + "title": "Cache", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-microchip", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Cache.md", + "attachments": [] + }, { "isClone": false, "noteId": "oqg9OpK8xfcm", @@ -785,7 +1474,7 @@ "oqg9OpK8xfcm" ], "title": "CI", - "notePosition": 30, + "notePosition": 40, "prefix": null, "isExpanded": false, "type": "text", @@ -857,511 +1546,6 @@ } ] }, - { - "isClone": false, - "noteId": "vNMojjUN76jc", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc" - ], - "title": "Database structure", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "shareAlias", - "value": "database", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-data", - "isInheritable": false, - "position": 30 - } - ], - "format": "markdown", - "attachments": [], - "dirFileName": "Database structure", - "children": [ - { - "isClone": false, - "noteId": "e6GnYOXeIWjg", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "e6GnYOXeIWjg" - ], - "title": "attachments", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 40 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "attachments", - "isInheritable": false, - "position": 50 - } - ], - "format": "markdown", - "dataFileName": "attachments.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "ciL84vNBNi9y", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "ciL84vNBNi9y" - ], - "title": "attributes", - "notePosition": 30, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "attributes", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "attributes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VIcWnKGs0sMh", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "VIcWnKGs0sMh" - ], - "title": "blobs", - "notePosition": 40, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "blobs", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "blobs.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "GskLPkgY5n6E", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "GskLPkgY5n6E" - ], - "title": "branches", - "notePosition": 50, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "h8AsuFjSD4fB", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "branches", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "branches.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "ohhExR078MPU", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "ohhExR078MPU" - ], - "title": "entity_changes", - "notePosition": 51, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "entity-changes", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "entity_changes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "bRqbIg633nCs", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "bRqbIg633nCs" - ], - "title": "etapi_tokens", - "notePosition": 52, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "etapi-tokens", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "etapi_tokens.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "DSkl8C325tEC", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "DSkl8C325tEC" - ], - "title": "notes", - "notePosition": 53, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "tM3rIZQzlum4", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "notes", - "isInheritable": false, - "position": 40 - } - ], - "format": "markdown", - "dataFileName": "notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "4oeftEmy77Bt", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "4oeftEmy77Bt" - ], - "title": "options", - "notePosition": 54, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "options", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "options.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "VyFirdgAOoh5", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "VyFirdgAOoh5" - ], - "title": "recent_notes", - "notePosition": 55, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "recent-notes", - "isInheritable": false, - "position": 20 - } - ], - "format": "markdown", - "dataFileName": "recent_notes.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "s7ZBiaJVNumK", - "notePath": [ - "jdjRLhLV3TtI", - "yeqU0zo0ZQ83", - "vNMojjUN76jc", - "s7ZBiaJVNumK" - ], - "title": "revisions", - "notePosition": 56, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [ - { - "type": "relation", - "name": "internalLink", - "value": "DSkl8C325tEC", - "isInheritable": false, - "position": 10 - }, - { - "type": "relation", - "name": "internalLink", - "value": "VIcWnKGs0sMh", - "isInheritable": false, - "position": 20 - }, - { - "type": "relation", - "name": "internalLink", - "value": "UvXpeSqfYc6d", - "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-table", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "shareAlias", - "value": "revisions", - "isInheritable": false, - "position": 50 - } - ], - "format": "markdown", - "dataFileName": "revisions.md", - "attachments": [] - } - ] - }, { "isClone": false, "noteId": "tM3rIZQzlum4", @@ -1371,7 +1555,7 @@ "tM3rIZQzlum4" ], "title": "Deleted notes", - "notePosition": 50, + "notePosition": 70, "prefix": null, "isExpanded": false, "type": "text", @@ -1405,7 +1589,7 @@ "oLhKpfi2kGON" ], "title": "Demo document", - "notePosition": 60, + "notePosition": 80, "prefix": null, "isExpanded": false, "type": "text", @@ -1430,6 +1614,40 @@ "dataFileName": "Demo document.md", "attachments": [] }, + { + "isClone": false, + "noteId": "TiUll0Osoaz6", + "notePath": [ + "jdjRLhLV3TtI", + "yeqU0zo0ZQ83", + "TiUll0Osoaz6" + ], + "title": "Entities", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "entities", + "isInheritable": false, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bxs-note", + "isInheritable": false, + "position": 30 + } + ], + "format": "markdown", + "dataFileName": "Entities.md", + "attachments": [] + }, { "isClone": false, "noteId": "UzRirf46Xi46", @@ -1439,7 +1657,7 @@ "UzRirf46Xi46" ], "title": "Hidden notes", - "notePosition": 80, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -1473,7 +1691,7 @@ "m2W35hwSDUeh" ], "title": "Icons", - "notePosition": 90, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", @@ -1514,7 +1732,7 @@ "TLXJwBDo8Rdv" ], "title": "Internationalisation / Translations", - "notePosition": 100, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -1649,7 +1867,7 @@ "Usiyzn9C4WFv" ], "title": "Launchers", - "notePosition": 110, + "notePosition": 130, "prefix": null, "isExpanded": false, "type": "text", @@ -1676,7 +1894,7 @@ "qjQNyaYXSNWu" ], "title": "Note Revisions", - "notePosition": 120, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -1710,7 +1928,7 @@ "7RBJMqVz2EsJ" ], "title": "Note Types", - "notePosition": 130, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -2044,7 +2262,7 @@ "6dC7ha5vjqqS" ], "title": "Options", - "notePosition": 140, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -2109,7 +2327,7 @@ "W0msUwLxm40d" ], "title": "Printing and exporting to PDF", - "notePosition": 150, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -2150,7 +2368,7 @@ "UvXpeSqfYc6d" ], "title": "Protected entities", - "notePosition": 160, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -2205,7 +2423,7 @@ "vphziLmQeQHY" ], "title": "Share", - "notePosition": 170, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -2239,7 +2457,7 @@ "n9wYW9nUTynV" ], "title": "Synchronisation", - "notePosition": 180, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -2303,7 +2521,7 @@ "k7RavjuXQt8z" ], "title": "Syntax highlighting", - "notePosition": 190, + "notePosition": 210, "prefix": null, "isExpanded": false, "type": "text", @@ -2337,7 +2555,7 @@ "7BCukQTCm7fv" ], "title": "Themes", - "notePosition": 200, + "notePosition": 220, "prefix": null, "isExpanded": false, "type": "text", @@ -2372,7 +2590,7 @@ "YjerxU7Aii8X" ], "title": "Troubleshooting", - "notePosition": 360, + "notePosition": 370, "prefix": null, "isExpanded": false, "type": "text", @@ -2461,12 +2679,19 @@ "dtKC3FmoWOrv" ], "title": "Testing", - "notePosition": 380, + "notePosition": 390, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "w6gMvKh0UAVT", + "isInheritable": false, + "position": 10 + }, { "type": "label", "name": "shareAlias", @@ -2480,13 +2705,6 @@ "value": "bx bxs-eyedropper", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "w6gMvKh0UAVT", - "isInheritable": false, - "position": 40 } ], "format": "markdown", diff --git a/docs/Developer Guide/Developer Guide/Architecture.md b/docs/Developer Guide/Developer Guide/Architecture.md new file mode 100644 index 000000000..a11d27274 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture.md @@ -0,0 +1,118 @@ +# Architecture +Trilium Notes is a hierarchical note-taking application built as a TypeScript monorepo. It supports multiple deployment modes (desktop, server, mobile web) and features advanced capabilities including synchronization, scripting, encryption, and rich content editing. + +### Key Characteristics + +* **Monorepo Architecture**: Uses pnpm workspaces for dependency management +* **Multi-Platform**: Desktop (Electron), Server (Node.js/Express), and Mobile Web +* **TypeScript-First**: Strong typing throughout the codebase +* **Plugin-Based**: Extensible architecture for note types and UI components +* **Offline-First**: Full functionality without network connectivity +* **Synchronization-Ready**: Built-in sync protocol for multi-device usage + +### Technology Stack + +* **Runtime**: Node.js (backend), Browser/Electron (frontend) +* **Language**: TypeScript, JavaScript +* **Database**: SQLite (better-sqlite3) +* **Build Tools**: Vite, ESBuild, pnpm +* **UI Framework**: Custom widget-based system (vanilla HTML, CSS & JavaScript + jQuery), in the process of converting to React/Preact. +* **Rich Text**: CKEditor 5 (customized) +* **Code Editing**: CodeMirror 6 +* **Desktop**: Electron +* **Server**: Express.js + +## Main architecture + +Trilium follows a **client-server architecture** even in desktop mode, where Electron runs both the backend server and frontend client within the same process. + +```mermaid +graph TB + subgraph Frontend + Widgets[Widgets
        System] + Froca[Froca
        Cache] + UIServices[UI
        Services] + end + + subgraph Backend["Backend Server"] + Express[Express
        Routes] + Becca[Becca
        Cache] + ScriptEngine[Script
        Engine] + Database[(SQLite
        Database)] + end + + Widgets -.-> API[WebSocket & REST API] + Froca -.-> API + UIServices -.-> API + API -.-> Express + API -.-> Becca + API -.-> ScriptEngine + Becca --> Database + Express --> Database + ScriptEngine --> Database +``` + +### Deployment Modes + +1. **Desktop Application** + * Electron wrapper running both frontend and backend + * Local SQLite database + * Full offline functionality + * Cross-platform (Windows, macOS, Linux) +2. **Server Installation** + * Node.js server exposing web interface + * Multi-user capable + * Can sync with desktop clients + * Docker deployment supported +3. **Mobile Web** + * Optimized responsive interface + * Accessed via browser + * Requires server installation + +## Monorepo Structure + +Trilium uses **pnpm workspaces** to manage its monorepo structure, with apps and packages clearly separated. + +``` +trilium/ +├── apps/ # Runnable applications +│ ├── client/ # Frontend application (shared by server & desktop) +│ ├── server/ # Node.js server with web interface +│ ├── desktop/ # Electron desktop application +│ ├── web-clipper/ # Browser extension for web content capture +│ ├── db-compare/ # Database comparison tool +│ ├── dump-db/ # Database export tool +│ ├── edit-docs/ # Documentation editing tool +│ ├── build-docs/ # Documentation build tool +│ └── website/ # Marketing website +│ +├── packages/ # Shared libraries +│ ├── commons/ # Shared interfaces and utilities +│ ├── ckeditor5/ # Custom rich text editor +│ ├── codemirror/ # Code editor customizations +│ ├── highlightjs/ # Syntax highlighting +│ ├── ckeditor5-admonition/ # CKEditor plugin: admonitions +│ ├── ckeditor5-footnotes/ # CKEditor plugin: footnotes +│ ├── ckeditor5-keyboard-marker/# CKEditor plugin: keyboard shortcuts +│ ├── ckeditor5-math/ # CKEditor plugin: math equations +│ ├── ckeditor5-mermaid/ # CKEditor plugin: diagrams +│ ├── express-partial-content/ # HTTP partial content middleware +│ ├── share-theme/ # Shared note theme +│ ├── splitjs/ # Split pane library +│ └── turndown-plugin-gfm/ # Markdown conversion +│ +├── docs/ # Documentation +├── scripts/ # Build and utility scripts +└── patches/ # Package patches (via pnpm) +``` + +### Package Dependencies + +The monorepo uses workspace protocol (`workspace:*`) for internal dependencies: + +``` +desktop → client → commons +server → client → commons +client → ckeditor5, codemirror, highlightjs +ckeditor5 → ckeditor5-* plugins +``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/API.md b/docs/Developer Guide/Developer Guide/Architecture/API.md new file mode 100644 index 000000000..57fc8c164 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/API.md @@ -0,0 +1,72 @@ +# API +### Internal API + +**REST Endpoints** (`/api/*`) + +Used by the frontend for all operations: + +**Note Operations:** + +* `GET /api/notes/:noteId` - Get note +* `POST /api/notes/:noteId/content` - Update content +* `PUT /api/notes/:noteId` - Update metadata +* `DELETE /api/notes/:noteId` - Delete note + +**Tree Operations:** + +* `GET /api/tree` - Get note tree +* `POST /api/branches` - Create branch +* `PUT /api/branches/:branchId` - Update branch +* `DELETE /api/branches/:branchId` - Delete branch + +**Search:** + +* `GET /api/search?query=...` - Search notes +* `GET /api/search-note/:noteId` - Execute search note + +### ETAPI (External API) + +Located at: `apps/server/src/etapi/` + +**Purpose:** Third-party integrations and automation + +**Authentication:** Token-based (ETAPI tokens) + +**OpenAPI Spec:** Auto-generated + +**Key Endpoints:** + +* `/etapi/notes` - Note CRUD +* `/etapi/branches` - Branch management +* `/etapi/attributes` - Attribute operations +* `/etapi/attachments` - Attachment handling + +**Example:** + +```sh +curl -H "Authorization: YOUR_TOKEN" \ + https://trilium.example.com/etapi/notes/noteId +``` + +### WebSocket API + +Located at: `apps/server/src/services/ws.ts` + +**Purpose:** Real-time updates and synchronization + +**Protocol:** WebSocket (Socket.IO-like custom protocol) + +**Message Types:** + +* `sync` - Synchronization request +* `entity-change` - Entity update notification +* `refresh-tree` - Tree structure changed +* `open-note` - Open note in UI + +**Client Subscribe:** + +```typescript +ws.subscribe('entity-change', (data) => { + froca.processEntityChange(data) +}) +``` \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md b/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md new file mode 100644 index 000000000..df0ddf21d --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md @@ -0,0 +1,88 @@ +# Backend +### Application Entry Point + +Location: `apps/server/src/main.ts` + +**Startup Sequence:** + +1. Load configuration +2. Initialize database +3. Run migrations +4. Load Becca cache +5. Start Express server +6. Initialize WebSocket +7. Start scheduled tasks + +### Service Layer + +Located at: `apps/server/src/services/` + +**Core Services:** + +* **Notes Management** + * `notes.ts` - CRUD operations + * `note_contents.ts` - Content handling + * `note_types.ts` - Type-specific logic + * `cloning.ts` - Note cloning/multi-parent +* **Tree Operations** + * `tree.ts` - Tree structure management + * `branches.ts` - Branch operations + * `consistency_checks.ts` - Tree integrity +* **Search** + * `search/search.ts` - Main search engine + * `search/expressions/` - Search expression parsing + * `search/services/` - Search utilities +* **Sync** + * `sync.ts` - Synchronization protocol + * `sync_update.ts` - Update handling + * `sync_mutex.ts` - Concurrency control +* **Scripting** + * `backend_script_api.ts` - Backend script API + * `script_context.ts` - Script execution context +* **Import/Export** + * `import/` - Various import formats + * `export/` - Export to different formats + * `zip.ts` - Archive handling +* **Security** + * `encryption.ts` - Note encryption + * `protected_session.ts` - Session management + * `password.ts` - Password handling + +### Route Structure + +Located at: `apps/server/src/routes/` + +``` +routes/ +├── index.ts # Route registration +├── api/ # REST API endpoints +│ ├── notes.ts +│ ├── branches.ts +│ ├── attributes.ts +│ ├── search.ts +│ ├── login.ts +│ └── ... +└── custom/ # Special endpoints + ├── setup.ts + ├── share.ts + └── ... +``` + +**API Endpoint Pattern:** + +```typescript +router.get('/api/notes/:noteId', (req, res) => { + const noteId = req.params.noteId + const note = becca.getNote(noteId) + res.json(note.getPojoWithContent()) +}) +``` + +### Middleware + +Key middleware components: + +* `auth.ts` - Authentication +* `csrf.ts` - CSRF protection +* `request_context.ts` - Request-scoped data +* `error_handling.ts` - Error responses \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md b/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md new file mode 100644 index 000000000..9ef0acbdf --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md @@ -0,0 +1,61 @@ +# Frontend +### Application Entry Point + +**Desktop:** `apps/client/src/desktop.ts` **Web:** `apps/client/src/index.ts` + +### Service Layer + +Located at: `apps/client/src/services/` + +Key services: + +* `froca.ts` - Frontend cache +* `server.ts` - API communication +* `ws.ts` - WebSocket connection +* `tree_service.ts` - Note tree management +* `note_context.ts` - Active note tracking +* `protected_session.ts` - Encryption key management +* `link.ts` - Note linking and navigation +* `export.ts` - Note export functionality + +### UI Components + +**Component Locations:** + +* `widgets/containers/` - Layout containers +* `widgets/buttons/` - Toolbar buttons +* `widgets/dialogs/` - Modal dialogs +* `widgets/ribbon_widgets/` - Tab widgets +* `widgets/type_widgets/` - Note type editors + +### Event System + +**Application Events:** + +```typescript +// Subscribe to events +appContext.addBeforeUnloadListener(() => { + // Cleanup before page unload +}) + +// Trigger events +appContext.trigger('noteTreeLoaded') +``` + +**Note Context Events:** + +```typescript +// NoteContextAwareWidget automatically receives: +- noteSwitched() +- noteChanged() +- refresh() +``` + +### State Management + +Trilium uses **custom state management** rather than Redux/MobX: + +* `note_context.ts` - Active note and context +* `froca.ts` - Entity cache +* Component local state +* URL parameters for shareable state \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database.md b/docs/Developer Guide/Developer Guide/Architecture/Database.md new file mode 100644 index 000000000..bb80ccdb1 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Database.md @@ -0,0 +1,40 @@ +# Database +Trilium uses **SQLite** as its database engine, managed via `better-sqlite3`. + +Schema location: `apps/server/src/assets/db/schema.sql` + +### Data Access Patterns + +**Direct SQL:** + +```typescript +// apps/server/src/services/sql.ts +sql.getRows("SELECT * FROM notes WHERE type = ?", ['text']) +sql.execute("UPDATE notes SET title = ? WHERE noteId = ?", [title, noteId]) +``` + +**Through Becca:** + +```typescript +// Recommended approach - uses cache +const note = becca.getNote('noteId') +note.title = 'New Title' +note.save() +``` + +**Through Froca (Frontend):** + +```typescript +// Read-only access +const note = froca.getNote('noteId') +console.log(note.title) +``` + +### Database Migrations + +* The migration system is in `server/src/migrations/migrations.ts` (actual definitions) and `src/services/migration.ts`. +* Both SQLite and TypeScript migrations are supported. + * Small migrations are contained directly in `src/migrations/migrations.ts`. + * Bigger TypeScript migrations are sequentially numbered (e.g., `XXXX_migration_name.ts`) and dynamically imported by `migrations.ts`. +* Automatic execution on version upgrade. +* Schema version tracked in options table. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/attachments.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attachments.md similarity index 90% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/attachments.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attachments.md index 4312832dd..09ae80d4b 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/attachments.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attachments.md @@ -6,11 +6,11 @@ | `role` | Text | Non-null | | The role of the attachment: `image` for images that are attached to a note, `file` for uploaded files. | | `mime` | Text | Non-null | | The MIME type of the attachment (e.g. `image/png`) | | `title` | Text | Non-null | | The title of the attachment. | -| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../Protected%20entities.md), `0` otherwise. | +| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../../../Concepts/Protected%20entities.md), `0` otherwise. | | `position` | Integer | Non-null | 0 | Not sure where the position is relevant for attachments (saw it with values of 10 and 0). | | `blobId` | Text | Nullable | `null` | The corresponding `blobId` from the blobs table. | | `dateModified` | Text | Non-null | | Localized modification date (e.g. `2023-11-08 18:43:44.204+0200`) | | `utcDateModified` | Text | Non-null | | Modification date in UTC format (e.g. `2023-11-08 16:43:44.204Z`) | | `utcDateScheduledForErasure` | Text | Nullable | `null` | | -| `isDeleted` | Integer | Non-null | | `1` if the entity is [deleted](../Deleted%20notes.md), `0` otherwise. | +| `isDeleted` | Integer | Non-null | | `1` if the entity is [deleted](../../../Concepts/Deleted%20notes.md), `0` otherwise. | | `deleteId` | Text | Nullable | `null` | | \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/attributes.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attributes.md similarity index 84% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/attributes.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attributes.md index 959073ec8..f1cbb99c4 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/attributes.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/attributes.md @@ -1,2 +1,2 @@ # attributes -

      Column NameData TypeNullityDefault valueDescription
      attributeIdTextNon-null Unique Id of the attribute (e.g. qhC1vzU4nwSE), can also have a special unique ID for Special notes (e.g. _lbToday_liconClass).
      noteIdTextNon-null The ID of the note this atttribute belongs to
      typeTextNon-null The type of attribute (label or relation).
      nameTextNon-null The name/key of the attribute.
      valueTextNon-null""
      • For label attributes, a free-form value of the attribute.
      • For relation attributes, the ID of the note the relation is pointing to.
      positionIntegerNon-null0The position of the attribute compared to the other attributes. Some predefined attributes such as originalFileName have a value of 1000.
      utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
      isDeletedIntegerNon-null 1 if the entity is deleted, 0 otherwise.
      deleteIdTextNullablenull 
      isInheritableIntegerNullable0 
      \ No newline at end of file +
      Column NameData TypeNullityDefault valueDescription
      attributeIdTextNon-null Unique Id of the attribute (e.g. qhC1vzU4nwSE), can also have a special unique ID for Special notes (e.g. _lbToday_liconClass).
      noteIdTextNon-null The ID of the note this atttribute belongs to
      typeTextNon-null The type of attribute (label or relation).
      nameTextNon-null The name/key of the attribute.
      valueTextNon-null""
      • For label attributes, a free-form value of the attribute.
      • For relation attributes, the ID of the note the relation is pointing to.
      positionIntegerNon-null0The position of the attribute compared to the other attributes. Some predefined attributes such as originalFileName have a value of 1000.
      utcDateModifiedTextNon-null Modification date in UTC format (e.g. 2023-11-08 16:43:44.204Z)
      isDeletedIntegerNon-null 1 if the entity is deleted, 0 otherwise.
      deleteIdTextNullablenull 
      isInheritableIntegerNullable0 
      \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/blobs.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/blobs.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/blobs.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/blobs.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/branches.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/branches.md similarity index 82% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/branches.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/branches.md index d9b12dea5..18cf29090 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/branches.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/branches.md @@ -5,8 +5,8 @@ | `noteId` | Text | Non-null | | The ID of the [note](notes.md). | | `parentNoteId` | Text | Non-null | | The ID of the parent [note](notes.md) the note belongs to. | | `notePosition` | Integer | Non-null | | The position of the branch within the same level of hierarchy, the value is usually a multiple of 10. | -| `prefix` | Text | Nullable | | The [branch prefix](../Branch%20prefixes.md) if any, or `NULL` otherwise. | +| `prefix` | Text | Nullable | | The [branch prefix](../../../Concepts/Branch%20prefixes.md) if any, or `NULL` otherwise. | | `isExpanded` | Integer | Non-null | 0 | Whether the branch should appear expanded (its children shown) to the user. | -| `isDeleted` | Integer | Non-null | 0 | `1` if the entity is [deleted](../Deleted%20notes.md), `0` otherwise. | +| `isDeleted` | Integer | Non-null | 0 | `1` if the entity is [deleted](../../../Concepts/Deleted%20notes.md), `0` otherwise. | | `deleteId` | Text | Nullable | `null` | | | `utcDateModified` | Text | Non-null | | Modification date in UTC format (e.g. `2023-11-08 16:43:44.204Z`) | \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/entity_changes.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/entity_changes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/entity_changes.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/entity_changes.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/etapi_tokens.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/etapi_tokens.md similarity index 90% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/etapi_tokens.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/etapi_tokens.md index 25fe4e5da..3f11dffa9 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/etapi_tokens.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/etapi_tokens.md @@ -6,4 +6,4 @@ | `tokenHash` | Text | Non-null | | The token itself. | | `utcDateCreated` | Text | Non-null | | Creation date in UTC format (e.g. `2023-11-08 16:43:44.204Z`) | | `utcDateModified` | Text | Non-null | | Modification date in UTC format (e.g. `2023-11-08 16:43:44.204Z`) | -| `isDeleted` | Integer | Non-null | 0 | `1` if the entity is [deleted](../Deleted%20notes.md), `0` otherwise. | \ No newline at end of file +| `isDeleted` | Integer | Non-null | 0 | `1` if the entity is [deleted](../../../Concepts/Deleted%20notes.md), `0` otherwise. | \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/notes.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/notes.md similarity index 90% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/notes.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/notes.md index 572c7f6db..19cb4a322 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/notes.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/notes.md @@ -3,10 +3,10 @@ | --- | --- | --- | --- | --- | | `noteId` | Text | Non-null | | The unique ID of the note (e.g. `2LJrKqIhr0Pe`). | | `title` | Text | Non-null | `"note"` | The title of the note, as defined by the user. | -| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../Protected%20entities.md), `0` otherwise. | +| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../../../Concepts/Protected%20entities.md), `0` otherwise. | | `type` | Text | Non-null | `"text"` | The type of note (i.e. `text`, `file`, `code`, `relationMap`, `mermaid`, `canvas`). | | `mime` | Text | Non-null | `"text/html"` | The MIME type of the note (e.g. `text/html`).. Note that it can be an empty string in some circumstances, but not null. | -| `isDeleted` | Integer | Nullable | 0 | `1` if the entity is [deleted](../Deleted%20notes.md), `0` otherwise. | +| `isDeleted` | Integer | Nullable | 0 | `1` if the entity is [deleted](../../../Concepts/Deleted%20notes.md), `0` otherwise. | | `deleteId` | Text | Non-null | `null` | | | `dateCreated` | Text | Non-null | | Localized creation date (e.g. `2023-11-08 18:43:44.204+0200`) | | `dateModified` | Text | Non-null | | Localized modification date (e.g. `2023-11-08 18:43:44.204+0200`) | diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/options.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/options.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/options.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/options.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/recent_notes.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/recent_notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/recent_notes.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/recent_notes.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database structure/revisions.md b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/revisions.md similarity index 94% rename from docs/Developer Guide/Developer Guide/Architecture/Database structure/revisions.md rename to docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/revisions.md index 210e05356..fef9ed1ed 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database structure/revisions.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database/Database structure/revisions.md @@ -6,7 +6,7 @@ | `type` | Text | Non-null | `""` | The type of note (i.e. `text`, `file`, `code`, `relationMap`, `mermaid`, `canvas`). | | `mime` | Text | Non-null | `""` | The MIME type of the note (e.g. `text/html`). | | `title` | Text | Non-null | | The title of the note, as defined by the user. | -| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../Protected%20entities.md), `0` otherwise. | +| `isProtected` | Integer | Non-null | 0 | `1` if the entity is [protected](../../../Concepts/Protected%20entities.md), `0` otherwise. | | `blobId` | Text | Nullable | `null` | The corresponding ID from blobs. Although it can theoretically be `NULL`, haven't found any such note yet. | | `utcDateLastEdited` | Text | Non-null | | **Not sure how it differs from modification date.** | | `utcDateCreated` | Text | Non-null | | Creation date in UTC format (e.g. `2023-11-08 16:43:44.204Z`) | diff --git a/docs/Developer Guide/Developer Guide/Architecture/Protected entities.md b/docs/Developer Guide/Developer Guide/Architecture/Protected entities.md deleted file mode 100644 index f7d4e5b2e..000000000 --- a/docs/Developer Guide/Developer Guide/Architecture/Protected entities.md +++ /dev/null @@ -1,6 +0,0 @@ -# Protected entities -The following entities can be made protected, via their `isProtected` flag: - -* attachments -* notes -* revisions \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Backlinks.md b/docs/Developer Guide/Developer Guide/Concepts/Backlinks.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Backlinks.md rename to docs/Developer Guide/Developer Guide/Concepts/Backlinks.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Branch prefixes.md b/docs/Developer Guide/Developer Guide/Concepts/Branch prefixes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Branch prefixes.md rename to docs/Developer Guide/Developer Guide/Concepts/Branch prefixes.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/CI/1_Main_image.png b/docs/Developer Guide/Developer Guide/Concepts/CI/1_Main_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/CI/1_Main_image.png rename to docs/Developer Guide/Developer Guide/Concepts/CI/1_Main_image.png diff --git a/docs/Developer Guide/Developer Guide/Architecture/CI/Main.md b/docs/Developer Guide/Developer Guide/Concepts/CI/Main.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/CI/Main.md rename to docs/Developer Guide/Developer Guide/Concepts/CI/Main.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/CI/Main_image.png b/docs/Developer Guide/Developer Guide/Concepts/CI/Main_image.png similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/CI/Main_image.png rename to docs/Developer Guide/Developer Guide/Concepts/CI/Main_image.png diff --git a/docs/Developer Guide/Developer Guide/Concepts/Cache.md b/docs/Developer Guide/Developer Guide/Concepts/Cache.md new file mode 100644 index 000000000..91a6f8b6d --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Concepts/Cache.md @@ -0,0 +1,111 @@ +# Cache +### Three-Layer Cache System + +Trilium implements a sophisticated **three-tier caching system** to optimize performance and enable offline functionality: + +#### 1\. Becca (Backend Cache) + +Located at: `apps/server/src/becca/` + +```typescript +// Becca caches all entities in memory +class Becca { + notes: Record + branches: Record + attributes: Record + attachments: Record + // ... other entity collections +} +``` + +**Responsibilities:** + +* Server-side entity cache +* Maintains complete note tree in memory +* Handles entity relationships and integrity +* Provides fast lookups without database queries +* Manages entity lifecycle (create, update, delete) + +**Key Files:** + +* `becca.ts` - Main cache instance +* `becca_loader.ts` - Loads entities from database +* `becca_service.ts` - Cache management operations +* `entities/` - Entity classes (BNote, BBranch, etc.) + +#### 2\. Froca (Frontend Cache) + +Located at: `apps/client/src/services/froca.ts` + +```typescript +// Froca is a read-only mirror of backend data +class Froca { + notes: Record + branches: Record + attributes: Record + // ... other entity collections +} +``` + +**Responsibilities:** + +* Frontend read-only cache +* Lazy loading of note tree +* Minimizes API calls +* Enables fast UI rendering +* Synchronizes with backend via WebSocket + +**Loading Strategy:** + +* Initial load: root notes and immediate children +* Lazy load: notes loaded when accessed +* When note is loaded, all parent and child branches load +* Deleted entities tracked via missing branches + +#### 3\. Shaca (Share Cache) + +Located at: `apps/server/src/share/` + +**Responsibilities:** + +* Optimized cache for shared/published notes +* Handles public note access without authentication +* Performance-optimized for high-traffic scenarios +* Separate from main Becca to isolate concerns + +### Cache Invalidation + +**Server-Side:** + +* Entities automatically update cache on save +* WebSocket broadcasts changes to all clients +* Synchronization updates trigger cache refresh + +**Client-Side:** + +* WebSocket listeners update Froca +* Manual reload via `froca.loadSubTree(noteId)` +* Full reload on protected session changes + +### Cache Consistency + +**Entity Change Tracking:** + +```typescript +// Every entity modification tracked +entity_changes ( + entityName: 'notes', + entityId: 'note123', + hash: 'abc...', + changeId: 'change456', + utcDateChanged: '2025-11-02...' +) +``` + +**Sync Protocol:** + +1. Client requests changes since last sync +2. Server returns entity\_changes records +3. Client applies changes to Froca +4. Client sends local changes to server +5. Server updates Becca and database \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Deleted notes.md b/docs/Developer Guide/Developer Guide/Concepts/Deleted notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Deleted notes.md rename to docs/Developer Guide/Developer Guide/Concepts/Deleted notes.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Demo document.md b/docs/Developer Guide/Developer Guide/Concepts/Demo document.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Demo document.md rename to docs/Developer Guide/Developer Guide/Concepts/Demo document.md diff --git a/docs/Developer Guide/Developer Guide/Concepts/Entities.md b/docs/Developer Guide/Developer Guide/Concepts/Entities.md new file mode 100644 index 000000000..56d954c94 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Concepts/Entities.md @@ -0,0 +1,109 @@ +# Entities +### Entity System + +Trilium's data model is based on five core entities: + +```mermaid +graph TD + Note[Note
      BNote] + Branch[Branch
      BBranch] + Attribute[Attribute
      BAttribute] + Revision[Revision
      BRevision] + Attachment[Attachment
      BAttachment] + + Note -->|linked by| Branch + Note -.->|metadata| Attribute + Branch -->|creates| Revision + Note -->|has| Attachment + + style Note fill:#e1f5ff + style Branch fill:#fff4e1 + style Attribute fill:#ffe1f5 + style Revision fill:#f5ffe1 + style Attachment fill:#ffe1e1 +``` + +#### Entity Definitions + +**1\. BNote** (`apps/server/src/becca/entities/bnote.ts`) + +* Represents a note with title, content, and metadata +* Type can be: text, code, file, image, canvas, mermaid, etc. +* Contains content via blob reference +* Can be protected (encrypted) +* Has creation and modification timestamps + +**2\. BBranch** (`apps/server/src/becca/entities/bbranch.ts`) + +* Represents parent-child relationship between notes +* Enables note cloning (multiple parents) +* Contains positioning information +* Has optional prefix for customization +* Tracks expansion state in tree + +**3\. BAttribute** (`apps/server/src/becca/entities/battribute.ts`) + +* Key-value metadata attached to notes +* Two types: labels (tags) and relations (links) +* Can be inheritable to child notes +* Used for search, organization, and scripting +* Supports promoted attributes (displayed prominently) + +**4\. BRevision** (`apps/server/src/becca/entities/brevision.ts`) + +* Stores historical versions of note content +* Automatic versioning on edits +* Retains title, type, and content +* Enables note history browsing and restoration + +**5\. BAttachment** (`apps/server/src/becca/entities/battachment.ts`) + +* File attachments linked to notes +* Has owner (note), role, and mime type +* Content stored in blobs +* Can be protected (encrypted) + +**6\. BBlob** (`apps/server/src/becca/entities/bblob.ts`) + +* Binary large object storage +* Stores actual note content and attachments +* Referenced by notes, revisions, and attachments +* Supports encryption for protected content + +### Widget-Based UI + +The frontend uses a **widget system** for modular, reusable UI components. + +Located at: `apps/client/src/widgets/` + +```typescript +// Widget Hierarchy +BasicWidget +├── NoteContextAwareWidget (responds to note changes) +│ ├── RightPanelWidget (displayed in right sidebar) +│ └── Type-specific widgets +├── Container widgets (tabs, ribbons, etc.) +└── Specialized widgets (search, calendar, etc.) +``` + +**Base Classes:** + +1. **BasicWidget** (`basic_widget.ts`) + * Base class for all UI components + * Lifecycle: construction → rendering → events → destruction + * Handles DOM manipulation + * Event subscription management + * Child widget management +2. **NoteContextAwareWidget** (`note_context_aware_widget.ts`) + * Extends BasicWidget + * Automatically updates when active note changes + * Accesses current note context + * Used for note-dependent UI +3. **RightPanelWidget** + * Widgets displayed in right sidebar + * Collapsible sections + * Context-specific tools and information + +**Type-Specific Widgets:** + +Each note type has a dedicated widget, which are located in `apps/client/src/widgets/type_widgets`. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Hidden notes.md b/docs/Developer Guide/Developer Guide/Concepts/Hidden notes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Hidden notes.md rename to docs/Developer Guide/Developer Guide/Concepts/Hidden notes.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Icons.md b/docs/Developer Guide/Developer Guide/Concepts/Icons.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Icons.md rename to docs/Developer Guide/Developer Guide/Concepts/Icons.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translat.md b/docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translat.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translat.md rename to docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translat.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/Guidelines.md b/docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Guidelines.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/Guidelines.md rename to docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Guidelines.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/Server translations.md b/docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Server translations.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/Server translations.md rename to docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/Server translations.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/i18n-ally.md b/docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/i18n-ally.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Internationalisation Translations/i18n-ally.md rename to docs/Developer Guide/Developer Guide/Concepts/Internationalisation Translations/i18n-ally.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Launchers.md b/docs/Developer Guide/Developer Guide/Concepts/Launchers.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Launchers.md rename to docs/Developer Guide/Developer Guide/Concepts/Launchers.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Revisions.md b/docs/Developer Guide/Developer Guide/Concepts/Note Revisions.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Revisions.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Revisions.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Copy image reference to the cl.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Copy image reference to the cl.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Copy image reference to the cl.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Copy image reference to the cl.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Export diagram as SVG.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Export diagram as SVG.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Export diagram as SVG.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Export diagram as SVG.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/First steps.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/First steps.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/First steps.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/First steps.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/First steps/mind_map.js b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/First steps/mind_map.js similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/First steps/mind_map.js rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/First steps/mind_map.js diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Loading data.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Loading data.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Loading data.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Loading data.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Note type checklist.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Note type checklist.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Note type checklist.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Note type checklist.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/SVG rendering.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/SVG rendering.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/SVG rendering.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/SVG rendering.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Saving data via spaced update.md b/docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Saving data via spaced update.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Note Types/Adding a new note type/Saving data via spaced update.md rename to docs/Developer Guide/Developer Guide/Concepts/Note Types/Adding a new note type/Saving data via spaced update.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Options.md b/docs/Developer Guide/Developer Guide/Concepts/Options.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Options.md rename to docs/Developer Guide/Developer Guide/Concepts/Options.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Options/Creating a new option.md b/docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Options/Creating a new option.md rename to docs/Developer Guide/Developer Guide/Concepts/Options/Creating a new option.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Printing and exporting to PDF.md b/docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Printing and exporting to PDF.md rename to docs/Developer Guide/Developer Guide/Concepts/Printing and exporting to PDF.md diff --git a/docs/Developer Guide/Developer Guide/Concepts/Protected entities.md b/docs/Developer Guide/Developer Guide/Concepts/Protected entities.md new file mode 100644 index 000000000..31d5250c0 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Concepts/Protected entities.md @@ -0,0 +1,6 @@ +# Protected entities +The following entities can be made protected, via their `isProtected` flag: + +* attachments +* notes +* revisions \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Share.md b/docs/Developer Guide/Developer Guide/Concepts/Share.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Share.md rename to docs/Developer Guide/Developer Guide/Concepts/Share.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Synchronisation/Content hashing.md b/docs/Developer Guide/Developer Guide/Concepts/Synchronisation/Content hashing.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Synchronisation/Content hashing.md rename to docs/Developer Guide/Developer Guide/Concepts/Synchronisation/Content hashing.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Syntax highlighting.md b/docs/Developer Guide/Developer Guide/Concepts/Syntax highlighting.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Syntax highlighting.md rename to docs/Developer Guide/Developer Guide/Concepts/Syntax highlighting.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Themes.md b/docs/Developer Guide/Developer Guide/Concepts/Themes.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Themes.md rename to docs/Developer Guide/Developer Guide/Concepts/Themes.md diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 4874aaa1d..611bdd69a 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/Developer Guide/Developer Guide/Environment Setup.md b/docs/Developer Guide/Developer Guide/Environment Setup.md index 95d14cd50..bf7f44adb 100644 --- a/docs/Developer Guide/Developer Guide/Environment Setup.md +++ b/docs/Developer Guide/Developer Guide/Environment Setup.md @@ -33,4 +33,4 @@ Run `pnpm i` at the top of the `Notes` repository to install the dependencies. Our recommended IDE for working on Trilium is Visual Studio Code (or VSCodium if you are looking for a fully open-source alternative). -By default we include a number of suggested extensions which should appear when opening the repository in VS Code. Most of the extensions are for integrating various technologies we are using such as Playwright and Vitest for testing or for Internationalisation / Translations. \ No newline at end of file +By default we include a number of suggested extensions which should appear when opening the repository in VS Code. Most of the extensions are for integrating various technologies we are using such as Playwright and Vitest for testing or for Internationalisation / Translations. \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index a38998354..0a573e808 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14616,21 +14616,21 @@ { "type": "relation", "name": "internalLink", - "value": "zEY4DaJG4YT5", + "value": "GLks18SNjxmC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "SynTBQiBsdYJ", + "value": "zEY4DaJG4YT5", "isInheritable": false, "position": 20 }, { "type": "relation", "name": "internalLink", - "value": "GLks18SNjxmC", + "value": "SynTBQiBsdYJ", "isInheritable": false, "position": 30 }, @@ -14787,19 +14787,19 @@ "isInheritable": false, "position": 30 }, - { - "type": "label", - "name": "shareAlias", - "value": "widget-basics", - "isInheritable": false, - "position": 20 - }, { "type": "relation", "name": "internalLink", "value": "s8alTXmpFR61", "isInheritable": false, "position": 40 + }, + { + "type": "label", + "name": "shareAlias", + "value": "widget-basics", + "isInheritable": false, + "position": 20 } ], "format": "markdown", @@ -14949,21 +14949,21 @@ { "type": "relation", "name": "internalLink", - "value": "m1lbrzyKDaRB", + "value": "yIhgI5H7A2Sm", "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "s8alTXmpFR61", + "value": "m1lbrzyKDaRB", "isInheritable": false, "position": 60 }, { "type": "relation", "name": "internalLink", - "value": "yIhgI5H7A2Sm", + "value": "s8alTXmpFR61", "isInheritable": false, "position": 70 }, From 7369f9d532de998e7f3c836c2537193278dced60 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 17:24:38 +0200 Subject: [PATCH 40/54] docs(dev): integrate architecture guide --- docs/ARCHITECTURE.md | 279 ------------------ docs/Developer Guide/!!!meta.json | 133 +++++++-- docs/Developer Guide/Developer Guide.md | 13 +- .../Developer Guide/Architecture.md | 7 +- .../Developer Guide/Architecture/API.md | 2 +- .../Arhitecture Decision Records.md | 62 ++++ .../Architecture/Security Architecture.md | 79 +++++ .../Developer Guide/Concepts/Entities.md | 2 +- .../Developer Guide/Documentation.md | 2 +- .../Developer Guide/Testing.md | 46 ++- .../Testing/End-to-end tests.md | 13 +- .../Developer Guide/Testing/Unit tests.md | 7 + docs/User Guide/!!!meta.json | 42 +++ docs/User Guide/User Guide.md | 20 +- 14 files changed, 392 insertions(+), 315 deletions(-) delete mode 100644 docs/ARCHITECTURE.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Arhitecture Decision Records.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md create mode 100644 docs/Developer Guide/Developer Guide/Testing/Unit tests.md diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md deleted file mode 100644 index 1c1d6638b..000000000 --- a/docs/ARCHITECTURE.md +++ /dev/null @@ -1,279 +0,0 @@ -## API Architecture - -## Build System - -### Package Manager: pnpm - -**Why pnpm:** -- Fast, disk-efficient -- Strict dependency isolation -- Native monorepo support via workspaces -- Patch package support - -**Workspace Configuration:** -```yaml -# pnpm-workspace.yaml -packages: - - 'apps/*' - - 'packages/*' -``` - -### Build Tools - -**Vite** (Development & Production) -- Fast HMR for development -- Optimized production builds -- Asset handling -- Plugin ecosystem - -**ESBuild** (TypeScript compilation) -- Fast TypeScript transpilation -- Bundling support -- Minification - -**TypeScript** -- Project references for monorepo -- Strict type checking -- Shared `tsconfig.base.json` - -### Build Scripts - -**Root `package.json` scripts:** -```json -{ - "server:start": "pnpm run --filter server dev", - "server:build": "pnpm run --filter server build", - "client:build": "pnpm run --filter client build", - "desktop:build": "pnpm run --filter desktop build", - "test:all": "pnpm test:parallel && pnpm test:sequential" -} -``` - -### Build Process - -**Development:** -```bash -pnpm install # Install dependencies -pnpm server:start # Start dev server (port 8080) -# or -pnpm desktop:start # Start Electron dev -``` - -**Production (Server):** -```bash -pnpm server:build # Build server + client -node apps/server/dist/main.js -``` - -**Production (Desktop):** -```bash -pnpm desktop:build # Build Electron app -# Creates distributable in apps/desktop/out/make/ -``` - -**Docker:** -```bash -docker build -t trilium . -docker run -p 8080:8080 trilium -``` - -### Asset Pipeline - -**Client Assets:** -- Entry: `apps/client/src/index.html` -- Bundled by Vite -- Output: `apps/client/dist/` - -**Server Static:** -- Serves client assets in production -- Public directory: `apps/server/public/` - -**Desktop:** -- Packages client assets -- Electron main process: `apps/desktop/src/main.ts` -- Electron renderer: loads client app - ---- - -## Testing Strategy - -### Test Organization - -**Parallel Tests** (can run simultaneously): -- Client tests -- Package tests -- E2E tests (isolated databases) - -**Sequential Tests** (shared resources): -- Server tests (shared database) -- CKEditor plugin tests - -### Test Frameworks - -- **Vitest** - Unit and integration tests -- **Playwright** - E2E tests -- **Happy-DOM** - DOM testing environment - -### Running Tests - -```bash -pnpm test:all # All tests -pnpm test:parallel # Fast parallel tests -pnpm test:sequential # Sequential tests only -pnpm coverage # With coverage reports -``` - -### Test Locations - -``` -apps/ -├── server/ -│ └── src/**/*.spec.ts # Server tests -├── client/ -│ └── src/**/*.spec.ts # Client tests -└── server-e2e/ - └── tests/**/*.spec.ts # E2E tests -``` - -### E2E Testing - -**Server E2E:** -- Tests full REST API -- Tests WebSocket functionality -- Tests sync protocol - -**Desktop E2E:** -- Playwright with Electron -- Tests full desktop app -- Screenshot comparison - ---- - -## Security Architecture - -### Encryption System - -**Per-Note Encryption:** -- Notes can be individually protected -- AES-256 encryption -- Password-derived encryption key (PBKDF2) -- Separate protected session management - -**Protected Session:** -- Time-limited access to protected notes -- Automatic timeout -- Re-authentication required -- Frontend: `protected_session.ts` -- Backend: `protected_session.ts` - -### Authentication - -**Password Auth:** -- PBKDF2 key derivation -- Salt per installation -- Hash verification - -**OpenID Connect:** -- External identity provider support -- OAuth 2.0 flow -- Configurable providers - -**TOTP (2FA):** -- Time-based one-time passwords -- QR code setup -- Backup codes - -### Authorization - -**Single-User Model:** -- Desktop: single user (owner) -- Server: single user per installation - -**Share Notes:** -- Public access without authentication -- Separate Shaca cache -- Read-only access - -### CSRF Protection - -**CSRF Tokens:** -- Required for state-changing operations -- Token in header or cookie -- Validation middleware - -### Input Sanitization - -**XSS Prevention:** -- DOMPurify for HTML sanitization -- CKEditor content filtering -- CSP headers - -**SQL Injection:** -- Parameterized queries only -- Better-sqlite3 prepared statements -- No string concatenation in SQL - -### Dependency Security - -**Vulnerability Scanning:** -- Renovate bot for updates -- npm audit integration -- Override vulnerable sub-dependencies - ---- - -## Related Documentation - -### User Documentation -- [User Guide](User%20Guide/User%20Guide/) - End-user features and usage -- [Installation Guide](User%20Guide/User%20Guide/Installation%20&%20Setup/) -- [Basic Concepts](User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/) - -### Developer Documentation -- [Developer Guide](Developer%20Guide/Developer%20Guide/) - Development setup -- [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) -- [Project Structure](Developer%20Guide/Developer%20Guide/Project%20Structure.md) -- [Adding Note Types](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Adding%20a%20new%20note%20type/) -- [Database Schema](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) - -### API Documentation -- [Script API](Script%20API/) - User scripting API -- [ETAPI Documentation](https://triliumnext.github.io/Docs/Wiki/etapi) - External API - -### Additional Resources -- [CLAUDE.md](../CLAUDE.md) - AI assistant guidance -- [README.md](../README.md) - Project overview -- [SECURITY.md](../SECURITY.md) - Security policy - ---- - -## Appendices - -### Glossary - -- **Becca**: Backend Cache - server-side entity cache -- **Froca**: Frontend Cache - client-side entity mirror -- **Shaca**: Share Cache - cache for public shared notes -- **ETAPI**: External API for third-party integrations -- **Protected Note**: Encrypted note requiring password -- **Clone**: Note with multiple parent branches -- **Branch**: Parent-child relationship between notes -- **Attribute**: Metadata (label or relation) attached to note -- **Blob**: Binary large object containing note content - -### File Naming Conventions - -- `BEntity` - Backend entity (e.g., BNote, BBranch) -- `FEntity` - Frontend entity (e.g., FNote, FBranch) -- `*_widget.ts` - Widget classes -- `*_service.ts` - Service modules -- `*.spec.ts` - Test files -- `XXXX_*.sql` - Migration files - -### Architecture Decision Records - -For historical context on major architectural decisions, see: -- Migration to TypeScript monorepo -- Adoption of pnpm workspaces -- CKEditor 5 upgrade -- Entity change tracking system diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index a871c66f5..f19dbc16a 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -35,6 +35,20 @@ "value": "developer-guide", "isInheritable": false, "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "T2W7WCZrYZBU", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cxfTSHIUQtt2", + "isInheritable": false, + "position": 50 } ], "format": "markdown", @@ -450,14 +464,14 @@ { "type": "relation", "name": "internalLink", - "value": "h8AsuFjSD4fB", + "value": "DSkl8C325tEC", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "DSkl8C325tEC", + "value": "h8AsuFjSD4fB", "isInheritable": false, "position": 20 }, @@ -781,6 +795,60 @@ "format": "markdown", "dataFileName": "API.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "Vk4zD1Iirarg", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "Vk4zD1Iirarg" + ], + "title": "Arhitecture Decision Records", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Jg7clqogFOyD", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Arhitecture Decision Records.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "QW1MB7RZB5Gf", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "QW1MB7RZB5Gf" + ], + "title": "Security Architecture", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "security-architecture", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Security Architecture.md", + "attachments": [] } ] }, @@ -1555,7 +1623,7 @@ "tM3rIZQzlum4" ], "title": "Deleted notes", - "notePosition": 70, + "notePosition": 50, "prefix": null, "isExpanded": false, "type": "text", @@ -1589,7 +1657,7 @@ "oLhKpfi2kGON" ], "title": "Demo document", - "notePosition": 80, + "notePosition": 60, "prefix": null, "isExpanded": false, "type": "text", @@ -1623,7 +1691,7 @@ "TiUll0Osoaz6" ], "title": "Entities", - "notePosition": 90, + "notePosition": 70, "prefix": null, "isExpanded": false, "type": "text", @@ -1657,7 +1725,7 @@ "UzRirf46Xi46" ], "title": "Hidden notes", - "notePosition": 100, + "notePosition": 80, "prefix": null, "isExpanded": false, "type": "text", @@ -1691,7 +1759,7 @@ "m2W35hwSDUeh" ], "title": "Icons", - "notePosition": 110, + "notePosition": 90, "prefix": null, "isExpanded": false, "type": "text", @@ -1700,14 +1768,14 @@ { "type": "relation", "name": "internalLink", - "value": "oLhKpfi2kGON", + "value": "PXzm2t3sCdsP", "isInheritable": false, "position": 10 }, { "type": "relation", "name": "internalLink", - "value": "PXzm2t3sCdsP", + "value": "oLhKpfi2kGON", "isInheritable": false, "position": 20 }, @@ -1732,7 +1800,7 @@ "TLXJwBDo8Rdv" ], "title": "Internationalisation / Translations", - "notePosition": 120, + "notePosition": 100, "prefix": null, "isExpanded": false, "type": "text", @@ -1867,7 +1935,7 @@ "Usiyzn9C4WFv" ], "title": "Launchers", - "notePosition": 130, + "notePosition": 110, "prefix": null, "isExpanded": false, "type": "text", @@ -1894,7 +1962,7 @@ "qjQNyaYXSNWu" ], "title": "Note Revisions", - "notePosition": 140, + "notePosition": 120, "prefix": null, "isExpanded": false, "type": "text", @@ -1928,7 +1996,7 @@ "7RBJMqVz2EsJ" ], "title": "Note Types", - "notePosition": 150, + "notePosition": 130, "prefix": null, "isExpanded": false, "type": "text", @@ -2262,7 +2330,7 @@ "6dC7ha5vjqqS" ], "title": "Options", - "notePosition": 160, + "notePosition": 140, "prefix": null, "isExpanded": false, "type": "text", @@ -2327,7 +2395,7 @@ "W0msUwLxm40d" ], "title": "Printing and exporting to PDF", - "notePosition": 170, + "notePosition": 150, "prefix": null, "isExpanded": false, "type": "text", @@ -2368,7 +2436,7 @@ "UvXpeSqfYc6d" ], "title": "Protected entities", - "notePosition": 180, + "notePosition": 160, "prefix": null, "isExpanded": false, "type": "text", @@ -2423,7 +2491,7 @@ "vphziLmQeQHY" ], "title": "Share", - "notePosition": 190, + "notePosition": 170, "prefix": null, "isExpanded": false, "type": "text", @@ -2457,7 +2525,7 @@ "n9wYW9nUTynV" ], "title": "Synchronisation", - "notePosition": 200, + "notePosition": 180, "prefix": null, "isExpanded": false, "type": "text", @@ -2521,7 +2589,7 @@ "k7RavjuXQt8z" ], "title": "Syntax highlighting", - "notePosition": 210, + "notePosition": 190, "prefix": null, "isExpanded": false, "type": "text", @@ -2555,7 +2623,7 @@ "7BCukQTCm7fv" ], "title": "Themes", - "notePosition": 220, + "notePosition": 200, "prefix": null, "isExpanded": false, "type": "text", @@ -2712,6 +2780,25 @@ "attachments": [], "dirFileName": "Testing", "children": [ + { + "isClone": false, + "noteId": "ETeT5YO61DAW", + "notePath": [ + "jdjRLhLV3TtI", + "dtKC3FmoWOrv", + "ETeT5YO61DAW" + ], + "title": "Unit tests", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [], + "format": "markdown", + "dataFileName": "Unit tests.md", + "attachments": [] + }, { "isClone": false, "noteId": "C5MUQczZ5R9N", @@ -2721,7 +2808,7 @@ "C5MUQczZ5R9N" ], "title": "Integration testing", - "notePosition": 10, + "notePosition": 20, "prefix": null, "isExpanded": false, "type": "text", @@ -2748,7 +2835,7 @@ "bIfKwfCnqpeI" ], "title": "Test database", - "notePosition": 20, + "notePosition": 30, "prefix": null, "isExpanded": false, "type": "text", @@ -2775,7 +2862,7 @@ "w6gMvKh0UAVT" ], "title": "End-to-end tests", - "notePosition": 30, + "notePosition": 40, "prefix": null, "isExpanded": false, "type": "text", diff --git a/docs/Developer Guide/Developer Guide.md b/docs/Developer Guide/Developer Guide.md index 2dd9f42de..8f5721b30 100644 --- a/docs/Developer Guide/Developer Guide.md +++ b/docs/Developer Guide/Developer Guide.md @@ -1,4 +1,15 @@ # Developer Guide This documentation is intended for developers planning to implement new features or maintain the Trilium Notes application, as it describes the architecture of the application. -For the user-facing documentation, including how to write scripts and the various APIs, consult the [user guide](https://docs.triliumnotes.org/user-guide/) instead. \ No newline at end of file +For the user-facing documentation, including how to write scripts and the various APIs, consult the [user guide](https://docs.triliumnotes.org/user-guide/) instead. + +### Quick links + +* Environment Setup +* Project Structure + +### External links + +* The [Trilium Notes website](https://triliumnotes.org/), for a quick presentation of the application. +* [User Guide](https://docs.triliumnotes.org/user-guide/), to understand the concepts of the application itself. +* [GitHub Repository (TriliumNext/Trilium)](https://github.com/TriliumNext/Trilium/) \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture.md b/docs/Developer Guide/Developer Guide/Architecture.md index a11d27274..48a91fcde 100644 --- a/docs/Developer Guide/Developer Guide/Architecture.md +++ b/docs/Developer Guide/Developer Guide/Architecture.md @@ -15,7 +15,10 @@ Trilium Notes is a hierarchical note-taking application built as a TypeScript mo * **Runtime**: Node.js (backend), Browser/Electron (frontend) * **Language**: TypeScript, JavaScript * **Database**: SQLite (better-sqlite3) -* **Build Tools**: Vite, ESBuild, pnpm +* **Build Tools**: + * Client: Vite, + * Server: ESBuild (bundling) + * Package manager: pnpm * **UI Framework**: Custom widget-based system (vanilla HTML, CSS & JavaScript + jQuery), in the process of converting to React/Preact. * **Rich Text**: CKEditor 5 (customized) * **Code Editing**: CodeMirror 6 @@ -26,7 +29,7 @@ Trilium Notes is a hierarchical note-taking application built as a TypeScript mo Trilium follows a **client-server architecture** even in desktop mode, where Electron runs both the backend server and frontend client within the same process. -```mermaid +``` graph TB subgraph Frontend Widgets[Widgets
      System] diff --git a/docs/Developer Guide/Developer Guide/Architecture/API.md b/docs/Developer Guide/Developer Guide/Architecture/API.md index 57fc8c164..92f6fb813 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/API.md +++ b/docs/Developer Guide/Developer Guide/Architecture/API.md @@ -43,7 +43,7 @@ Located at: `apps/server/src/etapi/` **Example:** -```sh +``` curl -H "Authorization: YOUR_TOKEN" \ https://trilium.example.com/etapi/notes/noteId ``` diff --git a/docs/Developer Guide/Developer Guide/Architecture/Arhitecture Decision Records.md b/docs/Developer Guide/Developer Guide/Architecture/Arhitecture Decision Records.md new file mode 100644 index 000000000..c524642cd --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Arhitecture Decision Records.md @@ -0,0 +1,62 @@ +# Arhitecture Decision Records +## 🚀 Future milestones + +* [Mobile](https://github.com/TriliumNext/Trilium/issues/7447) +* [Multi-user](https://github.com/TriliumNext/Trilium/issues/4956) + +## Aug 2025 - present: Port the client to React + +- [x] [Type widgets](https://github.com/TriliumNext/Trilium/pull/7044) +- [x] [Collections](https://github.com/TriliumNext/Trilium/pull/6837) +- [x] [Various widgets](https://github.com/TriliumNext/Trilium/pull/6830) +- [x] [Floating buttons](https://github.com/TriliumNext/Trilium/pull/6811) +- [x] [Settings](https://github.com/TriliumNext/Trilium/pull/6660) + +## Aug 2025 - Move away from NX + +We took the decision of moving away from the NX monorepo tool, due to: + +* Various issues with the cache, especially after an update of the NX dependencies which required periodical `nx reset` to get rid of. +* Various issues with memory and CPU consumption along the way, due to the NX daemon (including it remaining as a background process after closing the IDE). +* On Windows, almost always there was a freeze on every second build. +* Various hacks that were needed to achieve what we needed (especially for artifacts since NX would not copy assets if they were in `.gitignore` for some arbitrary reason and requiring a patch that made it difficult to maintain across updates). + +As a result, we decided to switch to… nothing. Why? + +* `pnpm` (which we were already using) covers the basic needs of a monorepo via workspaces on its own. +* Our client-side solution, Vite already supports navigating through projects without requiring built artifacts. This makes the build process slightly faster (especially cold starts) at a slighter bigger RAM consumption. +* ESBuild, on the server-side, also seems happy to go across projects without an issue. + +Apart from this: + +* In dev mode, the server now runs directly using `tsx` and not built and then run. This means that it'll run much faster. +* We're back to an architecture where the `server` and the `desktop` host their own Vite instance as a middleware. What this means that there is no `client:dev` and no separate port to handle. + * This makes it possible to easily test on mobile in dev mode, since there's a single port to access. + * The downside is that the initial start up time is longer while Vite is spinning up. Nevertheless, it's still slightly faster than it used to be anyway. +* No more asset copying, which should also improve performance. +* No more messing around with the native dependency of `better-sqlite3` that caused those dreaded mismatches when running between server and desktop. We have (hopefully) found a permanent solution for it that involves no user input. +* A decent solution was put in place to allow easier development on NixOS for the desktop application. +* The desktop version has also gained back the ability to automatically refresh the client when a change is made, including live changes for React components. + +Migration steps, as a developer: + +1. In VS Code, uninstall the NX Console unless you plan to use it for other projects. +2. Remove `.nx` at project level. +3. It's ideal to clean up all your `node_modules` in the project (do note that it's not just the top-level one, but also in `apps/client`, `apps/server`, `apps/desktop`, etc.). +4. Run a `pnpm i` to set up the new dependencies and the installation +5. Instead of `nx run server:serve`, now you can simply run `pnpm dev` while in `apps/server`, or `pnpm server:start` while in the root. +6. When first starting the server, it will take slightly longer than usual to see something on the screen since the dependencies are being rebuilt. Those are later cached so subsequent runs should work better. If you end up with a white screen, simply refresh the page a few times until it shows up correctly. + +## Apr 2025: NX-based monorepo + +* Goal: Restructure the application from a mix where the client was a subfolder within the server and other dependencies such as CKEditor were scattered in various repositories to a monorepo powered by NX. +* [Initial discussion](https://github.com/TriliumNext/Trilium/issues/4941) +* [Relevant PR](https://github.com/TriliumNext/Notes/pull/1773) + +## Dec 2024: Front-end conversion to TypeScript + +* [Relevant PRs on GitHub](https://github.com/TriliumNext/Notes/pulls?q=is%3Apr+is%3Aclosed+%22Port+frontend+to+TypeScript%22) + +## Apr 2024: Back-end conversion to TypeScript + +* [Relevant PRs on GitHub](https://github.com/TriliumNext/Notes/pulls?q=is%3Apr+%22convert+backend+to+typescript%22) \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md b/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md new file mode 100644 index 000000000..ab0c88c06 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md @@ -0,0 +1,79 @@ +# Security Architecture +### Encryption System + +**Per-Note Encryption:** + +* Notes can be individually protected +* AES-128-CBC encryption for encrypted notes. +* Separate protected session management + +**Protected Session:** + +* Time-limited access to protected notes +* Automatic timeout +* Re-authentication required +* Frontend: `protected_session.ts` +* Backend: `protected_session.ts` + +### Authentication + +**Password Auth:** + +* PBKDF2 key derivation +* Salt per installation +* Hash verification + +**OpenID Connect:** + +* External identity provider support +* OAuth 2.0 flow +* Configurable providers + +**TOTP (2FA):** + +* Time-based one-time passwords +* QR code setup +* Backup codes + +### Authorization + +**Single-User Model:** + +* Desktop: single user (owner) +* Server: single user per installation + +**Share Notes:** + +* Public access without authentication +* Separate Shaca cache +* Read-only access + +### CSRF Protection + +**CSRF Tokens:** + +* Required for state-changing operations +* Token in header or cookie +* Validation middleware + +### Input Sanitization + +**XSS Prevention:** + +* DOMPurify for HTML sanitization +* CKEditor content filtering +* CSP headers + +**SQL Injection:** + +* Parameterized queries only +* Better-sqlite3 prepared statements +* No string concatenation in SQL + +### Dependency Security + +**Vulnerability Scanning:** + +* Renovate bot for updates +* npm audit integration +* Override vulnerable sub-dependencies \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Concepts/Entities.md b/docs/Developer Guide/Developer Guide/Concepts/Entities.md index 56d954c94..faac90af7 100644 --- a/docs/Developer Guide/Developer Guide/Concepts/Entities.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Entities.md @@ -3,7 +3,7 @@ Trilium's data model is based on five core entities: -```mermaid +``` graph TD Note[Note
      BNote] Branch[Branch
      BBranch] diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 611bdd69a..4da87601a 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/Developer Guide/Developer Guide/Testing.md b/docs/Developer Guide/Developer Guide/Testing.md index a1f8a1983..570f52ded 100644 --- a/docs/Developer Guide/Developer Guide/Testing.md +++ b/docs/Developer Guide/Developer Guide/Testing.md @@ -1,4 +1,48 @@ # Testing +### Test Organization + +**Parallel Tests** (can run simultaneously): + +* Client tests +* Package tests +* E2E tests (isolated databases) + +**Sequential Tests** (shared resources): + +* Server tests (shared database) +* CKEditor plugin tests + +### Test Frameworks + +* **Vitest** - Unit and integration tests +* **Playwright** - E2E tests +* **Happy-DOM** - DOM testing environment + +## Test locations + +``` +apps/ +├── server/ +│ └── src/**/*.spec.ts # Server tests +├── client/ +│ └── src/**/*.spec.ts # Client tests +└── server-e2e/ +│ └── tests/**/*.spec.ts # E2E tests +└── desktop/ + └── e2e + └── tests/**/*.spec.ts # E2E tests +``` + +## Running tests + +At project root: + +``` +pnpm test:all # All tests +pnpm test:parallel # Fast parallel tests +pnpm test:sequential # Sequential tests only +``` + ## Unit testing and integration testing Using `vitest`, there are some unit and integration tests done for both the client and the server. @@ -27,4 +71,4 @@ These integration tests are run alongside unit tests. ## End-to-end testing -See e2e tests. \ No newline at end of file +See End-to-end tests. \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md index 387940158..60060adae 100644 --- a/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md +++ b/docs/Developer Guide/Developer Guide/Testing/End-to-end tests.md @@ -1,6 +1,15 @@ # End-to-end tests -* This tests both the client and the server, by running the server and then using Playwright to query the state of the page. -* These can be found in `apps/server-e2e` and `apps/desktop/e2e`. +**Server E2E:** + +* Tests the entire ETAPI. +* Tests WebSocket functionality + +**Desktop E2E:** + +* Playwright with Electron +* Tests some basic functionality such as creating a new document. + +These can be found in `apps/server-e2e` and `apps/desktop/e2e`. ## First-time run diff --git a/docs/Developer Guide/Developer Guide/Testing/Unit tests.md b/docs/Developer Guide/Developer Guide/Testing/Unit tests.md new file mode 100644 index 000000000..a009b8d92 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Testing/Unit tests.md @@ -0,0 +1,7 @@ +# Unit tests +At project level: + +* `pnpm server:test` +* `pnpm client:test` + +Unit tests are stored in the same directory as the source code being tested, with the `.spec.ts` suffix. \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 0a573e808..86ddd9589 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -56,6 +56,48 @@ "value": "bx bx-help-circle", "isInheritable": false, "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "poXkQfguuA0U", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "WOcw2SLH6tbX", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "gh7bpGYxajRS", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Q2z6av6JZVWm", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "MEtfsqa5VwNi", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "9qPsTWBorUhQ", + "isInheritable": false, + "position": 90 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide.md b/docs/User Guide/User Guide.md index 0225eeccc..3e5537135 100644 --- a/docs/User Guide/User Guide.md +++ b/docs/User Guide/User Guide.md @@ -1,13 +1,25 @@ # User Guide Trilium is an open-source solution for note-taking and organizing a personal knowledge base. Use it locally on your desktop, or sync it with your self-hosted server to keep your notes everywhere you go. -For a quick overview of the application, visit our website at [triliumnotes.org](https://triliumnotes.org/). - > [!TIP] > The same documentation can be accessed locally from within the Trilium Notes application by pressing F1. ## Getting started 1. See Quick Start. -2. Understand Notes. -3. Browse through Collections. \ No newline at end of file +2. Go through Basic Concepts and Features. +3. Understand Notes. +4. Browse through Collections. + +## Quick links + +* Desktop Installation +* Server Installation +* Frontend API or Backend API +* [ETAPI reference](User%20Guide/Advanced%20Usage/ETAPI%20\(REST%20API\)/API%20Reference.dat) + +## External links + +* The [Trilium Notes website](https://triliumnotes.org/), for a quick presentation of the application. +* [Developer Guide](https://docs.triliumnotes.org/developer-guide/), to understand the architecture and processes behind the development of Trilium Notes. +* [GitHub Repository (TriliumNext/Trilium)](https://github.com/TriliumNext/Trilium/) \ No newline at end of file From 7131d44d03b45d43df8becbd0bc0232aa673b72f Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 18:16:20 +0200 Subject: [PATCH 41/54] docs(dev): integrate rest of the documentation --- docs/DATABASE.md | 736 ---------------- docs/Developer Guide/!!!meta.json | 168 ++-- .../Developer Guide/Architecture.md | 83 +- .../Architecture/{API.md => APIs.md} | 2 +- .../Backend.md | 0 .../Developer Guide/Architecture/Database.md | 2 +- .../Frontend.md | 0 .../Architecture/Security Architecture.md | 79 -- .../Developer Guide/Architecture/Security.md | 464 ++++++++++ .../Concepts/Synchronisation.md} | 323 +++---- docs/QUICK_REFERENCE.md | 155 ---- docs/SCRIPTING.md | 734 --------------- docs/SECURITY_ARCHITECTURE.md | 834 ------------------ docs/TECHNICAL_DOCUMENTATION.md | 423 --------- 14 files changed, 772 insertions(+), 3231 deletions(-) delete mode 100644 docs/DATABASE.md rename docs/Developer Guide/Developer Guide/Architecture/{API.md => APIs.md} (99%) rename docs/Developer Guide/Developer Guide/Architecture/{Client-server architecture => }/Backend.md (100%) rename docs/Developer Guide/Developer Guide/Architecture/{Client-server architecture => }/Frontend.md (100%) delete mode 100644 docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md create mode 100644 docs/Developer Guide/Developer Guide/Architecture/Security.md rename docs/{SYNCHRONIZATION.md => Developer Guide/Developer Guide/Concepts/Synchronisation.md} (52%) delete mode 100644 docs/QUICK_REFERENCE.md delete mode 100644 docs/SCRIPTING.md delete mode 100644 docs/SECURITY_ARCHITECTURE.md delete mode 100644 docs/TECHNICAL_DOCUMENTATION.md diff --git a/docs/DATABASE.md b/docs/DATABASE.md deleted file mode 100644 index 52df42e0b..000000000 --- a/docs/DATABASE.md +++ /dev/null @@ -1,736 +0,0 @@ -# Trilium Database Architecture - -> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [Database Schema](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) - -## Overview - -Trilium uses **SQLite** as its embedded database engine, providing a reliable, file-based storage system that requires no separate database server. The database stores all notes, their relationships, metadata, and configuration. - -## Database File - -**Location:** -- Desktop: `~/.local/share/trilium-data/document.db` (Linux/Mac) or `%APPDATA%/trilium-data/document.db` (Windows) -- Server: Configured via `TRILIUM_DATA_DIR` environment variable -- Docker: Mounted volume at `/home/node/trilium-data/` - -**Characteristics:** -- Single-file database -- Embedded (no server required) -- ACID compliant -- Cross-platform -- Supports up to 281 TB database size -- Efficient for 100k+ notes - -## Database Driver - -**Library:** `better-sqlite3` - -**Why better-sqlite3:** -- Native performance (C++ bindings) -- Synchronous API (simpler code) -- Prepared statements -- Transaction support -- Type safety - -**Usage:** -```typescript -// apps/server/src/services/sql.ts -import Database from 'better-sqlite3' - -const db = new Database('document.db') -const stmt = db.prepare('SELECT * FROM notes WHERE noteId = ?') -const note = stmt.get(noteId) -``` - -## Schema Overview - -Schema location: `apps/server/src/assets/db/schema.sql` - -**Entity Tables:** -- `notes` - Core note data -- `branches` - Tree relationships -- `attributes` - Metadata (labels/relations) -- `revisions` - Version history -- `attachments` - File attachments -- `blobs` - Binary content storage - -**System Tables:** -- `options` - Application configuration -- `entity_changes` - Change tracking for sync -- `recent_notes` - Recently accessed notes -- `etapi_tokens` - API authentication tokens -- `user_data` - User credentials -- `sessions` - Web session storage - -## Entity Tables - -### Notes Table - -```sql -CREATE TABLE notes ( - noteId TEXT NOT NULL PRIMARY KEY, - title TEXT NOT NULL DEFAULT "note", - isProtected INT NOT NULL DEFAULT 0, - type TEXT NOT NULL DEFAULT 'text', - mime TEXT NOT NULL DEFAULT 'text/html', - blobId TEXT DEFAULT NULL, - isDeleted INT NOT NULL DEFAULT 0, - deleteId TEXT DEFAULT NULL, - dateCreated TEXT NOT NULL, - dateModified TEXT NOT NULL, - utcDateCreated TEXT NOT NULL, - utcDateModified TEXT NOT NULL -); - --- Indexes for performance -CREATE INDEX IDX_notes_title ON notes (title); -CREATE INDEX IDX_notes_type ON notes (type); -CREATE INDEX IDX_notes_dateCreated ON notes (dateCreated); -CREATE INDEX IDX_notes_dateModified ON notes (dateModified); -CREATE INDEX IDX_notes_utcDateModified ON notes (utcDateModified); -CREATE INDEX IDX_notes_blobId ON notes (blobId); -``` - -**Field Descriptions:** - -| Field | Type | Description | -|-------|------|-------------| -| `noteId` | TEXT | Unique identifier (UUID or custom) | -| `title` | TEXT | Note title (displayed in tree) | -| `isProtected` | INT | 1 if encrypted, 0 if not | -| `type` | TEXT | Note type: text, code, file, image, etc. | -| `mime` | TEXT | MIME type: text/html, application/json, etc. | -| `blobId` | TEXT | Reference to content in blobs table | -| `isDeleted` | INT | Soft delete flag | -| `deleteId` | TEXT | Unique delete operation ID | -| `dateCreated` | TEXT | Creation date (local timezone) | -| `dateModified` | TEXT | Last modified (local timezone) | -| `utcDateCreated` | TEXT | Creation date (UTC) | -| `utcDateModified` | TEXT | Last modified (UTC) | - -**Note Types:** -- `text` - Rich text with HTML -- `code` - Source code -- `file` - Binary file -- `image` - Image file -- `search` - Saved search -- `render` - Custom HTML rendering -- `relation-map` - Relationship diagram -- `canvas` - Excalidraw drawing -- `mermaid` - Mermaid diagram -- `book` - Container for documentation -- `web-view` - Embedded web page -- `mindmap` - Mind map -- `geomap` - Geographical map - -### Branches Table - -```sql -CREATE TABLE branches ( - branchId TEXT NOT NULL PRIMARY KEY, - noteId TEXT NOT NULL, - parentNoteId TEXT NOT NULL, - notePosition INTEGER NOT NULL, - prefix TEXT, - isExpanded INTEGER NOT NULL DEFAULT 0, - isDeleted INTEGER NOT NULL DEFAULT 0, - deleteId TEXT DEFAULT NULL, - utcDateModified TEXT NOT NULL -); - --- Indexes -CREATE INDEX IDX_branches_noteId_parentNoteId ON branches (noteId, parentNoteId); -CREATE INDEX IDX_branches_parentNoteId ON branches (parentNoteId); -``` - -**Field Descriptions:** - -| Field | Type | Description | -|-------|------|-------------| -| `branchId` | TEXT | Unique identifier for this branch | -| `noteId` | TEXT | Child note ID | -| `parentNoteId` | TEXT | Parent note ID | -| `notePosition` | INT | Sort order among siblings | -| `prefix` | TEXT | Optional prefix text (e.g., "Chapter 1:") | -| `isExpanded` | INT | Tree expansion state | -| `isDeleted` | INT | Soft delete flag | -| `deleteId` | TEXT | Delete operation ID | -| `utcDateModified` | TEXT | Last modified (UTC) | - -**Key Concepts:** -- **Cloning:** A note can have multiple branches (multiple parents) -- **Position:** Siblings ordered by `notePosition` -- **Prefix:** Display text before note title in tree -- **Soft Delete:** Allows sync before permanent deletion - -### Attributes Table - -```sql -CREATE TABLE attributes ( - attributeId TEXT NOT NULL PRIMARY KEY, - noteId TEXT NOT NULL, - type TEXT NOT NULL, - name TEXT NOT NULL, - value TEXT DEFAULT '' NOT NULL, - position INT DEFAULT 0 NOT NULL, - utcDateModified TEXT NOT NULL, - isDeleted INT NOT NULL, - deleteId TEXT DEFAULT NULL, - isInheritable INT DEFAULT 0 NULL -); - --- Indexes -CREATE INDEX IDX_attributes_name_value ON attributes (name, value); -CREATE INDEX IDX_attributes_noteId ON attributes (noteId); -CREATE INDEX IDX_attributes_value ON attributes (value); -``` - -**Field Descriptions:** - -| Field | Type | Description | -|-------|------|-------------| -| `attributeId` | TEXT | Unique identifier | -| `noteId` | TEXT | Note this attribute belongs to | -| `type` | TEXT | 'label' or 'relation' | -| `name` | TEXT | Attribute name | -| `value` | TEXT | Attribute value (text for labels, noteId for relations) | -| `position` | INT | Display order | -| `utcDateModified` | TEXT | Last modified (UTC) | -| `isDeleted` | INT | Soft delete flag | -| `deleteId` | TEXT | Delete operation ID | -| `isInheritable` | INT | Inherited by child notes | - -**Attribute Types:** - -**Labels** (key-value pairs): -```sql --- Example: #priority=high -INSERT INTO attributes (attributeId, noteId, type, name, value) -VALUES ('attr1', 'note123', 'label', 'priority', 'high') -``` - -**Relations** (links to other notes): -```sql --- Example: ~author=[[noteId]] -INSERT INTO attributes (attributeId, noteId, type, name, value) -VALUES ('attr2', 'note123', 'relation', 'author', 'author-note-id') -``` - -**Special Attributes:** -- `#run=frontendStartup` - Execute script on frontend load -- `#run=backendStartup` - Execute script on backend load -- `#customWidget` - Custom widget implementation -- `#iconClass` - Custom tree icon -- `#cssClass` - CSS class for note -- `#sorted` - Auto-sort children -- `#hideChildrenOverview` - Don't show child list - -### Revisions Table - -```sql -CREATE TABLE revisions ( - revisionId TEXT NOT NULL PRIMARY KEY, - noteId TEXT NOT NULL, - type TEXT DEFAULT '' NOT NULL, - mime TEXT DEFAULT '' NOT NULL, - title TEXT NOT NULL, - isProtected INT NOT NULL DEFAULT 0, - blobId TEXT DEFAULT NULL, - utcDateLastEdited TEXT NOT NULL, - utcDateCreated TEXT NOT NULL, - utcDateModified TEXT NOT NULL, - dateLastEdited TEXT NOT NULL, - dateCreated TEXT NOT NULL -); - --- Indexes -CREATE INDEX IDX_revisions_noteId ON revisions (noteId); -CREATE INDEX IDX_revisions_utcDateCreated ON revisions (utcDateCreated); -CREATE INDEX IDX_revisions_utcDateLastEdited ON revisions (utcDateLastEdited); -CREATE INDEX IDX_revisions_blobId ON revisions (blobId); -``` - -**Revision Strategy:** -- Automatic revision created on note modification -- Configurable interval (default: daily max) -- Stores complete note snapshot -- Allows reverting to previous versions -- Can be disabled with `#disableVersioning` - -### Attachments Table - -```sql -CREATE TABLE attachments ( - attachmentId TEXT NOT NULL PRIMARY KEY, - ownerId TEXT NOT NULL, - role TEXT NOT NULL, - mime TEXT NOT NULL, - title TEXT NOT NULL, - isProtected INT NOT NULL DEFAULT 0, - position INT DEFAULT 0 NOT NULL, - blobId TEXT DEFAULT NULL, - dateModified TEXT NOT NULL, - utcDateModified TEXT NOT NULL, - utcDateScheduledForErasureSince TEXT DEFAULT NULL, - isDeleted INT NOT NULL, - deleteId TEXT DEFAULT NULL -); - --- Indexes -CREATE INDEX IDX_attachments_ownerId_role ON attachments (ownerId, role); -CREATE INDEX IDX_attachments_blobId ON attachments (blobId); -``` - -**Attachment Roles:** -- `file` - Regular file attachment -- `image` - Image file -- `cover-image` - Note cover image -- Custom roles for specific purposes - -### Blobs Table - -```sql -CREATE TABLE blobs ( - blobId TEXT NOT NULL PRIMARY KEY, - content TEXT NULL DEFAULT NULL, - dateModified TEXT NOT NULL, - utcDateModified TEXT NOT NULL -); -``` - -**Blob Usage:** -- Stores actual content (text or binary) -- Referenced by notes, revisions, attachments -- Deduplication via hash-based blobId -- TEXT type stores both text and binary (base64) - -**Content Types:** -- **Text notes:** HTML content -- **Code notes:** Plain text source code -- **Binary notes:** Base64 encoded data -- **Protected notes:** Encrypted content - -## System Tables - -### Options Table - -```sql -CREATE TABLE options ( - name TEXT NOT NULL PRIMARY KEY, - value TEXT NOT NULL, - isSynced INTEGER DEFAULT 0 NOT NULL, - utcDateModified TEXT NOT NULL -); -``` - -**Key Options:** -- `documentId` - Unique installation ID -- `dbVersion` - Schema version -- `syncVersion` - Sync protocol version -- `passwordVerificationHash` - Password verification -- `encryptedDataKey` - Encryption key (encrypted) -- `theme` - UI theme -- Various feature flags and settings - -**Synced Options:** -- `isSynced = 1` - Synced across devices -- `isSynced = 0` - Local to this installation - -### Entity Changes Table - -```sql -CREATE TABLE entity_changes ( - id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, - entityName TEXT NOT NULL, - entityId TEXT NOT NULL, - hash TEXT NOT NULL, - isErased INT NOT NULL, - changeId TEXT NOT NULL, - componentId TEXT NOT NULL, - instanceId TEXT NOT NULL, - isSynced INTEGER NOT NULL, - utcDateChanged TEXT NOT NULL -); - --- Indexes -CREATE UNIQUE INDEX IDX_entityChanges_entityName_entityId - ON entity_changes (entityName, entityId); -CREATE INDEX IDX_entity_changes_changeId ON entity_changes (changeId); -``` - -**Purpose:** Track all entity modifications for synchronization - -**Entity Types:** -- `notes` -- `branches` -- `attributes` -- `revisions` -- `attachments` -- `options` -- `etapi_tokens` - -### Recent Notes Table - -```sql -CREATE TABLE recent_notes ( - noteId TEXT NOT NULL PRIMARY KEY, - notePath TEXT NOT NULL, - utcDateCreated TEXT NOT NULL -); -``` - -**Purpose:** Track recently accessed notes for quick access - -### Sessions Table - -```sql -CREATE TABLE sessions ( - sid TEXT PRIMARY KEY, - sess TEXT NOT NULL, - expired TEXT NOT NULL -); -``` - -**Purpose:** HTTP session storage for web interface - -### User Data Table - -```sql -CREATE TABLE user_data ( - tmpID INT PRIMARY KEY, - username TEXT, - email TEXT, - userIDEncryptedDataKey TEXT, - userIDVerificationHash TEXT, - salt TEXT, - derivedKey TEXT, - isSetup TEXT DEFAULT "false" -); -``` - -**Purpose:** Store user authentication credentials - -### ETAPI Tokens Table - -```sql -CREATE TABLE etapi_tokens ( - etapiTokenId TEXT PRIMARY KEY NOT NULL, - name TEXT NOT NULL, - tokenHash TEXT NOT NULL, - utcDateCreated TEXT NOT NULL, - utcDateModified TEXT NOT NULL, - isDeleted INT NOT NULL DEFAULT 0 -); -``` - -**Purpose:** API token authentication for external access - -## Data Relationships - -```mermaid -graph TB - Notes[Notes] - Branches[Branches] - Attributes[Attributes] - Attachments[Attachments] - Blobs[(Blobs)] - Revisions[Revisions] - - Notes --> Branches - Notes --> Attributes - Notes --> Attachments - Notes --> Blobs - Notes --> Revisions - - Branches --> Blobs - Attachments --> Blobs - Revisions --> Blobs - - style Notes fill:#e1f5ff - style Blobs fill:#ffe1e1 -``` - -**Relationships:** -- Notes ↔ Branches (many-to-many via noteId) -- Notes → Attributes (one-to-many) -- Notes → Blobs (one-to-one) -- Notes → Revisions (one-to-many) -- Notes → Attachments (one-to-many) -- Attachments → Blobs (one-to-one) -- Revisions → Blobs (one-to-one) - -## Database Access Patterns - -### Direct SQL Access - -**Location:** `apps/server/src/services/sql.ts` - -```typescript -// Execute query (returns rows) -const notes = sql.getRows('SELECT * FROM notes WHERE type = ?', ['text']) - -// Execute query (returns single row) -const note = sql.getRow('SELECT * FROM notes WHERE noteId = ?', [noteId]) - -// Execute statement (no return) -sql.execute('UPDATE notes SET title = ? WHERE noteId = ?', [title, noteId]) - -// Insert -sql.insert('notes', { - noteId: 'new-note-id', - title: 'New Note', - type: 'text', - // ... -}) - -// Transactions -sql.transactional(() => { - sql.execute('UPDATE ...') - sql.execute('INSERT ...') -}) -``` - -### Entity-Based Access (Recommended) - -**Via Becca Cache:** - -```typescript -// Get entity from cache -const note = becca.getNote(noteId) - -// Modify and save -note.title = 'Updated Title' -note.save() // Writes to database - -// Create new -const newNote = becca.createNote({ - parentNoteId: 'root', - title: 'New Note', - type: 'text', - content: 'Hello World' -}) - -// Delete -note.markAsDeleted() -``` - -## Database Migrations - -**Location:** `apps/server/src/migrations/` - -**Migration Files:** -- Format: `XXXX_migration_name.sql` or `XXXX_migration_name.js` -- Executed in numerical order -- Version tracked in `options.dbVersion` - -**SQL Migration Example:** -```sql --- 0280_add_new_column.sql -ALTER TABLE notes ADD COLUMN newField TEXT DEFAULT NULL; - -UPDATE options SET value = '280' WHERE name = 'dbVersion'; -``` - -**JavaScript Migration Example:** -```javascript -// 0285_complex_migration.js -module.exports = () => { - const notes = sql.getRows('SELECT * FROM notes WHERE type = ?', ['old-type']) - - for (const note of notes) { - sql.execute('UPDATE notes SET type = ? WHERE noteId = ?', - ['new-type', note.noteId]) - } -} -``` - -**Migration Process:** -1. Server checks `dbVersion` on startup -2. Compares with latest migration number -3. Executes pending migrations in order -4. Updates `dbVersion` after each -5. Restarts if migrations ran - -## Database Maintenance - -### Backup - -**Full Backup:** -```bash -# Copy database file -cp document.db document.db.backup - -# Or use Trilium's backup feature -# Settings → Backup -``` - -**Automatic Backups:** -- Daily backup (configurable) -- Stored in `backup/` directory -- Retention policy (keep last N backups) - -### Vacuum - -**Purpose:** Reclaim unused space, defragment - -```sql -VACUUM; -``` - -**When to vacuum:** -- After deleting many notes -- Database file size larger than expected -- Performance degradation - -### Integrity Check - -```sql -PRAGMA integrity_check; -``` - -**Result:** "ok" or list of errors - -### Consistency Checks - -**Built-in Consistency Checks:** - -Location: `apps/server/src/services/consistency_checks.ts` - -- Orphaned branches -- Missing parent notes -- Circular dependencies -- Invalid entity references -- Blob reference integrity - -**Run Checks:** -```typescript -// Via API -POST /api/consistency-check - -// Or from backend script -api.runConsistencyChecks() -``` - -## Performance Optimization - -### Indexes - -**Existing Indexes:** -- `notes.title` - Fast title searches -- `notes.type` - Filter by type -- `notes.dateCreated/Modified` - Time-based queries -- `branches.noteId_parentNoteId` - Tree navigation -- `attributes.name_value` - Attribute searches - -**Query Optimization:** -```sql --- Use indexed columns in WHERE clause -SELECT * FROM notes WHERE type = 'text' -- Uses index - --- Avoid functions on indexed columns -SELECT * FROM notes WHERE LOWER(title) = 'test' -- No index - --- Better -SELECT * FROM notes WHERE title = 'Test' -- Uses index -``` - -### Connection Settings - -```typescript -// apps/server/src/services/sql.ts -const db = new Database('document.db', { - // Enable WAL mode for better concurrency - verbose: console.log -}) - -db.pragma('journal_mode = WAL') -db.pragma('synchronous = NORMAL') -db.pragma('cache_size = -64000') // 64MB cache -db.pragma('temp_store = MEMORY') -``` - -**WAL Mode Benefits:** -- Better concurrency (readers don't block writers) -- Faster commits -- More robust - -### Query Performance - -**Use EXPLAIN QUERY PLAN:** -```sql -EXPLAIN QUERY PLAN -SELECT * FROM notes -WHERE type = 'text' - AND dateCreated > '2025-01-01' -``` - -**Analyze slow queries:** -- Check index usage -- Avoid SELECT * -- Use prepared statements -- Batch operations in transactions - -## Database Size Management - -**Typical Sizes:** -- 1,000 notes: ~5-10 MB -- 10,000 notes: ~50-100 MB -- 100,000 notes: ~500 MB - 1 GB - -**Size Reduction Strategies:** - -1. **Delete old revisions** -2. **Remove large attachments** -3. **Vacuum database** -4. **Compact blobs** -5. **Archive old notes** - -**Blob Deduplication:** -- Blobs identified by content hash -- Identical content shares one blob -- Automatic deduplication on insert - -## Security Considerations - -### Protected Notes Encryption - -**Encryption Process:** -```typescript -// Encrypt blob content -const encryptedContent = encrypt(content, dataKey) -blob.content = encryptedContent - -// Store encrypted -sql.insert('blobs', { blobId, content: encryptedContent }) -``` - -**Encryption Details:** -- Algorithm: AES-256-CBC -- Key derivation: PBKDF2 (10,000 iterations) -- Per-note encryption -- Master key encrypted with user password - -### SQL Injection Prevention - -**Always use parameterized queries:** -```typescript -// GOOD - Safe from SQL injection -sql.execute('SELECT * FROM notes WHERE title = ?', [userInput]) - -// BAD - Vulnerable to SQL injection -sql.execute(`SELECT * FROM notes WHERE title = '${userInput}'`) -``` - -### Database File Protection - -**File Permissions:** -- Owner read/write only -- No group/other access -- Located in user-specific directory - ---- - -**See Also:** -- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture -- [Database Schema Files](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Database/) -- [Migration Scripts](../apps/server/src/migrations/) diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index f19dbc16a..397bdcab4 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -172,64 +172,57 @@ "children": [ { "isClone": false, - "noteId": "2DJZgzpTJ078", + "noteId": "dsMq2EIOMOBU", "notePath": [ "jdjRLhLV3TtI", "MhwWMgxwDTZL", - "2DJZgzpTJ078" + "dsMq2EIOMOBU" ], - "title": "Client-server architecture", + "title": "Frontend", "notePosition": 10, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", - "attributes": [], - "format": "markdown", - "attachments": [], - "dirFileName": "Client-server architecture", - "children": [ + "attributes": [ { - "isClone": false, - "noteId": "dsMq2EIOMOBU", - "notePath": [ - "jdjRLhLV3TtI", - "MhwWMgxwDTZL", - "2DJZgzpTJ078", - "dsMq2EIOMOBU" - ], - "title": "Frontend", - "notePosition": 10, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Frontend.md", - "attachments": [] - }, - { - "isClone": false, - "noteId": "tsswRlmHEnYW", - "notePath": [ - "jdjRLhLV3TtI", - "MhwWMgxwDTZL", - "2DJZgzpTJ078", - "tsswRlmHEnYW" - ], - "title": "Backend", - "notePosition": 20, - "prefix": null, - "isExpanded": false, - "type": "text", - "mime": "text/html", - "attributes": [], - "format": "markdown", - "dataFileName": "Backend.md", - "attachments": [] + "type": "label", + "name": "shareAlias", + "value": "frontend", + "isInheritable": false, + "position": 20 } - ] + ], + "format": "markdown", + "dataFileName": "Frontend.md", + "attachments": [] + }, + { + "isClone": false, + "noteId": "tsswRlmHEnYW", + "notePath": [ + "jdjRLhLV3TtI", + "MhwWMgxwDTZL", + "tsswRlmHEnYW" + ], + "title": "Backend", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "backend", + "isInheritable": false, + "position": 20 + } + ], + "format": "markdown", + "dataFileName": "Backend.md", + "attachments": [] }, { "isClone": false, @@ -240,7 +233,7 @@ "pRZhrVIGCbMu" ], "title": "Database", - "notePosition": 20, + "notePosition": 40, "prefix": null, "isExpanded": false, "type": "text", @@ -785,15 +778,23 @@ "MhwWMgxwDTZL", "Wxn82Em8B7U5" ], - "title": "API", - "notePosition": 30, + "title": "APIs", + "notePosition": 50, "prefix": null, "isExpanded": false, "type": "text", "mime": "text/html", - "attributes": [], + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "api", + "isInheritable": false, + "position": 20 + } + ], "format": "markdown", - "dataFileName": "API.md", + "dataFileName": "APIs.md", "attachments": [] }, { @@ -805,7 +806,7 @@ "Vk4zD1Iirarg" ], "title": "Arhitecture Decision Records", - "notePosition": 40, + "notePosition": 60, "prefix": null, "isExpanded": false, "type": "text", @@ -817,6 +818,13 @@ "value": "Jg7clqogFOyD", "isInheritable": false, "position": 20 + }, + { + "type": "label", + "name": "shareAlias", + "value": "adr", + "isInheritable": false, + "position": 30 } ], "format": "markdown", @@ -825,14 +833,14 @@ }, { "isClone": false, - "noteId": "QW1MB7RZB5Gf", + "noteId": "RHbKw3xiwk3S", "notePath": [ "jdjRLhLV3TtI", "MhwWMgxwDTZL", - "QW1MB7RZB5Gf" + "RHbKw3xiwk3S" ], - "title": "Security Architecture", - "notePosition": 50, + "title": "Security", + "notePosition": 80, "prefix": null, "isExpanded": false, "type": "text", @@ -841,13 +849,13 @@ { "type": "label", "name": "shareAlias", - "value": "security-architecture", + "value": "security", "isInheritable": false, "position": 20 } ], "format": "markdown", - "dataFileName": "Security Architecture.md", + "dataFileName": "Security.md", "attachments": [] } ] @@ -1153,6 +1161,13 @@ "value": "bx bx-rocket", "isInheritable": false, "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "releasing", + "isInheritable": false, + "position": 40 } ], "format": "markdown", @@ -1181,6 +1196,13 @@ "value": "bx bxs-component", "isInheritable": false, "position": 20 + }, + { + "type": "label", + "name": "shareAlias", + "value": "dependencies", + "isInheritable": false, + "position": 30 } ], "format": "markdown", @@ -1527,6 +1549,13 @@ "value": "bx bx-microchip", "isInheritable": false, "position": 20 + }, + { + "type": "label", + "name": "shareAlias", + "value": "cache", + "isInheritable": false, + "position": 30 } ], "format": "markdown", @@ -2001,7 +2030,15 @@ "isExpanded": false, "type": "text", "mime": "text/html", - "attributes": [], + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "note-types", + "isInheritable": false, + "position": 20 + } + ], "format": "markdown", "attachments": [], "dirFileName": "Note Types", @@ -2547,6 +2584,7 @@ } ], "format": "markdown", + "dataFileName": "Synchronisation.md", "attachments": [], "dirFileName": "Synchronisation", "children": [ @@ -2794,7 +2832,15 @@ "isExpanded": false, "type": "text", "mime": "text/html", - "attributes": [], + "attributes": [ + { + "type": "label", + "name": "shareAlias", + "value": "unit-tests", + "isInheritable": false, + "position": 20 + } + ], "format": "markdown", "dataFileName": "Unit tests.md", "attachments": [] diff --git a/docs/Developer Guide/Developer Guide/Architecture.md b/docs/Developer Guide/Developer Guide/Architecture.md index 48a91fcde..66cb82eea 100644 --- a/docs/Developer Guide/Developer Guide/Architecture.md +++ b/docs/Developer Guide/Developer Guide/Architecture.md @@ -118,4 +118,85 @@ desktop → client → commons server → client → commons client → ckeditor5, codemirror, highlightjs ckeditor5 → ckeditor5-* plugins -``` \ No newline at end of file +``` + +## Security summary + +### Encryption System + +**Per-Note Encryption:** + +* Notes can be individually protected +* AES-128-CBC encryption for encrypted notes. +* Separate protected session management + +**Protected Session:** + +* Time-limited access to protected notes +* Automatic timeout +* Re-authentication required +* Frontend: `protected_session.ts` +* Backend: `protected_session.ts` + +### Authentication + +**Password Auth:** + +* PBKDF2 key derivation +* Salt per installation +* Hash verification + +**OpenID Connect:** + +* External identity provider support +* OAuth 2.0 flow +* Configurable providers + +**TOTP (2FA):** + +* Time-based one-time passwords +* QR code setup +* Backup codes + +### Authorization + +**Single-User Model:** + +* Desktop: single user (owner) +* Server: single user per installation + +**Share Notes:** + +* Public access without authentication +* Separate Shaca cache +* Read-only access + +### CSRF Protection + +**CSRF Tokens:** + +* Required for state-changing operations +* Token in header or cookie +* Validation middleware + +### Input Sanitization + +**XSS Prevention:** + +* DOMPurify for HTML sanitization +* CKEditor content filtering +* CSP headers + +**SQL Injection:** + +* Parameterized queries only +* Better-sqlite3 prepared statements +* No string concatenation in SQL + +### Dependency Security + +**Vulnerability Scanning:** + +* Renovate bot for updates +* npm audit integration +* Override vulnerable sub-dependencies \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/API.md b/docs/Developer Guide/Developer Guide/Architecture/APIs.md similarity index 99% rename from docs/Developer Guide/Developer Guide/Architecture/API.md rename to docs/Developer Guide/Developer Guide/Architecture/APIs.md index 92f6fb813..cdd954a61 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/API.md +++ b/docs/Developer Guide/Developer Guide/Architecture/APIs.md @@ -1,4 +1,4 @@ -# API +# APIs ### Internal API **REST Endpoints** (`/api/*`) diff --git a/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md b/docs/Developer Guide/Developer Guide/Architecture/Backend.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Backend.md rename to docs/Developer Guide/Developer Guide/Architecture/Backend.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Database.md b/docs/Developer Guide/Developer Guide/Architecture/Database.md index bb80ccdb1..b8836b56d 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Database.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Database.md @@ -1,5 +1,5 @@ # Database -Trilium uses **SQLite** as its database engine, managed via `better-sqlite3`. +Trilium uses **SQLite** (via `better-sqlite3`) as its embedded database engine, providing a reliable, file-based storage system that requires no separate database server. The database stores all notes, their relationships, metadata, and configuration. Schema location: `apps/server/src/assets/db/schema.sql` diff --git a/docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md b/docs/Developer Guide/Developer Guide/Architecture/Frontend.md similarity index 100% rename from docs/Developer Guide/Developer Guide/Architecture/Client-server architecture/Frontend.md rename to docs/Developer Guide/Developer Guide/Architecture/Frontend.md diff --git a/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md b/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md deleted file mode 100644 index ab0c88c06..000000000 --- a/docs/Developer Guide/Developer Guide/Architecture/Security Architecture.md +++ /dev/null @@ -1,79 +0,0 @@ -# Security Architecture -### Encryption System - -**Per-Note Encryption:** - -* Notes can be individually protected -* AES-128-CBC encryption for encrypted notes. -* Separate protected session management - -**Protected Session:** - -* Time-limited access to protected notes -* Automatic timeout -* Re-authentication required -* Frontend: `protected_session.ts` -* Backend: `protected_session.ts` - -### Authentication - -**Password Auth:** - -* PBKDF2 key derivation -* Salt per installation -* Hash verification - -**OpenID Connect:** - -* External identity provider support -* OAuth 2.0 flow -* Configurable providers - -**TOTP (2FA):** - -* Time-based one-time passwords -* QR code setup -* Backup codes - -### Authorization - -**Single-User Model:** - -* Desktop: single user (owner) -* Server: single user per installation - -**Share Notes:** - -* Public access without authentication -* Separate Shaca cache -* Read-only access - -### CSRF Protection - -**CSRF Tokens:** - -* Required for state-changing operations -* Token in header or cookie -* Validation middleware - -### Input Sanitization - -**XSS Prevention:** - -* DOMPurify for HTML sanitization -* CKEditor content filtering -* CSP headers - -**SQL Injection:** - -* Parameterized queries only -* Better-sqlite3 prepared statements -* No string concatenation in SQL - -### Dependency Security - -**Vulnerability Scanning:** - -* Renovate bot for updates -* npm audit integration -* Override vulnerable sub-dependencies \ No newline at end of file diff --git a/docs/Developer Guide/Developer Guide/Architecture/Security.md b/docs/Developer Guide/Developer Guide/Architecture/Security.md new file mode 100644 index 000000000..61fdc7377 --- /dev/null +++ b/docs/Developer Guide/Developer Guide/Architecture/Security.md @@ -0,0 +1,464 @@ +# Security +Trilium implements a **defense-in-depth security model** with multiple layers of protection for user data. The security architecture covers authentication, authorization, encryption, input sanitization, and secure communication. + +## Security Principles + +1. **Data Privacy**: User data is protected at rest and in transit +2. **Encryption**: Per-note encryption for sensitive content +3. **Authentication**: Multiple authentication methods supported +4. **Authorization**: Single-user model with granular protected sessions +5. **Input Validation**: All user input sanitized +6. **Secure Defaults**: Security features enabled by default +7. **Transparency**: Open source allows security audits + +## Threat Model + +### Threats Considered + +1. **Unauthorized Access** + * Physical access to device + * Network eavesdropping + * Stolen credentials + * Session hijacking +2. **Data Exfiltration** + * Malicious scripts + * XSS attacks + * SQL injection + * CSRF attacks +3. **Data Corruption** + * Malicious modifications + * Database tampering + * Sync conflicts +4. **Privacy Leaks** + * Unencrypted backups + * Search indexing + * Temporary files + * Memory dumps + +### Out of Scope + +* Nation-state attackers +* Zero-day vulnerabilities in dependencies +* Hardware vulnerabilities (Spectre, Meltdown) +* Physical access with unlimited time +* Quantum computing attacks + +## Authentication + +### Password Authentication + +**Implementation:** `apps/server/src/services/password.ts` + +### TOTP (Two-Factor Authentication) + +**Implementation:** `apps/server/src/routes/api/login.ts` + +### OpenID Connect + +**Implementation:** `apps/server/src/routes/api/login.ts` + +**Supported Providers:** + +* Any OpenID Connect compatible provider +* Google, GitHub, Auth0, etc. + +**Flow:** + +```typescript +// 1. Redirect to provider +GET /api/login/openid + +// 2. Provider redirects back with code +GET /api/login/openid/callback?code=... + +// 3. Exchange code for tokens +const tokens = await openidClient.callback(redirectUri, req.query) + +// 4. Verify ID token +const claims = tokens.claims() + +// 5. Create session +req.session.loggedIn = true +``` + +### Session Management + +**Session Storage:** SQLite database (sessions table) + +**Session Configuration:** + +```typescript +app.use(session({ + secret: sessionSecret, + resave: false, + saveUninitialized: false, + rolling: true, + cookie: { + maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days + httpOnly: true, + secure: isHttps, + sameSite: 'lax' + }, + store: new SqliteStore({ + db: db, + table: 'sessions' + }) +})) +``` + +**Session Invalidation:** + +* Automatic timeout after inactivity +* Manual logout clears session +* Server restart invalidates all sessions (optional) + +## Authorization + +### Single-User Model + +**Desktop:** + +* Single user (owner of device) +* No multi-user support +* Full access to all notes + +**Server:** + +* Single user per installation +* Authentication required for all operations +* No user roles or permissions + +### Protected Sessions + +**Purpose:** Temporary access to encrypted (protected) notes + +**Implementation:** `apps/server/src/services/protected_session.ts` + +**Workflow:** + +```typescript +// 1. User enters password for protected notes +POST /api/protected-session/enter +Body: { password: "protected-password" } + +// 2. Derive encryption key +const protectedDataKey = deriveKey(password) + +// 3. Verify password (decrypt known encrypted value) +const decrypted = decrypt(testValue, protectedDataKey) +if (decrypted === expectedValue) { + // 4. Store in memory (not in session) + protectedSessionHolder.setProtectedDataKey(protectedDataKey) + + // 5. Set timeout + setTimeout(() => { + protectedSessionHolder.clearProtectedDataKey() + }, timeout) +} +``` + +**Protected Session Timeout:** + +* Default: 10 minutes (configurable) +* Extends on activity +* Cleared on browser close +* Separate from main session + +### API Authorization + +**Internal API:** + +* Requires authenticated session +* CSRF token validation +* Same-origin policy + +**ETAPI (External API):** + +* Token-based authentication +* No session required +* Rate limiting + +## Encryption + +### Note Encryption + +**Encryption Algorithm:** AES-256-CBC + +**Key Hierarchy:** + +``` +User Password + ↓ (scrypt) +Data Key (for protected notes) + ↓ (AES-128) +Protected Note Content +``` + +**Protected Note Metadata:** + +* Content IS encrypted +* Type and MIME are NOT encrypted +* Attributes are NOT encrypted + +### Data Key Management + +**Key Rotation:** + +* Not currently supported +* Requires re-encrypting all protected notes + +### Transport Encryption + +**HTTPS:** + +* Recommended for server installations +* TLS 1.2+ only +* Strong cipher suites preferred +* Certificate validation enabled + +**Desktop:** + +* Local communication (no network) +* No HTTPS required + +### Backup Encryption + +**Database Backups:** + +* Protected notes remain encrypted in backup +* Backup file should be protected separately +* Consider encrypting backup storage location + +## Input Sanitization + +### XSS Prevention + +* **HTML Sanitization** +* **CKEditor Configuration:** + + ``` + // apps/client/src/widgets/type_widgets/text_type_widget.ts + ClassicEditor.create(element, { + // Restrict allowed content + htmlSupport: { + allow: [ + { name: /./, attributes: true, classes: true, styles: true } + ], + disallow: [ + { name: 'script' }, + { name: 'iframe', attributes: /^(?!src$).*/ } + ] + } + }) + ``` +* Content Security Policy + +### SQL Injection Prevention + +**Parameterized Queries:** + +```typescript +const notes = sql.getRows( + 'SELECT * FROM notes WHERE title = ?', + [userInput] +) +``` + +**ORM Usage:** + +```typescript +// Entity-based access prevents SQL injection +const note = becca.getNote(noteId) +note.title = userInput // Sanitized by entity +note.save() // Parameterized query +``` + +### CSRF Prevention + +**CSRF Token Validation:** + +Location: `apps/server/src/routes/csrf_protection.ts` + +Stateless CSRF using [Double Submit Cookie Pattern](https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie) via [`csrf-csrf`](https://github.com/Psifi-Solutions/csrf-csrf). + +### File Upload Validation + +**Validation:** + +```typescript +// Validate file size +const maxSize = 100 * 1024 * 1024 // 100 MB +if (file.size > maxSize) { + throw new Error('File too large') +} +``` + +## Network Security + +### HTTPS Configuration + +**Certificate Validation:** + +* Require valid certificates in production +* Self-signed certificates allowed for development +* Certificate pinning not implemented + +### Rate Limiting + +**Login Rate Limiting:** + +```typescript +const loginLimiter = rateLimit({ + windowMs: 15 * 60 * 1000, + max: 10, // 10 failed attempts + skipSuccessfulRequests: true +}) + +app.post('/api/login/password', loginLimiter, loginHandler) +``` + +## Data Security + +### Secure Data Deletion + +**Soft Delete:** + +```typescript +// Mark as deleted (sync first) +note.isDeleted = 1 +note.deleteId = generateUUID() +note.save() + +// Entity change tracked for sync +addEntityChange('notes', noteId, note) +``` + +**Hard Delete (Erase):** + +```typescript +// After sync completed +sql.execute('DELETE FROM notes WHERE noteId = ?', [noteId]) +sql.execute('DELETE FROM branches WHERE noteId = ?', [noteId]) +sql.execute('DELETE FROM attributes WHERE noteId = ?', [noteId]) + +// Mark entity change as erased +sql.execute('UPDATE entity_changes SET isErased = 1 WHERE entityId = ?', [noteId]) +``` + +**Blob Cleanup:** + +```typescript +// Find orphaned blobs (not referenced by any note/revision/attachment) +const orphanedBlobs = sql.getRows(` + SELECT blobId FROM blobs + WHERE blobId NOT IN (SELECT blobId FROM notes WHERE blobId IS NOT NULL) + AND blobId NOT IN (SELECT blobId FROM revisions WHERE blobId IS NOT NULL) + AND blobId NOT IN (SELECT blobId FROM attachments WHERE blobId IS NOT NULL) +`) + +// Delete orphaned blobs +for (const blob of orphanedBlobs) { + sql.execute('DELETE FROM blobs WHERE blobId = ?', [blob.blobId]) +} +``` + +### Memory Security + +**Protected Data in Memory:** + +* Protected data keys stored in memory only +* Cleared on timeout +* Not written to disk +* Not in session storage + +## Dependency Security + +### Vulnerability Scanning + +**Tools:** + +* Renovate bot - Automatic dependency updates +* `pnpm audit` - Check for known vulnerabilities +* GitHub Dependabot alerts + +**Process:** + +```sh +# Check for vulnerabilities +npm audit + +# Fix automatically +npm audit fix + +# Manual review for breaking changes +npm audit fix --force +``` + +### Dependency Pinning + +**package.json:** + +``` +{ + "dependencies": { + "express": "4.18.2", // Exact version + "better-sqlite3": "^9.2.2" // Compatible versions + } +} +``` + +**pnpm Overrides:** + +``` +{ + "pnpm": { + "overrides": { + "lodash@<4.17.21": ">=4.17.21", // Force minimum version + "axios@<0.21.2": ">=0.21.2" + } + } +} +``` + +### Patch Management + +**pnpm Patches:** + +```sh +# Create patch +pnpm patch @ckeditor/ckeditor5 + +# Edit files in temporary directory +# ... + +# Generate patch file +pnpm patch-commit /tmp/ckeditor5-patch + +# Patch applied automatically on install +``` + +## Security Auditing + +### Logs + +**Security Events Logged:** + +* Login attempts (success/failure) +* Protected session access +* Password changes +* ETAPI token usage +* Failed CSRF validations + +**Log Location:** + +* Desktop: Console output +* Server: Log files or stdout + +### Monitoring + +**Metrics to Monitor:** + +* Failed login attempts +* API error rates +* Unusual database changes +* Large exports/imports \ No newline at end of file diff --git a/docs/SYNCHRONIZATION.md b/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md similarity index 52% rename from docs/SYNCHRONIZATION.md rename to docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md index 0945e533a..f97bd3c4e 100644 --- a/docs/SYNCHRONIZATION.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md @@ -1,16 +1,11 @@ -# Trilium Synchronization Architecture +# Synchronisation +Trilium implements a **bidirectional synchronization system** that allows users to sync their note databases across multiple devices (desktop clients and server instances). The sync protocol is designed to handle: -> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [User Guide: Synchronization](https://triliumnext.github.io/Docs/Wiki/synchronization) - -## Overview - -Trilium implements a sophisticated **bidirectional synchronization system** that allows users to sync their note databases across multiple devices (desktop clients and server instances). The sync protocol is designed to handle: - -- Concurrent modifications across devices -- Conflict resolution -- Partial sync (only changed entities) -- Protected note synchronization -- Efficient bandwidth usage +* Concurrent modifications across devices +* Simple conflict resolution (without “merge conflict” indication). +* Partial sync (only changed entities) +* Protected note synchronization +* Efficient bandwidth usage ## Sync Architecture @@ -35,7 +30,7 @@ graph TB Every modification to any entity (note, branch, attribute, etc.) creates an **entity change** record: -```sql +``` entity_changes ( id, -- Auto-increment ID entityName, -- 'notes', 'branches', 'attributes', etc. @@ -43,7 +38,7 @@ entity_changes ( hash, -- Content hash for integrity isErased, -- If entity was erased (deleted permanently) changeId, -- Unique change identifier - componentId, -- Installation identifier + componentId, -- Unique component/widget identifier instanceId, -- Process instance identifier isSynced, -- Whether synced to server utcDateChanged -- When change occurred @@ -51,17 +46,19 @@ entity_changes ( ``` **Key Properties:** -- **changeId**: Globally unique identifier (UUID) for the change -- **componentId**: Unique per Trilium installation (persists across restarts) -- **instanceId**: Unique per process (changes on restart) -- **hash**: SHA-256 hash of entity data for integrity verification + +* **changeId**: Globally unique identifier (UUID) for the change +* **componentId**: Unique identifier of the component/widget that generated to change (can be used to avoid refreshing the widget being edited). +* **instanceId**: Unique per process (changes on restart) +* **hash**: SHA-256 hash of entity data for integrity verification ### Sync Versions Each Trilium installation tracks: -- **Local sync version**: Highest change ID seen locally -- **Server sync version**: Highest change ID on server -- **Entity versions**: Last sync version for each entity type + +* **Local sync version**: Highest change ID seen locally +* **Server sync version**: Highest change ID on server +* **Entity versions**: Last sync version for each entity type ### Change Tracking @@ -87,11 +84,12 @@ function addEntityChange(entityName, entityId, entity) { ``` **Entity modification triggers:** -- Note content update -- Note metadata change -- Branch creation/deletion/reorder -- Attribute addition/removal -- Options modification + +* Note content update +* Note metadata change +* Branch creation/deletion/reorder +* Attribute addition/removal +* Options modification ## Sync Protocol @@ -122,9 +120,9 @@ Response: **Step 3: Decision** -- If `entityChanges > 0`: Pull changes from server -- If `outstandingPushCount > 0`: Push changes to server -- Both can happen in sequence +* If `entityChanges > 0`: Pull changes from server +* If `outstandingPushCount > 0`: Push changes to server +* Both can happen in sequence ### Pull Sync (Server → Client) @@ -159,10 +157,10 @@ Response: **Client Processing:** -1. Apply entity changes to local database -2. Update Froca cache -3. Update local sync version -4. Trigger UI refresh +1. Apply entity changes to local database +2. Update Froca cache +3. Update local sync version +4. Trigger UI refresh ### Push Sync (Client → Server) @@ -191,12 +189,12 @@ POST /api/sync/push **Server Processing:** -1. Validate changes -2. Check for conflicts -3. Apply changes to database -4. Update Becca cache -5. Mark as synced -6. Broadcast to other connected clients via WebSocket +1. Validate changes +2. Check for conflicts +3. Apply changes to database +4. Update Becca cache +5. Mark as synced +6. Broadcast to other connected clients via WebSocket **Conflict Detection:** @@ -215,21 +213,25 @@ if (serverLastModified > clientSyncVersion) { ### Conflict Types -**1. Content Conflict** -- Both client and server modified same note content -- **Resolution**: Last-write-wins based on `utcDateModified` +**1\. Content Conflict** -**2. Structure Conflict** -- Branch moved/deleted on one side, modified on other -- **Resolution**: Tombstone records, reconciliation +* Both client and server modified same note content +* **Resolution**: Last-write-wins based on `utcDateModified` -**3. Attribute Conflict** -- Same attribute modified differently -- **Resolution**: Last-write-wins +**2\. Structure Conflict** + +* Branch moved/deleted on one side, modified on other +* **Resolution**: Tombstone records, reconciliation + +**3\. Attribute Conflict** + +* Same attribute modified differently +* **Resolution**: Last-write-wins ### Conflict Resolution Strategy **Last-Write-Wins:** + ```typescript if (clientEntity.utcDateModified > serverEntity.utcDateModified) { // Client wins, apply client changes @@ -241,9 +243,10 @@ if (clientEntity.utcDateModified > serverEntity.utcDateModified) { ``` **Tombstone Records:** -- Deleted entities leave tombstone in `entity_changes` -- Prevents re-sync of deleted items -- `isErased = 1` for permanent deletions + +* Deleted entities leave tombstone in `entity_changes` +* Prevents re-sync of deleted items +* `isErased = 1` for permanent deletions ### Protected Notes Sync @@ -251,43 +254,26 @@ if (clientEntity.utcDateModified > serverEntity.utcDateModified) { **Solution:** -1. **Protected session required**: User must unlock protected notes -2. **Encrypted sync**: Content synced in encrypted form -3. **Hash verification**: Integrity checked without decryption -4. **Lazy decryption**: Only decrypt when accessed - -**Sync Flow:** - -```typescript -// Client side -if (note.isProtected && !protectedSessionHolder.isProtectedSessionAvailable()) { - // Skip protected notes if session not active - continue -} - -// Server side -if (note.isProtected) { - // Sync encrypted blob - // Don't decrypt for sync - syncEncryptedBlob(note.blobId) -} -``` +1. **Encrypted sync**: Content synced in encrypted form +2. **Hash verification**: Integrity checked without decryption +3. **Lazy decryption**: Only decrypt when accessed ## Sync States ### Connection States -- **Connected**: WebSocket connection active -- **Disconnected**: No connection to sync server -- **Syncing**: Actively transferring data -- **Conflict**: Sync paused due to conflict +* **Connected**: WebSocket connection active +* **Disconnected**: No connection to sync server +* **Syncing**: Actively transferring data +* **Conflict**: Sync paused due to conflict ### Entity Sync States Each entity can be in: -- **Synced**: In sync with server -- **Pending**: Local changes not yet pushed -- **Conflict**: Conflicting changes detected + +* **Synced**: In sync with server +* **Pending**: Local changes not yet pushed +* **Conflict**: Conflicting changes detected ### UI Indicators @@ -299,8 +285,6 @@ class SyncStatusWidget { showIcon('synced') } else if (isSyncing) { showIcon('syncing-spinner') - } else if (hasConflicts) { - showIcon('conflict-warning') } else { showIcon('not-synced') } @@ -314,7 +298,7 @@ class SyncStatusWidget { Only entities changed since last sync are transferred: -```sql +``` SELECT * FROM entity_changes WHERE id > :lastSyncedChangeId ORDER BY id ASC @@ -357,26 +341,12 @@ res.send(gzip(syncData)) ### Network Errors -**Retry Strategy:** -```typescript -const RETRY_DELAYS = [1000, 2000, 5000, 10000, 30000] - -async function syncWithRetry(attempt = 0) { - try { - await performSync() - } catch (error) { - if (attempt < RETRY_DELAYS.length) { - setTimeout(() => { - syncWithRetry(attempt + 1) - }, RETRY_DELAYS[attempt]) - } - } -} -``` +Reported to the user and the sync will be retried after the interval passes. ### Sync Integrity Checks **Hash Verification:** + ```typescript // Verify entity hash matches const calculatedHash = calculateHash(entity) @@ -388,16 +358,18 @@ if (calculatedHash !== receivedHash) { ``` **Consistency Checks:** -- Orphaned branches detection -- Missing parent notes -- Invalid entity references -- Circular dependencies + +* Orphaned branches detection +* Missing parent notes +* Invalid entity references +* Circular dependencies ## Sync Server Configuration ### Server Setup **Required Options:** + ```javascript { "syncServerHost": "https://sync.example.com", @@ -407,59 +379,26 @@ if (calculatedHash !== receivedHash) { ``` **Authentication:** -- Username/password or -- Sync token (generated on server) -### Client Setup - -**Desktop Client:** -```javascript -// Settings → Sync -{ - "syncServerHost": "https://sync.example.com", - "username": "user@example.com", - "password": "********" -} -``` - -**Test Connection:** -```typescript -POST /api/sync/test -Response: { "success": true } -``` +* Username/password or +* Sync token (generated on server) ## Sync API Endpoints Located at: `apps/server/src/routes/api/sync.ts` -**Endpoints:** - -- `POST /api/sync/check` - Check sync status -- `POST /api/sync/pull` - Pull changes from server -- `POST /api/sync/push` - Push changes to server -- `POST /api/sync/finished` - Mark sync complete -- `POST /api/sync/test` - Test connection -- `GET /api/sync/stats` - Sync statistics - ## WebSocket Sync Updates Real-time sync via WebSocket: ```typescript // Server broadcasts change to all connected clients -ws.broadcast('entity-change', { - entityName: 'notes', - entityId: 'abc123', - changeId: 'change-uuid', - sourceId: 'originating-component-id' +ws.broadcast('frontend-update', { + lastSyncedPush, + entityChanges }) -// Client receives and applies -ws.on('entity-change', (data) => { - if (data.sourceId !== myComponentId) { - froca.processEntityChange(data) - } -}) +// Client receives and processed the information. ``` ## Sync Scheduling @@ -467,107 +406,79 @@ ws.on('entity-change', (data) => { ### Automatic Sync **Desktop:** -- Sync on startup -- Periodic sync (configurable interval, default: 60s) -- Sync before shutdown + +* Sync on startup +* Periodic sync (configurable interval, default: 60s) **Server:** -- Sync on entity modification -- WebSocket push to connected clients + +* Sync on entity modification +* WebSocket push to connected clients ### Manual Sync User can trigger: -- Full sync -- Sync now -- Sync specific subtree + +* Full sync +* Sync now +* Sync specific subtree ## Troubleshooting ### Common Issues **Sync stuck:** -```sql + +``` -- Reset sync state UPDATE entity_changes SET isSynced = 0; DELETE FROM options WHERE name LIKE 'sync%'; ``` **Hash mismatch:** -- Data corruption detected -- Re-sync from backup -- Check database integrity + +* Data corruption detected +* Re-sync from backup +* Check database integrity **Conflict loop:** -- Manual intervention required -- Export conflicting notes -- Choose winning version -- Re-sync -### Sync Diagnostics - -**Check sync status:** -```typescript -GET /api/sync/stats -Response: { - "unsyncedChanges": 0, - "lastSyncDate": "2025-11-02T12:00:00Z", - "syncVersion": 12890 -} -``` - -**Entity change log:** -```sql -SELECT * FROM entity_changes -WHERE isSynced = 0 -ORDER BY id DESC; -``` +* Manual intervention required +* Export conflicting notes +* Choose winning version +* Re-sync ## Security Considerations ### Encrypted Sync -- Protected notes synced encrypted -- No plain text over network -- Server cannot read protected content +* Protected notes synced encrypted +* No plain text over network +* Server cannot read protected content ### Authentication -- Username/password over HTTPS only -- Sync tokens for token-based auth -- Session cookies with CSRF protection +* Username/password over HTTPS only +* Sync tokens for token-based auth +* Session cookies with CSRF protection ### Authorization -- Users can only sync their own data -- No cross-user sync support -- Sync server validates ownership +* Users can only sync their own data +* No cross-user sync support +* Sync server validates ownership ## Performance Metrics **Typical Sync Performance:** -- 1000 changes: ~2-5 seconds -- 10000 changes: ~20-50 seconds -- Initial full sync (100k notes): ~5-10 minutes + +* 1000 changes: ~2-5 seconds +* 10000 changes: ~20-50 seconds +* Initial full sync (100k notes): ~5-10 minutes **Factors:** -- Network latency -- Database size -- Number of protected notes -- Attachment sizes -## Future Improvements - -**Planned Enhancements:** -- Differential sync (binary diff) -- Peer-to-peer sync (no central server) -- Multi-server sync -- Partial sync (subtree only) -- Sync over Tor/I2P - ---- - -**See Also:** -- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture -- [Sync User Guide](https://triliumnext.github.io/Docs/Wiki/synchronization) -- [Sync API Source](../apps/server/src/routes/api/sync.ts) +* Network latency +* Database size +* Number of protected notes +* Attachment sizes \ No newline at end of file diff --git a/docs/QUICK_REFERENCE.md b/docs/QUICK_REFERENCE.md deleted file mode 100644 index 396cc0dd6..000000000 --- a/docs/QUICK_REFERENCE.md +++ /dev/null @@ -1,155 +0,0 @@ -# Trilium Technical Documentation - Quick Reference - -> **Start here:** [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) - Complete index of all documentation - -## 📖 Documentation Files - -| Document | Description | Size | Lines | -|----------|-------------|------|-------| -| [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) | Main index and navigation hub | 13KB | 423 | -| [ARCHITECTURE.md](ARCHITECTURE.md) | Complete system architecture | 30KB | 1,016 | -| [DATABASE.md](DATABASE.md) | Database schema and operations | 19KB | 736 | -| [SYNCHRONIZATION.md](SYNCHRONIZATION.md) | Sync protocol and implementation | 14KB | 583 | -| [SCRIPTING.md](SCRIPTING.md) | User scripting system guide | 17KB | 734 | -| [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) | Security implementation details | 19KB | 834 | - -**Total:** 112KB of comprehensive documentation across 4,326 lines! - -## 🎯 Quick Access by Role - -### 👤 End Users -- **Getting Started:** [User Guide](User%20Guide/User%20Guide/) -- **Scripting:** [SCRIPTING.md](SCRIPTING.md) -- **Sync Setup:** [SYNCHRONIZATION.md](SYNCHRONIZATION.md) - -### 💻 Developers -- **Architecture:** [ARCHITECTURE.md](ARCHITECTURE.md) -- **Development Setup:** [Developer Guide](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) -- **Database:** [DATABASE.md](DATABASE.md) - -### 🔒 Security Auditors -- **Security:** [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) -- **Encryption:** [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) -- **Auth:** [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) - -### 🏗️ System Architects -- **Overall Design:** [ARCHITECTURE.md](ARCHITECTURE.md) -- **Cache System:** [ARCHITECTURE.md#three-layer-cache-system](ARCHITECTURE.md#three-layer-cache-system) -- **Entity Model:** [ARCHITECTURE.md#entity-system](ARCHITECTURE.md#entity-system) - -### 🔧 DevOps Engineers -- **Server Installation:** [User Guide - Server Installation](User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) -- **Docker:** [Developer Guide - Docker](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Docker.md) -- **Sync Server:** [SYNCHRONIZATION.md#sync-server-configuration](SYNCHRONIZATION.md#sync-server-configuration) - -### 📊 Database Administrators -- **Schema:** [DATABASE.md#database-schema](DATABASE.md#database-schema) -- **Maintenance:** [DATABASE.md#database-maintenance](DATABASE.md#database-maintenance) -- **Performance:** [DATABASE.md#performance-optimization](DATABASE.md#performance-optimization) - -## 🔍 Quick Topic Finder - -### Core Concepts -- **Becca Cache:** [ARCHITECTURE.md#1-becca-backend-cache](ARCHITECTURE.md#1-becca-backend-cache) -- **Froca Cache:** [ARCHITECTURE.md#2-froca-frontend-cache](ARCHITECTURE.md#2-froca-frontend-cache) -- **Entity System:** [ARCHITECTURE.md#entity-system](ARCHITECTURE.md#entity-system) -- **Widget System:** [ARCHITECTURE.md#widget-based-ui](ARCHITECTURE.md#widget-based-ui) - -### Database -- **Schema Overview:** [DATABASE.md#schema-overview](DATABASE.md#schema-overview) -- **Notes Table:** [DATABASE.md#notes-table](DATABASE.md#notes-table) -- **Branches Table:** [DATABASE.md#branches-table](DATABASE.md#branches-table) -- **Migrations:** [DATABASE.md#database-migrations](DATABASE.md#database-migrations) - -### Synchronization -- **Sync Protocol:** [SYNCHRONIZATION.md#sync-protocol](SYNCHRONIZATION.md#sync-protocol) -- **Conflict Resolution:** [SYNCHRONIZATION.md#conflict-resolution](SYNCHRONIZATION.md#conflict-resolution) -- **Entity Changes:** [SYNCHRONIZATION.md#entity-changes](SYNCHRONIZATION.md#entity-changes) - -### Scripting -- **Frontend Scripts:** [SCRIPTING.md#frontend-scripts](SCRIPTING.md#frontend-scripts) -- **Backend Scripts:** [SCRIPTING.md#backend-scripts](SCRIPTING.md#backend-scripts) -- **Script Examples:** [SCRIPTING.md#script-examples](SCRIPTING.md#script-examples) -- **API Reference:** [SCRIPTING.md#script-api](SCRIPTING.md#script-api) - -### Security -- **Authentication:** [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) -- **Encryption:** [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) -- **Input Sanitization:** [SECURITY_ARCHITECTURE.md#input-sanitization](SECURITY_ARCHITECTURE.md#input-sanitization) -- **Best Practices:** [SECURITY_ARCHITECTURE.md#security-best-practices](SECURITY_ARCHITECTURE.md#security-best-practices) - -## 📚 Learning Paths - -### New to Trilium Development -1. Read [ARCHITECTURE.md](ARCHITECTURE.md) - System overview -2. Setup environment: [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) -3. Explore [DATABASE.md](DATABASE.md) - Understand data model -4. Check [Developer Guide](Developer%20Guide/Developer%20Guide/) - -### Want to Create Scripts -1. Read [SCRIPTING.md](SCRIPTING.md) - Complete guide -2. Check [Script API](Script%20API/) - API reference -3. Review examples: [SCRIPTING.md#script-examples](SCRIPTING.md#script-examples) -4. Explore [Advanced Showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) - -### Setting Up Sync -1. Understand protocol: [SYNCHRONIZATION.md](SYNCHRONIZATION.md) -2. Configure server: [SYNCHRONIZATION.md#sync-server-configuration](SYNCHRONIZATION.md#sync-server-configuration) -3. Setup clients: [SYNCHRONIZATION.md#client-setup](SYNCHRONIZATION.md#client-setup) -4. Troubleshoot: [SYNCHRONIZATION.md#troubleshooting](SYNCHRONIZATION.md#troubleshooting) - -### Security Review -1. Read threat model: [SECURITY_ARCHITECTURE.md#threat-model](SECURITY_ARCHITECTURE.md#threat-model) -2. Review authentication: [SECURITY_ARCHITECTURE.md#authentication](SECURITY_ARCHITECTURE.md#authentication) -3. Check encryption: [SECURITY_ARCHITECTURE.md#encryption](SECURITY_ARCHITECTURE.md#encryption) -4. Verify best practices: [SECURITY_ARCHITECTURE.md#security-best-practices](SECURITY_ARCHITECTURE.md#security-best-practices) - -## 🗺️ Documentation Map - -``` -docs/ -├── TECHNICAL_DOCUMENTATION.md ← START HERE (Index) -│ -├── Core Technical Docs -│ ├── ARCHITECTURE.md (System design) -│ ├── DATABASE.md (Data layer) -│ ├── SYNCHRONIZATION.md (Sync system) -│ ├── SCRIPTING.md (User scripting) -│ └── SECURITY_ARCHITECTURE.md (Security) -│ -├── Developer Guide/ -│ └── Developer Guide/ (Development setup) -│ -├── User Guide/ -│ └── User Guide/ (End-user docs) -│ -└── Script API/ (API reference) -``` - -## 💡 Tips for Reading Documentation - -1. **Start with the index:** [TECHNICAL_DOCUMENTATION.md](TECHNICAL_DOCUMENTATION.md) provides an overview -2. **Use search:** Press Ctrl+F / Cmd+F to find specific topics -3. **Follow links:** Documents are cross-referenced for easy navigation -4. **Code examples:** Most docs include practical code examples -5. **See Also sections:** Check bottom of each doc for related resources - -## 🔗 External Resources - -- **Website:** https://triliumnotes.org -- **Online Docs:** https://docs.triliumnotes.org -- **GitHub:** https://github.com/TriliumNext/Trilium -- **Discussions:** https://github.com/TriliumNext/Trilium/discussions -- **Matrix Chat:** https://matrix.to/#/#triliumnext:matrix.org - -## 🤝 Contributing to Documentation - -Found an error or want to improve the docs? See: -- [Contributing Guide](../README.md#-contribute) -- [Documentation Standards](TECHNICAL_DOCUMENTATION.md#documentation-conventions) - ---- - -**Version:** 0.99.3 -**Last Updated:** November 2025 -**Maintained by:** TriliumNext Team diff --git a/docs/SCRIPTING.md b/docs/SCRIPTING.md deleted file mode 100644 index 49e548c50..000000000 --- a/docs/SCRIPTING.md +++ /dev/null @@ -1,734 +0,0 @@ -# Trilium Scripting System - -> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [Script API Documentation](Script%20API/) - -## Overview - -Trilium features a **powerful scripting system** that allows users to extend and customize the application without modifying source code. Scripts are written in JavaScript and can execute both in the **frontend (browser)** and **backend (Node.js)** contexts. - -## Script Types - -### Frontend Scripts - -**Location:** Attached to notes with `#run=frontendStartup` attribute - -**Execution Context:** Browser environment - -**Access:** -- Trilium Frontend API -- Browser APIs (DOM, localStorage, etc.) -- Froca (frontend cache) -- UI widgets -- No direct file system access - -**Lifecycle:** -- `frontendStartup` - Run once when Trilium loads -- `frontendReload` - Run on every note context change - -**Example:** -```javascript -// Attach to note with #run=frontendStartup -const api = window.api - -// Add custom button to toolbar -api.addButtonToToolbar({ - title: 'My Button', - icon: 'star', - action: () => { - api.showMessage('Hello from frontend!') - } -}) -``` - -### Backend Scripts - -**Location:** Attached to notes with `#run=backendStartup` attribute - -**Execution Context:** Node.js server environment - -**Access:** -- Trilium Backend API -- Node.js APIs (fs, http, etc.) -- Becca (backend cache) -- Database (SQL) -- External libraries (via require) - -**Lifecycle:** -- `backendStartup` - Run once when server starts -- Event handlers (custom events) - -**Example:** -```javascript -// Attach to note with #run=backendStartup -const api = require('@triliumnext/api') - -// Listen for note creation -api.dayjs // Example: access dayjs library - -api.onNoteCreated((note) => { - if (note.title.includes('TODO')) { - note.setLabel('priority', 'high') - } -}) -``` - -### Render Scripts - -**Location:** Attached to notes with `#customWidget` or similar attributes - -**Purpose:** Custom note rendering/widgets - -**Example:** -```javascript -// Custom widget for a note -class MyWidget extends api.NoteContextAwareWidget { - doRender() { - this.$widget = $('
      ') - .text('Custom widget content') - return this.$widget - } -} - -module.exports = MyWidget -``` - -## Script API - -### Frontend API - -**Location:** `apps/client/src/services/frontend_script_api.ts` - -**Global Access:** `window.api` - -**Key Methods:** - -```typescript -// Note Operations -api.getNote(noteId) // Get note object -api.getBranch(branchId) // Get branch object -api.getActiveNote() // Currently displayed note -api.openNote(noteId, activateNote) // Open note in UI - -// UI Operations -api.showMessage(message) // Show toast notification -api.showDialog() // Show modal dialog -api.confirm(message) // Show confirmation dialog -api.prompt(message, defaultValue) // Show input prompt - -// Tree Operations -api.getTree() // Get note tree structure -api.expandTree(noteId) // Expand tree branch -api.collapseTree(noteId) // Collapse tree branch - -// Search -api.searchForNotes(searchQuery) // Search notes -api.searchForNote(searchQuery) // Get single note - -// Navigation -api.openTabWithNote(noteId) // Open note in new tab -api.closeActiveTab() // Close current tab -api.activateNote(noteId) // Switch to note - -// Attributes -api.getAttribute(noteId, type, name) // Get attribute -api.getAttributes(noteId, type, name) // Get all matching attributes - -// Custom Widgets -api.addButtonToToolbar(def) // Add toolbar button -api.addCustomWidget(def) // Add custom widget - -// Events -api.runOnNoteOpened(callback) // Note opened event -api.runOnNoteContentChange(callback) // Content changed event - -// Utilities -api.dayjs // Date/time library -api.formatDate(date) // Format date -api.log(message) // Console log -``` - -### Backend API - -**Location:** `apps/server/src/services/backend_script_api.ts` - -**Access:** `require('@triliumnext/api')` or global `api` - -**Key Methods:** - -```typescript -// Note Operations -api.getNote(noteId) // Get note from Becca -api.getNoteWithContent(noteId) // Get note with content -api.createNote(parentNoteId, title) // Create new note -api.deleteNote(noteId) // Delete note - -// Branch Operations -api.getBranch(branchId) // Get branch -api.createBranch(noteId, parentNoteId) // Create branch (clone) - -// Attribute Operations -api.getAttribute(noteId, type, name) // Get attribute -api.createAttribute(noteId, type, name, value) // Create attribute - -// Database Access -api.sql.getRow(query, params) // Execute SQL query (single row) -api.sql.getRows(query, params) // Execute SQL query (multiple rows) -api.sql.execute(query, params) // Execute SQL statement - -// Events -api.onNoteCreated(callback) // Note created event -api.onNoteUpdated(callback) // Note updated event -api.onNoteDeleted(callback) // Note deleted event -api.onAttributeCreated(callback) // Attribute created event - -// Search -api.searchForNotes(searchQuery) // Search notes - -// Date/Time -api.dayjs // Date/time library -api.now() // Current date/time - -// Logging -api.log(message) // Log message -api.error(message) // Log error - -// External Communication -api.axios // HTTP client library - -// Utilities -api.backup.backupNow() // Trigger backup -api.export.exportSubtree(noteId) // Export notes -``` - -## Script Attributes - -### Execute Attributes - -- `#run=frontendStartup` - Execute on frontend startup -- `#run=backendStartup` - Execute on backend startup -- `#run=hourly` - Execute every hour -- `#run=daily` - Execute daily - -### Widget Attributes - -- `#customWidget` - Custom note widget -- `#widget` - Standard widget integration - -### Other Attributes - -- `#disableVersioning` - Disable automatic versioning for this note -- `#hideChildrenOverview` - Hide children in overview -- `#iconClass` - Custom icon for note - -## Entity Classes - -### Frontend Entities - -**FNote** (`apps/client/src/entities/fnote.ts`) - -```typescript -class FNote { - noteId: string - title: string - type: string - mime: string - - // Relationships - getParentNotes(): FNote[] - getChildNotes(): FNote[] - getBranches(): FBranch[] - - // Attributes - getAttribute(type, name): FAttribute - getAttributes(type?, name?): FAttribute[] - hasLabel(name): boolean - getLabelValue(name): string - - // Content - getContent(): Promise - - // Navigation - open(): void -} -``` - -**FBranch** - -```typescript -class FBranch { - branchId: string - noteId: string - parentNoteId: string - prefix: string - notePosition: number - - getNote(): FNote - getParentNote(): FNote -} -``` - -**FAttribute** - -```typescript -class FAttribute { - attributeId: string - noteId: string - type: 'label' | 'relation' - name: string - value: string - - getNote(): FNote - getTargetNote(): FNote // For relations -} -``` - -### Backend Entities - -**BNote** (`apps/server/src/becca/entities/bnote.ts`) - -```typescript -class BNote { - noteId: string - title: string - type: string - mime: string - isProtected: boolean - - // Content - getContent(): string | Buffer - setContent(content: string | Buffer): void - - // Relationships - getParentNotes(): BNote[] - getChildNotes(): BNote[] - getBranches(): BBranch[] - - // Attributes - getAttribute(type, name): BAttribute - getAttributes(type?, name?): BAttribute[] - setLabel(name, value): BAttribute - setRelation(name, targetNoteId): BAttribute - hasLabel(name): boolean - getLabelValue(name): string - - // Operations - save(): void - markAsDeleted(): void -} -``` - -**BBranch** - -```typescript -class BBranch { - branchId: string - noteId: string - parentNoteId: string - prefix: string - notePosition: number - - getNote(): BNote - getParentNote(): BNote - save(): void -} -``` - -**BAttribute** - -```typescript -class BAttribute { - attributeId: string - noteId: string - type: 'label' | 'relation' - name: string - value: string - - getNote(): BNote - getTargetNote(): BNote // For relations - save(): void -} -``` - -## Script Examples - -### Frontend Examples - -**1. Custom Toolbar Button** - -```javascript -// #run=frontendStartup -api.addButtonToToolbar({ - title: 'Export to PDF', - icon: 'file-export', - action: async () => { - const note = api.getActiveNote() - if (note) { - await api.runOnBackend('exportToPdf', [note.noteId]) - api.showMessage('Export started') - } - } -}) -``` - -**2. Auto-Save Reminder** - -```javascript -// #run=frontendStartup -let saveTimer -api.runOnNoteContentChange(() => { - clearTimeout(saveTimer) - saveTimer = setTimeout(() => { - api.showMessage('Remember to save your work!') - }, 300000) // 5 minutes -}) -``` - -**3. Note Statistics Widget** - -```javascript -// #customWidget -class StatsWidget extends api.NoteContextAwareWidget { - doRender() { - this.$widget = $('
      ') - return this.$widget - } - - async refreshWithNote(note) { - const content = await note.getContent() - const words = content.split(/\s+/).length - const chars = content.length - - this.$widget.html(` -
      Words: ${words}
      -
      Characters: ${chars}
      - `) - } -} - -module.exports = StatsWidget -``` - -### Backend Examples - -**1. Auto-Tagging on Note Creation** - -```javascript -// #run=backendStartup -api.onNoteCreated((note) => { - // Auto-tag TODO notes - if (note.title.includes('TODO')) { - note.setLabel('type', 'todo') - note.setLabel('priority', 'normal') - } - - // Auto-tag meeting notes by date - if (note.title.match(/Meeting \d{4}-\d{2}-\d{2}/)) { - note.setLabel('type', 'meeting') - const dateMatch = note.title.match(/(\d{4}-\d{2}-\d{2})/) - if (dateMatch) { - note.setLabel('date', dateMatch[1]) - } - } -}) -``` - -**2. Daily Backup Reminder** - -```javascript -// #run=daily -const todayNote = api.getTodayNote() -todayNote.setLabel('backupDone', 'false') - -// Create reminder note -api.createNote(todayNote.noteId, '🔔 Backup Reminder', { - content: 'Remember to verify today\'s backup!', - type: 'text' -}) -``` - -**3. External API Integration** - -```javascript -// #run=backendStartup -api.onNoteCreated(async (note) => { - // Sync new notes to external service - if (note.hasLabel('sync-external')) { - try { - await api.axios.post('https://external-api.com/sync', { - noteId: note.noteId, - title: note.title, - content: note.getContent() - }) - note.setLabel('lastSync', api.dayjs().format()) - } catch (error) { - api.log('Sync failed: ' + error.message) - } - } -}) -``` - -**4. Database Cleanup** - -```javascript -// #run=weekly -// Clean up old revisions -const cutoffDate = api.dayjs().subtract(90, 'days').format() - -const oldRevisions = api.sql.getRows(` - SELECT revisionId FROM revisions - WHERE utcDateCreated < ? -`, [cutoffDate]) - -api.log(`Deleting ${oldRevisions.length} old revisions`) - -for (const row of oldRevisions) { - api.sql.execute('DELETE FROM revisions WHERE revisionId = ?', [row.revisionId]) -} -``` - -## Script Storage - -**Storage Location:** Scripts are stored as regular notes - -**Identifying Scripts:** -- Have `#run` attribute or `#customWidget` attribute -- Type is typically `code` with MIME `application/javascript` - -**Script Note Structure:** -``` -📁 Scripts (folder note) -├── 📜 Frontend Scripts -│ ├── Custom Toolbar Button (#run=frontendStartup) -│ └── Statistics Widget (#customWidget) -└── 📜 Backend Scripts - ├── Auto-Tagger (#run=backendStartup) - └── Daily Backup (#run=daily) -``` - -## Script Execution - -### Frontend Execution - -**Timing:** -1. Trilium frontend loads -2. Froca cache initializes -3. Script notes with `#run=frontendStartup` are found -4. Scripts execute in dependency order - -**Isolation:** -- Each script runs in separate context -- Shared `window.api` object -- Can access global window object - -### Backend Execution - -**Timing:** -1. Server starts -2. Becca cache loads -3. Script notes with `#run=backendStartup` are found -4. Scripts execute in dependency order - -**Isolation:** -- Each script is a separate module -- Can require Node.js modules -- Shared `api` global - -### Error Handling - -**Frontend:** -```javascript -try { - // Script code -} catch (error) { - api.showError('Script error: ' + error.message) - console.error(error) -} -``` - -**Backend:** -```javascript -try { - // Script code -} catch (error) { - api.log('Script error: ' + error.message) - console.error(error) -} -``` - -## Security Considerations - -### Frontend Scripts - -**Risks:** -- Can access all notes via Froca -- Can manipulate DOM -- Can make API calls -- Limited by browser security model - -**Mitigations:** -- User must trust scripts they add -- Scripts run with user privileges -- No access to file system - -### Backend Scripts - -**Risks:** -- Full Node.js access -- Can execute system commands -- Can access file system -- Can make network requests - -**Mitigations:** -- Scripts are user-created (trusted) -- Single-user model (no privilege escalation) -- Review scripts before adding `#run` attribute - -### Best Practices - -1. **Review script code** before adding execution attributes -2. **Use specific attributes** rather than wildcard searches -3. **Avoid eval()** and dynamic code execution -4. **Validate inputs** in scripts -5. **Handle errors** gracefully -6. **Log important actions** for audit trail - -## Performance Considerations - -### Optimization Tips - -**1. Cache Results:** -```javascript -// Bad: Re-query on every call -function getConfig() { - return api.getNote('config').getContent() -} - -// Good: Cache the result -let cachedConfig -function getConfig() { - if (!cachedConfig) { - cachedConfig = api.getNote('config').getContent() - } - return cachedConfig -} -``` - -**2. Use Efficient Queries:** -```javascript -// Bad: Load all notes and filter -const todos = api.searchForNotes('#type=todo') - -// Good: Use specific search -const todos = api.searchForNotes('#type=todo #status=pending') -``` - -**3. Batch Operations:** -```javascript -// Bad: Save after each change -notes.forEach(note => { - note.title = 'Updated' - note.save() -}) - -// Good: Batch changes -notes.forEach(note => { - note.title = 'Updated' -}) -// Save happens in batch -``` - -**4. Debounce Event Handlers:** -```javascript -let timeout -api.runOnNoteContentChange(() => { - clearTimeout(timeout) - timeout = setTimeout(() => { - // Process change - }, 500) -}) -``` - -## Debugging Scripts - -### Frontend Debugging - -**Browser DevTools:** -```javascript -console.log('Debug info:', data) -debugger // Breakpoint -``` - -**Trilium Log:** -```javascript -api.log('Script executed') -``` - -### Backend Debugging - -**Console Output:** -```javascript -console.log('Backend debug:', data) -api.log('Script log message') -``` - -**Inspect Becca:** -```javascript -api.log('Note count:', Object.keys(api.becca.notes).length) -``` - -## Advanced Topics - -### Custom Note Types - -Scripts can implement custom note type handlers: - -```javascript -// Register custom type -api.registerNoteType({ - type: 'mytype', - mime: 'application/x-mytype', - renderNote: (note) => { - // Custom rendering - } -}) -``` - -### External Libraries - -**Frontend:** -```javascript -// Load external library -const myLib = await import('https://cdn.example.com/lib.js') -``` - -**Backend:** -```javascript -// Use Node.js require -const fs = require('fs') -const axios = require('axios') -``` - -### State Persistence - -**Frontend:** -```javascript -// Use localStorage -localStorage.setItem('myScript:data', JSON.stringify(data)) -const data = JSON.parse(localStorage.getItem('myScript:data')) -``` - -**Backend:** -```javascript -// Store in special note -const stateNote = api.getNote('script-state-note') -stateNote.setContent(JSON.stringify(data)) - -const data = JSON.parse(stateNote.getContent()) -``` - ---- - -**See Also:** -- [Script API Documentation](Script%20API/) - Complete API reference -- [Advanced Showcases](https://triliumnext.github.io/Docs/Wiki/advanced-showcases) - Example scripts -- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture diff --git a/docs/SECURITY_ARCHITECTURE.md b/docs/SECURITY_ARCHITECTURE.md deleted file mode 100644 index 27993deac..000000000 --- a/docs/SECURITY_ARCHITECTURE.md +++ /dev/null @@ -1,834 +0,0 @@ -# Trilium Security Architecture - -> **Related:** [ARCHITECTURE.md](ARCHITECTURE.md) | [SECURITY.md](../SECURITY.md) - -## Overview - -Trilium implements a **defense-in-depth security model** with multiple layers of protection for user data. The security architecture covers authentication, authorization, encryption, input sanitization, and secure communication. - -## Security Principles - -1. **Data Privacy**: User data is protected at rest and in transit -2. **Encryption**: Per-note encryption for sensitive content -3. **Authentication**: Multiple authentication methods supported -4. **Authorization**: Single-user model with granular protected sessions -5. **Input Validation**: All user input sanitized -6. **Secure Defaults**: Security features enabled by default -7. **Transparency**: Open source allows security audits - -## Threat Model - -### Threats Considered - -1. **Unauthorized Access** - - Physical access to device - - Network eavesdropping - - Stolen credentials - - Session hijacking - -2. **Data Exfiltration** - - Malicious scripts - - XSS attacks - - SQL injection - - CSRF attacks - -3. **Data Corruption** - - Malicious modifications - - Database tampering - - Sync conflicts - -4. **Privacy Leaks** - - Unencrypted backups - - Search indexing - - Temporary files - - Memory dumps - -### Out of Scope - -- Nation-state attackers -- Zero-day vulnerabilities in dependencies -- Hardware vulnerabilities (Spectre, Meltdown) -- Physical access with unlimited time -- Quantum computing attacks - -## Authentication - -### Password Authentication - -**Implementation:** `apps/server/src/services/password.ts` - -**Password Storage:** -```typescript -// Password is never stored directly -const salt = crypto.randomBytes(32) -const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') -const verificationHash = crypto.createHash('sha256') - .update(derivedKey) - .digest('hex') - -// Store only salt and verification hash -sql.insert('user_data', { - salt: salt.toString('hex'), - derivedKey: derivedKey.toString('hex') // Used for encryption -}) - -sql.insert('options', { - name: 'passwordVerificationHash', - value: verificationHash -}) -``` - -**Password Requirements:** -- Minimum length: 4 characters (configurable) -- No maximum length -- All characters allowed -- Can be changed by user - -**Login Process:** -```typescript -// 1. User submits password -POST /api/login/password -Body: { password: "user-password" } - -// 2. Server derives key -const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') - -// 3. Verify against stored hash -const verificationHash = crypto.createHash('sha256') - .update(derivedKey) - .digest('hex') - -if (verificationHash === storedHash) { - // 4. Create session - req.session.loggedIn = true - req.session.regenerate() -} -``` - -### TOTP (Two-Factor Authentication) - -**Implementation:** `apps/server/src/routes/api/login.ts` - -**Setup Process:** -```typescript -// 1. Generate secret -const secret = speakeasy.generateSecret({ - name: `Trilium (${username})`, - length: 32 -}) - -// 2. Store encrypted secret -const encryptedSecret = encrypt(secret.base32, dataKey) -sql.insert('options', { - name: 'totpSecret', - value: encryptedSecret -}) - -// 3. Generate QR code -const qrCodeUrl = secret.otpauth_url -``` - -**Verification:** -```typescript -// User submits TOTP token -POST /api/login/totp -Body: { token: "123456" } - -// Verify token -const secret = decrypt(encryptedSecret, dataKey) -const verified = speakeasy.totp.verify({ - secret: secret, - encoding: 'base32', - token: token, - window: 1 // Allow 1 time step tolerance -}) -``` - -### OpenID Connect - -**Implementation:** `apps/server/src/routes/api/login.ts` - -**Supported Providers:** -- Any OpenID Connect compatible provider -- Google, GitHub, Auth0, etc. - -**Flow:** -```typescript -// 1. Redirect to provider -GET /api/login/openid - -// 2. Provider redirects back with code -GET /api/login/openid/callback?code=... - -// 3. Exchange code for tokens -const tokens = await openidClient.callback(redirectUri, req.query) - -// 4. Verify ID token -const claims = tokens.claims() - -// 5. Create session -req.session.loggedIn = true -``` - -### Session Management - -**Session Storage:** SQLite database (sessions table) - -**Session Configuration:** -```typescript -app.use(session({ - secret: sessionSecret, - resave: false, - saveUninitialized: false, - rolling: true, - cookie: { - maxAge: 7 * 24 * 60 * 60 * 1000, // 7 days - httpOnly: true, - secure: isHttps, - sameSite: 'lax' - }, - store: new SqliteStore({ - db: db, - table: 'sessions' - }) -})) -``` - -**Session Invalidation:** -- Automatic timeout after inactivity -- Manual logout clears session -- Server restart invalidates all sessions (optional) - -## Authorization - -### Single-User Model - -**Desktop:** -- Single user (owner of device) -- No multi-user support -- Full access to all notes - -**Server:** -- Single user per installation -- Authentication required for all operations -- No user roles or permissions - -### Protected Sessions - -**Purpose:** Temporary access to encrypted (protected) notes - -**Implementation:** `apps/server/src/services/protected_session.ts` - -**Workflow:** -```typescript -// 1. User enters password for protected notes -POST /api/protected-session/enter -Body: { password: "protected-password" } - -// 2. Derive encryption key -const protectedDataKey = deriveKey(password) - -// 3. Verify password (decrypt known encrypted value) -const decrypted = decrypt(testValue, protectedDataKey) -if (decrypted === expectedValue) { - // 4. Store in memory (not in session) - protectedSessionHolder.setProtectedDataKey(protectedDataKey) - - // 5. Set timeout - setTimeout(() => { - protectedSessionHolder.clearProtectedDataKey() - }, timeout) -} -``` - -**Protected Session Timeout:** -- Default: 10 minutes (configurable) -- Extends on activity -- Cleared on browser close -- Separate from main session - -### API Authorization - -**Internal API:** -- Requires authenticated session -- CSRF token validation -- Same-origin policy - -**ETAPI (External API):** -- Token-based authentication -- No session required -- Rate limiting - -## Encryption - -### Note Encryption - -**Encryption Algorithm:** AES-256-CBC - -**Key Hierarchy:** -``` -User Password - ↓ (PBKDF2) -Data Key (for protected notes) - ↓ (AES-256) -Protected Note Content -``` - -**Encryption Process:** -```typescript -// 1. Generate IV (initialization vector) -const iv = crypto.randomBytes(16) - -// 2. Encrypt content -const cipher = crypto.createCipheriv('aes-256-cbc', dataKey, iv) -let encrypted = cipher.update(content, 'utf8', 'base64') -encrypted += cipher.final('base64') - -// 3. Prepend IV to encrypted content -const encryptedBlob = iv.toString('base64') + ':' + encrypted - -// 4. Store in database -sql.insert('blobs', { - blobId: blobId, - content: encryptedBlob -}) -``` - -**Decryption Process:** -```typescript -// 1. Split IV and encrypted content -const [ivBase64, encryptedData] = encryptedBlob.split(':') -const iv = Buffer.from(ivBase64, 'base64') - -// 2. Decrypt -const decipher = crypto.createDecipheriv('aes-256-cbc', dataKey, iv) -let decrypted = decipher.update(encryptedData, 'base64', 'utf8') -decrypted += decipher.final('utf8') - -return decrypted -``` - -**Protected Note Metadata:** -- Title is NOT encrypted (for tree display) -- Type and MIME are NOT encrypted -- Content IS encrypted -- Attributes CAN be encrypted (optional) - -### Data Key Management - -**Master Data Key:** -```typescript -// Generated once during setup -const dataKey = crypto.randomBytes(32) // 256 bits - -// Encrypted with derived key from user password -const derivedKey = crypto.pbkdf2Sync(password, salt, 10000, 32, 'sha256') -const encryptedDataKey = encrypt(dataKey, derivedKey) - -// Stored in database -sql.insert('options', { - name: 'encryptedDataKey', - value: encryptedDataKey.toString('hex') -}) -``` - -**Key Rotation:** -- Not currently supported -- Requires re-encrypting all protected notes -- Planned for future version - -### Transport Encryption - -**HTTPS:** -- Required for server installations (recommended) -- TLS 1.2+ only -- Strong cipher suites preferred -- Certificate validation enabled - -**Desktop:** -- Local communication (no network) -- No HTTPS required - -### Backup Encryption - -**Database Backups:** -- Protected notes remain encrypted in backup -- Backup file should be protected separately -- Consider encrypting backup storage location - -## Input Sanitization - -### XSS Prevention - -**HTML Sanitization:** - -Location: `apps/client/src/services/dompurify.ts` - -```typescript -import DOMPurify from 'dompurify' - -// Configure DOMPurify -DOMPurify.setConfig({ - ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'br', 'div', ...], - ALLOWED_ATTR: ['href', 'title', 'class', 'id', ...], - ALLOW_DATA_ATTR: false -}) - -// Sanitize HTML before rendering -const cleanHtml = DOMPurify.sanitize(userHtml) -``` - -**CKEditor Configuration:** -```typescript -// apps/client/src/widgets/type_widgets/text_type_widget.ts -ClassicEditor.create(element, { - // Restrict allowed content - htmlSupport: { - allow: [ - { name: /./, attributes: true, classes: true, styles: true } - ], - disallow: [ - { name: 'script' }, - { name: 'iframe', attributes: /^(?!src$).*/ } - ] - } -}) -``` - -**Content Security Policy:** -```typescript -// apps/server/src/main.ts -app.use((req, res, next) => { - res.setHeader('Content-Security-Policy', - "default-src 'self'; " + - "script-src 'self' 'unsafe-inline' 'unsafe-eval'; " + - "style-src 'self' 'unsafe-inline'; " + - "img-src 'self' data: blob:;" - ) - next() -}) -``` - -### SQL Injection Prevention - -**Parameterized Queries:** -```typescript -// GOOD - Safe from SQL injection -const notes = sql.getRows( - 'SELECT * FROM notes WHERE title = ?', - [userInput] -) - -// BAD - Vulnerable to SQL injection -const notes = sql.getRows( - `SELECT * FROM notes WHERE title = '${userInput}'` -) -``` - -**ORM Usage:** -```typescript -// Entity-based access prevents SQL injection -const note = becca.getNote(noteId) -note.title = userInput // Sanitized by entity -note.save() // Parameterized query -``` - -### CSRF Prevention - -**CSRF Token Validation:** - -Location: `apps/server/src/routes/middleware/csrf.ts` - -```typescript -// Generate CSRF token -const csrfToken = crypto.randomBytes(32).toString('hex') -req.session.csrfToken = csrfToken - -// Validate on state-changing requests -app.use((req, res, next) => { - if (['POST', 'PUT', 'DELETE'].includes(req.method)) { - const token = req.headers['x-csrf-token'] - if (token !== req.session.csrfToken) { - return res.status(403).json({ error: 'CSRF token mismatch' }) - } - } - next() -}) -``` - -**Client-Side:** -```typescript -// apps/client/src/services/server.ts -const csrfToken = getCsrfToken() - -fetch('/api/notes', { - method: 'POST', - headers: { - 'X-CSRF-Token': csrfToken, - 'Content-Type': 'application/json' - }, - body: JSON.stringify(data) -}) -``` - -### File Upload Validation - -**Validation:** -```typescript -// apps/server/src/routes/api/attachments.ts -const allowedMimeTypes = [ - 'image/jpeg', - 'image/png', - 'application/pdf', - // ... -] - -if (!allowedMimeTypes.includes(file.mimetype)) { - throw new Error('File type not allowed') -} - -// Validate file size -const maxSize = 100 * 1024 * 1024 // 100 MB -if (file.size > maxSize) { - throw new Error('File too large') -} - -// Sanitize filename -const sanitizedFilename = path.basename(file.originalname) - .replace(/[^a-z0-9.-]/gi, '_') -``` - -## Network Security - -### HTTPS Configuration - -**Server Setup:** -```typescript -// apps/server/src/main.ts -const httpsOptions = { - key: fs.readFileSync('server.key'), - cert: fs.readFileSync('server.cert') -} - -https.createServer(httpsOptions, app).listen(443) -``` - -**Certificate Validation:** -- Require valid certificates in production -- Self-signed certificates allowed for development -- Certificate pinning not implemented - -### Secure Headers - -```typescript -// apps/server/src/main.ts -app.use((req, res, next) => { - // Prevent clickjacking - res.setHeader('X-Frame-Options', 'SAMEORIGIN') - - // Prevent MIME sniffing - res.setHeader('X-Content-Type-Options', 'nosniff') - - // XSS protection - res.setHeader('X-XSS-Protection', '1; mode=block') - - // Referrer policy - res.setHeader('Referrer-Policy', 'same-origin') - - // HTTPS upgrade - if (req.secure) { - res.setHeader('Strict-Transport-Security', 'max-age=31536000') - } - - next() -}) -``` - -### Rate Limiting - -**API Rate Limiting:** -```typescript -// apps/server/src/routes/middleware/rate_limit.ts -const rateLimit = require('express-rate-limit') - -const apiLimiter = rateLimit({ - windowMs: 15 * 60 * 1000, // 15 minutes - max: 1000, // Limit each IP to 1000 requests per window - message: 'Too many requests from this IP' -}) - -app.use('/api/', apiLimiter) -``` - -**Login Rate Limiting:** -```typescript -const loginLimiter = rateLimit({ - windowMs: 15 * 60 * 1000, - max: 5, // 5 failed attempts - skipSuccessfulRequests: true -}) - -app.post('/api/login/password', loginLimiter, loginHandler) -``` - -## Data Security - -### Secure Data Deletion - -**Soft Delete:** -```typescript -// Mark as deleted (sync first) -note.isDeleted = 1 -note.deleteId = generateUUID() -note.save() - -// Entity change tracked for sync -addEntityChange('notes', noteId, note) -``` - -**Hard Delete (Erase):** -```typescript -// After sync completed -sql.execute('DELETE FROM notes WHERE noteId = ?', [noteId]) -sql.execute('DELETE FROM branches WHERE noteId = ?', [noteId]) -sql.execute('DELETE FROM attributes WHERE noteId = ?', [noteId]) - -// Mark entity change as erased -sql.execute('UPDATE entity_changes SET isErased = 1 WHERE entityId = ?', [noteId]) -``` - -**Blob Cleanup:** -```typescript -// Find orphaned blobs (not referenced by any note/revision/attachment) -const orphanedBlobs = sql.getRows(` - SELECT blobId FROM blobs - WHERE blobId NOT IN (SELECT blobId FROM notes WHERE blobId IS NOT NULL) - AND blobId NOT IN (SELECT blobId FROM revisions WHERE blobId IS NOT NULL) - AND blobId NOT IN (SELECT blobId FROM attachments WHERE blobId IS NOT NULL) -`) - -// Delete orphaned blobs -for (const blob of orphanedBlobs) { - sql.execute('DELETE FROM blobs WHERE blobId = ?', [blob.blobId]) -} -``` - -### Memory Security - -**Protected Data in Memory:** -- Protected data keys stored in memory only -- Cleared on timeout -- Not written to disk -- Not in session storage - -**Memory Cleanup:** -```typescript -// Clear sensitive data -const clearSensitiveData = () => { - protectedDataKey = null - - // Force garbage collection if available - if (global.gc) { - global.gc() - } -} -``` - -### Temporary Files - -**Secure Temporary Files:** -```typescript -const tempDir = os.tmpdir() -const tempFile = path.join(tempDir, `trilium-${crypto.randomBytes(16).toString('hex')}`) - -// Write temp file -fs.writeFileSync(tempFile, data, { mode: 0o600 }) // Owner read/write only - -// Clean up after use -fs.unlinkSync(tempFile) -``` - -## Dependency Security - -### Vulnerability Scanning - -**Tools:** -- `npm audit` - Check for known vulnerabilities -- Renovate bot - Automatic dependency updates -- GitHub Dependabot alerts - -**Process:** -```bash -# Check for vulnerabilities -npm audit - -# Fix automatically -npm audit fix - -# Manual review for breaking changes -npm audit fix --force -``` - -### Dependency Pinning - -**package.json:** -```json -{ - "dependencies": { - "express": "4.18.2", // Exact version - "better-sqlite3": "^9.2.2" // Compatible versions - } -} -``` - -**pnpm Overrides:** -```json -{ - "pnpm": { - "overrides": { - "lodash@<4.17.21": ">=4.17.21", // Force minimum version - "axios@<0.21.2": ">=0.21.2" - } - } -} -``` - -### Patch Management - -**pnpm Patches:** -```bash -# Create patch -pnpm patch @ckeditor/ckeditor5 - -# Edit files in temporary directory -# ... - -# Generate patch file -pnpm patch-commit /tmp/ckeditor5-patch - -# Patch applied automatically on install -``` - -## Security Best Practices - -### For Users - -1. **Strong Passwords** - - Use unique password for Trilium - - Enable TOTP 2FA - - Protect password manager - -2. **Protected Notes** - - Use for sensitive information - - Set reasonable session timeout - - Don't leave sessions unattended - -3. **Backups** - - Regular backups to secure location - - Encrypt backup storage - - Test backup restoration - -4. **Server Setup** - - Use HTTPS only - - Keep software updated - - Firewall configuration - - Use reverse proxy (nginx, Caddy) - -5. **Scripts** - - Review scripts before using - - Be cautious with external scripts - - Understand script permissions - -### For Developers - -1. **Code Review** - - Review all security-related changes - - Test authentication/authorization changes - - Validate input sanitization - -2. **Testing** - - Write security tests - - Test edge cases - - Penetration testing - -3. **Dependencies** - - Regular updates - - Audit new dependencies - - Monitor security advisories - -4. **Secrets** - - No secrets in source code - - Use environment variables - - Secure key generation - -## Security Auditing - -### Logs - -**Security Events Logged:** -- Login attempts (success/failure) -- Protected session access -- Password changes -- ETAPI token usage -- Failed CSRF validations - -**Log Location:** -- Desktop: Console output -- Server: Log files or stdout - -### Monitoring - -**Metrics to Monitor:** -- Failed login attempts -- API error rates -- Unusual database changes -- Large exports/imports - -## Incident Response - -### Security Issue Reporting - -**Process:** -1. Email security@triliumnext.com -2. Include vulnerability details -3. Provide reproduction steps -4. Allow reasonable disclosure time - -**Response:** -1. Acknowledge within 48 hours -2. Investigate and validate -3. Develop fix -4. Coordinate disclosure -5. Release patch - -### Breach Response - -**If Compromised:** -1. Change password immediately -2. Review recent activity -3. Check for unauthorized changes -4. Restore from backup if needed -5. Update security settings - -## Future Security Enhancements - -**Planned:** -- Hardware security key support (U2F/WebAuthn) -- End-to-end encryption for sync -- Zero-knowledge architecture option -- Encryption key rotation -- Audit log enhancements -- Per-note access controls - -**Under Consideration:** -- Multi-user support with permissions -- Blockchain-based sync verification -- Homomorphic encryption for search -- Quantum-resistant encryption - ---- - -**See Also:** -- [SECURITY.md](../SECURITY.md) - Security policy -- [ARCHITECTURE.md](ARCHITECTURE.md) - Overall architecture -- [Protected Notes Guide](https://triliumnext.github.io/Docs/Wiki/protected-notes) diff --git a/docs/TECHNICAL_DOCUMENTATION.md b/docs/TECHNICAL_DOCUMENTATION.md deleted file mode 100644 index 445df0530..000000000 --- a/docs/TECHNICAL_DOCUMENTATION.md +++ /dev/null @@ -1,423 +0,0 @@ -# Trilium Notes - Technical Documentation Index - -Welcome to the comprehensive technical and architectural documentation for Trilium Notes. This index provides quick access to all technical documentation resources. - -## 📚 Core Architecture Documentation - -### [ARCHITECTURE.md](ARCHITECTURE.md) -**Main technical architecture document** covering the complete system design. - -**Topics Covered:** -- High-level architecture overview -- Monorepo structure and organization -- Core architecture patterns (Becca, Froca, Shaca) -- Entity system and data model -- Widget-based UI architecture -- Frontend and backend architecture -- API architecture (Internal, ETAPI, WebSocket) -- Build system and tooling -- Testing strategy -- Security overview - -**Audience:** Developers, architects, contributors - ---- - -### [DATABASE.md](DATABASE.md) -**Complete database architecture and schema documentation.** - -**Topics Covered:** -- SQLite database structure -- Entity tables (notes, branches, attributes, revisions, attachments, blobs) -- System tables (options, entity_changes, sessions) -- Data relationships and integrity -- Database access patterns -- Migrations and versioning -- Performance optimization -- Backup and maintenance -- Security considerations - -**Audience:** Backend developers, database administrators - ---- - -### [SYNCHRONIZATION.md](SYNCHRONIZATION.md) -**Detailed synchronization protocol and implementation.** - -**Topics Covered:** -- Sync architecture overview -- Entity change tracking -- Sync protocol (handshake, pull, push) -- Conflict resolution strategies -- Protected notes synchronization -- Performance optimizations -- Error handling and retry logic -- Sync server configuration -- WebSocket real-time updates -- Troubleshooting guide - -**Audience:** Advanced users, sync server administrators, contributors - ---- - -### [SCRIPTING.md](SCRIPTING.md) -**Comprehensive guide to the Trilium scripting system.** - -**Topics Covered:** -- Script types (frontend, backend, render) -- Frontend API reference -- Backend API reference -- Entity classes (FNote, BNote, etc.) -- Script examples and patterns -- Script storage and execution -- Security considerations -- Performance optimization -- Debugging techniques -- Advanced topics - -**Audience:** Power users, script developers, plugin creators - ---- - -### [SECURITY_ARCHITECTURE.md](SECURITY_ARCHITECTURE.md) -**In-depth security architecture and implementation.** - -**Topics Covered:** -- Security principles and threat model -- Authentication methods (password, TOTP, OpenID) -- Session management -- Authorization and protected sessions -- Encryption (notes, transport, backups) -- Input sanitization (XSS, SQL injection, CSRF) -- Network security (HTTPS, headers, rate limiting) -- Data security and secure deletion -- Dependency security -- Security best practices -- Incident response - -**Audience:** Security engineers, administrators, auditors - ---- - -## 🔧 Developer Documentation - -### [Developer Guide](Developer%20Guide/Developer%20Guide/) -Collection of developer-focused documentation for contributing to Trilium. - -**Key Documents:** -- [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) - Setting up development environment -- [Project Structure](Developer%20Guide/Developer%20Guide/Project%20Structure.md) - Monorepo organization -- [Development and Architecture](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/) - Various development topics - -**Topics Include:** -- Local development setup -- Building and deployment -- Adding new note types -- Database schema details -- Internationalization -- Icons and UI customization -- Docker development -- Troubleshooting - -**Audience:** Contributors, developers - ---- - -## 📖 User Documentation - -### [User Guide](User%20Guide/User%20Guide/) -Comprehensive end-user documentation for using Trilium. - -**Key Sections:** -- Installation & Setup -- Basic Concepts and Features -- Note Types -- Advanced Usage -- Synchronization -- Import/Export - -**Audience:** End users, administrators - ---- - -### [Script API](Script%20API/) -Complete API reference for user scripting. - -**Coverage:** -- Frontend API methods -- Backend API methods -- Entity properties and methods -- Event handlers -- Utility functions - -**Audience:** Script developers, power users - ---- - -## 🚀 Quick Start Guides - -### For Users -1. [Installation Guide](User%20Guide/User%20Guide/Installation%20&%20Setup/) - Get Trilium running -2. [Basic Concepts](User%20Guide/User%20Guide/Basic%20Concepts%20and%20Features/) - Learn the fundamentals -3. [Scripting Guide](SCRIPTING.md) - Extend Trilium with scripts - -### For Developers -1. [Environment Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) - Setup development environment -2. [Architecture Overview](ARCHITECTURE.md) - Understand the system -3. [Contributing Guide](../README.md#-contribute) - Start contributing - -### For Administrators -1. [Server Installation](User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md) - Deploy Trilium server -2. [Synchronization Setup](SYNCHRONIZATION.md) - Configure sync -3. [Security Best Practices](SECURITY_ARCHITECTURE.md#security-best-practices) - Secure your installation - ---- - -## 🔍 Documentation by Topic - -### Architecture & Design -- [Overall Architecture](ARCHITECTURE.md) -- [Monorepo Structure](ARCHITECTURE.md#monorepo-structure) -- [Three-Layer Cache System](ARCHITECTURE.md#three-layer-cache-system) -- [Entity System](ARCHITECTURE.md#entity-system) -- [Widget-Based UI](ARCHITECTURE.md#widget-based-ui) - -### Data & Storage -- [Database Architecture](DATABASE.md) -- [Entity Tables](DATABASE.md#entity-tables) -- [Data Relationships](DATABASE.md#data-relationships) -- [Blob Storage](DATABASE.md#blobs-table) -- [Database Migrations](DATABASE.md#database-migrations) - -### Synchronization -- [Sync Architecture](SYNCHRONIZATION.md#sync-architecture) -- [Sync Protocol](SYNCHRONIZATION.md#sync-protocol) -- [Conflict Resolution](SYNCHRONIZATION.md#conflict-resolution) -- [Protected Notes Sync](SYNCHRONIZATION.md#protected-notes-sync) -- [WebSocket Sync](SYNCHRONIZATION.md#websocket-sync-updates) - -### Security -- [Authentication](SECURITY_ARCHITECTURE.md#authentication) -- [Encryption](SECURITY_ARCHITECTURE.md#encryption) -- [Input Sanitization](SECURITY_ARCHITECTURE.md#input-sanitization) -- [Network Security](SECURITY_ARCHITECTURE.md#network-security) -- [Security Best Practices](SECURITY_ARCHITECTURE.md#security-best-practices) - -### Scripting & Extensibility -- [Script Types](SCRIPTING.md#script-types) -- [Frontend API](SCRIPTING.md#frontend-api) -- [Backend API](SCRIPTING.md#backend-api) -- [Script Examples](SCRIPTING.md#script-examples) -- [Custom Widgets](SCRIPTING.md#render-scripts) - -### Frontend -- [Client Architecture](ARCHITECTURE.md#frontend-architecture) -- [Widget System](ARCHITECTURE.md#widget-based-ui) -- [Event System](ARCHITECTURE.md#event-system) -- [Froca Cache](ARCHITECTURE.md#2-froca-frontend-cache) -- [UI Components](ARCHITECTURE.md#ui-components) - -### Backend -- [Server Architecture](ARCHITECTURE.md#backend-architecture) -- [Service Layer](ARCHITECTURE.md#service-layer) -- [Route Structure](ARCHITECTURE.md#route-structure) -- [Becca Cache](ARCHITECTURE.md#1-becca-backend-cache) -- [Middleware](ARCHITECTURE.md#middleware) - -### Build & Deploy -- [Build System](ARCHITECTURE.md#build-system) -- [Package Manager](ARCHITECTURE.md#package-manager-pnpm) -- [Build Tools](ARCHITECTURE.md#build-tools) -- [Docker](Developer%20Guide/Developer%20Guide/Development%20and%20architecture/Docker.md) -- [Deployment](Developer%20Guide/Developer%20Guide/Building%20and%20deployment/) - -### Testing -- [Testing Strategy](ARCHITECTURE.md#testing-strategy) -- [Test Organization](ARCHITECTURE.md#test-organization) -- [E2E Testing](ARCHITECTURE.md#e2e-testing) - ---- - -## 📋 Reference Documentation - -### File Locations -``` -trilium/ -├── apps/ -│ ├── client/ # Frontend application -│ ├── server/ # Backend server -│ ├── desktop/ # Electron app -│ └── ... -├── packages/ -│ ├── commons/ # Shared code -│ ├── ckeditor5/ # Rich text editor -│ └── ... -├── docs/ -│ ├── ARCHITECTURE.md # Main architecture doc -│ ├── DATABASE.md # Database documentation -│ ├── SYNCHRONIZATION.md # Sync documentation -│ ├── SCRIPTING.md # Scripting guide -│ ├── SECURITY_ARCHITECTURE.md # Security documentation -│ ├── Developer Guide/ # Developer docs -│ ├── User Guide/ # User docs -│ └── Script API/ # API reference -└── ... -``` - -### Key Source Files -- **Backend Entry:** `apps/server/src/main.ts` -- **Frontend Entry:** `apps/client/src/desktop.ts` / `apps/client/src/index.ts` -- **Becca Cache:** `apps/server/src/becca/becca.ts` -- **Froca Cache:** `apps/client/src/services/froca.ts` -- **Database Schema:** `apps/server/src/assets/db/schema.sql` -- **Backend API:** `apps/server/src/services/backend_script_api.ts` -- **Frontend API:** `apps/client/src/services/frontend_script_api.ts` - -### Important Directories -- **Entities:** `apps/server/src/becca/entities/` -- **Widgets:** `apps/client/src/widgets/` -- **Services:** `apps/server/src/services/` -- **Routes:** `apps/server/src/routes/` -- **Migrations:** `apps/server/src/migrations/` -- **Tests:** Various `*.spec.ts` files throughout - ---- - -## 🎯 Common Tasks - -### Understanding the Codebase -1. Read [ARCHITECTURE.md](ARCHITECTURE.md) for overview -2. Explore [Monorepo Structure](ARCHITECTURE.md#monorepo-structure) -3. Review [Entity System](ARCHITECTURE.md#entity-system) -4. Check [Key Files](ARCHITECTURE.md#key-files-for-understanding-architecture) - -### Adding Features -1. Review relevant architecture documentation -2. Check [Developer Guide](Developer%20Guide/Developer%20Guide/) -3. Follow existing patterns in codebase -4. Write tests -5. Update documentation - -### Debugging Issues -1. Check [Troubleshooting](Developer%20Guide/Developer%20Guide/Troubleshooting/) -2. Review [Database](DATABASE.md) for data issues -3. Check [Synchronization](SYNCHRONIZATION.md) for sync issues -4. Review [Security](SECURITY_ARCHITECTURE.md) for auth issues - -### Performance Optimization -1. [Database Performance](DATABASE.md#performance-optimization) -2. [Cache Optimization](ARCHITECTURE.md#caching-system) -3. [Build Optimization](ARCHITECTURE.md#build-system) -4. [Script Performance](SCRIPTING.md#performance-considerations) - ---- - -## 🔗 External Resources - -### Official Links -- **Website:** https://triliumnotes.org -- **Documentation:** https://docs.triliumnotes.org -- **GitHub:** https://github.com/TriliumNext/Trilium -- **Discussions:** https://github.com/TriliumNext/Trilium/discussions -- **Matrix Chat:** https://matrix.to/#/#triliumnext:matrix.org - -### Community Resources -- **Awesome Trilium:** https://github.com/Nriver/awesome-trilium -- **TriliumRocks:** https://trilium.rocks/ -- **Wiki:** https://triliumnext.github.io/Docs/Wiki/ - -### Related Projects -- **TriliumDroid:** https://github.com/FliegendeWurst/TriliumDroid -- **Web Clipper:** Included in main repository - ---- - -## 📝 Documentation Conventions - -### Document Structure -- Overview section -- Table of contents -- Main content with headings -- Code examples where relevant -- "See Also" references - -### Code Examples -```typescript -// TypeScript examples with comments -const example = 'value' -``` - -```sql --- SQL examples with formatting -SELECT * FROM notes WHERE noteId = ? -``` - -### Cross-References -- Use relative links: `[text](path/to/file.md)` -- Reference sections: `[text](file.md#section)` -- External links: Full URLs - -### Maintenance -- Review on major releases -- Update for architectural changes -- Add examples for new features -- Keep API references current - ---- - -## 🤝 Contributing to Documentation - -### What to Document -- New features and APIs -- Architecture changes -- Migration guides -- Performance tips -- Security considerations - -### How to Contribute -1. Edit markdown files in `docs/` -2. Follow existing structure and style -3. Include code examples -4. Test links and formatting -5. Submit pull request - -### Documentation Standards -- Clear, concise language -- Complete code examples -- Proper markdown formatting -- Cross-references to related docs -- Updated version numbers - ---- - -## 📅 Version Information - -- **Documentation Version:** 0.99.3 -- **Last Updated:** November 2025 -- **Trilium Version:** 0.99.3+ -- **Next Review:** When major architectural changes occur - ---- - -## 💡 Getting Help - -### For Users -- [User Guide](User%20Guide/User%20Guide/) -- [GitHub Discussions](https://github.com/TriliumNext/Trilium/discussions) -- [Matrix Chat](https://matrix.to/#/#triliumnext:matrix.org) - -### For Developers -- [Developer Guide](Developer%20Guide/Developer%20Guide/) -- [Architecture Docs](ARCHITECTURE.md) -- [GitHub Issues](https://github.com/TriliumNext/Trilium/issues) - -### For Contributors -- [Contributing Guidelines](../README.md#-contribute) -- [Code of Conduct](../CODE_OF_CONDUCT) -- [Developer Setup](Developer%20Guide/Developer%20Guide/Environment%20Setup.md) - ---- - -**Maintained by:** TriliumNext Team -**License:** AGPL-3.0-only -**Repository:** https://github.com/TriliumNext/Trilium From b80cb22985f2090ec060e545df0f810fe3dc5dac Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 18:20:12 +0200 Subject: [PATCH 42/54] chore(deps): clean up package lock --- pnpm-lock.yaml | 184 ++----------------------------------------------- 1 file changed, 6 insertions(+), 178 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1054a98c4..d039fcef4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -838,9 +838,6 @@ importers: vite: specifier: 7.1.12 version: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - vitest: - specifier: 4.0.6 - version: 4.0.6(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) packages/ckeditor5: dependencies: @@ -5002,9 +4999,6 @@ packages: '@ssddanbrown/codemirror-lang-twig@1.0.0': resolution: {integrity: sha512-7WIMIh8Ssc54TooGCY57WU2rKEqZZrcV2tZSVRPtd0gKYsrDEKCSLWpQjUWEx7bdgh3NKHUjq1O4ugIzI/+dwQ==} - '@standard-schema/spec@1.0.0': - resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==} - '@stylistic/eslint-plugin@4.4.1': resolution: {integrity: sha512-CEigAk7eOLyHvdgmpZsKFwtiqS2wFwI1fn4j09IU9GmD4euFM4jEBAViWeCqaNLlbX2k2+A/Fq9cje4HQBXuJQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -5803,9 +5797,6 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} - '@vitest/expect@4.0.6': - resolution: {integrity: sha512-5j8UUlBVhOjhj4lR2Nt9sEV8b4WtbcYh8vnfhTNA2Kn5+smtevzjNq+xlBuVhnFGXiyPPNzGrOVvmyHWkS5QGg==} - '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: @@ -5817,41 +5808,18 @@ packages: vite: optional: true - '@vitest/mocker@4.0.6': - resolution: {integrity: sha512-3COEIew5HqdzBFEYN9+u0dT3i/NCwppLnO1HkjGfAP1Vs3vti1Hxm/MvcbC4DAn3Szo1M7M3otiAaT83jvqIjA==} - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/pretty-format@4.0.6': - resolution: {integrity: sha512-4vptgNkLIA1W1Nn5X4x8rLJBzPiJwnPc+awKtfBE5hNMVsoAl/JCCPPzNrbf+L4NKgklsis5Yp2gYa+XAS442g==} - '@vitest/runner@3.2.4': resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} - '@vitest/runner@4.0.6': - resolution: {integrity: sha512-trPk5qpd7Jj+AiLZbV/e+KiiaGXZ8ECsRxtnPnCrJr9OW2mLB72Cb824IXgxVz/mVU3Aj4VebY+tDTPn++j1Og==} - '@vitest/snapshot@3.2.4': resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} - '@vitest/snapshot@4.0.6': - resolution: {integrity: sha512-PaYLt7n2YzuvxhulDDu6c9EosiRuIE+FI2ECKs6yvHyhoga+2TBWI8dwBjs+IeuQaMtZTfioa9tj3uZb7nev1g==} - '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/spy@4.0.6': - resolution: {integrity: sha512-g9jTUYPV1LtRPRCQfhbMintW7BTQz1n6WXYQYRQ25qkyffA4bjVXjkROokZnv7t07OqfaFKw1lPzqKGk1hmNuQ==} - '@vitest/ui@3.2.4': resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} peerDependencies: @@ -5860,9 +5828,6 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} - '@vitest/utils@4.0.6': - resolution: {integrity: sha512-bG43VS3iYKrMIZXBo+y8Pti0O7uNju3KvNn6DrQWhQQKcLavMB+0NZfO1/QBAEbq0MaQ3QjNsnnXlGQvsh0Z6A==} - '@volar/language-core@2.4.13': resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} @@ -6644,10 +6609,6 @@ packages: resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} engines: {node: '>=12'} - chai@6.2.0: - resolution: {integrity: sha512-aUTnJc/JipRzJrNADXVvpVqi6CO0dn3nx4EVPxijri+fj3LUUDyZQOgVeW54Ob3Y1Xh9Iz8f+CgaCl8v0mn9bA==} - engines: {node: '>=18'} - chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -8275,10 +8236,6 @@ packages: resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} engines: {node: '>=12.0.0'} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} - engines: {node: '>=12.0.0'} - exponential-backoff@3.1.2: resolution: {integrity: sha512-8QxYTVXUkuy7fIIoitQkPwGonB8F3Zj8eEO8Sqg9Zv/bkI7RJAzowee4gr81Hak/dUTpA2Z7VfQgoijjPNlUZA==} @@ -10187,9 +10144,6 @@ packages: magic-string@0.30.18: resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} - magic-string@0.30.21: - resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - magicast@0.3.5: resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} @@ -13881,10 +13835,6 @@ packages: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} - tinyrainbow@3.0.3: - resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} - engines: {node: '>=14.0.0'} - tinyspy@4.0.3: resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} engines: {node: '>=14.0.0'} @@ -14499,40 +14449,6 @@ packages: jsdom: optional: true - vitest@4.0.6: - resolution: {integrity: sha512-gR7INfiVRwnEOkCk47faros/9McCZMp5LM+OMNWGLaDBSvJxIzwjgNFufkuePBNaesGRnLmNfW+ddbUJRZn0nQ==} - engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} - hasBin: true - peerDependencies: - '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 - '@vitest/browser-playwright': 4.0.6 - '@vitest/browser-preview': 4.0.6 - '@vitest/browser-webdriverio': 4.0.6 - '@vitest/ui': 4.0.6 - happy-dom: '*' - jsdom: '*' - peerDependenciesMeta: - '@edge-runtime/vm': - optional: true - '@types/debug': - optional: true - '@types/node': - optional: true - '@vitest/browser-playwright': - optional: true - '@vitest/browser-preview': - optional: true - '@vitest/browser-webdriverio': - optional: true - '@vitest/ui': - optional: true - happy-dom: - optional: true - jsdom: - optional: true - void-elements@2.0.1: resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} engines: {node: '>=0.10.0'} @@ -16068,6 +15984,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-classic@47.1.0': dependencies: @@ -16095,6 +16013,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -16117,6 +16037,8 @@ snapshots: '@ckeditor/ckeditor5-table': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-emoji@47.1.0': dependencies: @@ -20325,8 +20247,6 @@ snapshots: '@lezer/highlight': 1.2.1 '@lezer/lr': 1.4.2 - '@standard-schema/spec@1.0.0': {} - '@stylistic/eslint-plugin@4.4.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@typescript-eslint/utils': 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3) @@ -21310,15 +21230,6 @@ snapshots: chai: 5.2.0 tinyrainbow: 2.0.0 - '@vitest/expect@4.0.6': - dependencies: - '@standard-schema/spec': 1.0.0 - '@types/chai': 5.2.2 - '@vitest/spy': 4.0.6 - '@vitest/utils': 4.0.6 - chai: 6.2.0 - tinyrainbow: 3.0.3 - '@vitest/mocker@3.2.4(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 @@ -21328,52 +21239,26 @@ snapshots: msw: 2.7.5(@types/node@24.10.0)(typescript@5.9.3) vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/mocker@4.0.6(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))': - dependencies: - '@vitest/spy': 4.0.6 - estree-walker: 3.0.3 - magic-string: 0.30.21 - optionalDependencies: - msw: 2.7.5(@types/node@24.10.0)(typescript@5.9.3) - vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/pretty-format@4.0.6': - dependencies: - tinyrainbow: 3.0.3 - '@vitest/runner@3.2.4': dependencies: '@vitest/utils': 3.2.4 pathe: 2.0.3 strip-literal: 3.0.0 - '@vitest/runner@4.0.6': - dependencies: - '@vitest/utils': 4.0.6 - pathe: 2.0.3 - '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 magic-string: 0.30.18 pathe: 2.0.3 - '@vitest/snapshot@4.0.6': - dependencies: - '@vitest/pretty-format': 4.0.6 - magic-string: 0.30.21 - pathe: 2.0.3 - '@vitest/spy@3.2.4': dependencies: tinyspy: 4.0.3 - '@vitest/spy@4.0.6': {} - '@vitest/ui@3.2.4(vitest@3.2.4)': dependencies: '@vitest/utils': 3.2.4 @@ -21391,11 +21276,6 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 - '@vitest/utils@4.0.6': - dependencies: - '@vitest/pretty-format': 4.0.6 - tinyrainbow: 3.0.3 - '@volar/language-core@2.4.13': dependencies: '@volar/source-map': 2.4.13 @@ -22350,8 +22230,6 @@ snapshots: loupe: 3.1.4 pathval: 2.0.1 - chai@6.2.0: {} - chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -24566,8 +24444,6 @@ snapshots: expect-type@1.2.1: {} - expect-type@1.2.2: {} - exponential-backoff@3.1.2: {} exponential-backoff@3.1.3: {} @@ -26796,10 +26672,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magic-string@0.30.21: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: dependencies: '@babel/parser': 7.28.4 @@ -31330,8 +31202,6 @@ snapshots: tinyrainbow@2.0.0: {} - tinyrainbow@3.0.3: {} - tinyspy@4.0.3: {} tldts-core@6.1.86: @@ -32002,48 +31872,6 @@ snapshots: - tsx - yaml - vitest@4.0.6(@types/debug@4.1.12)(@types/node@24.10.0)(@vitest/ui@3.2.4)(happy-dom@20.0.10)(jiti@2.6.1)(jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5))(less@4.1.3)(lightningcss@1.30.1)(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1): - dependencies: - '@vitest/expect': 4.0.6 - '@vitest/mocker': 4.0.6(msw@2.7.5(@types/node@24.10.0)(typescript@5.9.3))(vite@7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1)) - '@vitest/pretty-format': 4.0.6 - '@vitest/runner': 4.0.6 - '@vitest/snapshot': 4.0.6 - '@vitest/spy': 4.0.6 - '@vitest/utils': 4.0.6 - debug: 4.4.3(supports-color@6.0.0) - es-module-lexer: 1.7.0 - expect-type: 1.2.2 - magic-string: 0.30.21 - pathe: 2.0.3 - picomatch: 4.0.3 - std-env: 3.9.0 - tinybench: 2.9.0 - tinyexec: 0.3.2 - tinyglobby: 0.2.15 - tinyrainbow: 3.0.3 - vite: 7.1.12(@types/node@24.10.0)(jiti@2.6.1)(less@4.1.3)(lightningcss@1.30.1)(sass-embedded@1.91.0)(sass@1.91.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1) - why-is-node-running: 2.3.0 - optionalDependencies: - '@types/debug': 4.1.12 - '@types/node': 24.10.0 - '@vitest/ui': 3.2.4(vitest@3.2.4) - happy-dom: 20.0.10 - jsdom: 26.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - transitivePeerDependencies: - - jiti - - less - - lightningcss - - msw - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - void-elements@2.0.1: {} void-elements@3.1.0: {} From 193caf8c219fece9d96c4a6f929ca7fbc265ee95 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Tue, 4 Nov 2025 19:06:33 +0200 Subject: [PATCH 43/54] chore: clean up generated type definitions --- .gitignore | 4 - .../ckeditor5-admonition/sample/ckeditor.d.ts | 7 -- .../ckeditor5-admonition/sample/ckeditor.js | 81 ------------------- .../ckeditor5-footnotes/sample/ckeditor.d.ts | 7 -- .../ckeditor5-footnotes/sample/ckeditor.js | 81 ------------------- .../footnote-editing/auto-formatting.js.map | 1 - .../src/footnote-editing/converters.js.map | 1 - .../footnote-editing/footnote-editing.js.map | 1 - .../src/footnote-editing/schema.js.map | 1 - .../sample/ckeditor.d.ts | 7 -- .../sample/ckeditor.js | 81 ------------------- packages/ckeditor5-math/sample/ckeditor.d.ts | 7 -- packages/ckeditor5-math/sample/ckeditor.js | 81 ------------------- .../ckeditor5-math/src/ui/mainformview.js.map | 1 - .../ckeditor5-math/src/ui/mathview.js.map | 1 - .../ckeditor5-mermaid/sample/ckeditor.d.ts | 7 -- packages/ckeditor5-mermaid/sample/ckeditor.js | 81 ------------------- .../src/commands/insertMermaidCommand.js.map | 1 - .../src/commands/mermaidPreviewCommand.js.map | 1 - .../commands/mermaidSourceViewCommand.js.map | 1 - .../commands/mermaidSplitViewCommand.js.map | 1 - .../src/scripts/common/debounce.d.ts | 2 - .../src/scripts/common/debounce.d.ts.map | 1 - .../src/scripts/common/parents.d.ts | 2 - .../src/scripts/common/parents.d.ts.map | 1 - .../src/scripts/common/parsehtml.d.ts | 2 - .../src/scripts/common/parsehtml.d.ts.map | 1 - packages/share-theme/src/scripts/index.d.ts | 3 - .../share-theme/src/scripts/index.d.ts.map | 1 - .../share-theme/src/scripts/modules/api.d.ts | 11 --- .../src/scripts/modules/api.d.ts.map | 1 - .../src/scripts/modules/expanders.d.ts | 2 - .../src/scripts/modules/expanders.d.ts.map | 1 - .../share-theme/src/scripts/modules/math.d.ts | 3 - .../src/scripts/modules/math.d.ts.map | 1 - .../src/scripts/modules/mermaid.d.ts | 2 - .../src/scripts/modules/mermaid.d.ts.map | 1 - .../src/scripts/modules/mobile.d.ts | 2 - .../src/scripts/modules/mobile.d.ts.map | 1 - .../src/scripts/modules/search.d.ts | 2 - .../src/scripts/modules/search.d.ts.map | 1 - .../src/scripts/modules/theme.d.ts | 8 -- .../src/scripts/modules/theme.d.ts.map | 1 - .../share-theme/src/scripts/modules/toc.d.ts | 12 --- .../src/scripts/modules/toc.d.ts.map | 1 - packages/share-theme/src/scripts/test.d.ts | 2 - .../share-theme/src/scripts/test.d.ts.map | 1 - 47 files changed, 520 deletions(-) delete mode 100644 packages/ckeditor5-admonition/sample/ckeditor.d.ts delete mode 100644 packages/ckeditor5-admonition/sample/ckeditor.js delete mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.d.ts delete mode 100644 packages/ckeditor5-footnotes/sample/ckeditor.js delete mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map delete mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map delete mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map delete mode 100644 packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map delete mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts delete mode 100644 packages/ckeditor5-keyboard-marker/sample/ckeditor.js delete mode 100644 packages/ckeditor5-math/sample/ckeditor.d.ts delete mode 100644 packages/ckeditor5-math/sample/ckeditor.js delete mode 100644 packages/ckeditor5-math/src/ui/mainformview.js.map delete mode 100644 packages/ckeditor5-math/src/ui/mathview.js.map delete mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.d.ts delete mode 100644 packages/ckeditor5-mermaid/sample/ckeditor.js delete mode 100644 packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map delete mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map delete mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map delete mode 100644 packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map delete mode 100644 packages/share-theme/src/scripts/common/debounce.d.ts delete mode 100644 packages/share-theme/src/scripts/common/debounce.d.ts.map delete mode 100644 packages/share-theme/src/scripts/common/parents.d.ts delete mode 100644 packages/share-theme/src/scripts/common/parents.d.ts.map delete mode 100644 packages/share-theme/src/scripts/common/parsehtml.d.ts delete mode 100644 packages/share-theme/src/scripts/common/parsehtml.d.ts.map delete mode 100644 packages/share-theme/src/scripts/index.d.ts delete mode 100644 packages/share-theme/src/scripts/index.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/api.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/api.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/expanders.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/expanders.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/math.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/math.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/mermaid.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/mermaid.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/mobile.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/mobile.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/search.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/search.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/theme.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/theme.d.ts.map delete mode 100644 packages/share-theme/src/scripts/modules/toc.d.ts delete mode 100644 packages/share-theme/src/scripts/modules/toc.d.ts.map delete mode 100644 packages/share-theme/src/scripts/test.d.ts delete mode 100644 packages/share-theme/src/scripts/test.d.ts.map diff --git a/.gitignore b/.gitignore index 81eb71234..b2c4e3c46 100644 --- a/.gitignore +++ b/.gitignore @@ -49,7 +49,3 @@ upload # docs site/ - -# TypeScript and JavaScript maps -*.js.map -*.d.ts.map diff --git a/packages/ckeditor5-admonition/sample/ckeditor.d.ts b/packages/ckeditor5-admonition/sample/ckeditor.d.ts deleted file mode 100644 index e838419a2..000000000 --- a/packages/ckeditor5-admonition/sample/ckeditor.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - interface Window { - editor: ClassicEditor; - } -} -import { ClassicEditor } from 'ckeditor5'; -import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-admonition/sample/ckeditor.js b/packages/ckeditor5-admonition/sample/ckeditor.js deleted file mode 100644 index d61e2e416..000000000 --- a/packages/ckeditor5-admonition/sample/ckeditor.js +++ /dev/null @@ -1,81 +0,0 @@ -import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; -import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; -import Admonition from '../src/admonition.js'; -import 'ckeditor5/ckeditor5.css'; -ClassicEditor - .create(document.getElementById('editor'), { - licenseKey: 'GPL', - plugins: [ - Admonition, - Essentials, - Autoformat, - BlockQuote, - Bold, - Heading, - Image, - ImageCaption, - ImageStyle, - ImageToolbar, - ImageUpload, - Indent, - Italic, - Link, - List, - MediaEmbed, - Paragraph, - Table, - TableToolbar, - CodeBlock, - Code, - Base64UploadAdapter - ], - toolbar: [ - 'undo', - 'redo', - '|', - 'admonition', - '|', - 'heading', - '|', - 'bold', - 'italic', - 'link', - 'code', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'uploadImage', - 'blockQuote', - 'insertTable', - 'mediaEmbed', - 'codeBlock' - ], - image: { - toolbar: [ - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'imageTextAlternative' - ] - }, - table: { - contentToolbar: [ - 'tableColumn', - 'tableRow', - 'mergeTableCells' - ] - } -}) - .then(editor => { - window.editor = editor; - CKEditorInspector.attach(editor); - window.console.log('CKEditor 5 is ready.', editor); -}) - .catch(err => { - window.console.error(err.stack); -}); -//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.d.ts b/packages/ckeditor5-footnotes/sample/ckeditor.d.ts deleted file mode 100644 index e838419a2..000000000 --- a/packages/ckeditor5-footnotes/sample/ckeditor.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - interface Window { - editor: ClassicEditor; - } -} -import { ClassicEditor } from 'ckeditor5'; -import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-footnotes/sample/ckeditor.js b/packages/ckeditor5-footnotes/sample/ckeditor.js deleted file mode 100644 index 77a18d9fd..000000000 --- a/packages/ckeditor5-footnotes/sample/ckeditor.js +++ /dev/null @@ -1,81 +0,0 @@ -import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; -import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; -import Footnotes from '../src/footnotes.js'; -import 'ckeditor5/ckeditor5.css'; -ClassicEditor - .create(document.getElementById('editor'), { - licenseKey: 'GPL', - plugins: [ - Footnotes, - Essentials, - Autoformat, - BlockQuote, - Bold, - Heading, - Image, - ImageCaption, - ImageStyle, - ImageToolbar, - ImageUpload, - Indent, - Italic, - Link, - List, - MediaEmbed, - Paragraph, - Table, - TableToolbar, - CodeBlock, - Code, - Base64UploadAdapter - ], - toolbar: [ - 'undo', - 'redo', - '|', - 'footnotes', - '|', - 'heading', - '|', - 'bold', - 'italic', - 'link', - 'code', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'uploadImage', - 'blockQuote', - 'insertTable', - 'mediaEmbed', - 'codeBlock' - ], - image: { - toolbar: [ - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'imageTextAlternative' - ] - }, - table: { - contentToolbar: [ - 'tableColumn', - 'tableRow', - 'mergeTableCells' - ] - } -}) - .then(editor => { - window.editor = editor; - CKEditorInspector.attach(editor); - window.console.log('CKEditor 5 is ready.', editor); -}) - .catch(err => { - window.console.error(err.stack); -}); -//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map deleted file mode 100644 index e5a24d9f6..000000000 --- a/packages/ckeditor5-footnotes/src/footnote-editing/auto-formatting.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"auto-formatting.js","sourceRoot":"","sources":["auto-formatting.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map deleted file mode 100644 index 8d92168fe..000000000 --- a/packages/ckeditor5-footnotes/src/footnote-editing/converters.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"converters.js","sourceRoot":"","sources":["converters.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map deleted file mode 100644 index 45a94eb8a..000000000 --- a/packages/ckeditor5-footnotes/src/footnote-editing/footnote-editing.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"footnote-editing.js","sourceRoot":"","sources":["footnote-editing.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map b/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map deleted file mode 100644 index e10b42239..000000000 --- a/packages/ckeditor5-footnotes/src/footnote-editing/schema.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"schema.js","sourceRoot":"","sources":["schema.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAE,MAAmB,EAAS,EAAE;IAC3D;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,EAAE;QAC1C,QAAQ,EAAE,IAAI;QACd,UAAU,EAAE,QAAQ;QACpB,OAAO,EAAE,OAAO;QAChB,aAAa,EAAE,QAAQ,CAAC,YAAY;QACpC,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,CAAE;KAC/C,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,YAAY,EAAE;QACvC,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;QACd,cAAc,EAAE,OAAO;QACvB,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAE;KAChG,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,EAAE;QAC1C,OAAO,EAAE,QAAQ,CAAC,YAAY;QAC9B,cAAc,EAAE,OAAO;QACvB,eAAe,EAAE,CAAE,UAAU,CAAC,eAAe,CAAE;KAC/C,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,iBAAiB,EAAE;QAC5C,UAAU,EAAE,OAAO;QACnB,QAAQ,EAAE,IAAI;QACd,QAAQ,EAAE,IAAI;QACd,eAAe,EAAE,CAAE,UAAU,CAAC,iBAAiB,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,aAAa,CAAE;KAClG,CAAE,CAAC;IAEJ;;KAEI;IACJ,MAAM,CAAC,QAAQ,CAAE,QAAQ,CAAC,gBAAgB,EAAE;QAC3C,OAAO,EAAE,QAAQ,CAAC,YAAY;QAC9B,QAAQ,EAAE,IAAI;QACd,YAAY,EAAE,KAAK;QACnB,eAAe,EAAE,CAAE,UAAU,CAAC,gBAAgB,EAAE,UAAU,CAAC,UAAU,CAAE;KACvE,CAAE,CAAC;IAEJ,MAAM,CAAC,aAAa,CAAE,CAAE,OAAO,EAAE,eAAe,EAAG,EAAE;QACpD,IAAK,OAAO,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,CAAE,IAAI,eAAe,CAAC,IAAI,KAAK,QAAQ,CAAC,eAAe,EAAG,CAAC;YACzG,OAAO,KAAK,CAAC;QACd,CAAC;QACD,IAAK,OAAO,CAAC,QAAQ,CAAE,QAAQ,CAAC,eAAe,CAAE,IAAI,eAAe,CAAC,IAAI,KAAK,UAAU,EAAG,CAAC;YAC3F,OAAO,KAAK,CAAC;QACd,CAAC;IACF,CAAC,CAAE,CAAC;AACL,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts b/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts deleted file mode 100644 index e838419a2..000000000 --- a/packages/ckeditor5-keyboard-marker/sample/ckeditor.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - interface Window { - editor: ClassicEditor; - } -} -import { ClassicEditor } from 'ckeditor5'; -import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js b/packages/ckeditor5-keyboard-marker/sample/ckeditor.js deleted file mode 100644 index 850bb57e8..000000000 --- a/packages/ckeditor5-keyboard-marker/sample/ckeditor.js +++ /dev/null @@ -1,81 +0,0 @@ -import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; -import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; -import Kbd from '../src/kbd.js'; -import 'ckeditor5/ckeditor5.css'; -ClassicEditor - .create(document.getElementById('editor'), { - licenseKey: 'GPL', - plugins: [ - Kbd, - Essentials, - Autoformat, - BlockQuote, - Bold, - Heading, - Image, - ImageCaption, - ImageStyle, - ImageToolbar, - ImageUpload, - Indent, - Italic, - Link, - List, - MediaEmbed, - Paragraph, - Table, - TableToolbar, - CodeBlock, - Code, - Base64UploadAdapter - ], - toolbar: [ - 'undo', - 'redo', - '|', - 'keyboardMarker', - '|', - 'heading', - '|', - 'bold', - 'italic', - 'link', - 'code', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'uploadImage', - 'blockQuote', - 'insertTable', - 'mediaEmbed', - 'codeBlock' - ], - image: { - toolbar: [ - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'imageTextAlternative' - ] - }, - table: { - contentToolbar: [ - 'tableColumn', - 'tableRow', - 'mergeTableCells' - ] - } -}) - .then(editor => { - window.editor = editor; - CKEditorInspector.attach(editor); - window.console.log('CKEditor 5 is ready.', editor); -}) - .catch(err => { - window.console.error(err.stack); -}); -//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-math/sample/ckeditor.d.ts b/packages/ckeditor5-math/sample/ckeditor.d.ts deleted file mode 100644 index e838419a2..000000000 --- a/packages/ckeditor5-math/sample/ckeditor.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - interface Window { - editor: ClassicEditor; - } -} -import { ClassicEditor } from 'ckeditor5'; -import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-math/sample/ckeditor.js b/packages/ckeditor5-math/sample/ckeditor.js deleted file mode 100644 index 370a359aa..000000000 --- a/packages/ckeditor5-math/sample/ckeditor.js +++ /dev/null @@ -1,81 +0,0 @@ -import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; -import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; -import Math from '../src/math.js'; -import 'ckeditor5/ckeditor5.css'; -ClassicEditor - .create(document.getElementById('editor'), { - licenseKey: 'GPL', - plugins: [ - Math, - Essentials, - Autoformat, - BlockQuote, - Bold, - Heading, - Image, - ImageCaption, - ImageStyle, - ImageToolbar, - ImageUpload, - Indent, - Italic, - Link, - List, - MediaEmbed, - Paragraph, - Table, - TableToolbar, - CodeBlock, - Code, - Base64UploadAdapter - ], - toolbar: [ - 'undo', - 'redo', - '|', - 'math', - '|', - 'heading', - '|', - 'bold', - 'italic', - 'link', - 'code', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'uploadImage', - 'blockQuote', - 'insertTable', - 'mediaEmbed', - 'codeBlock' - ], - image: { - toolbar: [ - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'imageTextAlternative' - ] - }, - table: { - contentToolbar: [ - 'tableColumn', - 'tableRow', - 'mergeTableCells' - ] - } -}) - .then(editor => { - window.editor = editor; - CKEditorInspector.attach(editor); - window.console.log('CKEditor 5 is ready.', editor); -}) - .catch(err => { - window.console.error(err.stack); -}); -//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-math/src/ui/mainformview.js.map b/packages/ckeditor5-math/src/ui/mainformview.js.map deleted file mode 100644 index f1a361307..000000000 --- a/packages/ckeditor5-math/src/ui/mainformview.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mainformview.js","sourceRoot":"","sources":["mainformview.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/packages/ckeditor5-math/src/ui/mathview.js.map b/packages/ckeditor5-math/src/ui/mathview.js.map deleted file mode 100644 index b63bd4e19..000000000 --- a/packages/ckeditor5-math/src/ui/mathview.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mathview.js","sourceRoot":"","sources":["mathview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAe,MAAM,WAAW,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,IAAI;IAYzC,YACC,MAOY,EACZ,QAA6C,EAC7C,MAAc,EACd,UAAkB,EAClB,gBAA+B,EAC/B,kBAAgC;QAEhC,KAAK,CAAE,MAAM,CAAE,CAAC;QAEhB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;QAEzC,IAAI,CAAC,GAAG,CAAE,OAAO,EAAE,EAAE,CAAE,CAAC;QACxB,IAAI,CAAC,GAAG,CAAE,SAAS,EAAE,KAAK,CAAE,CAAC;QAE7B,IAAI,CAAC,EAAE,CAAE,QAAQ,EAAE,GAAG,EAAE;YACvB,IAAK,IAAI,CAAC,UAAU,EAAG,CAAC;gBACvB,IAAI,CAAC,UAAU,EAAE,CAAC;YACnB,CAAC;QACF,CAAC,CAAE,CAAC;QAEJ,IAAI,CAAC,WAAW,CAAE;YACjB,GAAG,EAAE,KAAK;YACV,UAAU,EAAE;gBACX,KAAK,EAAE,CAAE,IAAI,EAAE,iBAAiB,EAAE,uBAAuB,CAAE;aAC3D;SACD,CAAE,CAAC;IACL,CAAC;IAEM,UAAU;QAChB,IAAK,IAAI,CAAC,OAAO,EAAG,CAAC;YACpB,KAAK,cAAc,CAClB,IAAI,CAAC,KAAK,EACV,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,EACJ,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,kBAAkB,CACvB,CAAC;QACH,CAAC;IACF,CAAC;IAEe,MAAM;QACrB,KAAK,CAAC,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,UAAU,EAAE,CAAC;IACnB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.d.ts b/packages/ckeditor5-mermaid/sample/ckeditor.d.ts deleted file mode 100644 index e838419a2..000000000 --- a/packages/ckeditor5-mermaid/sample/ckeditor.d.ts +++ /dev/null @@ -1,7 +0,0 @@ -declare global { - interface Window { - editor: ClassicEditor; - } -} -import { ClassicEditor } from 'ckeditor5'; -import 'ckeditor5/ckeditor5.css'; diff --git a/packages/ckeditor5-mermaid/sample/ckeditor.js b/packages/ckeditor5-mermaid/sample/ckeditor.js deleted file mode 100644 index 92fe6af36..000000000 --- a/packages/ckeditor5-mermaid/sample/ckeditor.js +++ /dev/null @@ -1,81 +0,0 @@ -import { ClassicEditor, Autoformat, Base64UploadAdapter, BlockQuote, Bold, Code, CodeBlock, Essentials, Heading, Image, ImageCaption, ImageStyle, ImageToolbar, ImageUpload, Indent, Italic, Link, List, MediaEmbed, Paragraph, Table, TableToolbar } from 'ckeditor5'; -import CKEditorInspector from '@ckeditor/ckeditor5-inspector'; -import Mermaid from '../src/mermaid.js'; -import 'ckeditor5/ckeditor5.css'; -ClassicEditor - .create(document.getElementById('editor'), { - licenseKey: 'GPL', - plugins: [ - Mermaid, - Essentials, - Autoformat, - BlockQuote, - Bold, - Heading, - Image, - ImageCaption, - ImageStyle, - ImageToolbar, - ImageUpload, - Indent, - Italic, - Link, - List, - MediaEmbed, - Paragraph, - Table, - TableToolbar, - CodeBlock, - Code, - Base64UploadAdapter - ], - toolbar: [ - 'undo', - 'redo', - '|', - 'mermaid', - '|', - 'heading', - '|', - 'bold', - 'italic', - 'link', - 'code', - 'bulletedList', - 'numberedList', - '|', - 'outdent', - 'indent', - '|', - 'uploadImage', - 'blockQuote', - 'insertTable', - 'mediaEmbed', - 'codeBlock' - ], - image: { - toolbar: [ - 'imageStyle:inline', - 'imageStyle:block', - 'imageStyle:side', - '|', - 'imageTextAlternative' - ] - }, - table: { - contentToolbar: [ - 'tableColumn', - 'tableRow', - 'mergeTableCells' - ] - } -}) - .then(editor => { - window.editor = editor; - CKEditorInspector.attach(editor); - window.console.log('CKEditor 5 is ready.', editor); -}) - .catch(err => { - window.console.error(err.stack); -}); -//# sourceMappingURL=ckeditor.js.map \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map b/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map deleted file mode 100644 index c826455dd..000000000 --- a/packages/ckeditor5-mermaid/src/commands/insertMermaidCommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"insertMermaidCommand.js","sourceRoot":"","sources":["insertMermaidCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,mBAAmB,GAAG;;QAEpB,CAAC;AAET;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,OAAO;IAE/C,OAAO;QACf,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAE/D,IAAK,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,EAAG,CAAC;YAC7D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACvB,CAAC;IACF,CAAC;IAEQ,OAAO;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,IAAI,WAAW,CAAC;QAEhB,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,WAAW,GAAG,MAAM,CAAC,aAAa,CAAE,SAAS,EAAE;gBAC9C,WAAW,EAAE,OAAO;gBACpB,MAAM,EAAE,mBAAmB;aAC3B,CAAE,CAAC;YAEJ,KAAK,CAAC,aAAa,CAAE,WAAW,CAAE,CAAC;QACpC,CAAC,CAAE,CAAC;QAEJ,OAAO,WAAW,CAAC;IACpB,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map deleted file mode 100644 index af6477508..000000000 --- a/packages/ckeditor5-mermaid/src/commands/mermaidPreviewCommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidPreviewCommand.js","sourceRoot":"","sources":["mermaidPreviewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,OAAO;IAEhD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,SAAS,CAAE,CAAC;IAC7C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,IAAI,WAAW,EAAE,CAAC;YACjB,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;gBACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,SAAS,EAAG,CAAC;oBAC/D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,SAAS,EAAE,WAAW,CAAE,CAAC;gBAC9D,CAAC;YACF,CAAC,CAAE,CAAC;QACL,CAAC;IACF,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map deleted file mode 100644 index 40b7b1ea2..000000000 --- a/packages/ckeditor5-mermaid/src/commands/mermaidSourceViewCommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidSourceViewCommand.js","sourceRoot":"","sources":["mermaidSourceViewCommand.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,OAAO;IAEnD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,QAAQ,CAAE,CAAC;IAC5C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,QAAQ,EAAG,CAAC;gBAC9D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAE,CAAC;YAC7D,CAAC;QACF,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map b/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map deleted file mode 100644 index cea071e90..000000000 --- a/packages/ckeditor5-mermaid/src/commands/mermaidSplitViewCommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaidSplitViewCommand.js","sourceRoot":"","sources":["mermaidSplitViewCommand.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAgB,MAAM,WAAW,CAAC;AAElD;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAwB,SAAQ,OAAO;IAElD,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC1D,MAAM,eAAe,GAAG,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/D,MAAM,wBAAwB,GAAG,eAAe,IAAI,eAAe,CAAC,IAAI,KAAK,SAAS,CAAC;QAEvF,IAAK,wBAAwB,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,YAAY,CAAE,SAAS,CAAE,CAAA,EAAG,CAAC;YAClG,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC,eAAe,CAAC;QACpC,CAAC;aAAM,CAAC;YACP,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,SAAS,CAAE,MAAM,EAAE,OAAO,CAAE,CAAC;IAC3C,CAAC;IAEQ,OAAO;;QACf,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QAC/D,MAAM,WAAW,GAAG,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,KAAI,MAAA,iBAAiB,CAAC,eAAe,EAAE,0CAAE,MAAM,CAAA,CAAiB,CAAC;QAE5H,KAAK,CAAC,MAAM,CAAE,MAAM,CAAC,EAAE;YACtB,IAAK,WAAW,CAAC,YAAY,CAAE,aAAa,CAAE,KAAK,OAAO,EAAG,CAAC;gBAC7D,MAAM,CAAC,YAAY,CAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAE,CAAC;YAC5D,CAAC;QACF,CAAC,CAAE,CAAC;IACL,CAAC;CACD"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/debounce.d.ts b/packages/share-theme/src/scripts/common/debounce.d.ts deleted file mode 100644 index 0f211accc..000000000 --- a/packages/share-theme/src/scripts/common/debounce.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function debounce unknown>(executor: T, delay: number): (...args: Parameters) => void; -//# sourceMappingURL=debounce.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/debounce.d.ts.map b/packages/share-theme/src/scripts/common/debounce.d.ts.map deleted file mode 100644 index b93906d0e..000000000 --- a/packages/share-theme/src/scripts/common/debounce.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"debounce.d.ts","sourceRoot":"","sources":["debounce.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,IAElF,GAAG,MAAM,UAAU,CAAC,CAAC,CAAC,KAAG,IAAI,CAQhD"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parents.d.ts b/packages/share-theme/src/scripts/common/parents.d.ts deleted file mode 100644 index 71e3141fb..000000000 --- a/packages/share-theme/src/scripts/common/parents.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function parents(el: T, selector: string): HTMLElement[]; -//# sourceMappingURL=parents.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parents.d.ts.map b/packages/share-theme/src/scripts/common/parents.d.ts.map deleted file mode 100644 index 6de9cf805..000000000 --- a/packages/share-theme/src/scripts/common/parents.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parents.d.ts","sourceRoot":"","sources":["parents.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,OAAO,CAAC,CAAC,SAAS,WAAW,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,iBAM7E"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parsehtml.d.ts b/packages/share-theme/src/scripts/common/parsehtml.d.ts deleted file mode 100644 index 14388138c..000000000 --- a/packages/share-theme/src/scripts/common/parsehtml.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function parseHTML(html: string, fragment?: boolean): Node | NodeListOf; -//# sourceMappingURL=parsehtml.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/common/parsehtml.d.ts.map b/packages/share-theme/src/scripts/common/parsehtml.d.ts.map deleted file mode 100644 index 666bc507a..000000000 --- a/packages/share-theme/src/scripts/common/parsehtml.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"parsehtml.d.ts","sourceRoot":"","sources":["parsehtml.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,UAAQ,gCAM/D"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/index.d.ts b/packages/share-theme/src/scripts/index.d.ts deleted file mode 100644 index e8e54e326..000000000 --- a/packages/share-theme/src/scripts/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import "highlight.js/styles/default.css"; -import "@triliumnext/ckeditor5/src/theme/ck-content.css"; -//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/index.d.ts.map b/packages/share-theme/src/scripts/index.d.ts.map deleted file mode 100644 index 251337575..000000000 --- a/packages/share-theme/src/scripts/index.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAQA,OAAO,iCAAiC,CAAC;AACzC,OAAO,iDAAiD,CAAC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/api.d.ts b/packages/share-theme/src/scripts/modules/api.d.ts deleted file mode 100644 index 5f21d8839..000000000 --- a/packages/share-theme/src/scripts/modules/api.d.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** - * Fetch note with given ID from backend - * - * @param noteId of the given note to be fetched. If false, fetches current note. - */ -declare function fetchNote(noteId?: string | null): Promise; -declare const _default: { - fetchNote: typeof fetchNote; -}; -export default _default; -//# sourceMappingURL=api.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/api.d.ts.map b/packages/share-theme/src/scripts/modules/api.d.ts.map deleted file mode 100644 index 2867b765b..000000000 --- a/packages/share-theme/src/scripts/modules/api.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iBAAe,SAAS,CAAC,MAAM,GAAE,MAAM,GAAG,IAAW,gBAQpD;;;;AAED,wBAEE"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/expanders.d.ts b/packages/share-theme/src/scripts/modules/expanders.d.ts deleted file mode 100644 index b3b2fee98..000000000 --- a/packages/share-theme/src/scripts/modules/expanders.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function setupExpanders(): void; -//# sourceMappingURL=expanders.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/expanders.d.ts.map b/packages/share-theme/src/scripts/modules/expanders.d.ts.map deleted file mode 100644 index 725e08f8c..000000000 --- a/packages/share-theme/src/scripts/modules/expanders.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"expanders.d.ts","sourceRoot":"","sources":["expanders.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,OAAO,UAAU,cAAc,SAkBrC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/math.d.ts b/packages/share-theme/src/scripts/modules/math.d.ts deleted file mode 100644 index 0efafccd5..000000000 --- a/packages/share-theme/src/scripts/modules/math.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -import "katex/dist/katex.min.css"; -export default function setupMath(): Promise; -//# sourceMappingURL=math.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/math.d.ts.map b/packages/share-theme/src/scripts/modules/math.d.ts.map deleted file mode 100644 index 07dc005cf..000000000 --- a/packages/share-theme/src/scripts/modules/math.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"math.d.ts","sourceRoot":"","sources":["math.ts"],"names":[],"mappings":"AAAA,OAAO,0BAA0B,CAAC;AAElC,wBAA8B,SAAS,kBAatC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mermaid.d.ts b/packages/share-theme/src/scripts/modules/mermaid.d.ts deleted file mode 100644 index 5f8cdb13c..000000000 --- a/packages/share-theme/src/scripts/modules/mermaid.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function setupMermaid(): Promise; -//# sourceMappingURL=mermaid.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mermaid.d.ts.map b/packages/share-theme/src/scripts/modules/mermaid.d.ts.map deleted file mode 100644 index 58a556c4a..000000000 --- a/packages/share-theme/src/scripts/modules/mermaid.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mermaid.d.ts","sourceRoot":"","sources":["mermaid.ts"],"names":[],"mappings":"AAAA,wBAA8B,YAAY,kBAqBzC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mobile.d.ts b/packages/share-theme/src/scripts/modules/mobile.d.ts deleted file mode 100644 index 284da2404..000000000 --- a/packages/share-theme/src/scripts/modules/mobile.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function setupMobileMenu(): void; -//# sourceMappingURL=mobile.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/mobile.d.ts.map b/packages/share-theme/src/scripts/modules/mobile.d.ts.map deleted file mode 100644 index caf6de3c8..000000000 --- a/packages/share-theme/src/scripts/modules/mobile.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["mobile.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,OAAO,UAAU,eAAe,SAqBtC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/search.d.ts b/packages/share-theme/src/scripts/modules/search.d.ts deleted file mode 100644 index 737734b84..000000000 --- a/packages/share-theme/src/scripts/modules/search.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export default function setupSearch(): void; -//# sourceMappingURL=search.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/search.d.ts.map b/packages/share-theme/src/scripts/modules/search.d.ts.map deleted file mode 100644 index 78491705d..000000000 --- a/packages/share-theme/src/scripts/modules/search.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["search.ts"],"names":[],"mappings":"AA0BA,MAAM,CAAC,OAAO,UAAU,WAAW,SAqClC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/theme.d.ts b/packages/share-theme/src/scripts/modules/theme.d.ts deleted file mode 100644 index f357f8ddd..000000000 --- a/packages/share-theme/src/scripts/modules/theme.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** - * Note: - * - * - Setting of the .theme-dark or .theme-light is done in the share template's to avoid a flash. - * - Setting of the value of the checkbox is also done in the template, near the definition of the input box. - */ -export default function setupThemeSelector(): void; -//# sourceMappingURL=theme.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/theme.d.ts.map b/packages/share-theme/src/scripts/modules/theme.d.ts.map deleted file mode 100644 index 560bad1fa..000000000 --- a/packages/share-theme/src/scripts/modules/theme.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["theme.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,MAAM,CAAC,OAAO,UAAU,kBAAkB,SAOzC"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/toc.d.ts b/packages/share-theme/src/scripts/modules/toc.d.ts deleted file mode 100644 index e6e80805c..000000000 --- a/packages/share-theme/src/scripts/modules/toc.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -/** - * The ToC is now generated in the page template so - * it even exists for users without client-side js - * and that means it loads with the page so it avoids - * all potential reshuffling or layout recalculations. - * - * So, all this function needs to do is make the links - * perform smooth animation, and adjust the "active" - * entry as the user scrolls. - */ -export default function setupToC(): void; -//# sourceMappingURL=toc.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/modules/toc.d.ts.map b/packages/share-theme/src/scripts/modules/toc.d.ts.map deleted file mode 100644 index 1d2a8b0ce..000000000 --- a/packages/share-theme/src/scripts/modules/toc.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"toc.d.ts","sourceRoot":"","sources":["toc.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,SAoC/B"} \ No newline at end of file diff --git a/packages/share-theme/src/scripts/test.d.ts b/packages/share-theme/src/scripts/test.d.ts deleted file mode 100644 index 9bcc4712a..000000000 --- a/packages/share-theme/src/scripts/test.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -export {}; -//# sourceMappingURL=test.d.ts.map \ No newline at end of file diff --git a/packages/share-theme/src/scripts/test.d.ts.map b/packages/share-theme/src/scripts/test.d.ts.map deleted file mode 100644 index ffac09233..000000000 --- a/packages/share-theme/src/scripts/test.d.ts.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":""} \ No newline at end of file From 7651c58c4772ef143be482cdec8d2a8b90524d59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:33:17 +0000 Subject: [PATCH 44/54] chore(deps): update dependency axios to v1.13.2 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 36 +++++++++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 2c9b0aefb..dae7a3019 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -67,7 +67,7 @@ "@types/xml2js": "0.4.14", "archiver": "7.0.1", "async-mutex": "0.5.0", - "axios": "1.13.1", + "axios": "1.13.2", "bindings": "1.5.0", "bootstrap": "5.3.8", "chardet": "2.1.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d039fcef4..7aaf72237 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -604,8 +604,8 @@ importers: specifier: 0.5.0 version: 0.5.0 axios: - specifier: 1.13.1 - version: 1.13.1(debug@4.4.3) + specifier: 1.13.2 + version: 1.13.2(debug@4.4.3) bindings: specifier: 1.5.0 version: 1.5.0 @@ -6295,8 +6295,8 @@ packages: resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} engines: {node: '>=6.0.0'} - axios@1.13.1: - resolution: {integrity: sha512-hU4EGxxt+j7TQijx1oYdAjw4xuIp1wRQSsbMFwSthCWeBQur1eF+qJ5iQ5sN3Tw8YRzQNKb8jszgBdMDVqwJcw==} + axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} b4a@1.6.7: resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} @@ -15611,6 +15611,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-upload': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-ai@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -15820,6 +15822,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-watchdog': 47.1.0 es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-dev-build-tools@43.1.0(@swc/helpers@0.5.17)(tslib@2.8.1)(typescript@5.9.3)': dependencies: @@ -15984,8 +15988,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.1.0': dependencies: @@ -15995,6 +15997,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-decoupled@47.1.0': dependencies: @@ -16004,6 +16008,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-editor-inline@47.1.0': dependencies: @@ -16121,6 +16127,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-font@47.1.0': dependencies: @@ -16184,6 +16192,8 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 '@ckeditor/ckeditor5-widget': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-html-embed@47.1.0': dependencies: @@ -16474,6 +16484,8 @@ snapshots: '@ckeditor/ckeditor5-paste-from-office': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-paste-from-office@47.1.0': dependencies: @@ -16481,6 +16493,8 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-engine': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-real-time-collaboration@47.1.0(bufferutil@4.0.9)(utf-8-validate@6.0.5)': dependencies: @@ -16522,6 +16536,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-revision-history@47.1.0': dependencies: @@ -16599,6 +16615,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-special-characters@47.1.0': dependencies: @@ -16608,6 +16626,8 @@ snapshots: '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-style@47.1.0': dependencies: @@ -16710,6 +16730,8 @@ snapshots: '@ckeditor/ckeditor5-icons': 47.1.0 '@ckeditor/ckeditor5-ui': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 + transitivePeerDependencies: + - supports-color '@ckeditor/ckeditor5-upload@47.1.0': dependencies: @@ -21822,7 +21844,7 @@ snapshots: await-to-js@3.0.0: {} - axios@1.13.1(debug@4.4.3): + axios@1.13.2(debug@4.4.3): dependencies: follow-redirects: 1.15.9(debug@4.4.3) form-data: 4.0.4 From d5bfa466a29b32a357a478b2e6c2d700b5df4686 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:34:00 +0000 Subject: [PATCH 45/54] chore(deps): update dependency sax to v1.4.3 --- apps/server/package.json | 2 +- pnpm-lock.yaml | 26 ++++++++++---------------- 2 files changed, 11 insertions(+), 17 deletions(-) diff --git a/apps/server/package.json b/apps/server/package.json index 2c9b0aefb..0b0536cb3 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -115,7 +115,7 @@ "safe-compare": "1.1.4", "sanitize-filename": "1.6.3", "sanitize-html": "2.17.0", - "sax": "1.4.2", + "sax": "1.4.3", "serve-favicon": "2.5.1", "stream-throttle": "0.1.3", "strip-bom": "5.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d039fcef4..d858645c0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -748,8 +748,8 @@ importers: specifier: 2.17.0 version: 2.17.0 sax: - specifier: 1.4.2 - version: 1.4.2 + specifier: 1.4.3 + version: 1.4.3 serve-favicon: specifier: 2.5.1 version: 2.5.1 @@ -12945,8 +12945,8 @@ packages: engines: {node: '>=14.0.0'} hasBin: true - sax@1.4.2: - resolution: {integrity: sha512-FySGAa0RGcFiN6zfrO9JvK1r7TB59xuzCcTHOBXBNoKgDejlOQCR2KL/FGk3/iDlsqyYg1ELZpOmlg09B01Czw==} + sax@1.4.3: + resolution: {integrity: sha512-yqYn1JhPczigF94DMS+shiDMjDowYO6y9+wB/4WgO0Y19jWYk0lQ4tuG5KI7kj4FTp1wxPj5IFfcrz/s1c3jjQ==} saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} @@ -15757,8 +15757,6 @@ snapshots: '@ckeditor/ckeditor5-core': 47.1.0 '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-code-block@47.1.0(patch_hash=2361d8caad7d6b5bddacc3a3b4aa37dbfba260b1c1b22a450413a79c1bb1ce95)': dependencies: @@ -15984,8 +15982,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.1.0': dependencies: @@ -16013,8 +16009,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-multi-root@47.1.0': dependencies: @@ -17797,7 +17791,7 @@ snapshots: '@file-type/xml@0.4.3': dependencies: - sax: 1.4.2 + sax: 1.4.3 strtok3: 10.2.2 '@floating-ui/core@1.6.9': @@ -27548,7 +27542,7 @@ snapshots: needle@3.3.1: dependencies: iconv-lite: 0.6.3 - sax: 1.4.2 + sax: 1.4.3 optional: true negotiator@0.6.3: {} @@ -29987,7 +29981,7 @@ snapshots: '@parcel/watcher': 2.5.1 optional: true - sax@1.4.2: {} + sax@1.4.3: {} saxes@5.0.1: dependencies: @@ -30983,7 +30977,7 @@ snapshots: css-what: 6.2.2 csso: 5.0.5 picocolors: 1.1.1 - sax: 1.4.2 + sax: 1.4.3 swagger-jsdoc@6.2.8(openapi-types@12.1.3): dependencies: @@ -32328,12 +32322,12 @@ snapshots: xml2js@0.5.0: dependencies: - sax: 1.4.2 + sax: 1.4.3 xmlbuilder: 11.0.1 xml2js@0.6.2: dependencies: - sax: 1.4.2 + sax: 1.4.3 xmlbuilder: 11.0.1 xmlbuilder@11.0.1: {} From a8bb301296bfdb717080af52402a91ef073b7051 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Nov 2025 01:34:43 +0000 Subject: [PATCH 46/54] chore(deps): update dependency @redocly/cli to v2.11.0 --- apps/build-docs/package.json | 2 +- pnpm-lock.yaml | 42 +++++++++++++++++------------------- 2 files changed, 21 insertions(+), 23 deletions(-) diff --git a/apps/build-docs/package.json b/apps/build-docs/package.json index f22baec81..00196de82 100644 --- a/apps/build-docs/package.json +++ b/apps/build-docs/package.json @@ -11,7 +11,7 @@ "license": "AGPL-3.0-only", "packageManager": "pnpm@10.20.0", "devDependencies": { - "@redocly/cli": "2.10.0", + "@redocly/cli": "2.11.0", "archiver": "7.0.1", "fs-extra": "11.3.2", "react": "19.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d039fcef4..c477f4df6 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -131,8 +131,8 @@ importers: apps/build-docs: devDependencies: '@redocly/cli': - specifier: 2.10.0 - version: 2.10.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5) + specifier: 2.11.0 + version: 2.11.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5) archiver: specifier: 7.0.1 version: 7.0.1 @@ -4223,27 +4223,27 @@ packages: '@redocly/ajv@8.11.3': resolution: {integrity: sha512-4P3iZse91TkBiY+Dx5DUgxQ9GXkVJf++cmI0MOyLDxV9b5MUBI4II6ES8zA5JCbO72nKAJxWrw4PUPW+YP3ZDQ==} - '@redocly/cli@2.10.0': - resolution: {integrity: sha512-wKuF/30MSmcc4SJwWTuVnIeFKyW60DVOgxTzvvA+wC1HRBZ24X3UTRyt6MtDEFGcNl6hv5/J9l2lodStwwqelQ==} + '@redocly/cli@2.11.0': + resolution: {integrity: sha512-Wr8me9M5tQ4pZT7Z0Llxojlo8L0GBBt45zceQ8iKyBmJUHWDbKYYdKubZBCH0XktQLEA8HitYBGN1unsxwx20g==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} hasBin: true '@redocly/config@0.22.2': resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} - '@redocly/config@0.36.2': - resolution: {integrity: sha512-gwIjFOzyq9bdJCdtEHDMf2hEJ9hHXUHkY1U3IPWyZmRoFcibzlpXOLrT0xVgnn10IEttMwD+SZtZBE593yDXsw==} + '@redocly/config@0.37.0': + resolution: {integrity: sha512-cYN+rTTCQIp5mVt1xumJsNqpZcaPVUf1x0ryD0QKXpVKsxKc+lHaMF2P1CqMgdQNY9B7i84z/kvxD0EhxzlxbQ==} '@redocly/openapi-core@1.34.5': resolution: {integrity: sha512-0EbE8LRbkogtcCXU7liAyC00n9uNG9hJ+eMyHFdUsy9lB/WGqnEBgwjA9q2cyzAVcdTkQqTBBU1XePNnN3OijA==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@redocly/openapi-core@2.10.0': - resolution: {integrity: sha512-OmWvnpA11J6Tp3+h8I3nrfpTcXROLllr/9yIUB7ofi7s1yOOKOqlZ4HTs+zaeNmk9vclwmbgc2HVdSsBKUXp6g==} + '@redocly/openapi-core@2.11.0': + resolution: {integrity: sha512-CF4QpCoxxHIB7Dib1XnhdL0WuW4dO4zvNfaEWpN7TASlitOX2mhrc6sD3dYG9knW1iG16e3Oauv2O+tVJx1E9Q==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.10.0': - resolution: {integrity: sha512-4XFOR3kbuhlPBeW2G/G3yPs7YJKV0d/k2BgDwKIQH8Edld4fHvknEAR9TFUaWsiA7JGWrP3CQ58P5VoDNW5O0Q==} + '@redocly/respect-core@2.11.0': + resolution: {integrity: sha512-lAvDILvq82IIei2gVyapGyfuWEamJgCiGO++yQriVk4Wr0hE3lF7ZWusUM3aGZrxEWCVGeeLwbMBpv1BQOnmEg==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} '@replit/codemirror-indentation-markers@6.5.3': @@ -15984,8 +15984,6 @@ snapshots: '@ckeditor/ckeditor5-utils': 47.1.0 ckeditor5: 47.1.0(patch_hash=8331a09d41443b39ea1c784daaccfeb0da4f9065ed556e7de92e9c77edd9eb41) es-toolkit: 1.39.5 - transitivePeerDependencies: - - supports-color '@ckeditor/ckeditor5-editor-classic@47.1.0': dependencies: @@ -19324,14 +19322,14 @@ snapshots: require-from-string: 2.0.2 uri-js-replace: 1.0.1 - '@redocly/cli@2.10.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5)': + '@redocly/cli@2.11.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(bufferutil@4.0.9)(core-js@3.46.0)(encoding@0.1.13)(utf-8-validate@6.0.5)': dependencies: '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 - '@redocly/openapi-core': 2.10.0(ajv@8.17.1) - '@redocly/respect-core': 2.10.0(ajv@8.17.1) + '@redocly/openapi-core': 2.11.0(ajv@8.17.1) + '@redocly/respect-core': 2.11.0(ajv@8.17.1) abort-controller: 3.0.0 chokidar: 3.6.0 colorette: 1.4.0 @@ -19364,7 +19362,7 @@ snapshots: '@redocly/config@0.22.2': {} - '@redocly/config@0.36.2': + '@redocly/config@0.37.0': dependencies: json-schema-to-ts: 2.7.2 @@ -19382,10 +19380,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.10.0(ajv@8.17.1)': + '@redocly/openapi-core@2.11.0(ajv@8.17.1)': dependencies: '@redocly/ajv': 8.11.3 - '@redocly/config': 0.36.2 + '@redocly/config': 0.37.0 ajv-formats: 2.1.1(ajv@8.17.1) colorette: 1.4.0 js-levenshtein: 1.1.6 @@ -19396,12 +19394,12 @@ snapshots: transitivePeerDependencies: - ajv - '@redocly/respect-core@2.10.0(ajv@8.17.1)': + '@redocly/respect-core@2.11.0(ajv@8.17.1)': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.11.2 - '@redocly/openapi-core': 2.10.0(ajv@8.17.1) + '@redocly/openapi-core': 2.11.0(ajv@8.17.1) better-ajv-errors: 1.2.0(ajv@8.17.1) colorette: 2.0.20 json-pointer: 0.6.2 @@ -27573,7 +27571,7 @@ snapshots: node-api-version@0.2.1: dependencies: - semver: 7.7.2 + semver: 7.7.3 node-domexception@1.0.0: {} @@ -27611,7 +27609,7 @@ snapshots: make-fetch-happen: 14.0.3 nopt: 8.1.0 proc-log: 5.0.0 - semver: 7.7.2 + semver: 7.7.3 tar: 7.4.3 tinyglobby: 0.2.15 which: 5.0.0 From ab298cbb3b10d3b66469f71e7797df22de1260fc Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 5 Nov 2025 08:09:15 +0200 Subject: [PATCH 47/54] docs(user): how to set data dir on Windows (closes #4853) --- .../Installation & Setup/Data directory.html | 171 ++++++++++-------- docs/Developer Guide/!!!meta.json | 30 +-- .../Developer Guide/Architecture/Security.md | 4 +- .../Concepts/Synchronisation.md | 2 +- .../Developer Guide/Documentation.md | 2 +- docs/User Guide/!!!meta.json | 62 +++---- .../Installation & Setup/Data directory.md | 24 +-- 7 files changed, 154 insertions(+), 141 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Data directory.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Data directory.html index b5a486848..ad81d00c1 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Data directory.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Data directory.html @@ -1,12 +1,12 @@

      Data directory contains:

        -
      • document.db - database +
      • document.db - database
      • -
      • config.ini - instance level settings like port on which the +
      • config.ini - instance level settings like port on which the Trilium application runs
      • -
      • backup - contains automatically backup of +
      • backup - contains automatically backup of documents
      • -
      • log - contains application log files
      • +
      • log - contains application log files

      Location of the data directory

      Easy way how to find out which data directory Trilium uses is to look @@ -18,30 +18,42 @@

      Data directory is normally named trilium-data and it is stored in:

        -
      • /home/[user]/.local/share for Linux
      • -
      • C:\Users\[user]\AppData\Roaming for Windows Vista and up
      • -
      • /Users/[user]/Library/Application Support for Mac OS
      • -
      • user's home is a fallback if some of the paths above don't exist
      • -
      • user's home is also a default setup for [[docker|Docker server installation]]
      • +
      • /home/[user]/.local/share for Linux
      • +
      • C:\Users\[user]\AppData\Roaming for Windows Vista and up
      • +
      • /Users/[user]/Library/Application Support for Mac OS
      • +
      • user's home is a fallback if some of the paths above don't exist
      • +
      • user's home is also a default setup for [[docker|Docker server installation]]

      If you want to back up your Trilium data, just backup this single directory - it contains everything you need.

      Changing the location of data directory

      If you want to use some other location for the data directory than the - default one, you may change it via TRILIUM_DATA_DIR environment variable - to some other location:

      + default one, you may change it via TRILIUM_DATA_DIR environment + variable to some other location:

      +

      Windows

      +
        +
      1. Press the Windows key on your keyboard.
      2. +
      3. Search and select “Edit the system variables”.
      4. +
      5. Press the “Environment Variables…” button in the bottom-right of the newly + opened screen.
      6. +
      7. On the top section ("User variables for [user]"), press the “New…” button.
      8. +
      9. In the Variable name field insert TRILIUM_DATA_DIR.
      10. +
      11. Press the Browse Directory… button and select the new directory + where to store the database.
      12. +
      13. Close all the windows by pressing the OK button for each of them.
      14. +

      Linux

      export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data

      Mac OS X

      You need to create a .plist file under ~/Library/LaunchAgents to load it properly each login.

      To load it manually, you need to use launchctl setenv TRILIUM_DATA_DIR <yourpath>

      -

      Here is a pre-defined template, where you just need to add your path to:

      
      -
      -
      -
      -    
      -        Label
      +

      Here is a pre-defined template, where you just need to add your path to:

              Label
               set.trilium.env
               RunAtLoad
               
      @@ -50,76 +62,75 @@
                   launchctl
                   setenv
                   TRILIUM_DATA_DIR
      -            /Users/YourUserName/Library/Application Support/trilium-data
      -        
      -    
      -
      + /Users/YourUserName/Library/Application Support/trilium-data

      Create a script to run with specific data directory

      An alternative to globally setting environment variable is to run only the Trilium Notes with this environment variable. This then allows for different setup styles like two database instances or "portable" installation.

      -

      To do this in unix based systems simply run trilium like this:

      TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium
      +

      To do this in Unix-based systems simply run trilium like this:

      TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium

      You can then save the above command as a shell script on your path for convenience.

      Fine-grained directory/path location

      Apart from the data directory, some of the subdirectories of it can be moved elsewhere by changing an environment variable:

      - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      Environment variableDefault valueDescription
      TRILIUM_DOCUMENT_PATH - ${TRILIUM_DATA_DIR}/document.db - Path to the Database (storing - all notes and metadata).
      TRILIUM_BACKUP_DIR - ${TRILIUM_DATA_DIR}/backup - Directory where automated Backup databases - are stored.
      TRILIUM_LOG_DIR - ${TRILIUM_DATA_DIR}/log - Directory where daily Backend (server) logs are - stored.
      TRILIUM_TMP_DIR - ${TRILIUM_DATA_DIR}/tmp - Directory where temporary files are stored (for example when opening in - an external app).
      TRILIUM_ANONYMIZED_DB_DIR - ${TRILIUM_DATA_DIR}/anonymized-db - Directory where a Anonymized Database is - stored.
      TRILIUM_CONFIG_INI_PATH - ${TRILIUM_DATA_DIR}/config.ini - Path to Configuration (config.ini or environment variables) file.
      \ No newline at end of file +
      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      Environment variableDefault valueDescription
      TRILIUM_DOCUMENT_PATH + ${TRILIUM_DATA_DIR}/document.db + Path to the Database (storing + all notes and metadata).
      TRILIUM_BACKUP_DIR + ${TRILIUM_DATA_DIR}/backup + Directory where automated Backup databases + are stored.
      TRILIUM_LOG_DIR + ${TRILIUM_DATA_DIR}/log + Directory where daily Backend (server) logs are + stored.
      TRILIUM_TMP_DIR + ${TRILIUM_DATA_DIR}/tmp + Directory where temporary files are stored (for example when opening in + an external app).
      TRILIUM_ANONYMIZED_DB_DIR + ${TRILIUM_DATA_DIR}/anonymized-db + Directory where a Anonymized Database is + stored.
      TRILIUM_CONFIG_INI_PATH + ${TRILIUM_DATA_DIR}/config.ini + Path to Configuration (config.ini or environment variables) file.
      +
      \ No newline at end of file diff --git a/docs/Developer Guide/!!!meta.json b/docs/Developer Guide/!!!meta.json index 397bdcab4..63e4d0cc4 100644 --- a/docs/Developer Guide/!!!meta.json +++ b/docs/Developer Guide/!!!meta.json @@ -15,6 +15,20 @@ "type": "text", "mime": "text/html", "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "T2W7WCZrYZBU", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cxfTSHIUQtt2", + "isInheritable": false, + "position": 20 + }, { "type": "label", "name": "label:shareAlias", @@ -35,20 +49,6 @@ "value": "developer-guide", "isInheritable": false, "position": 30 - }, - { - "type": "relation", - "name": "internalLink", - "value": "T2W7WCZrYZBU", - "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "cxfTSHIUQtt2", - "isInheritable": false, - "position": 50 } ], "format": "markdown", @@ -817,7 +817,7 @@ "name": "internalLink", "value": "Jg7clqogFOyD", "isInheritable": false, - "position": 20 + "position": 10 }, { "type": "label", diff --git a/docs/Developer Guide/Developer Guide/Architecture/Security.md b/docs/Developer Guide/Developer Guide/Architecture/Security.md index 61fdc7377..f1ef4da77 100644 --- a/docs/Developer Guide/Developer Guide/Architecture/Security.md +++ b/docs/Developer Guide/Developer Guide/Architecture/Security.md @@ -383,7 +383,7 @@ for (const blob of orphanedBlobs) { **Process:** -```sh +``` # Check for vulnerabilities npm audit @@ -424,7 +424,7 @@ npm audit fix --force **pnpm Patches:** -```sh +``` # Create patch pnpm patch @ckeditor/ckeditor5 diff --git a/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md b/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md index f97bd3c4e..45a520cb6 100644 --- a/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md +++ b/docs/Developer Guide/Developer Guide/Concepts/Synchronisation.md @@ -9,7 +9,7 @@ Trilium implements a **bidirectional synchronization system** that allows users ## Sync Architecture -```mermaid +``` graph TB Desktop1[Desktop 1
      Client] Desktop2[Desktop 2
      Client] diff --git a/docs/Developer Guide/Developer Guide/Documentation.md b/docs/Developer Guide/Developer Guide/Documentation.md index 4da87601a..c11d3164c 100644 --- a/docs/Developer Guide/Developer Guide/Documentation.md +++ b/docs/Developer Guide/Developer Guide/Documentation.md @@ -1,5 +1,5 @@ # Documentation -There are multiple types of documentation for Trilium: +There are multiple types of documentation for Trilium: * The _User Guide_ represents the user-facing documentation. This documentation can be browsed by users directly from within Trilium, by pressing F1. * The _Developer's Guide_ represents a set of Markdown documents that present the internals of Trilium, for developers. diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 86ddd9589..c0be59116 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -25,56 +25,35 @@ { "type": "relation", "name": "internalLink", - "value": "BFs8mudNFgCS", + "value": "gh7bpGYxajRS", "isInheritable": false, "position": 20 }, + { + "type": "relation", + "name": "internalLink", + "value": "BFs8mudNFgCS", + "isInheritable": false, + "position": 30 + }, { "type": "relation", "name": "internalLink", "value": "GTwFsgaA0lCt", "isInheritable": false, - "position": 30 - }, - { - "type": "label", - "name": "shareAlias", - "value": "user-guide", - "isInheritable": false, - "position": 10 - }, - { - "type": "label", - "name": "label:shareAlias", - "value": "promoted,alias=Slug,single,text", - "isInheritable": true, - "position": 20 - }, - { - "type": "label", - "name": "iconClass", - "value": "bx bx-help-circle", - "isInheritable": false, - "position": 30 + "position": 40 }, { "type": "relation", "name": "internalLink", "value": "poXkQfguuA0U", "isInheritable": false, - "position": 40 - }, - { - "type": "relation", - "name": "internalLink", - "value": "WOcw2SLH6tbX", - "isInheritable": false, "position": 50 }, { "type": "relation", "name": "internalLink", - "value": "gh7bpGYxajRS", + "value": "WOcw2SLH6tbX", "isInheritable": false, "position": 60 }, @@ -98,6 +77,27 @@ "value": "9qPsTWBorUhQ", "isInheritable": false, "position": 90 + }, + { + "type": "label", + "name": "shareAlias", + "value": "user-guide", + "isInheritable": false, + "position": 10 + }, + { + "type": "label", + "name": "label:shareAlias", + "value": "promoted,alias=Slug,single,text", + "isInheritable": true, + "position": 20 + }, + { + "type": "label", + "name": "iconClass", + "value": "bx bx-help-circle", + "isInheritable": false, + "position": 30 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/Installation & Setup/Data directory.md b/docs/User Guide/User Guide/Installation & Setup/Data directory.md index c2f3650c5..3d66bafe9 100644 --- a/docs/User Guide/User Guide/Installation & Setup/Data directory.md +++ b/docs/User Guide/User Guide/Installation & Setup/Data directory.md @@ -26,7 +26,17 @@ If you want to back up your Trilium data, just backup this single directory - it ### Changing the location of data directory -If you want to use some other location for the data directory than the default one, you may change it via TRILIUM\_DATA\_DIR environment variable to some other location: +If you want to use some other location for the data directory than the default one, you may change it via `TRILIUM_DATA_DIR` environment variable to some other location: + +### Windows + +1. Press the Windows key on your keyboard. +2. Search and select “Edit the system variables”. +3. Press the “Environment Variables…” button in the bottom-right of the newly opened screen. +4. On the top section ("User variables for \[user\]"), press the “New…” button. +5. In the _Variable name_ field insert `TRILIUM_DATA_DIR`. +6. Press the _Browse Directory…_ button and select the new directory where to store the database. +7. Close all the windows by pressing the _OK_ button for each of them. #### Linux @@ -43,11 +53,6 @@ To load it manually, you need to use `launchctl setenv TRILIUM_DATA_DIR Date: Wed, 5 Nov 2025 08:19:25 +0200 Subject: [PATCH 48/54] docs(demo): link to old documentation (closes #5211) --- apps/edit-docs/demo/!!!meta.json | 5 +++-- apps/edit-docs/demo/navigation.html | 2 +- .../root/Miscellaneous/Day Note Template.html | 1 + apps/edit-docs/demo/root/Trilium Demo.html | 16 ++++--------- .../Formatting examples/Code blocks.html | 4 ++++ .../demo/root/Trilium Demo/Note Types.html | 21 ++++++++++++++++++ .../Scripting examples/Task manager.html | 5 ++--- .../Tech/Linux/Bash scripting/While loop.html | 14 ++++++++++++ apps/server/src/assets/db/demo.zip | Bin 915850 -> 916285 bytes 9 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 apps/edit-docs/demo/root/Trilium Demo/Note Types.html diff --git a/apps/edit-docs/demo/!!!meta.json b/apps/edit-docs/demo/!!!meta.json index ce5046fb1..92266fa4b 100644 --- a/apps/edit-docs/demo/!!!meta.json +++ b/apps/edit-docs/demo/!!!meta.json @@ -1,6 +1,6 @@ { "formatVersion": 2, - "appVersion": "0.99.2", + "appVersion": "0.99.3", "files": [ { "isClone": false, @@ -2700,6 +2700,7 @@ } ], "format": "html", + "dataFileName": "Note Types.html", "attachments": [], "dirFileName": "Note Types", "children": [ @@ -3878,7 +3879,7 @@ "title": "Scripting examples", "notePosition": 350, "prefix": null, - "isExpanded": false, + "isExpanded": true, "type": "text", "mime": "text/html", "attributes": [ diff --git a/apps/edit-docs/demo/navigation.html b/apps/edit-docs/demo/navigation.html index 1d4d5d57b..4d1371ac2 100644 --- a/apps/edit-docs/demo/navigation.html +++ b/apps/edit-docs/demo/navigation.html @@ -270,7 +270,7 @@
    3. -
    4. Note Types +
    5. Note Types
      • Canvas
      • diff --git a/apps/edit-docs/demo/root/Miscellaneous/Day Note Template.html b/apps/edit-docs/demo/root/Miscellaneous/Day Note Template.html index 8f2333bf0..a33b14490 100644 --- a/apps/edit-docs/demo/root/Miscellaneous/Day Note Template.html +++ b/apps/edit-docs/demo/root/Miscellaneous/Day Note Template.html @@ -14,6 +14,7 @@

        ☑️ Tasks

        +
        • […]
        diff --git a/apps/edit-docs/demo/root/Trilium Demo.html b/apps/edit-docs/demo/root/Trilium Demo.html index 206054b92..b5b6672d6 100644 --- a/apps/edit-docs/demo/root/Trilium Demo.html +++ b/apps/edit-docs/demo/root/Trilium Demo.html @@ -14,11 +14,10 @@
        - +

        Welcome to Trilium Notes! -

        This is a "demo" document packaged with Trilium to showcase some of its features and also give you some ideas on how you might structure your notes. @@ -26,22 +25,17 @@ you wish.

        If you need any help, visit triliumnotes.org or our GitHub repository -

        Cleanup

        -

        Once you're finished with experimenting and want to cleanup these pages, you can simply delete them all.

        Formatting

        -

        Trilium supports classic formatting like italic, bold, bold and italic. You can add links pointing to external pages or  Formatting examples.

        Lists

        -

        Ordered: -

        1. First Item
        2. @@ -56,7 +50,6 @@

        Unordered: -

        • Item
        • @@ -67,7 +60,6 @@

        Block quotes

        -

        Whereof one cannot speak, thereof one must be silent”

        – Ludwig Wittgenstein

        @@ -75,9 +67,9 @@

        See also other examples like tables, checkbox lists, highlighting, + href="Trilium%20Demo/Formatting%20examples/Checkbox%20lists.html">checkbox lists, highlighting, code blocksand code blocksand math examples.

        + href="Trilium%20Demo/Formatting%20examples/Math.html">math examples.

        diff --git a/apps/edit-docs/demo/root/Trilium Demo/Formatting examples/Code blocks.html b/apps/edit-docs/demo/root/Trilium Demo/Formatting examples/Code blocks.html index 6827fa8af..214ef212e 100644 --- a/apps/edit-docs/demo/root/Trilium Demo/Formatting examples/Code blocks.html +++ b/apps/edit-docs/demo/root/Trilium Demo/Formatting examples/Code blocks.html @@ -21,8 +21,12 @@ language, should that fail it is possible to manually adjust it. The color scheme for the syntax highlighting is adjustable in settings. 

        function helloWorld() {
         
        +
        +
         	alert("Hello world");
         
        +
        +
         }

        For larger pieces of code it is better to use a code note, which uses a fully-fledged code editor (CodeMirror). For an example of a code note, diff --git a/apps/edit-docs/demo/root/Trilium Demo/Note Types.html b/apps/edit-docs/demo/root/Trilium Demo/Note Types.html new file mode 100644 index 000000000..614d566bc --- /dev/null +++ b/apps/edit-docs/demo/root/Trilium Demo/Note Types.html @@ -0,0 +1,21 @@ + + + + + + + + Note Types + + + +

        +

        Note Types

        + +
        +

        T

        +
        +
        + + + \ No newline at end of file diff --git a/apps/edit-docs/demo/root/Trilium Demo/Scripting examples/Task manager.html b/apps/edit-docs/demo/root/Trilium Demo/Scripting examples/Task manager.html index 1b4822074..266520b60 100644 --- a/apps/edit-docs/demo/root/Trilium Demo/Scripting examples/Task manager.html +++ b/apps/edit-docs/demo/root/Trilium Demo/Scripting examples/Task manager.html @@ -13,9 +13,8 @@

        Task manager

        -

        This is a simple TODO/Task manager. You can see some description and explanation - here: https://github.com/zadam/trilium/wiki/Task-manager -

        +

        This is a simple TODO/Task manager. See the Trilium documentation for + information on how it works.

        Please note that this is meant as scripting example only and feature/bug support is very limited.

        diff --git a/apps/edit-docs/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html b/apps/edit-docs/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html index 752bedbd2..39ca1e373 100644 --- a/apps/edit-docs/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html +++ b/apps/edit-docs/demo/root/Trilium Demo/Tech/Linux/Bash scripting/While loop.html @@ -16,18 +16,32 @@

        Documentation: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_09_02.html

        #!/bin/bash
         
        +
        +
         # This script opens 4 terminal windows.
         
        +
        +
         i="0"
         
        +
        +
         while [ $i -lt 4 ]
         
        +
        +
         do
         
        +
        +
             xterm &
         
        +
        +
             i=$[$i+1]
         
        +
        +
         done
    diff --git a/apps/server/src/assets/db/demo.zip b/apps/server/src/assets/db/demo.zip index ebf3f8a7c00ea48ce5d031a2b5e3c48b9c5105cb..b685648200496d9bd6e99fb8c9c91bbbdf112c72 100644 GIT binary patch delta 26619 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 delta 26099 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 Date: Wed, 5 Nov 2025 08:19:37 +0200 Subject: [PATCH 49/54] chore(edit-docs): set different port to edit-demo --- apps/edit-docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edit-docs/package.json b/apps/edit-docs/package.json index cc664e81d..958a54f3d 100644 --- a/apps/edit-docs/package.json +++ b/apps/edit-docs/package.json @@ -17,6 +17,6 @@ }, "scripts": { "edit-docs": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-docs.ts", - "edit-demo": "cross-env TRILIUM_PORT=37741 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-demo.ts" + "edit-demo": "cross-env TRILIUM_PORT=37744 TRILIUM_DATA_DIR=data TRILIUM_INTEGRATION_TEST=memory-no-store DOCS_ROOT=../../../docs USER_GUIDE_ROOT=\"../../server/src/assets/doc_notes/en/User Guide\" tsx ../../scripts/electron-start.mts src/edit-demo.ts" } } \ No newline at end of file From 88b9709f154d0efb5e2e5f1e220335fcdf4199e4 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 5 Nov 2025 08:26:34 +0200 Subject: [PATCH 50/54] docs(user): launch bar clarifications in the LLM doc --- .../en/User Guide/User Guide/AI.html | 72 +++++++++---------- docs/User Guide/!!!meta.json | 7 ++ docs/User Guide/User Guide/AI.md | 4 +- 3 files changed, 45 insertions(+), 38 deletions(-) diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html index 0fc11a28d..11ad7e821 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/AI.html @@ -19,8 +19,7 @@ class="image image_resized" style="width:74.04%;"> - -

    Embeddings

    +

    Embeddings

    Embeddings are important as it allows us to have an compact AI “summary” (it's not human readable text) of each of your Notes, that we can then perform mathematical functions on (such as cosine similarity) @@ -80,59 +79,59 @@ class="image image_resized" style="width:74.04%;">

    These are the tools that currently exist, and will certainly be updated to be more effectively (and even more to be added!):

      -
    • search_notes +
    • search_notes
        -
      • Semantic search
      • +
      • Semantic search
    • -
    • keyword_search +
    • keyword_search
        -
      • Keyword-based search
      • +
      • Keyword-based search
    • -
    • attribute_search +
    • attribute_search
        -
      • Attribute-specific search
      • +
      • Attribute-specific search
    • -
    • search_suggestion +
    • search_suggestion
        -
      • Search syntax helper
      • +
      • Search syntax helper
    • -
    • read_note +
    • read_note
        -
      • Read note content (helps the LLM read Notes)
      • +
      • Read note content (helps the LLM read Notes)
    • -
    • create_note +
    • create_note
        -
      • Create a Note
      • +
      • Create a Note
    • -
    • update_note +
    • update_note
        -
      • Update a Note
      • +
      • Update a Note
    • -
    • manage_attributes +
    • manage_attributes
        -
      • Manage attributes on a Note
      • +
      • Manage attributes on a Note
    • -
    • manage_relationships +
    • manage_relationships
        -
      • Manage the various relationships between Notes
      • +
      • Manage the various relationships between Notes
    • -
    • extract_content +
    • extract_content
        -
      • Used to smartly extract content from a Note
      • +
      • Used to smartly extract content from a Note
    • -
    • calendar_integration +
    • calendar_integration
        -
      • Used to find date notes, create date notes, get the daily note, etc.
      • +
      • Used to find date notes, create date notes, get the daily note, etc.
    @@ -145,17 +144,18 @@ class="image image_resized" style="width:74.04%;">

    You don't need to tell the LLM to execute a certain tool, it should “smartly” call tools and automatically execute them as needed.

    Overview

    -

    Now that you know about embeddings and tools, you can just go ahead and - use the “Chat with Notes” button, where you can go ahead and start chatting!:

    -
    +

    To start, simply press the Chat with Notes button in the  + Launch Bar.

    +
    -
    -

    If you don't see the “Chat with Notes” button on your side launchbar, - you might need to move it from the “Available Launchers” section to the - “Visible Launchers” section:

    -
    - -
    \ No newline at end of file +
    +

    If you don't see the button in the Launch Bar, + you might need to move it from the Available Launchers section to + the Visible Launchers section:

    +
    + +
    \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index c0be59116..98c811ece 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14187,6 +14187,13 @@ "value": "bx bx-bot", "isInheritable": false, "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xYmIYSP6wE3F", + "isInheritable": false, + "position": 40 } ], "format": "markdown", diff --git a/docs/User Guide/User Guide/AI.md b/docs/User Guide/User Guide/AI.md index 57302d77d..f5818d915 100644 --- a/docs/User Guide/User Guide/AI.md +++ b/docs/User Guide/User Guide/AI.md @@ -80,10 +80,10 @@ You don't need to tell the LLM to execute a certain tool, it should “smartly ## Overview -Now that you know about embeddings and tools, you can just go ahead and use the “Chat with Notes” button, where you can go ahead and start chatting!: +To start, simply press the _Chat with Notes_ button in the Launch Bar.
    -If you don't see the “Chat with Notes” button on your side launchbar, you might need to move it from the “Available Launchers” section to the “Visible Launchers” section: +If you don't see the button in the Launch Bar, you might need to move it from the _Available Launchers_ section to the _Visible Launchers_ section:
    \ No newline at end of file From d271fe7fddf4fb4d2123fbaff6d32e5e542f6ef7 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 5 Nov 2025 09:26:14 +0200 Subject: [PATCH 51/54] docs(demo): clean up expansion state --- apps/edit-docs/demo/!!!meta.json | 2 +- apps/server/src/assets/db/demo.zip | Bin 916285 -> 916280 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/edit-docs/demo/!!!meta.json b/apps/edit-docs/demo/!!!meta.json index 92266fa4b..44b61171d 100644 --- a/apps/edit-docs/demo/!!!meta.json +++ b/apps/edit-docs/demo/!!!meta.json @@ -3879,7 +3879,7 @@ "title": "Scripting examples", "notePosition": 350, "prefix": null, - "isExpanded": true, + "isExpanded": false, "type": "text", "mime": "text/html", "attributes": [ diff --git a/apps/server/src/assets/db/demo.zip b/apps/server/src/assets/db/demo.zip index b685648200496d9bd6e99fb8c9c91bbbdf112c72..c4cbc6058fef77cc0e75f15d9246f36cdfeefebf 100644 GIT binary patch delta 16315 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 delta 15531 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ϒo3hR&^2t%6BAQVwI4u>By{; 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 From 16785a5c0bfdee71b4f5537cb44d188357bdb6ec Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Wed, 5 Nov 2025 15:40:12 +0800 Subject: [PATCH 52/54] fix(quick_search): enable Numpad Enter to trigger quick search --- apps/client/src/services/shortcuts.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/client/src/services/shortcuts.ts b/apps/client/src/services/shortcuts.ts index 94dd8893c..7d6a1e956 100644 --- a/apps/client/src/services/shortcuts.ts +++ b/apps/client/src/services/shortcuts.ts @@ -46,6 +46,7 @@ for (let i = 1; i <= 19; i++) { const KEYCODES_WITH_NO_MODIFIER = new Set([ "Delete", "Enter", + "NumpadEnter", ...functionKeyCodes ]); From 26ea43d604b53e9911c920c64c2b91ee6d358f9d Mon Sep 17 00:00:00 2001 From: SiriusXT <1160925501@qq.com> Date: Wed, 5 Nov 2025 16:01:26 +0800 Subject: [PATCH 53/54] chore(test): add vitest for NumpadEnter --- apps/client/src/services/shortcuts.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/services/shortcuts.spec.ts b/apps/client/src/services/shortcuts.spec.ts index 87f8ae489..b9576025f 100644 --- a/apps/client/src/services/shortcuts.spec.ts +++ b/apps/client/src/services/shortcuts.spec.ts @@ -159,7 +159,7 @@ describe("shortcuts", () => { expect(matchesShortcut(event, "Shift+F1")).toBeTruthy(); // Special keys - for (const keyCode of [ "Delete", "Enter" ]) { + for (const keyCode of [ "Delete", "Enter", "NumpadEnter" ]) { event = createKeyboardEvent({ key: keyCode, code: keyCode }); expect(matchesShortcut(event, keyCode), `Key ${keyCode}`).toBeTruthy(); } From 977284fe5749ac3f74ab80a457c558b1e2a0c449 Mon Sep 17 00:00:00 2001 From: Elian Doran Date: Wed, 5 Nov 2025 10:20:35 +0200 Subject: [PATCH 54/54] docs(user): document read-only database (closes #4341) --- .../doc_notes/en/User Guide/!!!meta.json | 2 +- .../Advanced Usage/Read-only database.html | 42 ++++++++++ docs/User Guide/!!!meta.json | 76 +++++++++++++++++++ .../Advanced Usage/Read-only database.md | 32 ++++++++ 4 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Read-only database.html create mode 100644 docs/User Guide/User Guide/Advanced Usage/Read-only database.md diff --git a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json index c9517ba7b..570196694 100644 --- a/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json +++ b/apps/server/src/assets/doc_notes/en/User Guide/!!!meta.json @@ -1 +1 @@ -[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file +[{"id":"_help_BOCnjTMBCoxW","title":"Feature Highlights","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Feature Highlights"},{"name":"iconClass","value":"bx bx-star","type":"label"}]},{"id":"_help_Otzi9La2YAUX","title":"Installation & Setup","type":"book","attributes":[{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_poXkQfguuA0U","title":"Desktop Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation"},{"name":"iconClass","value":"bx bx-desktop","type":"label"}],"children":[{"id":"_help_nRqcgfTb97uV","title":"Using the desktop application as a server","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Using the desktop application "},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_Rp0q8bSP6Ayl","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Desktop Installation/Nix flake"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]}]},{"id":"_help_WOcw2SLH6tbX","title":"Server Installation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation"},{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_Dgg7bR3b6K9j","title":"1. Installing the server","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_3tW6mORuTHnB","title":"Packaged version for Linux","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Packaged version for Linux"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_rWX5eY045zbE","title":"Using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Docker"},{"name":"iconClass","value":"bx bxl-docker","type":"label"}]},{"id":"_help_moVgBcoxE3EK","title":"On NixOS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/On NixOS"},{"name":"iconClass","value":"bx bxl-tux","type":"label"}]},{"id":"_help_J1Bb6lVlwU5T","title":"Manually","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Manually"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]},{"id":"_help_DCmT6e7clMoP","title":"Using Kubernetes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Using Kubernetes"},{"name":"iconClass","value":"bx bxl-kubernetes","type":"label"}]},{"id":"_help_klCWNks3ReaQ","title":"Multiple server instances","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/1. Installing the server/Multiple server instances"},{"name":"iconClass","value":"bx bxs-user-account","type":"label"}]}]},{"id":"_help_vcjrb3VVYPZI","title":"2. Reverse proxy","type":"book","attributes":[{"name":"iconClass","value":"bx bx-folder","type":"label"}],"children":[{"id":"_help_ud6MShXL4WpO","title":"Nginx","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Nginx"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_fDLvzOx29Pfg","title":"Apache using Docker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Apache using Docker"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_LLzSMXACKhUs","title":"Trusted proxy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/2. Reverse proxy/Trusted proxy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_l2VkvOwUNfZj","title":"HTTPS (TLS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/HTTPS (TLS)"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_0hzsNCP31IAB","title":"Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Authentication"},{"name":"iconClass","value":"bx bx-user","type":"label"}]},{"id":"_help_7DAiwaf8Z7Rz","title":"Multi-Factor Authentication","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Multi-Factor Authentication"},{"name":"iconClass","value":"bx bx-stopwatch","type":"label"}]},{"id":"_help_Un4wj2Mak2Ky","title":"Nix flake","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Nix flake.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_yeEaYqosGLSh","title":"Third-party cloud hosting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/Third-party cloud hosting"},{"name":"iconClass","value":"bx bx-cloud","type":"label"}]},{"id":"_help_iGTnKjubbXkA","title":"System Requirements","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Server Installation/System Requirements"},{"name":"iconClass","value":"bx bx-chip","type":"label"}]}]},{"id":"_help_cbkrhQjrkKrh","title":"Synchronization","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Synchronization"},{"name":"iconClass","value":"bx bx-sync","type":"label"}]},{"id":"_help_RDslemsQ6gCp","title":"Mobile Frontend","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Mobile Frontend"},{"name":"iconClass","value":"bx bx-mobile-alt","type":"label"}]},{"id":"_help_MtPxeAWVAzMg","title":"Web Clipper","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Web Clipper"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_n1lujUxCwipy","title":"Upgrading TriliumNext","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Upgrading TriliumNext"},{"name":"iconClass","value":"bx bx-up-arrow-alt","type":"label"}]},{"id":"_help_ODY7qQn5m2FT","title":"Backup","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Backup"},{"name":"iconClass","value":"bx bx-hdd","type":"label"}]},{"id":"_help_tAassRL4RSQL","title":"Data directory","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Installation & Setup/Data directory"},{"name":"iconClass","value":"bx bx-folder-open","type":"label"}]}]},{"id":"_help_gh7bpGYxajRS","title":"Basic Concepts and Features","type":"book","attributes":[{"name":"iconClass","value":"bx bx-help-circle","type":"label"}],"children":[{"id":"_help_Vc8PjrjAGuOp","title":"UI Elements","type":"book","attributes":[{"name":"iconClass","value":"bx bx-window-alt","type":"label"}],"children":[{"id":"_help_x0JgW8UqGXvq","title":"Vertical and horizontal layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Vertical and horizontal layout"},{"name":"iconClass","value":"bx bxs-layout","type":"label"}]},{"id":"_help_x3i7MxGccDuM","title":"Global menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Global menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_oPVyFC7WL2Lp","title":"Note Tree","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree"},{"name":"iconClass","value":"bx bxs-tree-alt","type":"label"}],"children":[{"id":"_help_YtSN43OrfzaA","title":"Note tree contextual menu","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Note tree contextual menu"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_yTjUdsOi4CIE","title":"Multiple selection","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Multiple selection"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_DvdZhoQZY9Yd","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tree/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]}]},{"id":"_help_BlN9DFI679QC","title":"Ribbon","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Ribbon"},{"name":"iconClass","value":"bx bx-dots-horizontal","type":"label"}]},{"id":"_help_3seOhtN8uLIY","title":"Tabs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Tabs"},{"name":"iconClass","value":"bx bx-dock-top","type":"label"}]},{"id":"_help_xYmIYSP6wE3F","title":"Launch Bar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Launch Bar"},{"name":"iconClass","value":"bx bx-sidebar","type":"label"}]},{"id":"_help_8YBEPzcpUgxw","title":"Note buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note buttons"},{"name":"iconClass","value":"bx bx-dots-vertical-rounded","type":"label"}]},{"id":"_help_4TIF1oA4VQRO","title":"Options","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Options"},{"name":"iconClass","value":"bx bx-cog","type":"label"}]},{"id":"_help_luNhaphA37EO","title":"Split View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Split View"},{"name":"iconClass","value":"bx bx-dock-right","type":"label"}]},{"id":"_help_XpOYSgsLkTJy","title":"Floating buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Floating buttons"},{"name":"iconClass","value":"bx bx-rectangle","type":"label"}]},{"id":"_help_RnaPdbciOfeq","title":"Right Sidebar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Right Sidebar"},{"name":"iconClass","value":"bx bxs-dock-right","type":"label"}]},{"id":"_help_r5JGHN99bVKn","title":"Recent Changes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Recent Changes"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_ny318J39E5Z0","title":"Zoom","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Zoom"},{"name":"iconClass","value":"bx bx-zoom-in","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Quick edit"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_lgKX7r3aL30x","title":"Note Tooltip","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/UI Elements/Note Tooltip"},{"name":"iconClass","value":"bx bx-message-detail","type":"label"}]}]},{"id":"_help_BFs8mudNFgCS","title":"Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes"},{"name":"iconClass","value":"bx bx-notepad","type":"label"}],"children":[{"id":"_help_p9kXRFAkwN4o","title":"Note Icons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Icons"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_0vhv7lsOLy82","title":"Attachments","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Attachments"},{"name":"iconClass","value":"bx bx-paperclip","type":"label"}]},{"id":"_help_IakOLONlIfGI","title":"Cloning Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes"},{"name":"iconClass","value":"bx bx-duplicate","type":"label"}],"children":[{"id":"_help_TBwsyfadTA18","title":"Branch prefix","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Cloning Notes/Branch prefix"},{"name":"iconClass","value":"bx bx-rename","type":"label"}]}]},{"id":"_help_bwg0e8ewQMak","title":"Protected Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Protected Notes"},{"name":"iconClass","value":"bx bx-lock-alt","type":"label"}]},{"id":"_help_MKmLg5x6xkor","title":"Archived Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Archived Notes"},{"name":"iconClass","value":"bx bx-box","type":"label"}]},{"id":"_help_vZWERwf8U3nx","title":"Note Revisions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note Revisions"},{"name":"iconClass","value":"bx bx-history","type":"label"}]},{"id":"_help_aGlEvb9hyDhS","title":"Sorting Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Sorting Notes"},{"name":"iconClass","value":"bx bx-sort-up","type":"label"}]},{"id":"_help_NRnIZmSMc5sj","title":"Printing & Exporting as PDF","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Printing & Exporting as PDF"},{"name":"iconClass","value":"bx bx-printer","type":"label"}]},{"id":"_help_CoFPLs3dRlXc","title":"Read-Only Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Read-Only Notes"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_0ESUbbAxVnoK","title":"Note List","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Notes/Note List"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]}]},{"id":"_help_wArbEsdSae6g","title":"Navigation","type":"book","attributes":[{"name":"iconClass","value":"bx bx-navigation","type":"label"}],"children":[{"id":"_help_kBrnXNG3Hplm","title":"Tree Concepts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Tree Concepts"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}]},{"id":"_help_MMiBEQljMQh2","title":"Note Navigation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Navigation"},{"name":"iconClass","value":"bx bxs-navigation","type":"label"}]},{"id":"_help_Ms1nauBra7gq","title":"Quick search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_F1r9QtzQLZqm","title":"Jump to...","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Jump to"},{"name":"iconClass","value":"bx bx-send","type":"label"}]},{"id":"_help_eIg8jdvaoNNd","title":"Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]},{"id":"_help_u3YFHC9tQlpm","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmarks","type":"label"}]},{"id":"_help_OR8WJ7Iz9K4U","title":"Note Hoisting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Note Hoisting"},{"name":"iconClass","value":"bx bxs-chevrons-up","type":"label"}]},{"id":"_help_ZjLYv08Rp3qC","title":"Quick edit","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Quick edit.clone"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_9sRHySam5fXb","title":"Workspaces","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Workspaces"},{"name":"iconClass","value":"bx bx-door-open","type":"label"}]},{"id":"_help_xWtq5NUHOwql","title":"Similar Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Similar Notes"},{"name":"iconClass","value":"bx bx-bar-chart","type":"label"}]},{"id":"_help_McngOG2jbUWX","title":"Search in note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Navigation/Search in note"},{"name":"iconClass","value":"bx bx-search-alt-2","type":"label"}]}]},{"id":"_help_A9Oc6YKKc65v","title":"Keyboard Shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Keyboard Shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_Wy267RK4M69c","title":"Themes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes"},{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_VbjZvtUek0Ln","title":"Theme Gallery","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Themes/Theme Gallery"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_mHbBMPDPkVV5","title":"Import & Export","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export"},{"name":"iconClass","value":"bx bx-import","type":"label"}],"children":[{"id":"_help_Oau6X9rCuegd","title":"Markdown","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}],"children":[{"id":"_help_rJ9grSgoExl9","title":"Supported syntax","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Markdown/Supported syntax"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}]}]},{"id":"_help_syuSEKf2rUGr","title":"Evernote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/Evernote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]},{"id":"_help_GnhlmrATVqcH","title":"OneNote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Import & Export/OneNote"},{"name":"iconClass","value":"bx bx-window-open","type":"label"}]}]},{"id":"_help_rC3pL2aptaRE","title":"Zen mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Basic Concepts and Features/Zen mode"},{"name":"iconClass","value":"bx bxs-yin-yang","type":"label"}]}]},{"id":"_help_s3YCWHBfmYuM","title":"Quick Start","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Quick Start"},{"name":"iconClass","value":"bx bx-run","type":"label"}]},{"id":"_help_i6dbnitykE5D","title":"FAQ","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/FAQ"},{"name":"iconClass","value":"bx bx-question-mark","type":"label"}]},{"id":"_help_KSZ04uQ2D1St","title":"Note Types","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types"},{"name":"iconClass","value":"bx bx-edit","type":"label"}],"children":[{"id":"_help_iPIMuisry3hd","title":"Text","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text"},{"name":"iconClass","value":"bx bx-note","type":"label"}],"children":[{"id":"_help_NwBbFdNZ9h7O","title":"Block quotes & admonitions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Block quotes & admonitions"},{"name":"iconClass","value":"bx bx-info-circle","type":"label"}]},{"id":"_help_oSuaNgyyKnhu","title":"Bookmarks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Bookmarks"},{"name":"iconClass","value":"bx bx-bookmark","type":"label"}]},{"id":"_help_veGu4faJErEM","title":"Content language & Right-to-left support","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Content language & Right-to-le"},{"name":"iconClass","value":"bx bx-align-right","type":"label"}]},{"id":"_help_2x0ZAX9ePtzV","title":"Cut to subnote","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Cut to subnote"},{"name":"iconClass","value":"bx bx-cut","type":"label"}]},{"id":"_help_UYuUB1ZekNQU","title":"Developer-specific formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting"},{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_QxEyIjRBizuC","title":"Code blocks","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Developer-specific formatting/Code blocks"},{"name":"iconClass","value":"bx bx-code","type":"label"}]}]},{"id":"_help_AgjCISero73a","title":"Footnotes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Footnotes"},{"name":"iconClass","value":"bx bx-bracket","type":"label"}]},{"id":"_help_nRhnJkTT8cPs","title":"Formatting toolbar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Formatting toolbar"},{"name":"iconClass","value":"bx bx-text","type":"label"}]},{"id":"_help_Gr6xFaF6ioJ5","title":"General formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/General formatting"},{"name":"iconClass","value":"bx bx-bold","type":"label"}]},{"id":"_help_AxshuNRegLAv","title":"Highlights list","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Highlights list"},{"name":"iconClass","value":"bx bx-highlight","type":"label"}]},{"id":"_help_mT0HEkOsz6i1","title":"Images","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images"},{"name":"iconClass","value":"bx bx-image-alt","type":"label"}],"children":[{"id":"_help_0Ofbk1aSuVRu","title":"Image references","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Images/Image references"},{"name":"iconClass","value":"bx bxs-file-image","type":"label"}]}]},{"id":"_help_nBAXQFj20hS1","title":"Include Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Include Note"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_CohkqWQC1iBv","title":"Insert buttons","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Insert buttons"},{"name":"iconClass","value":"bx bx-plus","type":"label"}]},{"id":"_help_oiVPnW8QfnvS","title":"Keyboard shortcuts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Keyboard shortcuts"},{"name":"iconClass","value":"bx bxs-keyboard","type":"label"}]},{"id":"_help_QEAPj01N5f7w","title":"Links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links"},{"name":"iconClass","value":"bx bx-link-alt","type":"label"}],"children":[{"id":"_help_3IDVtesTQ8ds","title":"External links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/External links"},{"name":"iconClass","value":"bx bx-link-external","type":"label"}]},{"id":"_help_hrZ1D00cLbal","title":"Internal (reference) links","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Links/Internal (reference) links"},{"name":"iconClass","value":"bx bx-link","type":"label"}]}]},{"id":"_help_S6Xx8QIWTV66","title":"Lists","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Lists"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]},{"id":"_help_QrtTYPmdd1qq","title":"Markdown-like formatting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Markdown-like formatting"},{"name":"iconClass","value":"bx bxl-markdown","type":"label"}]},{"id":"_help_YfYAtQBcfo5V","title":"Math Equations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Math Equations"},{"name":"iconClass","value":"bx bx-math","type":"label"}]},{"id":"_help_dEHYtoWWi8ct","title":"Other features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Other features"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_gLt3vA97tMcp","title":"Premium features","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features"},{"name":"iconClass","value":"bx bx-star","type":"label"}],"children":[{"id":"_help_ZlN4nump6EbW","title":"Slash Commands","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Slash Commands"},{"name":"iconClass","value":"bx bx-menu","type":"label"}]},{"id":"_help_pwc194wlRzcH","title":"Text Snippets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Premium features/Text Snippets"},{"name":"iconClass","value":"bx bx-align-left","type":"label"}]}]},{"id":"_help_BFvAtE74rbP6","title":"Table of contents","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Table of contents"},{"name":"iconClass","value":"bx bx-heading","type":"label"}]},{"id":"_help_NdowYOC1GFKS","title":"Tables","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Text/Tables"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_6f9hih2hXXZk","title":"Code","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Code"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_m523cpzocqaD","title":"Saved Search","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Saved Search"},{"name":"iconClass","value":"bx bx-file-find","type":"label"}]},{"id":"_help_iRwzGnHPzonm","title":"Relation Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Relation Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_bdUJEHsAPYQR","title":"Note Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Note Map"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_HcABDtFCkbFN","title":"Render Note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Render Note"},{"name":"iconClass","value":"bx bx-extension","type":"label"}]},{"id":"_help_s1aBHPd79XYj","title":"Mermaid Diagrams","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams"},{"name":"iconClass","value":"bx bx-selection","type":"label"}],"children":[{"id":"_help_RH6yLjjWJHof","title":"ELK layout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mermaid Diagrams/ELK layout"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_WWgeUaBb7UfC","title":"Syntax reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://mermaid.js.org/intro/syntax-reference.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_grjYqerjn243","title":"Canvas","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Canvas"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_1vHRoWCEjj0L","title":"Web View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Web View"},{"name":"iconClass","value":"bx bx-globe-alt","type":"label"}]},{"id":"_help_gBbsAeiuUxI5","title":"Mind Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/Mind Map"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_W8vYD3Q1zjCR","title":"File","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Note Types/File"},{"name":"iconClass","value":"bx bx-file-blank","type":"label"}]}]},{"id":"_help_GTwFsgaA0lCt","title":"Collections","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections"},{"name":"iconClass","value":"bx bx-book","type":"label"}],"children":[{"id":"_help_xWbu3jpNWapp","title":"Calendar","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Calendar"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_2FvYrpmOXm29","title":"Table","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Table"},{"name":"iconClass","value":"bx bx-table","type":"label"}]},{"id":"_help_CtBQqbwXDx1w","title":"Kanban Board","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Kanban Board"},{"name":"iconClass","value":"bx bx-columns","type":"label"}]},{"id":"_help_81SGnPGMk7Xc","title":"Geo Map","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Geo Map"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]},{"id":"_help_zP3PMqaG71Ct","title":"Presentation","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Presentation"},{"name":"iconClass","value":"bx bx-slideshow","type":"label"}]},{"id":"_help_8QqnMzx393bx","title":"Grid View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/Grid View"},{"name":"iconClass","value":"bx bxs-grid","type":"label"}]},{"id":"_help_mULW0Q3VojwY","title":"List View","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Collections/List View"},{"name":"iconClass","value":"bx bx-list-ul","type":"label"}]}]},{"id":"_help_BgmBlOIl72jZ","title":"Troubleshooting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting"},{"name":"iconClass","value":"bx bx-bug","type":"label"}],"children":[{"id":"_help_wy8So3yZZlH9","title":"Reporting issues","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Reporting issues"},{"name":"iconClass","value":"bx bx-bug-alt","type":"label"}]},{"id":"_help_x59R8J8KV5Bp","title":"Anonymized Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Anonymized Database"},{"name":"iconClass","value":"bx bx-low-vision","type":"label"}]},{"id":"_help_qzNzp9LYQyPT","title":"Error logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs"},{"name":"iconClass","value":"bx bx-comment-error","type":"label"}],"children":[{"id":"_help_bnyigUA2UK7s","title":"Backend (server) logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Backend (server) logs"},{"name":"iconClass","value":"bx bx-server","type":"label"}]},{"id":"_help_9yEHzMyFirZR","title":"Frontend logs","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Error logs/Frontend logs"},{"name":"iconClass","value":"bx bx-window-alt","type":"label"}]}]},{"id":"_help_vdlYGAcpXAgc","title":"Synchronization fails with 504 Gateway Timeout","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Synchronization fails with 504"},{"name":"iconClass","value":"bx bx-error","type":"label"}]},{"id":"_help_s8alTXmpFR61","title":"Refreshing the application","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Troubleshooting/Refreshing the application"},{"name":"iconClass","value":"bx bx-refresh","type":"label"}]}]},{"id":"_help_pKK96zzmvBGf","title":"Theme development","type":"book","attributes":[{"name":"iconClass","value":"bx bx-palette","type":"label"}],"children":[{"id":"_help_7NfNr5pZpVKV","title":"Creating a custom theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Creating a custom theme"},{"name":"iconClass","value":"bx bxs-color","type":"label"}]},{"id":"_help_WFGzWeUK6arS","title":"Customize the Next theme","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Customize the Next theme"},{"name":"iconClass","value":"bx bx-news","type":"label"}]},{"id":"_help_WN5z4M8ASACJ","title":"Reference","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Reference"},{"name":"iconClass","value":"bx bx-book-open","type":"label"}]},{"id":"_help_AlhDUqhENtH7","title":"Custom app-wide CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Theme development/Custom app-wide CSS"},{"name":"iconClass","value":"bx bxs-file-css","type":"label"}]}]},{"id":"_help_tC7s2alapj8V","title":"Advanced Usage","type":"book","attributes":[{"name":"iconClass","value":"bx bx-rocket","type":"label"}],"children":[{"id":"_help_zEY4DaJG4YT5","title":"Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes"},{"name":"iconClass","value":"bx bx-list-check","type":"label"}],"children":[{"id":"_help_HI6GBBIduIgv","title":"Labels","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Labels"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_Cq5X6iKQop6R","title":"Relations","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Relations"},{"name":"iconClass","value":"bx bx-transfer","type":"label"}]},{"id":"_help_bwZpz2ajCEwO","title":"Attribute Inheritance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Attribute Inheritance"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_OFXdgB2nNk1F","title":"Promoted Attributes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Attributes/Promoted Attributes"},{"name":"iconClass","value":"bx bx-table","type":"label"}]}]},{"id":"_help_KC1HB96bqqHX","title":"Templates","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Templates"},{"name":"iconClass","value":"bx bx-copy","type":"label"}]},{"id":"_help_BCkXAVs63Ttv","title":"Note Map (Link map, Tree map)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note Map (Link map, Tree map)"},{"name":"iconClass","value":"bx bxs-network-chart","type":"label"}]},{"id":"_help_R9pX4DGra2Vt","title":"Sharing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing"},{"name":"iconClass","value":"bx bx-share-alt","type":"label"}],"children":[{"id":"_help_Qjt68inQ2bRj","title":"Serving directly the content of a note","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Serving directly the content o"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_ycBFjKrrwE9p","title":"Exporting HTML for web publishing","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Exporting HTML for web publish"},{"name":"iconClass","value":"bx bxs-file-html","type":"label"}]},{"id":"_help_sLIJ6f1dkJYW","title":"Reverse proxy configuration","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration"},{"name":"iconClass","value":"bx bx-world","type":"label"}]}]},{"id":"_help_5668rwcirq1t","title":"Advanced Showcases","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases"},{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_l0tKav7yLHGF","title":"Day Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Day Notes"},{"name":"iconClass","value":"bx bx-calendar","type":"label"}]},{"id":"_help_R7abl2fc6Mxi","title":"Weight Tracker","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Weight Tracker"},{"name":"iconClass","value":"bx bx-line-chart","type":"label"}]},{"id":"_help_xYjQUYhpbUEW","title":"Task Manager","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Advanced Showcases/Task Manager"},{"name":"iconClass","value":"bx bx-calendar-check","type":"label"}]}]},{"id":"_help_J5Ex1ZrMbyJ6","title":"Custom Request Handler","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Request Handler"},{"name":"iconClass","value":"bx bx-globe","type":"label"}]},{"id":"_help_d3fAXQ2diepH","title":"Custom Resource Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Custom Resource Providers"},{"name":"iconClass","value":"bx bxs-file-plus","type":"label"}]},{"id":"_help_pgxEVkzLl1OP","title":"ETAPI (REST API)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/ETAPI (REST API)"},{"name":"iconClass","value":"bx bx-extension","type":"label"}],"children":[{"id":"_help_9qPsTWBorUhQ","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/etapi/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_47ZrP6FNuoG8","title":"Default Note Title","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Default Note Title"},{"name":"iconClass","value":"bx bx-edit-alt","type":"label"}]},{"id":"_help_wX4HbRucYSDD","title":"Database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database"},{"name":"iconClass","value":"bx bx-data","type":"label"}],"children":[{"id":"_help_oyIAJ9PvvwHX","title":"Manually altering the database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database"},{"name":"iconClass","value":"bx bxs-edit","type":"label"}],"children":[{"id":"_help_YKWqdJhzi2VY","title":"SQL Console","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Manually altering the database/SQL Console"},{"name":"iconClass","value":"bx bx-data","type":"label"}]}]},{"id":"_help_6tZeKvSHEUiB","title":"Demo Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Database/Demo Notes"},{"name":"iconClass","value":"bx bx-package","type":"label"}]}]},{"id":"_help_Gzjqa934BdH4","title":"Configuration (config.ini or environment variables)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or e"},{"name":"iconClass","value":"bx bx-cog","type":"label"}],"children":[{"id":"_help_c5xB8m4g2IY6","title":"Trilium instance","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Trilium instance"},{"name":"iconClass","value":"bx bx-windows","type":"label"}]},{"id":"_help_LWtBjFej3wX3","title":"Cross-Origin Resource Sharing (CORS)","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Configuration (config.ini or environment variables)/Cross-Origin Resource Sharing "},{"name":"iconClass","value":"bx bx-lock","type":"label"}]}]},{"id":"_help_ivYnonVFBxbQ","title":"Bulk Actions","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Bulk Actions"},{"name":"iconClass","value":"bx bx-list-plus","type":"label"}]},{"id":"_help_4FahAwuGTAwC","title":"Note source","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note source"},{"name":"iconClass","value":"bx bx-code","type":"label"}]},{"id":"_help_1YeN2MzFUluU","title":"Technologies used","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used"},{"name":"iconClass","value":"bx bx-pyramid","type":"label"}],"children":[{"id":"_help_MI26XDLSAlCD","title":"CKEditor","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/CKEditor"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_N4IDkixaDG9C","title":"MindElixir","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/MindElixir"},{"name":"iconClass","value":"bx bx-sitemap","type":"label"}]},{"id":"_help_H0mM1lTxF9JI","title":"Excalidraw","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Excalidraw"},{"name":"iconClass","value":"bx bx-pen","type":"label"}]},{"id":"_help_MQHyy2dIFgxS","title":"Leaflet","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Technologies used/Leaflet"},{"name":"iconClass","value":"bx bx-map-alt","type":"label"}]}]},{"id":"_help_m1lbrzyKDaRB","title":"Note ID","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Note ID"},{"name":"iconClass","value":"bx bx-hash","type":"label"}]},{"id":"_help_0vTSyvhPTAOz","title":"Internal API","type":"book","attributes":[{"name":"iconClass","value":"bx bxs-component","type":"label"}],"children":[{"id":"_help_z8O2VG4ZZJD7","title":"API Reference","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/rest-api/internal/"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_2mUhVmZK8RF3","title":"Hidden Notes","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Hidden Notes"},{"name":"iconClass","value":"bx bx-hide","type":"label"}]},{"id":"_help_uYF7pmepw27K","title":"Metrics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Metrics"},{"name":"iconClass","value":"bx bxs-data","type":"label"}],"children":[{"id":"_help_bOP3TB56fL1V","title":"grafana-dashboard.json","type":"doc","attributes":[{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_64ZTlUPgEPtW","title":"Safe mode","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Safe mode"},{"name":"iconClass","value":"bx bxs-virus-block","type":"label"}]},{"id":"_help_HAIOFBoYIIdO","title":"Nightly release","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Nightly release"},{"name":"iconClass","value":"bx bx-moon","type":"label"}]},{"id":"_help_ZmT9ln8XJX2o","title":"Read-only database","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Advanced Usage/Read-only database"},{"name":"iconClass","value":"bx bx-book-reader","type":"label"}]}]},{"id":"_help_GBBMSlVSOIGP","title":"AI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI"},{"name":"iconClass","value":"bx bx-bot","type":"label"}],"children":[{"id":"_help_WkM7gsEUyCXs","title":"Providers","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers"},{"name":"iconClass","value":"bx bx-select-multiple","type":"label"}],"children":[{"id":"_help_7EdTxPADv95W","title":"Ollama","type":"book","attributes":[{"name":"iconClass","value":"bx bx-message-dots","type":"label"}],"children":[{"id":"_help_vvUCN7FDkq7G","title":"Installing Ollama","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Ollama/Installing Ollama"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_ZavFigBX9AwP","title":"OpenAI","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/OpenAI"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]},{"id":"_help_e0lkirXEiSNc","title":"Anthropic","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/AI/Providers/Anthropic"},{"name":"iconClass","value":"bx bx-message-dots","type":"label"}]}]}]},{"id":"_help_CdNpE2pqjmI6","title":"Scripting","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting"},{"name":"iconClass","value":"bx bxs-file-js","type":"label"}],"children":[{"id":"_help_yIhgI5H7A2Sm","title":"Frontend Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics"},{"name":"iconClass","value":"bx bx-window","type":"label"}],"children":[{"id":"_help_MgibgPcfeuGz","title":"Custom Widgets","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets"},{"name":"iconClass","value":"bx bxs-widget","type":"label"}],"children":[{"id":"_help_YNxAqkI5Kg1M","title":"Word count widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Word count widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_SynTBQiBsdYJ","title":"Widget Basics","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Widget Basics"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_M8IppdwVHSjG","title":"Right pane widget","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/Right pane widget"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_VqGQnnPGnqAU","title":"CSS","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Custom Widgets/CSS"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]},{"id":"_help_es8OU2GuguFU","title":"Examples","type":"book","attributes":[{"name":"iconClass","value":"bx bx-code-alt","type":"label"}],"children":[{"id":"_help_TjLYAo3JMO8X","title":"\"New Task\" launcher button","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/New Task launcher button"},{"name":"iconClass","value":"bx bx-task","type":"label"}]},{"id":"_help_7kZPMD0uFwkH","title":"Downloading responses from Google Forms","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Downloading responses from Goo"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_DL92EjAaXT26","title":"Using promoted attributes to configure scripts","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Frontend Basics/Examples/Using promoted attributes to c"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}]},{"id":"_help_SPirpZypehBG","title":"Backend scripts","type":"book","attributes":[{"name":"iconClass","value":"bx bx-server","type":"label"}],"children":[{"id":"_help_fZ2IGYFXjkEy","title":"Server-side imports","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Server-side imports"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_GPERMystNGTB","title":"Events","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Backend scripts/Events"},{"name":"iconClass","value":"bx bx-rss","type":"label"}]}]},{"id":"_help_GLks18SNjxmC","title":"Script API","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Script API"},{"name":"iconClass","value":"bx bx-code-curly","type":"label"}],"children":[{"id":"_help_Q2z6av6JZVWm","title":"Frontend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend"},{"name":"iconClass","value":"bx bx-folder","type":"label"}],"enforceAttributes":true,"children":[{"id":"_help_habiZ3HU8Kw8","title":"FNote","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/frontend/interfaces/FNote.html"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_MEtfsqa5VwNi","title":"Backend API","type":"webView","attributes":[{"type":"label","name":"webViewSrc","value":"https://docs.triliumnotes.org/script-api/backend"},{"name":"iconClass","value":"bx bx-file","type":"label"}],"enforceAttributes":true}]},{"id":"_help_vElnKeDNPSVl","title":"Logging","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Scripting/Logging"},{"name":"iconClass","value":"bx bx-terminal","type":"label"}]}]},{"id":"_help_Fm0j45KqyHpU","title":"Miscellaneous","type":"book","attributes":[{"name":"iconClass","value":"bx bx-info-circle","type":"label"}],"children":[{"id":"_help_WFbFXrgnDyyU","title":"Privacy Policy","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Privacy Policy"},{"name":"iconClass","value":"bx bx-file","type":"label"}]},{"id":"_help_NcsmUYZRWEW4","title":"Patterns of personal knowledge","type":"doc","attributes":[{"type":"label","name":"docName","value":"User Guide/User Guide/Miscellaneous/Patterns of personal knowledge"},{"name":"iconClass","value":"bx bx-file","type":"label"}]}]}] \ No newline at end of file diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Read-only database.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Read-only database.html new file mode 100644 index 000000000..e170c6fe9 --- /dev/null +++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Read-only database.html @@ -0,0 +1,42 @@ + +

    The read-only database is an alternative to Sharing notes. + Although the share functionality works pretty well to publish pages to + the Internet in a wiki, blog-like format it does not offer the full functionality + behind Trilium (such as the advanced Search or + the interactivity behind Collections or + the various Note Types).

    +

    When the database is in read-only mode, the Trilium application can be + used as normal, but editing is disabled and changes are made in-memory + only.

    +

    What it does

    +
      +
    • All notes are read-only, without the possibility of editing them.
    • +
    • Features that would normally alter the database such as the list of recent + notes are disabled.
    • +
    +

    Limitations

    +
      +
    • Some features might “slip through” and still end up creating a note, for + example. +
        +
      • However, the database is still read-only, so all modifications will be + reset if the server is restarted.
      • +
      • Whenever this occurs, ERROR: read-only DB ignored will be shown + in the logs.
      • +
      +
    • +
    +

    Setting a database as read-only

    +

    First, make sure the database is initialized (e.g. the first set up is + complete). Then modify the config.ini by + looking for the [General] section and adding a new readOnly field:

    [General]
    +readOnly=true
    +

    If your server is already running, restart it to apply the changes.

    +

    Similarly, to disable read-only remove the line or set it to false.

    \ No newline at end of file diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json index 98c811ece..c046fac03 100644 --- a/docs/User Guide/!!!meta.json +++ b/docs/User Guide/!!!meta.json @@ -14150,6 +14150,82 @@ "format": "markdown", "dataFileName": "Nightly release.md", "attachments": [] + }, + { + "isClone": false, + "noteId": "ZmT9ln8XJX2o", + "notePath": [ + "pOsGYCXsbNQG", + "tC7s2alapj8V", + "ZmT9ln8XJX2o" + ], + "title": "Read-only database", + "notePosition": 270, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "attributes": [ + { + "type": "label", + "name": "iconClass", + "value": "bx bx-book-reader", + "isInheritable": false, + "position": 30 + }, + { + "type": "label", + "name": "shareAlias", + "value": "read-only-db", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "wy8So3yZZlH9", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "R9pX4DGra2Vt", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Gzjqa934BdH4", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "eIg8jdvaoNNd", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GTwFsgaA0lCt", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "KSZ04uQ2D1St", + "isInheritable": false, + "position": 100 + } + ], + "format": "markdown", + "dataFileName": "Read-only database.md", + "attachments": [] } ] }, diff --git a/docs/User Guide/User Guide/Advanced Usage/Read-only database.md b/docs/User Guide/User Guide/Advanced Usage/Read-only database.md new file mode 100644 index 000000000..cacdc9675 --- /dev/null +++ b/docs/User Guide/User Guide/Advanced Usage/Read-only database.md @@ -0,0 +1,32 @@ +# Read-only database +> [!WARNING] +> This functionality is still in preview, expect possible issues or even the feature disappearing completely. +> Feel free to [report](../Troubleshooting/Reporting%20issues.md) any issues you might have. + +The read-only database is an alternative to Sharing notes. Although the share functionality works pretty well to publish pages to the Internet in a wiki, blog-like format it does not offer the full functionality behind Trilium (such as the advanced Search or the interactivity behind Collections or the various Note Types). + +When the database is in read-only mode, the Trilium application can be used as normal, but editing is disabled and changes are made in-memory only. + +## What it does + +* All notes are read-only, without the possibility of editing them. +* Features that would normally alter the database such as the list of recent notes are disabled. + +## Limitations + +* Some features might “slip through” and still end up creating a note, for example. + * However, the database is still read-only, so all modifications will be reset if the server is restarted. + * Whenever this occurs, `ERROR: read-only DB ignored` will be shown in the logs. + +## Setting a database as read-only + +First, make sure the database is initialized (e.g. the first set up is complete). Then modify the [config.ini](Configuration%20\(config.ini%20or%20e.md) by looking for the `[General]` section and adding a new `readOnly` field: + +``` +[General] +readOnly=true +``` + +If your server is already running, restart it to apply the changes. + +Similarly, to disable read-only remove the line or set it to `false`. \ No newline at end of file