Note-taking is an indispensable part of research, studying, and for some people, everyday life as well. When in school I used to take notes with pen and paper, and have accumulated a number of notebooks. I feel that there are 2 biggest disadvantages of the traditional pen-and-paper note-taking method:
- the lack of portability.
- the lack of searchability. Non-digitized content is difficult to retrieve later.
And both of these disadvantages are multiplied by the scalability factor. Therefore, I started to transit to a digital note-taking approach a few years ago, and have tried a few different note-taking applications along the way. In this post I’d like to share some of my experiences.
A disclaimer: this is by no means an objective and comprehensive overview, but highly subjective and in many aspects biased. For instance, I’ll be focusing on desktop applications, although the availability of a mobile client will be mentioned. As I never used a Mac as my daily drive, I will be mostly focusing on those in Windows and Linux, with a personal biase towards the latter. The type of notes one takes also makes a huge difference, a digital artist who makes notes in sketches will prefer a different type of app from a programmer whose notes are mostly source codes. My note-taking workflow mostly involves typing of texts, equations, code blocks, and inserting images. If your workflow shares little overlap with mine, then this post probably won’t be too helpful.
Evernote is one of the biggest names in the note-taking territory. It offers clients for Windows, Mac and mobile devices, and the mobile apps integrate well with many other apps. There are also designated browser extensions in Firefox and Chrome to help you make quick content clips from the browser into Evernote.
Evernote has a clean and intuitive interface. The left-hand side notebook navigation pane (see Figure 1) resembles the file system tree in a file manager. The editing pane on the right-hand side contains a tool bar for all the formatting functionalities. What I like most is the "note list" pane in between, where a list of notes in the current selected note book is shown. For each note, it displays the note title, the first couple of lines, and a thumbnail of the 1st image in the note, if there is any. This format gives a very quick, readable and informative summary of each note in the notebook, and makes locating a specific note very easy. If the number of notes grows too big and you need to scroll back-and-forth to see all of them, there is a search bar at the top of this pane to help you out.
a good balance between simplicity and functionality.
Evernote appears to target the most general users rather than catering to some specific groups. It offers all the basic note-taking functionalities an ordinary office worker would need: inputting texts, basic text formatting, assigning tags, inserting images and tables, creating links between notes, and a care-free synchronization service between multiple devices etc.. These are enough for most users’ everyday tasks, and it doesn’t stuff the user interface with ton of features and customization options. It is a good go-to option if you have no specific requirements for a note-taking app.
Large user-base, reliable cloud sync
A large user-base and a robust cloud syncing are 2 inter-linked factors that form a positive feedback. If the content you keep is of value to you, a reliable cloud syncing is certainly something to consider. For Evernote, I don’t think this is something you would need to worry about.
No official Linux client
When I was moving over from Windows to Linux, the lack of an official Linux Evernote client became somewhat an obstacle. Feature requests have been made for years and today there is still not an official client for Evernote, only a few unofficial ones, many of which are just webpage wrappers. As a workaround I had to use the web client, which, thanks to Evernote’s relatively simple set of functionalities, suffices for my everyday usages. But it wont’ work as an off-line notebook app like a proper desktop client, and I often notice sluggish responses in many operations in the web client.
Lack of some specific features and slow responses from developers
At some point you might find certain features lacking, for instance, for many programmers, Evernote’s lacking of syntax-highlighted code blocks is a big deal. And for many programmers and non-programmers alike, markdown support has been a long-requested (at least back to 2015) feature that still hasn’t been implemented. Inability to input LaTeX equations is another big issue for me personally.
Only 2 logged-in devices for free accounts
A few years ago (2016 maybe?), Evernote changed their pricing plans so that for free account users, the number of allowable devices logged in a single account at the same time was limited to 2. Therefore, if you log into your account from the office PC, and again from your phone, you won’t be able to log in from your laptop, unless you logout from one of the other two first. I remembered seeing many critics about this change when it first came out, and it did affect me to some extent.
There are a few other points that are not necessarily good or bad, but may be worth mentioning.
Notebook hierarchy is restricted to 2 layers
In Evernote, the number of notebook-sub-notebook layers is restricted to 2. You can’t create deeply nested structures like nested folders in a file system. Whether to create deeply nested structures in a note-taking app is highly subjective. Some people like to organize their notes into a complex structure while others prefer a more flat hierarchy. If you belong to the type that like to keep everything organized in a hierarchical manner, this may be something to watch out for.
Evernote has some import/export capabilities. It can export to a proprietary format (.enex, see Figure 2), which is also used for backups; or the html format. Aside from .enex, you can also import OneNote notes.
Why import/export might be a thing to consider? It is not uncommon for one to fall in love with a new app and stay happily with it for some time, then overtime gradually realize some lacking features that cannot easily be worked around. The developers may not respond to feature requests as soon as you might expect, like in the case of Evernote. This tends to be more of an issue for proprietary softwares. For open-source softwares it is generally more likely to receive faster responses from developers, particularly if the feature is also desired by a number of other users. Even if you have some very specific, niche use cases that the developer won’t add support for, it is at least possible for you to hack into the source code and implement it yourself. In all cases, you might find a need to switch to a different application, or use more than one at the same time in a complimentary manner. In such situations, having your notes saved in some kind of open and transparent format would be a big bonus, because you can transfer your contents from one app to anther relatively easily. If an app saves its data in a proprietary format and doesn’t offer you a good export functionality, you will be pretty much locked to the app. This is a common strategy used by proprietary softwares to maximize user-adherence. Last time I ran into such kind of "trickery" is with Mendeley, a bibliography management software, that decided to encrypt the local database file on user’s machine. Export the full contents from the database file (a sqlite database) was then made impossible.
I digressed a bit too far. I think that if everything else being equal, it is advantageous to choose one that saves the data in a standard and transparent format, or at least offers the functionality to export to a standard and transparent format. In case the software decides to change the pricing plan and start to charge you, or for some reason you decide to migrate over to something else, having a better control over your own data would be something to consider, and you’d better consider it earlier, because the longer you are locked to an app, the bigger the price to get out from it.
OneNote is part of Microsoft‘s office suite but also works as a free and standalone note-taking application. I used it only for a short period of time, when Windows was still my daily drive. It has some unique features that really set it apart from its many competitors.
Bundled with Windows 10
Needless to say, OneNote works best in Windows, although it also has clients in Mac, IOS and android devices. The ribbon interface should look very familiar to Office users. Data syncing is done via OneDrive, which also comes pre-installed in Windows 10 systems.
Intuitive note organizations and more editing features
In OneNote, you create different notebooks (e.g.,
Work Notebook as
shown in Figure 3), in each notebook, you can
create different sections (e.g.,
etc. in Figure 3), which are marked by a colored tab header at
the top of the notebook pages, just like some paper notebooks would
insert some colored plastic dividers to help you organize
sections. Each section may contain multiple pages, as listed on
the right hand-side pane in Figure 3. For anyone
familiar with a traditional paper notebook, this digital replica
should feel very intuitive. It is also equivalent to the 2-layer
notebook structure of Evernote.
Compared with Evernote, OneNote supports more editing features, such as inserting equations, spreadsheet tables, audio and videos etc.. (see Figure 4).
Free form element placement and free-hand notes
This is arguably the single biggest feature that sets OneNote out from other apps: you can insert text boxes, images, symbols, free-hand writing/drawings at any place in the note page. This is very different from the linear, top-down, line-by-line structure of other note-taking apps. The note page in OneNote is a free canvas. With a stylus pen, OneNote is the ideal choice for some note-taking tasks such as mathematical derivations, writing chemical symbols, drawing mind map, making quick sketches etc..
Limited export formats.
OneNote allows you to export specific pages, sections or an entire notebook. Other than the native one format of OneNote, you can also export a single note page to docx, doc, pdf, xps or mht. For notebooks, the exportable format includes onepkg, pdf, xps and mht.
No Linux client.
This almost feels too much to ask.
Simplenote is a more lightweight, minimalistic note-taking application. Freeing itself from the fancy looking interfaces or complicated editing functions, its minimalistic philosophy wins itself a large group of users who just want a fast, simple and distraction-free app to jot down some quick thoughts. Simplenote allows nothing but plain text notes, therefore it is more suitable for thing like quick memo, TODO lists, shopping lists. I personally use it on my phone to record some quick ideas, keep a temporary TODO list and write dream journals. On the desktop side, I use a command-line client (sncli) to sync over the notes from the mobile client and do some further organization of the TODO list.
Cross-platform and totally free.
Simplenote is available in Windows, Linux, Mac, IOS, Android and web. Unlike Evernote, Simplenote doesn’t have any pricing plans or premier versions, it’s simple as its name implies.
In Simplenote, you make nothing other than plain text notes. No image insertions, no audio/video recordings, no hand-written drawings, no file attachments. All you do is typing texts.
A markup language is ideal for such kind of minimalistic, plain-text note-taking app, and markdown is arguably the best candidate.
Limited use cases.
Its simplicity also implies that Simplenote is only suitable for certain types of use cases, like quick memo or TODO list. It is not designed for well-organized, complicated multi-media type of notes.
zim is a desktop only note-taking app written in Python. It offers clients for Windows, Linux and Mac. Aside from all the basic text formatting functionalities, it also features its own markup syntax– wiki syntax–that helps one build an inter-linked note network in a manner of a desktop wikipedia. I migrated all my Evernote notes over to zim a few years ago and have been using zim as my primary note-taking tool.
wiki structure suitable for personal knowledge base (PKB)
A wiki system is all about links. Zim’s wiki syntax makes creating
links between notes very quick and fluent. Aside from the conventional
link creation method that you right-click a page, copy its link, and
paste it to somewhere else, in zim a link can be created using the
double square bracket syntax. For instance, type in
anywhere in the note will create a link to the note page
in the top level structure. A
will create a link to a note page
sub-topic B as a sub-page of the
current page. New pages will be automatically created if not already
I found this particularly handy when doing literature
reviews. For instance, I often found myself writing sentences like:
See also [[Someone2005]], where
[[Someone2005]] is a link to another note I made about the paper
referred to using the citation key
Someone2005. If it doesn’t exist
already, a new empty note page will be created, and I can come back to
it to when I review that paper later.
In addition to forward links, zim also comes with a plugin that supports back-links. When you link from note A to note B, the back-link will point from B to A. Therefore the links in the network of notes become bi-directional. With the quick link insertion syntax, zim can be used to implement a Zettelkasten note-taking workflow, something that has been gaining popularity among researchers recently. Here are some relevant information on Zettelkasten:
- The Zettelkasten Method,
- How To Take Smart Notes With Org-mode,
- How to Use Roam to Outline a New Article in Under 20 Minutes
Zim can be used to build a personal knowledge base (PBK). Below is a graphical representation of one of my zim notebooks, created using the link-map zim plugin:
Open source software, transparent data format.
zim is not only free of charge but also free to usage, you can obtain the source code and modify it as you want. It also saves all the data in plain text files, using the folder structure in the file system to mirror the note-sub-note structure. By the way, unlike Evernote or OneNote, you can nest multiple layers in the hierarchy.
Using plain text files as the data storage has several advantages:
- Easy access. You don’t need special tools to view the content.
- Easy sync. Each note file is usually just a tens of KB in size, up to a few MB if containing some images. Plain text files can be easily synced using tools like Dropbox, Google Drive or git.
- Easy to do custom manipulations. Contents inside plain text files can be easily searched, using tools like grep, in a Linux shell. One can perform some textual analyses more easily on plain text files, or transforming from one syntax to another. For instance, I created a simple tool to translate the notes written in zim’s wiki markup syntax to markdown and backwards.
zim has a plugin system that extends its functionalities. For instance, the BackLins Pane plugin allows traversing backwards following links. The Spell-checker plugin enables on-the-fly spell checking. The Insert Equation plugin provides a rudimentary LaTeX equation input method. The Table of Contents plugin creates a TOC for each page based on the heading structures. Many of these plugins require no additional external dependencies.
Relatively outdated interfaces
The interface of zim is certainly not the most modern or eye-catching one. Seen from Figure 7, the look is a bit 1990s. Compared with the note list pane in Evernote, zim’s note list is just one line of plain texts.
No built-in syncing
Unlike all the apps talked above, zim doesn’t come with its own syncing function. You will have to set up your own syncing solution. Because zim notes are plain text files, syncing using git is a pretty feasible solution.
No markdown syntax
Instead of taking an existing markup syntax, for instance the highly popular markdown syntax, zim decided to invent a new markup syntax. I feel it is debatable whether we need so many different kinds of markup languages. There have been requests for markdown support, but it has not been addressed yet.
Some features lacking
I have noticed some lacking features that hinder my note-taking workflow. For instance, when copying and pasting a block of note contents that have images in it, it will only copy a link to each image, rather than making a copy of the image file itself. Then, if I later delete the original note page, the newly pasted image will become a broken link, because only the link was copied during the process. This makes note page re-structuring a big pain. I will have to manually re-insert every image when relocating a note.
Another missing feature is anchors. Anchors can be used to create hyper-links to a specific heading in a page. At the moment, one can only link to the page as a whole, not its individual headings. This is a rather low-resolution inter-link solution, and to some extent discourages one from making long notes.
No mobile apps
zim is only for desktop, and will probably stay so in foreseeable future. Because zim notes are plain text files, you can perform some limited viewing or editing tasks if your syncing solution permits such operations. But that is not a replacement for a proper mobile app.
Although I listed more critics about zim than about other apps, I actually use zim the most. It should be noted that the lack of features in zim is a different situation as Evernote. Evernote is a big company with a big team of developers, while zim is more or less a one-man project. The slow responses from Evernote are more about the reluctance to listen to its customers than about resources, which for zim is a serious constraint.
The good news is that zim is still in active development, and some of the lacking features are already listed in the author’s development plan.
Emacs is a classic text editor that is primarily designed for programmers. However, it can also be used as a note-taking application. In fact, it might be easier to ask what Emacs can not do than what it can do. There are people who use Emacs to read/write emails, read PDF documents and take notes, listen to music, browse the web and the file system, or even as a window manager of the operating system.
I learned to use Emacs during the lock-down of Covid-19, and have switched a good amount of note-taking tasks from zim over to Emacs. As a note-taking app, the killer feature of Emacs is its org-mode.
For those not familiar with Emacs, Emacs uses modes to manage different sets of editor behaviors. There are major modes and minor modes. Typically one uses a major mode in combination with multiple minor modes to define a customized editing environment for some specific tasks. For instance, org-mode is a major mode designed for note-taking, getting-things-done (GTD) scheduling and journaling tasks (all the posts I wrote for this website were drafted in org-mode), and it could be accompanied by a number of minor modes for things like auto-completion, spell-checking, block-folding, snippet insertion or adding some visual effects etc..
Org-mode comes with its own markup syntax similar to markdown, for
instance, one uses a single asterisk symbol
* to format a top level
heading, 2 asterisks
** for a second level heading and so on. Link
definition uses a 2-square bracket syntax
[[link_url][shown text]], and bold, italic, stroke-through fonts have their own syntax.
If this is all org-mode is about, then it would be just another markup
language. But org-mode is far more than just markup. All the headings
are foldable. For instance, Figure 9 shows the screenshot of the
note I took when learning
clojure. The big, blue lines are top
level headings. They are all folded-up, except for the
heading which is unfolded to reveal its 2nd level headings, formatted
using a smaller-sized, green font. Among these, the
heading is unfolded, revealing its contents. The foldable heading
feature makes writing long notes considerably easier. When folded-up,
you get an overview of the framework of the article, and sections can
be easily moved around to change the structure of the work.
In Figure 9 you also see a code block enclosed by the
#+end_src pair. This is org-mode’s code block
definition, and the keyword
clojure tells org-mode how to highlight
the syntax inside the code block. If I were to write a Python code
#+begin_src python would give me Python syntax
highlighting. It can do more than this. You can untangle the
contents written inside a code block and let Emacs execute the code,
the results, textual or graphical, can be re-directed back into the
org-mode note as its contents. Yes, if you used jupyter
notebook before, this is very similar to that. Some people use this
feature to create reproducible researches.
The TODO system in org-mode is another big feature. Simply writing the
TODO at the beginning of a heading turns it into a TODO item,
which would be tracked by a scheduling system called org
agenda. You can define different TODO states, like DONE to label a
finished task, CANCELED for canceled tasks, WAITING for tasks
waiting for some external conditions to proceed on, and PROJ to label a project
containing multiple sub-tasks. Figure 10 shows part of my work.org
note file (org-mode uses org as the file extension).
In Figure 10, the line
TODO Download ERA5 data 1979-2018 [1/4] is a
TODO item, which contains 4 sub-items. The
[1/4] is a progress
indicator maintained by org-mode, and tells me that of the 4
sub-tasks, 1 is finished, which is the
Surface sub-daily [6/6]
CLOSED: [2020-06-17 Wed 10:54] line is a timestamp
inserted by org-mode when I labeled the task
DONE. One can
optionally put a note upon closing a task, and the note will be saved
You can also schedule a task by assigning a date and time to
it, either as a one-off task or a repeating task with definable
repetition frequencies. After assignments, the
can generate a agenda view for the current week, month or year. Other
types of agenda view can be customized. Figure 11 shows my current
agenda view at the time of writing. In Figure 11, the scheduled tasks
are grouped by days of the week.
prviate labels in the
1st column indicate whether a task is work-related or my private life. These
labels are taken from the name of the org file. The
Read paper task is a
repeating one that repeats every 2 days, but is currently in overdue.
Highly customizable and extensible.
Emacs is insanely customizable, I would say even more so than vim – its long-term "arch-enemy". There are plugins (pdf-tools) of Emacs that allow you to read PDF documents, make annotations or notes in the PDF file itself or in an associated org note file, while keeping the PDF pages and org notes synced: when you scroll to the specific page in the PDF, it will automatically scroll to the note bound to that page. There are plugins (org-ref) that enable bibliography management within Emacs, you can drag-and-drop a paper into Emacs and it will automatically fetch the bibtex record for you. You can program and execute source code, compile LateX documents and log on to a remote server, all inside Emacs. Some people build their entire research workflow in Emacs. I only started to use Emacs a few months ago, so there must be a ton of features that I don’t even know about.
Plane text file data.
Same as zim, Emacs (and org-mode) saves data as plain text files, allowing for easy git syncing and manipulation.
Multiple export formats
Note taken in org-mode can be exported to multiple formats, including markdown, LaTeX (or beamer), PDF, html and ODT. The ability to export to LaTeX means that you can draft your manuscript in org-mode, insert bibliography citations with the help of the org-ref plugin, and export to a LaTeX document or directly compiled to PDF.
Steep learning curve
Like vim, Emacs is known to have a steep learning curve. You will need
to spend some good efforts to learn its key-bindings, the
major-mode-minor-mode design, and on customization and plugins. Emacs
also has a notorious key-binding design that heavily relies on the
Ctrl key, for instance,
Ctrl-x Ctrl-s for file saving,
for file opening etc.. Extensive usage of the pinky to reach the Ctrl
key can cause some physical stretch on your hand. Also, Emacs tends to
use multiple hot-key combinations to perform a single action, like
Ctrl-x Ctrl-s sequence shown above.
A freshly installed Emacs is so minimalistic that it is barely usable. To make it into a comfortable toolkit and unleash its true power, you will have to do some considerable amount of customization. What makes this even trickier is that Emacs is built using a dialect of the lisp programming language: elisp. Like many other languages in the lisp family, elisp code can appear rather eccentric and cryptic.
I cheated a bit when learning Emacs by enabling the evil mode, which gives me vim key-bindings inside Emacs so that I don’t have to learn all those crazy Emacs key combinations. But learning vim itself is no trivial task either. Therefore, a new user needs some dedication to use Emacs as a note-taking app.
Emacs has a rather outdated interface, even more so than zim. The Emacs community is recently discussing how to make Emacs more popular today, and a more user-friendly interface was one the topics. However, the Emacs community is known to be pretty conservative, so honestly, I am not expecting to see any dramatic changes any time soon.
No built-in syncing
Emacs itself doesn’t have any syncing service, to achieve that, one can set up a git repository and use the Magit plugin to perform git related tasks.
Some inherent limitations
Emacs inherits some features from its ancient times, when everything happened in a terminal. It is not a 100 % GUI application, although it has better graphical supports than vim. For instance, inside Emacs, you can insert an image into the note, but the image is bound to a specific line. When scrolling across a large image, you will notice jerky scrolling movements. This is caused by the scroll-by-line design of Emacs, rather than a scroll-by-pixel model that most modern GUI applications adopt. (Strictly speaking, there is scroll-by-pixel option in Emacs, but the performance is rather pathetic. )
In this post I reviewed 5 desktop note-taking applications. A brief summary of their respective pros and cons is given below:
Evernote: Windows, Mac, IOS, Android, web. Free account + upgrade premier.
- Intuitive interface.
- a good balance between simplicity and functionality.
- Large user-base, reliable cloud sync.
- No official Linux client.
- Lack of some specific features and slow responses from developers.
OneNote: Windows, Mac, IOS, Android, web. Free.
- Bundled with Windows 10.
- Intuitive note organizations and more editing features.
- Free form element placement and free-hand notes.
- Limited export formats.
- No Linux client. This almost feels too much to ask.
Simplenote: Windows, Linux, Mac, IOS, Android, web. Free.
- Cross-platform and totally free.
- Minimalistic approach.
- Markdown support.
- Limited use cases.
zim: Windows, Linux, Mac. Free.
- wiki structure suitable for personal knowledge base (PKB).
- Open source, transparent data format.
- Plugin extensions.
- Relatively outdated interfaces.
- No built-in syncing.
- No markdown syntax.
- Some features lacking.
- No mobile apps.
Emacs: Windows, Linux, Mac. Free.
- Highly customizable and extensible.
- Plane text file data.
- Multiple export formats.
- Steep learning curve.
- Outdated interfaces.
- No built-in syncing.
- Some inherent limitations.
There are many alternative note-taking applications that I didn’t cover. Here are some "honorable mentions":
Joplin: A free and open source note-taking app similar to Evernote, with clients in all platforms. It has built-in Markdown support, and can be imported from Evernote. However, it doesn’t offer a cloud sync. You will have to implement your own syncing solution.
Roam Research: A newly emerging web-based note-taking tool that is gaining attention real quick. It implements the zettelkasten note-taking approach. Not free to use.
What’s your favorite note-taking app? Please share yours in the comments below.