Notes on Joplin and Evernote


Joplin and Evernote? Wait, what?

Both tools are great for storing information. I'd been using Evernote since 2012, and it's been my central database of knowledge. It provides very useful features, which make fetching, saving, storing and accessing information effortless. It is a SAAS solution, subscription-based and closed source. Some of my favorite features:

  • With Evernote WebClipper (browser plugin) you can save a whole webpage (or a simplified version, stripped from rubbish, menus, ADs etc). So, no more need to search for that webpage anymore.
  • This webclipper also adds a widget to search results (Google, DDG and others). This widget presents notes, which fit your search query from the search engine. Cool, isn't it?
  • Taking notes during various conferences, meetups, workshops is much easier, as you may simply take photos of slides. Evernote has OCR, so basically, you may search for words in images
  • Evernote has mobile apps as well as desktop ones (plus web editor)
  • Thousands of other features that... I haven't really used, as didn't feel like it would help my productivity.

Joplin is a very similar app, but it's an open-source project. And you may host it yourself.

Why migrate?

For the last few years, Evernote apps performance has been basically getting worse. IOS app opens in a few seconds (instead of like 0.4s or smt), then starts loading data (wait, what?) and 30s later I can finally start searching for something. Moreover, my subscription plan didn't include features like.. keyboard shortcuts customization. Yes, after one of the recent updates in the billing plans, you may only change keyboard shortcuts on some specific plan. I could live with that, but go figure, in my native language, letters like ęąć are typed via pressing right alt and the corresponding letter. And you know what? Evernote overwrote somehow those shortcuts on the OS level. So, each time I tried to type one of those letters (in any application) Evernote-related feature/app opened. And I wasn't able to change that - I needed to shut down the app completely. Really, what a mess.

And also, I've always been lacking some basic features:

  1. There was no Markdown native support (Joplin has it)
  2. There was no simple way to actually turn a note into a blog entry on any of my blogs. I always wanted to work on blog-posts on Evernote, and somehow, simply publish it to the blog. There is the Evernote API, which I might have used for that, but again - I would need to convert notes to Markdown.
  3. I really need to easily backup all my notes somehow, and be able to restore it - best in an automated way. Evernote has export features - that are a feature of the desktop app. No easy way for automation.
  4. Also, with Evernote I don't really feel that I own the data. I always felt that whatever is stored in Evernote, is a subject of turning public someday. So saving private stuff there is not a thing, that I feel comfortable with. Not that I haven't done that.

So yeah, after many years, I finally decided to perform the migration.

Hosting Joplin on Kubernetes

This is actually an easy thing. As there is no an official Helm chart, I decided to create my own (which I might actually publish at some stage; ping me if you'd like me to). What I did is basically wrote a simple deployment wrapping this official Joplin container image. A few assumptions here:

  1. I use an external Postgres database. Joplin saves data locally (desktop app) in sqlite database. Then syncs with the Joplin server (cloud or self-hosted). In my case, I decided to go w/Postgres, as from my research, it occurred, this is the most performant way.
  2. Postgres has its downsides. You need to host and maintain it ofc.
  3. I have 3 users working on this Joplin (basically, my family). Joplin is accessible only via our VPN (Mikrotik router -> Wireguard VPN). This is imo the best possible solution to provide security for your data. Downside - all users need to have this VPN on mobile devices and desktops/laptops.
  4. There isn't any additional persistence requirement but the database. No PVCs or anything.
  5. I use only 1 replica atm, as this is enough. Even while importing data, there were no serious performance issues - it just took some time (around 4GB of data to push into Postgres).

The actual Migration from Evernote was a manual task. I needed to export notebooks via Evernote desktop app, and later import it into Joplin desktop app. What was very cool, is that it imported it directly into Markdown format - and did it very good <3

Also, remember, that even though you self-host the Joplin, enabling full encryption might be worth the effort. Basically, Joplin syncs and holds all data locally by default. This means, that e.g. all your unencrypted notes will be saved on your mobile phone - let's say on IOS. So, iCloud backup will save it also (or any other backup solution).

Notes on Joplin high availability

Self-hosting Joplin might seem to be a delicate thing. What about a situation, where you're on holidays, or simply out of home, and you need to access the Joplin, but there is a power outage, or an internet disruption at home?

Well, firstly - Joplin notes are synced and can be accessed offline. So in the worst - case scenario, you have your notes, but not updated to the latest versions.

But if you really want to have a truly disaster-recovery plan, consider my approach. I have the backup job, which saves postgres backups to a remote location, and there, it imports it every day (this is also a good way to test backups). And I have the secondary Joplin instance somewhere. If my home stops working, I can switch the proper DNS entry, and that would do the trick. But:

  1. No VPN there (for simplicity)
  2. Afterward, I'd need to somehow manage synchronization from the secondary place to my home. It might get very tricky. So.. well. I haven't used this yet (but when I set it up and confirmed the POC), as I haven't had a need for that. But I have this option.

Joplin API

Another cool stuff is that Joplin app provides data API. So in theory, you might work on some automation here. Exposing the API from the server hosted in k8s POD might be a tricky thing (as normally, it is exposed only via the desktop or cli app), but I think this is doable.

Joplin FUSE filesystem project

What I really lack in Joplin (that Evernote also doesn't provide) is the possibility to mount notes as text files on the filesystem. The thing is that I really find it helpful to have some of those notes being searchable from the context of IDE I currently work in. E.g. when working in the GoLand or vscode, I like having my notes added as an additional library to the project. This way I can easily search for information I saved on a specific subject, or code templates etc. Up to now, I have basically used a private git repository for storing that kind of information, and it was separated from Evernote. Just because of this particular use - case.

So now, in Joplin it is not possible to achieve, but I can work on this feature myself. I have started this thread on the Joplin forum, and basically, I started working on the FUSE virtual filesystem, that will make it work cross-platform.