Notion is great until you stop trusting it. Evernote used to be great until it wasn't. Every hosted note app eventually gives you a reason to wonder what happens to ten years of journal entries, client notes, and half-finished project plans if the company changes its pricing, gets acquired, or just shuts the servers off. Trilium Notes sidesteps that problem entirely: it's a free, open-source note-taking app that you run yourself, and once it's installed, nobody but you decides whether it keeps working tomorrow.

What makes Trilium different from a plain markdown folder or a wiki is the way it organizes information. Notes live in a tree, like folders inside folders, except a single note can appear in more than one branch at once. You write a note about a client meeting once, and it can show up under both "Clients" and "Meetings" without being duplicated. Add password-protected notes, a built-in code editor with syntax highlighting, and a web clipper for saving pages from your browser, and you've got something that genuinely competes with paid tools — without the monthly bill.

This guide walks through installing Trilium on Proxmox VE using an LXC container, which is the lightest way to run it. You'll go from a bare Proxmox host to a working Trilium server with your first password-protected note in under fifteen minutes, no Docker knowledge required.

What You Will Learn

  • What Trilium Notes actually is and how its note tree differs from a normal folder structure
  • How to spin up a ready-to-go Trilium LXC container using the community-scripts helper script
  • How to get through Trilium's first-run setup wizard and create your owner password
  • How to connect the Trilium desktop app to your new server so your notes sync everywhere
  • How to fix the errors people actually run into — blank pages, "connection refused," and lost sync

What Is This Feature?

Trilium Notes started life as a project called "Trilium" back in 2017. The original developer stepped back from active maintenance a few years ago, and the community picked it up under the name TriliumNext — same core app, same database format, just actively developed again. You'll see both names used interchangeably in forums and documentation; they're the same software.

At its core, Trilium is a hierarchical note-taking application. Instead of a flat list of documents or a single-level folder structure, every note is a node in a tree, and any note can have children. A note can also be "cloned," meaning it appears in multiple places in the tree simultaneously while staying perfectly in sync — edit it in one spot, and the change shows up everywhere else it's referenced.

A few features are worth calling out specifically because they're the reason people switch to Trilium instead of just using a text editor:

  • Protected notes — individual notes or entire branches of the tree can be locked behind a password. Protected content is encrypted before it touches the database, so even someone with direct filesystem access to your server can't read it without the password.
  • Note revisions — Trilium automatically keeps a history of changes to a note, so an accidental overwrite isn't the end of the world.
  • Code notes — you can create notes that are really just syntax-highlighted code snippets, useful for keeping scripts and config fragments alongside the notes that explain them.
  • Relation maps — a visual canvas for drawing connections between notes, handy for anyone doing research or knowledge-base work where ideas link to other ideas.

You can run Trilium two ways: as a standalone desktop app with no server at all, or as a server (what we're installing here) that a desktop or mobile client can sync against. Running the server version means your notes live on your Proxmox box and you can reach them from any device, not just the one machine you installed the desktop app on.

Why Would You Use It?

If you already keep notes somewhere — Notion, Obsidian, Apple Notes, a stack of markdown files — the honest question is whether Trilium's tree structure and encryption actually solve a problem you have. For a lot of people, it does.

Homelab users like it because it's one more thing they fully own. Nothing here depends on a third-party account, a subscription, or an API that could change its terms next year. Students and researchers tend to like the tree-plus-cloning model, since a single fact or reference often belongs under more than one topic and Trilium doesn't force you to pick just one folder. And if you've ever wanted to keep sensitive notes — passwords hints, financial details, a journal — without uploading them to a cloud provider, the protected-notes feature is a genuine reason to switch, not just a nice-to-have. Where I'd steer you elsewhere: if you need real-time collaborative editing where multiple people type into the same document at once, Trilium isn't built for that — look at something like Docmost instead. And if all you want is a quick scratchpad with zero setup, this is more app than you need.

Prerequisites

Before starting, make sure you have:

  • A working Proxmox VE host — this guide was tested on Proxmox VE 9.2, though the same steps apply to any current 8.x or 9.x installation
  • Root (or sudo) access to the Proxmox shell, either through the web UI's Shell console or over SSH
  • At least 2 GB of free space and 512 MB of free RAM on whichever storage and node you're deploying to — Trilium is genuinely light
  • Internet access from the Proxmox host, since the install script downloads packages and the Trilium binary from GitHub

You don't need Docker, and you don't need to know anything about databases going in — Trilium ships with its own embedded SQLite database, so there's no separate database server to configure.

Step-by-Step Tutorial

Step 1: Understand What You're About to Create

An LXC container, if you haven't used one before, is a lightweight form of virtualization that shares the host's Linux kernel instead of emulating a whole virtual machine. That means it starts in a couple of seconds instead of a couple of minutes, and it uses only the RAM and disk it actually needs rather than whatever you reserved upfront. For a small single-process app like Trilium, an LXC container is a much better fit than a full VM.

Rather than manually creating a container, installing Debian, and configuring a systemd service by hand, we're going to use a script from the Proxmox VE Helper-Scripts project (community-scripts.org). This is a large, actively maintained collection of install scripts covering hundreds of self-hosted apps. Each script creates the container, installs the app inside it, and sets it up as a system service — all in one run. It's not an official Proxmox feature, but it's widely used in the homelab community and the scripts are open source, so you can read exactly what they do before running them.

Step 2: Run the Trilium Install Script

Open the Proxmox VE web interface, select your node, and click >_ Shell in the top-right corner. Paste in the following command and press Enter:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/trilium.sh)"

You'll be walked through a short text-based wizard. For a first install, the default answers are fine — accept the default settings and let it create an unprivileged Debian 13 container. Behind the scenes, the script provisions a container with 1 vCPU core, 512 MB of RAM, and a 2 GB disk, which is plenty for personal note-taking. You can always bump these up later from the container's Resources tab if your note library grows into the thousands of entries with lots of attachments.

The whole process — downloading the Debian template if you don't already have it cached, creating the container, and installing Trilium — takes somewhere between two and five minutes depending on your internet connection. When it finishes, the script prints the container's IP address and a URL that looks like this:

http://192.168.1.50:8080

Note that address down. That's your Trilium server.

Step 3: Complete the First-Run Setup Wizard

Open that URL in a browser. The first time you visit, Trilium shows a short setup wizard instead of a login screen — there's no account yet, so it needs you to create one.

You'll pick a display language, then be asked to set your owner password. This single password does two jobs: it's what you'll use to log into the web interface, and it's also the encryption key for any notes you later mark as protected. That second part matters — if you lose this password, protected notes are gone for good, since there's no recovery mechanism that would also defeat the whole point of encrypting them. Write it down somewhere safe before you click through.

Once you set the password and click Finish, Trilium logs you straight in and drops you into an empty note tree with a couple of example notes already there to poke around in.

Step 4: Create Your First Real Note

Click the + icon next to "Notes" in the left-hand tree to create a new note at the top level. Give it a title, and you'll land in the editor — it behaves roughly like any rich text editor you've used, with a formatting toolbar along the top.

To try the tree structure that makes Trilium worth using, create a child note under the one you just made by clicking the + icon while your first note is selected. Now try cloning: right-click any note, choose Clone note to..., and pick a different parent in the tree. You'll see the same note appear in two places. Edit it from either location and the change appears in both — it's the same note, just referenced twice.

Step 5 (Optional): Connect the Desktop App for Sync

The web interface is fully usable on its own, but if you also want a native desktop app — useful for offline access or if you just prefer a dedicated window over a browser tab — download the Trilium desktop client from the TriliumNext GitHub releases page for your operating system.

After installing it, open Options from the left sidebar, go to the Sync tab, and find Sync configuration. Set Server instance address to the same URL you used earlier (for example, http://192.168.1.50:8080), save, and click Test sync. If everything's configured correctly, the desktop app pulls down your notes and keeps itself in sync with the server from then on — edit a note on your phone's browser, and it shows up on your laptop within a few seconds.

Commands Explained

Only one command is strictly required for this tutorial, but here's what's happening inside it and a couple of others you'll use once Trilium is running.

CommandWhat It Does
bash -c "$(curl -fsSL <script-url>)"Downloads the install script from GitHub and immediately runs it. curl -fsSL fetches the file quietly, follows any redirects, and fails cleanly instead of printing an HTML error page if something goes wrong. bash -c then executes whatever came back as a script.
pct enter <vmid>Run on the Proxmox host, this drops you into a root shell inside the container with the given ID — useful if you need to poke around Trilium's files directly instead of using the web UI.
systemctl status triliumRun inside the container. Shows whether the Trilium service is currently running, along with its most recent log lines — the first thing to check if the web page won't load.
systemctl restart triliumRestarts the Trilium service inside the container. Fixes most cases where the app has locked up or you've just changed a config value that needs a restart to take effect.
journalctl -u trilium -fStreams the live log output from the Trilium service, which is the fastest way to see an error message the moment it happens rather than digging through old logs.

Common Errors

"This site can't be reached" or connection refused

This almost always means either the container hasn't finished booting yet, or you've got the wrong IP address. Go back to the Proxmox web UI, click on the container, and check the Summary tab for its actual IP — it's easy to mistype a digit when copying it from the install script's output.

Blank white page after loading the URL

The page loads but shows nothing, usually a JavaScript console error about a failed asset. This is typically a browser cache issue after an update, or an ad blocker being overly aggressive on a page it's never seen before. Try a hard refresh (Ctrl+Shift+R on most browsers) before assuming something's actually broken.

"Forgot password" has no real recovery option

Not a bug — this is intentional. Since your password doubles as the encryption key for protected notes, Trilium can't offer a "reset password" email link the way a normal web app would; doing so would mean the encryption isn't real encryption. If you genuinely lose it, unprotected notes can sometimes be recovered by an administrator with direct database access, but protected ones are unrecoverable. This is exactly why writing the password down somewhere safe in Step 3 isn't optional advice.

Sync test fails with a "handshake" error

This shows up when the desktop app's server address is slightly wrong — missing the port number, using https when the server is only serving plain http, or a typo in the IP. Double check the exact address against what you see in your browser's address bar when the web UI loads correctly.

Troubleshooting

If the service won't start at all, enter the container with pct enter <vmid> from the Proxmox host shell, then run systemctl status trilium. A common cause is the container running out of disk space during the initial data directory setup — the default 2 GB disk is enough for years of plain text notes, but if you're planning to attach a lot of large images or PDFs to your notes, resize the container's disk from the Proxmox UI before you fill it up.

If the web page loads but login fails even though you're sure the password is right, check that you're not accidentally hitting a cached version of the setup wizard from before you finished it — clear cookies for that address and reload.

For anything that doesn't fit those patterns, journalctl -u trilium -f inside the container while you reproduce the problem will usually show you the exact error as it happens, which is far more useful than guessing.

Best Practices

A few things worth doing once your Trilium server is up and running:

  • Back up the container regularly using Proxmox's built-in vzdump backup jobs. Since Trilium keeps everything in a single SQLite database file, restoring a backup restores your entire note library instantly — there's no separate database to worry about syncing back up.
  • Put Trilium behind a reverse proxy with a real TLS certificate (Nginx Proxy Manager or Caddy both work well) if you plan to access it from outside your home network. Sending your owner password over plain HTTP across the internet defeats the point of protecting your notes in the first place.
  • Enable note revisions' retention settings under Options if you're a heavy editor — the defaults keep a reasonable history, but you can tune how long revisions are kept if storage becomes a concern.
  • Don't skip writing your owner password down somewhere durable. This bears repeating because it's the single most common regret people report after months of using Trilium.

Frequently Asked Questions

Is Trilium Notes really free?

Yes. It's licensed under AGPL-3.0, fully open source, and there's no paid tier, subscription, or feature gate. You're only paying for the electricity and hardware it runs on.

Can I import my notes from Notion, Obsidian, or Evernote?

Trilium supports importing from several tools including Notion, Obsidian, Evernote, and OneNote exports, though formatting sometimes needs manual cleanup afterward depending on how complex the original notes were.

Do I need the desktop app, or is the web interface enough?

The web interface has essentially the full feature set. The desktop app mainly adds offline access and a dedicated window — nice to have, not required.

What happens to protected notes if I lose the container?

If you have a Proxmox backup of the container, restoring it restores your notes exactly as they were, protected notes included, as long as you still remember the password. Without a backup and without the password, protected notes are not recoverable — that's the tradeoff for real encryption.

Can multiple people use one Trilium server?

Trilium is built around a single owner account per server, not multi-user accounts with separate logins. If you need separate note spaces for different people, the practical approach is running a separate container per person rather than sharing one.

Conclusion

You've now got a self-hosted note-taking system that costs nothing to run beyond a couple hundred megabytes of RAM, keeps your data in a single portable file you control, and can encrypt anything you don't want sitting around in plain text. That's a solid trade for the fifteen minutes this setup took.

From here, the natural next steps are exploring templates for recurring note types, trying out a relation map for a project you're researching, and setting up that reverse proxy if you want access from your phone while you're out. None of it is required to get value out of Trilium starting today — the tree you just built is already a working notebook.