Recollectr 3.15 – Tagging 101

Tagging is something we’ve been thinking about for years – since even before our first public release. Only now are we finally getting to develop in that direction and implement our vision of how we think tags should work. Tagging is a premium feature – but if you’re not a premium user, there’s plenty of improvements here for you too!

Hashtags as bidirectional superlinks

This release is the World 1-1 of tagging, if you will. It’s the first step towards Recollectr as a knowledge base where tags are treated as first-class citizens. With Recollectr 3.15 you’ll be ready to get tagging right away, but this is a big undertaking that will require a few releases to fully realize the superpowered features we have planned.

In stark contrast to many other solutions, Recollectr takes an anti-hierarchical approach, and our approach to tagging is no different.

Tags are not folders.

Tags are best thought of as like synonyms that link together various ideas, not as folders. They enable you to quickly call to mind a word to find what you’re looking for, and to jump to related items. This is akin to how thoughts naturally develop in the mind.

In contrast, folders, and especially folders of folders, build walls around your knowledge. To quote Alastair Reynolds, “A wall is also a prison.” In the future tags will help Recollectr itself to infer relationships between your notes without creating these artificial barriers.


We quickly threw together a demo database to show off the new tagging functionality. It’s simplistic, but creating robust, interlinking demo databases is shockingly time-consuming.

In this database we’ve got a bunch of fruits, vegetables, and nuts (and drupes, which we call nuts/fruits because… okay we’re getting sidetracked…)


Linking to an existing tag and creating a new one work the same way, just type a # followed by a string of letters/numbers/underscores. Recollectr will try to find the best matching tag, or offer you the option to create a new one.

Hashtags’ contents are auto-generated, with links to all of the tagged notes, and navigable by the quick keyboard controls you already know and love. At this time they’re not editable, although that may change in the future.

Because tags are linkable entities in Recollectr, not just strings, you can easily update the tag’s name and have it applied everywhere. Unlike note titles, tag titles are enforceably unique; you can’t create two tags with the same name.

Other linking improvements

Since hashtags are supercharged links, it seemed like a sensible time to address some other linking improvements too. So in addition to creating hashtags inline, you can now create links inline too using markdown-like mechanics. The syntax is [[your note title]].

And it’s not just easier to create links – but it’s easier to find them too! When searching for a note to link to, the search now occurs in a fuzzy fashion that’s faster and more forgiving than the previous whole-word matching system.

And plain old internal links are bidirectional now too!

Codeblock improvements

The long requested button to copy the codeblock contents has arrived! Due to Recollectr’s focus on keyboard usability, this wasn’t high on our todo list, but it was high on the “users requested” list.

The fuzzy search featured in the new internal link search mechanism has been implemented in the syntax selector too!

With JavaScript increasingly the lingua franca of programming, it was a bit frustrating that typing “js” wouldn’t pop up with “JavaScript” – but no more!

Without fuzzy search (3.14)
With fuzzy search (3.15)

Adherence to system dark/light preferences

It’s a small change, but one that might be a big deal to some. Recollectr can now automatically toggle between dark and light theme as your OS does. This is the default behavior for new installations.

Foundations for future improvements

  • Starts tracking local-only usage statistics to implement sorting notes by frecency
  • Major rewrites of desktop-specific code for an easy path to further security improvements – like removing Electron’s remote module and implementing its context isolation mode. We’ll discuss those more next release.
  • The tagging system itself, of course!

Quality of life and performance

  • Greatly improves performance of experimental “Omnibox Bypass” feature
  • Holding down the mouse on the +/- buttons to adjust snooze times will now auto-increment/decrement
  • Adds back/forward and undo/redo options to the context menu
  • A reminder firing will no longer modify the note’s updatedAt time
  • Shows resize handle for notelist even when notelist is collapsed
  • Fixes apostrophes inside of parentheses were wrongly being duplicated
  • Somewhere on the fence between “optimization” and “bug fix,” we’ve refined the desktop editor’s logic to avoid attempting to decrypt the currently opened note anew when nothing had changed to make that necessary. Previously the app could request decryption, potentially multiple times in the same second. The performance load of this was not very large since the decryption function is memoized, but caching results isn’t free and it still resulted in running a lot of code that didn’t need to run, and running it often.

Bug fixes

Of the many bug-fixes in this release, some notable fixes include:

  • Destroyed notes are now removed from the notelist properly. Previously the notelist required further updates for the destroyed notes to be removed as intended
  • Past/upcoming reminder lists could fail to update properly, resulting in past reminders under upcoming and vice versa
  • Bulk note updates were synced to other online installations one by one, rather than en masse
  • SMB/UNC/local file links couldn’t contain spaces, even if explicitly entered into the linking menu
  • Some hotkeys still worked in locked notes
  • The “reminder fired at” time could precede the actual reminder time. (Note: this may cause a small number of old reminders to fire again when upgrading to 3.15 to fix things once and for all.)

Overhauling our build systems

The build system is the set of tools and associated logic for building the Recollectr apps from the written code. While these overhauls don’t have any direct effect on user experience, they have a big influence on developer experience. A lot of work this cycle went into upgrading our build systems for faster development in the long run, both for desktop and mobile. The decision quickly began to pay off with far faster app reload times while developing.

Mobile improvements

Improvements to mobile are probably the most immediately apparent, since mobile had the longest way to go to a strong user experience.

A lot of the logic in the mobile app was of the, “this works, so let’s not touch it,” variety. Now, we’ve taken the time to rewrite most of the the remaining proof-of-concept code to be bona fide cross platform code. This should be a better experience for our users and developers alike. Some things that are now more cross-platform friendly include:

  • System theme mode integration
  • Generating the decrypted note cache
  • Managing user account authorization
  • Note-locking logic & associated lock-like logic
  • Opening links and managing note navigation history (although actually navigating this history on mobile is not yet possible)

In addition the editor had some styling had some issues that have been fixed. Maybe you noticed that the title scrolled when it shouldn’t, or that the note archived/trashed notice didn’t scroll when it should. And how about the editor tools overlay that didn’t actually, well, overlay… All fixed!

Notable fixes:

  • The mobile editor could become out of sync with the rest of the app when toggling pinned/archived/trashed/locked from the note drawer
  • Android’s back gesture annoyingly selected the editor text mid-gesture, and sometimes triggered the image lightbox. This wasn’t an easy fix, but this fix alone has made the app much more pleasant to use
  • Auto-focusing editor on creation of new note failed
  • User was navigated to a blank screen if they became logged out, with not resolution besides reinstall

Check out the Recollectr 3.15 changelog for a full list of changes.