Migration
Replace Evernote with notes you own
The export format is good, the importers are decent, and the thing that quietly disappears is Evernote's ability to find a word inside a photograph.
What is the best self-hosted replacement for Evernote?
Trilium Notes, for one person with a large personal archive: a real hierarchy, note cloning, one SQLite file, and an Evernote importer that handles ENEX properly. The single biggest thing you lose is Evernote's search inside images and scanned PDFs. Evernote's OCR runs on their servers and nothing here reproduces it, so a photograph of a receipt becomes an attachment you can see and cannot find.
Evernote gives you a real export format, which puts this ahead of most migrations on this site. The trap is elsewhere: half the search results for the tool you are about to install point at repositories that no longer receive commits.
What you are actually giving up#
Search inside images and scanned PDFs. Evernote OCRs everything you put in it, server side, including handwriting on a good day. Photograph a whiteboard, and three years later the word you remember finds the note. Trilium Notes does not do this. BookStack does not do this. Nothing in this category does, and the ENEX export does not carry the recognition data either, so even the OCR you already paid for is left behind. If a meaningful part of your archive is photographs of paper, this is a hard loss, and the honest answer is to route scanned documents into Paperless-ngx and keep them out of your note app entirely.
The web clipper. Evernote's is best in class and there is no equal. Trilium has a clipper extension and it is fine for text. If clipping is your dominant use, look at Karakeep, which exists to do that job and will store the rendered page, a screenshot and a PDF.
Sync you never think about. Evernote syncs to phone, tablet and two laptops without your involvement. Trilium syncs a desktop app to a server instance, and the sync protocol is versioned across the whole cluster: upgrade the server and leave a laptop behind and sync stops, usually with an unhelpful error rather than a version mismatch message.
Multiple people. Trilium is single user. One login, one tree. Sharing means publishing a subtree publicly, not inviting someone in.
Get your data out first#
Export per notebook, not all at once. It is slower and it makes failures survivable.
- In the Evernote desktop app, right-click a notebook, choose Export notes, and select the ENEX format.
- Repeat per notebook. Name the files after the notebooks, because the notebook name is the one piece of structure you will be reconstructing by hand.
- Check the file sizes. Trilium documents a 250 MB limit per import, so a notebook full of PDFs needs splitting before it will go in.
What ENEX actually contains: notes, tags, resources (attached files, embedded in the XML) and note metadata. That is a genuinely good export and better than most services offer.
What it does not carry, in rough order of how much it will annoy you:
- Recognition data. The OCR text Evernote extracted from your scans is gone. The images are there; the searchability is not.
- Note links. ENEX has no unique note ids, so importers match by title. Trilium converts Evernote URLs to internal links only within a single import batch, and skips the conversion entirely when two notes share a title rather than guess wrong.
- Notebook stacks, saved searches, shortcuts and reminders. These are account-level structures, not note content, and no export includes them. Write down your stack layout before you cancel.
- Complex formatting. Colors, font sizes and font faces are dropped on complex notes, and Trilium's docs warn that HTML formatting may be broken or lost after import. The text is always imported in full.
Import into Trilium by right-clicking a note in the tree, choosing Import into note, and selecting Evernote as the source. Create one container note per notebook so the structure you lost is at least reproducible by hand.
Which one to run#
Trilium Notes
A hierarchical personal knowledge base that scales past 100,000 notes in one SQLite file
200 MB idle · ops load 2/5 · AGPL-3.0DocumentsBookStack
A plain PHP wiki organized into shelves, books, chapters and pages, and it just keeps working
260 MB idle · ops load 2/5 · MITDocumentsHedgeDoc
Real-time collaborative Markdown pads you can share with a link, no account needed
250 MB idle · ops load 2/5 · AGPL-3.0Most people leaving Evernote are one person with a decade of notes, and that person wants Trilium. It is a real hierarchy that scales past 100,000 notes in a single SQLite file, at 200 MB idle in one container, with note cloning so a note can live in several places without duplication. The other two are here because "Evernote" means different things to different people: BookStack when what you actually built was team documentation, HedgeDoc when what you actually built was shared scratch pads.
| Your situation | Run | Why |
|---|---|---|
| One person, a decade of notes, a real tree | Trilium Notes | Scales past 100k notes in one SQLite file, ENEX import that keeps attachments |
| Team documentation that needs to still open in 2031 | BookStack | MIT, two moving parts, documented upgrades, no plugin ecosystem to rot |
| Meeting notes several people type at once | HedgeDoc | Link-shareable pads, no account needed, real-time Markdown co-editing |
| Scanned paper and receipts | Paperless-ngx | OCR and full text search over documents, which is the part Evernote did that notes apps do not |
| Web clipping is most of your usage | Karakeep | Stores the rendered page, screenshot and PDF, with full text search over the content |
| A team wiki with nested pages and SSO | Outline or Docmost | See Replace Notion, which is the same decision under a different name |
One honest caveat on HedgeDoc: version 2 has been in development since 2020, shipped its first alpha in October 2023, and as of September 2026 still has around 50 open issues on the 2.0 milestone with no migration tool written. 1.x keeps getting real maintenance (1.12.0 landed in August 2026 and fixed realtime bugs that caused data loss on flaky connections), but you are running the codebase the maintainers regard as the old one. Keep your own Markdown exports.
What the migration actually costs#
For 5,000 notes across 15 notebooks:
- 30 minutes for Trilium itself. One container on port 8080, and the only thing you must get right is the data directory: the rootful image stores it at
/home/node/trilium-dataand the rootless variant at/home/trilium/trilium-data. Mount a volume there or the next pull takes everything with it. Keep it on local storage, because SQLite on an SMB share needsnobrlandnopermmount options and the failure mode is silent corruption discovered later. - 2 to 5 hours exporting notebook by notebook and importing, mostly waiting on large notebooks.
- 4 to 12 hours afterwards: rebuilding the notebook structure, fixing cross-notebook links, and going through anything with heavy formatting.
- Ongoing: roughly nothing week to week. It is one container and one SQLite file. What you own is the backup and the upgrade discipline, and both are real:
trilium-datacontainsdocument.db,config.iniand abackup/directory of automatic snapshots, and copyingdocument.dbfrom a running server is the standard SQLite hazard. Copy out ofbackup/instead, which is written as a consistent snapshot.
What breaks and how to tell early#
- Mobile. There is no official Trilium mobile app. You install the web interface as a progressive web app against your server. Do that in the first hour and write a note from a phone. This is the single most common reason people go back to Evernote.
- Offline. The desktop app holds a full local copy and syncs, which genuinely works. The phone does not. If you take notes on a phone with no signal, you need a different tool.
- Sharing with people who will not make an account. Trilium can publish a subtree publicly, which requires the instance to be reachable from the internet. That is a reverse proxy and a certificate, not a checkbox.
- Version drift across devices. Upgrade the server, then immediately upgrade every desktop client, in the same session. A stale client is a stopped sync.
- Behavior changes in minor releases. v0.105.0 in August 2026 disabled HTML in text notes by default and started unwrapping
divelements to fix paste handling, so notes pasted from web pages before that upgrade may render differently after it. The same release made MCP authentication mandatory, which breaks any automation that was talking to that endpoint unauthenticated.
The point of no return#
Evernote will keep your data at the free tier's limits, so you have some grace, but do not rely on it. Cancel when:
- You have restored
trilium-dataonto a different machine and opened a note you remember from 2018. - You have kept every ENEX file. They are the only format-independent copy you will ever have, and they are small enough to keep forever. Put them somewhere that is not the server, ideally replicated with Syncthing.
- You have searched, from your new instance, for five things you know are in there. Include one that is only findable via OCR, so you see the loss in a controlled way rather than in a hurry a year from now.
- You have completed one upgrade cycle: backup, pull an exact tag, restart, confirm the note tree opens.
Next#
Read Backups that actually restore and set the backup up before you import, not after. If your archive is really documents rather than notes, Paperless-ngx is the better landing place, and the rest of the category is in Documents.
Questions#
Which Trilium repository is the real one?
github.com/TriliumNext/Trilium. Three names are in circulation and two are dead ends: zadam/trilium now issues a permanent redirect, and TriliumNext/Notes was archived in June 2025 after the project reclaimed the original name. The Docker image is triliumnext/trilium, the site is triliumnotes.org, and the product is called Trilium Notes again. Search results and tutorials from 2024 and 2025 still point at the archived repository and the old image.
Does ENEX preserve my attachments and tags?
Yes to both. An ENEX file is XML holding notes, tags, resources (attached files) and note metadata, so images, PDFs and Office documents come across embedded. What does not survive is Evernote's recognition data, meaning the OCR text extracted from scanned documents, plus colors, font sizes and font faces on complex notes. The text itself is always imported in full regardless of formatting.
Will my note-to-note links still work?
Some of them. ENEX files carry no unique note identifiers, so every importer restores internal links by matching note titles. Trilium converts Evernote URLs into internal links only for notes within the same import batch, and refuses to create a link when several notes share a title rather than risk pointing at the wrong one. If you import notebook by notebook, links across notebooks break; Trilium documents a post-processing script for exactly that case.
Can BookStack import my Evernote notes?
Not directly, and this is the reason people who want BookStack end up doing manual work. BookStack imports only its own portable ZIP format and has no native support for importing Markdown or HTML from another tool. The practical route is importing everything into Trilium Notes first, exporting the subset that is genuinely shared documentation as Markdown, and pasting it into BookStack books by hand.
What about searching inside scanned documents?
Split the job. Keep notes in Trilium and put scanned paper into Paperless-ngx, which does OCR, indexing and full text search over documents as its entire purpose. That is two services instead of one, and it is genuinely better than Evernote at the document half. Trying to make a note app do OCR is the wrong shape.
Can several people share a Trilium instance?
No. Trilium has no multi-user model at all: one login, one note tree, and sharing means publishing a subtree publicly. That is the real limit of the tool, not stability. If two people need to write in the same space, you want BookStack for durable documents or Outline for a team wiki, and you should read Replace Notion instead of this page.
How risky is upgrading Trilium?
Upgrades are one-way. Starting a newer version migrates document.db automatically and older versions can no longer read that database afterwards, with no downgrade other than restoring a pre-migration backup. The docs also warn against the latest tag for that reason. If you sync a desktop app to a server, every device must be on the same sync protocol version, so upgrade them in one session.
Sources#
- Trilium Notes project repository and README
- Archived predecessor repository, TriliumNext/Notes
- Trilium documentation, importing from Evernote and its limits
- Trilium documentation, data directory layout
- Trilium documentation, upgrading and sync protocol versions
- Trilium releases, including v0.105.0
- Joplin documentation, what an ENEX file contains and what is lost
- BookStack documentation, exporting and importing
- HedgeDoc configuration reference
- HedgeDoc 2.0 milestone progress
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.