1. 31

    I have recently gone down the rabbit-hole of note-taking apps, since none of them seem to meet my criteria:

    • works offline with my local files (ideally in a human-readable format, if not compliant Markdown)
    • excellent math support (see my prosemirror-math extension for an example)
    • wysiwym (this is crucial for documents with lots of math)
    • support for tags + bidirectional links, for easy categorization and interlinking between notes
    • citations
    • custom css themes
    • free and open source, for extensibility

    Here’s a summary of the different workflows I’ve tried over the years:

    • Initially, I simply took notes on paper. Writing math was easy, but it was too difficult to stay organized or to make changes later.
    • Next, I switched to a system where I’d take rough notes on paper, then polish them into a nice LaTeX document with overleaf that I could reference later. This works out well for some things, but when I’m writing LaTeX I feel to pressured to make everything look pretty. This also isn’t ideal because of the lack of links, difficulty inserting images, etc..
    • For a while I used Jupyter notebooks, since they enable a nice mix of code / math / markdown. Eventually it just grew too cumbersome to start a notebook server every time I wanted to write. (however, these days I think notebooks are built into VS Code–so maybe it’s better).
    • Next, I started using Typora for rough notes, and I’d eventually synthesize the most important ones into a LaTeX document with Overleaf. This was fine, but I had a lot of trouble with organization. Typora doesn’t support anything like tags / wikilinks.
    • Next, I started using OneNote to keep a daily work journal, in linear order. If I’ve forgotten something, I can usually remember what else I had going on the same month/week, so having everything in a linear order really helped when I wanted to search over my past notes. It also helps remind me of my thought process when I go on a long depth-first tangent.
    • Unfortunately, OneNote has terrible math support. So at this point, my notes were spread betweeen paper, OneNote, Typora, and Overleaf. I had no idea where to look for the most “up to date” version of anything.

    When the pandemic started, I found myself with a lot of free time, so I decided it was time to make my own note-taking app called Noteworthy! I’ve been using it exclusively for my notes the past 3-4 months and it’s almost ready for public release!

    In the process of making Noteworthy I’ve been inspired by all the other great note-taking apps out there. Here are just a few of my favorites:

    • Typora, a nicely polished Markdown editor – has the best support for math input I’ve seen
    • Obsidian, a split-pane Markdown editor focused on bidirectional linking
    • Zettlr a Markdown editor focused on publishing / academics
    • RemNote converts your notes into spaced-repetition flash cards, similar to Anki
    • foambubble, a family of VS Code extensions to help search + organize your notes
    • logseq, a GitHub-hosted alternative to Roam
    • Neuron Notes a neat Zettelkasten system written in Haskell, based on GitHub repos
    • R Studio includes an awesome Markdown publishing experience, similar to Jupyter Notebooks
    • (coming soon) Athens Research, an open-source alternative to Roam
    • (coming soon, made by me) Noteworthy, which aims to be an extensible, open-source alternative to Obsidian and Typora, with a focus on wikilinks and excellent math support

    Some honorable mentions:

    • Dendron, a hierarchical note-taking editor based on VS Code
    • kb, a minimal text-oriented command-line note manager
    • Notebag a minimal Markdown app with tag support
    1. 4

      I would add to your list Joplin, which I’ve had very good experiences with. I think it ticks a lot of your boxes, and it also has quite good mobile support which can come in handy.

      1. 4

        I can’t believe I left out Joplin! It’s multiplatform (mobile. pc, terminal) has more features than practically every other note-taking app out there.

        It’s been a while since I last tried Joplin, but I think I remember choosing not to use it for my own notes since it uses split-pane (code+rendered) editing instead of wysiwym, which isn’t ideal for notes with lots of math. I believe there’s also no support bidirectional links, but I could be misremembering.

        1. 4

          I currently use Joplin, which works decently well for me. I have a few complaints about it: it’s a heavy Electron app that doesn’t exist in my distro’s package manger, so I have to build it from source. I don’t like the distinction it makes between “notes” and “notebooks” - I wish that notes could have arbitrarily-deeply-nested children, like some other notetaking software I’ve used has had. I do appreciate that it has a mobile app, but I’ve run into a few useability nits inputting text in that mobile app. And I wish there was a browser version.

          This Noteworthy project looks interesting, and if can solve some of these problems better than Joplin, while still doing everything that I do like out of Joplin, I would consider switching to it.

          1. 4

            I wish that notes could have arbitrarily-deeply-nested children

            A quick skim of the Joplin site didn’t really make it clear what a “notebook” is – are you just talking about being able to easily define hierarchies of notes? Or do you mean a full-on, infinitely-nested-list style app like Athens / Logseq / Roam, where every list bullet is considered to be a separate note? And where all the notes are connected as a big graph?

            With Noteworthy, the goal is not to impose too much structure on your notes – you shouldn’t have to change how you think just to work with a new app. I decided that an approach based on tags would give the most freedom, similar to how Obsidian does it.

            • (done!) Include tags anywhere using [[wikilink]] , #tag, or @[citation] syntax.
            • (done!) easily search for all documents referencing a specific tag
            • (done!) By default, filenames are tags and tags are filenames! Each file can additionally define a list of aliases, which allows for e.g. an abbreviation and its expansion to point to the same file.
            • (planned) define your own tag hierarchies for easier search / disambiguation
            • (planned) use logical operations (and/or/etc) in tag searches

            I’d like to experiment with a Datalog-esque syntax for tag search as well. Roam and Athens both use Datalog internally to facilitate searches, and I believe it has worked out well for them. It would be super cool to expose some kind of tagging system based on predicate logic to the user.

            This Noteworthy project looks interesting, and if can solve some of these problems better than Joplin, while still doing everything that I do like out of Joplin, I would consider switching to it.

            What would you say are your most-used features? Regarding Electron vs native vs browser,

            • Noteworthy is an Electron app, and I’m trying to keep it as lightweight as possible. This is mostly by necessity, since projects like KaTeX and ProseMirror have no native counterparts, afaik. I’ll happily re-write it if an alternative emerges – I’ve been following React-Native and Rust GUI for that reason. I also plan to delegate some of the heavy lifting to Rust programs like ripgrep.

            • Browser version – I can definitely imagine Noteworthy running in a local server, accessible through a browser.

            If all goes as planned, there will be a public beta of Noteworthy in a couple months, where I’ll try to gather feedback about what’s working / what’s missing. Keep an eye out :)

            1. 1

              In Joplin a notebook is a collection of notes, which map to single markdown files. Notebooks can be arbitrarily nested, but a notebook can only contain notes, not have raw text associated with it. So there’s effectively two types of node in the tree structure it exposes to you. I would prefer it if you could have a tree of notes, all of which contain text, and may or may not have any kind of nesting under them.

          2. 1

            IIRC, they have an editor that lets you edit the markdown as it is rendered (one pane). I think this feature is still experimental though.

            I’m not sure what you mean by bidirectional? In the sense that linking from node A to note B also creates a back-link in note B to note A? That’s not a thing in Joplin to my knowledge.

            I’ve got the skeleton of a graph viewer inspired by Obsidian which talks to Joplin over it’s REST API, but it’s not currently working and I haven’t had the time to finish a PoC yet. I’m far enough into it to determine that creating such a companion app is definitely do-able – Joplin’s API is quite nice.

        2. 1

          This is a great resource, thank you.

          1. 1

            I think org-roam fill all your checkboxes.

            The author answered in this thread here

            1. 1

              I haven’t personally tried org-roam due to a phobia of emacs, but it looks like a great alternative to the other roam-likes. One thing that’s not clear – does it support some kind of instant math preview?

              1. 2

                Due to how ridiculously extensible emacs is, you can be certain that the answer will be “yes, with some elisp”.

                1. 1

                  and if you want a packaged solution, org-fragtog :)

          1. 9

            I built Org-roam, which i had initially intended to be a simple layer on top of Org-mode that added backlinks to regular Org-mode files. A bunch of tools such as org-roam-bibtex and org-roam-server have since been built by community users to work with citations and provide a graphical overview of the notes. My notes are automatically published via netlify here.

            Org-mode is unparalleled as a plain-text system, which beginners can use as a simple outliner, and power users can use it to build complex workflows (GTD, literate programming etc.). It’s simply a gift that keeps on giving.

            1. 2

              Thanks jethro for org-roam. It’s been a few months now that I use it daily and I really love it.

              As far as I can tell, this is the ultimate note taking tool.

              Along the rest of org-mode (org-agenda, org-capture, etc…) this is a life changer tool for me.

              1. 3

                you’re welcome!

              2. 1

                After hearing about org-mode and org-agenda for a while and then org-roam yesterday, I’ve finally decided to dive into Emacs. I’m starting from the basics with a vanilla installation and reading through a few people’s config files and the docs before I attempt to use org-roam though; I’ve heard it’s a challenge to work with.

                My notes are automatically published via netlify here.

                That’s incredibly similar to what someone sent me yesterday, which was the final straw that convinced me to try Emacs. Is the output a template from a specific package or something you’ve created yourself?

                1. 3

                  As a new user I was glad to start to use emacs using a configuration framework like doom-emacs or spacemacs. In fact, after a few years getting used to emacs I now believe that doom emacs make a better job than I could ever do myself to create an emacs configuration.

                  That being said, let just say that diving into org-mode was probably one of the best use of my time, and I hope you’ll enjoy it as much as I do.

                  1. 2

                    I’m starting from the basics with a vanilla installation and reading through a few people’s config files and the docs before I attempt to use org-roam though; I’ve heard it’s a challenge to work with.

                    It’s hard if you fight it, easier if you are ready to learn – seeing that you have the right stance, you’ll probably be fine.

                    1. 1

                      I’m starting from the basics with a vanilla installation and reading through a few people’s config files and the docs before I attempt to use org-roam though; I’ve heard it’s a challenge to work with.

                      Yes it is. Emacs is a complex beast, and so is Org-mode, and Org-roam, it really does take some time to get used to. Maybe this guide can help you: https://github.com/nobiot/Zero-to-Emacs-and-Org-roam

                      That’s incredibly similar to what someone sent me yesterday, which was the final straw that convinced me to try Emacs. Is the output a template from a specific package or something you’ve created yourself?

                      That’s my hugo theme, cortex, which that website in that link had modified for use directly with org-publish. I had since taken some of the modifications (javascript, mostly) and placed them back into my theme :)

                  1. 7

                    Hi! Author here, happy to take any questions.

                    1. 3

                      I actually found this a while back from an /r/emacs post I think. Never used roam so more wondering good ways to integrate this in with my org crack addiction.

                      Also the dot graph looks…. like it could get unwieldy.

                      1. 2

                        Org-roam plays nice with vanilla Org. That is, it should work with your current org files, if they link to each other using regular Org file links. If your files are all located in a directory and link to one another, and don’t mind giving it a try, half-an-hour of playing around should give you a good idea of what it’ll help with.

                        Graphing capabilities got a bit of an upgrade to handle that mess. It now also produces graph for connected components with a settable maximum distance, so that’s a bit more consumable. There’s also a bit of discussion on integrating graph metrics, but that’s still in the ideation phase: https://org-roam.discourse.group/c/dev/graph/8

                    1. 17

                      I use DOOM Emacs, after a lot of deliberation. I’d used a vanilla Emacs config for the good course of 4 years before realizing that DOOM did everything I was already doing, and doing it faster.

                      My config is literate, and tangled automatically by DOOM’s doom command-line utility. You can find the entire config here if you’re interested.

                      Also, if you’re planning on using any form of language server via LSP mode, I’d recommend building the Emacs 27 pre-release: its native JSON parser makes it far faster.

                      1. 10

                        I also migrated from my own bespoke literate Emacs configuration to doom. It’s feature rich and fast. It feels like I switched from Linux from Scratch to a regular distribution.

                        1. 8

                          I too did the great migration from vanilla Emacs to Doom recently, and wrote about it: https://blog.jethro.dev/posts/migrating_to_doom_emacs/

                          I don’t really miss my old config, but haven’t fully gotten used to the keybindings in Doom.

                          1. 5

                            +1 to DOOM. I switched from Vim to Emacs in maybe ‘15 for the Clojure support (CIDER is a must-have) and maintained my own config because I didn’t see anything attractive I wanted to adopt at the time. I recently decided that my homebrewed config was far too slow and a pain to maintain and made the switch to DOOM which has been almost entirely win. I’ve ported a few bits here and there forwards, but overall with evil-mode turned off I find even stock base DOOM excellent.

                            1. 3

                              Ok, DOOM is fast, but your config could be just as fast. I mean, I managed to pull of those those startup times and loadings (with margin of error of few or tens of mili seconds which are tolerable).

                              People just don’t read documentation of use-package. (or aren’t using it at all which is even worse) I made my config lazy in mathematical sense, don’t load anything unless I start using it. Rest are minor tweakings and tricks but you get the idea. With a bit of work your config could be just as fast. If you must have vim configs than it’s fine, I’ll choose DOOM over spacemacs any time of the day.

                              1. 3

                                Yeah I’m another doom emacs convert. I started off working with a literate emacs config. It was painfully slow no matter what I did. Doom starts almost as fast as vim, even faster once the daemon is running.

                              1. 1

                                I used fish heavily in the past (the fish z and fzf ports are mine), but did a shell config bankruptcy and am now on vanilla bash with just the Starship prompt. I found that I’m really not missing much from fish. Fish does have pretty nice syntax for writing plugins, I can’t imagine writing auto-completion for Bash.