docs(guide): document exporting for web publishing

This commit is contained in:
Elian Doran 2025-10-29 22:21:15 +02:00
parent 0bc86d7c75
commit 1d6ab64ae5
No known key found for this signature in database
4 changed files with 129 additions and 1 deletions

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,53 @@
<p>As described in&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>,
Trilium can act as a public server in which the shared notes are displayed
in read-only mode. While this can work in most cases, it's generally not
meant for high-traffic websites and since it's running on a Node.js server
it can be potentially exploited.</p>
<p>Another alternative is to generate static HTML files (just like other
static site generators such as <a href="https://www.mkdocs.org/">MkDocs</a>).
Since the normal HTML ZIP export does not contain any styling or additional
functionality, Trilium provides a way to export the same layout and style
as the&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>&nbsp;function
into static HTML files.</p>
<p>Apart from the enhanced security, these HTML files are also easy to deploy
on “serverless” deployments such as GitHub Pages or CloudFlare Pages and
cache very easily.</p>
<aside class="admonition tip">
<p>Trilium's documentation, available at <a href="https://docs.triliumnotes.org/">docs.triliumnotes.org</a> is
built using this function of exporting to static HTML files which are then
deployed automatically to CloudFlare Pages.</p>
<p>The process is <a href="https://github.com/TriliumNext/Trilium/blob/main/apps/edit-docs/src/build-docs.ts">automated</a> by
importing the Markdown documentation and exporting it via a script to the
static web format.</p>
</aside>
<h2>Differences from normal sharing and export</h2>
<p>Apart from normal&nbsp;<a class="reference-link" href="#root/pOsGYCXsbNQG/tC7s2alapj8V/_help_R9pX4DGra2Vt">Sharing</a>,
exporting to static HTML files comes with a few subtle differences:</p>
<ul>
<li data-list-item-id="e9e5a7d50e33698fb322f4dc65108f3a9">The URL structure is different. Where in normal sharing it's something
along the way of <code>example.com/share/noteid</code>, the notes follow
an hierarchical structure, such as <code>docs.triliumnotes.org/user-guide/concepts/navigation/tree-concepts</code>.</li>
<li
data-list-item-id="e3995e60b9751ea177ac920a901635d4b">The <code>favicon.ico</code> is not handled automatically, it needs to be
manually added on the server after the export is generated.</li>
<li data-list-item-id="e72c2a986808ce27eb3bb5001fe4710cb">The “Last updated” for notes is not available.</li>
</ul>
<h2>Differences from normal .zip export</h2>
<ul>
<li data-list-item-id="e8a16c7135d6f6c4de3bc448bd8795289">The name of the files/URLs will prefer <code>shareAlias</code> to allow
for clean URLs.</li>
<li data-list-item-id="ef8bfdfc599c07ba70fbb4be97a3e26ab">The export requires a functional web server as the pages will not render
properly if accessed locally via a web browser due to the use of module
scripts.</li>
</ul>
<h2>Testing locally</h2>
<p>As mentioned previously, the exported static pages require a website to
function. In order to test locally, a web server needs to be used.</p>
<p>One example is to use the Node.js-based <a href="https://www.npmjs.com/package/http-server"><code>http-server</code></a> which
can be installed via:</p><pre><code class="language-text-x-trilium-auto">npm i -g http-server</code></pre>
<p>Once installed simply:</p>
<ol>
<li data-list-item-id="ebc8d02c8cdcdb030c746f1fd5eccb5bd">Extract the exported .zip file.</li>
<li data-list-item-id="e1d20f408fb89d0af0c1003984373f808">Inside the extracted directory, run <code>http-server</code>.</li>
<li data-list-item-id="ecf0c59f3a26c8e766bb1d739f8355e33">Access the indicated address (e.g. http://localhost:8080).</li>
</ol>

View File

@ -11612,6 +11612,41 @@
"dataFileName": "1_Serving directly the conte.png"
}
]
},
{
"isClone": false,
"noteId": "ycBFjKrrwE9p",
"notePath": [
"pOsGYCXsbNQG",
"tC7s2alapj8V",
"R9pX4DGra2Vt",
"ycBFjKrrwE9p"
],
"title": "Exporting HTML for web publishing",
"notePosition": 20,
"prefix": null,
"isExpanded": false,
"type": "text",
"mime": "text/html",
"attributes": [
{
"type": "relation",
"name": "internalLink",
"value": "R9pX4DGra2Vt",
"isInheritable": false,
"position": 30
},
{
"type": "label",
"name": "iconClass",
"value": "bx bxs-file-html",
"isInheritable": false,
"position": 40
}
],
"format": "markdown",
"dataFileName": "Exporting HTML for web publish.md",
"attachments": []
}
]
},

View File

@ -0,0 +1,40 @@
# Exporting HTML for web publishing
As described in <a class="reference-link" href="../Sharing.md">Sharing</a>, Trilium can act as a public server in which the shared notes are displayed in read-only mode. While this can work in most cases, it's generally not meant for high-traffic websites and since it's running on a Node.js server it can be potentially exploited.
Another alternative is to generate static HTML files (just like other static site generators such as [MkDocs](https://www.mkdocs.org/)). Since the normal HTML ZIP export does not contain any styling or additional functionality, Trilium provides a way to export the same layout and style as the <a class="reference-link" href="../Sharing.md">Sharing</a> function into static HTML files.
Apart from the enhanced security, these HTML files are also easy to deploy on “serverless” deployments such as GitHub Pages or CloudFlare Pages and cache very easily.
> [!TIP]
> Trilium's documentation, available at [docs.triliumnotes.org](https://docs.triliumnotes.org/) is built using this function of exporting to static HTML files which are then deployed automatically to CloudFlare Pages.
>
> The process is [automated](https://github.com/TriliumNext/Trilium/blob/main/apps/edit-docs/src/build-docs.ts) by importing the Markdown documentation and exporting it via a script to the static web format.
## Differences from normal sharing and export
Apart from normal <a class="reference-link" href="../Sharing.md">Sharing</a>, exporting to static HTML files comes with a few subtle differences:
* The URL structure is different. Where in normal sharing it's something along the way of `example.com/share/noteid`, the notes follow an hierarchical structure, such as `docs.triliumnotes.org/user-guide/concepts/navigation/tree-concepts`.
* The `favicon.ico` is not handled automatically, it needs to be manually added on the server after the export is generated.
* The “Last updated” for notes is not available.
## Differences from normal .zip export
* The name of the files/URLs will prefer `shareAlias` to allow for clean URLs.
* The export requires a functional web server as the pages will not render properly if accessed locally via a web browser due to the use of module scripts.
## Testing locally
As mentioned previously, the exported static pages require a website to function. In order to test locally, a web server needs to be used.
One example is to use the Node.js-based [`http-server`](https://www.npmjs.com/package/http-server) which can be installed via:
```
npm i -g http-server
```
Once installed simply:
1. Extract the exported .zip file.
2. Inside the extracted directory, run `http-server`.
3. Access the indicated address (e.g. http://localhost:8080).