While the sharing feature is powerful, it has some limitations:
-
Code Notes: No syntax highlighting.
-
Static Note Tree
+
Code Notes: No syntax highlighting.
+
Static Note Tree
-
Protected Notes: Cannot be shared.
-
Include Notes: Not supported.
+
Protected Notes: Cannot be shared.
+
Include Notes: Not supported.
Some of these limitations may be addressed in future updates.
Prerequisites
@@ -186,7 +181,7 @@ class="image">
is necessary because the notes will be hosted from the server.
Sharing a note
-
+
Enable Sharing: To share a note, toggle the Shared switch
within the note's interface. Once sharing is enabled, an URL will appear,
which you can click to access the shared note.
Access the Shared Note: The link provided will open the
- note in your browser. If your server is not configured with a public IP,
- the URL will refer to localhost (127.0.0.1).
+
+
Access the Shared Note: The link provided will open the
+ note in your browser. If your server is not configured with a public IP,
+ the URL will refer to localhost (127.0.0.1).
+
Sharing a note subtree
When you share a note, you actually share the entire subtree of notes
@@ -212,11 +209,11 @@ class="image">
public.
Security considerations
-
Shared notes are published on the open internet and can be accessed by
+
Shared notes are published on the open internet and can be accessed by
anyone with the URL unless the notes are password-protected.
-
The URL's randomness does not provide security, so it is crucial not to
+
The URL's randomness does not provide security, so it is crucial not to
share sensitive information through this feature.
-
Trilium takes precautions to protect your publicly shared instance from
+
Trilium takes precautions to protect your publicly shared instance from
leaking information for non-shared notes, including opening a separate
read-only connection to the Database.
Depending on your threat model, it might make more sense to use
@@ -233,13 +230,12 @@ class="image">
The default design should be a good starting point, but you can customize
it using your own CSS:
-
Custom CSS: Link a CSS Custom CSS: Link a CSS Code note to the shared page by adding
a ~shareCss relation to the note. If you want this style to
apply to the entire subtree, make the label inheritable. You can hide the
CSS code note from the tree navigation by adding the #shareHiddenFromTree label.
-
Omitting Default CSS: For extensive styling changes,
+
Omitting Default CSS: For extensive styling changes,
use the #shareOmitDefaultCss label to avoid conflicts with Trilium's
default stylesheet.
@@ -257,22 +253,22 @@ class="image">
itself.
The #shareHtmlLocation label accepts values in the format location:position:
-
Locations: head, body, content
+
Locations: head, body, content
-
Positions: start, end
+
Positions: start, end
For example:
-
#shareHtmlLocation=head:start - Injects HTML at the beginning
+
#shareHtmlLocation=head:start - Injects HTML at the beginning
of the <head> section
-
#shareHtmlLocation=head:end - Injects HTML at the end of the <head> section
+
#shareHtmlLocation=head:end - Injects HTML at the end of the <head> section
(default)
-
#shareHtmlLocation=body:start - Injects HTML at the beginning
+
#shareHtmlLocation=body:start - Injects HTML at the beginning
of the <body> section
-
#shareHtmlLocation=content:start - Injects HTML at the beginning
+
#shareHtmlLocation=content:start - Injects HTML at the beginning
of the content area
-
#shareHtmlLocation=content:end - Injects HTML at the end of
+
#shareHtmlLocation=content:end - Injects HTML at the end of
the content area
If no location is specified, the HTML will be injected at content:end by
@@ -290,16 +286,16 @@ for (const attr of parentNote.attributes) {
This will change the URL to http://domain.tld/share/highlighting.
Important:
-
Ensure that aliases are unique.
-
Using slashes (/) within aliases to create subpaths is not
+
Ensure that aliases are unique.
+
Using slashes (/) within aliases to create subpaths is not
supported.
@@ -323,176 +319,165 @@ for (const attr of parentNote.attributes) {
When viewed, the list of shared roots will be displayed at the bottom of
the note.
Attribute reference
-
-
-
-
-
-
-
-
-
Attribute
-
Description
-
-
-
-
-
#shareHiddenFromTree
-
-
this note is hidden from left navigation tree, but still accessible with
- its URL
-
-
-
#shareExternalLink
-
-
note will act as a link to an external website in the share tree
-
-
-
#shareAlias
-
-
define an alias using which the note will be available under https://your_trilium_host/share/[your_alias]
-
-
-
-
#shareOmitDefaultCss
-
-
default share page CSS will be omitted. Use when you make extensive styling
- changes.
-
-
-
#shareRoot
-
-
marks note which is served on /share root.
-
-
-
#shareDescription
-
-
define text to be added to the HTML meta tag for description
-
-
-
#shareRaw
-
-
Note will be served in its raw format, without HTML wrapper. See also
- Serving directly the content of a note for an alternative method
- without setting an attribute.
-
-
-
#shareDisallowRobotIndexing
-
-
-
Indicates to web crawlers that the page should not be indexed of this
- note by:
-
-
Setting the X-Robots-Tag: noindex HTTP header.
-
Setting the noindex, follow meta tag.
-
-
-
-
-
#shareCredentials
-
-
require credentials to access this shared note. Value is expected to be
- in format username:password. Don't forget to make this inheritable
- to apply to child-notes/images.
-
-
-
#shareIndex
-
-
Note with this label will list all roots of shared notes.
-
-
-
#shareHtmlLocation
-
-
defines where custom HTML injected via ~shareHtml relation
- should be placed. Applied to the HTML snippet note itself. Format: location:position where
- location is head, body, or content and
- position is start or end. Defaults to content:end.
-
-
-
-
-
Customizing logo
+
+
+
+
+
+
+
+
Attribute
+
Description
+
+
+
+
+
#shareHiddenFromTree
+
+
this note is hidden from left navigation tree, but still accessible with
+ its URL
+
+
+
#shareExternalLink
+
+
note will act as a link to an external website in the share tree
+
+
+
#shareAlias
+
+
define an alias using which the note will be available under https://your_trilium_host/share/[your_alias]
+
+
+
+
#shareOmitDefaultCss
+
+
default share page CSS will be omitted. Use when you make extensive styling
+ changes.
+
+
+
#shareRoot
+
+
marks note which is served on /share root.
+
+
+
#shareDescription
+
+
define text to be added to the HTML meta tag for description
+
+
+
#shareRaw
+
+
Note will be served in its raw format, without HTML wrapper. See also
+ Serving directly the content of a note for an alternative method
+ without setting an attribute.
+
+
+
#shareDisallowRobotIndexing
+
+
+
Indicates to web crawlers that the page should not be indexed of this
+ note by:
+
+
Setting the X-Robots-Tag: noindex HTTP header.
+
Setting the noindex, follow meta tag.
+
+
+
+
+
#shareCredentials
+
+
require credentials to access this shared note. Value is expected to be
+ in format username:password. Don't forget to make this inheritable
+ to apply to child-notes/images.
+
+
+
#shareIndex
+
+
Note with this label will list all roots of shared notes.
+
+
+
#shareHtmlLocation
+
+
defines where custom HTML injected via ~shareHtml relation
+ should be placed. Applied to the HTML snippet note itself. Format: location:position where
+ location is head, body, or content and
+ position is start or end. Defaults to content:end.
+
+
+
+
+
Customizing logo
It's possible to adjust the logo which is displayed on the top-left of
the left pane.
-
-
-
-
-
-
-
-
-
Attribute
-
Description
-
-
-
-
-
~shareLogo
-
-
Relation set to an image to use as logo. The image must be part of the
- share tree (it can be hidden if needed).
-
-
-
#shareLogoWidth
-
-
The width (in pixels, without unit) to set for the logo. Default is 53.
-
-
-
#shareLogoHeight
-
-
The height (in pixels, without unit) to set for the logo. Default is 40.
-
-
-
#shareRootLink
-
-
URL to navigate to when the logo is pressed.
-
-
-
-
-
Customizing OpenGraph
-
-
-
-
-
-
-
-
-
Attribute
-
Description
-
-
-
-
-
#shareOpenGraphColor
-
-
This adjusts the theme-color meta-property.
-
-
-
#shareOpenGraphURL
-
-
This adjusts the og:url and twitter:url meta-properties.
-
-
-
#shareOpenGraphDomain
-
-
Adjusts the twitter:domain meta-property.
-
-
-
#shareOpenGraphImage
- ~shareOpenGraphImage
-
-
Can be either a label, case in which the value is passed on as-is, or
- it can be a relation to an image File.
- This controls the og:image meta-property.
-
-
-
-
-
Credits
+
+
+
+
Attribute
+
Description
+
+
+
+
+
~shareLogo
+
+
Relation set to an image to use as logo. The image must be part of the
+ share tree (it can be hidden if needed).
+
+
+
#shareLogoWidth
+
+
The width (in pixels, without unit) to set for the logo. Default is 53.
+
+
+
#shareLogoHeight
+
+
The height (in pixels, without unit) to set for the logo. Default is 40.
+
+
+
#shareRootLink
+
+
URL to navigate to when the logo is pressed.
+
+
+
+
+
Customizing OpenGraph
+
+
+
+
Attribute
+
Description
+
+
+
+
+
#shareOpenGraphColor
+
+
This adjusts the theme-color meta-property.
+
+
+
#shareOpenGraphURL
+
+
This adjusts the og:url and twitter:url meta-properties.
+
+
+
#shareOpenGraphDomain
+
+
Adjusts the twitter:domain meta-property.
+
+
+
#shareOpenGraphImage
+ ~shareOpenGraphImage
+
+
Can be either a label, case in which the value is passed on as-is, or
+ it can be a relation to an image File.
+ This controls the og:image meta-property.
+
+
+
+
+
Credits
Since v0.95.0, a new theme was introduced (and enabled by default) which
greatly improves the visual aspect of the Share feature, as well as its
functionality (such as mobile support, dark/light mode, collapsible tree,
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration.html
index 220ae8b74..5f1bafa0c 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Advanced Usage/Sharing/Reverse proxy configuration.html
@@ -6,18 +6,13 @@
reverse_proxy /share http://localhost:8080/share
}
This is for newer versions where the share functionality is isolated,
- for older versions it's required to also include /assets.
- [1]
-
+ for older versions it's required to also include /assets.[1]
When a table is selected, a special formatting toolbar will appear:
-
-
+
+
+
Navigating a table
-
-
Using the mouse:
-
-
Click on a cell to focus it.
-
Click the
- button at the top or the bottom of a table to insert an empty paragraph
- near it.
-
Click the
- button at the top-left of the table to select it entirely (for easy copy-pasting
- or cutting) or drag and drop it to relocate the table.
-
-
-
Using the keyboard:
-
-
Use the arrow keys on the keyboard to easily navigate between cells.
-
It's also possible to use Tab to go to the next cell and Shift+Tab
- to go to the previous cell.
-
Unlike arrow keys, pressing Tab at the end of the table (last
- row, last column) will create a new row automatically.
-
To select multiple cells, hold Shift while using the arrow keys.
-
-
+
+
Using the mouse:
+
+
Click on a cell to focus it.
+
Click the
+ button at the top or the bottom of a table to insert an empty paragraph
+ near it.
+
Click the
+ button at the top-left of the table to select it entirely (for easy copy-pasting
+ or cutting) or drag and drop it to relocate the table.
+
+
+
Using the keyboard:
+
+
Use the arrow keys on the keyboard to easily navigate between cells.
+
It's also possible to use Tab to go to the next cell and Shift+Tab
+ to go to the previous cell.
+
Unlike arrow keys, pressing Tab at the end of the table (last
+ row, last column) will create a new row automatically.
+
To select multiple cells, hold Shift while using the arrow keys.
-
Resizing cells
-
-
Columns can be resized by hovering the mouse over the border of two adjacent
- cells and dragging it.
-
By default, the row height is not adjustable using the mouse, but it can
- be configured from the cell settings (see below).
-
To adjust exactly the width (in pixels or percentages) of a cell, select
- the
- button.
+
+
+
Resizing cells
+
+
Columns can be resized by hovering the mouse over the border of two adjacent
+ cells and dragging it.
+
By default, the row height is not adjustable using the mouse, but it can
+ be configured from the cell settings (see below).
+
To adjust exactly the width (in pixels or percentages) of a cell, select
+ the
+ button.
+
+
Inserting new rows and new columns
+
+
To insert a new column, click on a desired location, then press the
+ button from the formatting toolbar and select Insert column left or right.
+
+
To insert a new row, click on a desired location, then press the
+ button and select Insert row above or below.
+
+
A quicker alternative to creating a new row while at the end of the table
+ is to press the Tab key.
+
+
+
+
Merging cells
+
To merge two or more cells together, simply select them via drag &
+ drop and press the
+ button from the formatting toolbar.
+
More options are available by pressing the arrow next to it:
+
+
Click on a single cell and select Merge cell up/down/right/left to merge
+ with an adjacent cell.
+
Select Split cell vertically or horizontally, to split
+ a cell into multiple cells (can also be used to undo a merge).
+
+
Table properties
+
+
+
+
The table properties can be accessed via the
+ button and allows for the following adjustments:
+
+
Border (not the border of the cells, but the outer rim of the table),
+ which includes the style (single, double), color and width.
+
The background color, with none set by default.
+
The width and height of the table in percentage (must end with %)
+ or pixels (must end with px).
+
The alignment of the table.
+
+
Left or right-aligned, case in which the text will flow next to it.
+
Centered, case in which text will avoid the table, regardless of the table
+ width.
-
Inserting new rows and new columns
-
-
To insert a new column, click on a desired location, then press the
- button from the formatting toolbar and select Insert column left or right.
-
-
To insert a new row, click on a desired location, then press the
- button and select Insert row above or below.
-
-
A quicker alternative to creating a new row while at the end of the table
- is to press the Tab key.
-
-
-
-
Merging cells
-
To merge two or more cells together, simply select them via drag &
- drop and press the
- button from the formatting toolbar.
-
More options are available by pressing the arrow next to it:
-
-
Click on a single cell and select Merge cell up/down/right/left to merge
- with an adjacent cell.
-
Select Split cell vertically or horizontally, to split
- a cell into multiple cells (can also be used to undo a merge).
-
-
Table properties
-
-
-
-
The table properties can be accessed via the
- button and allows for the following adjustments:
-
-
Border (not the border of the cells, but the outer rim of the table),
- which includes the style (single, double), color and width.
-
The background color, with none set by default.
-
The width and height of the table in percentage (must end with %)
- or pixels (must end with px).
-
The alignment of the table.
-
-
Left or right-aligned, case in which the text will flow next to it.
-
Centered, case in which text will avoid the table, regardless of the table
- width.
-
-
-
-
The table will immediately update to reflect the changes, but the Save button
- must be pressed for the changes to persist.
-
Cell properties
-
-
-
-
Similarly to table properties, the
- button opens a popup which adjusts the styling of one or more cells (based
- on the user's selection).
-
The following options can be adjusted:
-
-
The border style, color and width (same as table properties), but applying
- to the current cell only.
-
The background color, with none set by default.
-
The width and height of the cell in percentage (must end with %)
- or pixels (must end with px).
-
The padding (the distance of the text compared to the cell's borders).
-
The alignment of the text, both horizontally (left, centered, right, justified)
- and vertically (top, middle or bottom).
-
-
The cell will immediately update to reflect the changes, but the Save button
- must be pressed for the changes to persist.
-
Caption
-
Press the
- button to insert a caption or a text description of the table, which is
- going to be displayed above the table.
-
Tables with invisible borders
-
Tables can be set to have invisible borders in order to allow for basic
- layouts (columns, grids) of text or images without
- the distraction of their border:
-
-
First insert a table with the desired number of columns and rows.
-
Select the entire table.
-
In Table properties, set:
+
+
+
The table will immediately update to reflect the changes, but the Save button
+ must be pressed for the changes to persist.
+
Cell properties
+
+
+
+
Similarly to table properties, the
+ button opens a popup which adjusts the styling of one or more cells (based
+ on the user's selection).
+
The following options can be adjusted:
+
+
The border style, color and width (same as table properties), but applying
+ to the current cell only.
+
The background color, with none set by default.
+
The width and height of the cell in percentage (must end with %)
+ or pixels (must end with px).
+
The padding (the distance of the text compared to the cell's borders).
+
The alignment of the text, both horizontally (left, centered, right, justified)
+ and vertically (top, middle or bottom).
+
+
The cell will immediately update to reflect the changes, but the Save button
+ must be pressed for the changes to persist.
+
Caption
+
Press the
+ button to insert a caption or a text description of the table, which is
+ going to be displayed above the table.
+
Table borders
+
By default, tables will come with a predefined gray border.
+
To adjust the borders, follow these steps:
+
+
Select the table.
+
In the floating panel, select the Table properties option (
+ ).
-
Style to Single
+
Look for the Border section at the top of the newly opened panel.
+
This will control the outer borders of the table.
+
Select a style for the border. Generally Single is the desirable
+ option.
+
Select a color for the border.
+
Select a width for the border, expressed in pixels.
+
+
+
Select all the cells of the table and then press the Cell properties option
+ (
+ ).
+
+
This will control the inner borders of the table, at cell level.
+
Note that it's possible to change the borders individually by selecting
+ one or more cells, case in which it will only change the borders that intersect
+ these cells.
+
Repeat the same steps as from step (2).
+
+
+
+
Tables with invisible borders
+
Tables can be set to have invisible borders in order to allow for basic
+ layouts (columns, grids) of text or images without
+ the distraction of their border:
+
+
First insert a table with the desired number of columns and rows.
+
Select the entire table.
+
In Table properties, set:
+
+
Style to Single
-
Color to transparent
+
Color to transparent
-
Width to 1px.
+
Width to 1px.
-
In Cell Properties, set the same as on the previous step.
-
-
Markdown import/export
-
Simple tables are exported in GitHub-flavored Markdown format (e.g. a
- series of | items). If the table is found to be more complex
- (it contains HTML elements, has custom sizes or images), the table is converted
- to a HTML one instead.
-
Generally formatting loss should be minimal when exported to Markdown
- due to the fallback to HTML formatting.
\ No newline at end of file
+
In Cell Properties, set the same as on the previous step.
+
+
Markdown import/export
+
Simple tables are exported in GitHub-flavored Markdown format (e.g. a
+ series of | items). If the table is found to be more complex
+ (it contains HTML elements, has custom sizes or images), the table is converted
+ to a HTML one instead.
+
Generally formatting loss should be minimal when exported to Markdown
+ due to the fallback to HTML formatting.
\ No newline at end of file
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Script API.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Script API.html
index 25b181b48..f83febe85 100644
--- a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Script API.html
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Scripting/Script API.html
@@ -1,10 +1,10 @@
-
Both Intel and Apple Silicon devices are supported.
+
+
+
\ No newline at end of file
diff --git a/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.html b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.html
new file mode 100644
index 000000000..28eaffbe4
--- /dev/null
+++ b/apps/server/src/assets/doc_notes/en/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.html
@@ -0,0 +1,17 @@
+
+
Using Docker, the server can be run on Windows, Linux and macOS devices.
+
Native binaries are provided for Linux x64 and ARM (aarch64).
+
+
Legacy ARM support
+
The Docker builds also provide linux/arm/v7 and linux/arm/v8 platforms.
+ These platforms are considered legacy since Trilium uses Node.js version
+ 24 which have officially downgraded support for
+ these platforms to “experimental”.
+
As a result, Trilium needs to use Node.js 22 for these versions. As soon
+ as soon Node.js 22 will no longer be compatible, support for armv7 and armv8 will
+ be dropped entirely.
+
Regardless of upstream support, these platforms are supported on a best-effort
+ basis and are not officially supported by the Trilium development team.
+ Bug reports are accepted but they will not be treated with priority; contributions
+ are welcome.
\ No newline at end of file
diff --git a/docs/User Guide/!!!meta.json b/docs/User Guide/!!!meta.json
index eb00035ea..37e213cf1 100644
--- a/docs/User Guide/!!!meta.json
+++ b/docs/User Guide/!!!meta.json
@@ -331,6 +331,41 @@
"format": "markdown",
"dataFileName": "Using the desktop application .md",
"attachments": []
+ },
+ {
+ "isClone": false,
+ "noteId": "Rp0q8bSP6Ayl",
+ "notePath": [
+ "pOsGYCXsbNQG",
+ "Otzi9La2YAUX",
+ "poXkQfguuA0U",
+ "Rp0q8bSP6Ayl"
+ ],
+ "title": "System Requirements",
+ "notePosition": 20,
+ "prefix": null,
+ "isExpanded": false,
+ "type": "text",
+ "mime": "text/html",
+ "attributes": [
+ {
+ "type": "label",
+ "name": "shareAlias",
+ "value": "system-requirements",
+ "isInheritable": false,
+ "position": 30
+ },
+ {
+ "type": "label",
+ "name": "iconClass",
+ "value": "bx bx-chip",
+ "isInheritable": false,
+ "position": 40
+ }
+ ],
+ "format": "markdown",
+ "dataFileName": "System Requirements.md",
+ "attachments": []
}
]
},
@@ -1151,6 +1186,41 @@
"format": "markdown",
"dataFileName": "Third-party cloud hosting.md",
"attachments": []
+ },
+ {
+ "isClone": false,
+ "noteId": "iGTnKjubbXkA",
+ "notePath": [
+ "pOsGYCXsbNQG",
+ "Otzi9La2YAUX",
+ "WOcw2SLH6tbX",
+ "iGTnKjubbXkA"
+ ],
+ "title": "System Requirements",
+ "notePosition": 140,
+ "prefix": null,
+ "isExpanded": false,
+ "type": "text",
+ "mime": "text/html",
+ "attributes": [
+ {
+ "type": "label",
+ "name": "shareAlias",
+ "value": "system-requirements",
+ "isInheritable": false,
+ "position": 30
+ },
+ {
+ "type": "label",
+ "name": "iconClass",
+ "value": "bx bx-chip",
+ "isInheritable": false,
+ "position": 40
+ }
+ ],
+ "format": "markdown",
+ "dataFileName": "System Requirements.md",
+ "attachments": []
}
]
},
diff --git a/docs/User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements.md b/docs/User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements.md
new file mode 100644
index 000000000..af28d059f
--- /dev/null
+++ b/docs/User Guide/User Guide/Installation & Setup/Desktop Installation/System Requirements.md
@@ -0,0 +1,12 @@
+# System Requirements
+The desktop version of Trilium supports all three main operating systems:
+
+* Windows
+ * Windows 11 is officially supported.
+ * Windows on ARM is also supported
+* Linux:
+ * Most modern distributions are supported, including NixOS.
+ * ARM is supported in `aarch64` (no ARM v7 support).
+* macOS
+ * Minimum supported operating system: macOS Monterey
+ * Both Intel and Apple Silicon devices are supported.
\ No newline at end of file
diff --git a/docs/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.md b/docs/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.md
new file mode 100644
index 000000000..4b0221ee0
--- /dev/null
+++ b/docs/User Guide/User Guide/Installation & Setup/Server Installation/System Requirements.md
@@ -0,0 +1,11 @@
+# System Requirements
+* Using Docker, the server can be run on Windows, Linux and macOS devices.
+* Native binaries are provided for Linux x64 and ARM (`aarch64`).
+
+## Legacy ARM support
+
+The Docker builds also provide `linux/arm/v7` and `linux/arm/v8` platforms. These platforms are considered legacy since Trilium uses Node.js version 24 which have [officially downgraded support](https://github.com/nodejs/node/commit/6682861d6f) for these platforms to “experimental”.
+
+As a result, Trilium needs to use Node.js 22 for these versions. As soon as soon Node.js 22 will no longer be compatible, support for `armv7` and `armv8` will be dropped entirely.
+
+Regardless of upstream support, these platforms are supported on a best-effort basis and are not officially supported by the Trilium development team. Bug reports are accepted but they will not be treated with priority; contributions are welcome.
\ No newline at end of file
From 3f0b0f9b621952cd1bb40710c523726d58718700 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 1 Nov 2025 13:09:26 +0100
Subject: [PATCH 13/17] Translations update from Hosted Weblate (#7565)
---
.../src/assets/translations/ja/server.json | 2 +-
.../src/assets/translations/tw/server.json | 2 +-
.../src/translations/ja/translation.json | 2 +-
.../src/translations/pt/translation.json | 20 ++++++++++++++++++-
.../src/translations/zh-Hant/translation.json | 4 ++--
docs/README-pt.md | 11 +++++-----
6 files changed, 30 insertions(+), 11 deletions(-)
diff --git a/apps/server/src/assets/translations/ja/server.json b/apps/server/src/assets/translations/ja/server.json
index 8ceb8a5f9..1ce722830 100644
--- a/apps/server/src/assets/translations/ja/server.json
+++ b/apps/server/src/assets/translations/ja/server.json
@@ -402,7 +402,7 @@
"end-date": "終了日",
"start-time": "開始時刻",
"end-time": "終了時間",
- "board": "ボード",
+ "board": "カンバンボード",
"status": "ステータス",
"board_note_first": "最初のノート",
"board_note_second": "2番目のノート",
diff --git a/apps/server/src/assets/translations/tw/server.json b/apps/server/src/assets/translations/tw/server.json
index 33c9faa8c..8d29cc64f 100644
--- a/apps/server/src/assets/translations/tw/server.json
+++ b/apps/server/src/assets/translations/tw/server.json
@@ -417,7 +417,7 @@
"end-time": "結束時間",
"geolocation": "地理位置",
"built-in-templates": "內建模版",
- "board": "看板",
+ "board": "儀表板",
"status": "狀態",
"board_note_first": "第一個筆記",
"board_note_second": "第二個筆記",
diff --git a/apps/website/src/translations/ja/translation.json b/apps/website/src/translations/ja/translation.json
index d7cb3f599..e61b9b9c8 100644
--- a/apps/website/src/translations/ja/translation.json
+++ b/apps/website/src/translations/ja/translation.json
@@ -70,7 +70,7 @@
"calendar_description": "カレンダーを使って、個人的な予定や仕事上の予定を管理しましょう。終日イベントと複数日イベントに対応しています。週、月、年表示でイベントを一目で確認できます。イベントの追加やドラッグ操作で簡単に行えます。",
"table_title": "テーブル",
"table_description": "ノートに関する情報を表形式で表示・編集できます。テキスト、数値、チェックボックス、日時、リンク、色など、様々な列タイプに対応し、リレーションもサポートしています。オプションで、ノートを表内のツリー階層に表示することもできます。",
- "board_title": "ボード",
+ "board_title": "カンバンボード",
"board_description": "新しい項目や列を簡単に作成し、ボード上でドラッグするだけでステータスを変更できるカンバン ボードで、タスクやプロジェクトのステータスを整理できます。",
"geomap_title": "ジオマップ",
"geomap_description": "カスタマイズ可能なマーカーを使って、休暇を計画したり、興味のある場所を地図上に直接マークしたりできます。記録されたGPXトラックを表示して、旅程を追跡できます。",
diff --git a/apps/website/src/translations/pt/translation.json b/apps/website/src/translations/pt/translation.json
index 0967ef424..626710d3d 100644
--- a/apps/website/src/translations/pt/translation.json
+++ b/apps/website/src/translations/pt/translation.json
@@ -1 +1,19 @@
-{}
+{
+ "get-started": {
+ "title": "Começar",
+ "architecture": "Arquitetura:",
+ "older_releases": "Ver versões anteriores",
+ "server_title": "Configurar um servidor para aceder a partir de vários dispositivos"
+ },
+ "hero_section": {
+ "title": "Organiza as tuas ideias. Constrói a tua base de conhecimento pessoal.",
+ "subtitle": "O Trilium é uma solução de código aberto para tomar notas e organizar a tua base de conhecimento pessoal. Usa-o localmente no teu computador ou sincroniza-o com o teu próprio servidor para teres as tuas notas acessíveis em qualquer lugar.",
+ "get_started": "Começar",
+ "github": "GitHub",
+ "dockerhub": "Docker Hub",
+ "screenshot_alt": "Captura de ecrã da aplicação Trilium Notes para computador"
+ },
+ "organization_benefits": {
+ "title": "Organização"
+ }
+}
diff --git a/apps/website/src/translations/zh-Hant/translation.json b/apps/website/src/translations/zh-Hant/translation.json
index 017acec87..79ac2185b 100644
--- a/apps/website/src/translations/zh-Hant/translation.json
+++ b/apps/website/src/translations/zh-Hant/translation.json
@@ -70,7 +70,7 @@
"calendar_description": "使用行事曆規劃個人或專業活動,支援全天及多日活動。透過週、月、年檢視模式,一覽所有活動。通過簡單互動即可新增或拖曳活動。",
"table_title": "表格",
"table_description": "以表格結構顯示並編輯筆記資訊,支援多種欄位類型,包括文字、數字、核取方塊、日期與時間、連結及顏色,並支援關聯功能。可選擇性地在表格內以樹狀層級結構顯示筆記內容。",
- "board_title": "看板",
+ "board_title": "儀表板",
"board_description": "將您的任務或專案狀態整理成看板,輕鬆建立新項目與欄位,並透過在看板上拖曳即可簡單變更狀態。",
"geomap_title": "地理地圖",
"geomap_description": "使用可自訂的標記,直接在地圖上規劃您的假期行程或標記感興趣的地點。顯示已記錄的GPX軌跡,以便追蹤行程路線。",
@@ -115,7 +115,7 @@
},
"social_buttons": {
"github": "GitHub",
- "github_discussions": "GitHub Discussions",
+ "github_discussions": "GitHub 討論",
"matrix": "Matrix",
"reddit": "Reddit"
},
diff --git a/docs/README-pt.md b/docs/README-pt.md
index bba139cc9..ef24d1da1 100644
--- a/docs/README-pt.md
+++ b/docs/README-pt.md
@@ -25,27 +25,28 @@ status](https://hosted.weblate.org/widget/trilium/svg-badge.svg)](https://hosted
| [Japanese](./docs/README-ja.md) | [Italian](./docs/README-it.md) |
[Spanish](./docs/README-es.md)
-Trilium Notes is a free and open-source, cross-platform hierarchical note taking
-application with focus on building large personal knowledge bases.
+Trilium Notes é uma aplicação gratuita e de código aberto, multiplataforma, para
+a criação hierárquica de notas, com foco na construção de grandes bases de
+conhecimento pessoais.
See [screenshots](https://triliumnext.github.io/Docs/Wiki/screenshot-tour) for
quick overview:
-## ⏬ Download
+## ⏬ Transferir
- [Latest release](https://github.com/TriliumNext/Trilium/releases/latest) –
stable version, recommended for most users.
- [Nightly build](https://github.com/TriliumNext/Trilium/releases/tag/nightly) –
unstable development version, updated daily with the latest features and
fixes.
-## 📚 Documentation
+## 📚 Documentação
**Visit our comprehensive documentation at
[docs.triliumnotes.org](https://docs.triliumnotes.org/)**
-Our documentation is available in multiple formats:
+A nossa documentação está disponível em múltiplos formatos:
- **Online Documentation**: Browse the full documentation at
[docs.triliumnotes.org](https://docs.triliumnotes.org/)
- **In-App Help**: Press `F1` within Trilium to access the same documentation
From 6d4b87888a944366b1b2ed68b7bfea2a50a0e830 Mon Sep 17 00:00:00 2001
From: SngAbc <37627919+SiriusXT@users.noreply.github.com>
Date: Sat, 1 Nov 2025 22:02:17 +0800
Subject: [PATCH 14/17] fix(electron): allow extra window to reload (#7567)
---
apps/client/src/services/utils.ts | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/apps/client/src/services/utils.ts b/apps/client/src/services/utils.ts
index 0f17bdc79..f5e037be5 100644
--- a/apps/client/src/services/utils.ts
+++ b/apps/client/src/services/utils.ts
@@ -11,7 +11,11 @@ export function reloadFrontendApp(reason?: string) {
logInfo(`Frontend app reload: ${reason}`);
}
- window.location.reload();
+ if (isElectron()) {
+ dynamicRequire("@electron/remote").BrowserWindow.getFocusedWindow()?.reload();
+ } else {
+ window.location.reload();
+ }
}
export function restartDesktopApp() {
From 8391fd7534e806cb980a16e3e4ff81bc938c1291 Mon Sep 17 00:00:00 2001
From: "Weblate (bot)"
Date: Sat, 1 Nov 2025 15:04:10 +0100
Subject: [PATCH 15/17] Translations update from Hosted Weblate (#7566)
* Update translation files
Updated by "Cleanup translation files" add-on in Weblate.
Translation: Trilium Notes/README
Translate-URL: https://hosted.weblate.org/projects/trilium/readme/
* Translated using Weblate (Portuguese)
Currently translated at 9.2% (14 of 152 strings)
Translation: Trilium Notes/Website
Translate-URL: https://hosted.weblate.org/projects/trilium/website/pt/
---------
Co-authored-by: Francisco Machado
---
apps/website/src/translations/pt/translation.json | 5 ++++-
docs/README-pt.md | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/apps/website/src/translations/pt/translation.json b/apps/website/src/translations/pt/translation.json
index 626710d3d..a4436fba7 100644
--- a/apps/website/src/translations/pt/translation.json
+++ b/apps/website/src/translations/pt/translation.json
@@ -14,6 +14,9 @@
"screenshot_alt": "Captura de ecrã da aplicação Trilium Notes para computador"
},
"organization_benefits": {
- "title": "Organização"
+ "title": "Organização",
+ "note_structure_description": "As notas podem ser organizadas de forma hierárquica. Não há necessidade de pastas, pois cada nota pode conter sub notas. Uma única nota pode ser adicionada em vários locais da hierarquia.",
+ "attributes_description": "Utiliza relações entre notas ou adiciona etiquetas para uma categorização fácil. Usa atributos promovidos para inserir informação estruturada, que pode ser utilizada em tabelas ou quadros.",
+ "hoisting_description": "Separa facilmente as tuas notas pessoais e de trabalho agrupando-as num espaço de trabalho, que focaliza a árvore de notas para mostrar apenas um conjunto específico de notas."
}
}
diff --git a/docs/README-pt.md b/docs/README-pt.md
index ef24d1da1..f1f35ec64 100644
--- a/docs/README-pt.md
+++ b/docs/README-pt.md
@@ -54,7 +54,7 @@ A nossa documentação está disponível em múltiplos formatos:
- **GitHub**: Navigate through the [User
Guide](./docs/User%20Guide/User%20Guide/) in this repository
-### Quick Links
+### Links rápidos
- [Getting Started Guide](https://docs.triliumnotes.org/)
- [Installation
Instructions](./docs/User%20Guide/User%20Guide/Installation%20&%20Setup/Server%20Installation.md)
From bf0761a3035262dce6b217eb92dce122374de6c8 Mon Sep 17 00:00:00 2001
From: SngAbc <37627919+SiriusXT@users.noreply.github.com>
Date: Sat, 1 Nov 2025 22:06:26 +0800
Subject: [PATCH 16/17] Fix: activate the nearest path when opening a cloned
note (#7552)
---
apps/client/src/entities/fnote.ts | 23 ++++++++++++++++++++---
apps/client/src/services/tree.ts | 22 ++++++++--------------
2 files changed, 28 insertions(+), 17 deletions(-)
diff --git a/apps/client/src/entities/fnote.ts b/apps/client/src/entities/fnote.ts
index bcb6c408e..6d0a15506 100644
--- a/apps/client/src/entities/fnote.ts
+++ b/apps/client/src/entities/fnote.ts
@@ -417,7 +417,7 @@ export default class FNote {
return notePaths;
}
- getSortedNotePathRecords(hoistedNoteId = "root"): NotePathRecord[] {
+ getSortedNotePathRecords(hoistedNoteId = "root", activeNotePath: string | null = null): NotePathRecord[] {
const isHoistedRoot = hoistedNoteId === "root";
const notePaths: NotePathRecord[] = this.getAllNotePaths().map((path) => ({
@@ -428,7 +428,23 @@ export default class FNote {
isHidden: path.includes("_hidden")
}));
+ // Calculate the length of the prefix match between two arrays
+ const prefixMatchLength = (path: string[], target: string[]) => {
+ const diffIndex = path.findIndex((seg, i) => seg !== target[i]);
+ return diffIndex === -1 ? Math.min(path.length, target.length) : diffIndex;
+ };
+
notePaths.sort((a, b) => {
+ if (activeNotePath) {
+ const activeSegments = activeNotePath.split('/');
+ const aOverlap = prefixMatchLength(a.notePath, activeSegments);
+ const bOverlap = prefixMatchLength(b.notePath, activeSegments);
+ // Paths with more matching prefix segments are prioritized
+ // when the match count is equal, other criteria are used for sorting
+ if (bOverlap !== aOverlap) {
+ return bOverlap - aOverlap;
+ }
+ }
if (a.isInHoistedSubTree !== b.isInHoistedSubTree) {
return a.isInHoistedSubTree ? -1 : 1;
} else if (a.isArchived !== b.isArchived) {
@@ -449,10 +465,11 @@ export default class FNote {
* Returns the note path considered to be the "best"
*
* @param {string} [hoistedNoteId='root']
+ * @param {string|null} [activeNotePath=null]
* @return {string[]} array of noteIds constituting the particular note path
*/
- getBestNotePath(hoistedNoteId = "root") {
- return this.getSortedNotePathRecords(hoistedNoteId)[0]?.notePath;
+ getBestNotePath(hoistedNoteId = "root", activeNotePath: string | null = null) {
+ return this.getSortedNotePathRecords(hoistedNoteId, activeNotePath)[0]?.notePath;
}
/**
diff --git a/apps/client/src/services/tree.ts b/apps/client/src/services/tree.ts
index fc54c3c75..ec5bc0191 100644
--- a/apps/client/src/services/tree.ts
+++ b/apps/client/src/services/tree.ts
@@ -26,21 +26,12 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
}
const path = notePath.split("/").reverse();
-
- if (!path.includes("root")) {
- path.push("root");
- }
-
const effectivePathSegments: string[] = [];
let childNoteId: string | null = null;
let i = 0;
- while (true) {
- if (i >= path.length) {
- break;
- }
-
- const parentNoteId = path[i++];
+ for (let i = 0; i < path.length; i++) {
+ const parentNoteId = path[i];
if (childNoteId !== null) {
const child = await froca.getNote(childNoteId, !logErrors);
@@ -65,7 +56,7 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
return null;
}
- if (!parents.some((p) => p.noteId === parentNoteId)) {
+ if (!parents.some(p => p.noteId === parentNoteId) || (i === path.length - 1 && parentNoteId !== 'root')) {
if (logErrors) {
const parent = froca.getNoteFromCache(parentNoteId);
@@ -77,7 +68,8 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
);
}
- const bestNotePath = child.getBestNotePath(hoistedNoteId);
+ const activeNotePath = appContext.tabManager.getActiveContextNotePath();
+ const bestNotePath = child.getBestNotePath(hoistedNoteId, activeNotePath);
if (bestNotePath) {
const pathToRoot = bestNotePath.reverse().slice(1);
@@ -108,7 +100,9 @@ async function resolveNotePathToSegments(notePath: string, hoistedNoteId = "root
if (!note) {
throw new Error(`Unable to find note: ${notePath}.`);
}
- const bestNotePath = note.getBestNotePath(hoistedNoteId);
+
+ const activeNotePath = appContext.tabManager.getActiveContextNotePath();
+ const bestNotePath = note.getBestNotePath(hoistedNoteId, activeNotePath);
if (!bestNotePath) {
throw new Error(`Did not find any path segments for '${note.toString()}', hoisted note '${hoistedNoteId}'`);
From 35efd2a680f71eb198d8cf02c55437684904fc75 Mon Sep 17 00:00:00 2001
From: Elian Doran
Date: Sat, 1 Nov 2025 16:48:49 +0200
Subject: [PATCH 17/17] test(server): broken test due to CLS
---
apps/server/src/routes/login.spec.ts | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/apps/server/src/routes/login.spec.ts b/apps/server/src/routes/login.spec.ts
index 69e2cff6a..85754d63c 100644
--- a/apps/server/src/routes/login.spec.ts
+++ b/apps/server/src/routes/login.spec.ts
@@ -4,6 +4,7 @@ import type { Application } from "express";
import dayjs from "dayjs";
import { type SQLiteSessionStore } from "./session_parser.js";
import { SessionData } from "express-session";
+import cls from "../services/cls.js";
let app: Application;
let sessionStore: SQLiteSessionStore;
@@ -106,7 +107,7 @@ describe("Login Route test", () => {
expect(expiry).toBeTruthy();
vi.setSystemTime(expiry!);
- vi.advanceTimersByTime(CLEAN_UP_INTERVAL);
+ cls.init(() => vi.advanceTimersByTime(CLEAN_UP_INTERVAL));
({ session } = await getSessionFromCookie(setCookieHeader));
expect(session).toBeFalsy();
});