diff --git a/!!!meta.json b/!!!meta.json new file mode 100644 index 0000000..ef6ae6b --- /dev/null +++ b/!!!meta.json @@ -0,0 +1,5742 @@ +{ + "formatVersion": 2, + "appVersion": "0.63.6", + "files": [ + { + "noteId": "B1uwZAQD5SQd", + "notePath": [ + "B1uwZAQD5SQd" + ], + "isClone": false, + "title": "Wiki", + "notePosition": 100230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "format": "markdown", + "dirFileName": "Wiki", + "noImport": false, + "attributes": [], + "attachments": [], + "children": [ + { + "noteId": "kh6ExmUBz5Cq", + "notePath": [ + "B1uwZAQD5SQd", + "kh6ExmUBz5Cq" + ], + "isClone": false, + "title": "Advanced showcases", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Advanced showcases.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "e41yyQIFJb0h", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 70 + } + ], + "attachments": [] + }, + { + "noteId": "GzRVfp4HFdNe", + "notePath": [ + "B1uwZAQD5SQd", + "GzRVfp4HFdNe" + ], + "isClone": false, + "title": "Anonymized database", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Anonymized database.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "Nz5ReVCxbzpy", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "6xlCeQKRHt4v", + "notePath": [ + "B1uwZAQD5SQd", + "6xlCeQKRHt4v" + ], + "isClone": false, + "title": "Apache proxy setup", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Apache proxy setup.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "FBRAL6Ep7Ide", + "notePath": [ + "B1uwZAQD5SQd", + "FBRAL6Ep7Ide" + ], + "isClone": false, + "title": "Archived-notes", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Archived-notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "V95V4LPLMjnm", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Tf0cc2e7EESz", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "VN1HmU9w8QZ4", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "PL3OprCaIIqk", + "notePath": [ + "B1uwZAQD5SQd", + "PL3OprCaIIqk" + ], + "isClone": false, + "title": "Attachments", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Attachments.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "V95V4LPLMjnm", + "notePath": [ + "B1uwZAQD5SQd", + "V95V4LPLMjnm" + ], + "isClone": false, + "title": "Attribute inheritance", + "notePosition": 60, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Attribute inheritance.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "FgpyZLk1gtmT", + "notePath": [ + "B1uwZAQD5SQd", + "FgpyZLk1gtmT" + ], + "isClone": false, + "title": "Attributes", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Attributes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "K7xC6ILu8Rqz", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "V95V4LPLMjnm", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Rodu5nL6hhME", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zIoQC9FGzNEm", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Wy75ZIsifoVp", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "v6tx5Ps6En4l", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Fw0tIS0ebqvZ", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "diokwskxxKD0", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bXk2P90IBcmF", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "jgMw7npX4B0M", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "internalLink", + "value": "WCSGqEBlloW7", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Tf0cc2e7EESz", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "internalLink", + "value": "e41yyQIFJb0h", + "isInheritable": false, + "position": 160 + } + ], + "attachments": [] + }, + { + "noteId": "Hllh7YjIur58", + "notePath": [ + "B1uwZAQD5SQd", + "Hllh7YjIur58" + ], + "isClone": false, + "title": "Backup", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Backup.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "BRpnYL7K0hcD", + "notePath": [ + "B1uwZAQD5SQd", + "BRpnYL7K0hcD" + ], + "isClone": false, + "title": "Book note", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Book note.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "OopRUVrrXv3B", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "i1TraI4QJvC0", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "z8tdN5VDib2W", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "v6tx5Ps6En4l", + "notePath": [ + "B1uwZAQD5SQd", + "v6tx5Ps6En4l" + ], + "isClone": false, + "title": "Bookmarks", + "notePosition": 100, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Bookmarks.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "35GPm6qoJWqX", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "XedorAooSPRR", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "1WQf13r8uDEw", + "notePath": [ + "B1uwZAQD5SQd", + "1WQf13r8uDEw" + ], + "isClone": false, + "title": "Canvas-note", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Canvas-note.md", + "noImport": false, + "attributes": [], + "attachments": [ + { + "attachmentId": "4CcgBkDmUO38", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Canvas-note_image.png" + } + ] + }, + { + "noteId": "Bc1qvt05hQEQ", + "notePath": [ + "B1uwZAQD5SQd", + "Bc1qvt05hQEQ" + ], + "isClone": false, + "title": "Cloning notes", + "notePosition": 120, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Cloning notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "9Tyer5XEUfl8", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OudyBkHYeXTR", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "pimEKQkgm5m1", + "notePath": [ + "B1uwZAQD5SQd", + "pimEKQkgm5m1" + ], + "isClone": false, + "title": "Code-notes", + "notePosition": 130, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Code-notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "tU6KGfyvnh4o", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "8wLqZEEbEAtk", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "bXk2P90IBcmF", + "notePath": [ + "B1uwZAQD5SQd", + "bXk2P90IBcmF" + ], + "isClone": false, + "title": "Custom request handler", + "notePosition": 140, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Custom request handler.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AflRbOrrfsID", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "diokwskxxKD0", + "notePath": [ + "B1uwZAQD5SQd", + "diokwskxxKD0" + ], + "isClone": false, + "title": "Custom-widget", + "notePosition": 150, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Custom-widget.md", + "noImport": false, + "attributes": [], + "attachments": [ + { + "attachmentId": "iQC5RWbNptB3", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Custom-widget_image.png" + } + ] + }, + { + "noteId": "RXoLEQNPVGZL", + "notePath": [ + "B1uwZAQD5SQd", + "RXoLEQNPVGZL" + ], + "isClone": false, + "title": "Data-directory", + "notePosition": 160, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Data-directory.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Hllh7YjIur58", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "qxoKOEJyTN8E", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "kL7aVMR4FjHx", + "notePath": [ + "B1uwZAQD5SQd", + "kL7aVMR4FjHx" + ], + "isClone": false, + "title": "Day-notes", + "notePosition": 170, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Day-notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "5eO7WPg0UvBi", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "e41yyQIFJb0h", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [ + { + "attachmentId": "akp7ocRTObE3", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Day-notes_image.png" + } + ] + }, + { + "noteId": "Wy75ZIsifoVp", + "notePath": [ + "B1uwZAQD5SQd", + "Wy75ZIsifoVp" + ], + "isClone": false, + "title": "Default-note-title", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Default-note-title.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "lVEAiuX7wWcO", + "notePath": [ + "B1uwZAQD5SQd", + "lVEAiuX7wWcO" + ], + "isClone": false, + "title": "Desktop-installation", + "notePosition": 190, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Desktop-installation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "1Tt7TgvbRnnS", + "notePath": [ + "B1uwZAQD5SQd", + "1Tt7TgvbRnnS" + ], + "isClone": false, + "title": "Docker-server-installation", + "notePosition": 200, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Docker-server-installation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Vz5yw3WJVDyJ", + "notePath": [ + "B1uwZAQD5SQd", + "Vz5yw3WJVDyJ" + ], + "isClone": false, + "title": "Document", + "notePosition": 210, + "prefix": null, + "isExpanded": true, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Document.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "jgMw7npX4B0M", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "e41yyQIFJb0h", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 70 + } + ], + "attachments": [] + }, + { + "noteId": "4n479xAUupgf", + "notePath": [ + "B1uwZAQD5SQd", + "4n479xAUupgf" + ], + "isClone": false, + "title": "ETAPI", + "notePosition": 220, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "ETAPI.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "mhPWGzxN7r6L", + "notePath": [ + "B1uwZAQD5SQd", + "mhPWGzxN7r6L" + ], + "isClone": false, + "title": "Error-logs", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Error-logs.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "6pwGTJGlzqgR", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "w0c6RyEyUF1h", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "GzRVfp4HFdNe", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "imageLink", + "value": "Cbhmgg10UqNe", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [] + }, + { + "noteId": "zIoQC9FGzNEm", + "notePath": [ + "B1uwZAQD5SQd", + "zIoQC9FGzNEm" + ], + "isClone": false, + "title": "Events", + "notePosition": 240, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Events.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "tsGOxiLyZCIh", + "notePath": [ + "B1uwZAQD5SQd", + "tsGOxiLyZCIh" + ], + "isClone": false, + "title": "Evernote-import", + "notePosition": 250, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Evernote-import.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "vVfhZeCZdgfi", + "notePath": [ + "B1uwZAQD5SQd", + "vVfhZeCZdgfi" + ], + "isClone": false, + "title": "FAQ", + "notePosition": 260, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "FAQ.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "viHDbbVE9wKA", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 70 + } + ], + "attachments": [] + }, + { + "noteId": "J6jhT3D7yXKc", + "notePath": [ + "B1uwZAQD5SQd", + "J6jhT3D7yXKc" + ], + "isClone": false, + "title": "Frontend-Basics", + "notePosition": 270, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Frontend-Basics.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AflRbOrrfsID", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "52imz4MGLfGg", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "KUPw0GltoXvH", + "notePath": [ + "B1uwZAQD5SQd", + "KUPw0GltoXvH" + ], + "isClone": false, + "title": "Home", + "notePosition": 280, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Home.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "lVEAiuX7wWcO", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Dpu7lfiysuCn", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "z8tdN5VDib2W", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Rec7aAUrdss0", + "isInheritable": false, + "position": 60 + } + ], + "attachments": [ + { + "attachmentId": "2O2wJ2vSm3ue", + "title": "button.svg", + "role": "image", + "mime": "image/svg+xml", + "position": 10, + "dataFileName": "Home_button.svg" + } + ] + }, + { + "noteId": "ciYNf5VlY8Ho", + "notePath": [ + "B1uwZAQD5SQd", + "ciYNf5VlY8Ho" + ], + "isClone": false, + "title": "Images", + "notePosition": 290, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Images.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "BmoOqlbwCeKx", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "hv5Fhhi0ztcz", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "PL3OprCaIIqk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xY2pB1vj2Din", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [] + }, + { + "noteId": "OudyBkHYeXTR", + "notePath": [ + "B1uwZAQD5SQd", + "OudyBkHYeXTR" + ], + "isClone": false, + "title": "Keyboard-shortcuts", + "notePosition": 300, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Keyboard-shortcuts.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "YljIwhgeTML8", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yqCKbHeviQNA", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "aIqWEXFQpyti", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Tf0cc2e7EESz", + "isInheritable": false, + "position": 70 + } + ], + "attachments": [] + }, + { + "noteId": "kSjfPCZ5uxyL", + "notePath": [ + "B1uwZAQD5SQd", + "kSjfPCZ5uxyL" + ], + "isClone": false, + "title": "Kubernetes-server-installation", + "notePosition": 310, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Kubernetes-server-installation.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "RRbjSgX1dZvs", + "notePath": [ + "B1uwZAQD5SQd", + "RRbjSgX1dZvs" + ], + "isClone": false, + "title": "Link-map", + "notePosition": 320, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Link-map.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "aIqWEXFQpyti", + "notePath": [ + "B1uwZAQD5SQd", + "aIqWEXFQpyti" + ], + "isClone": false, + "title": "Links", + "notePosition": 330, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Links.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "uGu9hdGZKnkB", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "TEbvcDt2CpId", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "viHDbbVE9wKA", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "2qyVqIwaErI3", + "notePath": [ + "B1uwZAQD5SQd", + "2qyVqIwaErI3" + ], + "isClone": false, + "title": "Manual-server-installation", + "notePosition": 340, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Manual-server-installation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "w0dkLe4UjoUj", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "DKFKeOo6MhQ7", + "notePath": [ + "B1uwZAQD5SQd", + "DKFKeOo6MhQ7" + ], + "isClone": false, + "title": "Markdown", + "notePosition": 350, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Markdown.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "Y0eZPZ83EzKl", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "k9bBzgYd9G64", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "sxD7eWlt5YIU", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "AtphKMEUTNNJ", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "Dpu7lfiysuCn", + "notePath": [ + "B1uwZAQD5SQd", + "Dpu7lfiysuCn" + ], + "isClone": false, + "title": "Mobile-frontend", + "notePosition": 360, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Mobile-frontend.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "LvH5LAl8XuzR", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "zXXpN9sIPiTk", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "jZjsCPtTA89h", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [] + }, + { + "noteId": "Xp4L70WrNEuL", + "notePath": [ + "B1uwZAQD5SQd", + "Xp4L70WrNEuL" + ], + "isClone": false, + "title": "Nginx-proxy-setup", + "notePosition": 370, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Nginx-proxy-setup.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "1L4blowcXnBQ", + "notePath": [ + "B1uwZAQD5SQd", + "1L4blowcXnBQ" + ], + "isClone": false, + "title": "NixOS-server-installation", + "notePosition": 380, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "NixOS-server-installation.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "QExHpjOkv4uR", + "notePath": [ + "B1uwZAQD5SQd", + "QExHpjOkv4uR" + ], + "isClone": false, + "title": "Note hoisting", + "notePosition": 390, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Note hoisting.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Fw0tIS0ebqvZ", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "YljIwhgeTML8", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "CFCnTNUTWzSY", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "viHDbbVE9wKA", + "notePath": [ + "B1uwZAQD5SQd", + "viHDbbVE9wKA" + ], + "isClone": false, + "title": "Note map", + "notePosition": 400, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Note map.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "wD1SmlhieKZF", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "vvSmMuYBQLoH", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "YljIwhgeTML8", + "notePath": [ + "B1uwZAQD5SQd", + "YljIwhgeTML8" + ], + "isClone": false, + "title": "Note navigation", + "notePosition": 410, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Note navigation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "V1oIMpgWDre3", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "FlNqQoEnN7tc", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "5JAvLPMcEWnb", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "azAHB7oGR6Vo", + "notePath": [ + "B1uwZAQD5SQd", + "azAHB7oGR6Vo" + ], + "isClone": false, + "title": "Note revisions", + "notePosition": 420, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Note revisions.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "uucFLBUI87SU", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "z8tdN5VDib2W", + "notePath": [ + "B1uwZAQD5SQd", + "z8tdN5VDib2W" + ], + "isClone": false, + "title": "Note", + "notePosition": 430, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Note.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "yqCKbHeviQNA", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qbPFPtedodl1", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "BRpnYL7K0hcD", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "1WQf13r8uDEw", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Hllh7YjIur58", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "opsTDBYIo1y8", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 100 + } + ], + "attachments": [] + }, + { + "noteId": "gqzOuDGeA5tR", + "notePath": [ + "B1uwZAQD5SQd", + "gqzOuDGeA5tR" + ], + "isClone": false, + "title": "Onenote", + "notePosition": 440, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Onenote.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "NQqx77k681c9", + "notePath": [ + "B1uwZAQD5SQd", + "NQqx77k681c9" + ], + "isClone": false, + "title": "Packaged server installation", + "notePosition": 450, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Packaged server installation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "w0dkLe4UjoUj", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "qNnEkTzAUSd5", + "notePath": [ + "B1uwZAQD5SQd", + "qNnEkTzAUSd5" + ], + "isClone": false, + "title": "Patterns-of-personal-knowledge-base", + "notePosition": 460, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Patterns-of-personal-knowledge.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "TLJG2ADwU8DS", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "5qG7Hrb1tm2P", + "notePath": [ + "B1uwZAQD5SQd", + "5qG7Hrb1tm2P" + ], + "isClone": false, + "title": "Privacy-policy", + "notePosition": 470, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Privacy-policy.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "B2h3F4lYqpba", + "notePath": [ + "B1uwZAQD5SQd", + "B2h3F4lYqpba" + ], + "isClone": false, + "title": "Promoted attributes", + "notePosition": 480, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Promoted attributes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "pR7hktRs96D9", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "vu84xHzMpzYh", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "V95V4LPLMjnm", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "jZjsCPtTA89h", + "notePath": [ + "B1uwZAQD5SQd", + "jZjsCPtTA89h" + ], + "isClone": false, + "title": "Protected-notes", + "notePosition": 490, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Protected-notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "RqrNb0OmJU7X", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "opsTDBYIo1y8", + "notePath": [ + "B1uwZAQD5SQd", + "opsTDBYIo1y8" + ], + "isClone": false, + "title": "Read only note", + "notePosition": 500, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Read only note.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "yqCKbHeviQNA", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "LYqMgTTO1kmB", + "notePath": [ + "B1uwZAQD5SQd", + "LYqMgTTO1kmB" + ], + "isClone": false, + "title": "Relation-map", + "notePosition": 510, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Relation-map.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "KpPfbbl50829", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "YvZXSKH0Ws6C", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xY2pB1vj2Din", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "imageLink", + "value": "TLJG2ADwU8DS", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "imageLink", + "value": "BPBOOfez2Wm5", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "viHDbbVE9wKA", + "isInheritable": false, + "position": 90 + } + ], + "attachments": [] + }, + { + "noteId": "kIcwQQS1YV8s", + "notePath": [ + "B1uwZAQD5SQd", + "kIcwQQS1YV8s" + ], + "isClone": false, + "title": "Release notes v0.48", + "notePosition": 520, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Release notes v0.48.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "IKNKQLr73XOb", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "0GV4Q1Atx50a", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "NKS9XVOQxbeR", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "1IQhyrS5Bhyq", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "uc86DbSi388E", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "qbPFPtedodl1", + "notePath": [ + "B1uwZAQD5SQd", + "qbPFPtedodl1" + ], + "isClone": false, + "title": "Saved-search", + "notePosition": 530, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Saved-search.md", + "noImport": false, + "attributes": [], + "attachments": [ + { + "attachmentId": "FIMTZeinSKFe", + "title": "image.gif", + "role": "image", + "mime": "image/gif", + "position": 10, + "dataFileName": "Saved-search_image.gif" + } + ] + }, + { + "noteId": "Rec7aAUrdss0", + "notePath": [ + "B1uwZAQD5SQd", + "Rec7aAUrdss0" + ], + "isClone": false, + "title": "Screenshot tour", + "notePosition": 540, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Screenshot tour.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "Wtb17bzq5kR1", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "n1j7DOyMvZFd", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "jgMw7npX4B0M", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "tU6KGfyvnh4o", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "imageLink", + "value": "Ja1W0HDp7Evr", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "imageLink", + "value": "TLJG2ADwU8DS", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "imageLink", + "value": "vvSmMuYBQLoH", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RRbjSgX1dZvs", + "isInheritable": false, + "position": 110 + }, + { + "type": "relation", + "name": "imageLink", + "value": "5eO7WPg0UvBi", + "isInheritable": false, + "position": 120 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 130 + }, + { + "type": "relation", + "name": "imageLink", + "value": "Nc1DcsUbzN4c", + "isInheritable": false, + "position": 140 + }, + { + "type": "relation", + "name": "internalLink", + "value": "e41yyQIFJb0h", + "isInheritable": false, + "position": 150 + }, + { + "type": "relation", + "name": "imageLink", + "value": "fzRYCnCZKt7a", + "isInheritable": false, + "position": 160 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 170 + }, + { + "type": "relation", + "name": "imageLink", + "value": "uucFLBUI87SU", + "isInheritable": false, + "position": 180 + }, + { + "type": "relation", + "name": "internalLink", + "value": "azAHB7oGR6Vo", + "isInheritable": false, + "position": 190 + }, + { + "type": "relation", + "name": "imageLink", + "value": "LvH5LAl8XuzR", + "isInheritable": false, + "position": 200 + }, + { + "type": "relation", + "name": "imageLink", + "value": "zXXpN9sIPiTk", + "isInheritable": false, + "position": 220 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Dpu7lfiysuCn", + "isInheritable": false, + "position": 230 + } + ], + "attachments": [] + }, + { + "noteId": "AflRbOrrfsID", + "notePath": [ + "B1uwZAQD5SQd", + "AflRbOrrfsID" + ], + "isClone": false, + "title": "Script API", + "notePosition": 550, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Script API.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "F7XaE3s6G7dq", + "notePath": [ + "B1uwZAQD5SQd", + "F7XaE3s6G7dq" + ], + "isClone": false, + "title": "Scripts", + "notePosition": 560, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Scripts.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AflRbOrrfsID", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "aA4BDddWAS07", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kh6ExmUBz5Cq", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zIoQC9FGzNEm", + "isInheritable": false, + "position": 70 + } + ], + "attachments": [] + }, + { + "noteId": "Tf0cc2e7EESz", + "notePath": [ + "B1uwZAQD5SQd", + "Tf0cc2e7EESz" + ], + "isClone": false, + "title": "Search", + "notePosition": 570, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Search.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "OudyBkHYeXTR", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "qbPFPtedodl1", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "11AvHlZHxK9a", + "notePath": [ + "B1uwZAQD5SQd", + "11AvHlZHxK9a" + ], + "isClone": false, + "title": "Server-installation", + "notePosition": 580, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Server-installation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "1Tt7TgvbRnnS", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "NQqx77k681c9", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "2qyVqIwaErI3", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kSjfPCZ5uxyL", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "1L4blowcXnBQ", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Dpu7lfiysuCn", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "w0dkLe4UjoUj", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "6xlCeQKRHt4v", + "isInheritable": false, + "position": 110 + } + ], + "attachments": [] + }, + { + "noteId": "Rodu5nL6hhME", + "notePath": [ + "B1uwZAQD5SQd", + "Rodu5nL6hhME" + ], + "isClone": false, + "title": "Sharing", + "notePosition": 590, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Sharing.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "kBm0GG4thG8E", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "UPVyQSR1duQC", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "laeDtAj5VypU", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "imageLink", + "value": "MTm3GhriQqS8", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 60 + } + ], + "attachments": [] + }, + { + "noteId": "WCSGqEBlloW7", + "notePath": [ + "B1uwZAQD5SQd", + "WCSGqEBlloW7" + ], + "isClone": false, + "title": "Sorting", + "notePosition": 600, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Sorting.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "7XdBqeK1kCcE", + "notePath": [ + "B1uwZAQD5SQd", + "7XdBqeK1kCcE" + ], + "isClone": false, + "title": "Synchronization", + "notePosition": 610, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Synchronization.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "Vy3l286PfXgK", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "oBLNSRRSA89b", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "tjXU2i0orP7C", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "imageLink", + "value": "xpP3JFMFHIbS", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "azAHB7oGR6Vo", + "isInheritable": false, + "position": 60 + } + ], + "attachments": [] + }, + { + "noteId": "w0dkLe4UjoUj", + "notePath": [ + "B1uwZAQD5SQd", + "w0dkLe4UjoUj" + ], + "isClone": false, + "title": "TLS-configuration", + "notePosition": 620, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "TLS-configuration.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "3Pd3O6bf5QV8", + "notePath": [ + "B1uwZAQD5SQd", + "3Pd3O6bf5QV8" + ], + "isClone": false, + "title": "Task-manager", + "notePosition": 630, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Task-manager.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "fzRYCnCZKt7a", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "xY2pB1vj2Din", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "V95V4LPLMjnm", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "zIoQC9FGzNEm", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 110 + } + ], + "attachments": [] + }, + { + "noteId": "cHK4UywywEeA", + "notePath": [ + "B1uwZAQD5SQd", + "cHK4UywywEeA" + ], + "isClone": false, + "title": "Template", + "notePosition": 640, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Template.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "2dbgV4vqc2nD", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "V88V0A5eitLc", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "V95V4LPLMjnm", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Fw0tIS0ebqvZ", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "LYqMgTTO1kmB", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Wy75ZIsifoVp", + "isInheritable": false, + "position": 100 + } + ], + "attachments": [] + }, + { + "noteId": "yqCKbHeviQNA", + "notePath": [ + "B1uwZAQD5SQd", + "yqCKbHeviQNA" + ], + "isClone": false, + "title": "Text-notes", + "notePosition": 650, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Text-notes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "vDLTW1CQH9mV", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "imageLink", + "value": "bZOXGTdsZSF7", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "rlPsaFWPfG3p", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "imageLink", + "value": "aCormOajMfkS", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "imageLink", + "value": "0uIZG9uuICk0", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [ + { + "attachmentId": "7R2Do0Jo3KF3", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Text-notes_image.png" + } + ] + }, + { + "noteId": "EtLQuoEQwyX7", + "notePath": [ + "B1uwZAQD5SQd", + "EtLQuoEQwyX7" + ], + "isClone": false, + "title": "Theme-Gallery", + "notePosition": 660, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Theme-Gallery.md", + "noImport": false, + "attributes": [], + "attachments": [ + { + "attachmentId": "AhwFwy0ppHK2", + "title": "screenshot2.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Theme-Gallery_screenshot2.png" + }, + { + "attachmentId": "S2zkmtw1kyV2", + "title": "trilium-velvet2.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_trilium-velvet2." + }, + { + "attachmentId": "kYUTwxGuFFy1", + "title": "Screenshot.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_Screenshot.png" + }, + { + "attachmentId": "sp7AJsZNSKxE", + "title": "bear-dark.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_bear-dark.png" + }, + { + "attachmentId": "tv0va6a7bUZW", + "title": "bear-white.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_bear-white.png" + }, + { + "attachmentId": "w0BAGcSizr34", + "title": "Trilium_theme_coder_dark.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_Trilium_theme_co.png" + }, + { + "attachmentId": "84o1b3L6hXDZ", + "title": "midnight.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_midnight.png" + }, + { + "attachmentId": "HZYdIZ5mEQaz", + "title": "Neon_Dark_Demo_v3.jpg", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Theme-Gallery_Neon_Dark_Demo_v.jpg" + }, + { + "attachmentId": "eNu20lieSWhK", + "title": "screenshot1.png", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Theme-Gallery_screenshot1.png" + }, + { + "attachmentId": "7lqCBTPebQ2e", + "title": "lightslategray.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_lightslategray.p" + }, + { + "attachmentId": "htipT1Dv1vtW", + "title": "scrn4_01.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_scrn4_01.png" + }, + { + "attachmentId": "G5xgQk2yuIMV", + "title": "preview.jpg", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Theme-Gallery_preview.jpg" + }, + { + "attachmentId": "bcEyjcaaFni6", + "title": "image.jpg", + "role": "image", + "mime": "image/jpg", + "position": 10, + "dataFileName": "Theme-Gallery_image.jpg" + }, + { + "attachmentId": "LJyD8KxFpMDv", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Theme-Gallery_image.png" + }, + { + "attachmentId": "zGHiZQ3wCBpD", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Theme-Gallery_image.png" + }, + { + "attachmentId": "Q907lRBuEcha", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "2_Theme-Gallery_image.png" + } + ] + }, + { + "noteId": "jgMw7npX4B0M", + "notePath": [ + "B1uwZAQD5SQd", + "jgMw7npX4B0M" + ], + "isClone": false, + "title": "Themes", + "notePosition": 670, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Themes.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "n1j7DOyMvZFd", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "bXk2P90IBcmF", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "imageLink", + "value": "pJU2qdCt4OBA", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "imageLink", + "value": "3BQhpLDwZUoT", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "3Pd3O6bf5QV8", + "isInheritable": false, + "position": 90 + }, + { + "type": "relation", + "name": "internalLink", + "value": "EtLQuoEQwyX7", + "isInheritable": false, + "position": 100 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 110 + } + ], + "attachments": [] + }, + { + "noteId": "xY2pB1vj2Din", + "notePath": [ + "B1uwZAQD5SQd", + "xY2pB1vj2Din" + ], + "isClone": false, + "title": "Tree concepts", + "notePosition": 680, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Tree concepts.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "z8tdN5VDib2W", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Bc1qvt05hQEQ", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "Yyo3Ff2HeiJO", + "notePath": [ + "B1uwZAQD5SQd", + "Yyo3Ff2HeiJO" + ], + "isClone": false, + "title": "Tree manipulation", + "notePosition": 690, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Tree manipulation.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "imageLink", + "value": "6uEnNED6hEle", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "OudyBkHYeXTR", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "imageLink", + "value": "sMGqNXeoA9yK", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [] + }, + { + "noteId": "BqUsnX5gx83T", + "notePath": [ + "B1uwZAQD5SQd", + "BqUsnX5gx83T" + ], + "isClone": false, + "title": "Troubleshooting", + "notePosition": 700, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Troubleshooting.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "mhPWGzxN7r6L", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "diokwskxxKD0", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Hllh7YjIur58", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "RXoLEQNPVGZL", + "isInheritable": false, + "position": 50 + } + ], + "attachments": [] + }, + { + "noteId": "rxJpzAAtGSKi", + "notePath": [ + "B1uwZAQD5SQd", + "rxJpzAAtGSKi" + ], + "isClone": false, + "title": "Upgrading Trilium", + "notePosition": 710, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Upgrading Trilium.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "7XdBqeK1kCcE", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Hllh7YjIur58", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "1Tt7TgvbRnnS", + "isInheritable": false, + "position": 40 + } + ], + "attachments": [] + }, + { + "noteId": "nNtE2n7C9ksa", + "notePath": [ + "B1uwZAQD5SQd", + "nNtE2n7C9ksa" + ], + "isClone": false, + "title": "Web-clipper", + "notePosition": 720, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Web-clipper.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "11AvHlZHxK9a", + "isInheritable": false, + "position": 30 + } + ], + "attachments": [ + { + "attachmentId": "jGdl52Y14S76", + "title": "chrome-trilium-web-clipper.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Web-clipper_chrome-trilium-web.png" + } + ] + }, + { + "noteId": "e41yyQIFJb0h", + "notePath": [ + "B1uwZAQD5SQd", + "e41yyQIFJb0h" + ], + "isClone": false, + "title": "Weight-tracker", + "notePosition": 730, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Weight-tracker.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "AflRbOrrfsID", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "Vz5yw3WJVDyJ", + "isInheritable": false, + "position": 20 + }, + { + "type": "relation", + "name": "internalLink", + "value": "kL7aVMR4FjHx", + "isInheritable": false, + "position": 30 + }, + { + "type": "relation", + "name": "internalLink", + "value": "B2h3F4lYqpba", + "isInheritable": false, + "position": 40 + }, + { + "type": "relation", + "name": "internalLink", + "value": "cHK4UywywEeA", + "isInheritable": false, + "position": 50 + }, + { + "type": "relation", + "name": "imageLink", + "value": "Nc1DcsUbzN4c", + "isInheritable": false, + "position": 60 + }, + { + "type": "relation", + "name": "internalLink", + "value": "F7XaE3s6G7dq", + "isInheritable": false, + "position": 70 + }, + { + "type": "relation", + "name": "internalLink", + "value": "FgpyZLk1gtmT", + "isInheritable": false, + "position": 80 + }, + { + "type": "relation", + "name": "internalLink", + "value": "pimEKQkgm5m1", + "isInheritable": false, + "position": 90 + } + ], + "attachments": [] + }, + { + "noteId": "52imz4MGLfGg", + "notePath": [ + "B1uwZAQD5SQd", + "52imz4MGLfGg" + ], + "isClone": false, + "title": "Widget-Basics", + "notePosition": 740, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Widget-Basics.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "J6jhT3D7yXKc", + "isInheritable": false, + "position": 10 + }, + { + "type": "relation", + "name": "internalLink", + "value": "AflRbOrrfsID", + "isInheritable": false, + "position": 20 + } + ], + "attachments": [] + }, + { + "noteId": "Fw0tIS0ebqvZ", + "notePath": [ + "B1uwZAQD5SQd", + "Fw0tIS0ebqvZ" + ], + "isClone": false, + "title": "Workspace", + "notePosition": 750, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Workspace.md", + "noImport": false, + "attributes": [ + { + "type": "relation", + "name": "internalLink", + "value": "QExHpjOkv4uR", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [ + { + "attachmentId": "ZumTo3S5S5ZW", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "Workspace_image.png" + }, + { + "attachmentId": "DQKg2mlmSBgG", + "title": "image.png", + "role": "image", + "mime": "image/png", + "position": 10, + "dataFileName": "1_Workspace_image.png" + } + ] + }, + { + "noteId": "5pstHh8iMeRm", + "notePath": [ + "B1uwZAQD5SQd", + "5pstHh8iMeRm" + ], + "isClone": false, + "title": "Footer", + "notePosition": 760, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/markdown", + "format": "markdown", + "dataFileName": "Footer.md", + "noImport": false, + "attributes": [], + "attachments": [] + }, + { + "noteId": "xX8OwHoKg1JC", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC" + ], + "isClone": false, + "title": "gifs", + "notePosition": 780, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "format": "markdown", + "dirFileName": "gifs", + "noImport": false, + "attributes": [], + "attachments": [], + "children": [ + { + "noteId": "rlPsaFWPfG3p", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "rlPsaFWPfG3p" + ], + "isClone": false, + "title": "autoformat.gif", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "autoformat.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "autoformat.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "V1oIMpgWDre3", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "V1oIMpgWDre3" + ], + "isClone": false, + "title": "back-and-forwards.gif", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "back-and-forwards.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "back-and-forwards.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "35GPm6qoJWqX", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "35GPm6qoJWqX" + ], + "isClone": false, + "title": "bookmarks.gif", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "bookmarks.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "bookmarks.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "9Tyer5XEUfl8", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "9Tyer5XEUfl8" + ], + "isClone": false, + "title": "create-clone.gif", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "create-clone.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "create-clone.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "uGu9hdGZKnkB", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "uGu9hdGZKnkB" + ], + "isClone": false, + "title": "create-external-link.gif", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "create-external-link.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "create-external-link.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "TEbvcDt2CpId", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "TEbvcDt2CpId" + ], + "isClone": false, + "title": "create-link-to-note.gif", + "notePosition": 60, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "create-link-to-note.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "create-link-to-note.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "0uIZG9uuICk0", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "0uIZG9uuICk0" + ], + "isClone": false, + "title": "cut-to-subnote.gif", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "cut-to-subnote.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "cut-to-subnote.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "6uEnNED6hEle", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "6uEnNED6hEle" + ], + "isClone": false, + "title": "drag-and-drop.gif", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "drag-and-drop.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "drag-and-drop.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "FlNqQoEnN7tc", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "FlNqQoEnN7tc" + ], + "isClone": false, + "title": "jump-to.gif", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "jump-to.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "jump-to.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "AtphKMEUTNNJ", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "AtphKMEUTNNJ" + ], + "isClone": false, + "title": "markdown-export-note.gif", + "notePosition": 100, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "markdown-export-note.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "markdown-export-note.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "sxD7eWlt5YIU", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "sxD7eWlt5YIU" + ], + "isClone": false, + "title": "markdown-export-subtree.gif", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "markdown-export-subtree.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "markdown-export-subtree.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "k9bBzgYd9G64", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "k9bBzgYd9G64" + ], + "isClone": false, + "title": "markdown-file-import.gif", + "notePosition": 120, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "markdown-file-import.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "markdown-file-import.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Y0eZPZ83EzKl", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "Y0eZPZ83EzKl" + ], + "isClone": false, + "title": "markdown-inline-import.gif", + "notePosition": 130, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "markdown-inline-import.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "markdown-inline-import.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "aCormOajMfkS", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "aCormOajMfkS" + ], + "isClone": false, + "title": "math.gif", + "notePosition": 140, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "math.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "math.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "sMGqNXeoA9yK", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "sMGqNXeoA9yK" + ], + "isClone": false, + "title": "move-note-with-keyboard.gif", + "notePosition": 150, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "move-note-with-keyboard.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "move-note-with-keyboard.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "CFCnTNUTWzSY", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "CFCnTNUTWzSY" + ], + "isClone": false, + "title": "note-hoisting.gif", + "notePosition": 160, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "note-hoisting.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "note-hoisting.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "RqrNb0OmJU7X", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "RqrNb0OmJU7X" + ], + "isClone": false, + "title": "protecting-note.gif", + "notePosition": 170, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "protecting-note.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "protecting-note.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "5JAvLPMcEWnb", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "5JAvLPMcEWnb" + ], + "isClone": false, + "title": "recent-notes.gif", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "recent-notes.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "recent-notes.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "YvZXSKH0Ws6C", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "YvZXSKH0Ws6C" + ], + "isClone": false, + "title": "relation-map-dev-process-demo.gif", + "notePosition": 190, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "relation-map-dev-process-demo.", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "relation-map-dev-process-demo.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "BPBOOfez2Wm5", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "BPBOOfez2Wm5" + ], + "isClone": false, + "title": "relation-map-family-demo.gif", + "notePosition": 200, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "relation-map-family-demo.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "relation-map-family-demo.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "TEnnhSMjxPi6", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "TEnnhSMjxPi6" + ], + "isClone": false, + "title": "saved-search.gif", + "notePosition": 210, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "saved-search.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "saved-search.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "BmoOqlbwCeKx", + "notePath": [ + "B1uwZAQD5SQd", + "xX8OwHoKg1JC", + "BmoOqlbwCeKx" + ], + "isClone": false, + "title": "upload-image.gif", + "notePosition": 220, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/gif", + "dataFileName": "upload-image.gif", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "upload-image.gif", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + } + ] + }, + { + "noteId": "YphvzCwdxEcz", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz" + ], + "isClone": false, + "title": "images", + "notePosition": 790, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "format": "markdown", + "dirFileName": "images", + "noImport": false, + "attributes": [], + "attachments": [], + "children": [ + { + "noteId": "qxoKOEJyTN8E", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "qxoKOEJyTN8E" + ], + "isClone": false, + "title": "about-trilium-data-dir.png", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "about-trilium-data-dir.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "about-trilium-data-dir.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Nz5ReVCxbzpy", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Nz5ReVCxbzpy" + ], + "isClone": false, + "title": "anonymization.png", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "anonymization.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "anonymization.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "3BQhpLDwZUoT", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "3BQhpLDwZUoT" + ], + "isClone": false, + "title": "app-css.png", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "app-css.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "app-css.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "vu84xHzMpzYh", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "vu84xHzMpzYh" + ], + "isClone": false, + "title": "attribute-definitions.png", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "attribute-definitions.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "attribute-definitions.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "K7xC6ILu8Rqz", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "K7xC6ILu8Rqz" + ], + "isClone": false, + "title": "attributes.png", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "attributes.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "attributes.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "hv5Fhhi0ztcz", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "hv5Fhhi0ztcz" + ], + "isClone": false, + "title": "block-toolbar-insert-image.png", + "notePosition": 60, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "block-toolbar-insert-image.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "block-toolbar-insert-image.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "i1TraI4QJvC0", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "i1TraI4QJvC0" + ], + "isClone": false, + "title": "book-note-pictures.png", + "notePosition": 70, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "book-note-pictures.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "book-note-pictures.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "OopRUVrrXv3B", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "OopRUVrrXv3B" + ], + "isClone": false, + "title": "book-note.png", + "notePosition": 80, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "book-note.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "book-note.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "XedorAooSPRR", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "XedorAooSPRR" + ], + "isClone": false, + "title": "bookmark-folder.png", + "notePosition": 90, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "bookmark-folder.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "bookmark-folder.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "aA4BDddWAS07", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "aA4BDddWAS07" + ], + "isClone": false, + "title": "button-script.png", + "notePosition": 100, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "button-script.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "button-script.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "rfYqMs3MYFQ6", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "rfYqMs3MYFQ6" + ], + "isClone": false, + "title": "chrome-trilium-web-clipper.png", + "notePosition": 110, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "chrome-trilium-web-clipper.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "chrome-trilium-web-clipper.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "8wLqZEEbEAtk", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "8wLqZEEbEAtk" + ], + "isClone": false, + "title": "code-block.png", + "notePosition": 120, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "code-block.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "code-block.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "tU6KGfyvnh4o", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "tU6KGfyvnh4o" + ], + "isClone": false, + "title": "code-note.png", + "notePosition": 130, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "code-note.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "code-note.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "n1j7DOyMvZFd", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "n1j7DOyMvZFd" + ], + "isClone": false, + "title": "dark-theme.png", + "notePosition": 140, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "dark-theme.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "dark-theme.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "5eO7WPg0UvBi", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "5eO7WPg0UvBi" + ], + "isClone": false, + "title": "day-notes.png", + "notePosition": 150, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "day-notes.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "day-notes.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "w0c6RyEyUF1h", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "w0c6RyEyUF1h" + ], + "isClone": false, + "title": "error-logs-dev-tools.png", + "notePosition": 160, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "error-logs-dev-tools.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "error-logs-dev-tools.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Cbhmgg10UqNe", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Cbhmgg10UqNe" + ], + "isClone": false, + "title": "error-logs-export-subtree.png", + "notePosition": 170, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "error-logs-export-subtree.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "error-logs-export-subtree.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "6pwGTJGlzqgR", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "6pwGTJGlzqgR" + ], + "isClone": false, + "title": "error-logs-firefox-context-menu.png", + "notePosition": 180, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "error-logs-firefox-context-men.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "error-logs-firefox-context-menu.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "vvSmMuYBQLoH", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "vvSmMuYBQLoH" + ], + "isClone": false, + "title": "link-map.png", + "notePosition": 190, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "link-map.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "link-map.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "LvH5LAl8XuzR", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "LvH5LAl8XuzR" + ], + "isClone": false, + "title": "mobile-smartphone.png", + "notePosition": 200, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "mobile-smartphone.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "mobile-smartphone.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "zXXpN9sIPiTk", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "zXXpN9sIPiTk" + ], + "isClone": false, + "title": "mobile-tablet.png", + "notePosition": 210, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "mobile-tablet.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "mobile-tablet.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "uucFLBUI87SU", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "uucFLBUI87SU" + ], + "isClone": false, + "title": "note-revisions.png", + "notePosition": 220, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "note-revisions.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "note-revisions.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Ja1W0HDp7Evr", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Ja1W0HDp7Evr" + ], + "isClone": false, + "title": "promoted-attributes-queen.png", + "notePosition": 230, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "promoted-attributes-queen.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "promoted-attributes-queen.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "pR7hktRs96D9", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "pR7hktRs96D9" + ], + "isClone": false, + "title": "promoted-attributes.png", + "notePosition": 240, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "promoted-attributes.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "promoted-attributes.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "KpPfbbl50829", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "KpPfbbl50829" + ], + "isClone": false, + "title": "relation-map-dev-process.png", + "notePosition": 250, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "relation-map-dev-process.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "relation-map-dev-process.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "TLJG2ADwU8DS", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "TLJG2ADwU8DS" + ], + "isClone": false, + "title": "relation-map-family.png", + "notePosition": 260, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "relation-map-family.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "relation-map-family.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Wtb17bzq5kR1", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Wtb17bzq5kR1" + ], + "isClone": false, + "title": "screenshot.png", + "notePosition": 270, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "screenshot.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "screenshot.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "laeDtAj5VypU", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "laeDtAj5VypU" + ], + "isClone": false, + "title": "share-multiple-notes-web.png", + "notePosition": 280, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "share-multiple-notes-web.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "share-multiple-notes-web.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "UPVyQSR1duQC", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "UPVyQSR1duQC" + ], + "isClone": false, + "title": "share-single-note-web.png", + "notePosition": 290, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "share-single-note-web.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "share-single-note-web.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "kBm0GG4thG8E", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "kBm0GG4thG8E" + ], + "isClone": false, + "title": "share-single-note.png", + "notePosition": 300, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "share-single-note.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "share-single-note.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "MTm3GhriQqS8", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "MTm3GhriQqS8" + ], + "isClone": false, + "title": "shared-list.png", + "notePosition": 310, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "shared-list.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "shared-list.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Vy3l286PfXgK", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Vy3l286PfXgK" + ], + "isClone": false, + "title": "star-topology.png", + "notePosition": 320, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "star-topology.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "star-topology.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "pJU2qdCt4OBA", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "pJU2qdCt4OBA" + ], + "isClone": false, + "title": "steel-blue.png", + "notePosition": 330, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "steel-blue.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "steel-blue.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "oBLNSRRSA89b", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "oBLNSRRSA89b" + ], + "isClone": false, + "title": "sync-config.png", + "notePosition": 340, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "sync-config.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "sync-config.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "xpP3JFMFHIbS", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "xpP3JFMFHIbS" + ], + "isClone": false, + "title": "sync-in-progress.png", + "notePosition": 350, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "sync-in-progress.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "sync-in-progress.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "tjXU2i0orP7C", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "tjXU2i0orP7C" + ], + "isClone": false, + "title": "sync-init.png", + "notePosition": 360, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "sync-init.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "sync-init.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "fzRYCnCZKt7a", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "fzRYCnCZKt7a" + ], + "isClone": false, + "title": "task-manager.png", + "notePosition": 370, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "task-manager.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "task-manager.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "V88V0A5eitLc", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "V88V0A5eitLc" + ], + "isClone": false, + "title": "template-create-instance-note.png", + "notePosition": 380, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "template-create-instance-note.", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "template-create-instance-note.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "2dbgV4vqc2nD", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "2dbgV4vqc2nD" + ], + "isClone": false, + "title": "template.png", + "notePosition": 390, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "template.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "template.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "bZOXGTdsZSF7", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "bZOXGTdsZSF7" + ], + "isClone": false, + "title": "text-notes-formatting-block.png", + "notePosition": 400, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "text-notes-formatting-block.pn", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "text-notes-formatting-block.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "vDLTW1CQH9mV", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "vDLTW1CQH9mV" + ], + "isClone": false, + "title": "text-notes-formatting-inline.png", + "notePosition": 410, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "text-notes-formatting-inline.p", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "text-notes-formatting-inline.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "wD1SmlhieKZF", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "wD1SmlhieKZF" + ], + "isClone": false, + "title": "tree-map.png", + "notePosition": 420, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "tree-map.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "tree-map.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "Nc1DcsUbzN4c", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "Nc1DcsUbzN4c" + ], + "isClone": false, + "title": "weight-tracker.png", + "notePosition": 430, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "weight-tracker.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "weight-tracker.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "VN1HmU9w8QZ4", + "notePath": [ + "B1uwZAQD5SQd", + "YphvzCwdxEcz", + "VN1HmU9w8QZ4" + ], + "isClone": false, + "title": "hide-archived.png", + "notePosition": 440, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "hide-archived.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "hide-archived.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + } + ] + }, + { + "noteId": "F5ZJCRaisYX9", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9" + ], + "isClone": false, + "title": "relnotes48", + "notePosition": 800, + "prefix": null, + "isExpanded": false, + "type": "text", + "mime": "text/html", + "format": "markdown", + "dirFileName": "relnotes48", + "noImport": false, + "attributes": [], + "attachments": [], + "children": [ + { + "noteId": "uc86DbSi388E", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9", + "uc86DbSi388E" + ], + "isClone": false, + "title": "bookmarks.png", + "notePosition": 10, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "bookmarks.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "bookmarks.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "1IQhyrS5Bhyq", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9", + "1IQhyrS5Bhyq" + ], + "isClone": false, + "title": "mermaid.png", + "notePosition": 20, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "mermaid.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "mermaid.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "NKS9XVOQxbeR", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9", + "NKS9XVOQxbeR" + ], + "isClone": false, + "title": "note-map.png", + "notePosition": 30, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "note-map.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "note-map.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "IKNKQLr73XOb", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9", + "IKNKQLr73XOb" + ], + "isClone": false, + "title": "screenshot.png", + "notePosition": 40, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "screenshot.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "screenshot.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + }, + { + "noteId": "0GV4Q1Atx50a", + "notePath": [ + "B1uwZAQD5SQd", + "F5ZJCRaisYX9", + "0GV4Q1Atx50a" + ], + "isClone": false, + "title": "split.png", + "notePosition": 50, + "prefix": null, + "isExpanded": false, + "type": "image", + "mime": "image/png", + "dataFileName": "split.png", + "noImport": false, + "attributes": [ + { + "type": "label", + "name": "originalFileName", + "value": "split.png", + "isInheritable": false, + "position": 10 + } + ], + "attachments": [] + } + ] + } + ] + } + ] +} \ No newline at end of file diff --git a/.gitignore b/.gitignore deleted file mode 100644 index d19812c..0000000 --- a/.gitignore +++ /dev/null @@ -1 +0,0 @@ -.idea/** \ No newline at end of file diff --git a/Advanced showcases.md b/Advanced showcases.md deleted file mode 100644 index 7614d34..0000000 --- a/Advanced showcases.md +++ /dev/null @@ -1,8 +0,0 @@ -Trilium provides some advanced functionality in the form of [[Scripts]] and [[promoted attributes]]. To explain and visualize these features we've prepared few showcases which are also available in the [[demo document|Document#demo-document]]: - -* [[Relation map]] -* [[Day notes]] -* [[Weight Tracker]] -* [[Task Manager]] - -An important thing to keep in mind is that above showcases and demoed functionality are not built-in into Trilium - these are just examples of Trilium's extensibility. diff --git a/Apache proxy setup.md b/Apache proxy setup.md deleted file mode 100644 index eef0ca9..0000000 --- a/Apache proxy setup.md +++ /dev/null @@ -1,72 +0,0 @@ -I've assumed you have created a DNS A record for `trilium.yourdomain.com` that you want to use for your Trilium server. - -1. Download docker image and create container - - docker pull zadam/trilium:[VERSION] - - docker create --name trilium -t -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] - -1. Configure Apache proxy and websocket proxy - 1. Enable apache proxy modules - - a2enmod ssl - a2enmod proxy - a2enmod proxy_http - a2enmod proxy_wstunnel - - 2. Create a new let's encrypt certificate - - sudo certbot certonly -d trilium.mydomain.com - - Choose standalone (2) and note the location of the created certificates (typically /etc/letsencrypt/live/...) - - 3. Create a new virtual host file for apache (you may want to use `apachectl -S` to determine the server root location, mine is /etc/apache2) - - sudo nano /etc/apache2/sites-available/trilium.yourdomain.com.conf - - Paste (and customize) the following text into the configuration file - - - ServerName http://trilium.yourdomain.com - RewriteEngine on - RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] - - - ServerName https://trilium.yourdomain.com - RewriteEngine On - RewriteCond %{HTTP:Connection} Upgrade [NC] - RewriteCond %{HTTP:Upgrade} websocket [NC] - RewriteRule /(.*) ws://localhost:8080/$1 [P,L] - AllowEncodedSlashes NoDecode - ProxyPass / http://localhost:8080/ nocanon - ProxyPassReverse / http://localhost:8080/ - SSLCertificateFile /etc/letsencrypt/live/trilium.yourdomain.com/fullchain.pem - SSLCertificateKeyFile /etc/letsencrypt/live/trilium.yourdomain.com/privkey.pem - Include /etc/letsencrypt/options-ssl-apache.conf - - - - 4. Enable the virtual host with `sudo a2ensite trilium.yourdomain.com.conf` - 5. Reload apache2 with `sudo systemctl reload apache2` - -1. Create and enable a systemd service to start the docker container on boot - 1. Create a new empty file called `/lib/systemd/system/trilium.service` with the contents - - [Unit] - Description=Trilium Server - Requires=docker.service - After=docker.service - - [Service] - Restart=always - ExecStart=/usr/bin/docker start -a trilium - ExecStop=/usr/bin/docker stop -t 2 trilium - - [Install] - WantedBy=local.target - - 2. Install, enable and start service - - sudo systemctl daemon-reload - sudo systemctl enable trilium.service - sudo systemctl start trilium.service \ No newline at end of file diff --git a/Attributes.md b/Attributes.md deleted file mode 100644 index f7c5638..0000000 --- a/Attributes.md +++ /dev/null @@ -1,105 +0,0 @@ -Note attributes are key-value records owned by (assigned to) given note. - -There are 2 types of attributes: - -* Labels - simple key-value text record -* Relation - specifies named relation (link) to another note - -Sometimes we're talking about labels and relations - keep in mind that both of them are types of attributes. - -[[images/attributes.png]] - -## Labels -Labels can be used for several things: - -* as labels with optional value - e.g. when cataloguing books, you might add labels like #year=1999, #genre="sci-fi", #author="Neal Stephenson" -* attributes can be used to configure some advanced features / settings - see below -* plugins / scripts can use these to mark notes with some special values / metadata (e.g. [[Weight Tracker]] will have "weight" attribute on [[day notes]] based on whose it can create chart). - -Labels can be used for [[searching|Search]]. - -### Standard labels - -The following labels are used for advanced configuration: - -* `disableVersioning` - disables auto-versioning. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting -* `calendarRoot` - marks note which should be used as root for [[day notes]]. Only one should be marked as such. -* `archived` - notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc). -* `excludeFromExport` - notes (with their sub-tree) won't be included in any note export. -* `run` - defines on which events script should run. Possible values are: - * `frontendStartup` - when Trilium frontend starts up (or is refreshed). - * `backendStartup` - when Trilium backend starts up. - * `hourly` - run once an hour. You can use additional label `runAtHour` to specify at which hour. - * `daily` - run once a day. -* `runAtHour` - On which hour should this run. Should be used together with `#run=hourly`. Can be defined multiple times for more runs during the day. -* `runOnInstance` - define which trilium instance this should run on. Defaults to all instances. -* `disableInclusion` - scripts with this label won't be included into parent script execution. -* `sorted` - keeps child notes sorted (by title, alphabetically. See [[Sorting]]). -* `top` - keeps this note at the top of the list within its parent (applies only on parents with `sorted` attribute). -* `hidePromotedAttributes` - hide promoted attributes on this note. -* `readOnly` - editor is in read only mode. Works only for text and code notes. See some use cases [here](https://github.com/TriliumNext/Notes/issues/371). -* `autoReadOnlyDisabled` - text/code notes can be set automatically into read mode when they are too large. You can disable this behavior on per-note basis by adding this label to the note -* `appCss` - marks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks. -* `appTheme` - marks CSS notes which are full Trilium themes and are thus available in Trilium options. -* `cssClass` - the value of this label is then added as CSS class to the node representing the given note in the tree. This can be useful for advanced [[theming|themes]]. Can be used in `template` notes. -* `iconClass` - the value of this label is added as a CSS class to the icon on the tree, which can help visually distinguish the notes in the tree. An example might be `bx bx-home` - icons are taken from [boxicons](https://boxicons.com/). Can be used in [[template]] notes. -* `pageSize`- number of items per page in note listing. -* `customRequestHandler` and `customResourceProvider` - see [[Custom request handler]] -* `widget` - marks this note as a custom widget, which will be added to the Trilium component tree. See [[Custom widget]]. -* `workspace`, `workspaceIconClass`, `workspaceTabBackgroundColor`, `workspaceCalendarRoot` - see [[Workspace]] -* `searchHome` - new search notes will be created as children of this note (otherwise they are created in [[Day notes]]) -* `hoistedSearchHome` - new search notes will be created as children of this note when hoisted to some ancestor of this note -* `inbox` - default inbox location for new notes - when you create a note using "new note" button in the sidebar, notes will be created as child notes in the note marked as with `#inbox` label. -* `hoistedInbox` - default inbox location for new notes when hoisted to some ancestor of this note -* `sqlConsoleHome` - default location of SQL console notes -* `bookmarked` and `bookmarkFolder` - see [[Bookmarks]] -* `shareXXX` labels - see [[Sharing]] -* `keyboardShortcut` - can be defined as e.g. "Ctrl+I". Pressing this keyboard combination will then bring you to the note on which it is defined. Note that Trilium must be reloaded/restarted (Ctrl+R) for changes to be in effect. -* `displayRelations` and `hideRelations` - comma delimited names of relations which should be displayed/hidden. All other relations will be hidden/visible. -* `hideRelations` - comma delimited names of relations which should be hidden. -* `titleTemplate` - see [[Default note title]]. -* `template` - this note will appear in the selection of available templates when creating new notes. -* `toc` - `#toc` or `#toc=show` will force the table of contents to be shown, `#toc=hide` will force hiding it. -* `color` - defines the color of the note in links, tree etc. Use any valid CSS value like `red` or `#f0a349` -* `hideChildrenOverview` - Hides child notes from being displayed in the editor of the parent note -* `viewType` - Allows setting the view of the child notes inside the editor to a grid or list. Possible values: - * `grid` - displays child notes in a grid - * `list` - displays child notes in a list - - -## Relations -Relation is a kind of link between two notes. - -This could be used when you e.g. keep a book database, you can use relations to keep formal links between the book (note) and the book's author (note) by defining an "author" relation on the book note pointing to the author's note. - -Relations are used also for some advanced scripting - like attaching scripts to events happening on certain note. - -### Standard relations - -[[Events]]: -* `runOnNoteCreation` - executes when note is created on backend. Use this relation if you want to run the script for all notes created under a specific subtree. In that case, create it on the subtree root note and make it inheritable. A new note created within the subtree (any depth) will trigger the script. -* `runOnChildNoteCreation` - executes when new note is created under the note where this relation is defined -* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well) -* `runOnNoteChange` - executes when note is changed (includes note creation as well) -* `runOnNoteDeletion` - executes when note is being deleted. -* `runOnBranchCreation` and `runOnBranchDeletion` - executes when a branch is created/deleted. Branches are links between a parent and a child note, and are created when e.g. cloning or moving notes. -* `runOnAttributeCreation` - executes when new attribute is created for the note which defines this relation -* `runOnAttributeChange` - executes when the attribute is changed of a note which defines this relation. This is triggered also when the attribute is deleted - -Other relations: -* `template` - attached note's attributes will be inherited even without parent-child relationship. See [[template]] for details. -* `renderNote` - notes of type "render HTML note" will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered -* `widget` - target of this relation will be executed and rendered as a widget in the sidebar -* `shareXXX` relations described in [[Sharing]] - -## Multiplicity - -Attributes allow multiplicity - there can be multiple attributes with the same name. We're then calling such attributes "multivalued". - -## Attribute definitions / promoted attributes - -Special kind of labels are used to create "label/attribute" definitions. See [[Promoted attributes]] for details. - -## Attribute inheritance - -See [[Attribute inheritance]]. diff --git a/Backup.md b/Backup.md deleted file mode 100644 index 454383f..0000000 --- a/Backup.md +++ /dev/null @@ -1,42 +0,0 @@ -Trilium supports simple backup scheme where it saves copy of the [[document]] on these events: - -* once a day -* once a week -* once a month -* before DB migration to newer version - -So in total you'll have at most 4 backups from different points in time which should protect you from various problems. These backups are stored by default in `backup` directory placed in the [[data directory]]. - -This is only very basic backup solution, and you're encouraged to add some better backup solution - e.g. backing up the [[document]] to cloud / different computer etc. - -Note that [[synchronization]] provides also some backup capabilities by its nature of distributing the data to other computers. - -# Restoring backup - -Let's assume you want to restore the weekly backup, here's how to do it: - -* find [[data directory]] Trilium uses - easy way is to open "About Trilium Notes" from "Menu" in upper left corner and looking at "data directory" - * I'll refer to `~/trilium-data` as data directory from now on -* find `~/trilium-data/backup/backup-weekly.db` - this is the [[document]] backup -* at this point stop/kill Trilium -* delete `~/trilium-data/document.db`, `~/trilium-data/document.db-wal` and `~/trilium-data/document.db-shm` (latter two files are auto generated) -* copy and rename this `~/trilium-data/backup/backup-weekly.db` to `~/trilium-data/document.db` -* make sure that the file is writable, e.g. with `chmod 600 document.db` -* start Trilium again - -If you have configured sync then you need to do it across all members of the sync cluster, otherwise older version (restored backup) of the document will be detected and synced to the newer version. - -# Disabling backup - -Although this is not recommended, it is possible to disable backup in `config.ini` in the [[data directory]]: - -```ini -[General] - -... some other configs - -# set to true to disable backups (e.g. because of limited space on server) -noBackup=true -``` - -See [sample config](https://github.com/TriliumNext/Notes/blob/master/config-sample.ini). \ No newline at end of file diff --git a/Book note.md b/Book note.md deleted file mode 100644 index 319237f..0000000 --- a/Book note.md +++ /dev/null @@ -1,9 +0,0 @@ -Book [[note]] is a type of note which displays all its children's content in a linear fashion, so you can read note subtree like a book. This can be useful for reading many smaller notes. Seeing an example might explain this concept better: - -[[images/book-note.png]] - -Notice in the tree on the left pane how "node.js" note has some children and these are then displayed on the right pane. - -You can also switch to "grid view" in the Book properties: - -[[images/book-note-pictures.png]] diff --git a/Default-note-title.md b/Default-note-title.md deleted file mode 100644 index d886ff1..0000000 --- a/Default-note-title.md +++ /dev/null @@ -1,29 +0,0 @@ -When a new note is created, its name is by default "new note". In some cases, it can be desirable to have a different or even a dynamic default note title. - -For this use case, Trilium (since v0.52) supports `#titleTemplate` [[label|attributes]]. You can create such a label for a given note, assign it a value, and this value will be used as a default title when creating child notes. As with other labels, you can make it inheritable to apply recursively, and you can even place it on the root note to have it applied globally everywhere. - -As an example use case, imagine you collect books you've read in a given year like this: - -* 2022 Books - * Neal Stephenson: Anathem, 2008 - * Franz Kafka: Die Verwandlung, 1915 - -Now, to the parent note "2022 Books" you can assign label `#titleTemplate="[Author name]: [Book title], [Publication year]"`. - -And all children of "2022 Books" will be created with initial title "[Author name]: [Book title], [Publication year]". There's no artificial intelligence here, the idea is to just prompt you to manually fill in the pieces of information into the note title by yourself. - -## Dynamic value - -The value of `#titleTemplate` is evaluated at the point of note's creation as a JavaScript string, which means it can be enriched with the help of JS string interpolation with dynamic data. - -As an example, imagine you collect server outage incidents and write some notes. It looks like this: - -* Incidents - * 2022-05-09: System crash - * 2022-05-15: Backup delay - -You can automatize the date assignment by assigning a label `#titleTemplate="${now.format('YYYY-MM-DD')}: "` to the parent note "Incidents". Whenever a new child note is created, the title template is evaluated with the injected now object. - -Second variable injected is parentNote, an example could be `#titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works"`. - -See also [[template]] which provides similar capabilities, including default note's content. \ No newline at end of file diff --git a/Desktop-installation.md b/Desktop-installation.md deleted file mode 100644 index 073be4c..0000000 --- a/Desktop-installation.md +++ /dev/null @@ -1,13 +0,0 @@ -If you want to use Trilium on the desktop, download binary release for your platform from [latest release](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run `trilium` executable. - -# Startup scripts - -There are also some other options to start Trilium: - -* `trilium-no-cert-check` - Trilium will not validate the certificates, useful e.g. when you're syncing against a sync server with self-signed certificate - * Alternatively you can set `NODE_TLS_REJECT_UNAUTHORIZED=0` environment variable to the Trilium process. -* `trilium-portable` - Trilium will try to create [[data directory]] in the trilium's directory -* `trilium-safe-mode` - start up in "safe mode" which disables any startup scripts which might e.g. crash the application - -# Synchronization -If you are using a desktop instance and would like to sync with your server instance: [[Synchronization]] diff --git a/Events.md b/Events.md deleted file mode 100644 index 06967a8..0000000 --- a/Events.md +++ /dev/null @@ -1,28 +0,0 @@ -[[Script|scripts]] notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. - -## Global events - -Global events are attached to the script note via label. Simply create e.g. "run" label with some of these values and script note will be executed once the event occurs. - -* `run` - * `frontendStartup` - executes on frontend upon startup - * `mobileStartup` - executes on mobile frontend upon startup - * `backendStartup` - executes on backend upon startup - * `hourly` - executes once an hour on backend - * `daily` - executes once a day on backend - -## Entity events - -Other events are bound to some entity, these are defined as [[relations|Attributes]] - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). - -* `runOnNoteCreation` - executes when note is created on backend -* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well) -* `runOnNoteContentChange` - executes when note content is changed (includes note creation as well). -* `runOnNoteChange` - executes when note is changed (includes note creation as well) -* `runOnNoteDeletion` - executes when note is being deleted -* `runOnBranchCreation` - executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note. -* `runOnBranchChange` (since v0.62) - executes when a branch is changed - either expanded status or prefix are changed. -* `runOnBranchDeletion` - executes when a branch is delete. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted). -* `runOnChildNoteCreation` - executes when new note is created under *this* note -* `runOnAttributeCreation` - executes when new attribute is created under *this* note -* `runOnAttributeChange` - executes when attribute is changed under *this* note diff --git a/FAQ.md b/FAQ.md deleted file mode 100644 index ba7d2d9..0000000 --- a/FAQ.md +++ /dev/null @@ -1,66 +0,0 @@ -# Mac OS support - -Originally, desktop builds of Trilium Notes has been available for Windows & Linux, -but there has been a considerable demand for macOS build. - -So I made one, but I underestimated the differences and specifics of Mac platform which seems -to require special handling in several places. My lack of knowledge and frankly -willingness to learn & code Mac specific functionality resulted in a current state -where [Trilium does not integrate well into the OS](https://github.com/TriliumNext/Notes/issues/511). - -macOS build is from now on considered "unsupported". I will strive to keep it fundamentally functional, -but I won't work on Mac specific features or integrations. -Note that this is more of an acknowledgment of an existing state rather than sudden change of direction. - -Of course, PRs are welcome. - -# Translation / localization support - -Trilium is currently available only in English. Translation to other languages is not planned in the near/medium term because it brings a significant maintenance overhead. This decision might be revisited once Trilium stabilizes into a more mature product. - -For Chinese, there's an unofficial fork [here](https://github.com/Nriver/trilium-translation). Use at your own risk. - -# Multi user support - -Common request is to allow multiple users collaborate, share notes etc. So far I'm resisting this because of these reasons: - -* it's a huge feature, or rather a Pandora's box of collaboration features like user management, permissions, conflict resolution, real-time editing of a note by multiple people etc. This would be a huge amount of work. Trilium Notes is project made mostly by one person in free time and that's unlikely to change in the future. -* given its size it would probably pivot the attention away from my main focus which is a personal note-taking -* the assumption that only single person has access to the app simplifies many things, or just outright makes them possible. In multi-user app, our [[scripting|scripts]] support would be a XSS security hole, while with the single user assumption it's an endless customizable tool. - -# How to open multiple documents in one Trilium instance - -This is normally not supported - one Trilium process can open only a single instance of a [[document]]. However, you can run two Trilium processes (from one installation), each connected to a separate document. To achieve this, you need to set a location for the [[data directory]] in the `TRILIUM_DATA_DIR` environment variable and separate port on `TRILIUM_PORT` environment variable. How to do that depends on the platform, in Unix-based systems you can achieve that by running command such as this: - -```shell -TRILIUM_DATA_DIR=/home/me/path/to/data/dir TRILIUM_PORT=12345 trilium -``` - -You can save this command into a `.sh` script file or make an alias. Do this similarly for a second instance with different data directory and port. - -# Can I use Dropbox / Google Drive / OneDrive to sync data across multiple computers. - -No. - -These general purpose sync apps are not suitable to sync database files which are open and being worked on by another application. The result is that they will corrupt the database file, resulting in data loss and this message in the Trilium logs: - -> SqliteError: database disk image is malformed - -The only supported way to sync Trilium's data across the network is to use a [[sync/web server|Synchronization]]. - -# Why database instead of flat files? - -Trilium stores notes in a [[document]] which is an SQLite database. People often ask why doesn't Trilium rather use flat files -for note storage - it's fair question since flat files are easily interoperable, work with SCM/git etc. - -Short answer is that file systems are simply not powerful enough for what we want to achieve with Trilium. Using filesystem would mean fewer features with probably more problems. - -More detailed answer: - -* [[clones|cloning notes]] are what you might call "hard directory link" in filesystem lingo, but this concept is not implemented in any filesystem -* filesystems make a distinction between directory and file while there's intentionally no such difference in Trilium -* files are stored in no particular order and user can't change this -* Trilium allows storing note [[attributes]] which could be represented in extended user attributes but their support differs greatly among different filesystems / operating systems -* Trilium makes links / relations between different notes which can be quickly retrieved / navigated (e.g. for [[note map]]). There's no such support in file systems which means these would have to be stored in some kind of side-car files (mini-databases). -* Filesystems are generally not transactional. While this is not completely required for a note-taking application, having transactions make it way easier to keep notes and their metadata in predictable and consistent state. - diff --git a/Frontend-Basics.md b/Frontend-Basics.md deleted file mode 100644 index 2d7c625..0000000 --- a/Frontend-Basics.md +++ /dev/null @@ -1,57 +0,0 @@ -# Frontend API - -The frontend api supports two styles, regular scripts that are run with the current app and note context, and widgets that export an object to Trilium to be used in the UI. In both cases, the frontend api of Trilium is available to scripts running in the frontend context as global variable `api`. The members and methods of the api can be seen on the [[Script API]] page. - -## Scripts - -Scripts don't have any special requirements. They can be run at will using the execute button in the UI or they can be configured to run at certain times using [[Attributes]] on the note containing the script. - -### Global Events - -This attribute is called `#run` and it can have any of the following values: - - - `frontendStartup` - executes on frontend upon startup. - - `mobileStartup` - executes on mobile frontend upon startup. - - `backendStartup` - executes on backend upon startup. - - `hourly` - executes once an hour on backend. - - `daily` - executes once a day on backend. - - ### Entity Events - - These events are triggered by certain [[relations|Attributes#relations]] to other notes. Meaning that the script is triggered only if the note has this script attached to it through relations (or it can inherit it). - - - - `runOnNoteCreation` - executes when note is created on backend. - - `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well). - - `runOnNoteContentChange` - executes when note content is changed (includes note creation as well). - - `runOnNoteChange` - executes when note is changed (includes note creation as well). - - `runOnNoteDeletion` - executes when note is being deleted. - - `runOnBranchCreation` - executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note. - - `runOnBranchDeletion` - executes when a branch is delete. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted). - - `runOnChildNoteCreation` - executes when new note is created under this note. - - `runOnAttributeCreation` - executes when new attribute is created under this note. - - `runOnAttributeChange` - executes when attribute is changed under this note. - -## Widgets - -Conversely to scripts, widgets do have some specific requirements in order to work. A widget must: - - - Extend [BasicWidget](https://zadam.github.io/trilium/frontend_api/BasicWidget.html) or one of it's subclasses. - - Create a new instance and assign it to `module.exports`. - - Define a `parentWidget` member to determine where it should be displayed. - - Define a `position` (integer) that determines the location via sort order. - - Have a `#widget` attribute on the containing note. - - Create, render, and return your element in the render function. - - For [BasicWidget](https://zadam.github.io/trilium/frontend_api/BasicWidget.html) and [NoteContextAwareWidget](https://zadam.github.io/trilium/frontend_api/NoteContextAwareWidget.html) you should create `this.$widget` and render it in `doRender()`. - - For [RightPanelWidget](https://zadam.github.io/trilium/frontend_api/RightPanelWidget.html) the `this.$widget` and `doRender()` are already handled and you should instead return the value in `doRenderBody()`. - -### parentWidget - - - `left-pane` - This renders the widget on the left side of the screen where the note tree lives. - - `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. - - `note-detail-pane` - This renders the widget *with* the note in the center pane. This means it can appear multiple times with splits. - - `right-pane` - This renders the widget to the right of any opened notes. - -### Tutorial - -For more information on building widgets, take a look at [[Widget Basics]]. \ No newline at end of file diff --git a/Home.md b/Home.md deleted file mode 100644 index 058cfc9..0000000 --- a/Home.md +++ /dev/null @@ -1,32 +0,0 @@ -# Overview -Basic overview of the Trilium project is available at project homepage - https://github.com/zadam/trilium#trilium-notes - -Inspiration for the name "Trilium": -> Naming software is hard. I lived in Ontario when I first started the project and Trillium (the flower) is sort of a provincial logo, many institutions in Ontario are named "Trillium [something]". So I kept hearing/reading it almost everyday, I liked the sound of it and its nature motif, so I just reused it. - -> ~ Zadam (Trilium Developer) - -# Documentation -This [wiki](https://github.com/TriliumNext/Notes/wiki) contains additional and more in-depth information on some topics. See the sidebar for listing of all available pages. - -# Quick Start -## Choose the setup - -**Local only desktop/laptop** - Allows a single instance on a desktop and will save the notes locally on that desktop. -1. [[Desktop installation]] - -**Server with web only access** - Installs the application on the server and allows access from any web browser on any device, including mobile. -1. [[Server installation]] -2. [[Mobile frontend]] (optional) -3. [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy?template=https://github.com/feilongfl/trilium-heroku) -4. [3rd party paid service to host a Trilium instance for you](https://trilium.cc/paid-hosting) - -**Combination of server and desktop/laptop** - Install the application on both a server, for web access and data synchronization, and desktop instance(s). This allows all the data to be stored on the server and either accessed from the web browser, or the desktop application. The desktop application will sync and store the data locally so that it can be used when offline. -1. [[Server installation]] -2. [[Mobile frontend]] (optional) -3. [[Desktop installation]] -4. [[Synchronization]] - -## Basic concepts -1. Understand [[Note]] -2. Watch the [[Screenshot tour]] diff --git a/Keyboard-shortcuts.md b/Keyboard-shortcuts.md deleted file mode 100644 index 7a6761f..0000000 --- a/Keyboard-shortcuts.md +++ /dev/null @@ -1,75 +0,0 @@ -This is supposed to be a complete list of keyboard shortcuts. Note that some of these may work only in certain contexts (e.g. in tree pane or note editor). - -It is also possible to configure most keyboard shortcuts in Options -> Keyboard shortcuts. Using `global:` prefix, you can assign a shortcut which will work even without Trilium being in focus (requires app restart to take effect). - -## Note navigation - -* `UP`, `DOWN` - go up/down in the list of notes, `CTRL-SHIFT-UP` and `CTRL-SHIFT-DOWN` work also from editor -* `LEFT`, `RIGHT` - collapse/expand node -* `ALT+LEFT`, `ALT+RIGHT` - go back / forwards in the history -* `CTRL+J` - show [["Jump to" dialog|Note navigation#jump-to-note]] -* `CTRL+.` - scroll to current note (useful when you scroll away from your note or your focus is currently in the editor) -* `BACKSPACE` - jumps to parent note -* `ALT+C` - collapse whole note tree -* `ALT+-` (alt with minus sign) - collapse subtree (if some subtree takes too much space on tree pane you can collapse it) -* you can define a [[label|attributes]] `#keyboardShortcut` with e.g. value `Ctrl+I`. Pressing this keyboard combination will then bring you to the note on which it is defined. Note that Trilium must be reloaded/restarted (Ctrl+R) for changes to be in effect. - -See demo of some of these features in [[note navigation|Note navigation]]. - -## Tabs - -* `CTRL+click` - (or middle mouse click) on note link opens note in a new tab - -Only in desktop (electron build): - -* `CTRL+T` - opens empty tab -* `CTRL+W` - closes active tab -* `CTRL+Tab` - activates next tab -* `CTRL+Shift+Tab` - activates previous tab - -## Creating notes - -* `CTRL+O` - creates new note after the current note -* `CTRL+P` - creates new sub-note into current note -* `F2` - edit [[prefix|Tree concepts#prefix]] of current note clone - -## Moving / cloning notes - -* `CTRL+UP`, `CTRL+DOWN` - move note up/down in the note list -* `CTRL+LEFT` - move note up in the note tree -* `CTRL+RIGHT` - move note down in the note tree -* `SHIFT+UP`, `SHIFT+DOWN` - multi-select note above/below -* `CTRL+A` - select all notes in the current level -* `SHIFT+click` - multi select note which you clicked on -* `CTRL+C` - copies current note (or current selection) into clipboard (used for [[cloning|Cloning notes]]) -* `CTRL+X` - cuts current (or current selection) note into clipboard (used for moving notes) -* `CTRL+V` - pastes note(s) as sub-note into current note (which is either move or clone depending on whether it was copied or cut into clipboard) -* `DEL` - delete note / sub-tree - -## Editing notes - -Trilium uses CKEditor 5 for the [[text notes]] and CodeMirror 5 for [[code notes]]. Check the documentation of these projects to see all their built-in keyboard shortcuts. - -* `ENTER` in tree pane switches from tree pane into note title. Enter from note title switches focus to text editor. `CTRL+.` switches back from editor to tree pane. -* `CTRL+K` - create / edit [[external link|Links]] -* `CTRL+L` - create [[internal (note) link|Links]] -* `ALT+T` - inserts current date and time at caret position -* `CTRL+.` - jump away from the editor to tree pane and scroll to current note - -## Runtime shortcuts - -These are hooked in Electron to be similar to native browser keyboard shortcuts. - -* `F5`, `CTRL-R` - reloads trilium frontend -* `CTRL+SHIFT+I` - show developer tools -* `CTRL+F` - show search dialog -* `CTRL+-` - zoom out -* `CTRL+=` - zoom in - -## Other - -* `ALT+O` - show SQL console (use only if you know what you're doing) -* `ALT+M` - distraction-free mode - display only note editor, everything else is hidden -* `F11` - toggle full screen -* `CTRL+S` - toggle [[search]] form in tree pane -* `ALT+A` - show note [[attributes]] dialog diff --git a/Link-map.md b/Link-map.md deleted file mode 100644 index 9fef816..0000000 --- a/Link-map.md +++ /dev/null @@ -1 +0,0 @@ -Map diff --git a/Mobile-frontend.md b/Mobile-frontend.md deleted file mode 100644 index c1381c1..0000000 --- a/Mobile-frontend.md +++ /dev/null @@ -1,33 +0,0 @@ -Trilium ([[server edition|Server installation]]) has a mobile web frontend which is optimized for touch based devices - smartphones and tablets. It is activated automatically during login process based on browser detection. - -Mobile frontend is limited in features compared to full desktop frontend. See below for more details on this. - -Note that this is not an Android/iOS app, this is just mobile friendly web page served on the [[server edition|Server installation]]. - -## Screenshots - -### Mobile phone - -[[images/mobile-smartphone.png]] - -### Tablet - -[[images/mobile-tablet.png]] - -## Limitations - -Mobile frontend provides only some of the features of the full desktop frontend: - -* it is possible to browse the whole note tree, read and edit all types of notes, but you can create only text notes -* reading and editing [[protected notes]] is possible, but creating them is not supported -* editing options is not supported -* cloning notes is not supported -* uploading file attachments is not supported - -## Forcing mobile/desktop frontend - -Trilium decides automatically whether to use mobile or desktop frontend. If this is not appropriate, you can use `?mobile` or `?desktop` query param on **login** page (Note: you might need to log out). - -# Scripting - -You can alter the behavior with [[scripts]] just like for normal frontend. For script notes to be executed, they need to have labeled `#run=mobileStartup`. \ No newline at end of file diff --git a/Note map.md b/Note map.md deleted file mode 100644 index ebcce4a..0000000 --- a/Note map.md +++ /dev/null @@ -1,23 +0,0 @@ -Note map is a visualization of connections between notes. - -This provides an insight into a structure ("web") of notes. - -There are two types of note map: - -## Link Map - -Shows [[relations|attributes]] between notes: - -[[images/link-map.png]] - -## Tree Map - -Shows hierarchical map of notes: - -[[images/tree-map.png]] - -## See also -[[Relation map]] is a similar concept, with some differences: - -* note map is automatically generated while relation map must be created manually -* relation map is a type of note while a link map is just virtual visualization \ No newline at end of file diff --git a/Onenote.md b/Onenote.md deleted file mode 100644 index 17f0922..0000000 --- a/Onenote.md +++ /dev/null @@ -1,50 +0,0 @@ -# Migrating from OneNote (user contributed) - -**This page describes a method to migrate via EverNote Legacy, but this app is no longer available/working.** - -## Prep Onenote notes for best compatibility - -- Remove Onenote Tags and replace with Emoji if possible (Onenote Tags will get imported into trilium as an image which clutters the Trilium tree somewhat) -- Make sure to use Onenote headings where applicable (These will be carried over correctly into Trilium) -- Remove extra whitespace in Onenote (Whitespace seems to be more noticible in Trilium, so removing it now will make it look nicer in trilium) -- If possible, try to avoid very long Onenote pages. Trilium works best with shorter concise pages with any number of sub or (sub-sub...) pages. -- Make sure numbered lists don't have unusual spaces between items in the list (Sometimes the numbered list will start at 1 again in Trilum if there is an extra space in the list in OneNote). - -## Migration Procedure -### Import into Evernote from OneNote: - -- Install [Evernote Legacy](https://web.archive.org/web/20230327110646/https://help.evernote.com/hc/en-us/articles/360052560314). Current versions of Evernote do not have this functionality. (Requires Evernote account, but import works without internet connection - be sure to NOT sync notes to Evernote!). -- In evernote navigate to File > Import > Onenote > Notebook > Section > OK - -If exporting all sections at a time, they will not be grouped in folders - they will all be added to a single folder, but the order will be kept, so you can re-group into folders after importing to Trilium - -### Export from Evernote - -- Right click on the created notebook in Evernote and choose "Export Notes…" -- Use the default export format of .enex - -### Cleanup enex file (optional) - -- If the Onenote header (that is at the top of each Onenote page) is not desired, you can use the following regex to remove them in a text editor like VsCode: - - Find (using regex): `. Sort notes by ... - -## Automatic / permanent sorting - -Child notes can be kept sorted by attaching [[labels|Attributes]] to the parent note: - -* `#sorted` - enables sorting, can optionally include name of the note's property/label (see details below) -* `#sortDirection` - by default ascending, set it to `desc` value to reverse the sort order -* `#sortFoldersFirst` - notes with children will be sorted on top - -Sorting works by comparing note property or a specific label on the child notes. - -There are 4 sorting levels, where the first one has the highest priority and the lower one will be applied only if the 2 compared notes are equal based on higher priority comparison. - -1. implicit sorting by `#top` label - child notes with this label will appear on the top of the folder. -2. implicit sorting by `#bottom` label (since Trilium 0.62) - child notes with this label will appear on the bottom of the folder. -3. sorting by child's property or a specific label defined on the parent note's `#sorted` label - a) parent note has `#sorted` with no value - by default sorting will be done alphabetically - b) parent note has `#sorted=title` or `#sorted=dateModified` or `#sorted=dateCreated` - sorting will be done based on the defined note's property - c) parent note has `#sorted` label with any other value - this value is the name of the child note's label, whose value will be used for sorting. So e.g. you set `#sorted=myOrder` on the parent note and then child notes will have labels `#myOrder=001`, `#myOrder=002" etc. -4. sorting of "last resort" is alphabetical - -All comparisons are made string-wise - e.g. "1" < "2" or "2020-10-10" < "2021-01-15" but also "2" > "10". \ No newline at end of file diff --git a/Template.md b/Template.md deleted file mode 100644 index 347cffd..0000000 --- a/Template.md +++ /dev/null @@ -1,38 +0,0 @@ -Template is a note which serves as a kind of "template" for other kind of notes (let's call them instance notes). - -Assignment of a template relation to a note brings these three effects: - -* all attributes from the template note are [[inherited|attribute inheritance]] to the instance notes - * note that even attributes with `#isInheritable=false` are inherited to the instance notes, but only inheritable attributes are then inherited to the children of instance notes -* note content is copied from the template note to the instance note (if the instance note content is empty at the time of template attribute assignment) -* all template's children notes are deep-duplicated to the instance note - -## Example -A typical example would be a "Book" template note, which will: - -* define some [[promoted attributes]] - e.g. publication year, author etc -* you can also create kind of outline of the book review in the note text - e.g. themes, conclusion etc. .. -* you can also create child notes for e.g. highlights, summary etc. - -![](images/template.png) - -## Instance note - -And then we have instance note - this note has a [[relation|attributes]] to the "Book" template note which will cause that the template note text is used to initialize the instance note text and all attributes from the template note are inherited to the instance note. - -You can create an instance note (i.e. note which uses a template) through the UI like this: - -![](images/template-create-instance-note.png) - -For the template to appear in the menu, the template note needs to have `#template` label (don't mistake it with `~template` relation which points from the instance note to the template note). If you use [[workspaces|workspace]], you can alternatively mark templates with `#workspaceTemplate` which will display them only in the workspace. - -You can also add/change template notes after the note is created, simply create a relation `~template` pointing to the desired template note. - -## Other remarks - -From the visual perspective, template can define a `#iconClass` and `#cssClass` attributes so that all e.g. books are shown with a particular icon and CSS style. - -You can check out the concept in the [[demo document|Document#demo-document]] in e.g. [[Relation map]], [[Task manager]] or [[Day notes]]. - -See also [[default note title]] which allows you to create templates for note titles. Note templates and title templates can be combined by creating a `#titleTemplate` for a template note. - diff --git a/Theme-Gallery.md b/Theme-Gallery.md deleted file mode 100644 index 7fcda33..0000000 --- a/Theme-Gallery.md +++ /dev/null @@ -1,144 +0,0 @@ -## Theme Gallery - -These are user-created themes which were made publicly available: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Midnight
- 👤 tobealive - -
- EOTE
- 👤 tobealive - -
- Trilium Themes
- 👤 Abourass
-
- - - -
- MaterialDark
- 👤 ZMonk91
- -
- lightslategray
- 👤 jaroet
- -
- melon-4
- 👤 raphwriter
- -
- Neon_Dark
- 👤 Engr-AllanG
- -
- Coder_Dark
- 👤 Engr-AllanG
- -
- velvet
- 👤 idelem
- -
- Dark Plus
- 👤 SADAVA
- -
- Solarized
- 👤 WKSu
- -
- Nord
- 👤 en3r0
- -
- Bear Note Light
- 👤 AllanZyne
- -
- Bear Note Dark
- 👤 AllanZyne
- -
- Miku Hatsune
- 👤 Sebiann
- -
- Midnight
- 👤 cwilliams5
- -
- Blue (light)
- 👤 SiriusXT
- -
- Blue (dark)
- 👤 SiriusXT
- -
- -If you would like to add your theme to this gallery, write a new post in [👐 Show and tell](https://github.com/TriliumNext/Notes/discussions/categories/show-and-tell). \ No newline at end of file diff --git a/Tree manipulation.md b/Tree manipulation.md deleted file mode 100644 index 409a864..0000000 --- a/Tree manipulation.md +++ /dev/null @@ -1,22 +0,0 @@ -This page describes how you can manipulate the note tree - specifically moving notes. - -## Drag and drop - -You can manipulate the tree simply by dragging and dropping notes as you can see in the demo: - -[[gifs/drag-and-drop.gif]] - -## Keyboard manipulation - -Trilium provides fast keyboard based manipulation with following [[shortcuts|keyboard shortcuts]]: - -* `CTRL-UP` and `CTRL-DOWN` - move note up or down in the order -* `CTRL-LEFT` - move note upwards in the hierarchy by changing a note's parent to note's parent's parent. -* `CTRL-RIGHT` - move note downwards in the hierarchy by setting parent to the note currently above (this is a bit hard to explain - it's best to see a demo or try it for yourself) -* `LEFT` and `RIGHT` expands and collapses a sub-tree - -[[gifs/move-note-with-keyboard.gif]] - -## Context menu - -You can also move notes with familiar cut & paste from context menu or associated keyboard [[shortcuts|keyboard shortcuts]] `CTRL-X` (cut) and `CTRL-V` (paste). \ No newline at end of file diff --git a/Upgrading Trilium.md b/Upgrading Trilium.md deleted file mode 100644 index 2c07108..0000000 --- a/Upgrading Trilium.md +++ /dev/null @@ -1,18 +0,0 @@ -Topic of this page is upgrading Trilium from one version to another. - -# How to upgrade - -Trilium does not have a built-in auto upgrade - all upgrades have to be done manually. How to do this depends on the installation method: - -* for [[docker server installation]] - pull the image of the newer version and restart -* for all others you need to download new version of the release artifact of your choice from the [release page](https://github.com/TriliumNext/Notes/releases/latest) and replace existing version of the application - i.e. rename/delete the old directory and extract the archive of the new version - -# Document compatibility and migration - -During Trilium startup, [[document]] will be checked whether it conforms to the version supported by the application. In case the document is in the old version, Trilium will automatically migrate it to the new version. This will then mean that the document will not be readable anymore by the older versions of Trilium. In case you want to go back to the old version of the document and Trilium, you can restore the [[backed up|backup]] `backup-before-migration.db` which is created before every migration. - -# Sync compatibility - -[[Synchronization]] protocol is versioned and all members of the sync cluster need to talk in the same protocol version. Therefore, when you are upgrading from one version to another, it might be necessary to upgrade all instances in the cluster. - -Change in protocol version is usually indicated on a release page. \ No newline at end of file diff --git a/Web-clipper.md b/Web-clipper.md deleted file mode 100644 index 21cecbc..0000000 --- a/Web-clipper.md +++ /dev/null @@ -1,36 +0,0 @@ - -Trilium Web Clipper is a web browser extension which allows user to clip text, screenshots, whole pages and short notes and save them directly to Trilium Notes. - -Project is hosted [here](https://github.com/zadam/trilium-web-clipper). Firefox and Chrome are supported browsers, but the chrome build should work on other chromium based browsers as well. - -# Functionality - -* select text and clip it with context menu (right click) -* click on an image or link and save it through context menu -* save whole page from the popup or context menu -* save screenshot (with crop tool) from either popup or context menu -* create short text note from popup - -Trilium will save these clippings as a new child note under a "clipper inbox" note. Clipper inbox is: - -* if there's a note with [[label|attributes]] `clipperInbox`, then this note is used as parent for the clipped notes -* otherwise, [[day note|day notes]] is used as a parent - -If there's multiple clippings from the same page (and on the same day), then they will be added to the same note. - -# Get it - -Extension is available from: - -* [Project release page](https://github.com/zadam/trilium-web-clipper/releases) - .xpi for Firefox and .zip for Chromium based browsers. -* [Chrome Web Store](https://chrome.google.com/webstore/detail/trilium-web-clipper/dfhgmnfclbebfobmblelddiejjcijbjm?hl=en&authuser=0) - -# Configuration - -The extension needs to connect to a running Trilium instance. By default, it scans a port range on the local computer to find a desktop Trilium instance. - -It's also possible to configure [[server|Server installation]] address for cases when the desktop application is not currently running. - -## Username - -Older versions of Trilium (before 0.50) required username & password to authenticate, but this was reduced to just password. Web Clipper UI still contains the username field, just use arbitrary string. \ No newline at end of file diff --git a/Wiki/1_Theme-Gallery_image.png b/Wiki/1_Theme-Gallery_image.png new file mode 100644 index 0000000..7f07aeb Binary files /dev/null and b/Wiki/1_Theme-Gallery_image.png differ diff --git a/Wiki/1_Workspace_image.png b/Wiki/1_Workspace_image.png new file mode 100644 index 0000000..11f96f9 Binary files /dev/null and b/Wiki/1_Workspace_image.png differ diff --git a/Wiki/2_Theme-Gallery_image.png b/Wiki/2_Theme-Gallery_image.png new file mode 100644 index 0000000..38ff826 Binary files /dev/null and b/Wiki/2_Theme-Gallery_image.png differ diff --git a/Wiki/Advanced showcases.md b/Wiki/Advanced showcases.md new file mode 100644 index 0000000..4a091fd --- /dev/null +++ b/Wiki/Advanced showcases.md @@ -0,0 +1,9 @@ +# Advanced showcases +Trilium provides some advanced functionality in the form of [Scripts](Scripts.md) and [promoted attributes](Promoted%20attributes.md). To explain and visualize these features we've prepared few showcases which are also available in the [demo document](Document.md): + +* [Relation map](Relation-map.md) +* [Day notes](Day-notes.md) +* [Weight Tracker](Weight-tracker.md) +* [Task Manager](Task-manager.md) + +An important thing to keep in mind is that above showcases and demoed functionality are not built-in into Trilium - these are just examples of Trilium's extensibility. \ No newline at end of file diff --git a/Anonymized database.md b/Wiki/Anonymized database.md similarity index 74% rename from Anonymized database.md rename to Wiki/Anonymized database.md index 5db531f..1f80714 100644 --- a/Anonymized database.md +++ b/Wiki/Anonymized database.md @@ -1,19 +1,20 @@ +# Anonymized database ### Anonymized database -In some cases, it's necessary to see the database structure to be able to debug the problem. Of course, we can't ask you to send us your [[document|Document]] file with your notes. +In some cases, it's necessary to see the database structure to be able to debug the problem. Of course, we can't ask you to send us [Document](Document.md) file with your notes. For this, Trilium supports anonymization of the database - you can trigger this in Options -> Advanced tab. -[[images/anonymization.png]] +![](images/anonymization.png) -This will create a copy of your document and remove all sensitive data (currently note titles, contents, revisions, history and some of the options, and non-system attributes) while leaving all structure and metadata (e.g. date of last change). After this is done, the database is [VACUUMed](https://sqlite.org/lang_vacuum.html) to make sure there's no stale sensitive data in the document file. The resulting file is stored in `anonymized` directory (placed in the [[data directory]]). You can safely attach it with your bug report or send it to zadam.apps@gmail.com +This will create a copy of your document and remove all sensitive data (currently note titles, contents, revisions, history and some of the options, and non-system attributes) while leaving all structure and metadata (e.g. date of last change). After this is done, the database is [VACUUMed](https://sqlite.org/lang_vacuum.html) to make sure there's no stale sensitive data in the document file. The resulting file is stored in `anonymized` directory (placed in the [data directory](Data-directory.md)). You can safely attach it with your bug report or send it to [zadam.apps@gmail.com](#root/N3Zt66yETj9g) %%{WARNING}%% #### Command line anonymization If the database is corrupted in a way which prevents Trilium to start up, you won't be able to trigger the anonymization from the UI. For such a case, anonymization is also available from command line: -``` +```text-plain node src/anonymize.js ``` -This needs to be executed in the directory with Trilium source files, for desktop builds this in `resources/app` directory. +This needs to be executed in the directory with Trilium source files, for desktop builds this in `resources/app` directory. \ No newline at end of file diff --git a/Wiki/Apache proxy setup.md b/Wiki/Apache proxy setup.md new file mode 100644 index 0000000..bff1421 --- /dev/null +++ b/Wiki/Apache proxy setup.md @@ -0,0 +1,84 @@ +# Apache proxy setup +I've assumed you have created a DNS A record for `trilium.yourdomain.com` that you want to use for your Trilium server. + +1. Download docker image and create container + + ```text-plain + docker pull zadam/trilium:[VERSION] %%{WARNING}%% + docker create --name trilium -t -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] + ``` + +2. Configure Apache proxy and websocket proxy + 1. Enable apache proxy modules + + ```text-plain + a2enmod ssl + a2enmod proxy + a2enmod proxy_http + a2enmod proxy_wstunnel + ``` + + 2. Create a new let's encrypt certificate + + ```text-plain + sudo certbot certonly -d trilium.mydomain.com + ``` + + Choose standalone (2) and note the location of the created certificates (typically /etc/letsencrypt/live/...) + + 3. Create a new virtual host file for apache (you may want to use `apachectl -S` to determine the server root location, mine is /etc/apache2) + + ```text-plain + sudo nano /etc/apache2/sites-available/trilium.yourdomain.com.conf + ``` + + Paste (and customize) the following text into the configuration file + + ```text-plain + + ServerName http://trilium.yourdomain.com + RewriteEngine on + RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,QSA,R=permanent] + + + ServerName https://trilium.yourdomain.com + RewriteEngine On + RewriteCond %{HTTP:Connection} Upgrade [NC] + RewriteCond %{HTTP:Upgrade} websocket [NC] + RewriteRule /(.*) ws://localhost:8080/$1 [P,L] + AllowEncodedSlashes NoDecode + ProxyPass / http://localhost:8080/ nocanon + ProxyPassReverse / http://localhost:8080/ + SSLCertificateFile /etc/letsencrypt/live/trilium.yourdomain.com/fullchain.pem + SSLCertificateKeyFile /etc/letsencrypt/live/trilium.yourdomain.com/privkey.pem + Include /etc/letsencrypt/options-ssl-apache.conf + + ``` + + 4. Enable the virtual host with `sudo a2ensite trilium.yourdomain.com.conf` + 5. Reload apache2 with `sudo systemctl reload apache2` +3. Create and enable a systemd service to start the docker container on boot + 1. Create a new empty file called `/lib/systemd/system/trilium.service` with the contents + + ```text-plain + [Unit] + Description=Trilium Server + Requires=docker.service + After=docker.service + + [Service] + Restart=always + ExecStart=/usr/bin/docker start -a trilium + ExecStop=/usr/bin/docker stop -t 2 trilium + + [Install] + WantedBy=local.target + ``` + + 2. Install, enable and start service + + ```text-plain + sudo systemctl daemon-reload + sudo systemctl enable trilium.service + sudo systemctl start trilium.service + ``` \ No newline at end of file diff --git a/Archived-notes.md b/Wiki/Archived-notes.md similarity index 53% rename from Archived-notes.md rename to Wiki/Archived-notes.md index 90f37c2..1e1dc08 100644 --- a/Archived-notes.md +++ b/Wiki/Archived-notes.md @@ -1,9 +1,10 @@ -Archived notes are notes which have `archived` [[label|attributes]] - either directly or [[inherited|Attribute inheritance]]. +# Archived-notes +Archived notes are notes which have `archived` [attribute](Attributes.md) - either directly or [inherited](Attribute%20inheritance.md). -Such notes are then by default not shown in the autocomplete and in the full text [[search]]. +Such notes are then by default not shown in the autocomplete and in the full text [search](Search.md). This can be useful for notes which are no longer very useful but still valuable enough to keep around without them getting too much in the way. You can control whether archived notes are displayed in the note tree with a setting: -![image](https://github.com/TriliumNext/Notes/assets/617641/8d77314d-699f-4059-96e6-8de6b3067341) +![](images/hide-archived.png) \ No newline at end of file diff --git a/Attachments.md b/Wiki/Attachments.md similarity index 92% rename from Attachments.md rename to Wiki/Attachments.md index 83f4f9e..3ebcb1c 100644 --- a/Attachments.md +++ b/Wiki/Attachments.md @@ -1,4 +1,5 @@ -A note can *own* one or more attachments. The attachment is either an image or file which can be displayed/linked in the note which owns it. +# Attachments +A note can _own_ one or more attachments. The attachment is either an image or file which can be displayed/linked in the note which owns it. The note is the exclusive owner of its attachments - they can't be linked from other notes. If a user copies the attachment link from one note to another, the attachment itself is copied and from then on lives an independent life. diff --git a/Attribute inheritance.md b/Wiki/Attribute inheritance.md similarity index 78% rename from Attribute inheritance.md rename to Wiki/Attribute inheritance.md index 2356778..cfbacd5 100644 --- a/Attribute inheritance.md +++ b/Wiki/Attribute inheritance.md @@ -1,10 +1,13 @@ -## Standard inheritance +# Attribute inheritance +Standard inheritance +-------------------- -Every [[attribute|attributes]] has a flag called `isInheritable`. If this is true, then this attribute (key-value) is also applied to all its children notes, children's children notes etc. +Every [attribute](Attributes.md) has flag called `isInheritable`. If this is true, then this attribute (key-value) is also applied to all its children notes, children's children notes etc. Example how this might be useful is `archived` label which hides its note from Jump to / Add link dialogs. Often times you want to archive some specific subtree, you can do this by making the `archived` label inheritable. -## Copying inheritance +Copying inheritance +------------------- A different kind of inheritance is achieved using `child:` attribute name prefix. We can define that when a note is created under a certain parent note then the new child note will automatically receive defined attributes. The difference from standard inheritance is that these are real new attributes which are completely independent of the parent and will be therefore kept even if the note is moved elsewhere in the note tree. @@ -12,6 +15,7 @@ For defining the copy-attributes we use `child:` prefix in attribute name, the r Which kind of attribute inheritance (or if any at all) should be used depends on the specific use case. -## Template inheritance +Template inheritance +-------------------- -[[Attribute template|template]] could be also seen as a form of inheritance. +[Attribute template](Template.md) could be also seen as a form of inheritance. \ No newline at end of file diff --git a/Wiki/Attributes.md b/Wiki/Attributes.md new file mode 100644 index 0000000..ea2963e --- /dev/null +++ b/Wiki/Attributes.md @@ -0,0 +1,114 @@ +# Attributes +Note attributes are key-value records owned by (assigned to) given note. + +There are 2 types of attributes: + +* Labels - simple key-value text record +* Relation - specifies named relation (link) to another note + +Sometimes we're talking about labels and relations - keep in mind that both of them are types of attributes. + +![](images/attributes.png) + +Labels +------ + +Labels can be used for several things: + +* as labels with optional value - e.g. when cataloguing books, you might add labels like #year=1999, #genre="sci-fi", #author="Neal Stephenson" +* attributes can be used to configure some advanced features / settings - see below +* plugins / scripts can use these to mark notes with some special values / metadata (e.g. [Weight Tracker](Weight-tracker.md) will have "weight" attribute on [day notes](Day-notes.md) based on whose it can create chart). + +Labels can be used for [searching](Search.md). + +### Standard labels + +The following labels are used for advanced configuration: + +* `disableVersioning` - disables auto-versioning. Useful for e.g. large, but unimportant notes - e.g. large JS libraries used for scripting +* `calendarRoot` - marks note which should be used as root for [day notes](Day-notes.md). Only one should be marked as such. +* `archived` - notes with this label won't be visible by default in search results (also in Jump To, Add Link dialogs etc). +* `excludeFromExport` - notes (with their sub-tree) won't be included in any note export. +* `run` - defines on which events script should run. Possible values are: + * `frontendStartup` - when Trilium frontend starts up (or is refreshed). + * `backendStartup` - when Trilium backend starts up. + * `hourly` - run once an hour. You can use additional label `runAtHour` to specify at which hour. + * `daily` - run once a day. +* `runAtHour` - On which hour should this run. Should be used together with `#run=hourly`. Can be defined multiple times for more runs during the day. +* `runOnInstance` - define which trilium instance this should run on. Defaults to all instances. +* `disableInclusion` - scripts with this label won't be included into parent script execution. +* `sorted` - keeps child notes sorted (by title, alphabetically. See [Sorting](Sorting.md)). +* `top` - keeps this note at the top of the list within its parent (applies only on parents with `sorted` attribute). +* `hidePromotedAttributes` - hide promoted attributes on this note. +* `readOnly` - editor is in read only mode. Works only for text and code notes. See some use cases [here](https://github.com/TriliumNext/Notes/issues/371). +* `autoReadOnlyDisabled` - text/code notes can be set automatically into read mode when they are too large. You can disable this behavior on per-note basis by adding this label to the note +* `appCss` - marks CSS notes which are loaded into the Trilium application and can thus be used to modify Trilium's looks. +* `appTheme` - marks CSS notes which are full Trilium themes and are thus available in Trilium options. +* `cssClass` - the value of this label is then added as CSS class to the node representing the given note in the tree. This can be useful for advanced [themes](Themes.md). Can be used in `template` notes. +* `iconClass` - the value of this label is added as a CSS class to the icon on the tree, which can help visually distinguish the notes in the tree. An example might be `bx bx-home` - icons are taken from [boxicons](https://boxicons.com/). Can be used in [template](Template.md) notes. +* `pageSize`\- number of items per page in note listing. +* `customRequestHandler` and `customResourceProvider` - see [Custom request handler](Custom%20request%20handler.md) +* `widget` - marks this note as a custom widget, which will be added to the Trilium component tree. See [Custom widget](Custom-widget.md). +* `workspace`, `workspaceIconClass`, `workspaceTabBackgroundColor`, `workspaceCalendarRoot` - see [Workspace](Workspace.md) +* `searchHome` - new search notes will be created as children of this note (otherwise they are created in [Day notes](Day-notes.md)) +* `hoistedSearchHome` - new search notes will be created as children of this note when hoisted to some ancestor of this note +* `inbox` - default inbox location for new notes - when you create a note using "new note" button in the sidebar, notes will be created as child notes in the note marked as with `#inbox` label. +* `hoistedInbox` - default inbox location for new notes when hoisted to some ancestor of this note +* `sqlConsoleHome` - default location of SQL console notes +* `bookmarked` and `bookmarkFolder` - see [Bookmarks](Bookmarks.md) +* `shareXXX` labels - see [Sharing](Sharing.md) +* `keyboardShortcut` - can be defined as e.g. "Ctrl+I". Pressing this keyboard combination will then bring you to the note on which it is defined. Note that Trilium must be reloaded/restarted (Ctrl+R) for changes to be in effect. +* `displayRelations` and `hideRelations` - comma delimited names of relations which should be displayed/hidden. All other relations will be hidden/visible. +* `hideRelations` - comma delimited names of relations which should be hidden. +* `titleTemplate` - see [Default note title](Default-note-title.md). +* `template` - this note will appear in the selection of available templates when creating new notes. +* `toc` - `#toc` or `#toc=show` will force the table of contents to be shown, `#toc=hide` will force hiding it. +* `color` - defines the color of the note in links, tree etc. Use any valid CSS value like `red` or `#f0a349` +* `hideChildrenOverview` - Hides child notes from being displayed in the editor of the parent note +* `viewType` - Allows setting the view of the child notes inside the editor to a grid or list. Possible values: + * `grid` - displays child notes in a grid + * `list` - displays child notes in a list + +Relations +--------- + +Relation is a kind of link between two notes. + +This could be used when you e.g. keep a book database, you can use relations to keep formal links between the book (note) and the book's author (note) by defining an "author" relation on the book note pointing to the author's note. + +Relations are used also for some advanced scripting - like attaching scripts to events happening on certain note. + +### Standard relations + +[Events](Events.md): + +* `runOnNoteCreation` - executes when note is created on backend. Use this relation if you want to run the script for all notes created under a specific subtree. In that case, create it on the subtree root note and make it inheritable. A new note created within the subtree (any depth) will trigger the script. +* `runOnChildNoteCreation` - executes when new note is created under the note where this relation is defined +* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well) +* `runOnNoteChange` - executes when note is changed (includes note creation as well) +* `runOnNoteDeletion` - executes when note is being deleted. +* `runOnBranchCreation` and `runOnBranchDeletion` - executes when a branch is created/deleted. Branches are links between a parent and a child note, and are created when e.g. cloning or moving notes. +* `runOnAttributeCreation` - executes when new attribute is created for the note which defines this relation +* `runOnAttributeChange` - executes when the attribute is changed of a note which defines this relation. This is triggered also when the attribute is deleted + +Other relations: + +* `template` - attached note's attributes will be inherited even without parent-child relationship. See [template](Template.md) for details. +* `renderNote` - notes of type "render HTML note" will be rendered using a code note (HTML or script) and it is necessary to point using this relation to which note should be rendered +* `widget` - target of this relation will be executed and rendered as a widget in the sidebar +* `shareXXX` relations described in [Sharing](Sharing.md) + +Multiplicity +------------ + +Attributes allow multiplicity - there can be multiple attributes with the same name. We're then calling such attributes "multivalued". + +Attribute definitions / promoted attributes +------------------------------------------- + +Special kind of labels are used to create "label/attribute" definitions. See [Promoted attributes](Promoted%20attributes.md) for details. + +Attribute inheritance +--------------------- + +See [Attribute inheritance](Attribute%20inheritance.md). \ No newline at end of file diff --git a/Wiki/Backup.md b/Wiki/Backup.md new file mode 100644 index 0000000..a470dcf --- /dev/null +++ b/Wiki/Backup.md @@ -0,0 +1,43 @@ +# Backup +Trilium supports simple backup scheme where it saves copy of the [document](Document.md) on these events: + +* once a day +* once a week +* once a month +* before DB migration to newer version + +So in total you'll have at most 4 backups from different points in time which should protect you from various problems. These backups are stored by default in `backup` directory placed in the [data directory](Data-directory.md). + +This is only very basic backup solution, and you're encouraged to add some better backup solution - e.g. backing up the [document](Document.md) to cloud / different computer etc. + +Note that [synchronization](Synchronization.md) provides also some backup capabilities by its nature of distributing the data to other computers. + +Restoring backup +---------------- + +Let's assume you want to restore the weekly backup, here's how to do it: + +* find [data directory](Data-directory.md) Trilium uses - easy way is to open "About Trilium Notes" from "Menu" in upper left corner and looking at "data directory" + * I'll refer to `~/trilium-data` as data directory from now on +* find `~/trilium-data/backup/backup-weekly.db` - this is the [document](Document.md) backup +* at this point stop/kill Trilium +* delete `~/trilium-data/document.db`, `~/trilium-data/document.db-wal` and `~/trilium-data/document.db-shm` (latter two files are auto generated) +* copy and rename this `~/trilium-data/backup/backup-weekly.db` to `~/trilium-data/document.db` +* make sure that the file is writable, e.g. with `chmod 600 document.db` +* start Trilium again + +If you have configured sync then you need to do it across all members of the sync cluster, otherwise older version (restored backup) of the document will be detected and synced to the newer version. + +Disabling backup +---------------- + +Although this is not recommended, it is possible to disable backup in `config.ini` in the [data directory](Data-directory.md): + +```text-plain +[General] +... some other configs +# set to true to disable backups (e.g. because of limited space on server) +noBackup=true +``` + +See [sample config](https://github.com/TriliumNext/Notes/blob/master/config-sample.ini). %%{WARNING}%% \ No newline at end of file diff --git a/Wiki/Book note.md b/Wiki/Book note.md new file mode 100644 index 0000000..382138d --- /dev/null +++ b/Wiki/Book note.md @@ -0,0 +1,10 @@ +# Book note +Book [note](Note.md) is a type of note which displays all its children's content in a linear fashion, so you can read note subtree like a book. This can be useful for reading many smaller notes. Seeing an example might explain this concept better: + +![](images/book-note.png) + +Notice in the tree on the left pane how "node.js" note has some children and these are then displayed on the right pane. + +You can also switch to "grid view" in the Book properties: + +![](images/book-note-pictures.png) \ No newline at end of file diff --git a/Bookmarks.md b/Wiki/Bookmarks.md similarity index 74% rename from Bookmarks.md rename to Wiki/Bookmarks.md index 8b8f288..48b45aa 100644 --- a/Bookmarks.md +++ b/Wiki/Bookmarks.md @@ -1,11 +1,13 @@ +# Bookmarks To easily access selected notes, you can bookmark them. See demo: -[[gifs/bookmarks.gif]] +![](gifs/bookmarks.gif) -## Bookmark folder +Bookmark folder +--------------- Space in the left panel is limited, and you might want to bookmark many items. One possible solution is to bookmark a folder, so it shows its children: -[[images/bookmark-folder.png]] +![](images/bookmark-folder.png) To do this, you need to add a `#bookmarkFolder` label to the note. \ No newline at end of file diff --git a/Canvas-note.md b/Wiki/Canvas-note.md similarity index 63% rename from Canvas-note.md rename to Wiki/Canvas-note.md index 8205187..a686f0e 100644 --- a/Canvas-note.md +++ b/Wiki/Canvas-note.md @@ -1,7 +1,6 @@ +# Canvas-note (Since trilium v0.52) Canvas note use the excalidraw library to allow handwritten notes with mouse, pen or touch on an infinite canvas. It also supports basic diagramming, text and garphics input. -![grafik](https://user-images.githubusercontent.com/7283497/168549340-a7a48721-ef94-479e-93ab-55c82bfe26c1.png) - - +![grafik](Canvas-note_image.png) \ No newline at end of file diff --git a/Wiki/Canvas-note_image.png b/Wiki/Canvas-note_image.png new file mode 100644 index 0000000..4ad24ad Binary files /dev/null and b/Wiki/Canvas-note_image.png differ diff --git a/Cloning notes.md b/Wiki/Cloning notes.md similarity index 73% rename from Cloning notes.md rename to Wiki/Cloning notes.md index 017329b..7d405f0 100644 --- a/Cloning notes.md +++ b/Wiki/Cloning notes.md @@ -1,62 +1,70 @@ -## Motivation +# Cloning notes +Motivation +---------- + Trilium's core feature is the ability to structure your notes into hierarchical tree-like structure. It is expected then that you'll have an elaborate and deep note hierarchy - each subtree will represent a more refined and specialized view of your knowledge base. This is a pretty powerful approach, but it also carries a hidden assumption that each "subtopic" is "owned" by one parent. I'll illustrate this with an example - let's say my basic structure is this: -* Technology - * Programming - * Kotlin - * JavaScript - * Operating systems - * Linux - * Windows - +* Technology + * Programming + * Kotlin + * JavaScript + * Operating systems + * Linux + * Windows + Now, I'm starting to learn about [Bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) and would like to create notes related to this topic. But now I'm facing a problem of where to categorize this. The issue here is that Bash is both a programming language and a tool (shell) very much tied into Linux. It seems it belongs to both of these, I can't (and don't want to) choose one over the other. -## Solution -The solution to the problem shown above is to allow notes to have multiple parents. +Solution +-------- + +The solution to the problem shown above is to allow notes to have multiple parents. -I call these "clones", but that is a bit misleading - there's no original and cloned note - the notes in both of the parents categories are identical. +I call these "clones", but that is a bit misleading - there's no original and cloned note - the notes in both of the parents categories are identical. Another misleading thing about "cloning" is that it suggests that a copy of the note has been made. That's not really true, the note itself stays in just one original, it is just referenced in multiple places in the tree hierarchy. So changing it in one category changes it in all the others, because they're all the same note. Here's the final structure with cloning: -* Technology - * Programming - * Kotlin - * JavaScript - * Bash - * some sub-notes ... - * Operating systems - * Linux - * Bash - * some sub-notes ... - * Windows - +* Technology + * Programming + * Kotlin + * JavaScript + * Bash + * some sub-notes ... + * Operating systems + * Linux + * Bash + * some sub-notes ... + * Windows + So now the "Bash" subtree appears on multiple locations in the hierarchy. Both the Bash subtrees are the same and contain the same sub-categories and notes. ### Demo -[[gifs/create-clone.gif]] -In the demo, you can see how a clone can be created using the context menu. It's possible to do this also using the Add Link dialog or with CTRL+C and CTRL+V [[shortcuts|keyboard shortcuts]]. +![](gifs/create-clone.gif) + +In the demo, you can see how a clone can be created using the context menu. It's possible to do this also using the Add Link dialog or with CTRL+C and CTRL+V [keyboard shortcuts](Keyboard-shortcuts.md). As seen in the demo, you can view the list of all available clones in the "Note Paths" tab in the Ribbon toolbar. Titles of cloned notes in the tree view have an asterisk to the right to easily see that the note is also placed into some other location. -## Prefix +Prefix +------ Since notes can be categorized into multiple places, it's recommended to choose a generalized name that fits into all locations instead of something more specific to avoid confusion. In some cases this isn't possible so Trilium provides "branch prefixes", which is shown before the note name in the tree and as such provides a specific kind of context. The prefix is location specific, so it's displayed only in the tree pane. -## Deleting notes/clones +Deleting notes/clones +--------------------- With clones, it might not be immediately obvious how deleting works. If you try to delete a note, it works like this: -1. if the note has multiple clones, delete just this clone and leave the actual note (and its other clones) as it is. -2. if this note doesn't have any other clones, delete the note - * Run the whole process starting with 1. on all note's children notes +1. if the note has multiple clones, delete just this clone and leave the actual note (and its other clones) as it is. +2. if this note doesn't have any other clones, delete the note + * Run the whole process starting with 1. on all note's children notes \ No newline at end of file diff --git a/Code-notes.md b/Wiki/Code-notes.md similarity index 56% rename from Code-notes.md rename to Wiki/Code-notes.md index a621dca..88994e1 100644 --- a/Code-notes.md +++ b/Wiki/Code-notes.md @@ -1,20 +1,23 @@ +# Code-notes Trilium supports creating "code" notes, i.e. notes which contain some sort of formal code - be it programming language (C++, JavaScript), structured data (JSON, XML) or other types of codes (CSS etc.). This can be useful for a few things: -* computer programmers can store code snippets as notes with syntax highlighting -* JavaScript code notes can be executed inside Trilium for some extra functionality - * we call such JavaScript code notes "scripts" - see [[Scripts]] -* JSON, XML etc. can be used as storage for structured data (typically used in conjunction with scripting) +* computer programmers can store code snippets as notes with syntax highlighting +* JavaScript code notes can be executed inside Trilium for some extra functionality + * we call such JavaScript code notes "scripts" - see [Scripts](Scripts.md) +* JSON, XML etc. can be used as storage for structured data (typically used in conjunction with scripting) -[[images/code-note.png]] +![](images/code-note.png) -## Extra languages +Extra languages +--------------- Trilium supports syntax highlighting for many languages, but by default displays only some of them (to reduce the number of items). You can add extra languages in Options -> Code notes. -## Code blocks +Code blocks +----------- An alternative to the code note is a "code block" - feature of a text note which can add short snippets of code to the text editor. The disadvantage is that code blocks don't support syntax highlighting. -[[images/code-block.png]] \ No newline at end of file +![](images/code-block.png) \ No newline at end of file diff --git a/Custom request handler.md b/Wiki/Custom request handler.md similarity index 75% rename from Custom request handler.md rename to Wiki/Custom request handler.md index 19e388f..4777424 100644 --- a/Custom request handler.md +++ b/Wiki/Custom request handler.md @@ -1,11 +1,14 @@ -Trilium provides a mechanism for [[scripts]] to open a public REST endpoint. This opens a way for various integrations with other services - a simple example would be creating new note from Slack by issuing a slash command (e.g. `/trilium buy milk`). +# Custom request handler +Trilium provides a mechanism for [scripts](Scripts.md) to open a public REST endpoint. This opens a way for various integrations with other services - a simple example would be creating new note from Slack by issuing a slash command (e.g. `/trilium buy milk`). + +Create note from outside Trilium +-------------------------------- -## Create note from outside Trilium Let's take a look at an example. The goal is to provide a REST endpoint to which we can send title and content and Trilium will create a note. -We'll start with creating a JavaScript backend [[code note|code notes]] containing: +We'll start with creating a JavaScript backend [code note](Code-notes.md) containing: -```javascript +```text-plain const {req, res} = api; const {secret, title, content} = req.body; @@ -27,14 +30,14 @@ else { This script note has also following two attributes: -* label `#customRequestHandler` with value `create-note` -* relation `~targetNote` pointing to a note where new notes should be saved +* label `#customRequestHandler` with value `create-note` +* relation `~targetNote` pointing to a note where new notes should be saved ### Explanation Let's test this by using an HTTP client to send a request: -```http request +```text-plain POST http://my.trilium.org/custom/create-note Content-Type: application/json @@ -42,18 +45,19 @@ Content-Type: application/json "secret": "secret-password", "title": "hello", "content": "world" -} +}+++++++++++++++++++++++++++++++++++++++++++++++ ``` -Notice the `/custom` part in the request path - Trilium considers any request with this prefix as "custom" and tries to find a matching handler by looking at all notes which have `customRequestHandler` [[label|attributes]]. Value of this label then contains a regular expression which will match the request path (in our case trivial regex "create-note"). +Notice the `/custom` part in the request path - Trilium considers any request with this prefix as "custom" and tries to find a matching handler by looking at all notes which have `customRequestHandler` [label](Attributes.md). Value of this label then contains a regular expression which will match the request path (in our case trivial regex "create-note"). Trilium will then find our code note created above and execute it. `api.req`, `api.res` are set to [request](https://expressjs.com/en/api.html#req) and [response](https://expressjs.com/en/api.html#res) objects from which we can get details of the request and also respond. In the code note we check the request method and then use trivial authentication - keep in mind that these endpoints are by default totally unauthenticated, and you need to take care of this yourself. -Once we pass these checks we will just create the desired note using [[Script API]]. +Once we pass these checks we will just create the desired note using [Script API](Script%20API.md). -## Custom resource provider +Custom resource provider +------------------------ Another common use case is that you want to just expose a file note - in such case you create label `customResourceProvider` (value is again path regex). @@ -61,7 +65,8 @@ Note: The file that is supposed to be exposed needs to have a label `#customReso For example, your file is in custom/fonts, you can call it via `custom/fonts/myFont.woff`. -## Advanced concepts +Advanced concepts +----------------- `api.req` and `api.res` are Express.js objects - you can always look into its [documentation](https://expressjs.com/en/api.html) for details. @@ -69,19 +74,19 @@ For example, your file is in custom/fonts, you can call it via `custom/fonts/myF REST request paths often contain parameters in the URL, e.g.: -``` +```text-plain http://my.trilium.org/custom/notes/123 ``` The last part is dynamic so the matching of the URL must also be dynamic - for this reason the matching is done with regular expressions. Following `customRequestHandler` value would match it: -```jsregexp +```text-plain notes/([0-9]+) ``` Additionally, this also defines a matching group with the use of parenthesis which then makes it easier to extract the value. The matched groups are available in `api.pathParams`: -```javascript +```text-plain const noteId = api.pathParams[0]; ``` diff --git a/Custom-widget.md b/Wiki/Custom-widget.md similarity index 87% rename from Custom-widget.md rename to Wiki/Custom-widget.md index 816d150..a356f87 100644 --- a/Custom-widget.md +++ b/Wiki/Custom-widget.md @@ -1,17 +1,19 @@ +# Custom-widget It's possible to create custom widget in three possible locations where you can display your custom content. Positions are: -* `left-pane` -* `center-pane` -* `note-detail-pane` - located within `center-pane`, but specific to note (split) -* `right-pane` +* `left-pane` +* `center-pane` +* `note-detail-pane` - located within `center-pane`, but specific to note (split) +* `right-pane` -## Example - word count widget +Example - word count widget +--------------------------- -Create a code note of type JS frontend and **give it a `#widget` label**. +Create a code note of type JS frontend and **give it a** `**#widget**` **label**. -```javascript +```text-plain /* * This defines a custom widget which displays number of words and characters in a current text note. * To be activated for a given note, add label 'wordCount' to the note, you can also make it inheritable and thus activate it for the whole subtree. @@ -92,4 +94,4 @@ After you make changes it is necessary to restart Trilium so that the layout can On the bottom you can see the resulting widget: -![](https://user-images.githubusercontent.com/617641/84592613-4a426e00-ae47-11ea-9d9f-fbe59ac976a1.png) \ No newline at end of file +![](Custom-widget_image.png) \ No newline at end of file diff --git a/Wiki/Custom-widget_image.png b/Wiki/Custom-widget_image.png new file mode 100644 index 0000000..768dbdb Binary files /dev/null and b/Wiki/Custom-widget_image.png differ diff --git a/Data-directory.md b/Wiki/Data-directory.md similarity index 66% rename from Data-directory.md rename to Wiki/Data-directory.md index ffac974..0951574 100644 --- a/Data-directory.md +++ b/Wiki/Data-directory.md @@ -1,34 +1,37 @@ +# Data-directory Data directory contains: -* `document.db` - [[document]] -* `config.ini` - instance level settings like port on which the Trilium application runs -* `backup` - contains automatically [[backup]] of documents -* `log` - contains application log files +* `document.db` - [document](Document.md) +* `config.ini` - instance level settings like port on which the Trilium application runs +* `backup` - contains automatically [backup](Backup.md) of documents +* `log` - contains application log files + +Location +-------- -## Location 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): -[[images/about-trilium-data-dir.png]] +![](images/about-trilium-data-dir.png) Here's how the location is decided: Data directory is normally named `trilium-data` and it is stored in: -* `/home/[user]/.local/share` for Linux -* `C:\Users\[user]\AppData\Roaming` for Windows Vista and up -* `/Users/[user]/Library/Application Support` for Mac OS -* user's home is a fallback if some of the paths above don't exist -* user's home is also a default setup for [[docker|Docker server installation]] +* `/home/[user]/.local/share` for Linux +* `C:\Users\[user]\AppData\Roaming` for Windows Vista and up +* `/Users/[user]/Library/Application Support` for Mac OS +* user's home is a fallback if some of the paths above don't exist +* user's home is also a default setup for \[\[docker|Docker server installation\]\] If you want to back up your Trilium data, just backup this single directory - it contains everything you need. ### Changing the location of data directory -If you want to use some other location for the data directory than the default one, you may change it via TRILIUM_DATA_DIR environment variable to some other location: +If you want to use some other location for the data directory than the default one, you may change it via TRILIUM\_DATA\_DIR environment variable to some other location: #### Linux -``` +```text-plain export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data ``` @@ -40,7 +43,7 @@ To load it manually, u need to use `launchctl setenv TRILIUM_DATA_DIR Here is a pre-defined template, where you just need to add your path to: -```xml +```text-plain @@ -63,11 +66,11 @@ Here is a pre-defined template, where you just need to add your path to: ### Create a script to run with specific data directory -An alternative to globally setting environment variable is to run only the Trilium Notes with this environment variable. This then allows for different setup styles like two [[document]] instances or "portable" installation. +An alternative to globally setting environment variable is to run only the Trilium Notes with this environment variable. This then allows for different setup styles like two [document](Document.md) instances or "portable" installation. To do this in unix based systems simply run trilium like this: -``` +```text-plain TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data trilium ``` @@ -77,10 +80,10 @@ You can then save the above command as a shell script on your path for convenien It's possible to configure e.g. backup and log directories separately, with following env. variables: -* `TRILIUM_DOCUMENT_PATH` -* `TRILIUM_BACKUP_DIR` -* `TRILIUM_LOG_DIR` -* `TRILIUM_ANONYMIZED_DB_DIR` -* `TRILIUM_CONFIG_INI_PATH` +* `TRILIUM_DOCUMENT_PATH` +* `TRILIUM_BACKUP_DIR` +* `TRILIUM_LOG_DIR` +* `TRILIUM_ANONYMIZED_DB_DIR` +* `TRILIUM_CONFIG_INI_PATH` If these are not set, default paths within the data directory will be used. \ No newline at end of file diff --git a/Day-notes.md b/Wiki/Day-notes.md similarity index 55% rename from Day-notes.md rename to Wiki/Day-notes.md index 1f39c8f..a261237 100644 --- a/Day-notes.md +++ b/Wiki/Day-notes.md @@ -1,53 +1,62 @@ +# Day-notes A common pattern in note-taking is that a lot of notes will be centered around a certain date - e.g. you have some tasks which needs to be done on a certain date, you have meeting minutes from a certain date, you have your thoughts etc. and it all revolves around a date on which they occurred. For this reason, it makes sense to create a certain "day workspace" which will centralize all those notes relevant for a certain date. -For this, Trilium provides a concept of "day note". Trilium semi-automatically generates a single note for each day. Under this note you can save all those relevant notes. +For this, Trilium provides a concept of "day note". Trilium semi-automatically generates a single note for each day. Under this note you can save all those relevant notes. -Select an existing day note, and the menubar contains a calendar widget. Select any day to create a note for that day. ![image](https://user-images.githubusercontent.com/69441971/116097284-88c8cc00-a699-11eb-8e5f-bbc19a63f823.png) +Select an existing day note, and the menubar contains a calendar widget. Select any day to create a note for that day. ![image](Day-notes_image.png) +This pattern works well also because of \[\[cloning|Cloning notes\]\] functionality - note can appear in multiple places in the note tree, so besides appearing under day note, it can also be categorized into other notes. -This pattern works well also because of [[cloning|Cloning notes]] functionality - note can appear in multiple places in the note tree, so besides appearing under day note, it can also be categorized into other notes. +Demo +---- -## Demo -[[images/day-notes.png]] +![](images/day-notes.png) -You can see the structure of day notes appearing under "Journal" note - there's a note for the whole year 2017, under it, you have "12 - December" which then contains "18 - Monday". This is our "day note" which contains some text in its content and also has some child notes (some of them are from [[Task manager]]). +You can see the structure of day notes appearing under "Journal" note - there's a note for the whole year 2017, under it, you have "12 - December" which then contains "18 - Monday". This is our "day note" which contains some text in its content and also has some child notes (some of them are from [Task manager](Task-manager.md)). -You can also notice how this day note has [[promoted attribute|Promoted attributes]] "weight" where you can track your daily weight. This data is then used in [[Weight tracker]]. +You can also notice how this day note has [promoted attribute](Promoted%20attributes.md) "weight" where you can track your daily weight. This data is then used in [Weight tracker](Weight-tracker.md). -## Templates -Trilium provides [[template]] functionality, and it could be used together with day notes. +Templates +--------- + +Trilium provides [template](Template.md) functionality, and it could be used together with day notes. You can define one of the following relations on the root of the journal (identified by `#calendarRoot` label): -* yearTemplate -* monthTemplate -* dateTemplate +* yearTemplate +* monthTemplate +* dateTemplate All of these are relations. When Trilium creates a new note for year or month or date, it will take a look at the root and attach a corresponding `~template` relation to the newly created role. Using this, you can e.g. create your daily template with e.g. checkboxes for daily routine etc. -## Date pattern +Date pattern +------------ It's possible to customize the title of generated date notes by defining a `#datePattern` label on a root calendar note (identified by `#calendarRoot` label). Following are possible values: -* `{dayInMonthPadded} - {weekDay}` day notes are named e.g. "24 - Monday" -* `{dayInMonthPadded}: {weekDay3}` day notes are named e.g. "24: Mon" -* `{dayInMonthPadded}: {weekDay2}` day notes are named e.g. "24: Mo" -* `{isoDate} - {weekDay}` day notes are named e.g. "2020-12-24 - Monday" -* `{ordinal}` is replaced with the ordinal date (e.g. 1st, 2nd, 3rd) etc. +* `{dayInMonthPadded} - {weekDay}` day notes are named e.g. "24 - Monday" +* `{dayInMonthPadded}: {weekDay3}` day notes are named e.g. "24: Mon" +* `{dayInMonthPadded}: {weekDay2}` day notes are named e.g. "24: Mo" +* `{isoDate} - {weekDay}` day notes are named e.g. "2020-12-24 - Monday" +* `{ordinal}` is replaced with the ordinal date (e.g. 1st, 2nd, 3rd) etc. + +Month pattern +------------- -## Month pattern It is also possible to customize the title of generated month notes through the `#monthPattern` attribute, much like `#datePattern`. The options are: -- `{monthNumberPadded}` results in a number like `09` for September, and `11` for November -- `{month}` results in the full month name (e.g. `September` or `October`) -- `{shortMonth3}` is replaced with the first 3 letters of the month, e.g. Jan, Feb, etc. -- `{shortMonth4}` is replaced with the first 4 letters of the month, e.g. Sept, Octo, etc. + +* `{monthNumberPadded}` results in a number like `09` for September, and `11` for November +* `{month}` results in the full month name (e.g. `September` or `October`) +* `{shortMonth3}` is replaced with the first 3 letters of the month, e.g. Jan, Feb, etc. +* `{shortMonth4}` is replaced with the first 4 letters of the month, e.g. Sept, Octo, etc. The default is `{monthNumberPadded} - {month}` -## Implementation +Implementation +-------------- Trilium has some special support for day notes in the form of [backend Script API](https://zadam.github.io/trilium/backend_api/BackendScriptApi.html) - see e.g. getDayNote() function. Day (and year, month) notes are created with a label - e.g. `#dateNote="2018-08-16"` this can then be used by other scripts to add new notes to day note etc. -Journal also has relation `child:child:child:template=Day template` (see [[attribute inheritance]]) which effectively adds [[template]] to day notes (grand-grand-grand children of Journal). +Journal also has relation `child:child:child:template=Day template` (see \[\[attribute inheritance\]\]) which effectively adds \[\[template\]\] to day notes (grand-grand-grand children of Journal). \ No newline at end of file diff --git a/Wiki/Day-notes_image.png b/Wiki/Day-notes_image.png new file mode 100644 index 0000000..131cc8e Binary files /dev/null and b/Wiki/Day-notes_image.png differ diff --git a/Wiki/Default-note-title.md b/Wiki/Default-note-title.md new file mode 100644 index 0000000..4f02c51 --- /dev/null +++ b/Wiki/Default-note-title.md @@ -0,0 +1,31 @@ +# Default-note-title +When a new note is created, its name is by default "new note". In some cases, it can be desirable to have a different or even a dynamic default note title. + +For this use case, Trilium (since v0.52) supports `#titleTemplate` [label](Attributes.md). You can create such a label for a given note, assign it a value, and this value will be used as a default title when creating child notes. As with other labels, you can make it inheritable to apply recursively, and you can even place it on the root note to have it applied globally everywhere. + +As an example use case, imagine you collect books you've read in a given year like this: + +* 2022 Books + * Neal Stephenson: Anathem, 2008 + * Franz Kafka: Die Verwandlung, 1915 + +Now, to the parent note "2022 Books" you can assign label `#titleTemplate="[Author name]: [Book title], [Publication year]"`. + +And all children of "2022 Books" will be created with initial title "\[Author name\]: \[Book title\], \[Publication year\]". There's no artificial intelligence here, the idea is to just prompt you to manually fill in the pieces of information into the note title by yourself. + +Dynamic value +------------- + +The value of `#titleTemplate` is evaluated at the point of note's creation as a JavaScript string, which means it can be enriched with the help of JS string interpolation with dynamic data. + +As an example, imagine you collect server outage incidents and write some notes. It looks like this: + +* Incidents + * 2022-05-09: System crash + * 2022-05-15: Backup delay + +You can automatize the date assignment by assigning a label `#titleTemplate="${now.format('YYYY-MM-DD')}: "` to the parent note "Incidents". Whenever a new child note is created, the title template is evaluated with the injected [now](https://day.js.org/docs/en/display/format) object. + +Second variable injected is [parentNote](https://zadam.github.io/trilium/backend_api/Note.html), an example could be `#titleTemplate="${parentNote.getLabelValue('authorName')}'s literary works"`. + +See also \[\[[template](Template.md)\]\] which provides similar capabilities, including default note's content. \ No newline at end of file diff --git a/Wiki/Desktop-installation.md b/Wiki/Desktop-installation.md new file mode 100644 index 0000000..a43b601 --- /dev/null +++ b/Wiki/Desktop-installation.md @@ -0,0 +1,17 @@ +# Desktop-installation +If you want to use Trilium on the desktop, download binary release for your platform from [latest release](https://github.com/TriliumNext/Notes/releases/latest), unzip the package and run `trilium` executable. + +Startup scripts +--------------- + +There are also some other options to start Trilium: + +* `trilium-no-cert-check` - Trilium will not validate the certificates, useful e.g. when you're syncing against a sync server with self-signed certificate + * Alternatively you can set `NODE_TLS_REJECT_UNAUTHORIZED=0` environment variable to the Trilium process. +* `trilium-portable` - Trilium will try to create [data directory](Data-directory.md) in the trilium's directory +* `trilium-safe-mode` - start up in "safe mode" which disables any startup scripts which might e.g. crash the application + +Synchronization +--------------- + +If you are using a desktop instance and would like to sync with your server instance: [Synchronization](Synchronization.md) \ No newline at end of file diff --git a/Docker-server-installation.md b/Wiki/Docker-server-installation.md similarity index 63% rename from Docker-server-installation.md rename to Wiki/Docker-server-installation.md index 270d081..bd2b838 100644 --- a/Docker-server-installation.md +++ b/Wiki/Docker-server-installation.md @@ -1,75 +1,93 @@ +# Docker-server-installation Trilium can be run as docker image. This is recommended way to deploy Trilium on servers. -Official docker images are published on docker hub for **AMD64**, **ARMv6**, **ARMv7** and **ARMv8/64**: https://hub.docker.com/r/zadam/trilium/ +Official docker images are published on docker hub for **AMD64**, **ARMv6**, **ARMv7** and **ARMv8/64**: [https://hub.docker.com/r/zadam/trilium/](https://hub.docker.com/r/zadam/trilium/)%%{WARNING}%% + +Prerequisites +------------- -## Prerequisites To start, you will need to have docker installed on your computer. Here are two guides that can help: -- https://docs.docker.com/engine/install/ubuntu/ -- https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04 + +* [https://docs.docker.com/engine/install/ubuntu/](https://docs.docker.com/engine/install/ubuntu/) +* [https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-18-04) Trilium docker container requires running as root, check if this is possible in your environment. -## Pull image +Pull image +---------- -~~~~ -docker pull zadam/trilium:[VERSION] -~~~~ +```text-plain +docker pull zadam/trilium:[VERSION] %%{WARNING}%% +``` -Replace [VERSION] for actual latest version or use "series" tag - e.g. `0.52-latest`. +Replace \[VERSION\] for actual latest version or use "series" tag - e.g. `0.52-latest`. **It's not recommended to use "latest" tag since it may upgrade your Trilium instance to a new minor version, which may potentially break your sync setup or cause other issues.** -## Prepare data directory on the host system +Prepare data directory on the host system +----------------------------------------- Trilium needs a directory where it can store its data, this then needs to be mounted into the docker container. The container needs to runs as a root to be able to access it in write mode. -## Run image -These commands mount the volume to the host system so that trilium's data (most importantly [[document]]) is persisted and not cleared after container stops. +Run image +--------- + +These commands mount the volume to the host system so that trilium's data (most importantly [document](Document.md)) is persisted and not cleared after container stops. ### Local only -This will run the container so that it only available on the localhost. Use this to test the installation from a web browser on the same machine you run this command on, or if you are using a proxy with nginx/apache. -~~~~ -sudo docker run -t -i -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] -~~~~ -1. Test to see that the docker image is running with `docker ps` -2. Access the trilium by opening a browser and go to `127.0.0.1:8080` + +This will run the container so that it only available on the localhost. Use this to test the installation from a web browser on the same machine you run this command on, or if you are using a proxy with nginx/apache. + +```text-plain +sudo docker run -t -i -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] %%{WARNING}%% +``` + +1. Test to see that the docker image is running with `docker ps` +2. Access the trilium by opening a browser and go to `127.0.0.1:8080` ### Local network only -This command will run the container so that it is only available on your local network. This is preferable if you do not want to open ports to the rest of the internet. However, you can still access it from outside by using a VPN like WireGuard to get into your own network first. This method does assume that your local network limits outside access. + +This command will run the container so that it is only available on your local network. This is preferable if you do not want to open ports to the rest of the internet. However, you can still access it from outside by using a VPN like WireGuard to get into your own network first. This method does assume that your local network limits outside access. First, you have to create a new network in Docker to access your local network. Here is an example, give note to "parent" and the network numbers as it may differ from your own. For more detailed information, [click here](https://blog.oddbit.com/post/2018-03-12-using-docker-macvlan-networks/). -~~~~ + +```text-plain docker network create -d macvlan -o parent=eth0 --subnet 192.168.2.0/24 --gateway 192.168.2.254 --ip-range 192.168.2.252/27 mynet -~~~~ +``` Secondly, you have to adjust the docker run command so it takes this network into account but keep using localhost to limit the accessibility of the ports to the outside world. -~~~~ + +```text-plain docker run --net=mynet -d -p 127.0.0.1:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:0.52-latest -~~~~ +``` + +Alternatively, if you wish to have the saved data and the application using a different UID & GID than 1000:1000, you can use the USER\_UID & USER\_GID environment variables: -Alternatively, if you wish to have the saved data and the application using a different UID & GID than 1000:1000, you can use the USER_UID & USER_GID environment variables: -~~~~ -docker run --net=mynet -d -p 127.0.0.1:8080:8080 -e "USER_UID=1001" -e "USER_GID=1001" -v ~/trilium-data:/home/node/trilium-data zadam/trilium:0.52-latest -~~~~ +```text-plain +docker run --net=mynet -d -p 127.0.0.1:8080:8080 -e "USER_UID=1001" -e "USER_GID=1001" -v ~/trilium-data:/home/node/trilium-data zadam/trilium:0.52-latest %%{WARNING}%% +``` -Finally, use docker inspect to find your local IP address to connect to. You can access this from all your devices connected to the local network as such: [local:ip]:8080. -~~~~ +Finally, use docker inspect to find your local IP address to connect to. You can access this from all your devices connected to the local network as such: \[local:ip\]:8080. + +```text-plain docker ps docker inspect [container_name] -~~~~ +``` ### Available anywhere + This will run the container as a background process and will be available from any IP address -~~~~ -docker run -d -p 0.0.0.0:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] -~~~~ + +```text-plain +docker run -d -p 0.0.0.0:8080:8080 -v ~/trilium-data:/home/node/trilium-data zadam/trilium:[VERSION] %%{WARNING}%% +``` + To stop this background docker process use `docker ps` to get the "CONTAINER ID" and then use `docker stop ` ### Different data directory location -If you want to run your instance in a non-default way, please use the volume switch as follows: `-v ~/YourOwnDirectory:/home/node/trilium-data zadam/trilium:[VERSION]`. -It is important to be aware of how Docker works for volumes, with the first path being your own and the second the one to virtually bind to. -https://docs.docker.com/storage/volumes/ + +If you want to run your instance in a non-default way, please use the volume switch as follows: `-v ~/YourOwnDirectory:/home/node/trilium-data zadam/trilium:[VERSION]`. It is important to be aware of how Docker works for volumes, with the first path being your own and the second the one to virtually bind to. [https://docs.docker.com/storage/volumes/](https://docs.docker.com/storage/volumes/) ### Note about --user directive -Please note, the --user directive is not supported and the container will not run without root. -Instead please use the USER_UID & USER_GID environment variables as shown above. + +Please note, the --user directive is not supported and the container will not run without root. Instead please use the USER\_UID & USER\_GID environment variables as shown above. \ No newline at end of file diff --git a/Document.md b/Wiki/Document.md similarity index 65% rename from Document.md rename to Wiki/Document.md index 4f5025b..a4aae5c 100644 --- a/Document.md +++ b/Wiki/Document.md @@ -1,40 +1,45 @@ +# Document Document is [SQLite](https://www.sqlite.org) database which contains all notes, tree structure, metadata and most of the configuration. -## Location +Location +-------- -Document is stored in the [[data directory]]. +Document is stored in the [data directory](Data-directory.md). -## Demo document +Demo document +------------- When you run Trilium for the first time, it will generate a demo document for you as a starting point. It's also pretty useful for demonstration of some of Trilium's features, e.g.: -* [[Relation map]] -* [[Day notes]] -* [[Weight tracker]] -* [[Task manager]] -* [[Custom CSS theme|Themes#custom-css-themes]] *Steel Blue* +* [Relation map](Relation-map.md) +* [Day notes](Day-notes.md) +* [Weight tracker](Weight-tracker.md) +* [Task manager](Task-manager.md) +* [Custom CSS theme](Themes.md) ### Restoring demo document -In some cases you might want to take a look at the demo document after you deleted it. Or you might want to see if there was something added (sometimes we add a new feature demonstration into demo document). In such case you can just [download .zip archive](https://github.com/TriliumNext/Notes/raw/stable/db/demo.zip) of the latest document and import it somewhere into the tree (right-click on a note where you want to import the demo document and choose "Import"). +In some cases you might want to take a look at the demo document after you deleted it. Or you might want to see if there was something added (sometimes we add a new feature demonstration into demo document). In such case you can just [download .zip archive](https://github.com/TriliumNext/Notes/raw/stable/db/demo.zip) %%{WARNING}%% of the latest document and import it somewhere into the tree (right-click on a note where you want to import the demo document and choose "Import"). -## Manually modifying the document +Manually modifying the document +------------------------------- Trilium provides a lot of flexibility, but with that you can also potentially shoot yourself in the foot (e.g. with startup script which blanks the app view). In such cases you can manually fix notes on the database layer - you can use e.g. [https://sqlitebrowser.org/](https://sqlitebrowser.org/) to open `document.db` file, find problematic notes and manually fix them. Don't forget to commit / write changes after you're done. -## How to reset the document +How to reset the document +------------------------- If you previously just experimented with Trilium and want to get it to the initial state, you can do that by deleting the `document.db*` files, e.g. like this: -```bash +```text-plain rm document.db* ``` -If you don't need to preserve e.g. the `config.ini`, then you can also delete the whole [[data directory]] like this: +If you don't need to preserve e.g. the `config.ini`, then you can also delete the whole [data directory](Data-directory.md) like this: -```bash +```text-plain rm -r ./trilium-data ``` diff --git a/ETAPI.md b/Wiki/ETAPI.md similarity index 77% rename from ETAPI.md rename to Wiki/ETAPI.md index 885b328..74a0145 100644 --- a/ETAPI.md +++ b/Wiki/ETAPI.md @@ -1,27 +1,29 @@ +# ETAPI ETAPI is Trilium's public/external REST API. It is available since Trilium v0.50. The documentation is in OpenAPI format, available [here](https://github.com/TriliumNext/Notes/blob/master/src/etapi/etapi.openapi.yaml). [trilium-py](https://github.com/Nriver/trilium-py) is a third-party Python implementation for ETAPI client, you can use Python to communicate with Trilium. -## Authentication +Authentication +-------------- All operations have to be authenticated using a token. You can get this token either from Options -> ETAPI or programmatically using the `/auth/login` REST call (see the [spec](https://github.com/TriliumNext/Notes/blob/master/src/etapi/etapi.openapi.yaml)): -``` +```text-plain GET https://myserver.com/etapi/app-info Authorization: ETAPITOKEN ``` Alternatively, since 0.56 you can also use basic auth format: -``` +```text-plain GET https://myserver.com/etapi/app-info Authorization: Basic BATOKEN ``` -* Where `BATOKEN = BASE64(username + ':' + password)` - this is a standard Basic Auth serialization -* Where `username` is "etapi" -* And `password` is the generated ETAPI token described above. +* Where `BATOKEN = BASE64(username + ':' + password)` - this is a standard Basic Auth serialization +* Where `username` is "etapi" +* And `password` is the generated ETAPI token described above. Basic Auth is meant to be used with tools which support only basic auth. \ No newline at end of file diff --git a/Error-logs.md b/Wiki/Error-logs.md similarity index 57% rename from Error-logs.md rename to Wiki/Error-logs.md index 6009c5d..7b2bd53 100644 --- a/Error-logs.md +++ b/Wiki/Error-logs.md @@ -1,33 +1,37 @@ +# Error-logs It's important to provide all available error logs together with bug reports. This page will show you how to do it. -## Backend logs +Backend logs +------------ -Open [[data directory]], go to `log` subdirectory and find the latest log file, e.g. `trilium-2022-12-14.log`. You can attach the whole file to the bug report (preferable) or open it and copy-paste only the last lines / lines you believe are relevant. +Open [data directory](Data-directory.md), go to `log` subdirectory and find the latest log file, e.g. `trilium-2022-12-14.log`. You can attach the whole file to the bug report (preferable) or open it and copy-paste only the last lines / lines you believe are relevant. If you have trouble finding it the log files, there's also an in-app option in top-left menu button -> Advanced -> Show backend log. -## Frontend logs +Frontend logs +------------- To provide frontend logs, we need to open the Developer Console. Often the easiest way is to press `CTRL-SHIFT-I` which should work in most browsers (and desktop app). Make sure that the error producing action happened right before you copy&paste the errors, the console is cleared on app restart. If that doesn't work, then: -* in Trilium desktop app, go to top-left menu button -> Advanced -> Open Dev Tools -* In Firefox/Chrome right-click anywhere in the page and click Inspect: +* in Trilium desktop app, go to top-left menu button -> Advanced -> Open Dev Tools +* In Firefox/Chrome right-click anywhere in the page and click Inspect: -[[images/error-logs-firefox-context-menu.png]] +![](images/error-logs-firefox-context-men.png) Once you have Dev Tools open, click on "Console" tab: -[[images/error-logs-dev-tools.png]] +![](images/error-logs-dev-tools.png) Copy-paste (or screenshot) the logs. It's better to provide not just errors, but the whole log, which might provide context while analyzing the bug. -## Providing sensitive data +Providing sensitive data +------------------------ -If you don't feel comfortable attaching the logs or anything sensitive to the public GitHub issues, feel free to mail them to zadam.apps@gmail.com +If you don't feel comfortable attaching the logs or anything sensitive to the public GitHub issues, feel free to mail them to [zadam.apps@gmail.com](#root/N3Zt66yETj9g) -Use this email to also provide anything which could assist in analysing the bug - e.g. files/images/ZIPs being imported or [[anonymized database]]. +Use this email to also provide anything which could assist in analysing the bug - e.g. files/images/ZIPs being imported or [anonymized database](Anonymized%20database.md). ### Exporting note subtree for reproduction @@ -35,4 +39,4 @@ Often times, bugs manifest themselves in specific notes and having them would gr In such case, please export the relevant note subtree by right-clicking it on the left tree, choosing Export - HTML as ZIP: -[[images/error-logs-export-subtree.png]] +![](images/error-logs-export-subtree.png) \ No newline at end of file diff --git a/Wiki/Events.md b/Wiki/Events.md new file mode 100644 index 0000000..ea83498 --- /dev/null +++ b/Wiki/Events.md @@ -0,0 +1,31 @@ +# Events +[Script](Scripts.md) notes can be triggered by events. Note that these are backend events and thus relation need to point to the "JS backend" code note. + +Global events +------------- + +Global events are attached to the script note via label. Simply create e.g. "run" label with some of these values and script note will be executed once the event occurs. + +* `run` + * `frontendStartup` - executes on frontend upon startup + * `mobileStartup` - executes on mobile frontend upon startup + * `backendStartup` - executes on backend upon startup + * `hourly` - executes once an hour on backend + * `daily` - executes once a day on backend + +Entity events +------------- + +Other events are bound to some entity, these are defined as [relations](Attributes.md) - meaning that script is triggered only if note has this script attached to it through relations (or it can inherit it). + +* `runOnNoteCreation` - executes when note is created on backend +* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well) +* `runOnNoteContentChange` - executes when note content is changed (includes note creation as well). +* `runOnNoteChange` - executes when note is changed (includes note creation as well) +* `runOnNoteDeletion` - executes when note is being deleted +* `runOnBranchCreation` - executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note. +* `runOnBranchChange` (since v0.62) - executes when a branch is changed - either expanded status or prefix are changed. +* `runOnBranchDeletion` - executes when a branch is delete. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted). +* `runOnChildNoteCreation` - executes when new note is created under _this_ note +* `runOnAttributeCreation` - executes when new attribute is created under _this_ note +* `runOnAttributeChange` - executes when attribute is changed under _this_ note \ No newline at end of file diff --git a/Evernote-import.md b/Wiki/Evernote-import.md similarity index 78% rename from Evernote-import.md rename to Wiki/Evernote-import.md index 749f761..b698ae9 100644 --- a/Evernote-import.md +++ b/Wiki/Evernote-import.md @@ -1,16 +1,21 @@ +# Evernote-import Trilium can import ENEX files which are used by Evernote for backup/export. One ENEX file represents content (notes and resources) of one notebook. -## Export ENEX from Evernote +Export ENEX from Evernote +------------------------- + To export ENEX file, you need to have a _legacy_ desktop version of Evernote (i.e. not web/mobile). Right click on notebook and select export and follow the wizard. -## Import ENEX in Trilium +Import ENEX in Trilium +---------------------- Once you have ENEX file, you can import it to Trilium. Right click on some note (to which you want to import the file), click on "Import" and select the ENEX file. After importing the ENEX file, go over the imported notes and resources to be sure the import went well, and you didn't lose any data. -## Limitations +Limitations +----------- All resources (except for images) are created as note's attachments. -HTML inside ENEX files is not exactly valid so some formatting maybe broken or lost. You can report major problems into [Trilium issue tracker](https://github.com/TriliumNext/Notes/issues). \ No newline at end of file +HTML inside ENEX files is not exactly valid so some formatting maybe broken or lost. You can report major problems into [Trilium issue tracker](https://github.com/TriliumNext/Notes/issues). %%{WARNING}%% \ No newline at end of file diff --git a/Wiki/FAQ.md b/Wiki/FAQ.md new file mode 100644 index 0000000..bade97b --- /dev/null +++ b/Wiki/FAQ.md @@ -0,0 +1,65 @@ +# FAQ +Mac OS support +-------------- + +Originally, desktop builds of Trilium Notes has been available for Windows & Linux, but there has been a considerable demand for macOS build. + +So I made one, but I underestimated the differences and specifics of Mac platform which seems to require special handling in several places. My lack of knowledge and frankly willingness to learn & code Mac specific functionality resulted in a current state where [Trilium does not integrate well into the OS](https://github.com/TriliumNext/Notes/issues/511) %%{WARNING}%%. + +macOS build is from now on considered "unsupported". I will strive to keep it fundamentally functional, but I won't work on Mac specific features or integrations. Note that this is more of an acknowledgment of an existing state rather than sudden change of direction. + +Of course, PRs are welcome. + +Translation / localization support +---------------------------------- + +Trilium is currently available only in English. Translation to other languages is not planned in the near/medium term because it brings a significant maintenance overhead. This decision might be revisited once Trilium stabilizes into a more mature product. + +For Chinese, there's an unofficial fork [here](https://github.com/Nriver/trilium-translation). Use at your own risk. + +Multi user support +------------------ + +Common request is to allow multiple users collaborate, share notes etc. So far I'm resisting this because of these reasons: + +* it's a huge feature, or rather a Pandora's box of collaboration features like user management, permissions, conflict resolution, real-time editing of a note by multiple people etc. This would be a huge amount of work. Trilium Notes is project made mostly by one person in free time and that's unlikely to change in the future. +* given its size it would probably pivot the attention away from my main focus which is a personal note-taking +* the assumption that only single person has access to the app simplifies many things, or just outright makes them possible. In multi-user app, our [scripting](Scripts.md) support would be a XSS security hole, while with the single user assumption it's an endless customizable tool. + +How to open multiple documents in one Trilium instance +------------------------------------------------------ + +This is normally not supported - one Trilium process can open only a single instance of a [document](Document.md). However, you can run two Trilium processes (from one installation), each connected to a separate document. To achieve this, you need to set a location for the [data directory](Data-directory.md) in the `TRILIUM_DATA_DIR` environment variable and separate port on `TRILIUM_PORT` environment variable. How to do that depends on the platform, in Unix-based systems you can achieve that by running command such as this: + +```text-plain +TRILIUM_DATA_DIR=/home/me/path/to/data/dir TRILIUM_PORT=12345 trilium +``` + +You can save this command into a `.sh` script file or make an alias. Do this similarly for a second instance with different data directory and port. + +Can I use Dropbox / Google Drive / OneDrive to sync data across multiple computers. +----------------------------------------------------------------------------------- + +No. + +These general purpose sync apps are not suitable to sync database files which are open and being worked on by another application. The result is that they will corrupt the database file, resulting in data loss and this message in the Trilium logs: + +> SqliteError: database disk image is malformed + +The only supported way to sync Trilium's data across the network is to use a [sync/web server](Synchronization.md). + +Why database instead of flat files? +----------------------------------- + +Trilium stores notes in a [document](Document.md) which is an SQLite database. People often ask why doesn't Trilium rather use flat files for note storage - it's fair question since flat files are easily interoperable, work with SCM/git etc. + +Short answer is that file systems are simply not powerful enough for what we want to achieve with Trilium. Using filesystem would mean fewer features with probably more problems. + +More detailed answer: + +* [clones](Cloning%20notes.md) are what you might call "hard directory link" in filesystem lingo, but this concept is not implemented in any filesystem +* filesystems make a distinction between directory and file while there's intentionally no such difference in Trilium +* files are stored in no particular order and user can't change this +* Trilium allows storing note [attributes](Attributes.md) which could be represented in extended user attributes but their support differs greatly among different filesystems / operating systems +* Trilium makes links / relations between different notes which can be quickly retrieved / navigated (e.g. for [note map](Note%20map.md)). There's no such support in file systems which means these would have to be stored in some kind of side-car files (mini-databases). +* Filesystems are generally not transactional. While this is not completely required for a note-taking application, having transactions make it way easier to keep notes and their metadata in predictable and consistent state. \ No newline at end of file diff --git a/_Footer.md b/Wiki/Footer.md similarity index 85% rename from _Footer.md rename to Wiki/Footer.md index 3afe4c0..057311d 100644 --- a/_Footer.md +++ b/Wiki/Footer.md @@ -1 +1,2 @@ +# Footer Back to [Overview](https://github.com/TriliumNext/Notes/wiki) \ No newline at end of file diff --git a/Wiki/Frontend-Basics.md b/Wiki/Frontend-Basics.md new file mode 100644 index 0000000..d2fc3fd --- /dev/null +++ b/Wiki/Frontend-Basics.md @@ -0,0 +1,60 @@ +# Frontend-Basics +Frontend API +------------ + +The frontend api supports two styles, regular scripts that are run with the current app and note context, and widgets that export an object to Trilium to be used in the UI. In both cases, the frontend api of Trilium is available to scripts running in the frontend context as global variable `api`. The members and methods of the api can be seen on the [Script API](Script%20API.md) page. + +Scripts +------- + +Scripts don't have any special requirements. They can be run at will using the execute button in the UI or they can be configured to run at certain times using [Attributes](Attributes.md) on the note containing the script. + +### Global Events + +This attribute is called `#run` and it can have any of the following values: + +* `frontendStartup` - executes on frontend upon startup. +* `mobileStartup` - executes on mobile frontend upon startup. +* `backendStartup` - executes on backend upon startup. +* `hourly` - executes once an hour on backend. +* `daily` - executes once a day on backend. + +### Entity Events + +These events are triggered by certain [relations](Attributes.md) to other notes. Meaning that the script is triggered only if the note has this script attached to it through relations (or it can inherit it). + +* `runOnNoteCreation` - executes when note is created on backend. +* `runOnNoteTitleChange` - executes when note title is changed (includes note creation as well). +* `runOnNoteContentChange` - executes when note content is changed (includes note creation as well). +* `runOnNoteChange` - executes when note is changed (includes note creation as well). +* `runOnNoteDeletion` - executes when note is being deleted. +* `runOnBranchCreation` - executes when a branch is created. Branch is a link between parent note and child note and is created e.g. when cloning or moving note. +* `runOnBranchDeletion` - executes when a branch is delete. Branch is a link between parent note and child note and is deleted e.g. when moving note (old branch/link is deleted). +* `runOnChildNoteCreation` - executes when new note is created under this note. +* `runOnAttributeCreation` - executes when new attribute is created under this note. +* `runOnAttributeChange` - executes when attribute is changed under this note. + +Widgets +------- + +Conversely to scripts, widgets do have some specific requirements in order to work. A widget must: + +* Extend [BasicWidget](https://zadam.github.io/trilium/frontend_api/BasicWidget.html) or one of it's subclasses. +* Create a new instance and assign it to `module.exports`. +* Define a `parentWidget` member to determine where it should be displayed. +* Define a `position` (integer) that determines the location via sort order. +* Have a `#widget` attribute on the containing note. +* Create, render, and return your element in the render function. + * For [BasicWidget](https://zadam.github.io/trilium/frontend_api/BasicWidget.html) and [NoteContextAwareWidget](https://zadam.github.io/trilium/frontend_api/NoteContextAwareWidget.html) you should create `this.$widget` and render it in `doRender()`. + * For [RightPanelWidget](https://zadam.github.io/trilium/frontend_api/RightPanelWidget.html) the `this.$widget` and `doRender()` are already handled and you should instead return the value in `doRenderBody()`. + +### parentWidget + +* `left-pane` - This renders the widget on the left side of the screen where the note tree lives. +* `center-pane` - This renders the widget in the center of the layout in the same location that notes and splits appear. +* `note-detail-pane` - This renders the widget _with_ the note in the center pane. This means it can appear multiple times with splits. +* `right-pane` - This renders the widget to the right of any opened notes. + +### Tutorial + +For more information on building widgets, take a look at [Widget Basics](Widget-Basics.md). \ No newline at end of file diff --git a/Wiki/Home.md b/Wiki/Home.md new file mode 100644 index 0000000..d6ad9da --- /dev/null +++ b/Wiki/Home.md @@ -0,0 +1,46 @@ +# Home +Overview +-------- + +Basic overview of the Trilium project is available at project homepage - [https://github.com/zadam/trilium#trilium-notes](https://github.com/zadam/trilium#trilium-notes) + +Inspiration for the name "Trilium": + +> Naming software is hard. I lived in Ontario when I first started the project and Trillium (the flower) is sort of a provincial logo, many institutions in Ontario are named "Trillium \[something\]". So I kept hearing/reading it almost everyday, I liked the sound of it and its nature motif, so I just reused it. + +> ~ Zadam (Trilium Developer) + +Documentation +------------- + +This [wiki](https://github.com/TriliumNext/Notes/wiki) %%{WARNING}%% contains additional and more in-depth information on some topics. See the sidebar for listing of all available pages. + +Quick Start +----------- + +Choose the setup +---------------- + +**Local only desktop/laptop** - Allows a single instance on a desktop and will save the notes locally on that desktop. + +1. [Desktop installation](Desktop-installation.md) + +**Server with web only access** - Installs the application on the server and allows access from any web browser on any device, including mobile. + +1. [Server installation](Server-installation.md) +2. [Mobile frontend](Mobile-frontend.md) (optional) +3. [![Deploy](Home_button.svg)](https://heroku.com/deploy?template=https://github.com/feilongfl/trilium-heroku) +4. [3rd party paid service to host a Trilium instance for you](https://trilium.cc/paid-hosting) + +**Combination of server and desktop/laptop** - Install the application on both a server, for web access and data synchronization, and desktop instance(s). This allows all the data to be stored on the server and either accessed from the web browser, or the desktop application. The desktop application will sync and store the data locally so that it can be used when offline. + +1. [Server installation](Server-installation.md) +2. [Mobile frontend](Mobile-frontend.md) (optional) +3. [Desktop installation](Desktop-installation.md) +4. [Synchronization](Synchronization.md) + +Basic concepts +-------------- + +1. Understand [Note](Note.md) +2. Watch the [Screenshot tour](Screenshot%20tour.md) \ No newline at end of file diff --git a/Wiki/Home_button.svg b/Wiki/Home_button.svg new file mode 100644 index 0000000..8f579f8 --- /dev/null +++ b/Wiki/Home_button.svg @@ -0,0 +1,18 @@ + + + + button + Created with Sketch. + + + + + + + + + + + + + \ No newline at end of file diff --git a/Images.md b/Wiki/Images.md similarity index 68% rename from Images.md rename to Wiki/Images.md index a6fa37b..685ea09 100644 --- a/Images.md +++ b/Wiki/Images.md @@ -1,19 +1,23 @@ +# Images Trilium supports storing and displaying images. Supported formats are JPEG, PNG and GIF. -An image can be uploaded in the form of note's [[attachment|attachments]] or as a standalone [[note|Tree concepts#note]] placed into the note tree. Its reference can be copied into a text note, in order to display it in the text itself. +An image can be uploaded in the form of note's [attachment](Attachments.md) or as a standalone [note](Tree%20concepts.md) placed into the [note tree](Tree%20concepts.md). Its reference can be copied into a text note, in order to display it in the text itself. + +Uploading images +---------------- -## Uploading images To add an image to the note, simply drag it from file explorer onto the note editor inside Trilium and the image will be uploaded. -[[gifs/upload-image.gif]] +![](gifs/upload-image.gif) Alternatively you can click on block toolbar and then on "Insert image": -[[images/block-toolbar-insert-image.png]] +![](images/block-toolbar-insert-image.png) You can also copy and paste an image from web - the image will be (asynchronously) downloaded and embedded. -## Compression +Compression +----------- Since Trilium isn't really meant to be primary storage for image data, it attempts to compress and resize (with pretty aggressive settings) uploaded images before storing them to the database. You may then notice some quality degradation. Basic quality settings is available in Options -> Other. diff --git a/Wiki/Keyboard-shortcuts.md b/Wiki/Keyboard-shortcuts.md new file mode 100644 index 0000000..53c566b --- /dev/null +++ b/Wiki/Keyboard-shortcuts.md @@ -0,0 +1,83 @@ +# Keyboard-shortcuts +This is supposed to be a complete list of keyboard shortcuts. Note that some of these may work only in certain contexts (e.g. in tree pane or note editor). + +It is also possible to configure most keyboard shortcuts in Options -> Keyboard shortcuts. Using `global:` prefix, you can assign a shortcut which will work even without Trilium being in focus (requires app restart to take effect). + +Note navigation +--------------- + +* `UP`, `DOWN` - go up/down in the list of notes, `CTRL-SHIFT-UP` and `CTRL-SHIFT-DOWN` work also from editor +* `LEFT`, `RIGHT` - collapse/expand node +* `ALT+LEFT`, `ALT+RIGHT` - go back / forwards in the history +* `CTRL+J` - show ["Jump to" dialog](Note%20navigation.md) +* `CTRL+.` - scroll to current note (useful when you scroll away from your note or your focus is currently in the editor) +* `BACKSPACE` - jumps to parent note +* `ALT+C` - collapse whole note tree +* `ALT+-` (alt with minus sign) - collapse subtree (if some subtree takes too much space on tree pane you can collapse it) +* you can define a [label](Attributes.md) `#keyboardShortcut` with e.g. value `Ctrl+I`. Pressing this keyboard combination will then bring you to the note on which it is defined. Note that Trilium must be reloaded/restarted (Ctrl+R) for changes to be in effect. + +See demo of some of these features in [note navigation](Note%20navigation.md). + +Tabs +---- + +* `CTRL+click` - (or middle mouse click) on note link opens note in a new tab + +Only in desktop (electron build): + +* `CTRL+T` - opens empty tab +* `CTRL+W` - closes active tab +* `CTRL+Tab` - activates next tab +* `CTRL+Shift+Tab` - activates previous tab + +Creating notes +-------------- + +* `CTRL+O` - creates new note after the current note +* `CTRL+P` - creates new sub-note into current note +* `F2` - edit [prefix](Note%20navigation.md) of current note clone + +Moving / cloning notes +---------------------- + +* `CTRL+UP`, `CTRL+DOWN` - move note up/down in the note list +* `CTRL+LEFT` - move note up in the note tree +* `CTRL+RIGHT` - move note down in the note tree +* `SHIFT+UP`, `SHIFT+DOWN` - multi-select note above/below +* `CTRL+A` - select all notes in the current level +* `SHIFT+click` - multi select note which you clicked on +* `CTRL+C` - copies current note (or current selection) into clipboard (used for [cloning](Cloning%20notes.md) +* `CTRL+X` - cuts current (or current selection) note into clipboard (used for moving notes) +* `CTRL+V` - pastes note(s) as sub-note into current note (which is either move or clone depending on whether it was copied or cut into clipboard) +* `DEL` - delete note / sub-tree + +Editing notes +------------- + +Trilium uses CKEditor 5 for the [text notes](Text-notes.md) and CodeMirror 5 for [code notes](Code-notes.md). Check the documentation of these projects to see all their built-in keyboard shortcuts. + +* `ENTER` in tree pane switches from tree pane into note title. Enter from note title switches focus to text editor. `CTRL+.` switches back from editor to tree pane. +* `CTRL+K` - create / edit [external link](Links.md) +* `CTRL+L` - create [internal (note) link](Links.md) +* `ALT+T` - inserts current date and time at caret position +* `CTRL+.` - jump away from the editor to tree pane and scroll to current note + +Runtime shortcuts +----------------- + +These are hooked in Electron to be similar to native browser keyboard shortcuts. + +* `F5`, `CTRL-R` - reloads trilium frontend +* `CTRL+SHIFT+I` - show developer tools +* `CTRL+F` - show search dialog +* `CTRL+-` - zoom out +* `CTRL+=` - zoom in + +Other +----- + +* `ALT+O` - show SQL console (use only if you know what you're doing) +* `ALT+M` - distraction-free mode - display only note editor, everything else is hidden +* `F11` - toggle full screen +* `CTRL+S` - toggle [search](Search.md) form in tree pane +* `ALT+A` - show note [attributes](Attributes.md) dialog \ No newline at end of file diff --git a/Kubernetes-server-installation.md b/Wiki/Kubernetes-server-installation.md similarity index 60% rename from Kubernetes-server-installation.md rename to Wiki/Kubernetes-server-installation.md index d8a7a27..1aed005 100644 --- a/Kubernetes-server-installation.md +++ b/Wiki/Kubernetes-server-installation.md @@ -1,27 +1,31 @@ -As Trilium can be run in Docker it also can be deployed in Kubernetes. -Trilium can be applied to Kubernetes manually or per helm chart. +# Kubernetes-server-installation +As Trilium can be run in Docker it also can be deployed in Kubernetes. Trilium can be applied to Kubernetes manually or per helm chart. The recommended way is helm. -# Root privileges +Root privileges +--------------- -Trilium docker container needs to be run with root privileges. The node process inside the container will be started with reduced privileges (uid:gid 1000:1000) after some initialization logic. Make sure that you don't use a security context which changes the user id. -To use a different uid:gid for file storage and the application, please use the USER_UID & USER_GID environment variables. +Trilium docker container needs to be run with root privileges. The node process inside the container will be started with reduced privileges (uid:gid 1000:1000) after some initialization logic. Make sure that you don't use a security context which changes the user id. To use a different uid:gid for file storage and the application, please use the USER\_UID & USER\_GID environment variables. The docker image will also fix the permissions of /home/node so you don't have to use an init container. -# Helm Install +Helm Install +------------ -Unofficial helm chart by [ohdearaugustin](https://github.com/ohdearaugustin): https://github.com/ohdearaugustin/charts +Unofficial helm chart by [ohdearaugustin](https://github.com/ohdearaugustin): [https://github.com/ohdearaugustin/charts](https://github.com/ohdearaugustin/charts) -## Add helm repository +Add helm repository +------------------- -``` +```text-plain helm repo add https://ohdearaugustin.github.io/charts/ "" has been added to your repositories ``` -## How to install a chart +How to install a chart +---------------------- + Just `helm install /trilium-notes`. For more information on using Helm, refer to the Helm documentation. \ No newline at end of file diff --git a/Wiki/Link-map.md b/Wiki/Link-map.md new file mode 100644 index 0000000..902c9e4 --- /dev/null +++ b/Wiki/Link-map.md @@ -0,0 +1,2 @@ +# Link-map +Map \ No newline at end of file diff --git a/Links.md b/Wiki/Links.md similarity index 57% rename from Links.md rename to Wiki/Links.md index cae53d1..88db7e6 100644 --- a/Links.md +++ b/Wiki/Links.md @@ -1,22 +1,26 @@ -## External links -External link is general web link targeting some external web resource - e.g. https://en.wikipedia.org/wiki/South_China_Sea is an external link to one Wikipedia page. +# Links +External links +-------------- + +External link is general web link targeting some external web resource - e.g. [https://en.wikipedia.org/wiki/South\_China\_Sea](https://en.wikipedia.org/wiki/South_China_Sea) is an external link to one Wikipedia page. External links are done through CKEditor native links. To create an external link, select text and press `CTRL-K` or wait for the "balloon" to appear and click link icon there. -[[gifs/create-external-link.gif]] +![](gifs/create-external-link.gif) You can follow external link by either double clicking (will open new tab/window) it or right clicking on them and choosing "Open in new tab". -## Internal links to notes +Internal links to notes +----------------------- Links to internal notes are created a bit differently. To create link to note at current cursor position, press `CTRL-L`. In the dialog you can see radio button to choose from different types of linking: -* link title mirrors the note's current title - this is sometimes also called "reference link". Title of such links cannot be changed, instead it is always mirroring the title of linked note. This way the link title is never outdated -* link title can be changed arbitrarily - this is the traditional hyperlink - you link to a particular note and can choose the link title +* link title mirrors the note's current title - this is sometimes also called "reference link". Title of such links cannot be changed, instead it is always mirroring the title of linked note. This way the link title is never outdated +* link title can be changed arbitrarily - this is the traditional hyperlink - you link to a particular note and can choose the link title -[[gifs/create-link-to-note.gif]] +![](gifs/create-link-to-note.gif) You can follow the note link by double clicking it. @@ -26,6 +30,7 @@ Alternatively if you only wish to quickly preview the content, you can hover ove Trilium also provides "inline" linking - type `@` and you'll see an autocomplete, just type few characters from the desired note title, press enter and you have a link. -## Note map +Note map +-------- -Trilium provides a visualisation of incoming and outgoing links for a particular note. See [[note map]] for details. \ No newline at end of file +Trilium provides a visualisation of incoming and outgoing links for a particular note. See [note map](Note%20map.md) for details. \ No newline at end of file diff --git a/Manual-server-installation.md b/Wiki/Manual-server-installation.md similarity index 63% rename from Manual-server-installation.md rename to Wiki/Manual-server-installation.md index 67a3126..d8af0b4 100644 --- a/Manual-server-installation.md +++ b/Wiki/Manual-server-installation.md @@ -1,13 +1,16 @@ +# Manual-server-installation This page describes manually installing Trilium on your server. **Note that this is a not well supported way to install Trilium, problems may appear, information laid out here is quite out of date. It is recommended to use either Docker or packaged build installation.** -## Requirements +Requirements +------------ Trilium is a node.js application. Supported (tested) version of node.js is latest 14.X.X and 16.X.X. Trilium might work with older versions as well. You can check your node version with this command (node.js needs to be installed): -~~~~ + +```text-plain node --version -~~~~ +``` If your Linux distribution has only an outdated version of node.js, you can take a look at the installation instruction on node.js website, which covers most popular distributions. @@ -15,20 +18,25 @@ If your Linux distribution has only an outdated version of node.js, you can take There are some dependencies required. You can see command for Debian and its derivatives (like Ubuntu) below: -~~~~ +```text-plain sudo apt install libpng16-16 libpng-dev pkg-config autoconf libtool build-essential nasm libx11-dev libxkbfile-dev -~~~~ +``` -## Installation +Installation +------------ ### Download -You can either download source code zip/tar from [[latest release|https://github.com/TriliumNext/Notes/releases/latest]] or clone git repository **from stable branch** with -~~~ -git clone -b stable https://github.com/zadam/trilium.git -~~~ -## Installation -~~~ +You can either download source code zip/tar from [https://github.com/TriliumNext/Notes/releases/latest\]\]](https://github.com/TriliumNext/Notes/releases/latest%5D%5D) %%{WARNING}%%or clone git repository **from stable branch** with + +```text-plain +git clone -b stable https://github.com/zadam/trilium.git %%{WARNING}%% +``` + +Installation +------------ + +```text-plain cd trilium # download all node dependencies @@ -39,19 +47,21 @@ npm rebuild # bundles & minifies frontend JavaScript npm run webpack -~~~~ +``` -## Run +Run +--- -~~~~ +```text-plain cd trilium # using nohup to make sure trilium keeps running after user logs out nohup TRILIUM_ENV=dev node src/www & -~~~~ +``` -The application by default starts up on port 8080, so you can open your browser and navigate to http://localhost:8080 to access Trilium (replace "localhost" with your hostname). +The application by default starts up on port 8080, so you can open your browser and navigate to [http://localhost:8080](http://localhost:8080) to access Trilium (replace "localhost" with your hostname). -## TLS +TLS +--- -Don't forget to [[configure TLS|TLS configuration]], which is required for secure usage! \ No newline at end of file +Don't forget to [configure TLS](TLS-configuration.md) which is required for secure usage! \ No newline at end of file diff --git a/Markdown.md b/Wiki/Markdown.md similarity index 59% rename from Markdown.md rename to Wiki/Markdown.md index b667919..02fff5d 100644 --- a/Markdown.md +++ b/Wiki/Markdown.md @@ -1,37 +1,42 @@ +# Markdown Trilium Notes supports importing Markdown restricted to the [CommonMark specification](https://spec.commonmark.org/current/) (where [tables are not supported](https://github.com/TriliumNext/Notes/issues/2026) ) -## Import +Import +------ ### Clipboard import If you want to import just a chunk of markdown from clipboard, you can do it from editor block menu: -[[gifs/markdown-inline-import.gif]] +![](gifs/markdown-inline-import.gif) ### File import You can also import Markdown files from files: -* single markdown file (with .md extension) -* whole tree of markdown files (packaged into [.zip](https://en.wikipedia.org/wiki/Tar_(computing)) archive) - * Markdown files need to be packaged into ZIP archive because browser can't read directories, only single files. - * You can use e.g. [7-zip](https://www.7-zip.org) to package directory of markdown files into the ZIP file - -[[gifs/markdown-file-import.gif]] +* single markdown file (with .md extension) +* whole tree of markdown files (packaged into [.zip](https://en.wikipedia.org/wiki/Tar_(computing)) archive) + * Markdown files need to be packaged into ZIP archive because browser can't read directories, only single files. + * You can use e.g. [7-zip](https://www.7-zip.org) to package directory of markdown files into the ZIP file -## Export +\[\[gifs/markdown-file-import.gif\]\] + +![](gifs/markdown-file-import.gif) + +Export +------ ### Subtree export You can export whole subtree to ZIP archive which will have directory structured modelled after subtree structure: -[[gifs/markdown-export-subtree.gif]] +![](gifs/markdown-export-subtree.gif) ### Single note export If you want to export just single note without its subtree, you can do it from Note actions menu: -[[gifs/markdown-export-note.gif]] +![](gifs/markdown-export-note.gif) ### Exporting protected notes diff --git a/Wiki/Mobile-frontend.md b/Wiki/Mobile-frontend.md new file mode 100644 index 0000000..ab24f3c --- /dev/null +++ b/Wiki/Mobile-frontend.md @@ -0,0 +1,38 @@ +# Mobile-frontend +Trilium ([server edition](Server-installation.md)) has a mobile web frontend which is optimized for touch based devices - smartphones and tablets. It is activated automatically during login process based on browser detection. + +Mobile frontend is limited in features compared to full desktop frontend. See below for more details on this. + +Note that this is not an Android/iOS app, this is just mobile friendly web page served on the [server edition](Server-installation.md). + +Screenshots +----------- + +### Mobile phone + +![](images/mobile-smartphone.png) + +### Tablet + +![](images/mobile-tablet.png) + +Limitations +----------- + +Mobile frontend provides only some of the features of the full desktop frontend: + +* it is possible to browse the whole note tree, read and edit all types of notes, but you can create only text notes +* reading and editing [protected notes](Protected-notes.md) is possible, but creating them is not supported +* editing options is not supported +* cloning notes is not supported +* uploading file attachments is not supported + +Forcing mobile/desktop frontend +------------------------------- + +Trilium decides automatically whether to use mobile or desktop frontend. If this is not appropriate, you can use `?mobile` or `?desktop` query param on **login** page (Note: you might need to log out). + +Scripting +--------- + +You can alter the behavior with [scripts](Scripts.md) just like for normal frontend. For script notes to be executed, they need to have labeled `#run=mobileStartup`. \ No newline at end of file diff --git a/Nginx-proxy-setup.md b/Wiki/Nginx-proxy-setup.md similarity index 85% rename from Nginx-proxy-setup.md rename to Wiki/Nginx-proxy-setup.md index e9fa7e7..7383bda 100644 --- a/Nginx-proxy-setup.md +++ b/Wiki/Nginx-proxy-setup.md @@ -1,16 +1,23 @@ +# Nginx-proxy-setup Configure Nginx proxy and HTTPS. The operating system here is Ubuntu 18.04. -1. Download Nginx and remove Apache2 -``` + +1. Download Nginx and remove Apache2 + +```text-plain sudo apt-get install nginx sudo apt-get remove apache2 ``` -2. Create configure file -``` + +1. Create configure file + +```text-plain cd /etc/nginx/conf.d vim default.conf ``` -3. Fill the file with the context shown below, part of the setting show be changed. Then you can enjoy your web with HTTPS forced and proxy. -``` + +1. Fill the file with the context shown below, part of the setting show be changed. Then you can enjoy your web with HTTPS forced and proxy. + +```text-plain # This part is for proxy and HTTPS configure server { listen 443; diff --git a/NixOS-server-installation.md b/Wiki/NixOS-server-installation.md similarity index 87% rename from NixOS-server-installation.md rename to Wiki/NixOS-server-installation.md index 6354c7c..6a0ed0c 100644 --- a/NixOS-server-installation.md +++ b/Wiki/NixOS-server-installation.md @@ -1,14 +1,17 @@ +# NixOS-server-installation This page describes configuring the Trilium module included in NixOS. -## Requirements +Requirements +------------ [NixOS](https://nixos.org/) installation. -## Configuration +Configuration +------------- Add this to your `configuration.nix`: -```bash +```text-plain services.trilium-server.enable = true; # default data directory: /var/lib/trilium @@ -18,6 +21,7 @@ services.trilium-server.enable = true; #services.trilium-server.host = "0.0.0.0"; #services.trilium-server.port = 12783; ``` + Uncomment any option you would like to change. See the [NixOS options list](https://search.nixos.org/options?channel=unstable&from=0&size=50&sort=relevance&type=packages&query=trilium-server) for more options (including nginx reverse proxy configuration). \ No newline at end of file diff --git a/Note hoisting.md b/Wiki/Note hoisting.md similarity index 51% rename from Note hoisting.md rename to Wiki/Note hoisting.md index a2d470c..94e0893 100644 --- a/Note hoisting.md +++ b/Wiki/Note hoisting.md @@ -1,7 +1,8 @@ +# Note hoisting Hoisting is a standard outliner feature which allows you to focus on (or "zoom into") a specific note and its subtree by hiding all parent and sibling notes. Demo: -[[gifs/note-hoisting.gif]] +![](gifs/note-hoisting.gif) -In addition to showing only this subtree, this also narrows both full text search and [["jump to note"|Note navigation#Jump-to-note]] to just notes present in hoisted subtree. +In addition to showing only this subtree, this also narrows both full text search and [“jump to note”](Note%20navigation.md) to just notes present in hoisted subtree. -See also [[Workspace]] which extends this feature. \ No newline at end of file +See also [Workspace](Workspace.md) which extends this feature. \ No newline at end of file diff --git a/Wiki/Note map.md b/Wiki/Note map.md new file mode 100644 index 0000000..bc8fa99 --- /dev/null +++ b/Wiki/Note map.md @@ -0,0 +1,28 @@ +# Note map +Note map is a visualization of connections between notes. + +This provides an insight into a structure ("web") of notes. + +There are two types of note map: + +Link Map +-------- + +Shows [relations](Attributes.md) between notes: + +![](images/link-map.png) + +Tree Map +-------- + +Shows hierarchical map of notes: + +![](images/tree-map.png) + +See also +-------- + +[Relation map](Relation-map.md) is a similar concept, with some differences: + +* note map is automatically generated while relation map must be created manually +* relation map is a type of note while a link map is just virtual visualization \ No newline at end of file diff --git a/Note navigation.md b/Wiki/Note navigation.md similarity index 70% rename from Note navigation.md rename to Wiki/Note navigation.md index 2f14210..1da1cec 100644 --- a/Note navigation.md +++ b/Wiki/Note navigation.md @@ -1,19 +1,21 @@ +# Note navigation One of the Trilium's goals is to provide fast and comfortable navigation between notes. -## Backwards and forward +Backwards and forward +--------------------- You can use alt-left and alt-right to move back and forward in history of viewed pages. This works identically to browser backwards / forwards, it's actually using built-in browser support for this. -[[gifs/back-and-forwards.gif]] +![](gifs/back-and-forwards.gif) -## Jump to note +Jump to note +------------ -This is useful to quickly find and view arbitrary note - click on `Jump to` button on the top or press `CTRL-J`. -Then type part of the note name and autocomplete will help you pick the desired note. +This is useful to quickly find and view arbitrary note - click on `Jump to` button on the top or press `CTRL-J`. Then type part of the note name and autocomplete will help you pick the desired note. -[[gifs/jump-to.gif]] +![](gifs/jump-to.gif) ### Recent notes @@ -23,4 +25,4 @@ To access this functionality, click on `Jump to` button on the top. By default, Alternatively you can click on the "time" icon on the right. -[[gifs/recent-notes.gif]] +![](gifs/recent-notes.gif) \ No newline at end of file diff --git a/Note revisions.md b/Wiki/Note revisions.md similarity index 79% rename from Note revisions.md rename to Wiki/Note revisions.md index 86643a5..80e849a 100644 --- a/Note revisions.md +++ b/Wiki/Note revisions.md @@ -1,9 +1,10 @@ +# Note revisions Trilium supports seamless versioning of notes by storing snapshots ("revisions") of notes at regular intervals. Time interval of taking note snapshot is configurable in the Options -> Other dialog. This provides a tradeoff between more revisions and more data to store. -To turn off note versioning for a particular note (or subtree), add `disableVersioning` [[label|Attributes]] to the note. +To turn off note versioning for a particular note (or subtree), add `disableVersioning` [label](Attributes.md) to the note. Note revisions can be accessed through the button on the right of ribbon toolbar. -[[images/note-revisions.png]] +![](images/note-revisions.png) \ No newline at end of file diff --git a/Note.md b/Wiki/Note.md similarity index 60% rename from Note.md rename to Wiki/Note.md index e836a4b..39e0711 100644 --- a/Note.md +++ b/Wiki/Note.md @@ -1,26 +1,28 @@ +# Note Note is a central entity in Trilium. Main attributes of note are title and content. ### Note types -* [[text note|Text notes]] - this is default note type which allows you to put rich text, images etc. -* [[code note|Code notes]] - some kind of formal code, typically programming language (e.g. JavaScript) or data structure (e.g. JSON) -* [image note](https://github.com/TriliumNext/Notes/wiki/Images) - represents single image -* file note - represents uploaded file (e.g. docx MS Word document). -* render HTML note - this works as an output screen of attached [[scripts]] -* [[saved search]] note - contains saved search query and dynamically displays result of the search as its sub-notes -* [[relation map]] note - visualizes notes and their relations -* [[book note]] - displays its children notes, useful for reading many short notes -* [[mermaid]] - create diagrams and flowcharts using [mermaid.js ↗](https://github.com/mermaid-js/mermaid) -* [[canvas note]] - allows hand drawn notes and basic diagraming on an infinite canvas using [excalidraw ↗](https://github.com/excalidraw/excalidraw) +* [text note](Text-notes.md) - this is default note type which allows you to put rich text, images etc. +* [code note](Code-notes.md) - some kind of formal code, typically programming language (e.g. JavaScript) or data structure (e.g. JSON) +* [image note](https://github.com/TriliumNext/Notes/wiki/Images) - represents single image +* file note - represents uploaded file (e.g. docx MS Word document). +* render HTML note - this works as an output screen of attached [scripts](Scripts.md) +* [saved search](Saved-search.md) note - contains saved search query and dynamically displays result of the search as its sub-notes +* [relation map](Relation-map.md) note - visualizes notes and their relations +* [book note](Book%20note.md) - displays its children notes, useful for reading many short notes +* mermaid - create diagrams and flowcharts using [mermaid.js ↗](https://github.com/mermaid-js/mermaid) +* [canvas note](Canvas-note.md) - allows hand drawn notes and basic diagraming on an infinite canvas using [excalidraw ↗](https://github.com/excalidraw/excalidraw) In Trilium there's no specific "folder" note type. Any note can have children and thus be a folder. ### Root note + There's one special note called "root note" which is root of the note tree. All other notes are placed below it in the structure. ### Tree structure -Importantly, note itself doesn't carry information on its placement in note tree. See [[cloning]] for details. +Importantly, note itself doesn't carry information on its placement in note tree. See [cloning](Cloning%20notes.md) for details. Tree structure of notes can resemble file system - but compared to that notes in Trilium can act as both file and directory - meaning that note can both have its own content and have children. "Leaf note" is a note which doesn't have any children. @@ -34,8 +36,9 @@ Clicking an undelete will recover the note, it's content and attributes - note s To be able to undelete a note, it is necessary that deleted note's parent must be undeleted (otherwise there's no place where we can undelete it to). This might become a problem when you delete more notes in succession - the solution is then undelete in the reverse order of your deletion. -After the 7 days (configurable) the notes will be "erased" - their title, content, revisions and attributes will be erased, and it will not be possible anymore to recover them (unless you restore [[backup]]). +After the 7 days (configurable) the notes will be "erased" - their title, content, revisions and attributes will be erased, and it will not be possible anymore to recover them (unless you restore [backup](Backup.md)). -## See also +See also +-------- -* [[Read-only note]] \ No newline at end of file +* [Read-only note](Read%20only%20note.md) \ No newline at end of file diff --git a/Wiki/Onenote.md b/Wiki/Onenote.md new file mode 100644 index 0000000..c8d6394 --- /dev/null +++ b/Wiki/Onenote.md @@ -0,0 +1,57 @@ +# Onenote +Migrating from OneNote (user contributed) +----------------------------------------- + +**This page describes a method to migrate via EverNote Legacy, but this app is no longer available/working.** + +Prep Onenote notes for best compatibility +----------------------------------------- + +* Remove Onenote Tags and replace with Emoji if possible (Onenote Tags will get imported into trilium as an image which clutters the Trilium tree somewhat) +* Make sure to use Onenote headings where applicable (These will be carried over correctly into Trilium) +* Remove extra whitespace in Onenote (Whitespace seems to be more noticible in Trilium, so removing it now will make it look nicer in trilium) +* If possible, try to avoid very long Onenote pages. Trilium works best with shorter concise pages with any number of sub or (sub-sub...) pages. +* Make sure numbered lists don't have unusual spaces between items in the list (Sometimes the numbered list will start at 1 again in Trilum if there is an extra space in the list in OneNote). + +Migration Procedure +------------------- + +### Import into Evernote from OneNote: + +* Install [Evernote Legacy](https://web.archive.org/web/20230327110646/https://help.evernote.com/hc/en-us/articles/360052560314). Current versions of Evernote do not have this functionality. (Requires Evernote account, but import works without internet connection - be sure to NOT sync notes to Evernote!). +* In evernote navigate to File > Import > Onenote > Notebook > Section > OK + +If exporting all sections at a time, they will not be grouped in folders - they will all be added to a single folder, but the order will be kept, so you can re-group into folders after importing to Trilium + +### Export from Evernote + +* Right click on the created notebook in Evernote and choose "Export Notes…" +* Use the default export format of .enex + +### Cleanup enex file (optional) + +* If the Onenote header (that is at the top of each Onenote page) is not desired, you can use the following regex to remove them in a text editor like VsCode: + + Find (using regex): `. { - const dateNote = await api.getDayNote(todayDateStr); - - ({note: logNote} = await api.createNote(dateNote.noteId, 'log')); - }, [todayDateStr]); +```text-plain +const todayDateStr = api.formatDateISO(new Date()); + +const todayNote = await api.runOnBackend(async todayDateStr => { + const dateNote = await api.getDayNote(todayDateStr); - api.activateNote(todayNote.noteId); + ({note: logNote} = await api.createNote(dateNote.noteId, 'log')); +}, [todayDateStr]); + +api.activateNote(todayNote.noteId); +``` all the `await` (and `async`) should disappear from the backend code, but should remain when calling backend from frontend (that's still async): - const todayDateStr = api.formatDateISO(new Date()); - - const todayNote = await api.runOnBackend(todayDateStr => { - const dateNote = api.getDayNote(todayDateStr); - - ({note: logNote} = api.createNote(dateNote.noteId, 'log')); - }, [todayDateStr]); +```text-plain +const todayDateStr = api.formatDateISO(new Date()); + +const todayNote = await api.runOnBackend(todayDateStr => { + const dateNote = api.getDayNote(todayDateStr); - api.activateNote(todayNote.noteId); + ({note: logNote} = api.createNote(dateNote.noteId, 'log')); +}, [todayDateStr]); + +api.activateNote(todayNote.noteId); +``` ### Migrate custom themes @@ -91,30 +95,34 @@ Themes are annotated with `#appTheme` label, previously this label could but did Additionally, CSS themes are now loaded differently than before - previously all themes were loaded at the startup and which one was active was decided by the active CSS class. Themes were then prefixed like this: - body.theme-steel-blue { - --main-font-family: 'Raleway' !important; - --main-font-size: normal; - - --tree-font-family: inherit; - --tree-font-size: normal; - ... - } - - body.theme-steel-blue .note-detail-editable-text, body.theme-steel-blue .note-detail-readonly-text { - font-size: 120%; - } +```text-plain +body.theme-steel-blue { + --main-font-family: 'Raleway' !important; + --main-font-size: normal; + + --tree-font-family: inherit; + --tree-font-size: normal; + ... +} + +body.theme-steel-blue .note-detail-editable-text, body.theme-steel-blue .note-detail-readonly-text { + font-size: 120%; +} +``` This prefixing is not needed anymore (and also doesn't work anymore). Remove the prefixes like this: - :root { - --main-font-family: 'Raleway'; - --main-font-size: normal; - - --tree-font-family: 'Raleway'; - --tree-font-size: normal; - ... - } +```text-plain +:root { + --main-font-family: 'Raleway'; + --main-font-size: normal; - body .note-detail-editable-text, body .note-detail-readonly-text { - font-size: 120%; - } + --tree-font-family: 'Raleway'; + --tree-font-size: normal; + ... +} + +body .note-detail-editable-text, body .note-detail-readonly-text { + font-size: 120%; +} +``` \ No newline at end of file diff --git a/Saved-search.md b/Wiki/Saved-search.md similarity index 70% rename from Saved-search.md rename to Wiki/Saved-search.md index ad951f6..89eb1ae 100644 --- a/Saved-search.md +++ b/Wiki/Saved-search.md @@ -1,7 +1,9 @@ +# Saved-search Trilium provides a way to save common search as a note in the note tree. Search results will then appear as sub-notes of this "saved search" note. You can see how this works in action: -![save-search](https://user-images.githubusercontent.com/51974069/160965106-ac400d11-4028-418c-9c05-3fac1e1187f3.gif) +![save-search](Saved-search_image.gif) -## Location +Location +-------- -Saved search is by default stored in the day note. You can also mark some note with `#searchHome` label, all saved searches will be then saved there. There's also `#workspaceSearchHome` variant for [[workspaces|workspace]]. \ No newline at end of file +Saved search is by default stored in the day note. You can also mark some note with `#searchHome` label, all saved searches will be then saved there. There's also `#workspaceSearchHome` variant for \[\[workspaces|workspace\]\]. \ No newline at end of file diff --git a/Wiki/Saved-search_image.gif b/Wiki/Saved-search_image.gif new file mode 100644 index 0000000..6f9433b Binary files /dev/null and b/Wiki/Saved-search_image.gif differ diff --git a/Wiki/Screenshot tour.md b/Wiki/Screenshot tour.md new file mode 100644 index 0000000..3435da2 --- /dev/null +++ b/Wiki/Screenshot tour.md @@ -0,0 +1,46 @@ +# Screenshot tour +Sometimes the fastest way to assess the software is just through screenshots so here they are: + +![](images/screenshot.png) + +![](images/dark-theme.png) + +See [Themes](Themes.md). + +![](images/code-note.png) + +This shows [code note](Code-notes.md) editor. + +![](images/promoted-attributes-queen.png) + +See [promoted attributes](Promoted%20attributes.md) + +![](images/relation-map-family.png) + +See [relation map](Relation-map.md). + +![](images/link-map.png) + +See [link map](Link-map.md). + +![](images/day-notes.png) + +See [Day notes](Day-notes.md). + +![](images/weight-tracker.png) + +See [Weight tracker](Weight-tracker.md). + +![](images/task-manager.png) + +See [Task manager](Task-manager.md). + +![](images/note-revisions.png) + +See [Note revisions](Note%20revisions.md). + +![](images/mobile-smartphone.png) + +![](images/mobile-tablet.png) + +See [Mobile frontend](Mobile-frontend.md). \ No newline at end of file diff --git a/Wiki/Script API.md b/Wiki/Script API.md new file mode 100644 index 0000000..c118137 --- /dev/null +++ b/Wiki/Script API.md @@ -0,0 +1,10 @@ +# Script API +For [Scripts](Scripts.md) to do anything useful, Trilium publishes "Script API". Actually there are two such APIs: + +* [Frontend API](https://zadam.github.io/trilium/frontend_api/FrontendScriptApi.html) +* [Backend API](https://zadam.github.io/trilium/backend_api/BackendScriptApi.html) + +Backwards compatibility +----------------------- + +Note that Script API is now experimental and subject to change in the future. \ No newline at end of file diff --git a/Scripts.md b/Wiki/Scripts.md similarity index 51% rename from Scripts.md rename to Wiki/Scripts.md index 805951f..4027539 100644 --- a/Scripts.md +++ b/Wiki/Scripts.md @@ -1,19 +1,22 @@ -Trilium supports creating [[code notes]], i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside Trilium which can in conjunction with [[Script API]] provide extra functionality. +# Scripts +Trilium supports creating [code notes](Code-notes.md), i.e. notes which allow you to store some programming code and highlight it. Special case is JavaScript code notes which can also be executed inside Trilium which can in conjunction with [Script API](Script%20API.md) provide extra functionality. -## Scripting +Scripting +--------- To go further I must explain basic architecture of Trilium - in its essence it is a classic web application - it has these two main components: -* frontend running in the browser (using HTML, CSS, JavaScript) - this is mainly used to interact with the user, display notes etc. -* backend running JavaScript code in node.js runtime - this is responsible for e.g. storing notes, encrypting them etc. +* frontend running in the browser (using HTML, CSS, JavaScript) - this is mainly used to interact with the user, display notes etc. +* backend running JavaScript code in node.js runtime - this is responsible for e.g. storing notes, encrypting them etc. -So we have frontend and backend, each with their own set of responsibilities, but their common feature is that they both run JavaScript code. Add to this the fact, that we're able to create JavaScript [[code notes]] and we're onto something. +So we have frontend and backend, each with their own set of responsibilities, but their common feature is that they both run JavaScript code. Add to this the fact, that we're able to create JavaScript \[\[code notes\]\] and we're onto something. -## Button use case +Button use case +--------------- -Let's take a look at our demo script (shipped with default Trilium [[document]]) - Task manager. One of the things this script does is adding a button to the Trilium interface which will allow user to easily add new Task (TODO item). +Let's take a look at our demo script (shipped with default Trilium [document](Document.md)) - Task manager. One of the things this script does is adding a button to the Trilium interface which will allow user to easily add new Task (TODO item). -[[images/button-script.png]] +![](images/button-script.png) First take a look at the red circle all the way on the top - this what we want to achieve - new button in UI which will create new note representing a task/todo item. @@ -21,10 +24,10 @@ Red point below the first one marks the note type we have created for this scrip In the note content you can see the code which calls one of the API methods, this one is specifically meant to add new buttons. Code needs to set few button properties: -* button title -* icon which should appear on the button -* optional shortcut under which you can trigger the button -* most importantly "action" - what must happen when button is clicked +* button title +* icon which should appear on the button +* optional shortcut under which you can trigger the button +* most importantly "action" - what must happen when button is clicked ### Action handler @@ -36,18 +39,20 @@ So we have a script which will add the button to the toolbar. But how can we exe We need to execute it every time Trilium starts up, but we probably don't want to have to manually click on play button on every start up. -The solution is marked by red circle at the bottom - this note has [[label|Attributes]] `#run=frontendStartup` - this is one of the "system" labels which Trilium understands. As you might guess, this will cause all such labeled script notes to be executed once Trilium frontend starts up. +The solution is marked by red circle at the bottom - this note has [label](Attributes.md) `#run=frontendStartup` - this is one of the "system" labels which Trilium understands. As you might guess, this will cause all such labeled script notes to be executed once Trilium frontend starts up. -(`#run=frontendStartup` does not work for [[mobile server frontend|Mobile frontend]] - if you want to have scripts running there, give the script `#run=mobileStartup` label) +(`#run=frontendStartup` does not work for \[\[mobile server frontend|Mobile frontend\]\] - if you want to have scripts running there, give the script `#run=mobileStartup` label) ### More showcases -You can see more scripting with explanation in [[Advanced showcases]] +You can see more scripting with explanation in [Advanced showcases](Advanced%20showcases.md) -## Events +Events +------ -See [[Events]]. +See [Events](Events.md). -## Script API +Script API +---------- -See [[Script API]]. +See [Script API](Script%20API.md). \ No newline at end of file diff --git a/Search.md b/Wiki/Search.md similarity index 68% rename from Search.md rename to Wiki/Search.md index bcf9177..aeb22fa 100644 --- a/Search.md +++ b/Wiki/Search.md @@ -1,9 +1,10 @@ -* local search - searches within currently displayed note. Press `CTRL-F` to open the search dialog. In server version this is handled by the browser, in desktop (electron) version there's a separate dialog. +# Search +* local search - searches within currently displayed note. Press `CTRL-F` to open the search dialog. In server version this is handled by the browser, in desktop (electron) version there's a separate dialog. +* note search - you can find notes by search for text in the title, note's content or note's [attributes](Attributes.md). You can also [save search](Saved-search.md). + * You can activate note search by clicking on magnifier icon on the left or pressing `CTRL-S` keyboard [shortcut](Keyboard-shortcuts.md). -* note search - you can find notes by search for text in the title, note's content or note's [attributes]. You can also [[save search|saved search]]. - * You can activate note search by clicking on magnifier icon on the left or pressing `CTRL-S` keyboard [[shortcut|keyboard shortcuts]]. - -## Simple note search examples +Simple note search examples +--------------------------- `rings tolkien` - fulltext search, this will try to find notes which have anywhere words "rings" and "tolkien" @@ -19,7 +20,7 @@ `#book #publicationYear = 1954` - will find notes with "book" label and label "publicationYear" containing this specific value -`#genre *=* fan` - matches notes with "genre" label which has value which contains "fan" substring. Besides `*=*` for "contains", there's also `=*` for "starts with", `*=` for "ends with", `!=` for "is not equal to" +`#genre *=* fan` - matches notes with "genre" label which has value which contains "fan" substring. Besides `*=*` for "contains", there's also `=*` for "starts with", `*=` for "ends with", `!=` for "is not equal to" `#book #publicationYear >= 1950 #publicationYear < 1960` - you can also use numeric operators - this will find all books published in the 1950s @@ -29,18 +30,19 @@ `#publicationYear %= '19[0-9]{2}'` - operator '%=' matches a regular expression (regex). Since Trilium 0.52 -## Advanced use cases +Advanced use cases +------------------ `~author.relations.son.title = 'Christopher Tolkien'` - This will search for notes which have “author” relation to a note which has a “son” relation to “Christopher Tolkien” note. This situation can be modeled by this note structure: -* Books - * Lord of the Rings - * label: “book” - * relation: “author” points to “J. R. R. Tolkien” note -* People - * J. R. R. Tolkien - * relation “son” points to "Christopher Tolkien" note - * Christopher Tolkien +* Books + * Lord of the Rings + * label: “book” + * relation: “author” points to “J. R. R. Tolkien” note +* People + * J. R. R. Tolkien + * relation “son” points to "Christopher Tolkien" note + * Christopher Tolkien `~author.title *= Tolkien OR (#publicationDate >= 1954 AND #publicationDate <= 1960)` - you can also use boolean expressions and parenthesis to group expressions @@ -60,63 +62,64 @@ However, if your search expression starts with a parenthesis, it needs to be pre Note has certain properties which can be also used for searching: -* `noteId` -* `dateModified` - local dates are in the format "2019-05-19 16:39:47.003+0200" -* `dateCreated` -* `utcDateModified` - UTC dates are in the format "2019-05-19 14:39:47.003Z" -* `utcDateCreated` -* `isProtected` (true, false) -* `type` (text, code, search, relation-map, book) -* `title` (when you want to search specifically the title) -* `text` - search through note title and content -* `content` - search just through note content -* `rawContent` - search through raw note content (HTML tags are kept). Since v0.46. -* `ownedLabelCount` -* `labelCount` (includes inherited labels) -* `ownedRelationCount` -* `relationCount` (includes inherited relations) -* `ownedRelationCountIncludingLinks` and `relationCountIncludingLinks` - count also includes auto-generated relations `imageLink`, `internalLink`, `relationMapLink` and `includeNoteLink` -* `ownedAttributeCount` = `ownedLabelCount` + `ownedRelationCount` -* `attributeCount` = `labelCount` + `relationCount` -* `targetRelationCount` - number of relations targeting this note -* `targetRelationCountIncludingLinks` - count also includes auto-generated relations `imageLink`, `internalLink`, `relationMapLink` and `includeNoteLink` -* `parentCount` - essentially number of [[clones|cloning notes]] -* `childrenCount` -* `isArchived` (true, false) -* `contentSize` - size of note content in bytes. -* `noteSize` - estimated size of complete note (chiefly note content + note revision contents). Since v0.46. -* `revisionCount` - number of note revisions. +* `noteId` +* `dateModified` - local dates are in the format "2019-05-19 16:39:47.003+0200" +* `dateCreated` +* `utcDateModified` - UTC dates are in the format "2019-05-19 14:39:47.003Z" +* `utcDateCreated` +* `isProtected` (true, false) +* `type` (text, code, search, relation-map, book) +* `title` (when you want to search specifically the title) +* `text` - search through note title and content +* `content` - search just through note content +* `rawContent` - search through raw note content (HTML tags are kept). Since v0.46. +* `ownedLabelCount` +* `labelCount` (includes inherited labels) +* `ownedRelationCount` +* `relationCount` (includes inherited relations) +* `ownedRelationCountIncludingLinks` and `relationCountIncludingLinks` - count also includes auto-generated relations `imageLink`, `internalLink`, `relationMapLink` and `includeNoteLink` +* `ownedAttributeCount` = `ownedLabelCount` + `ownedRelationCount` +* `attributeCount` = `labelCount` + `relationCount` +* `targetRelationCount` - number of relations targeting this note +* `targetRelationCountIncludingLinks` - count also includes auto-generated relations `imageLink`, `internalLink`, `relationMapLink` and `includeNoteLink` +* `parentCount` - essentially number of [clones](Cloning%20notes.md) +* `childrenCount` +* `isArchived` (true, false) +* `contentSize` - size of note content in bytes. +* `noteSize` - estimated size of complete note (chiefly note content + note revision contents). Since v0.46. +* `revisionCount` - number of note revisions. These are accessed through `note.`, e.g.: -``` +```text-plain note.type = code AND note.mime = 'application/json' ``` ### Order by and limit -``` +```text-plain #author=Tolkien orderBy #publicationDate desc, note.title limit 10 ``` The example above will do the following things (in this sequence): -1. find notes with label author having value “Tolkien” -2. order the results by publicationDate in descending order (so the newest first) - 1. in case publication date is equal, use note.title as secondary ordering in ascending order (`asc` is the default and thus can be omitted) -3. take only the first 10 results +1. find notes with label author having value “Tolkien” +2. order the results by publicationDate in descending order (so the newest first) +3. in case publication date is equal, use note.title as secondary ordering in ascending order (`asc` is the default and thus can be omitted) +4. take only the first 10 results ### Negation Some queries can be expressed only with negation: -``` +```text-plain #book AND not(note.ancestor.title = 'Tolkien') ``` This will find all the book notes which are not in the "Tolkien" subtree. -## Under the hood +Under the hood +-------------- ### Label and relation shortcuts @@ -134,8 +137,8 @@ As you may have noticed from the examples above, search syntax allows seamlessly Take `tolkien #book` as an example. It contains: -1. fulltext tokens - `tolkien` -2. attribute expressions - `#book` +1. fulltext tokens - `tolkien` +2. attribute expressions - `#book` The tricky part is to find out where does the fulltext end and where the attribute expression begins. This is done by detecting certain stop-characters/words - all tokens are considered as fulltext before one of `#`, `~` or `note.` prefixes are encountered. After that, all characters/tokens are understood as attribute expression. @@ -143,15 +146,15 @@ If you want to use `#`, `~` or `note.` as part of fulltext, you need to escape t There are certain corner cases where this is not sufficient, e.g: -``` +```text-plain tolkien (#publicationYear >= 1950 AND #publicationYear < 1960) OR #book` -``` +``` Here the expression starts with `(` which isn't (intentionally) a stop-character, so the query above will not actually work as intended. Instead, in these corner cases we need to add a separate extra stop character - `#` or `~` so the fixed query should look like: -``` +```text-plain tolkien # (#publicationYear >= 1950 AND #publicationYear < 1960) OR #book` -``` +``` The extra stop character has no other effect other than separating the fulltext part from the attribute expression part. @@ -171,18 +174,19 @@ There are three supported types of quotes - single, double and backtick. It's important to realize that a label value is always technically a string, even if it contains logically different value. This then allows you to do things like: -``` +```text-plain note.dateCreated =* '2019-05' ``` This will find notes created in May 2019 by simply doing string "starts with" operation on the date. -This approach does not work well with numbers though, so whenever there is a numeric operator detected, the label values will be coerced from their normal string form into a numeric value for comparison. This then allows for e.g. `#publicationYear >= 1960` work correctly. +This approach does not work well with numbers though, so whenever there is a numeric operator detected, the label values will be coerced from their normal string form into a numeric value for comparison. This then allows for e.g. `#publicationYear >= 1960` work correctly. -## Auto trigger search from URL +Auto trigger search from URL +---------------------------- Opening Trilium like in the example below will open the search pane and automatically trigger search for "abc": -``` +```text-plain http://localhost:8080/#?searchString=abc ``` \ No newline at end of file diff --git a/Wiki/Server-installation.md b/Wiki/Server-installation.md new file mode 100644 index 0000000..05d6cad --- /dev/null +++ b/Wiki/Server-installation.md @@ -0,0 +1,66 @@ +# Server-installation +This pages describes installing Trilium on your own server. You might want to do this in case you want to set up [sync](Synchronization.md) or you want to use it as online version of Trilium accessible from anywhere. The server installation is a fully functioning instance i.e. "web editor". + +There are several options how to do this, each one with some advantage: + +* Recommended: [Docker](Docker-server-installation.md) - images for **AMD64** and **ARM** +* [Packaged server installation](Packaged%20server%20installation.md) +* There's a [3rd party paid service to host a Trilium instance for you](https://trilium.cc/paid-hosting) +* [Manual installation](Manual-server-installation.md) +* [Kubernetes](Kubernetes-server-installation.md) +* [Cloudron](https://www.cloudron.io/store/com.github.trilium.cloudronapp.html) +* [HomelabOS](https://homelabos.com/docs/software/trilium/) +* [NixOS module](NixOS-server-installation.md) + +Server installation has both web and [mobile frontend](Mobile-frontend.md). + +Configuration +------------- + +For server installations, you might want to configure e.g. port or [TLS](TLS-configuration.md). This is done in the Trilium config file, by default it's in `config.ini` in the [data directory](Data-directory.md). You can start creating your configuration by copying the provided `config-sample.ini` with default values to `config.ini`. + +### Config location + +`config.ini`, [document](Document.md) and some other important Trilium data files are by default persisted in the [data directory](Data-directory.md)\]\]. + +If this is not desired, you may change it via `TRILIUM_DATA_DIR` environment variable to some other location, e.g.: + +```text-plain +export TRILIUM_DATA_DIR=/home/myuser/data/my-trilium-data +``` + +### Disable authentication + +Among others, you can also disable authentication (in case you run on localhost only or authentication is handled by another component) by adding the following to `config.ini`: + +```text-plain +[General] +noAuthentication=true +``` + +Reverse proxy setup +------------------- + +### nginx + +```text-plain +location /trilium/ { + proxy_pass http://127.0.0.1:8080/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'upgrade'; + proxy_set_header Host $host; + proxy_cache_bypass $http_upgrade; +} +``` + +It's also advised to add following to `server {}` block to not limit size of payloads: + +```text-plain +# set to 0 for unlimited. Default is 1M. +client_max_body_size 0; +``` + +### Apache + +See [Apache proxy setup](Apache%20proxy%20setup.md). \ No newline at end of file diff --git a/Sharing.md b/Wiki/Sharing.md similarity index 64% rename from Sharing.md rename to Wiki/Sharing.md index 271b74b..d1c88a1 100644 --- a/Sharing.md +++ b/Wiki/Sharing.md @@ -1,52 +1,53 @@ +# Sharing Trilium provides a feature to share selected notes as **publicly accessible** read only documents. -The basic prerequisite for this feature is to have a [[server installation]] - this is where the notes will be hosted from. +The basic prerequisite for this feature is to have a [server installation](Server-installation.md) - this is where the notes will be hosted from. -## Share note +Share note +---------- -Click on the "shared" switch, URL appears on which you can click. - -[[images/share-single-note.png]] +Click on the "shared" switch, URL appears on which you can click.![](images/share-single-note.png) And this is the opened link: -[[images/share-single-note-web.png]] +![](images/share-single-note-web.png) The URL refers to the localhost (127.0.0.1) because there's no configured sync server. -## Share a note subtree +Share a note subtree +-------------------- Sharing a note actually shares a whole subtree of notes, the note shown above just didn't have any children. If I share the whole "Formatting" subtree then the page looks like this: -[[images/share-multiple-notes-web.png]] +![](images/share-multiple-notes-web.png) You can see a basic navigation on the right. With this you can create small websites. -## Showing list of all shared notes - -You can click on the "Show Shared Notes Subtree" to see the list of all shared notes: - -![image](https://github.com/TriliumNext/Notes/assets/617641/f0cbc7f0-9d5a-48ae-8304-13c9e5c6c760) +Showing list of all shared notes +-------------------------------- +You can click on the "Show Shared Notes Subtree" to see the list of all shared notes -## Security +Security +-------- The notes you share are published on the open internet and can be accessed by anybody. The fact that the URLs look randomly does not provide real security guarantees. Please don't put sensitive information into shared notes. There is an opt-in feature to require a username/password, see `#shareCredentials` below. -## Advanced options +Advanced options +---------------- ### Styling the shared notes The default shared page is pretty rudimentary. In case you want to style it more nicely, you can: -* add a `~shareCss` relation to a CSS code note which will be linked in the shared page - * in case you want this to apply to the whole subtree, don't forget to make the label inheritable - * the linked CSS code note needs to be also in the shared subtree. If you want to hide it from left tree navigation, add `#shareHiddenFromTree` label to the CSS code note. -* if you make extensive styling changes, then it's recommended to use `#shareOmitDefaultCss` on the shared subtree so that you don't need to override the default stylesheet (this will also avoid problems in the future when the default CSS changes). +* add a `~shareCss` relation to a CSS code note which will be linked in the shared page + * in case you want this to apply to the whole subtree, don't forget to make the label inheritable + * the linked CSS code note needs to be also in the shared subtree. If you want to hide it from left tree navigation, add `#shareHiddenFromTree` label to the CSS code note. +* if you make extensive styling changes, then it's recommended to use `#shareOmitDefaultCss` on the shared subtree so that you don't need to override the default stylesheet (this will also avoid problems in the future when the default CSS changes). ### Scripting @@ -54,7 +55,7 @@ It's possible to inject a JavaScript note to the shared note using `~shareJs` re In case you want to access e.g. attributes or traverse the tree in the linked JavaScript note, you can use the API available through global [`fetchNote(noteId = current)` function](https://github.com/TriliumNext/Notes/blob/master/src/public/app/share.js), e.g.: -```javascript +```text-plain const currentNote = await fetchNote(); const parentNote = await fetchNote(currentNote.parentNoteIds[0]); @@ -77,7 +78,7 @@ Using "subpaths", i. e. to declare an alias with `/` within, is not supported. All shared notes are grouped under automatically managed "Shared Notes" note. Besides seeing what's shared, you can also effectively share/unshare notes by cloning/moving them from/to this note. -[[images/shared-list.png]] +![](images/shared-list.png) ### Favicon @@ -85,7 +86,7 @@ You can define a custom favicon used for shared pages by create a relation `~sha ### Sharing a note as the root -You can add the `#shareRoot` attribute to a folder or note, and it will be linked when you visit http://domain/share. This can make it easier to use Trilium as a fully-fledged website because you can create a note to act as a "home-page". +You can add the `#shareRoot` attribute to a folder or note, and it will be linked when you visit [http://domain/share](http://domain/share). This can make it easier to use Trilium as a fully-fledged website because you can create a note to act as a "home-page". Consider also combining this with `#shareIndex` which will display the list of all shared notes. @@ -103,21 +104,22 @@ Password-protecting shared notes is available since 0.54. ### Other options -* if a note has `#shareRaw` label, the note will be shared raw, without HTML wrapper -* if a note has `#shareDisallowRobotIndexing` label, it will carry `` meta tag and `X-Robots-Tag: noindex` header, which will advise crawlers to skip this page -* if a text note has `#shareIndex` label, its content will display a list of all shared note roots (since v0.57) +* if a note has `#shareRaw` label, the note will be shared raw, without HTML wrapper +* if a note has `#shareDisallowRobotIndexing` label, it will carry `` meta tag and `X-Robots-Tag: noindex` header, which will advise crawlers to skip this page +* if a text note has `#shareIndex` label, its content will display a list of all shared note roots (since v0.57) -## Limitations +Limitations +----------- Shared notes functionality is compared to standard functionality very limited. The not exhaustive list of **what is missing** is: -* relation map support -* book notes show only children note list -* code notes have no highlighting -* note tree is static -* Protected notes cannot be shared -* include notes +* relation map support +* book notes show only children note list +* code notes have no highlighting +* note tree is static +* Protected notes cannot be shared +* include notes -Some of these limitations might be removed/mitigated in the future. +Some of these limitations might be removed/mitigated in the future. \ No newline at end of file diff --git a/Wiki/Sorting.md b/Wiki/Sorting.md new file mode 100644 index 0000000..97c972d --- /dev/null +++ b/Wiki/Sorting.md @@ -0,0 +1,25 @@ +# Sorting +One time sorting +---------------- + +You can sort notes one time by right-clicking parent note in the note tree, Advanced -> Sort notes by ... + +Automatic / permanent sorting +----------------------------- + +Child notes can be kept sorted by attaching [labels](Attributes.md) to the parent note: + +* `#sorted` - enables sorting, can optionally include name of the note's property/label (see details below) +* `#sortDirection` - by default ascending, set it to `desc` value to reverse the sort order +* `#sortFoldersFirst` - notes with children will be sorted on top + +Sorting works by comparing note property or a specific label on the child notes. + +There are 4 sorting levels, where the first one has the highest priority and the lower one will be applied only if the 2 compared notes are equal based on higher priority comparison. + +1. implicit sorting by `#top` label - child notes with this label will appear on the top of the folder. +2. implicit sorting by `#bottom` label (since Trilium 0.62) - child notes with this label will appear on the bottom of the folder. +3. sorting by child's property or a specific label defined on the parent note's `#sorted` label a) parent note has `#sorted` with no value - by default sorting will be done alphabetically b) parent note has `#sorted=title` or `#sorted=dateModified` or `#sorted=dateCreated` - sorting will be done based on the defined note's property c) parent note has `#sorted` label with any other value - this value is the name of the child note's label, whose value will be used for sorting. So e.g. you set `#sorted=myOrder` on the parent note and then child notes will have labels `#myOrder=001`, \`#myOrder=002" etc. +4. sorting of "last resort" is alphabetical + +All comparisons are made string-wise - e.g. "1" < "2" or "2020-10-10" < "2021-01-15" but also "2" > "10". \ No newline at end of file diff --git a/Synchronization.md b/Wiki/Synchronization.md similarity index 81% rename from Synchronization.md rename to Wiki/Synchronization.md index e0671d7..338ebd2 100644 --- a/Synchronization.md +++ b/Wiki/Synchronization.md @@ -1,12 +1,14 @@ +# Synchronization Trilium is offline-first note-taking application - when you use the desktop application, all the data is stored locally, but you also have an option to set up synchronization to the server instance. When you add another desktop client, you can get to star-shaped topology: -[[images/star-topology.png]] +![](images/star-topology.png) This means that there's one central server (we'll call this instance _sync server_) and several _client_ (sometimes called _desktop_) instances which all point to this sync server and synchronize against it. Once sync is set up, synchronization is automatic and ongoing - you don't need to trigger it manually. It should "just work". -## How to set up synchronization +How to set up synchronization +----------------------------- ### Security @@ -14,11 +16,11 @@ Please note that setting up server securely is not easy and far reaching mistake ### Setup synchronization from desktop instance to sync server -This approach is used when you already have a desktop instance of Trilium and you want to [[setup sync server on your web host|Server installation]]. +This approach is used when you already have a desktop instance of Trilium and you want to [setup sync server on your web host](Server-installation.md). So let's assume your server instance is already deployed, but it's uninitialized (no data). Then open your desktop instance, click on Options -> Sync tab -> Sync configuration and set "Server instance address" to point to your sync server. Click Save. -[[images/sync-config.png]] +![](images/sync-config.png) Now click on "Test sync" button which will tell you if the handshake with sync server succeeded. If yes, sync with sync server started - client started pushing all the data towards the server instance. This might take some time to finish, but you can close the Options dialog and keep using Trilium. @@ -32,34 +34,37 @@ Here we assume that you downloaded [the most recent release](https://github.com/ Since the desktop instance is completely empty, it will first ask if you want to create an initial document, or you want to set up sync with sync server - you need to choose the second option. -[[images/sync-init.png]] +![](images/sync-init.png) You'll need to configure Trilium server address and importantly also correct username / password (sync setup requires authentication). Click on "Finish setup" button and if everything went fine, you'll see this screen: -[[images/sync-in-progress.png]] +![](images/sync-in-progress.png) Once the sync is finished, you'll be automatically redirected to the Trilium application. -## Proxy setup +Proxy setup +----------- Two different setups are supported: -* you can explicitly set proxy server to be used in Options / Sync. Only unauthenticated proxy servers are currently supported. -* if no proxy server is explicitly configured, then Trilium will use system proxy settings +* you can explicitly set proxy server to be used in Options / Sync. Only unauthenticated proxy servers are currently supported. +* if no proxy server is explicitly configured, then Trilium will use system proxy settings -## Troubleshooting +Troubleshooting +--------------- ### Different date/time on client and server -For a successful sync, both client and server need to have save date time, with a tolerance of maximum 5 minutes difference. +For a successful sync, both client and server need to have save date time, with a tolerance of maximum 5 minutes difference. -## Certificate issues +Certificate issues +------------------ When TLS is in use, Trilium client will attempt to verify the server certificate. In some cases (self-signed certs, some corporate proxy servers), the verification will be unsuccessful and sync will fail. In those cases, you can run the Trilium client with environment variable `NODE_TLS_REJECT_UNAUTHORIZED` set to `0`: -```shell +```text-plain export NODE_TLS_REJECT_UNAUTHORIZED=0 ``` @@ -67,12 +72,14 @@ TLS certificate won't be verified and simply accepted as it is. **You need to be Newer Trilium versions contain this in a script called `trilium-no-cert-check.sh`. -## Conflict resolution +Conflict resolution +------------------- You can sometimes encounter a situation where you edit the same note in multiple instances before the note changes are synchronized. -Trilium handles this situation by just picking up the newer change and discarding the older change. The older change should still be visible in [[note revisions]], so it should be possible to recover any data lost in conflict resolution. +Trilium handles this situation by just picking up the newer change and discarding the older change. The older change should still be visible in [note revisions](Note%20revisions.md), so it should be possible to recover any data lost in conflict resolution. -## Hash check +Hash check +---------- After each completed sync, Trilium computes a hash of all synced data on both client and sync server. If there's a difference, something went wrong and Trilium will run an automatic recovery mechanism. \ No newline at end of file diff --git a/TLS-configuration.md b/Wiki/TLS-configuration.md similarity index 52% rename from TLS-configuration.md rename to Wiki/TLS-configuration.md index 659d043..3a20b85 100644 --- a/TLS-configuration.md +++ b/Wiki/TLS-configuration.md @@ -1,15 +1,17 @@ -TLS configuration is required for [[server installation]]. The page below describes steps to set up TLS in Trilium itself. You might also opt for TLS termination using some reverse proxy (e.g. nginx), in that case follow a [guide like this](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04). +# TLS-configuration +TLS configuration is required for \[\[server installation\]\]. The page below describes steps to set up TLS in Trilium itself. You might also opt for TLS termination using some reverse proxy (e.g. nginx), in that case follow a [guide like this](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04). First thing to do is to get a TLS certificate. You have two options: -* Recommended - get TLS certificate signed by root certificate authority. For personal usage, the best choice is [Let's encrypt](https://letsencrypt.org). It's free, automated and easy. You can take a look at Certbot for automatic TLS setup. -* generate your own self-signed certificate. You will have extra trouble with importing the certificate into all machines from which you connect to the server installation so this is not recommended. +* Recommended - get TLS certificate signed by root certificate authority. For personal usage, the best choice is [Let's encrypt](https://letsencrypt.org). It's free, automated and easy. You can take a look at Certbot for automatic TLS setup. +* generate your own self-signed certificate. You will have extra trouble with importing the certificate into all machines from which you connect to the server installation so this is not recommended. -## Modifying config.ini +Modifying config.ini +-------------------- -Now that you have your certificate, we need to modify `config.ini` in the [[data directory]] so that Trilium will use it: +Now that you have your certificate, we need to modify `config.ini` in the \[\[data directory\]\] so that Trilium will use it: -``` +```text-plain [Network] port=8080 # true for TLS/SSL/HTTPS (secure), false for HTTP (unsecure). @@ -17,23 +19,24 @@ https=true # path to certificate (run "bash bin/generate-cert.sh" to generate self-signed certificate). Relevant only if https=true certPath=/[username]/.acme.sh/[hostname]/fullchain.cer keyPath=/[username]/.acme.sh/[hostname]/example.com.key -``` +``` -Above is only example of how this is set up on my environment when I generated the certificate using Let's encrypt acme utility. Your paths may be completely different. (Note that if you are using a Docker installation, these paths should be in a volume or other path understood by the docker container, e.g., /home/node/trilium-data/[DIR IN DATA DIRECTORY].) +Above is only example of how this is set up on my environment when I generated the certificate using Let's encrypt acme utility. Your paths may be completely different. (Note that if you are using a Docker installation, these paths should be in a volume or other path understood by the docker container, e.g., /home/node/trilium-data/\[DIR IN DATA DIRECTORY\].) After you set this up, you may restart Trilium and now visit the hostname with "https". -## Self-signed certificate +Self-signed certificate +----------------------- If you need to use a self-signed certificate for your server instance, the desktop instance won't trust it. Currently the only way to make this work is by disabling certificate validation by setting this environment variable (for Linux): -``` +```text-plain export NODE_TLS_REJECT_UNAUTHORIZED=0 trilium ``` Trilium comes with scripts to start Trilium in this mode, e.g. `trilium-no-cert-check.bat` for Windows. -** Note that disabling TLS certificate validation is insecure, so do it only if you're sure you know what you're doing! ** +\*\* Note that disabling TLS certificate validation is insecure, so do it only if you're sure you know what you're doing! \*\* \ No newline at end of file diff --git a/Task-manager.md b/Wiki/Task-manager.md similarity index 54% rename from Task-manager.md rename to Wiki/Task-manager.md index 08cce5e..bfd5daa 100644 --- a/Task-manager.md +++ b/Wiki/Task-manager.md @@ -1,25 +1,29 @@ -Task Manager is a [[promoted attributes]] and [[scripts]] showcase present in the [[demo document|Document#demo-document]]. +# Task-manager +Task Manager is a [promoted attributes](Promoted%20attributes.md) and [scripts](Scripts.md) showcase present in the [demo document](Document.md). -## Demo -[[images/task-manager.png]] +Demo +---- + +![](images/task-manager.png) Task Manager manages outstanding (TODO) tasks and finished tasks (non-empty doneDate attribute). Outstanding tasks are further categorized by location and arbitrary tags - whenever you change tag attribute in the task note, this task is then automatically moved to appropriate location. -Task Manager also integrates with [[day notes]] - notes are [[cloned|cloning notes]] into day note to both todoDate note and doneDate note (with [[prefix|Tree concepts#prefix]] of either "TODO" or "DONE"). +Task Manager also integrates with [day notes](Day-notes.md) - notes are [cloned](Cloning%20notes.md) into day note to both todoDate note and doneDate note (with [prefix](Tree%20concepts.md) of either "TODO" or "DONE"). -## Implementation +Implementation +-------------- -New tasks are created in the TODO note which has `~child:template` [[relation|attributes]] (see [[attribute inheritance]]) pointing to the task template. +New tasks are created in the TODO note which has `~child:template` [relation](Attributes.md) (see [attribute inheritance](Attribute%20inheritance.md)) pointing to the task template. ### Attributes -Task template defines several [[promoted attributes]] - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [[event|events]] handler which is run on attribute change. This [[script|scripts]] handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. +Task template defines several [promoted attributes](Promoted%20attributes.md) - todoDate, doneDate, tags, location. Importantly it also defines `~runOnAttributeChange` relation - [event](Events.md) handler which is run on attribute change. This [script](Scripts.md) handles when e.g. we fill out the doneDate attribute - meaning the task is done and should be moved to "Done" note and removed from TODO, locations and tags. ### New task button There's also "button" note which contains simple script which adds a button to create new note (task) in the TODO note. -```javascript +```text-plain api.addButtonToToolbar({ title: 'New task', icon: 'check', @@ -44,9 +48,9 @@ api.addButtonToToolbar({ In the demo screenshot above you may notice that TODO tasks are in red color and DONE tasks are green. -This is done by having this CSS [[code note|code notes]] which defines extra CSS classes: +This is done by having this CSS [code note](Code-notes.md) which defines extra CSS classes: -```CSS +```text-plain span.fancytree-node.todo .fancytree-title { color: red !important; } @@ -56,6 +60,6 @@ span.fancytree-node.done .fancytree-title { } ``` -This [[code note|code notes]] has `#appCss` [[label|attributes]] which is recognized by Trilium on startup and loaded as CSS into the application. +This [code note](Code-notes.md) has `#appCss` [label](Attributes.md) which is recognized by Trilium on startup and loaded as CSS into the application. -Second part of this functionality is based in event handler described above which assigns `#cssClass` label to the task to either "done" or "todo" based on the task status. +Second part of this functionality is based in event handler described above which assigns `#cssClass` label to the task to either "done" or "todo" based on the task status. \ No newline at end of file diff --git a/Wiki/Template.md b/Wiki/Template.md new file mode 100644 index 0000000..3720d25 --- /dev/null +++ b/Wiki/Template.md @@ -0,0 +1,42 @@ +# Template +Template is a note which serves as a kind of "template" for other kind of notes (let's call them instance notes). + +Assignment of a template relation to a note brings these three effects: + +* all attributes from the template note are [inherited](Attribute%20inheritance.md) to the instance notes + * note that even attributes with `#isInheritable=false` are inherited to the instance notes, but only inheritable attributes are then inherited to the children of instance notes +* note content is copied from the template note to the instance note (if the instance note content is empty at the time of template attribute assignment) +* all template's children notes are deep-duplicated to the instance note + +Example +------- + +A typical example would be a "Book" template note, which will: + +* define some [promoted attributes](Promoted%20attributes.md) - e.g. publication year, author etc +* you can also create kind of outline of the book review in the note text - e.g. themes, conclusion etc. .. +* you can also create child notes for e.g. highlights, summary etc. + +![](images/template.png) + +Instance note +------------- + +And then we have instance note - this note has a [relation](Attributes.md) to the "Book" template note which will cause that the template note text is used to initialize the instance note text and all attributes from the template note are inherited to the instance note. + +You can create an instance note (i.e. note which uses a template) through the UI like this: + +![](images/template-create-instance-note.) + +For the template to appear in the menu, the template note needs to have `#template` label (don't mistake it with `~template` relation which points from the instance note to the template note). If you use [workspaces](Workspace.md), you can alternatively mark templates with `#workspaceTemplate` which will display them only in the workspace. + +You can also add/change template notes after the note is created, simply create a relation `~template` pointing to the desired template note. + +Other remarks +------------- + +From the visual perspective, template can define a `#iconClass` and `#cssClass` attributes so that all e.g. books are shown with a particular icon and CSS style. + +You can check out the concept in the [demo document](Document.md)| in e.g. [Relation map](Relation-map.md), [Task manager](Task-manager.md) or [Day notes](Day-notes.md). + +See also [default note title](Default-note-title.md) which allows you to create templates for note titles. Note templates and title templates can be combined by creating a `#titleTemplate` for a template note. \ No newline at end of file diff --git a/Text-notes.md b/Wiki/Text-notes.md similarity index 62% rename from Text-notes.md rename to Wiki/Text-notes.md index 36b80e5..88b2a92 100644 --- a/Text-notes.md +++ b/Wiki/Text-notes.md @@ -1,99 +1,107 @@ -Trilium uses awesome [CKEditor 5](https://ckeditor.com/ckeditor-5/) as its editing component. +# Text-notes +Trilium uses awesome [CKEditor 5](https://ckeditor.com/ckeditor-5/) as its editing component. -## Formatting +Formatting +---------- Trilium text note interface doesn't show any toolbars or formatting options by default, these needs to be brought up by: -1) selecting text will bring up an inline toolbar: +1. selecting text will bring up an inline toolbar: -![](images/text-notes-formatting-inline.png) +![](images/text-notes-formatting-inline.p) -2) clicking on the block toolbar: +1. clicking on the block toolbar: -![](images/text-notes-formatting-block.png) +![](images/text-notes-formatting-block.pn) -## Read only vs. editing mode +Read only vs. editing mode +-------------------------- Text notes are normally opened in edit mode, however there are two cases when they are open in read-only mode: -* they are long and thus would take time to load so by default we open them as read only which is much quicker -* or the note has `readOnly` [[label|attributes]] +* they are long and thus would take time to load so by default we open them as read only which is much quicker +* or the note has `readOnly` [label](Attributes.md) In both cases, it is possible to switch to editable mode again. -## General Formatting +General Formatting +------------------ Trilium uses the CKEditor, so any formatting that the CKEditor supports should be available in Trilium. For example: **Bold** – Type `**text**` or `__text__` -*Italic* – Type `*text*` or `_text_` +_Italic_ – Type `*text*` or `_text_` -`Code` – Type \`text` +`Code` – Type \`text\` -~~Strikethrough~~ – Type `~~text~~` +~Strikethrough~ – Type `~~text~~` ### Lists -* Bulleted list – Start a line with `*` or `-` followed by a space +* Bulleted list – Start a line with `*` or `-` followed by a space -1. Numbered list – Start a line with `1.` or `1)` followed by a space +1. Numbered list – Start a line with `1.` or `1)` followed by a space -[ ] To-do list – Start a line with `[ ]` or `[x]` followed by a space to insert an unchecked or checked list item, respectively +\[ \] To-do list – Start a line with `[ ]` or `[x]` followed by a space to insert an unchecked or checked list item, respectively - -### Blocks +### Blocks > Block quote – Start a line with `>` followed by a space -```Multi-line Code block``` – Start a line with ``` - +`Multi-line Code block` – Start a line with \`\`\` -### Other +### Other Headings – Start a line with `##` or `###` followed by a space to create a heading 1, heading 2, or heading 3 (up to heading 6 if options defines more headings) Note: Trilium only accepts headings with `##` and more because `#` is reserved for the title Horizontal line – Start a line with `---` ---- +----------------------------------------- -## Markdown & Autoformat +Markdown & Autoformat +--------------------- CKEditor supports markdown-like editing experience. It recognizes syntax and automatically converts it to rich text. See it in action: -[[gifs/autoformat.gif]] +![](gifs/autoformat.gif) + Complete documentation for this feature is available in [CKEditor documentation](https://ckeditor.com/docs/ckeditor5/latest/features/autoformat.html). If the autoformat is not desirable for what you just wrote, you can press `CTRL-Z` which will un-autoformat the text to its original form. Note that the use of `#` for Heading1 style is not supported because the editor assumes that is used for the title, start with `##` for Heading2. Explanation [here](https://ckeditor.com/docs/ckeditor5/latest/features/headings.html#heading-levels). -## Math support +Math support +------------ Trilium provides Math support with the help of KaTex: -[[gifs/math.gif]] +![](gifs/math.gif) + +Cut selection to sub-note +------------------------- -## Cut selection to sub-note One of the common situations in Trilium is when you're editing a document, and it gets somewhat large, so you start splitting it up into sub-notes - the process is essentially like this: -* select the desired piece of text and cut it into clipboard -* create new sub-note & give it name -* paste the content from clipboard into sub-note +* select the desired piece of text and cut it into clipboard +* create new sub-note & give it name +* paste the content from clipboard into sub-note Trilium provides a way to automate this: -[[gifs/cut-to-subnote.gif]] +![](gifs/cut-to-subnote.gif) You can notice how heading "Formatting" is automatically detected and new sub-note is named "Formatting". It is also possible to assign a keyboard shortcut for this action. -## Include note +Include note +------------ Text notes can "include" another note as a read only widget. This can be useful for e.g. including a dynamically generated chart (from scripts & "render HTML" note) or other more advanced use cases. This functionality is available in the block toolbar icon. -![image](https://user-images.githubusercontent.com/617641/161419847-7709db0e-04cf-4157-b6ec-0ef6cdaa3f74.png) +![image](Text-notes_image.png) \ No newline at end of file diff --git a/Wiki/Text-notes_image.png b/Wiki/Text-notes_image.png new file mode 100644 index 0000000..d88b6da Binary files /dev/null and b/Wiki/Text-notes_image.png differ diff --git a/Wiki/Theme-Gallery.md b/Wiki/Theme-Gallery.md new file mode 100644 index 0000000..bd1cb79 --- /dev/null +++ b/Wiki/Theme-Gallery.md @@ -0,0 +1,19 @@ +# Theme-Gallery +Theme Gallery +------------- + +These are user-created themes which were made publicly available: + +| | | +| --- | --- | +| [Midnight](https://github.com/tobealive/trilium-midnight-theme)
👤 [tobealive](https://github.com/tobealive) ![](Theme-Gallery_image.jpg) | [EOTE](https://github.com/tobealive/trilum-eote-theme)
👤 [tobealive](https://github.com/tobealive) ![](Theme-Gallery_preview.jpg) | +| [Trilium Themes](https://github.com/Abourass/TriliumThemes)
👤 [Abourass](https://github.com/Abourass)
![](https://camo.githubusercontent.com/ec9eb12d0f9792a93a87ff2d50c8e0ffafd42359878885e9e8d6498ec34510fe/68747470733a2f2f692e696d6775722e636f6d2f3666466e4d75422e706e67)
![](https://camo.githubusercontent.com/745dd535b982e24b305b35e7ed42d3b4d4dcefac9ae8bd1ed9cceda83b5d1d8a/68747470733a2f2f692e696d6775722e636f6d2f7a4873513363792e706e67) ![](https://camo.githubusercontent.com/8dfbcc44a82f8780d8e2f4e4621b9447f499db2667dce9a220393def28e384dd/68747470733a2f2f692e696d6775722e636f6d2f444d5437784f702e706e67) ![](https://camo.githubusercontent.com/461416d49050e9e4415e4fe5315e2ea6987485d01a624c6d23203f78be33864b/68747470733a2f2f692e696d6775722e636f6d2f616852573667682e706e67) | [MaterialDark](https://github.com/ZMonk91/Material-Dark-Trilium)
👤 [ZMonk91](https://github.com/ZMonk91)
![](https://camo.githubusercontent.com/3486f3d96d823468163a5f968b4b201254b6fd06164321551880c3de6353eeed/68747470733a2f2f692e696d6775722e636f6d2f5a65584635474c2e706e67) | +| [lightslategray](https://github.com/jaroet/trilium-theme-lightslategray)
👤 [jaroet](https://github.com/jaroet)
![](Theme-Gallery_lightslategray.p) | [melon-4](https://github.com/raphwriter/trilium-theme-melon)
👤 [raphwriter](https://github.com/raphwriter)
![](Theme-Gallery_scrn4_01.png) | +| [Neon\_Dark](https://github.com/Engr-AllanG/trilium-themes)
👤 [Engr-AllanG](https://github.com/Engr-AllanG)
![](Theme-Gallery_Neon_Dark_Demo_v.jpg) | [Coder\_Dark](https://github.com/Engr-AllanG/trilium-themes)
👤 [Engr-AllanG](https://github.com/Engr-AllanG)
![](Theme-Gallery_Trilium_theme_co.png) | +| [velvet](https://github.com/idelem/trilium-theme-velvet)
👤 [idelem](https://github.com/idelem)
![](Theme-Gallery_trilium-velvet2.) | [Dark Plus](https://github.com/SADAVA/trilium-notes-theme-dark-plus)
👤 [SADAVA](https://github.com/SADAVA)
![](Theme-Gallery_Screenshot.png) | +| [Solarized](https://github.com/WKSu/trilium-solarized-theme)
👤 [WKSu](https://github.com/WKSu)
![](Theme-Gallery_image.png) | [Nord](https://github.com/en3r0/Trilium-Nord-Theme)
👤 [en3r0](https://github.com/en3r0)
![](1_Theme-Gallery_image.png) | +| [Bear Note Light](https://github.com/AllanZyne/trilium-bear-theme)
👤 [AllanZyne](https://github.com/AllanZyne)
![](Theme-Gallery_bear-white.png) | [Bear Note Dark](https://github.com/AllanZyne/trilium-bear-theme)
👤 [AllanZyne](https://github.com/AllanZyne)
![](Theme-Gallery_bear-dark.png) | +| [Miku Hatsune](https://github.com/Sebiann/miku-hatsune-trilium-theme)
👤 [Sebiann](https://github.com/Sebiann)
![](2_Theme-Gallery_image.png) | [Midnight](https://github.com/cwilliams5/Midnight-Trilium-Dark-Mode)
👤 [cwilliams5](https://github.com/cwilliams5)
![](Theme-Gallery_midnight.png) | +| [Blue](https://github.com/SiriusXT/trilium-theme-blue) (light)
👤 [SiriusXT](https://github.com/SiriusXT)
![](Theme-Gallery_screenshot1.png) | [Blue](https://github.com/SiriusXT/trilium-theme-blue) (dark)
👤 [SiriusXT](https://github.com/SiriusXT)
![](Theme-Gallery_screenshot2.png) | + +If you would like to add your theme to this gallery, write a new post in [👐 Show and tell](https://github.com/TriliumNext/Notes/discussions/categories/show-and-tell). \ No newline at end of file diff --git a/Wiki/Theme-Gallery_Neon_Dark_Demo_v.jpg b/Wiki/Theme-Gallery_Neon_Dark_Demo_v.jpg new file mode 100644 index 0000000..71eaf4a Binary files /dev/null and b/Wiki/Theme-Gallery_Neon_Dark_Demo_v.jpg differ diff --git a/Wiki/Theme-Gallery_Screenshot.png b/Wiki/Theme-Gallery_Screenshot.png new file mode 100644 index 0000000..66b474e Binary files /dev/null and b/Wiki/Theme-Gallery_Screenshot.png differ diff --git a/Wiki/Theme-Gallery_Trilium_theme_co.png b/Wiki/Theme-Gallery_Trilium_theme_co.png new file mode 100644 index 0000000..55445fd Binary files /dev/null and b/Wiki/Theme-Gallery_Trilium_theme_co.png differ diff --git a/Wiki/Theme-Gallery_bear-dark.png b/Wiki/Theme-Gallery_bear-dark.png new file mode 100644 index 0000000..d9bb4c9 Binary files /dev/null and b/Wiki/Theme-Gallery_bear-dark.png differ diff --git a/Wiki/Theme-Gallery_bear-white.png b/Wiki/Theme-Gallery_bear-white.png new file mode 100644 index 0000000..ea8a9a9 Binary files /dev/null and b/Wiki/Theme-Gallery_bear-white.png differ diff --git a/Wiki/Theme-Gallery_image.jpg b/Wiki/Theme-Gallery_image.jpg new file mode 100644 index 0000000..5b2eb96 Binary files /dev/null and b/Wiki/Theme-Gallery_image.jpg differ diff --git a/Wiki/Theme-Gallery_image.png b/Wiki/Theme-Gallery_image.png new file mode 100644 index 0000000..dda33ba Binary files /dev/null and b/Wiki/Theme-Gallery_image.png differ diff --git a/Wiki/Theme-Gallery_lightslategray.png b/Wiki/Theme-Gallery_lightslategray.png new file mode 100644 index 0000000..b42164a Binary files /dev/null and b/Wiki/Theme-Gallery_lightslategray.png differ diff --git a/Wiki/Theme-Gallery_midnight.png b/Wiki/Theme-Gallery_midnight.png new file mode 100644 index 0000000..cd17cbf Binary files /dev/null and b/Wiki/Theme-Gallery_midnight.png differ diff --git a/Wiki/Theme-Gallery_preview.jpg b/Wiki/Theme-Gallery_preview.jpg new file mode 100644 index 0000000..9e85e46 Binary files /dev/null and b/Wiki/Theme-Gallery_preview.jpg differ diff --git a/Wiki/Theme-Gallery_screenshot1.png b/Wiki/Theme-Gallery_screenshot1.png new file mode 100644 index 0000000..e3728d8 --- /dev/null +++ b/Wiki/Theme-Gallery_screenshot1.png @@ -0,0 +1,2204 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trilium-theme-blue/img/screenshot1.png at main · SiriusXT/trilium-theme-blue · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + trilium-theme-blue + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + +

Latest commit

 

History

History
764 KB

screenshot1.png

File metadata and controls

764 KB
screenshot1.png
+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2024 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + diff --git a/Wiki/Theme-Gallery_screenshot2.png b/Wiki/Theme-Gallery_screenshot2.png new file mode 100644 index 0000000..ca3ae6c --- /dev/null +++ b/Wiki/Theme-Gallery_screenshot2.png @@ -0,0 +1,1720 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + trilium-theme-blue/img/screenshot2.png at main · SiriusXT/trilium-theme-blue · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ Skip to content + + + + + + + + + + + + + + + + + + + + +
+
+ + + + + + + + + + + + + + +
+ +
+ + + + + + + + +
+ + + + + + +
+ + + + + + + + + +
+
+
+ + + + + + + + + +
+ +
+ +
+ +
+ + + + / + + trilium-theme-blue + + + Public +
+ + +
+ +
+ + +
+
+ +
+
+ + + + +
+ + + + + + +
+ + + + + + + + + + + + + + + + +
+
+ + + + +
+ +
+ +
+
+ +
+ +
+

Footer

+ + + + +
+
+ + + + + © 2024 GitHub, Inc. + +
+ + +
+
+ + + + + + + + + + + + + + + + + + + +
+ +
+
+ + + diff --git a/Wiki/Theme-Gallery_scrn4_01.png b/Wiki/Theme-Gallery_scrn4_01.png new file mode 100644 index 0000000..23d565a Binary files /dev/null and b/Wiki/Theme-Gallery_scrn4_01.png differ diff --git a/Wiki/Theme-Gallery_trilium-velvet2.png b/Wiki/Theme-Gallery_trilium-velvet2.png new file mode 100644 index 0000000..c463562 Binary files /dev/null and b/Wiki/Theme-Gallery_trilium-velvet2.png differ diff --git a/Themes.md b/Wiki/Themes.md similarity index 62% rename from Themes.md rename to Wiki/Themes.md index 707d2d7..a4e569b 100644 --- a/Themes.md +++ b/Wiki/Themes.md @@ -1,16 +1,18 @@ +# Themes Trilium by default comes with few color themes, with white being the default. To switch to dark theme, you just need to go to Options (top-left - it's the app icon) -> Appearance tab and change the theme. This is what it looks like: -[[images/dark-theme.png]] +![](images/dark-theme.png) -## Custom CSS themes +Custom CSS themes +----------------- -Trilium provides a concept of custom user theme. You can make yourself one by creating a CSS [[code note|code notes]] and annotating it with `#appTheme=my-theme-name` [[label|attributes]]. +Trilium provides a concept of custom user theme. You can make yourself one by creating a CSS [code note](Code-notes.md) and annotating it with `#appTheme=my-theme-name` [label](Attributes.md). You can see an example of what you can put there below: -```css +```text-plain @font-face { font-family: 'Raleway'; font-style: normal; @@ -66,45 +68,46 @@ body .CodeMirror { } ``` -We define a custom font (provided by [[custom request handler]]) and then just define a bunch of CSS variables. These variables are then used in Trilium's CSS stylesheets. You can also use standard CSS selectors for further customization (open dev tools using `CTRL-SHIFT-I` to help with that), but keep in mind that HTML structure can change in future releases which might break your selectors. For that reason it is better to restrict yourself to use CSS variables as much as possible. +We define a custom font (provided by [custom request handler](Custom%20request%20handler.md)) and then just define a bunch of CSS variables. These variables are then used in Trilium's CSS stylesheets. You can also use standard CSS selectors for further customization (open dev tools using `CTRL-SHIFT-I` to help with that), but keep in mind that HTML structure can change in future releases which might break your selectors. For that reason it is better to restrict yourself to use CSS variables as much as possible. To activate your custom theme, go to Options -> Appearance. In the select box you should see all notes (themes) labeled with `appTheme`. If you make a change to your theme, you should reload the frontend by pressing `CTRL-R` so the changes will take effect. -CSS themes can be exported in .tar archive and shared to other users. Importing CSS themes from untrusted sources is not advised since the archive can also contain executable [[scripts]] which could be potentially harmful. +CSS themes can be exported in .tar archive and shared to other users. Importing CSS themes from untrusted sources is not advised since the archive can also contain executable [scripts](Scripts.md) which could be potentially harmful. -You can find an example user theme *Steel Blue* in the [[demo document|Document#demo-document]]: +You can find an example user theme _Steel Blue_ in the [demo document](Document.md) -[[images/steel-blue.png]] +![](images/steel-blue.png) -## Custom CSS +Custom CSS +---------- -Trilium also allows you to create custom CSS not associated with a theme. This can be useful in the context of [[scripting|scripts]] where you may want to e.g. change colors of notes in the tree (as used in [[Task manager]]). +Trilium also allows you to create custom CSS not associated with a theme. This can be useful in the context of [scripting](Scripts.md) where you may want to e.g. change colors of notes in the tree (as used in [Task manager](Task-manager.md)). -To do this, just create a [[code note|code notes]] with CSS type, put your custom CSS code into the note's content and create "appCss" [[label|Attributes]]. When Trilium frontend starts, all notes with "appCss" label are appended in the style element of the Trilium HTML page. +To do this, just create a [code note](Code-notes.md) with CSS type, put your custom CSS code into the note's content and create "appCss" [label](Attributes.md). When Trilium frontend starts, all notes with "appCss" label are appended in the style element of the Trilium HTML page. Once you made your changes, you can reload the Trilium frontend by pressing CTRL-R after which the changes will take effect. -[[images/app-css.png]] +![](images/app-css.png) -## Styling the tree +Styling the tree +---------------- -If you want to give some specific notes special styling in the tree, you can give them `cssClass` [[label|attributes]] which is then put into the node representing given note in the tree. +If you want to give some specific notes special styling in the tree, you can give them `cssClass` [label](Attributes.md) which is then put into the node representing given note in the tree. -There's also an `iconClass` using which you can define custom icons for notes in the tree - you can either use supplied ones from [boxicons](https://boxicons.com/) (e.g. `bx bx-home`) or you can define your own CSS classes. -Some of those are actually different. So you have `bx bxs-piano`for instance instead of `bx bx-piano`. -On the boxicons site, you can find out, looking at the font tab, after u opened a file, how its called. +There's also an `iconClass` using which you can define custom icons for notes in the tree - you can either use supplied ones from [boxicons](https://boxicons.com/) (e.g. `bx bx-home`) or you can define your own CSS classes. Some of those are actually different. So you have `bx bxs-piano`for instance instead of `bx bx-piano`. On the boxicons site, you can find out, looking at the font tab, after u opened a file, how its called. - -`iconClass` and `cssClass` are especially powerful when used with [[template]]. +`iconClass` and `cssClass` are especially powerful when used with [template](Template.md). You can also create specific styling for given note types (and mime types). For example, file note containing PNG image will have these classes in the tree: `type-image mime-image-png`. -## User-provided themes +User-provided themes +-------------------- -Some users made their custom themes publicly available. For a gallery of user themes, see [[Theme gallery]]. +Some users made their custom themes publicly available. For a gallery of user themes, see [Theme gallery](Theme-Gallery.md). -## Asset path +Asset path +---------- In case you want to use some built-in assets like `/assets/v0.57.0-beta/images/icon-grey.png` but want to avoid specifying the version, you can use a `vX` alias - in this case `/assets/vX/images/icon-grey.png`. \ No newline at end of file diff --git a/Tree concepts.md b/Wiki/Tree concepts.md similarity index 85% rename from Tree concepts.md rename to Wiki/Tree concepts.md index 4259101..8e457da 100644 --- a/Tree concepts.md +++ b/Wiki/Tree concepts.md @@ -1,16 +1,20 @@ +# Tree concepts This page describes some basic concepts related to the tree structure of notes in Trilium. -## Note +Note +---- -Note is a central entity in Trilium. See [[Note]] for details. +Note is a central entity in Trilium. See [Note](Note.md) for details. -## Branch +Branch +------ Branch describes note placement in the note tree - in essence it's a tuple of parentNoteId and noteId which says that given note is placed as a child into this parent note. -Each note can have more than one such branches, in other words any note can have multiple placements in the tree. For lack of better word we call this "[[cloning|Cloning notes]]". +Each note can have more than one such branches, in other words any note can have multiple placements in the tree. For lack of better word we call this "[cloning](Cloning%20notes.md)". -## Prefix +Prefix +------ Prefix is branch (placement) specific title prefix for the note. Let's say you have your note placed into two different places in the tree, but you want to change the title a bit in one of the placements. For this you can use prefix. @@ -18,6 +22,7 @@ To edit prefix, right-click on a note in the tree pane and choose "Edit branch p Prefix is not part of the note itself and thus is not encrypted when the note is protected. That can be useful when you want to keep part of the title in the tree visible even when protected for easier orientation. -## Subtree +Subtree +------- Subtree is a set of notes consisting of a particular note (subtree root) and all its children, children of these children (= all its descendants). Some operations work on subtrees (e.g. export). \ No newline at end of file diff --git a/Wiki/Tree manipulation.md b/Wiki/Tree manipulation.md new file mode 100644 index 0000000..2bd6939 --- /dev/null +++ b/Wiki/Tree manipulation.md @@ -0,0 +1,26 @@ +# Tree manipulation +This page describes how you can manipulate the note tree - specifically moving notes. + +Drag and drop +------------- + +You can manipulate the tree simply by dragging and dropping notes as you can see in the demo: + +![](gifs/drag-and-drop.gif) + +Keyboard manipulation +--------------------- + +Trilium provides fast keyboard based manipulation with following [shortcuts](Keyboard-shortcuts.md): + +* `CTRL-UP` and `CTRL-DOWN` - move note up or down in the order +* `CTRL-LEFT` - move note upwards in the hierarchy by changing a note's parent to note's parent's parent. +* `CTRL-RIGHT` - move note downwards in the hierarchy by setting parent to the note currently above (this is a bit hard to explain - it's best to see a demo or try it for yourself) +* `LEFT` and `RIGHT` expands and collapses a sub-tree + +![](gifs/move-note-with-keyboard.gif) + +Context menu +------------ + +You can also move notes with familiar cut & paste from context menu or associated keyboard [shortcuts](Keyboard-shortcuts.md) `CTRL-X` (cut) and `CTRL-V` (paste). \ No newline at end of file diff --git a/Troubleshooting.md b/Wiki/Troubleshooting.md similarity index 72% rename from Troubleshooting.md rename to Wiki/Troubleshooting.md index 669f81a..871183b 100644 --- a/Troubleshooting.md +++ b/Wiki/Troubleshooting.md @@ -1,6 +1,8 @@ +# Troubleshooting Trilium is currently beta quality software, so it's quite expected there will be some bugs. -## General quickfix +General quickfix +---------------- You guessed it - it's restart. @@ -8,29 +10,31 @@ If there's a UI problem, it usually means that the Trilium frontend got into an If this still doesn't help, or you suspect it's actually a backend issue, you can restart the whole application - in case of desktop (Electron) build, you just close the window and re-open it again. -## Broken note crashes Trilium +Broken note crashes Trilium +--------------------------- Sometimes a particular problem can cause issues for Trilium (e.g. render note with faulty script) and causes Trilium to crash. But since Trilium will normally try to load previously open notes, it will attempt to load again the note, causing the crash again. To break out of this vicious cycle, you can specify `TRILIUM_START_NOTE_ID` environment variable, which will reset the open tabs to only one with the specified note ID (just use `root`). In linux you could use it like this: -```bash +```text-plain TRILIUM_START_NOTE_ID=root ./trilium ``` Alternatively, you can also start up Trilium in a "safe mode" which will reset the current note to root: -```bash +```text-plain TRILIUM_SAFE_MODE=true ./trilium ``` -## Broken script prevents application startup +Broken script prevents application startup +------------------------------------------ -If you experiment with scripting, it might happen that you create a script which crashes the whole Trilium. That's even worse if you set it as a startup script or in an active [[custom widget]]. +If you experiment with scripting, it might happen that you create a script which crashes the whole Trilium. That's even worse if you set it as a startup script or in an active [custom widget](Custom-widget.md). In such cases you can start Trilium in "safe mode" which will not execute any custom scripts: -```bash +```text-plain TRILIUM_SAFE_MODE=true ./trilium ``` @@ -38,26 +42,29 @@ Depending on the Trilium distribution, there are also ready made scripts for thi Once Trilium starts up, find the note which caused the crash and fix it/delete it. -## Sync and consistency checks +Sync and consistency checks +--------------------------- Trilium periodically checks logical consistency of the database (e.g. that every note should have a parent). If some inconsistency is detected, the user is notified on the UI about the inconsistency. In such case, it is recommended to file a bug report and attach anonymized database (see below). -## Restoring backup +Restoring backup +---------------- -Trilium makes regular automatic backup, so When things go really bad we might need the last option - [[restore backup|Backup#restoring-backup]]. +Trilium makes regular automatic backup, so When things go really bad we might need the last option - [restore backup](Backup.md). -## Forgotten username/password +Forgotten username/password +--------------------------- In case you forgot your password, this means that: -* your protected notes are forever lost - they cannot be decrypted without the password -* normal (unprotected) notes are recoverable. Read below to see how. +* your protected notes are forever lost - they cannot be decrypted without the password +* normal (unprotected) notes are recoverable. Read below to see how. -To be able to change username/password and thus recover your unprotected notes, you need to get access to the [[document]] file in a [[data directory]]. You then need to open the `document.db` file with SQLite client (command line or e.g. [DB Browser](https://sqlitebrowser.org/)) and execute following queries: +To be able to change username/password and thus recover your unprotected notes, you need to get access to the [document](Document.md) file in a [data directory](Data-directory.md). You then need to open the `document.db` file with SQLite client (command line or e.g. [DB Browser](https://sqlitebrowser.org/)) and execute following queries: -```sql +```text-plain UPDATE options SET value = 'your_username' WHERE name = 'username'; -- feel free to change 'your_username' to your desired username UPDATE options SET value = '77/twC5O00cuQgNC63VK32qOKKYwj21ev3jZDXoytVU=' WHERE name = 'passwordVerificationSalt'; UPDATE options SET value = '710BMasZCAgibzIc07X4P9Q4TeBd4ONnqJOho+pWcBM=' WHERE name = 'passwordDerivedKeySalt'; @@ -73,11 +80,11 @@ If you already had protected notes (which are not unrecoverable), I recommend de If you decide to continue using the existing document file, don't forget to change your password (Options -> Change password). - -## Reporting bugs +Reporting bugs +-------------- It's a great help to send bug reports. Here are some tips where to look at: -Trilium uses GitHub issues - so please send your reports here: https://github.com/TriliumNext/Notes/issues +Trilium uses GitHub issues - so please send your reports here: [https://github.com/TriliumNext/Notes/issues](https://github.com/TriliumNext/Notes/issues) -Check [[error logs]] page for info how to provide the necessary info. +Check [error logs](Error-logs.md) page for info how to provide the necessary info. \ No newline at end of file diff --git a/Wiki/Upgrading Trilium.md b/Wiki/Upgrading Trilium.md new file mode 100644 index 0000000..ffbc7c2 --- /dev/null +++ b/Wiki/Upgrading Trilium.md @@ -0,0 +1,22 @@ +# Upgrading Trilium +Topic of this page is upgrading Trilium from one version to another. + +How to upgrade +-------------- + +Trilium does not have a built-in auto upgrade - all upgrades have to be done manually. How to do this depends on the installation method: + +* for [docker server installation](Docker-server-installation.md) - pull the image of the newer version and restart +* for all others you need to download new version of the release artifact of your choice from the [release page](https://github.com/TriliumNext/Notes/releases/latest) and replace existing version of the application - i.e. rename/delete the old directory and extract the archive of the new version + +Document compatibility and migration +------------------------------------ + +During Trilium startup, [document](Document.md) will be checked whether it conforms to the version supported by the application. In case the document is in the old version, Trilium will automatically migrate it to the new version. This will then mean that the document will not be readable anymore by the older versions of Trilium. In case you want to go back to the old version of the document and Trilium, you can restore the [backed up](Backup.md) `backup-before-migration.db` which is created before every migration. + +Sync compatibility +------------------ + +[Synchronization](Synchronization.md) protocol is versioned and all members of the sync cluster need to talk in the same protocol version. Therefore, when you are upgrading from one version to another, it might be necessary to upgrade all instances in the cluster. + +Change in protocol version is usually indicated on a release page. \ No newline at end of file diff --git a/Wiki/Web-clipper.md b/Wiki/Web-clipper.md new file mode 100644 index 0000000..f1519bf --- /dev/null +++ b/Wiki/Web-clipper.md @@ -0,0 +1,42 @@ +# Web-clipper +![](Web-clipper_chrome-trilium-web.png) + +Trilium Web Clipper is a web browser extension which allows user to clip text, screenshots, whole pages and short notes and save them directly to Trilium Notes. + +Project is hosted [here](https://github.com/zadam/trilium-web-clipper). Firefox and Chrome are supported browsers, but the chrome build should work on other chromium based browsers as well. + +Functionality +------------- + +* select text and clip it with context menu (right click) +* click on an image or link and save it through context menu +* save whole page from the popup or context menu +* save screenshot (with crop tool) from either popup or context menu +* create short text note from popup + +Trilium will save these clippings as a new child note under a "clipper inbox" note. Clipper inbox is: + +* if there's a note with [label](Attributes.md) `clipperInbox`, then this note is used as parent for the clipped notes +* otherwise, [day note](Day-notes.md) is used as a parent + +If there's multiple clippings from the same page (and on the same day), then they will be added to the same note. + +Get it +------ + +Extension is available from: + +* [Project release page](https://github.com/zadam/trilium-web-clipper/releases) - .xpi for Firefox and .zip for Chromium based browsers. +* [Chrome Web Store](https://chrome.google.com/webstore/detail/trilium-web-clipper/dfhgmnfclbebfobmblelddiejjcijbjm?hl=en&authuser=0) + +Configuration +------------- + +The extension needs to connect to a running Trilium instance. By default, it scans a port range on the local computer to find a desktop Trilium instance. + +It's also possible to configure [server](Server-installation.md) address for cases when the desktop application is not currently running. + +Username +-------- + +Older versions of Trilium (before 0.50) required username & password to authenticate, but this was reduced to just password. Web Clipper UI still contains the username field, just use arbitrary string. \ No newline at end of file diff --git a/images/chrome-trilium-web-clipper.png b/Wiki/Web-clipper_chrome-trilium-web.png similarity index 100% rename from images/chrome-trilium-web-clipper.png rename to Wiki/Web-clipper_chrome-trilium-web.png diff --git a/Weight-tracker.md b/Wiki/Weight-tracker.md similarity index 56% rename from Weight-tracker.md rename to Wiki/Weight-tracker.md index 45cb5f6..aedb42f 100644 --- a/Weight-tracker.md +++ b/Wiki/Weight-tracker.md @@ -1,24 +1,30 @@ -Weight Tracker is a [[Script API]] showcase present in the [[demo document|Document#demo-document]]. +# Weight-tracker +Weight Tracker is a [Script API](Script%20API.md) showcase present in the [demo document](Document.md). -[[Day notes]] shows (among others) how we have "weight" [[promoted attribute|promoted attributes]] in the day note [[template]]. This then aggregates the data and shows a nice chart of weight change in time. +[Day notes](Day-notes.md) shows (among others) how we have "weight" [promoted attribute](Promoted%20attributes.md) in the day note [template](Template.md). This then aggregates the data and shows a nice chart of weight change in time. -## Demo -[[images/weight-tracker.png]] +Demo +---- -## How to remove Weight Tracker button from the top bar +![](images/weight-tracker.png) + +How to remove Weight Tracker button from the top bar +---------------------------------------------------- In the link map of Weight Tracker, there is a note "Button". Open it and delete or comment out its contents. Weight Tracker button will disappear after you close and open the app. -## Implementation +Implementation +-------------- -Note "Weight Tracker" in the screenshot above is of type "Render HTML note". Such note doesn't have any useful content itself, the only purpose of it is to provide a place where some [[script|scripts]] can render some output. This script is defined in [[relation|attributes]] `renderNote` - coincidentally it's the Weight Tracker's child `Implementation`. +Note "Weight Tracker" in the screenshot above is of type "Render HTML note". Such note doesn't have any useful content itself, the only purpose of it is to provide a place where some [script](Scripts.md) can render some output. This script is defined in [relation](Attributes.md) `renderNote` - coincidentally it's the Weight Tracker's child `Implementation`. -This Implementation [[code note|code notes]] then contains some HTML and JavaScript which loads all the notes with "weight" attribute and displays them in a chart. To actually render chart we're using third party library [chart.js](https://www.chartjs.org/) which is imported as an attachment (it's not built-in into Trilium). +This Implementation [code note](Code-notes.md) then contains some HTML and JavaScript which loads all the notes with "weight" attribute and displays them in a chart. To actually render chart we're using third party library [chart.js](https://www.chartjs.org/) which is imported as an attachment (it's not built-in into Trilium). ### JS code + To get an idea of the script, here's the "JS code" note content: -```javascript +```text-plain async function getChartData() { const days = await api.runOnBackend(async () => { const notes = api.getNotesWithLabel('weight'); @@ -64,4 +70,4 @@ new chartjs.Chart(ctx, { type: 'line', data: await getChartData() }); -``` +``` \ No newline at end of file diff --git a/Widget-Basics.md b/Wiki/Widget-Basics.md similarity index 92% rename from Widget-Basics.md rename to Wiki/Widget-Basics.md index 2172a6b..c5028fe 100644 --- a/Widget-Basics.md +++ b/Wiki/Widget-Basics.md @@ -1,8 +1,9 @@ +# Widget-Basics ### The Very Basics -Based on the information from [[Frontend Basics]], the most basic widget we can make looks something like this. +Based on the information from [Frontend Basics](Frontend-Basics.md), the most basic widget we can make looks something like this. -```js +```text-plain class MyWidget extends api.BasicWidget { get position() {return 1;} get parentWidget() {return "left-pane"} @@ -26,7 +27,7 @@ Let's say that we just want to make a simple button that will show us a simple m First, we need to make our HTML a bit more complex to include the button. Thankfully this is easy with [jQuery](https://jquery.com/) because we can just pass an entire HTML string to it. -```js +```text-plain const template = `
`; class MyWidget extends api.BasicWidget { @@ -44,13 +45,13 @@ module.exports = new MyWidget(); Make that change, and reload Trilium and you should see a really ugly looking button at the top-left of the left pane conflicting with the search bar. We can make that look a lot better very easily because Trilium includes [Box Icons](https://boxicons.com). Find and pick one from there, and copy the class name that it gives you. For this tutorial, I'll be using `bx bxs-magic-wand`. I'm also going to add the classes Trilium uses for the floating buttons in the tree list since that will make sure it matches any theme we use. I'd also recommend removing the text now that we have a fancy icon. Now my template looks like this: -```js +```text-plain const template = `
`; ``` After reloading, that already looks a little bit better. But it's still in the wrong spot. We can fix that with a little bit of css. Thankfully [BasicWidget](https://zadam.github.io/trilium/frontend_api/BasicWidget.html) allows us to do this very easily with `this.cssBlock`. -```js +```text-plain const template = `
`; class MyWidget extends api.BasicWidget { @@ -74,12 +75,11 @@ module.exports = new MyWidget(); With that change, the button should now appear at the bottom left of the tree panel near the other action buttons. - ### User Interaction -All that's left to do is add a click listener to show that message. Thankfully the [[Script API]] has a convenient method for showing messages shown below. +All that's left to do is add a click listener to show that message. Thankfully the [Script API](Script%20API.md) has a convenient method for showing messages shown below. -```js +```text-plain const template = `
`; class MyWidget extends api.BasicWidget { diff --git a/Workspace.md b/Wiki/Workspace.md similarity index 58% rename from Workspace.md rename to Wiki/Workspace.md index 086773c..0467e12 100644 --- a/Workspace.md +++ b/Wiki/Workspace.md @@ -1,15 +1,16 @@ -Workspace is a concept built up on top of \[\[note hoisting\]\]. It is based on the idea that a user has several distinct spheres of interest. An example might be "Personal" and "Work", these two spheres are quite distinct and don't interact together. When I focus on Work, I don't really care about personal notes. +# Workspace +Workspace is a concept built up on top of [note hoisting](Note%20hoisting.md). It is based on the idea that a user has several distinct spheres of interest. An example might be "Personal" and "Work", these two spheres are quite distinct and don't interact together. When I focus on Work, I don't really care about personal notes. So far workspace consists of these features: -* \[\[note hoisting\]\] - you can "zoom" into a workspace subtree to focus only on the relevant notes +* [note hoisting](Note%20hoisting.md) - you can "zoom" into a workspace subtree to focus only on the relevant notes * easy entering of workspace: -![](https://user-images.githubusercontent.com/617641/107129392-72df1280-68c5-11eb-92b6-6ce1cd52fdff.png) +![](1_Workspace_image.png) * visual identification of workspace in tabs: -![](https://user-images.githubusercontent.com/617641/107129467-d406e600-68c5-11eb-86a7-219f168b47a9.png) +![](Workspace_image.png) ### How to use workspaces @@ -17,6 +18,6 @@ Let's say you have identified the workspaces and their subtrees. Define on the r * `#workspace` - Marks this note as a workspace, button to enter the workspace is controlled by this * `#workspaceIconClass` - controls the box icon to be displayed in the tree and tabs, example `bx bx-home`. See [https://boxicons.com/](https://boxicons.com/) -* `#workspaceTabBackgroundColor` - Background color of the tab, use any CSS color format, e.g. "lightblue" or "#ddd". See [https://www.w3schools.com/cssref/css_colors.asp](https://www.w3schools.com/cssref/css_colors.asp). +* `#workspaceTabBackgroundColor` - Background color of the tab, use any CSS color format, e.g. "lightblue" or "#ddd". See [https://www.w3schools.com/cssref/css\_colors.asp](https://www.w3schools.com/cssref/css_colors.asp). * `#workspaceCalendarRoot` - marking a note with this label will define a new per-workspace calendar. If there's no such note, the global calendar will be used. * `#workspaceTemplate` - This note will appear in the selection of available templates when creating a new note, but only when you are currently hoisted into a workspace containing this template. \ No newline at end of file diff --git a/Wiki/Workspace_image.png b/Wiki/Workspace_image.png new file mode 100644 index 0000000..4aa52be Binary files /dev/null and b/Wiki/Workspace_image.png differ diff --git a/gifs/autoformat.gif b/Wiki/gifs/autoformat.gif similarity index 100% rename from gifs/autoformat.gif rename to Wiki/gifs/autoformat.gif diff --git a/gifs/back-and-forwards.gif b/Wiki/gifs/back-and-forwards.gif similarity index 100% rename from gifs/back-and-forwards.gif rename to Wiki/gifs/back-and-forwards.gif diff --git a/gifs/bookmarks.gif b/Wiki/gifs/bookmarks.gif similarity index 100% rename from gifs/bookmarks.gif rename to Wiki/gifs/bookmarks.gif diff --git a/gifs/create-clone.gif b/Wiki/gifs/create-clone.gif similarity index 100% rename from gifs/create-clone.gif rename to Wiki/gifs/create-clone.gif diff --git a/gifs/create-external-link.gif b/Wiki/gifs/create-external-link.gif similarity index 100% rename from gifs/create-external-link.gif rename to Wiki/gifs/create-external-link.gif diff --git a/gifs/create-link-to-note.gif b/Wiki/gifs/create-link-to-note.gif similarity index 100% rename from gifs/create-link-to-note.gif rename to Wiki/gifs/create-link-to-note.gif diff --git a/gifs/cut-to-subnote.gif b/Wiki/gifs/cut-to-subnote.gif similarity index 100% rename from gifs/cut-to-subnote.gif rename to Wiki/gifs/cut-to-subnote.gif diff --git a/gifs/drag-and-drop.gif b/Wiki/gifs/drag-and-drop.gif similarity index 100% rename from gifs/drag-and-drop.gif rename to Wiki/gifs/drag-and-drop.gif diff --git a/gifs/jump-to.gif b/Wiki/gifs/jump-to.gif similarity index 100% rename from gifs/jump-to.gif rename to Wiki/gifs/jump-to.gif diff --git a/gifs/markdown-export-note.gif b/Wiki/gifs/markdown-export-note.gif similarity index 100% rename from gifs/markdown-export-note.gif rename to Wiki/gifs/markdown-export-note.gif diff --git a/gifs/markdown-export-subtree.gif b/Wiki/gifs/markdown-export-subtree.gif similarity index 100% rename from gifs/markdown-export-subtree.gif rename to Wiki/gifs/markdown-export-subtree.gif diff --git a/gifs/markdown-file-import.gif b/Wiki/gifs/markdown-file-import.gif similarity index 100% rename from gifs/markdown-file-import.gif rename to Wiki/gifs/markdown-file-import.gif diff --git a/gifs/markdown-inline-import.gif b/Wiki/gifs/markdown-inline-import.gif similarity index 100% rename from gifs/markdown-inline-import.gif rename to Wiki/gifs/markdown-inline-import.gif diff --git a/gifs/math.gif b/Wiki/gifs/math.gif similarity index 100% rename from gifs/math.gif rename to Wiki/gifs/math.gif diff --git a/gifs/move-note-with-keyboard.gif b/Wiki/gifs/move-note-with-keyboard.gif similarity index 100% rename from gifs/move-note-with-keyboard.gif rename to Wiki/gifs/move-note-with-keyboard.gif diff --git a/gifs/note-hoisting.gif b/Wiki/gifs/note-hoisting.gif similarity index 100% rename from gifs/note-hoisting.gif rename to Wiki/gifs/note-hoisting.gif diff --git a/gifs/protecting-note.gif b/Wiki/gifs/protecting-note.gif similarity index 100% rename from gifs/protecting-note.gif rename to Wiki/gifs/protecting-note.gif diff --git a/gifs/recent-notes.gif b/Wiki/gifs/recent-notes.gif similarity index 100% rename from gifs/recent-notes.gif rename to Wiki/gifs/recent-notes.gif diff --git a/gifs/relation-map-dev-process-demo.gif b/Wiki/gifs/relation-map-dev-process-demo. similarity index 100% rename from gifs/relation-map-dev-process-demo.gif rename to Wiki/gifs/relation-map-dev-process-demo. diff --git a/gifs/relation-map-family-demo.gif b/Wiki/gifs/relation-map-family-demo.gif similarity index 100% rename from gifs/relation-map-family-demo.gif rename to Wiki/gifs/relation-map-family-demo.gif diff --git a/gifs/saved-search.gif b/Wiki/gifs/saved-search.gif similarity index 100% rename from gifs/saved-search.gif rename to Wiki/gifs/saved-search.gif diff --git a/gifs/upload-image.gif b/Wiki/gifs/upload-image.gif similarity index 100% rename from gifs/upload-image.gif rename to Wiki/gifs/upload-image.gif diff --git a/images/about-trilium-data-dir.png b/Wiki/images/about-trilium-data-dir.png similarity index 100% rename from images/about-trilium-data-dir.png rename to Wiki/images/about-trilium-data-dir.png diff --git a/images/anonymization.png b/Wiki/images/anonymization.png similarity index 100% rename from images/anonymization.png rename to Wiki/images/anonymization.png diff --git a/images/app-css.png b/Wiki/images/app-css.png similarity index 100% rename from images/app-css.png rename to Wiki/images/app-css.png diff --git a/images/attribute-definitions.png b/Wiki/images/attribute-definitions.png similarity index 100% rename from images/attribute-definitions.png rename to Wiki/images/attribute-definitions.png diff --git a/images/attributes.png b/Wiki/images/attributes.png similarity index 100% rename from images/attributes.png rename to Wiki/images/attributes.png diff --git a/images/block-toolbar-insert-image.png b/Wiki/images/block-toolbar-insert-image.png similarity index 100% rename from images/block-toolbar-insert-image.png rename to Wiki/images/block-toolbar-insert-image.png diff --git a/images/book-note-pictures.png b/Wiki/images/book-note-pictures.png similarity index 100% rename from images/book-note-pictures.png rename to Wiki/images/book-note-pictures.png diff --git a/images/book-note.png b/Wiki/images/book-note.png similarity index 100% rename from images/book-note.png rename to Wiki/images/book-note.png diff --git a/images/bookmark-folder.png b/Wiki/images/bookmark-folder.png similarity index 100% rename from images/bookmark-folder.png rename to Wiki/images/bookmark-folder.png diff --git a/images/button-script.png b/Wiki/images/button-script.png similarity index 100% rename from images/button-script.png rename to Wiki/images/button-script.png diff --git a/Wiki/images/chrome-trilium-web-clipper.png b/Wiki/images/chrome-trilium-web-clipper.png new file mode 100644 index 0000000..f1ac0e4 Binary files /dev/null and b/Wiki/images/chrome-trilium-web-clipper.png differ diff --git a/images/code-block.png b/Wiki/images/code-block.png similarity index 100% rename from images/code-block.png rename to Wiki/images/code-block.png diff --git a/images/code-note.png b/Wiki/images/code-note.png similarity index 100% rename from images/code-note.png rename to Wiki/images/code-note.png diff --git a/images/dark-theme.png b/Wiki/images/dark-theme.png similarity index 100% rename from images/dark-theme.png rename to Wiki/images/dark-theme.png diff --git a/images/day-notes.png b/Wiki/images/day-notes.png similarity index 100% rename from images/day-notes.png rename to Wiki/images/day-notes.png diff --git a/images/error-logs-dev-tools.png b/Wiki/images/error-logs-dev-tools.png similarity index 100% rename from images/error-logs-dev-tools.png rename to Wiki/images/error-logs-dev-tools.png diff --git a/images/error-logs-export-subtree.png b/Wiki/images/error-logs-export-subtree.png similarity index 100% rename from images/error-logs-export-subtree.png rename to Wiki/images/error-logs-export-subtree.png diff --git a/images/error-logs-firefox-context-menu.png b/Wiki/images/error-logs-firefox-context-men.png similarity index 100% rename from images/error-logs-firefox-context-menu.png rename to Wiki/images/error-logs-firefox-context-men.png diff --git a/Wiki/images/hide-archived.png b/Wiki/images/hide-archived.png new file mode 100644 index 0000000..547891a Binary files /dev/null and b/Wiki/images/hide-archived.png differ diff --git a/images/link-map.png b/Wiki/images/link-map.png similarity index 100% rename from images/link-map.png rename to Wiki/images/link-map.png diff --git a/images/mobile-smartphone.png b/Wiki/images/mobile-smartphone.png similarity index 100% rename from images/mobile-smartphone.png rename to Wiki/images/mobile-smartphone.png diff --git a/images/mobile-tablet.png b/Wiki/images/mobile-tablet.png similarity index 100% rename from images/mobile-tablet.png rename to Wiki/images/mobile-tablet.png diff --git a/images/note-revisions.png b/Wiki/images/note-revisions.png similarity index 100% rename from images/note-revisions.png rename to Wiki/images/note-revisions.png diff --git a/images/promoted-attributes-queen.png b/Wiki/images/promoted-attributes-queen.png similarity index 100% rename from images/promoted-attributes-queen.png rename to Wiki/images/promoted-attributes-queen.png diff --git a/images/promoted-attributes.png b/Wiki/images/promoted-attributes.png similarity index 100% rename from images/promoted-attributes.png rename to Wiki/images/promoted-attributes.png diff --git a/images/relation-map-dev-process.png b/Wiki/images/relation-map-dev-process.png similarity index 100% rename from images/relation-map-dev-process.png rename to Wiki/images/relation-map-dev-process.png diff --git a/images/relation-map-family.png b/Wiki/images/relation-map-family.png similarity index 100% rename from images/relation-map-family.png rename to Wiki/images/relation-map-family.png diff --git a/images/screenshot.png b/Wiki/images/screenshot.png similarity index 100% rename from images/screenshot.png rename to Wiki/images/screenshot.png diff --git a/images/share-multiple-notes-web.png b/Wiki/images/share-multiple-notes-web.png similarity index 100% rename from images/share-multiple-notes-web.png rename to Wiki/images/share-multiple-notes-web.png diff --git a/images/share-single-note-web.png b/Wiki/images/share-single-note-web.png similarity index 100% rename from images/share-single-note-web.png rename to Wiki/images/share-single-note-web.png diff --git a/images/share-single-note.png b/Wiki/images/share-single-note.png similarity index 100% rename from images/share-single-note.png rename to Wiki/images/share-single-note.png diff --git a/images/shared-list.png b/Wiki/images/shared-list.png similarity index 100% rename from images/shared-list.png rename to Wiki/images/shared-list.png diff --git a/images/star-topology.png b/Wiki/images/star-topology.png similarity index 100% rename from images/star-topology.png rename to Wiki/images/star-topology.png diff --git a/images/steel-blue.png b/Wiki/images/steel-blue.png similarity index 100% rename from images/steel-blue.png rename to Wiki/images/steel-blue.png diff --git a/images/sync-config.png b/Wiki/images/sync-config.png similarity index 100% rename from images/sync-config.png rename to Wiki/images/sync-config.png diff --git a/images/sync-in-progress.png b/Wiki/images/sync-in-progress.png similarity index 100% rename from images/sync-in-progress.png rename to Wiki/images/sync-in-progress.png diff --git a/images/sync-init.png b/Wiki/images/sync-init.png similarity index 100% rename from images/sync-init.png rename to Wiki/images/sync-init.png diff --git a/images/task-manager.png b/Wiki/images/task-manager.png similarity index 100% rename from images/task-manager.png rename to Wiki/images/task-manager.png diff --git a/images/template-create-instance-note.png b/Wiki/images/template-create-instance-note. similarity index 100% rename from images/template-create-instance-note.png rename to Wiki/images/template-create-instance-note. diff --git a/images/template.png b/Wiki/images/template.png similarity index 100% rename from images/template.png rename to Wiki/images/template.png diff --git a/images/text-notes-formatting-block.png b/Wiki/images/text-notes-formatting-block.pn similarity index 100% rename from images/text-notes-formatting-block.png rename to Wiki/images/text-notes-formatting-block.pn diff --git a/images/text-notes-formatting-inline.png b/Wiki/images/text-notes-formatting-inline.p similarity index 100% rename from images/text-notes-formatting-inline.png rename to Wiki/images/text-notes-formatting-inline.p diff --git a/images/tree-map.png b/Wiki/images/tree-map.png similarity index 100% rename from images/tree-map.png rename to Wiki/images/tree-map.png diff --git a/images/weight-tracker.png b/Wiki/images/weight-tracker.png similarity index 100% rename from images/weight-tracker.png rename to Wiki/images/weight-tracker.png diff --git a/relnotes48/bookmarks.png b/Wiki/relnotes48/bookmarks.png similarity index 100% rename from relnotes48/bookmarks.png rename to Wiki/relnotes48/bookmarks.png diff --git a/relnotes48/mermaid.png b/Wiki/relnotes48/mermaid.png similarity index 100% rename from relnotes48/mermaid.png rename to Wiki/relnotes48/mermaid.png diff --git a/relnotes48/note-map.png b/Wiki/relnotes48/note-map.png similarity index 100% rename from relnotes48/note-map.png rename to Wiki/relnotes48/note-map.png diff --git a/relnotes48/screenshot.png b/Wiki/relnotes48/screenshot.png similarity index 100% rename from relnotes48/screenshot.png rename to Wiki/relnotes48/screenshot.png diff --git a/relnotes48/split.png b/Wiki/relnotes48/split.png similarity index 100% rename from relnotes48/split.png rename to Wiki/relnotes48/split.png diff --git a/_Sidebar.md b/_Sidebar.md deleted file mode 100644 index a0dac61..0000000 --- a/_Sidebar.md +++ /dev/null @@ -1,70 +0,0 @@ -* [[Screenshot tour]] -* Basic concepts - * [[Document]] - * [[Note]] - * [[Text notes]] - * [[Links]] - * [[Images]] - * [[Attachments]] - * [[Cloning notes]] - * [[Protected notes]] - * [[Archived notes]] - * [[Note revisions]] - * Navigation - * [[Tree concepts]] - * [[Tree manipulation]] - * [[Note navigation]] - * [[Search]] - * [[Bookmarks]] - * [[Note hoisting]] - * [[Workspace]] - * [[Keyboard shortcuts]] - * [[Themes]] - * [[Theme Gallery]] - * Import & Export - * [[Markdown]] - * [[Evernote|Evernote import]] - * [[Onenote]] -* Installation & setup - * [[Server installation]] - * [[Packaged server installation]] - * [[Docker server installation]] - * [[NixOS server installation]] - * [[Manual server installation]] - * [[Kubernetes server installation]] - * [[Apache proxy setup]] - * [[Nginx proxy setup]] - * [[TLS configuration]] - * [[Desktop installation]] - * [[Synchronization]] - * [[Mobile frontend]] - * [[Web clipper]] - * [[Upgrading Trilium]] - * [[Backup]] - * [[Data-Directory]] -* Advanced usage - * [[Attributes]] - * [[Attribute inheritance]] - * [[Promoted attributes]] - * [[Template]] - * [[Relation map]] - * [[Note map]] - * [[Book note]] - * [[Sharing]] - * [[Code notes]] - * [[Scripts]] - * [[Script API]] - * [[Custom request handler]] - * [[Events]] - * [[Custom Widget]] - * [[Advanced showcases]] - * [[Day notes]] - * [[Weight Tracker]] - * [[Task Manager]] - * [[ETAPI]] (REST API) - * [[Default note title]] -* Developer guides - * [[Frontend Basics]] - * [[Widget Basics]] -* [[FAQ]] -* [[Troubleshooting]] diff --git a/index.md b/index.md deleted file mode 100644 index 3f2fbd3..0000000 --- a/index.md +++ /dev/null @@ -1,42 +0,0 @@ -# Home - -## Overview - -Basic overview of the Trilium project is available at project homepage - https://github.com/zadam/trilium#trilium-notes - -Inspiration for the name "Trilium": - -Naming software is hard. I lived in Ontario when I first started the project and Trillium (the flower) is sort of a provincial logo, many institutions in Ontario are named "Trillium [something]". So I kept hearing/reading it almost everyday, I liked the sound of it and its nature motif, so I just reused it. - -~ Zadam (Trilium Developer) - -## Documentation - -This wiki contains additional and more in-depth information on some topics. See the sidebar for listing of all available pages. - -## Quick Start - -### Choose the setup - -Local only desktop/laptop - Allows a single instance on a desktop and will save the notes locally on that desktop. - -1. Desktop installation - -**Server with web only access** - Installs the application on the server and allows access from any web browser on any device, including mobile. - -1. Server installation -1. Mobile frontend (optional) -1. Deploy -1. 3rd party paid service to host a Trilium instance for you - -**Combination of server and desktop/laptop** - Install the application on both a server, for web access and data synchronization, and desktop instance(s). This allows all the data to be stored on the server and either accessed from the web browser, or the desktop application. The desktop application will sync and store the data locally so that it can be used when offline. - -1. Server installation -2. Mobile frontend (optional) -3. Desktop installation -4. Synchronization - -### Basic concepts - -1. Understand Note -2. Watch the Screenshot tour