Compare commits

...

55 Commits

Author SHA1 Message Date
Elian Doran
27d9ae885f Merge branch 'main' of github.com:TriliumNext/Trilium 2025-11-01 19:36:11 +02:00
Elian Doran
35efd2a680 test(server): broken test due to CLS 2025-11-01 16:48:49 +02:00
Elian Doran
19c6ae6fe5 Keyboard shortcut for today note button (#7549) 2025-11-01 16:17:24 +02:00
SngAbc
bf0761a303 Fix: activate the nearest path when opening a cloned note (#7552) 2025-11-01 16:06:26 +02:00
Weblate (bot)
8391fd7534 Translations update from Hosted Weblate (#7566)
* Update translation files

Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/

* Translated using Weblate (Portuguese)

Currently translated at 9.2% (14 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pt/

---------

Co-authored-by: Francisco Machado <kikomachado089@gmail.com>
2025-11-01 16:04:10 +02:00
SngAbc
6d4b87888a fix(electron): allow extra window to reload (#7567) 2025-11-01 16:02:17 +02:00
Weblate (bot)
3f0b0f9b62 Translations update from Hosted Weblate (#7565) 2025-11-01 14:09:26 +02:00
Elian Doran
859d9dcd04 docs(user): document system requirements 2025-10-31 11:52:40 +02:00
Elian Doran
76dd9baea8 docs(user): document adjusting borders 2025-10-31 11:21:17 +02:00
Elian Doran
82ff5f6660 docs(user): sync 2025-10-31 11:07:22 +02:00
Elian Doran
b52d30c55a chore(dialog/export): strange order with OPML 2025-10-31 11:05:40 +02:00
Elian Doran
99fd088ff5 chore(share): use same sandbox features for iframe 2025-10-31 10:12:56 +02:00
Elian Doran
945f29c759 feat(share): render webviews using iframe 2025-10-31 10:12:15 +02:00
Elian Doran
98f42887d8 Translations update from Hosted Weblate (#7562) 2025-10-31 09:09:29 +02:00
Eduard Frigola
a1b589148b Translated using Weblate (Catalan)
Currently translated at 17.8% (69 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/ca/
2025-10-31 08:04:01 +01:00
Elian Doran
66bb639a15 docs(user): port patterns of personal knowledge 2025-10-30 22:50:14 +02:00
Elian Doran
1784b50990 docs(user): port privacy policy 2025-10-30 22:37:59 +02:00
Elian Doran
5e9c271bfd docs(release): port v0.48 changelog 2025-10-30 22:36:41 +02:00
Elian Doran
70837fdc69 Translations update from Hosted Weblate (#7559) 2025-10-30 16:07:11 +02:00
Hosted Weblate
67d80512f6 Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2025-10-30 13:46:35 +00:00
Elian Doran
dd8a1e8aca docs(user): document all share theme attributes 2025-10-30 15:46:13 +02:00
Elian Doran
99f43e2280 docs(user): improve fine-grained directory path documentation 2025-10-30 12:02:32 +02:00
Elian Doran
bcffa77c90 docs(user): index page for import/export 2025-10-30 11:54:44 +02:00
Elian Doran
8ab2069411 docs(user): fix empty section in kanban board 2025-10-30 11:43:48 +02:00
Elian Doran
21fc61d132 docs(user): restructure LLM section 2025-10-30 11:42:46 +02:00
Elian Doran
552df50fe4 docs(user): add icons to most notes 2025-10-30 11:40:07 +02:00
Elian Doran
c058b663ee Translations update from Hosted Weblate (#7556) 2025-10-30 09:05:27 +02:00
Francis C
6c19370235 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/
2025-10-30 07:50:44 +01:00
Francis C
d332bb57ba Translated using Weblate (Chinese (Simplified 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_Hans/
2025-10-30 07:50:44 +01:00
Antonio Sanchez Castellón
3ef38e7f4e Translated using Weblate (Spanish)
Currently translated at 100.0% (152 of 152 strings)

Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/es/
2025-10-30 07:50:43 +01:00
Francis C
1abc3b5534 Translated using Weblate (Japanese)
Currently translated at 100.0% (1621 of 1621 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/ja/
2025-10-30 07:50:42 +01:00
Francis C
ddcd27ddf6 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/
2025-10-30 07:50:41 +01:00
Francis C
ff385c8c88 Translated using Weblate (Chinese (Traditional Han script))
Currently translated at 100.0% (1621 of 1621 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hant/
2025-10-30 07:50:40 +01:00
Antonio Sanchez Castellón
a641e452ce Translated using Weblate (Spanish)
Currently translated at 100.0% (387 of 387 strings)

Translation: Trilium Notes/Server
Translate-URL: https://hosted.weblate.org/projects/trilium/server/es/
2025-10-30 07:50:39 +01:00
Francis C
5f4fa25da5 Translated using Weblate (Chinese (Simplified 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_Hans/
2025-10-30 07:50:38 +01:00
Antonio Sanchez Castellón
ea177e972e Translated using Weblate (Spanish)
Currently translated at 100.0% (1621 of 1621 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/es/
2025-10-30 07:50:38 +01:00
Manfred Manni
7e3013bfdc Translated using Weblate (German)
Currently translated at 100.0% (1621 of 1621 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/de/
2025-10-30 07:50:37 +01:00
Francis C
5115baeb21 Translated using Weblate (Chinese (Simplified Han script))
Currently translated at 100.0% (1621 of 1621 strings)

Translation: Trilium Notes/Client
Translate-URL: https://hosted.weblate.org/projects/trilium/client/zh_Hans/
2025-10-30 07:50:36 +01:00
Hosted Weblate
35a924a05a Update translation files
Updated by "Cleanup translation files" add-on in Weblate.

Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
2025-10-30 07:50:36 +01:00
Elian Doran
78f067965f fix(share): TOC indicator no longer working due to layout changes 2025-10-30 08:49:48 +02:00
Elian Doran
413b16b51c chore(collections): rename Board to Kanban Board 2025-10-30 08:42:00 +02:00
Elian Doran
59586c53b2 chore(website): rename Board to Kanban Board 2025-10-30 08:34:28 +02:00
Elian Doran
70ed1d7abb chore(website): fix URLs pointing to documentation 2025-10-30 08:33:54 +02:00
Elian Doran
67de6c614c docs(user): change alias for server documentation 2025-10-30 08:31:26 +02:00
Elian Doran
faf030ab3a docs(user): minor improvements to the collection main page 2025-10-30 08:18:13 +02:00
Elian Doran
6e20d4b5dd docs(user): rename Board to Kanban Board 2025-10-30 08:15:57 +02:00
Elian Doran
10e809af75 docs(user): rename and reorder collection pages 2025-10-30 08:14:22 +02:00
Elian Doran
f1478f8149 docs(user): change presentation method for collections 2025-10-30 08:13:34 +02:00
Elian Doran
9087adf254 docs(user): move collections one level up 2025-10-30 08:07:09 +02:00
Elian Doran
f944c6d8e2 docs(user): add slug + tips on how to identify pages without one easily 2025-10-30 08:03:09 +02:00
contributor
9c791df0ed open today note in current tab #7472
https://github.com/TriliumNext/Trilium/pull/7549#issuecomment-3458822614
2025-10-29 19:22:13 +02:00
contributor
e683dc1d66 add openTodayNote to CommandMappings #7472 2025-10-28 16:59:46 +02:00
contributor
14a3438a20 move shortcut definition to "Note navigation" section #7472 2025-10-28 16:59:41 +02:00
contributor
dd483fccbc use common translation for openTodayNote #7472 2025-10-28 16:59:36 +02:00
contributor
5620e7f4a7 feat: add command openTodayNote with empty keyboard shortcut #7472 2025-10-28 16:59:28 +02:00
250 changed files with 3941 additions and 1899 deletions

View File

@@ -270,6 +270,7 @@ export type CommandMappings = {
closeThisNoteSplit: CommandData; closeThisNoteSplit: CommandData;
moveThisNoteSplit: CommandData & { isMovingLeft: boolean }; moveThisNoteSplit: CommandData & { isMovingLeft: boolean };
jumpToNote: CommandData; jumpToNote: CommandData;
openTodayNote: CommandData;
commandPalette: CommandData; commandPalette: CommandData;
// Keyboard shortcuts // Keyboard shortcuts

View File

@@ -159,6 +159,16 @@ export default class Entrypoints extends Component {
this.openInWindowCommand({ notePath: "", hoistedNoteId: "root" }); this.openInWindowCommand({ notePath: "", hoistedNoteId: "root" });
} }
async openTodayNoteCommand() {
const todayNote = await dateNoteService.getTodayNote();
if (!todayNote) {
console.warn("Missing today note.");
return;
}
await appContext.tabManager.openInSameTab(todayNote.noteId);
}
async runActiveNoteCommand() { async runActiveNoteCommand() {
const noteContext = appContext.tabManager.getActiveContext(); const noteContext = appContext.tabManager.getActiveContext();
if (!noteContext) { if (!noteContext) {

View File

@@ -417,7 +417,7 @@ export default class FNote {
return notePaths; return notePaths;
} }
getSortedNotePathRecords(hoistedNoteId = "root"): NotePathRecord[] { getSortedNotePathRecords(hoistedNoteId = "root", activeNotePath: string | null = null): NotePathRecord[] {
const isHoistedRoot = hoistedNoteId === "root"; const isHoistedRoot = hoistedNoteId === "root";
const notePaths: NotePathRecord[] = this.getAllNotePaths().map((path) => ({ const notePaths: NotePathRecord[] = this.getAllNotePaths().map((path) => ({
@@ -428,7 +428,23 @@ export default class FNote {
isHidden: path.includes("_hidden") isHidden: path.includes("_hidden")
})); }));
// Calculate the length of the prefix match between two arrays
const prefixMatchLength = (path: string[], target: string[]) => {
const diffIndex = path.findIndex((seg, i) => seg !== target[i]);
return diffIndex === -1 ? Math.min(path.length, target.length) : diffIndex;
};
notePaths.sort((a, b) => { notePaths.sort((a, b) => {
if (activeNotePath) {
const activeSegments = activeNotePath.split('/');
const aOverlap = prefixMatchLength(a.notePath, activeSegments);
const bOverlap = prefixMatchLength(b.notePath, activeSegments);
// Paths with more matching prefix segments are prioritized
// when the match count is equal, other criteria are used for sorting
if (bOverlap !== aOverlap) {
return bOverlap - aOverlap;
}
}
if (a.isInHoistedSubTree !== b.isInHoistedSubTree) { if (a.isInHoistedSubTree !== b.isInHoistedSubTree) {
return a.isInHoistedSubTree ? -1 : 1; return a.isInHoistedSubTree ? -1 : 1;
} else if (a.isArchived !== b.isArchived) { } else if (a.isArchived !== b.isArchived) {
@@ -449,10 +465,11 @@ export default class FNote {
* Returns the note path considered to be the "best" * Returns the note path considered to be the "best"
* *
* @param {string} [hoistedNoteId='root'] * @param {string} [hoistedNoteId='root']
* @param {string|null} [activeNotePath=null]
* @return {string[]} array of noteIds constituting the particular note path * @return {string[]} array of noteIds constituting the particular note path
*/ */
getBestNotePath(hoistedNoteId = "root") { getBestNotePath(hoistedNoteId = "root", activeNotePath: string | null = null) {
return this.getSortedNotePathRecords(hoistedNoteId)[0]?.notePath; return this.getSortedNotePathRecords(hoistedNoteId, activeNotePath)[0]?.notePath;
} }
/** /**

View File

@@ -26,21 +26,12 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
} }
const path = notePath.split("/").reverse(); const path = notePath.split("/").reverse();
if (!path.includes("root")) {
path.push("root");
}
const effectivePathSegments: string[] = []; const effectivePathSegments: string[] = [];
let childNoteId: string | null = null; let childNoteId: string | null = null;
let i = 0; let i = 0;
while (true) { for (let i = 0; i < path.length; i++) {
if (i >= path.length) { const parentNoteId = path[i];
break;
}
const parentNoteId = path[i++];
if (childNoteId !== null) { if (childNoteId !== null) {
const child = await froca.getNote(childNoteId, !logErrors); const child = await froca.getNote(childNoteId, !logErrors);
@@ -65,7 +56,7 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
return null; return null;
} }
if (!parents.some((p) => p.noteId === parentNoteId)) { if (!parents.some(p => p.noteId === parentNoteId) || (i === path.length - 1 && parentNoteId !== 'root')) {
if (logErrors) { if (logErrors) {
const parent = froca.getNoteFromCache(parentNoteId); const parent = froca.getNoteFromCache(parentNoteId);
@@ -77,7 +68,8 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
); );
} }
const bestNotePath = child.getBestNotePath(hoistedNoteId); const activeNotePath = appContext.tabManager.getActiveContextNotePath();
const bestNotePath = child.getBestNotePath(hoistedNoteId, activeNotePath);
if (bestNotePath) { if (bestNotePath) {
const pathToRoot = bestNotePath.reverse().slice(1); const pathToRoot = bestNotePath.reverse().slice(1);
@@ -108,7 +100,9 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
if (!note) { if (!note) {
throw new Error(`Unable to find note: ${notePath}.`); throw new Error(`Unable to find note: ${notePath}.`);
} }
const bestNotePath = note.getBestNotePath(hoistedNoteId);
const activeNotePath = appContext.tabManager.getActiveContextNotePath();
const bestNotePath = note.getBestNotePath(hoistedNoteId, activeNotePath);
if (!bestNotePath) { if (!bestNotePath) {
throw new Error(`Did not find any path segments for '${note.toString()}', hoisted note '${hoistedNoteId}'`); throw new Error(`Did not find any path segments for '${note.toString()}', hoisted note '${hoistedNoteId}'`);

View File

@@ -11,7 +11,11 @@ export function reloadFrontendApp(reason?: string) {
logInfo(`Frontend app reload: ${reason}`); logInfo(`Frontend app reload: ${reason}`);
} }
window.location.reload(); if (isElectron()) {
dynamicRequire("@electron/remote").BrowserWindow.getFocusedWindow()?.reload();
} else {
window.location.reload();
}
} }
export function restartDesktopApp() { export function restartDesktopApp() {

View File

@@ -51,7 +51,7 @@
"bulk_actions_executed": "批量操作已成功执行。", "bulk_actions_executed": "批量操作已成功执行。",
"none_yet": "暂无操作 ... 通过点击上方的可用操作添加一个操作。", "none_yet": "暂无操作 ... 通过点击上方的可用操作添加一个操作。",
"labels": "标签", "labels": "标签",
"relations": "关联关系", "relations": "关系",
"notes": "笔记", "notes": "笔记",
"other": "其它" "other": "其它"
}, },
@@ -104,7 +104,8 @@
"export_status": "导出状态", "export_status": "导出状态",
"export_in_progress": "导出进行中:{{progressCount}}", "export_in_progress": "导出进行中:{{progressCount}}",
"export_finished_successfully": "导出成功完成。", "export_finished_successfully": "导出成功完成。",
"format_pdf": "PDF - 用于打印或共享目的。" "format_pdf": "PDF - 用于打印或共享目的。",
"share-format": "HTML 网页发布——采用与共享笔记相同的主题,但可发布为静态网站。"
}, },
"help": { "help": {
"noteNavigation": "笔记导航", "noteNavigation": "笔记导航",
@@ -184,7 +185,8 @@
}, },
"import-status": "导入状态", "import-status": "导入状态",
"in-progress": "导入进行中:{{progress}}", "in-progress": "导入进行中:{{progress}}",
"successful": "导入成功完成。" "successful": "导入成功完成。",
"importZipRecommendation": "导入 ZIP 文件时,笔记层级将反映压缩文件内的子目录结构。"
}, },
"include_note": { "include_note": {
"dialog_title": "包含笔记", "dialog_title": "包含笔记",
@@ -1557,7 +1559,9 @@
"window-on-top": "保持此窗口置顶" "window-on-top": "保持此窗口置顶"
}, },
"note_detail": { "note_detail": {
"could_not_find_typewidget": "找不到类型为 '{{type}}' 的 typeWidget" "could_not_find_typewidget": "找不到类型为 '{{type}}' 的 typeWidget",
"printing": "正在打印…",
"printing_pdf": "正在导出为PDF…"
}, },
"note_title": { "note_title": {
"placeholder": "请输入笔记标题..." "placeholder": "请输入笔记标题..."

View File

@@ -104,7 +104,8 @@
"export_status": "Exportstatus", "export_status": "Exportstatus",
"export_in_progress": "Export läuft: {{progressCount}}", "export_in_progress": "Export läuft: {{progressCount}}",
"export_finished_successfully": "Der Export wurde erfolgreich abgeschlossen.", "export_finished_successfully": "Der Export wurde erfolgreich abgeschlossen.",
"format_pdf": "PDF - für Ausdrucke oder Teilen." "format_pdf": "PDF - für Ausdrucke oder Teilen.",
"share-format": "HTML für die Web-Veröffentlichung verwendet dasselbe Theme wie bei freigegebenen Notizen, kann jedoch als statische Website veröffentlicht werden."
}, },
"help": { "help": {
"noteNavigation": "Notiz Navigation", "noteNavigation": "Notiz Navigation",

View File

@@ -104,7 +104,8 @@
"export_status": "Estado de exportación", "export_status": "Estado de exportación",
"export_in_progress": "Exportación en curso: {{progressCount}}", "export_in_progress": "Exportación en curso: {{progressCount}}",
"export_finished_successfully": "La exportación finalizó exitosamente.", "export_finished_successfully": "La exportación finalizó exitosamente.",
"format_pdf": "PDF - para propósitos de impresión o compartición." "format_pdf": "PDF - para propósitos de impresión o compartición.",
"share-format": "HTML para publicación web: utiliza el mismo tema que se utiliza en las notas compartidas, pero se puede publicar como un sitio web estático."
}, },
"help": { "help": {
"noteNavigation": "Navegación de notas", "noteNavigation": "Navegación de notas",
@@ -184,7 +185,8 @@
}, },
"import-status": "Estado de importación", "import-status": "Estado de importación",
"in-progress": "Importación en progreso: {{progress}}", "in-progress": "Importación en progreso: {{progress}}",
"successful": "Importación finalizada exitosamente." "successful": "Importación finalizada exitosamente.",
"importZipRecommendation": "Al importar un archivo ZIP, la jerarquía de notas reflejará la estructura de subdirectorios dentro del archivo comprimido."
}, },
"include_note": { "include_note": {
"dialog_title": "Incluir nota", "dialog_title": "Incluir nota",
@@ -1714,7 +1716,9 @@
"window-on-top": "Mantener esta ventana en la parte superior" "window-on-top": "Mantener esta ventana en la parte superior"
}, },
"note_detail": { "note_detail": {
"could_not_find_typewidget": "No se pudo encontrar typeWidget para el tipo '{{type}}'" "could_not_find_typewidget": "No se pudo encontrar typeWidget para el tipo '{{type}}'",
"printing": "Impresión en curso...",
"printing_pdf": "Exportando a PDF en curso.."
}, },
"note_title": { "note_title": {
"placeholder": "escriba el título de la nota aquí..." "placeholder": "escriba el título de la nota aquí..."

View File

@@ -254,7 +254,8 @@
"export_status": "エクスポート状況", "export_status": "エクスポート状況",
"export_in_progress": "エクスポート処理中: {{progressCount}}", "export_in_progress": "エクスポート処理中: {{progressCount}}",
"export_finished_successfully": "エクスポートが正常に完了しました。", "export_finished_successfully": "エクスポートが正常に完了しました。",
"format_pdf": "PDF - 印刷または共有目的に。" "format_pdf": "PDF - 印刷または共有目的に。",
"share-format": "Web 公開用の HTML - 共有ノートで使用されるのと同じテーマを使用しますが、静的 Web サイトとして公開できます。"
}, },
"help": { "help": {
"title": "チートシート", "title": "チートシート",

View File

@@ -104,7 +104,8 @@
"export_in_progress": "正在匯出:{{progressCount}}", "export_in_progress": "正在匯出:{{progressCount}}",
"export_finished_successfully": "成功匯出。", "export_finished_successfully": "成功匯出。",
"format_html": "HTML - 推薦,因為它保留了所有格式", "format_html": "HTML - 推薦,因為它保留了所有格式",
"format_pdf": "PDF - 用於列印或與他人分享。" "format_pdf": "PDF - 用於列印或與他人分享。",
"share-format": "HTML 網頁發佈——使用與共享筆記相同的佈景主題,但可發佈為靜態網站。"
}, },
"help": { "help": {
"noteNavigation": "筆記導航", "noteNavigation": "筆記導航",

View File

@@ -79,8 +79,8 @@ export default function ExportDialog() {
values={[ values={[
{ value: "html", label: t("export.format_html_zip") }, { value: "html", label: t("export.format_html_zip") },
{ value: "markdown", label: t("export.format_markdown") }, { value: "markdown", label: t("export.format_markdown") },
{ value: "opml", label: t("export.format_opml") }, { value: "share", label: t("export.share-format") },
{ value: "share", label: t("export.share-format") } { value: "opml", label: t("export.format_opml") }
]} ]}
/> />

File diff suppressed because one or more lines are too long

View File

Before

Width:  |  Height:  |  Size: 168 KiB

After

Width:  |  Height:  |  Size: 168 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 43 KiB

View File

Before

Width:  |  Height:  |  Size: 172 KiB

After

Width:  |  Height:  |  Size: 172 KiB

View File

Before

Width:  |  Height:  |  Size: 167 KiB

After

Width:  |  Height:  |  Size: 167 KiB

View File

Before

Width:  |  Height:  |  Size: 237 KiB

After

Width:  |  Height:  |  Size: 237 KiB

View File

Before

Width:  |  Height:  |  Size: 202 KiB

After

Width:  |  Height:  |  Size: 202 KiB

View File

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 191 KiB

After

Width:  |  Height:  |  Size: 191 KiB

View File

@@ -1,5 +1,5 @@
<figure class="image image_resized" style="width:63.68%;"> <figure class="image image_resized" style="width:63.68%;">
<img style="aspect-ratio:1363/1364;" src="Introduction_image.png" <img style="aspect-ratio:1363/1364;" src="AI_image.png"
width="1363" height="1364"> width="1363" height="1364">
<figcaption>An example chat with an LLM</figcaption> <figcaption>An example chat with an LLM</figcaption>
</figure> </figure>
@@ -11,12 +11,12 @@
<p>The quickest way to get started is to navigate to the “AI/LLM” settings:</p> <p>The quickest way to get started is to navigate to the “AI/LLM” settings:</p>
<figure <figure
class="image image_resized" style="width:74.04%;"> class="image image_resized" style="width:74.04%;">
<img style="aspect-ratio:1916/1906;" src="5_Introduction_image.png" <img style="aspect-ratio:1916/1906;" src="5_AI_image.png"
width="1916" height="1906"> width="1916" height="1906">
</figure> </figure>
<p>Enable the feature:</p> <p>Enable the feature:</p>
<figure class="image image_resized" style="width:82.82%;"> <figure class="image image_resized" style="width:82.82%;">
<img style="aspect-ratio:1911/997;" src="1_Introduction_image.png" <img style="aspect-ratio:1911/997;" src="1_AI_image.png"
width="1911" height="997"> width="1911" height="997">
</figure> </figure>
@@ -43,7 +43,7 @@ class="image image_resized" style="width:74.04%;">
We will then hit the “refresh” button to have it fetch our models:</p> We will then hit the “refresh” button to have it fetch our models:</p>
<figure <figure
class="image image_resized" style="width:82.28%;"> class="image image_resized" style="width:82.28%;">
<img style="aspect-ratio:1912/1075;" src="4_Introduction_image.png" <img style="aspect-ratio:1912/1075;" src="4_AI_image.png"
width="1912" height="1075"> width="1912" height="1075">
</figure> </figure>
<p>When selecting the dropdown for the “Embedding Model”, embedding models <p>When selecting the dropdown for the “Embedding Model”, embedding models
@@ -51,21 +51,21 @@ class="image image_resized" style="width:74.04%;">
a horizontal line, as seen below:</p> a horizontal line, as seen below:</p>
<figure class="image image_resized" <figure class="image image_resized"
style="width:61.73%;"> style="width:61.73%;">
<img style="aspect-ratio:1232/959;" src="8_Introduction_image.png" <img style="aspect-ratio:1232/959;" src="8_AI_image.png"
width="1232" height="959"> width="1232" height="959">
</figure> </figure>
<p>After selecting an embedding model, embeddings should automatically begin <p>After selecting an embedding model, embeddings should automatically begin
to be generated by checking the embedding statistics at the top of the to be generated by checking the embedding statistics at the top of the
“AI/LLM” settings panel:</p> “AI/LLM” settings panel:</p>
<figure class="image image_resized" style="width:67.06%;"> <figure class="image image_resized" style="width:67.06%;">
<img style="aspect-ratio:1333/499;" src="7_Introduction_image.png" <img style="aspect-ratio:1333/499;" src="7_AI_image.png"
width="1333" height="499"> width="1333" height="499">
</figure> </figure>
<p>If you don't see any embeddings being created, you will want to scroll <p>If you don't see any embeddings being created, you will want to scroll
to the bottom of the settings, and hit “Recreate All Embeddings”:</p> to the bottom of the settings, and hit “Recreate All Embeddings”:</p>
<figure <figure
class="image image_resized" style="width:65.69%;"> class="image image_resized" style="width:65.69%;">
<img style="aspect-ratio:1337/1490;" src="3_Introduction_image.png" <img style="aspect-ratio:1337/1490;" src="3_AI_image.png"
width="1337" height="1490"> width="1337" height="1490">
</figure> </figure>
<p>Creating the embeddings will take some time, and will be regenerated when <p>Creating the embeddings will take some time, and will be regenerated when
@@ -139,7 +139,7 @@ class="image image_resized" style="width:74.04%;">
<p>When Tools are executed within your Chat, you'll see output like the following:</p> <p>When Tools are executed within your Chat, you'll see output like the following:</p>
<figure <figure
class="image image_resized" style="width:66.88%;"> class="image image_resized" style="width:66.88%;">
<img style="aspect-ratio:1372/1591;" src="6_Introduction_image.png" <img style="aspect-ratio:1372/1591;" src="6_AI_image.png"
width="1372" height="1591"> width="1372" height="1591">
</figure> </figure>
<p>You don't need to tell the LLM to execute a certain tool, it should “smartly” <p>You don't need to tell the LLM to execute a certain tool, it should “smartly”
@@ -149,13 +149,13 @@ class="image image_resized" style="width:74.04%;">
use the “Chat with Notes” button, where you can go ahead and start chatting!:</p> use the “Chat with Notes” button, where you can go ahead and start chatting!:</p>
<figure <figure
class="image image_resized" style="width:60.77%;"> class="image image_resized" style="width:60.77%;">
<img style="aspect-ratio:1378/539;" src="2_Introduction_image.png" <img style="aspect-ratio:1378/539;" src="2_AI_image.png"
width="1378" height="539"> width="1378" height="539">
</figure> </figure>
<p>If you don't see the “Chat with Notes” button on your side launchbar, <p>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 you might need to move it from the “Available Launchers” section to the
“Visible Launchers” section:</p> “Visible Launchers” section:</p>
<figure class="image image_resized" style="width:69.81%;"> <figure class="image image_resized" style="width:69.81%;">
<img style="aspect-ratio:1765/1287;" src="9_Introduction_image.png" <img style="aspect-ratio:1765/1287;" src="9_AI_image.png"
width="1765" height="1287"> width="1765" height="1287">
</figure> </figure>

View File

@@ -11,12 +11,12 @@
<p>To set your preferred chat model, you'll want to enter the provider's <p>To set your preferred chat model, you'll want to enter the provider's
name here:</p> name here:</p>
<figure class="image image_resized" style="width:88.38%;"> <figure class="image image_resized" style="width:88.38%;">
<img style="aspect-ratio:1884/1267;" src="AI Provider Information_im.png" <img style="aspect-ratio:1884/1267;" src="Providers_image.png"
width="1884" height="1267"> width="1884" height="1267">
</figure> </figure>
<p>And to set your preferred embedding provider:</p> <p>And to set your preferred embedding provider:</p>
<figure class="image image_resized" <figure class="image image_resized"
style="width:93.47%;"> style="width:93.47%;">
<img style="aspect-ratio:1907/1002;" src="1_AI Provider Information_im.png" <img style="aspect-ratio:1907/1002;" src="1_Providers_image.png"
width="1907" height="1002"> width="1907" height="1002">
</figure> </figure>

View File

Before

Width:  |  Height:  |  Size: 175 KiB

After

Width:  |  Height:  |  Size: 175 KiB

View File

@@ -6,7 +6,16 @@
<li>Note Map, which shows the hierarchical tree structure.</li> <li>Note Map, which shows the hierarchical tree structure.</li>
</ul> </ul>
<h2>Link Map</h2> <h2>Link Map</h2>
<p>Shows <a href="#root/_help_zEY4DaJG4YT5">relations</a> between notes:</p> <p>The Link map is a visualization of links and&nbsp;<a class="reference-link"
href="#root/_help_Cq5X6iKQop6R">Relations</a>&nbsp;incoming to and outgoing from
a particular note.</p>
<p>The map indicates the following types of relations:</p>
<ul>
<li><a class="reference-link" href="#root/_help_hrZ1D00cLbal">Internal (reference) links</a>&nbsp;between
notes.</li>
<li><a class="reference-link" href="#root/_help_Cq5X6iKQop6R">Relations</a>
</li>
</ul>
<p> <p>
<img src="1_Note Map (Link map, Tree m.png"> <img src="1_Note Map (Link map, Tree m.png">
</p> </p>

View File

@@ -149,7 +149,7 @@ class="image">
</td> </td>
</tr> </tr>
<tr> <tr>
<th><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map View</a> <th><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map</a>
</th> </th>
<td>Not supported.</td> <td>Not supported.</td>
<td>&nbsp;</td> <td>&nbsp;</td>
@@ -208,9 +208,19 @@ class="image">
This allows you to manage and navigate through all the notes you have made This allows you to manage and navigate through all the notes you have made
public.</p> public.</p>
<h2>Security considerations</h2> <h2>Security considerations</h2>
<p>Shared notes are published on the open internet and can be accessed by <ul>
anyone with the URL. The URL's randomness does not provide security, so <li>Shared notes are published on the open internet and can be accessed by
it is crucial not to share sensitive information through this feature.</p> anyone with the URL unless the notes are password-protected.</li>
<li>The URL's randomness does not provide security, so it is crucial not to
share sensitive information through this feature.</li>
<li>Trilium takes precautions to protect your publicly shared instance from
leaking information for non-shared notes, including opening a separate
read-only connection to the&nbsp;<a class="reference-link" href="#root/_help_wX4HbRucYSDD">Database</a>.
Depending on your threat model, it might make more sense to use&nbsp;
<a
class="reference-link" href="#root/_help_ycBFjKrrwE9p">Exporting HTML for web publishing</a>&nbsp;and use battle-tested web servers
such as Nginx or Apache to serve static content.</li>
</ul>
<h3>Password protection</h3> <h3>Password protection</h3>
<p>To protect shared notes with a username and password, you can use the <code>#shareCredentials</code> attribute. <p>To protect shared notes with a username and password, you can use the <code>#shareCredentials</code> attribute.
Add this label to the note with the format <code>#shareCredentials="username:password"</code>. Add this label to the note with the format <code>#shareCredentials="username:password"</code>.
@@ -280,6 +290,15 @@ for (const attr of parentNote.attributes) {
<li>Using slashes (<code>/</code>) within aliases to create subpaths is not <li>Using slashes (<code>/</code>) within aliases to create subpaths is not
supported.</li> supported.</li>
</ol> </ol>
<aside class="admonition tip">
<ul>
<li>To easily identify pages that don't have a share alias, run a&nbsp;
<a
class="reference-link" href="#root/_help_eIg8jdvaoNNd">Search</a>&nbsp;with <code>#!shareAlias</code>.</li>
<li>To be able to enter the share alias faster, consider using&nbsp;<a class="reference-link"
href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;(for example <code>#label:shareAlias(inheritable)="promoted,alias=Slug,single,text"</code>).</li>
</ul>
</aside>
<h3>Setting a custom favicon</h3> <h3>Setting a custom favicon</h3>
<p>To customize the favicon for your shared pages, create a relation <code>~shareFavicon</code> pointing <p>To customize the favicon for your shared pages, create a relation <code>~shareFavicon</code> pointing
to a file note containing the favicon (e.g., in <code>.ico</code> format).</p> to a file note containing the favicon (e.g., in <code>.ico</code> format).</p>
@@ -300,7 +319,11 @@ for (const attr of parentNote.attributes) {
When viewed, the list of shared roots will be displayed at the bottom of When viewed, the list of shared roots will be displayed at the bottom of
the note.</p> the note.</p>
<h2>Attribute reference</h2> <h2>Attribute reference</h2>
<table> <table class="ck-table-resized">
<colgroup>
<col style="width:18.38%;">
<col style="width:81.62%;">
</colgroup>
<thead> <thead>
<tr> <tr>
<th>Attribute</th> <th>Attribute</th>
@@ -309,40 +332,40 @@ for (const attr of parentNote.attributes) {
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td><code>shareHiddenFromTree</code> <td><code>#shareHiddenFromTree</code>
</td> </td>
<td>this note is hidden from left navigation tree, but still accessible with <td>this note is hidden from left navigation tree, but still accessible with
its URL</td> its URL</td>
</tr> </tr>
<tr> <tr>
<td><code>shareExternalLink</code> <td><code>#shareExternalLink</code>
</td> </td>
<td>note will act as a link to an external website in the share tree</td> <td>note will act as a link to an external website in the share tree</td>
</tr> </tr>
<tr> <tr>
<td><code>shareAlias</code> <td><code>#shareAlias</code>
</td> </td>
<td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code> <td>define an alias using which the note will be available under <code>https://your_trilium_host/share/[your_alias]</code>
</td> </td>
</tr> </tr>
<tr> <tr>
<td><code>shareOmitDefaultCss</code> <td><code>#shareOmitDefaultCss</code>
</td> </td>
<td>default share page CSS will be omitted. Use when you make extensive styling <td>default share page CSS will be omitted. Use when you make extensive styling
changes.</td> changes.</td>
</tr> </tr>
<tr> <tr>
<td><code>shareRoot</code> <td><code>#shareRoot</code>
</td> </td>
<td>marks note which is served on /share root.</td> <td>marks note which is served on /share root.</td>
</tr> </tr>
<tr> <tr>
<td><code>shareDescription</code> <td><code>#shareDescription</code>
</td> </td>
<td>define text to be added to the HTML meta tag for description</td> <td>define text to be added to the HTML meta tag for description</td>
</tr> </tr>
<tr> <tr>
<td><code>shareRaw</code> <td><code>#shareRaw</code>
</td> </td>
<td>Note will be served in its raw format, without HTML wrapper. See also&nbsp; <td>Note will be served in its raw format, without HTML wrapper. See also&nbsp;
<a <a
@@ -350,7 +373,7 @@ for (const attr of parentNote.attributes) {
without setting an attribute.</td> without setting an attribute.</td>
</tr> </tr>
<tr> <tr>
<td><code>shareDisallowRobotIndexing</code> <td><code>#shareDisallowRobotIndexing</code>
</td> </td>
<td> <td>
<p>Indicates to web crawlers that the page should not be indexed of this <p>Indicates to web crawlers that the page should not be indexed of this
@@ -362,19 +385,19 @@ for (const attr of parentNote.attributes) {
</td> </td>
</tr> </tr>
<tr> <tr>
<td><code>shareCredentials</code> <td><code>#shareCredentials</code>
</td> </td>
<td>require credentials to access this shared note. Value is expected to be <td>require credentials to access this shared note. Value is expected to be
in format <code>username:password</code>. Don't forget to make this inheritable in format <code>username:password</code>. Don't forget to make this inheritable
to apply to child-notes/images.</td> to apply to child-notes/images.</td>
</tr> </tr>
<tr> <tr>
<td><code>shareIndex</code> <td><code>#shareIndex</code>
</td> </td>
<td>Note with this label will list all roots of shared notes.</td> <td>Note with this label will list all roots of shared notes.</td>
</tr> </tr>
<tr> <tr>
<td><code>shareHtmlLocation</code> <td><code>#shareHtmlLocation</code>
</td> </td>
<td>defines where custom HTML injected via <code>~shareHtml</code> relation <td>defines where custom HTML injected via <code>~shareHtml</code> relation
should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where should be placed. Applied to the HTML snippet note itself. Format: <code>location:position</code> where
@@ -384,6 +407,76 @@ for (const attr of parentNote.attributes) {
</tbody> </tbody>
</table> </table>
<h3>Customizing logo</h3>
<p>It's possible to adjust the logo which is displayed on the top-left of
the left pane.</p>
<table>
<thead>
<tr>
<th>Attribute</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>~shareLogo</code>
</td>
<td>Relation set to an image to use as logo. The image must be part of the
share tree (it can be hidden if needed).</td>
</tr>
<tr>
<td><code>#shareLogoWidth</code>
</td>
<td>The width (in pixels, without unit) to set for the logo. Default is <code>53</code>.</td>
</tr>
<tr>
<td><code>#shareLogoHeight</code>
</td>
<td>The height (in pixels, without unit) to set for the logo. Default is <code>40</code>.</td>
</tr>
<tr>
<td><code>#shareRootLink</code>
</td>
<td>URL to navigate to when the logo is pressed.</td>
</tr>
</tbody>
</table>
<h3>Customizing OpenGraph</h3>
<table>
<thead>
<tr>
<th>Attribute</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>#shareOpenGraphColor</code>
</td>
<td>This adjusts the <code>theme-color</code> meta-property.</td>
</tr>
<tr>
<td><code>#shareOpenGraphURL</code>
</td>
<td>This adjusts the <code>og:url</code> and <code>twitter:url</code> meta-properties.</td>
</tr>
<tr>
<td><code>#shareOpenGraphDomain</code>
</td>
<td>Adjusts the <code>twitter:domain</code> meta-property.</td>
</tr>
<tr>
<td><code>#shareOpenGraphImage</code>
<br><code>~shareOpenGraphImage</code>
</td>
<td>Can be either a label, case in which the value is passed on as-is, or
it can be a relation to an image&nbsp;<a class="reference-link" href="#root/_help_W8vYD3Q1zjCR">File</a>.
This controls the <code>og:image</code> meta-property.</td>
</tr>
</tbody>
</table>
<h2>Credits</h2> <h2>Credits</h2>
<p>Since v0.95.0, a new theme was introduced (and enabled by default) which <p>Since v0.95.0, a new theme was introduced (and enabled by default) which
greatly improves the visual aspect of the Share feature, as well as its greatly improves the visual aspect of the Share feature, as well as its

View File

@@ -1,4 +1,4 @@
<p>As described in&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>, <p>As described in&nbsp;<a class="reference-link" href="#root/_help_R9pX4DGra2Vt">Sharing</a>,
Trilium can act as a public server in which the shared notes are displayed Trilium can act as a public server in which the shared notes are displayed
in read-only mode. While this can work in most cases, it's generally not in read-only mode. While this can work in most cases, it's generally not
meant for high-traffic websites and since it's running on a Node.js server meant for high-traffic websites and since it's running on a Node.js server
@@ -7,7 +7,7 @@
static site generators such as <a href="https://www.mkdocs.org/">MkDocs</a>). static site generators such as <a href="https://www.mkdocs.org/">MkDocs</a>).
Since the normal HTML ZIP export does not contain any styling or additional Since the normal HTML ZIP export does not contain any styling or additional
functionality, Trilium provides a way to export the same layout and style functionality, Trilium provides a way to export the same layout and style
as the&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>&nbsp;function as the&nbsp;<a class="reference-link" href="#root/_help_R9pX4DGra2Vt">Sharing</a>&nbsp;function
into static HTML files.</p> into static HTML files.</p>
<p>Apart from the enhanced security, these HTML files are also easy to deploy <p>Apart from the enhanced security, these HTML files are also easy to deploy
on “serverless” deployments such as GitHub Pages or CloudFlare Pages and on “serverless” deployments such as GitHub Pages or CloudFlare Pages and
@@ -20,26 +20,25 @@
importing the Markdown documentation and exporting it via a script to the importing the Markdown documentation and exporting it via a script to the
static web format.</p> static web format.</p>
</aside> </aside>
<h2>Differences from normal sharing and export</h2> <h2>Differences from normal sharing</h2>
<p>Apart from normal&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>, <p>Apart from normal&nbsp;<a class="reference-link" href="#root/_help_R9pX4DGra2Vt">Sharing</a>,
exporting to static HTML files comes with a few subtle differences:</p> exporting to static HTML files comes with a few subtle differences:</p>
<ul> <ul>
<li data-list-item-id="e9e5a7d50e33698fb322f4dc65108f3a9">The URL structure is different. Where in normal sharing it's something <li>The URL structure is different. Where in normal sharing it's something
along the way of <code>example.com/share/noteid</code>, the notes follow along the way of <code>example.com/share/noteid</code>, the notes follow
an hierarchical structure, such as <code>docs.triliumnotes.org/user-guide/concepts/navigation/tree-concepts</code>.</li> an hierarchical structure, such as <code>docs.triliumnotes.org/user-guide/concepts/navigation/tree-concepts</code>.</li>
<li <li>The <code>favicon.ico</code> is not handled automatically, it needs to be
data-list-item-id="e3995e60b9751ea177ac920a901635d4b">The <code>favicon.ico</code> is not handled automatically, it needs to be
manually added on the server after the export is generated.</li> manually added on the server after the export is generated.</li>
<li data-list-item-id="e72c2a986808ce27eb3bb5001fe4710cb">The “Last updated” for notes is not available.</li> <li>The “Last updated” for notes is not available.</li>
<li data-list-item-id="e53e8959701206c7a064ba811c0123bef">The search functionality works slightly different since the normal one <li>The search functionality works slightly different since the normal one
requires an active API to work. In the static export, search still works requires an active API to work. In the static export, search still works
but uses a different mechanism so results might be different.</li> but uses a different mechanism so results might be different.</li>
</ul> </ul>
<h2>Differences from normal .zip export</h2> <h2>Differences from normal .zip export</h2>
<ul> <ul>
<li data-list-item-id="e8a16c7135d6f6c4de3bc448bd8795289">The name of the files/URLs will prefer <code>shareAlias</code> to allow <li>The name of the files/URLs will prefer <code>shareAlias</code> to allow
for clean URLs.</li> for clean URLs.</li>
<li data-list-item-id="ef8bfdfc599c07ba70fbb4be97a3e26ab">The export requires a functional web server as the pages will not render <li>The export requires a functional web server as the pages will not render
properly if accessed locally via a web browser due to the use of module properly if accessed locally via a web browser due to the use of module
scripts.</li> scripts.</li>
</ul> </ul>
@@ -50,7 +49,10 @@
can be installed via:</p><pre><code class="language-text-x-trilium-auto">npm i -g http-server</code></pre> can be installed via:</p><pre><code class="language-text-x-trilium-auto">npm i -g http-server</code></pre>
<p>Once installed simply:</p> <p>Once installed simply:</p>
<ol> <ol>
<li data-list-item-id="ebc8d02c8cdcdb030c746f1fd5eccb5bd">Extract the exported .zip file.</li> <li>Extract the exported .zip file.</li>
<li data-list-item-id="e1d20f408fb89d0af0c1003984373f808">Inside the extracted directory, run <code>http-server</code>.</li> <li>Inside the extracted directory, run <code>http-server</code>.</li>
<li data-list-item-id="ecf0c59f3a26c8e766bb1d739f8355e33">Access the indicated address (e.g. http://localhost:8080).</li> <li>Access the indicated address (e.g. <a href="http://localhost:8080">http://localhost:8080</a>).</li>
</ol> </ol>
<h2>Automation</h2>
<p><a class="reference-link" href="#root/_help_pgxEVkzLl1OP">ETAPI (REST API)</a>&nbsp;could
potentially be used to automate an export on a scheduled task.</p>

View File

@@ -0,0 +1,18 @@
<p>It might be desirable to only expose the share functionality of Trilium
to the Internet, and keep the application accessible only within a local
network or via VPN.</p>
<p>To do so, a reverse proxy is required.</p>
<h2>Caddy</h2><pre><code class="language-text-x-trilium-auto">http://domain.com {
reverse_proxy /share http://localhost:8080/share
}</code></pre>
<p>This is for newer versions where the share functionality is isolated,
for older versions it's required to also include <code>/assets</code>.<sup><a href="#fn2b8mg20aol8">[1]</a></sup>
</p>
<ol>
<li>
<p><sup><strong><a href="#fnref2b8mg20aol8">^</a></strong></sup>
</p>
<p><a href="https://github.com/orgs/TriliumNext/discussions/7341#discussioncomment-14679897">https://github.com/orgs/TriliumNext/discussions/7341#discussioncomment-14679897</a>
</p>
</li>
</ol>

View File

@@ -0,0 +1,30 @@
<p>Trilium natively supports the following formats for both import and export.</p>
<ul>
<li>HTML:
<ul>
<li>This is the main format used by Trilium, where standard tags are used
to represent basic formatting and layout (e.g. <code>&lt;strong&gt;</code>, <code>&lt;table&gt;</code>, <code>&lt;pre&gt;</code>).</li>
<li>Note that HTML is not a standardized format so some more specific features
such as admonitions or&nbsp;<a class="reference-link" href="#root/_help_hrZ1D00cLbal">Internal (reference) links</a>&nbsp;might
not be supported by other applications.</li>
</ul>
</li>
<li><a class="reference-link" href="#root/_help_Oau6X9rCuegd">Markdown</a>
<ul>
<li>Most of the formatting is preserved, see&nbsp;<a class="reference-link"
href="#root/_help_rJ9grSgoExl9">Supported syntax</a>.</li>
</ul>
</li>
<li>OPML (Outliner Interchange Format)
<ul>
<li>Supports both OPML v1.0 for plain text and v2.0 with HTML support.</li>
</ul>
</li>
</ul>
<p>To import from other applications, see the dedicated pages:</p>
<ul>
<li><a class="reference-link" href="#root/_help_syuSEKf2rUGr">Evernote</a>
</li>
<li><a class="reference-link" href="#root/_help_GnhlmrATVqcH">OneNote</a>
</li>
</ul>

View File

@@ -1,5 +1,76 @@
<p>Collections are a unique type of notes that don't have a content, but <p>Collections are a unique type of notes that don't have a content, but
instead display its child notes in various presentation methods.</p> instead display its child notes in various presentation methods.</p>
<h2>Main collections</h2>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>
<figure class="image">
<img style="aspect-ratio:1651/810;" src="Collections_collection_ca.webp"
width="1651" height="810">
</figure>
</td>
<td><a class="reference-link" href="#root/_help_xWbu3jpNWapp">Calendar</a>
<br>which displays a week, month or year calendar with the notes being shown
as events. New events can be added easily by dragging across the calendar.</td>
</tr>
<tr>
<td>
<figure class="image">
<img style="aspect-ratio:1643/647;" src="Collections_collection_ta.webp"
width="1643" height="647">
</figure>
</td>
<td><a class="reference-link" href="#root/_help_2FvYrpmOXm29">Table</a>
<br>displays each note as a row in a table, with&nbsp;<a class="reference-link"
href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;being shown as well.
This makes it easy to visualize attributes of notes, as well as making
them easily editable.</td>
</tr>
<tr>
<td>
<figure class="image">
<img style="aspect-ratio:1174/850;" src="Collections_collection_bo.webp"
width="1174" height="850">
</figure>
</td>
<td><a class="reference-link" href="#root/_help_CtBQqbwXDx1w">Kanban Board</a>
<br>displays notes in columns, grouped by the value of a label. Items and
columns can easily be created or dragged around to change their status.</td>
</tr>
<tr>
<td>
<figure class="image">
<img style="aspect-ratio:844/639;" src="Collections_collection_ge.webp"
width="844" height="639">
</figure>
</td>
<td><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map</a>
<br>which displays a geographical map in which the notes are represented as
markers/pins on the map. New events can be easily added by pointing on
the map.</td>
</tr>
<tr>
<td>
<figure class="image">
<img style="aspect-ratio:1120/763;" src="Collections_collection_pr.webp"
width="1120" height="763">
</figure>
</td>
<td><a class="reference-link" href="#root/_help_zP3PMqaG71Ct">Presentation</a>
<br>which shows each note as a slide and can be presented full-screen with
smooth transitions or exported to PDF for sharing.</td>
</tr>
</tbody>
</table>
<h2>Classic collections</h2>
<p>Classic collections are read-only mode and compiles the contents of all <p>Classic collections are read-only mode and compiles the contents of all
child notes into one continuous view. This makes it ideal for reading extensive child notes into one continuous view. This makes it ideal for reading extensive
information broken into smaller, manageable segments.</p> information broken into smaller, manageable segments.</p>
@@ -13,32 +84,22 @@
but it displays the notes one under the other with the content being expandable/collapsible, but it displays the notes one under the other with the content being expandable/collapsible,
but also works recursively.</li> but also works recursively.</li>
</ul> </ul>
<p>More specialized collections were introduced, such as the:</p> <h2>Creating a new collection</h2>
<ul>
<li><a class="reference-link" href="#root/_help_xWbu3jpNWapp">Calendar View</a>&nbsp;which
displays a week, month or year calendar with the notes being shown as events.
New events can be added easily by dragging across the calendar.</li>
<li><a class="reference-link" href="#root/_help_81SGnPGMk7Xc">Geo Map View</a>&nbsp;which
displays a geographical map in which the notes are represented as markers/pins
on the map. New events can be easily added by pointing on the map.</li>
<li><a class="reference-link" href="#root/_help_2FvYrpmOXm29">Table View</a>&nbsp;displays
each note as a row in a table, with&nbsp;<a class="reference-link" href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>&nbsp;being
shown as well. This makes it easy to visualize attributes of notes, as
well as making them easily editable.</li>
<li><a class="reference-link" href="#root/_help_CtBQqbwXDx1w">Board View</a>&nbsp;(Kanban)
displays notes in columns, grouped by the value of a label.</li>
</ul>
<p>For a quick presentation of all the supported view types, see the child
notes of this help page, including screenshots.</p>
<h2>Configuration</h2>
<p>To adjust the view type, see the dedicated <em>Collections</em> tab in the&nbsp;
<a
class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>.</p>
<h2>Use cases</h2>
<h3>Creating a new collection</h3>
<p>To create a new collections, right click in the&nbsp;<a class="reference-link" <p>To create a new collections, right click in the&nbsp;<a class="reference-link"
href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>&nbsp;and look for the <em>Collections</em> entry href="#root/_help_oPVyFC7WL2Lp">Note Tree</a>&nbsp;and look for the <em>Collections</em> entry
and select the desired type.</p> and select the desired type.</p>
<h2>Configuration</h2>
<p>To change the configuration of a collection or even switch to a different
collection (e.g. from Kanban Board to a Calendar), see the dedicated <em>Collections</em> tab
in the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>.</p>
<h2>Archived notes</h2>
<p>By default, <a href="#root/_help_MKmLg5x6xkor">archived notes</a> will not be
shown in collections. This behaviour can be changed by going to <em>Collection Properties</em> in
the&nbsp;<a class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;and
checking <em>Show archived notes</em>.</p>
<p>Archived notes will be generally indicated by being greyed out as opposed
to the normal ones.</p>
<h2>Advanced use cases</h2>
<h3>Adding a description to a collection</h3> <h3>Adding a description to a collection</h3>
<p>To add a text before the collection, for example to describe it:</p> <p>To add a text before the collection, for example to describe it:</p>
<ol> <ol>
@@ -75,13 +136,6 @@
<li>Consult the help page of the corresponding view type in order to understand <li>Consult the help page of the corresponding view type in order to understand
how to configure them.</li> how to configure them.</li>
</ol> </ol>
<h2>Archived notes</h2>
<p>By default, archived notes will not be shown in collections. This behaviour
can be changed by going to <em>Collection Properties</em> in the&nbsp;
<a
class="reference-link" href="#root/_help_BlN9DFI679QC">Ribbon</a>&nbsp;and checking <em>Show archived notes</em>.</p>
<p>Archived notes will be generally indicated by being greyed out as opposed
to the normal ones.</p>
<h2>Under the hood</h2> <h2>Under the hood</h2>
<p>Collections by themselves are simply notes with no content that rely on <p>Collections by themselves are simply notes with no content that rely on
the&nbsp;<a class="reference-link" href="#root/_help_0ESUbbAxVnoK">Note List</a>&nbsp;mechanism the&nbsp;<a class="reference-link" href="#root/_help_0ESUbbAxVnoK">Note List</a>&nbsp;mechanism

View File

@@ -1,5 +1,5 @@
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:767/606;" src="4_Calendar View_image.png" <img style="aspect-ratio:767/606;" src="4_Calendar_image.png"
width="767" height="606"> width="767" height="606">
</figure> </figure>
<p>The Calendar view will display each child note in a calendar that has <p>The Calendar view will display each child note in a calendar that has
@@ -30,7 +30,7 @@
<tr> <tr>
<td>1</td> <td>1</td>
<td> <td>
<img src="2_Calendar View_image.png"> <img src="2_Calendar_image.png">
</td> </td>
<td>The Calendar View works only for Collection note types. To create a new <td>The Calendar View works only for Collection note types. To create a new
note, right click on the note tree on the left and select Insert note after, note, right click on the note tree on the left and select Insert note after,
@@ -39,7 +39,7 @@
<tr> <tr>
<td>2</td> <td>2</td>
<td> <td>
<img src="3_Calendar View_image.png"> <img src="3_Calendar_image.png">
</td> </td>
<td>Once created, the “View type” of the Collection needs changed to “Calendar”, <td>Once created, the “View type” of the Collection needs changed to “Calendar”,
by selecting the “Collection Properties” tab in the ribbon.</td> by selecting the “Collection Properties” tab in the ribbon.</td>
@@ -59,7 +59,7 @@
<li>It's possible to drag across multiple days to set both the start and end <li>It's possible to drag across multiple days to set both the start and end
date of a particular note. date of a particular note.
<br> <br>
<img src="Calendar View_image.png"> <img src="Calendar_image.png">
</li> </li>
<li>Creating new notes from the calendar will respect the <code>~child:template</code> relation <li>Creating new notes from the calendar will respect the <code>~child:template</code> relation
if set on the Collection note.</li> if set on the Collection note.</li>
@@ -68,7 +68,7 @@
<ul> <ul>
<li>Hovering the mouse over an event will display information about the note. <li>Hovering the mouse over an event will display information about the note.
<br> <br>
<img src="7_Calendar View_image.png"> <img src="7_Calendar_image.png">
</li> </li>
<li>Left clicking the event will open a&nbsp;<a class="reference-link" href="#root/_help_ZjLYv08Rp3qC">Quick edit</a>&nbsp;to <li>Left clicking the event will open a&nbsp;<a class="reference-link" href="#root/_help_ZjLYv08Rp3qC">Quick edit</a>&nbsp;to
edit the note in a popup while allowing easy return to the calendar by edit the note in a popup while allowing easy return to the calendar by
@@ -209,7 +209,7 @@
like this:&nbsp;&nbsp;&nbsp;&nbsp; like this:&nbsp;&nbsp;&nbsp;&nbsp;
<br> <br>
<br> <br>
<img src="9_Calendar View_image.png">&nbsp;&nbsp; <img src="9_Calendar_image.png">&nbsp;&nbsp;
<br> <br>
<br><code>#weight="70" #Mood="Good" #calendar:displayedAttributes="weight,Mood"</code>&nbsp;&nbsp; <br><code>#weight="70" #Mood="Good" #calendar:displayedAttributes="weight,Mood"</code>&nbsp;&nbsp;
<br> <br>
@@ -249,7 +249,7 @@
<h2>How the calendar works</h2> <h2>How the calendar works</h2>
<p> <p>
<img src="11_Calendar View_image.png"> <img src="11_Calendar_image.png">
</p> </p>
<p>The calendar displays all the child notes of the Collection that have <p>The calendar displays all the child notes of the Collection that have
a <code>#startDate</code>. An <code>#endDate</code> can optionally be added.</p> a <code>#startDate</code>. An <code>#endDate</code> can optionally be added.</p>
@@ -259,7 +259,7 @@
#hidePromotedAttributes </code></pre> #hidePromotedAttributes </code></pre>
<p>This will result in:</p> <p>This will result in:</p>
<p> <p>
<img src="10_Calendar View_image.png"> <img src="10_Calendar_image.png">
</p> </p>
<p>When not used in a Journal, the calendar is recursive. That is, it will <p>When not used in a Journal, the calendar is recursive. That is, it will
look for events not just in its child notes but also in the children of look for events not just in its child notes but also in the children of
@@ -283,8 +283,8 @@
not having a <code>dateNote</code> attribute. Children of the child notes not having a <code>dateNote</code> attribute. Children of the child notes
will not be displayed.</li> will not be displayed.</li>
</ul> </ul>
<img src="8_Calendar View_image.png" <img src="8_Calendar_image.png" width="1217"
width="1217" height="724"> height="724">
<h3>Using a different attribute as event title</h3> <h3>Using a different attribute as event title</h3>
<p>By default, events are displayed on the calendar by their note title. <p>By default, events are displayed on the calendar by their note title.
@@ -309,7 +309,7 @@ width="1217" height="724">
<td> <td>
<p>&nbsp;</p> <p>&nbsp;</p>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:445/124;" src="5_Calendar View_image.png" <img style="aspect-ratio:445/124;" src="5_Calendar_image.png"
width="445" height="124"> width="445" height="124">
</figure> </figure>
</td> </td>
@@ -335,8 +335,8 @@ width="1217" height="724">
<td><pre><code class="language-text-x-trilium-auto">#startDate=2025-02-14 #endDate=2025-02-15 ~for=@John Smith ~for=@Jane Doe #calendar:title="for"</code></pre> <td><pre><code class="language-text-x-trilium-auto">#startDate=2025-02-14 #endDate=2025-02-15 ~for=@John Smith ~for=@Jane Doe #calendar:title="for"</code></pre>
</td> </td>
<td> <td>
<img src="6_Calendar View_image.png" <img src="6_Calendar_image.png" width="294"
width="294" height="151"> height="151">
</td> </td>
</tr> </tr>
</tbody> </tbody>
@@ -359,7 +359,7 @@ width="1217" height="724">
</td> </td>
<td> <td>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:296/150;" src="1_Calendar View_image.png" <img style="aspect-ratio:296/150;" src="1_Calendar_image.png"
width="296" height="150"> width="296" height="150">
</figure> </figure>
</td> </td>

View File

@@ -5,7 +5,7 @@
href="#root/_help_0ESUbbAxVnoK">Note List</a>.&nbsp;</p> href="#root/_help_0ESUbbAxVnoK">Note List</a>.&nbsp;</p>
</aside> </aside>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:892/675;" src="9_Geo Map View_image.png" <img style="aspect-ratio:892/675;" src="9_Geo Map_image.png"
width="892" height="675"> width="892" height="675">
</figure> </figure>
<p>This note type displays the children notes on a geographical map, based <p>This note type displays the children notes on a geographical map, based
@@ -25,7 +25,7 @@
<td>1</td> <td>1</td>
<td> <td>
<figure class="image"> <figure class="image">
<img style="aspect-ratio:483/413;" src="15_Geo Map View_image.png" <img style="aspect-ratio:483/413;" src="15_Geo Map_image.png"
width="483" height="413"> width="483" height="413">
</figure> </figure>
</td> </td>
@@ -35,7 +35,7 @@
<td>2</td> <td>2</td>
<td> <td>
<figure class="image image-style-align-center image_resized" style="width:53.44%;"> <figure class="image image-style-align-center image_resized" style="width:53.44%;">
<img style="aspect-ratio:1720/1396;" src="8_Geo Map View_image.png" <img style="aspect-ratio:1720/1396;" src="8_Geo Map_image.png"
width="1720" height="1396"> width="1720" height="1396">
</figure> </figure>
</td> </td>
@@ -67,18 +67,18 @@
<td>1</td> <td>1</td>
<td>To create a marker, first navigate to the desired point on the map. Then <td>To create a marker, first navigate to the desired point on the map. Then
press the press the
<img src="10_Geo Map View_image.png">button in the&nbsp;<a href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>&nbsp;(top-right) <img src="10_Geo Map_image.png">button in the&nbsp;<a href="#root/_help_XpOYSgsLkTJy">Floating buttons</a>&nbsp;(top-right)
area.&nbsp;&nbsp;&nbsp; area.&nbsp;&nbsp;&nbsp;
<br> <br>
<br>If the button is not visible, make sure the button section is visible <br>If the button is not visible, make sure the button section is visible
by pressing the chevron button ( by pressing the chevron button (
<img src="17_Geo Map View_image.png">) in the top-right of the map.</td> <img src="17_Geo Map_image.png">) in the top-right of the map.</td>
<td></td> <td></td>
</tr> </tr>
<tr> <tr>
<td>2</td> <td>2</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:1730/416;width:100%;" src="2_Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:1730/416;width:100%;" src="2_Geo Map_image.png"
width="1730" height="416"> width="1730" height="416">
</td> </td>
<td>Once pressed, the map will enter in the insert mode, as illustrated by <td>Once pressed, the map will enter in the insert mode, as illustrated by
@@ -90,7 +90,7 @@
<tr> <tr>
<td>3</td> <td>3</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:1586/404;width:100%;" src="7_Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:1586/404;width:100%;" src="7_Geo Map_image.png"
width="1586" height="404"> width="1586" height="404">
</td> </td>
<td>Enter the name of the marker/note to be created.</td> <td>Enter the name of the marker/note to be created.</td>
@@ -98,7 +98,7 @@
<tr> <tr>
<td>4</td> <td>4</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:1696/608;width:100%;" src="16_Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:1696/608;width:100%;" src="16_Geo Map_image.png"
width="1696" height="608"> width="1696" height="608">
</td> </td>
<td>Once confirmed, the marker will show up on the map and it will also be <td>Once confirmed, the marker will show up on the map and it will also be
@@ -136,7 +136,7 @@
<h2>How the location of the markers is stored</h2> <h2>How the location of the markers is stored</h2>
<p>The location of a marker is stored in the <code>#geolocation</code> attribute <p>The location of a marker is stored in the <code>#geolocation</code> attribute
of the child notes:</p> of the child notes:</p>
<img src="18_Geo Map View_image.png" <img src="18_Geo Map_image.png"
width="1288" height="278"> width="1288" height="278">
<p>This value can be added manually if needed. The value of the attribute <p>This value can be added manually if needed. The value of the attribute
is made up of the latitude and longitude separated by a comma.</p> is made up of the latitude and longitude separated by a comma.</p>
@@ -191,7 +191,7 @@ width="1288" height="278">
</ol> </ol>
<h2>Icon and color of the markers</h2> <h2>Icon and color of the markers</h2>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:523/295;" src="Geo Map View_image.jpg" <img style="aspect-ratio:523/295;" src="Geo Map_image.jpg"
alt="image" width="523" height="295"> alt="image" width="523" height="295">
</figure> </figure>
<p>The markers will have the same icon as the note.</p> <p>The markers will have the same icon as the note.</p>
@@ -216,7 +216,7 @@ width="1288" height="278">
<td>1</td> <td>1</td>
<td> <td>
<figure class="image image-style-align-center image_resized" style="width:56.84%;"> <figure class="image image-style-align-center image_resized" style="width:56.84%;">
<img style="aspect-ratio:732/918;" src="12_Geo Map View_image.png" <img style="aspect-ratio:732/918;" src="12_Geo Map_image.png"
width="732" height="918"> width="732" height="918">
</figure> </figure>
</td> </td>
@@ -233,7 +233,7 @@ width="1288" height="278">
<td>2</td> <td>2</td>
<td> <td>
<figure class="image image-style-align-center image_resized" style="width:100%;"> <figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:518/84;" src="4_Geo Map View_image.png" <img style="aspect-ratio:518/84;" src="4_Geo Map_image.png"
width="518" height="84"> width="518" height="84">
</figure> </figure>
</td> </td>
@@ -243,7 +243,7 @@ width="1288" height="278">
<td>3</td> <td>3</td>
<td> <td>
<figure class="image image-style-align-center image_resized" style="width:100%;"> <figure class="image image-style-align-center image_resized" style="width:100%;">
<img style="aspect-ratio:1074/276;" src="11_Geo Map View_image.png" <img style="aspect-ratio:1074/276;" src="11_Geo Map_image.png"
width="1074" height="276"> width="1074" height="276">
</figure> </figure>
</td> </td>
@@ -269,7 +269,7 @@ width="1288" height="278">
<tr> <tr>
<td>1</td> <td>1</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:562/454;width:100%;" src="1_Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:562/454;width:100%;" src="1_Geo Map_image.png"
width="562" height="454"> width="562" height="454">
</td> </td>
<td>Go to any location on openstreetmap.org and right click to bring up the <td>Go to any location on openstreetmap.org and right click to bring up the
@@ -278,7 +278,7 @@ width="1288" height="278">
<tr> <tr>
<td>2</td> <td>2</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:696/480;width:100%;" src="Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:696/480;width:100%;" src="Geo Map_image.png"
width="696" height="480"> width="696" height="480">
</td> </td>
<td>The address will be visible in the top-left of the screen, in the place <td>The address will be visible in the top-left of the screen, in the place
@@ -289,7 +289,7 @@ width="1288" height="278">
<tr> <tr>
<td>3</td> <td>3</td>
<td> <td>
<img class="image_resized" style="aspect-ratio:640/276;width:100%;" src="5_Geo Map View_image.png" <img class="image_resized" style="aspect-ratio:640/276;width:100%;" src="5_Geo Map_image.png"
width="640" height="276"> width="640" height="276">
</td> </td>
<td>Simply paste the value inside the text box into the <code>#geolocation</code> attribute <td>Simply paste the value inside the text box into the <code>#geolocation</code> attribute
@@ -313,7 +313,7 @@ width="1288" height="278">
<td>1</td> <td>1</td>
<td> <td>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:226/74;" src="3_Geo Map View_image.png" <img style="aspect-ratio:226/74;" src="3_Geo Map_image.png"
width="226" height="74"> width="226" height="74">
</figure> </figure>
</td> </td>
@@ -324,7 +324,7 @@ width="1288" height="278">
<td>2</td> <td>2</td>
<td> <td>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:322/222;" src="14_Geo Map View_image.png" <img style="aspect-ratio:322/222;" src="14_Geo Map_image.png"
width="322" height="222"> width="322" height="222">
</figure> </figure>
</td> </td>
@@ -335,7 +335,7 @@ width="1288" height="278">
<td>3</td> <td>3</td>
<td> <td>
<figure class="image image-style-align-center"> <figure class="image image-style-align-center">
<img style="aspect-ratio:620/530;" src="6_Geo Map View_image.png" <img style="aspect-ratio:620/530;" src="6_Geo Map_image.png"
width="620" height="530"> width="620" height="530">
</figure> </figure>
</td> </td>
@@ -400,7 +400,7 @@ width="1288" height="278">
of the scale of the map.</p> of the scale of the map.</p>
<h2>Troubleshooting</h2> <h2>Troubleshooting</h2>
<figure class="image image-style-align-right image_resized" style="width:34.06%;"> <figure class="image image-style-align-right image_resized" style="width:34.06%;">
<img style="aspect-ratio:678/499;" src="13_Geo Map View_image.png" <img style="aspect-ratio:678/499;" src="13_Geo Map_image.png"
width="678" height="499"> width="678" height="499">
</figure> </figure>

View File

@@ -1,5 +1,5 @@
<figure class="image"> <figure class="image">
<img style="aspect-ratio:918/248;" src="Board View_image.png" <img style="aspect-ratio:918/248;" src="Kanban Board_image.png"
width="918" height="248"> width="918" height="248">
</figure> </figure>
<p>The Board view presents sub-notes in columns for a Kanban-like experience. <p>The Board view presents sub-notes in columns for a Kanban-like experience.
@@ -11,9 +11,9 @@
then groups each note by the value of the status attribute.</p> then groups each note by the value of the status attribute.</p>
<p>Notes are displayed recursively, so even the child notes of the child <p>Notes are displayed recursively, so even the child notes of the child
notes will be displayed. However, unlike the&nbsp;<a class="reference-link" notes will be displayed. However, unlike the&nbsp;<a class="reference-link"
href="#root/_help_2FvYrpmOXm29">Table View</a>, the notes are not displayed in href="#root/_help_2FvYrpmOXm29">Table</a>, the notes are not displayed in a hierarchy.</p>
a hierarchy.</p> <h2>Interaction</h2>
<h2>Interaction with columns</h2> <h3>Working with columns</h3>
<ul> <ul>
<li>Create a new column by pressing <em>Add Column</em> near the last column. <li>Create a new column by pressing <em>Add Column</em> near the last column.
<ul> <ul>
@@ -33,7 +33,7 @@
</li> </li>
<li>If there are many columns, use the mouse wheel to scroll.</li> <li>If there are many columns, use the mouse wheel to scroll.</li>
</ul> </ul>
<h2>Interaction with notes</h2> <h3>Working with notes</h3>
<ul> <ul>
<li>Create a new note in any column by pressing <em>New item</em> <li>Create a new note in any column by pressing <em>New item</em>
<ul> <ul>
@@ -91,7 +91,6 @@ class="admonition note">
<p>It's currently not possible to set a relation as the grouping criteria. <p>It's currently not possible to set a relation as the grouping criteria.
There are plans to add support for it.</p> There are plans to add support for it.</p>
</aside> </aside>
<h2>Interaction</h2>
<h2>Limitations</h2> <h2>Limitations</h2>
<ul> <ul>
<li>It is not possible yet to use group by a relation, only by label.</li> <li>It is not possible yet to use group by a relation, only by label.</li>

View File

@@ -1,5 +1,5 @@
<figure class="image"> <figure class="image">
<img style="aspect-ratio:1120/763;" src="Presentation View_image.png" <img style="aspect-ratio:1120/763;" src="Presentation_image.png"
width="1120" height="763"> width="1120" height="763">
</figure> </figure>
<p>The Presentation view allows the creation of slideshows directly from <p>The Presentation view allows the creation of slideshows directly from
@@ -52,7 +52,7 @@
scheme.</li> scheme.</li>
</ul> </ul>
<figure class="image image-style-align-right image_resized" style="width:55.57%;"> <figure class="image image-style-align-right image_resized" style="width:55.57%;">
<img style="aspect-ratio:890/569;" src="1_Presentation View_image.png" <img style="aspect-ratio:890/569;" src="1_Presentation_image.png"
width="890" height="569"> width="890" height="569">
</figure> </figure>
<p>All direct children of the collection will be laid out horizontally. If <p>All direct children of the collection will be laid out horizontally. If

View File

@@ -1,5 +1,5 @@
<figure class="image"> <figure class="image">
<img style="aspect-ratio:1050/259;" src="Table View_image.png" <img style="aspect-ratio:1050/259;" src="Table_image.png"
width="1050" height="259"> width="1050" height="259">
</figure> </figure>
<p>The table view displays information in a grid, where the rows are individual <p>The table view displays information in a grid, where the rows are individual

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -8,7 +8,7 @@
documents</li> documents</li>
<li><code>log</code> - contains application log files</li> <li><code>log</code> - contains application log files</li>
</ul> </ul>
<h2>Location</h2> <h2>Location of the data directory</h2>
<p>Easy way how to find out which data directory Trilium uses is to look <p>Easy way how to find out which data directory Trilium uses is to look
at the "About Trilium Notes" dialog (from "Menu" in upper left corner):</p> at the "About Trilium Notes" dialog (from "Menu" in upper left corner):</p>
<p> <p>
@@ -62,20 +62,64 @@
<p>To do this in unix based systems simply run trilium like this:</p><pre><code class="language-text-x-trilium-auto">TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium</code></pre> <p>To do this in unix based systems simply run trilium like this:</p><pre><code class="language-text-x-trilium-auto">TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium</code></pre>
<p>You can then save the above command as a shell script on your path for <p>You can then save the above command as a shell script on your path for
convenience.</p> convenience.</p>
<h3>Fine-grained directory/path location</h3> <h2>Fine-grained directory/path location</h2>
<p>It's possible to configure e.g. backup and log directories separately, <p>Apart from the data directory, some of the subdirectories of it can be
with following environment variables:</p> moved elsewhere by changing an environment variable:</p>
<ul> <table>
<li><code>TRILIUM_DOCUMENT_PATH</code> <thead>
</li> <tr>
<li><code>TRILIUM_BACKUP_DIR</code> <th>Environment variable</th>
</li> <th>Default value</th>
<li><code>TRILIUM_LOG_DIR</code> <th>Description</th>
</li> </tr>
<li><code>TRILIUM_ANONYMIZED_DB_DIR</code> </thead>
</li> <tbody>
<li><code>TRILIUM_CONFIG_INI_PATH</code> <tr>
</li> <td><code>TRILIUM_DOCUMENT_PATH</code>
</ul> </td>
<p>If these are not set, default paths within the data directory will be <td><code>${TRILIUM_DATA_DIR}/document.db</code>
used.</p> </td>
<td>Path to the&nbsp;<a class="reference-link" href="#root/_help_wX4HbRucYSDD">Database</a>&nbsp;(storing
all notes and metadata).</td>
</tr>
<tr>
<td><code>TRILIUM_BACKUP_DIR</code>
</td>
<td><code>${TRILIUM_DATA_DIR}/backup</code>
</td>
<td>Directory where automated&nbsp;<a class="reference-link" href="#root/_help_ODY7qQn5m2FT">Backup</a>&nbsp;databases
are stored.</td>
</tr>
<tr>
<td><code>TRILIUM_LOG_DIR</code>
</td>
<td><code>${TRILIUM_DATA_DIR}/log</code>
</td>
<td>Directory where daily&nbsp;<a class="reference-link" href="#root/_help_bnyigUA2UK7s">Backend (server) logs</a>&nbsp;are
stored.</td>
</tr>
<tr>
<td><code>TRILIUM_TMP_DIR</code>
</td>
<td><code>${TRILIUM_DATA_DIR}/tmp</code>
</td>
<td>Directory where temporary files are stored (for example when opening in
an external app).</td>
</tr>
<tr>
<td><code>TRILIUM_ANONYMIZED_DB_DIR</code>
</td>
<td><code>${TRILIUM_DATA_DIR}/anonymized-db</code>
</td>
<td>Directory where a&nbsp;<a class="reference-link" href="#root/_help_x59R8J8KV5Bp">Anonymized Database</a>&nbsp;is
stored.</td>
</tr>
<tr>
<td><code>TRILIUM_CONFIG_INI_PATH</code>
</td>
<td><code>${TRILIUM_DATA_DIR}/config.ini</code>
</td>
<td>Path to&nbsp;<a class="reference-link" href="#root/_help_Gzjqa934BdH4">Configuration (config.ini or environment variables)</a>&nbsp;file.</td>
</tr>
</tbody>
</table>

View File

@@ -0,0 +1,21 @@
<p>The desktop version of Trilium supports all three main operating systems:</p>
<ul>
<li>Windows
<ul>
<li>Windows 11 is officially supported.</li>
<li>Windows on ARM is also supported</li>
</ul>
</li>
<li>Linux:
<ul>
<li>Most modern distributions are supported, including NixOS.</li>
<li>ARM is supported in <code>aarch64</code> (no ARM v7 support).</li>
</ul>
</li>
<li>macOS
<ul>
<li>Minimum supported operating system: macOS Monterey</li>
<li>Both Intel and Apple Silicon devices are supported.</li>
</ul>
</li>
</ul>

View File

@@ -0,0 +1,16 @@
<ul>
<li>Using Docker, the server can be run on Windows, Linux and macOS devices.</li>
<li>Native binaries are provided for Linux x64 and ARM (<code>aarch64</code>).</li>
</ul>
<h2>Legacy ARM support</h2>
<p>The Docker builds also provide <code>linux/arm/v7</code> and <code>linux/arm/v8</code> platforms.
These platforms are considered legacy since Trilium uses Node.js version
24 which have <a href="https://github.com/nodejs/node/commit/6682861d6f">officially downgraded support</a> for
these platforms to “experimental”.</p>
<p>As a result, Trilium needs to use Node.js 22 for these versions. As soon
as soon Node.js 22 will no longer be compatible, support for <code>armv7</code> and <code>armv8</code> will
be dropped entirely.</p>
<p>Regardless of upstream support, these platforms are supported on a best-effort
basis and are not officially supported by the Trilium development team.
Bug reports are accepted but they will not be treated with priority; contributions
are welcome.</p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

View File

@@ -0,0 +1,301 @@
<aside class="admonition note">
<p>This article is a description of the original author of Trilium (zadam)
in regards with his own knowledge base.</p>
</aside>
<p>This page contains description of some of the patterns I use to organize
information in my knowledge base. This is meant to give some inspiration
of how one might create and structure their knowledge base in general and
also specifically in Trilium Notes. It also gives some background and justification
for some of the design decisions.</p>
<h2>Meta patterns</h2>
<p>Just to be clear, meta patterns are "patterns of patterns", i.e. patterns
appearing in other patterns.</p>
<h3>Hierarchical organization of information</h3>
<p>Basic meta pattern is that I sort notes (units of information) into a
hierarchy - I have some "top level" notes which represent coarse grained
organization, these then split into sub-notes defining finer grained organization
and so on. I consider this hierarchical (tree) organization very efficient
for organization of large amounts of information. A lot of note taking
software (such as Evernote) are frustratingly limited in this regard which
limits scalability of the software to large amounts of notes.</p>
<h4>Scalability</h4>
<p>It's important to frame the following (meta) patterns with some idea of
how large amount of data are we talking about.</p>
<p>My rule of thumb for estimation of size of personal knowledge base is
that you can reasonably produce around 10 notes a day, which is 3650 in
a year. I plan to use my knowledge base long term (with or without Trilium
Notes), probably decades so you can easily get to number 100 000 or even
more. Right now, my personal knowledge base has around 10 000 notes.</p>
<p>100 000 is a number to which most note taking software doesn't scale well
(in both performance and UI). Yet I don't think it's really very much considering
a lifetime of knowledge.</p>
<h4>Lazy hierarchy</h4>
<p>My approach to creating the hierarchy is being lazy - I don't create the
structure first and then fill it with notes, instead I create single note
for some specific topic and start using this one note. Once the content
starts to grow, and I see how <em>some</em> parts could be split out, I move
them out into separate sub notes. As an example I have a book review for <em>The Fellowship of the Ring</em>:</p>
<ul>
<li>Book reviews
<ul>
<li>The Fellowship of the Ring</li>
</ul>
</li>
</ul>
<p>The note contains basic book info (author, publisher etc.), book highlights
with the comments and then overall review. Now it turns out there's far
too many book highlights and overall review is also rather long, so I want
to change the structure to the following:</p>
<ul>
<li>Book reviews
<ul>
<li>The Fellowship of the Ring &nbsp; &nbsp; &nbsp;&nbsp;<em>(still contains basic info)</em>
<ul>
<li>Highlights</li>
<li>Review</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>If I used standard text file stored in a filesystem I would soon run into
an annoying problem that in order to split out the Highlights and Review
into sub-notes I would also have to convert <em>The Fellowship of the Ring</em> from
text file into directory and split out all sections of the note into sub-notes.
Instead, Trilium treats all notes as equal - both leaf notes and inner
notes can have both text content which allows me to sub-structure only
content which needs it.</p>
<h3>Sorting notes into multiple places in the hierarchy</h3>
<p>While organizing the notes into the hierarchy, you very quickly run into
a dilemma - your note seem to belong to two places in the hierarchy equally.
As an example - you want to make a note about <a href="https://en.wikipedia.org/wiki/Bash_(Unix_shell)">bash</a> -
does it belong to "OS / Linux" or "Programming / Scripting languages"?
This is actually a false dichotomy forced down by the limits of the basic
tree hierarchy - the answer is <em>of course it belongs to both</em>. This
is the reason why Trilium doesn't use standard tree structure (which requires
every note to have exactly one parent), but an extension which allows every
note to have several parents, thus effectively allowing it to appear in
multiple places in the hierarchy. For lack of better term I call this "cloning".
The main problem with this term is that it suggests that each clone must
have an original, but here all clones are completely equal - effectively
there's no original.</p>
<p>In tech lingo, it might be better to describe it as a <a href="https://en.wikipedia.org/wiki/Hard_link">hard link</a> with
an important difference that it is possible to hard link (clone) a directory
(inner note).</p>
<h3>Protected notes</h3>
<p>I have Trilium Notes opened non-stop. Sometimes I forget to lock my computer
when going to the bathroom. Sometimes I let a friend or family member to
use my computer for a minute without supervision. They might click on (running)
Trilium and inadvertently see a note I really don't want anybody to see
(personal diary, credentials). To cover this, Trilium has a concept of
"<a href="https://github.com/zadam/trilium/wiki/Protected-notes">protected notes</a>"
- protected note is encrypted and on top of that requires the user to enter
the password every 5 minutes which guarantees that such note can be in
a readable state only for small amount of time. Working with ordinary (not
protected) notes don't require password so you're not bothered by extra
security when it's not needed.</p>
<h3>Archiving notes</h3>
<p>Notes can lose relevancy with time - let's say I switch jobs - all the
notes specific to the former employer immediately lose most of its import.
This doesn't mean I want to delete these notes though - typically I just
want them to somehow deprioritize - in Trilium I would do that by assigning
an <a href="https://github.com/zadam/trilium/wiki/Attribute-inheritance">inherited</a>
<a
href="https://github.com/zadam/trilium/wiki/Attributes">label</a> <code>archived</code> to the company root note. The main effect
of this label is that all the notes from this sub-tree are filtered out
from search results (fast search via note autocomplete is my main <a href="https://github.com/zadam/trilium/wiki/Note-navigation">navigation approach</a>).
Apart from this, I also typically move such outdated notes to some less
prominent place in the hierarchy.</p>
<p>I use archivation also for notes which are not very relevant from their
creation - an example might be automatically imported reddit comments.</p>
<p>Sometimes there's no clear <em>category</em> split between relevant and
non-relevant notes, in that case I just create "<em>OLD</em>" note with <code>archived</code> label
and move all irrelevant notes there. So my credentials note might look
something like this:</p>
<ul>
<li>Credentials
<ul>
<li>Personal
<ul>
<li>OLD &nbsp; &nbsp; &nbsp;&nbsp;<em>(contains a bunch of notes with credentials for services I don't use anymore)</em>
</li>
<li>Gmail</li>
<li>Github</li>
<li>...</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2>Patterns</h2>
<h3>Day note</h3>
<p>Every day has its note which contains or references everything related
to the given day. Structure looks like this:</p>
<ul>
<li>2018
<ul>
<li>11 - November
<ul>
<li>26 - Monday</li>
<li>27 - Tuesday
<ul>
<li>subnote 1</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Day note serves as a workspace and note inbox at the same time - it's
the default location to create a note when I don't have time to think about
proper placement. At the end of the day I typically review my day note
and clone the notes into suitable locations in the hierarchy.</p>
<p>Trilium has this pattern partly built-in - Trilium understands and can
create this Year / Month / Day structure semi-automatically (on API call).
There's also global keyboard shortcut <code>CTRL-ALT-P</code> which will
create new note in the day note.</p>
<p>What notes do I keep under this day note?</p>
<ul>
<li>TODO list for given day (this can be automated - see&nbsp;<a class="reference-link"
href="#root/_help_xYjQUYhpbUEW">Task Manager</a>)</li>
<li>Personal diary</li>
<li><a href="#root/_help_IakOLONlIfGI">clones</a> of notes I created during this
day (which kind of represents what I've been working on).</li>
<li>I often clone notes (or sub-trees) of e.g. projects I'm working on at
given day so they are at hand</li>
<li>I have some <a href="#root/_help_CdNpE2pqjmI6">scripts</a> which allow me to track
certain daily metrics (like weight). These are saved into one daily "data
note" (actually JSON <a href="#root/_help_6f9hih2hXXZk">code note</a>).
<ul>
<li>I have other scripts which then help me to visualize these data (see a&nbsp;
<a
class="reference-link" href="#root/_help_R7abl2fc6Mxi">Weight Tracker</a>&nbsp;example)</li>
<li>I have a script which automatically imports all my comments from reddit
into the day note.
<ul>
<li>People are sometimes wondering why. The answer is that I usually put some
effort and thought into a comment and that's why I feel it's worth preserving,
especially if it can be done automatically.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>For most notes, this day note placement is <em>secondary</em> and their
primary location is somewhere else (e.g. for a book review I've been working
on it's <em>Book / Reviews</em>, not the day note). So for this pattern
to work, ability to <a href="#root/_help_IakOLONlIfGI">clone</a> notes into multiple
places is pretty fundamental.</p>
<h3>Projects</h3>
<p><em>Project</em> is pretty self-explanatory, for me specifically it also
means being long term (years) - an example of a project might be Trilium
Notes or university studies. Given their longevity, projects can be large
and deep, but their structure is very domain specific, and I don't see
any common patterns. What's pretty clear is they are often widely interconnected
with other parts of the knowledge base - e.g. university credentials are
cloned from "Credentials / University" top level notes and Trilium related
blog posts are in "Blog / [Name of the blog] / Trilium".</p>
<p><em>Epics</em> are the same thing as projects, but differ in scope - they
are typically several months long and as such are usually placed into a
year note (e.g. <em>2018 / Epics</em>). Epics are often of work nature (also
cloned into work note) and personal (e.g. currently I have large epic for
moving to a different city).</p>
<p>I don't have a term for short term projects (typically several days long),
but continuing the scrum analogy I might call them <em>story</em>. These
are often placed directly into day notes and manually moved from one day
to another (or place into a month note, e.g. <em>2018 / 11 - November</em>).</p>
<h3>Credentials</h3>
<p>I keep all my credentials in the knowledge base, they are sorted into
categories - work related, project related, personal per country etc. These
notes are of course <a href="#root/_help_bwg0e8ewQMak">protected</a> and are often
cloned into other places (e.g. project credentials are cloned into the
project itself). This is a pretty important advantage compared to traditional
tools like KeePass - all the relevant information is centralized into one
place without compromising security.</p>
<h3>People profiles</h3>
<p>This might seem creepy to some, but I keep a profile on most people. It
contains pretty standard things like date of birth, contacts, address,
but also current and previous employments, their hobbies and worldviews
and sometimes even important (IM/mail/meatspace) conversations. Just about
everything I find notable. It helps to refresh some basic info before meeting
people, especially if you haven't been in touch in a while. It gets pretty
awkward to ask for the tenth time where do they work for example, because
you keep forgetting it.</p>
<p>Naturally I have a lot of (extended) family members, friends, acquaintances
etc. so I need some way to sort them. My main method is to sort them by
social circle (work, high school, sports club etc.), sometimes also by
their town of residence. Family <em>circle</em> is still too large so the
further organization is by <em>clan</em> (as in "Smiths"). Some people are
members of several such circles, so they are just cloned into multiple
places.</p>
<p>For family specifically it's pretty useful to create <a href="#root/_help_iRwzGnHPzonm">relation map</a> to
visualize relationships:</p>
<figure class="image">
<img style="aspect-ratio:941/758;" src="Patterns of personal knowl.png"
width="941" height="758">
</figure>
<p><a class="reference-link" href="#root/_help_lQcnSv5DMSe1">[missing note]</a>
</p>
<h3>Books</h3>
<p>Of course, I keep standard "To read" list. I also keep a record on the
books I've read - typically one book has one subtree where the root has
some basic info like author, page count, publication date, date started,
date finished (in the form of&nbsp;<a class="reference-link" href="#root/_help_OFXdgB2nNk1F">Promoted Attributes</a>).
I also write a (private) review and keep list of highlights from Kindle,
optionally with some commentary, these are usually stored in sub notes
(unless they are pretty short).</p>
<p>To keep the list of books manageable, I sort them per year (of reading
them), this also gives me some basic overview of "reading performance"
for given year. I plan to create a <a href="#root/_help_CdNpE2pqjmI6">script</a> which
would show some timeline chart visualizing book attributes <code>dateStarted</code> - <code>dateFinished</code> to
have nicer view of my reading sprints and trends.</p>
<p>Some specific authors also have their own note which contains cloned book
reviews, links to interviews and other related resources.</p>
<p>I have similar system for movies and TV shows, but not as sophisticated.</p>
<h3>Personal diary</h3>
<p>This is a place to reflect on events, experiences, new findings etc. This
can help you get deeper understanding of your inner self, clarify your
thinking and make better decisions as a result.</p>
<p>I sort personal diary notes directly under <em>day note</em> (explained
above), but it can be cloned also to e.g. "trip note" (if the diary note
is about given trip) or to person's profile (if the person plays a role
in the diary note). All my diary notes are <a href="#root/_help_bwg0e8ewQMak">protected</a> since
they are usually pretty sensitive.</p>
<h3>Documents</h3>
<p>I keep all my personal documents (ID, passport, education certificates
...) scanned in the knowledge base. They are <a href="#root/_help_cbkrhQjrkKrh">synchronized</a> across
every PC which provides decent backup and makes them available everywhere.</p>
<p>Advantage compared to e.g. keeping them in Dropbox or Google Drive is
that they are not stored on some 3rd party server and they can be encrypted
(<a href="#root/_help_bwg0e8ewQMak">protected</a>).</p>
<h3>Inventory</h3>
<p>Inventory contains documents and other relevant importation for my important
belongings - e.g. for car you can keep the registration card, maintenance
record, related costs etc. I also keep inventory for some items personally
important to me - mainly computers, phones, cameras and similar electronics.
This can be practical at times but also provides sentimental value.</p>
<h3>Topic knowledge base</h3>
<p>This where I store hard "knowledge" - summarized topics and findings from
different domains. Topics can range from traditional sciences - physics,
history, economy to philosophy, mental models, apps (notes about specific
apps I use) etc. Of course this is very subjective - given what I do, my
Physics sub-tree is pretty sparse compared to my Programming subtree.</p>
<h3>Work knowledge base</h3>
<p>I usually keep top level note for the company I currently work at (past
jobs are moved elsewhere). I track basic organization of the company (divisions,
business units), who is who (<a href="#root/_help_iRwzGnHPzonm">relation maps</a>)
are again useful for visualization), projects I work at etc.</p>
<p>There's a number of credentials to various company services I need to
use. Companies usually have a bunch of complex processes and tools. I record
meeting minutes, link to the company wiki (which is usually difficult to
find relevant info). In general there's a lot of company specific information
I need to know or need have them at hand in a nice structure I can understand.
Often it's just copy pasting and reshuffling of existing information into
something more understandable for me.</p>
<p>From my experience, keeping this makes me more productive and even more
importantly dramatically reduces frustration and stress.</p>
<h2>Conclusion</h2>
<p>I could probably go on with more patterns (e.g. study notes, travelling),
but I think you get the idea. Whatever is important in your life, it probably
makes sense to document and track it.</p>

View File

@@ -0,0 +1,20 @@
<h3>Trilium Notes</h3>
<p>Trilium Notes does not collect/send any data from the user's installation,
i.e. no analytics, no telemetry etc. The data flows only between user controlled
/ installed applications, without any intermediary.</p>
<p>Automatic network activity consists of:</p>
<ul>
<li>Trilium periodically queries URL <a href="https://github.com/TriliumNext/Trilium/releases">https://github.com/TriliumNext/Trilium/releases</a> to
see if there's a new stable version released. (check only, there's no automatic
download and/or installation).</li>
<li>Trilium will download spelling dictionaries automatically as needed based
on language settings</li>
</ul>
<h3>Trilium Web Clipper</h3>
<p>Trilium Web Clipper does not collect/send any data from the user's installation,
i.e. no analytics, no telemetry etc. The data flows only between user controlled
/ installed applications, without any intermediary.</p>
<h3>Trilium Sender for Android</h3>
<p>Trilium Sender for Android does not collect/send any data from the user's
installation, i.e. no analytics, no telemetry etc. The data flows only
between user controlled / installed applications, without any intermediary.</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 871 B

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 249 B

After

Width:  |  Height:  |  Size: 871 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 219 B

After

Width:  |  Height:  |  Size: 249 B

Some files were not shown because too many files have changed in this diff Show More