Logo User Guide

Exporting HTML for web publishing

As described in Sharing, 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). 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 Sharing 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.

Differences from normal sharing#

Apart from normal Sharing, 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.
  • The search functionality works slightly different since the normal one requires an active API to work. In the static export, search still works but uses a different mechanism so results might be different.

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 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).

Automation#

ETAPI (REST API) could potentially be used to automate an export on a scheduled task.