Markdown and privacy-focused note taking are the perfect match

If you have the right app for it

Attila Orosz
11 min readDec 25, 2021
If you have the right app for itPhoto by Pereanu Sebastian on Unsplash

TagSpaces’ new Markdown editor marks it down as the best note-taking app, hands down, no contest. If that sounds like an exaggerated claim, read on, I might even convince you.

If you have not read my (last) review, you probably should: You might learn more about why this software is really good for your online health (see also: privacy and data ownership), but if you don’t like jumping across reviews, the short version goes as follows:

TagSpaces is an open-core, offline, no-backend, flat-file, privacy-focused and privacy-respecting file organiser and editor tool that lets you keep 100% of your data 100% safe, private and yours. There is no cloud server, no registration, no ever-changing privacy policy to accept — only a cross-platform, easy-to-use, continually improving software that lets you deal with your data in any way you like, even outside of the app (so no vendor lock-in either).

As I have already mentioned elsewhere (and often), I am no fan of Cloud-basing everything just for the sake of appearing modern, especially when it comes to both personal and professional note-taking. There are few advantages and many caveats of doing all things online, especially when it comes to keeping your notes and digital things organised, and TagSpaces delivers a very well-trimmed solution to this problem, which has only just got a lot better.

The new feature that prompted this review is, in reality, only new for me, since I was too lazy to update and been happily using v3.3,the feature that took me by quite some surprise has been out since v3.11. (Current version code is 4.1). So I have been missing out on quite a lot as it turns out.

A Brand New Markdown Editor Suddenly Appears

I love using Markdown for my notes. It’s clean, easy to read, easy to write, easy to parse in code. So, besides all the privacy and freedom, and the ability to use it the way I like (see my previously linked articles for more on this), a good note-taking app would ideally use Markdown. This is not the biggest requirement but certainly is a nice-to-have.

The old Markdown editor in TagSpaces was my only real gripe with the software, yet I kept using it, because of its superior tagging and organisational capabilities. I read Markdown well enough so I did not need to see the formatted text (yes it also has an HTML based RichText editor, but I never cared much for those) but when I (finally) updated my copy, I was very pleasantly surprised. TagSpaces now has a real Markdown editor that actually works well. And it’s quite easy to use even for those who don’t like to look at the code.

Marking it down in the new editor

The best features are those you don’t even notice

The editor is based on the Milkdown framework, an awesome open-source Markdown library, which got tailored to fit TagSpaces perfectly.

The editor is WYSIWYG, when you type Markdown, it gets immediately turned into nicely formatted text. This is a big advantage for me, since however well I might read the markup, this is still easier to look at, and the formatting itself (the actual Markdown) gets preserved when I copy/paste text to or from the editor.

I have, of course, used editors like that before. I write short fiction in Typora, for example, which has a nice editor, but many limitations beyond that, and they recently switched to a paid model, which kind of hurts my senses after having used it for free. (I get it, money must be made but, for example, TagSpaces only charges for professional use cases, and the base application is free, which is a much nicer way to both give to the community and earn some well-deserved money for your hard work as a developer. Dropping a paid-for update into the Linux repo was really a d*$# move, I have to say this much. Bait and switch much, Typora?)

So, while it is not the first WYSIWYG Markdown editor I tried, it fits nicely into its new environment and works really well for me, and fits the way I use the app.

Formatting text the easy way

The editor offers a number of ways to format your text, all of which are unobtrusive and simple enough to use. Besides what I normally do (typing the Markdown straight in), you have the option to highlight some text, and choose some basic formatting from a popup. This is limited to bold, italics, strikethrough, code and links, and that seems to be kind of enough for simple note-taking, although I really do miss the ability to add highlights. You know, like ==this==.

There might be plenty of arguments for or against using this syntax, but I don’t care for any of them. To me, it’s very useful, and I’d love to see this in a future update of TagSpaces. (You might think it’s a futile attempt, but I know the devs read my stuff, and my opinions even influenced the development before, so there is hope yet…)

Highlights aside, this simplest way of formatting text inline is complemented by slash commands, that offer block-level formatting options. This is a feature that is quite new to me in a Markdown editor, but one I really got into quite fast. It’s kind of the same you’d see in e.g. Notion, another online-first note-taking app that, although looking nice, is as far from my needs as most of its cloud-based competitors.

So the editor has no formatting toolbar for now, and although this feature already exists in the Milkdown framework, and TagSpaces might introduce it later, I am personally not missing it. Toolbars make rapid note-taking harder on the computer when you have to constantly click away from the text just to format it, or insert something.

Enter the slash command

TagSpaces’ slash commands, on the other hand, will let you stay right in the text, and even if you do not know the markup, you can just choose from a pop-up list, right on the spot, then continue typing.

Slashing the commands

Currently, slash commands support the following block-level formatting options:


H1 to H3 headings: A compromise between having a full list and a too-long pop-up list. I do not love it, but I can learn to live with it.

All types of lists

  • Bulleted lists, with the syntax * Bulletpoint.
  • Ordered lists (1. Point one)
  • And interactive checklists (* [ ] Unchecked item and * [x] Checked item)

One limitation is the usage of multi-levelled lists. This is supported by the editor, but to use it, you must switch to Markdown view (only accessible from the Floating Action Button (or FAB, in short) the bottom-right corner, I have not found out the key-combination yet), and add four full spaces before the bullet point you want to indent. Neither the slash commands, nor typing Markdown offers this option currently in the WYSIWYG editor, because there is no way to insert anything before a bullet point, and pressing the Tab key has a different binding in the software. But if there was no room for improvement, things would soon get stale, so here’s an area to improve, dear developers. It should not be very hard to do either, so there is hope.

The FAB is fab.

The greatest upside is the truly interactive task list, where you can click on tasks to complete them. It will not strike out the text, but being able to mark them easily is a huge advantage to any list addict.


Adding images is fairly simple, with no file-system browser yet, you have to enter or paste image URLs or file links manually. Although TagSpaces PRO has internal file linking (this is not an affiliate link, I get no commission from sales, just sayin’), those file links were never meant for the Markdown editor to render them, those are for referencing only. Still, you can enter a local file path to have your images displayed, or just the filename, if it’s in the same folder.


Selecting “Quote” will drop you into a block-quote block, with the standard Markdown syntax for block-quote blocks.

You stay inside the block after pressing Enter, so you can easily do multiple lines and paragraphs. You can get out of the block by pressing Enter twice.


This is the coolest feature yet. Inserting a table gets you a simple, but very easily customisable standard 3x3 Markdown table.

The real feature here is how you can interact with it. Pressing the slightly hard-to-find-at-first, but definitely unobtrusive little square in the upper-left corner (1) will give you options to interact with the whole table. You can insert a column before (2), or after (3), and a row at the bottom (4), set alignment globally (5), or delete the whole thing (6).

Markdown Tables done the right way

When you want to interact on a single column, you must press the column header, and choose from the slightly more limited list. (The same, sans adding a new row.)

Headers have some headway

Pressing the row headers gives you an even more limited menu: You can add a new row above or below the current one, or delete it. Setting alignments on rows makes no sense in a Markdown table context (you know what I mean if you are familiar with the syntax), so that option is missing.

Thankfully, I have no bad puns in mind for rows

Code fences

You can also add standard code fences, where you have the option of marking the language in a drop-down list. TagSpaces will not highlight code syntax for you, but it’s also not the point of the software, IDEs do that better anyway.

What’s missing from slash commands

Quite a lot, actually. None of the usual inline formatting options are present, like the aforementioned bold, italic striked, and you cannot add links here either, but that is intended behaviour, slash commands are meant for block-level formatting.

So, instead of being an alternative to the popup formatting toolbar, slash commands rather complement its use by offering all things missing from the popup. This certainly keeps the list shorter, and the items probably easier to use, but whether it complicates the use of the application in the long run, or makes everything so much easier, will depend on your personal preference.

As mentioned above, I type in markdown straight, so it does not affect me either way, thus I also cannot form a meaningful opinion on this. You could probably let me know in the comments, I’d be interested to learn how others see and use this feature. However, this is a feature of Milkdown itself (the framework TagSpaces uses for its editor), so TagSpaces developers will not be able to change it, whatever we, mere mortals, think about it.

Other nice features I will never use

There are also two nice features that I never use, but others seem to be quite keen on: Math Expressions and Diagrams.

Expressing Math

The former seems to have been requested quite a few times on TagSpaces’ issue tracker and also their public suggestions/requests board, and so its implementation became another example of the developer’s responsiveness.

In the new editor, you can do math expressions now. Unfortunately, I am probably the least qualified person on the internet to evaluate anything remotely connected to math or its expressions, but after some searching, I’ve found an example of math used in markdown online, and it turned out to render quite nicely. I will not pretend to know what it means, but it looks very math-ish:

$\sum_{n=1}^{10} n^2$


Currently, I find one limitation. If you type in the expression as you go, it will be immediately rendered, as you close it with the dollar symbol, behaving like any other formatting; but when you paste in an expression, found e.g. on the internet (like I did), some symbols get “escaped” with a backslash character, and the expression does not render, until you fix this in the code view.

The solution is to “paste as is”, usually meaning pressing Shift+Ctrl+V. I tried this in TagSpaces, and I managed to escape the escape symbol, meaning the expression was rendered expressively.

Human-readable to even more human-readable: Enter the diagram

Diagrams in Markdown are a thing I was curious about for a while, but never had any time, energy, or even reason to look into. So now that it’s one of the major new features of the editor I am reviewing, it’s also a good opportunity to continue not looking into diagrams, because I am busy writing an article. Even so, I had a cursory glance, so you don’t have to.

Diagrams in TagSpaces are based on the mermaid project. Looking at their website, diagrams look like one could get used to using them, but not half as useful as creating them visually, with a dedicated tool. Without having any experience using these diagrams in the wild, I cannot comment on the usability, but they definitely have their place if you are restricted to Markdown, and have to still visualise algorithms or classes or even just make charts.

So I tried one of the formulas from the mermaid website (the one you’d never be able to decipher easily), just to see what happens.

So what happened was a very nicely rendered diagram on my screen. I am genuinely impressed. The script does not look very complicated and seems learnable, so if I’ll ever need diagrams where I cannot draw them with some fancy visual tool, I know where to turn. Until then, I’ll probably remember, with great fondness, the time I made a diagram in Markdown and how pretty it turned out…

To insert a diagram, you have to start a newly fenced codeblock, and give it the mermaid type. Since mermaid is not (currently) available from the slash-command originated codeblock’s dropdown list, you must type this in manually:


That will turn into a special codeblock where you can type/paste your diagram, and get pretty results like that above.

To conclude…

This is it in a nutshell. TagSpaces stepped up in the league of note-taking apps by a huge stride with its new editor. So besides superior file-tagging and organisation, note-taking and writing any kind of Markdown is now in the same league as some of the top players. Best thing? It’s free.