Warning: Experimental, proof-of-concept. Here be dragons!

notesium

A simple yet powerful system for networked thought

Writing does not make intellectual endeavours easier, it makes them possible. Deepen understanding, insight, and allow for structure to emerge organically by linking notes.

Zettelkasten Evergreen notes PKM Journaling
Screenshot

Completely free for personal and business use. Open Source (MIT Licensed).

At a glance

Notesium is essentially an indexer for bi-directional linked notes, designed around a few core principles. But it offers so much more...

Notesium is designed and aspires to:

  • Do one thing, and do it well - per the unix philosophy.
  • Support the concepts of Evergreen notes and Zettelkasten.
  • Be used with your own text editor or embedded Web app.
  • Be used with a local folder of markdown files.
  • Be as close to zero friction as possible.
  • Be lightweight and fast.

and implements while assuming

  • Filenames are 8 hexidecimal digits and deterministic.
  • A completely flat directory structure.
  • Titles are inferred from the first line.
  • Notes with one-word titles are considered labels.
  • Links are inline.
  • Blazingly fast and powerful search.
  • Preview notes and links, with line highlighting where relevant.
  • Visualize relationships between notes with an interactive graph.
  • No need to think about file names or folder locations.
  • Instantly create or find a note with keybindings.
  • Structure emerges organically through bi-directional links.
  • Frictionless creation, listing, previewing, and following of links.
  • No caching or preprocessing: Everything is computed on the fly.
Whether you're jotting down simple transient notes, building a comprehensive knowledge base or second brain, or anything in between like journaling, conducting research, writing a book, or even tracking workouts — you're covered.

Integrations

Use the local web interface or integrate with Vim to enhance your existing workflow

Whether you prefer graphical interfaces or text-based environments, Notesium adapts to your preferred tools and methods. Beyond that, leverage the powerful low-level CLI and API interfaces for custom integrations.

Panels: compact notes list and graph panels Panels: compact notes list and graph panels
Panels: labels, detailed notes list and note metadata sidepanels Panels: labels, detailed notes list and note metadata sidepanels
Panels: notes list - preview Panels: notes list - preview
List: prefixed with associated labels and sorted alphabetically List: prefixed with associated labels and sorted alphabetically
List: prefixed with modification date and sorted per modification time List: prefixed with modification date and sorted per modification time
Links: display all links Links: display all links
Links: display links related to the current note Links: display links related to the current note
Links: link insertion triggered by `[[` Links: link insertion triggered by `[[`
Lines: full text search Lines: full text search
List: prefixed with associated labels and sorted alphabetically List: prefixed with associated labels and sorted alphabetically
List: prefixed with modification date and sorted per modification time List: prefixed with modification date and sorted per modification time
Links: display all links Links: display all links
Links: display links related to the current note Links: display links related to the current note
Links: link insertion triggered by `[[` Links: link insertion triggered by `[[`
Lines: full text search (light theme) Lines: full text search (light theme)
CLI: usage, list and links CLI: usage, list and links
API: spec, note object API: spec, note object

Graph view

Visualize the relationships between notes with an interactive force graph

Highlight, Search and Track. Emphasize nodes and their links using the search filter or clicking a node. The fullscreen view supports note preview, where as the panel view automatically tracks the active note and auto-updates, helping you maintain context and relevance.

Dynamic Viewing. Adjust node sizes dynamically based on bi-directional link counts, toggle title visibility, and automatically scale elements according to zoom level. Tweak forces like repel force, collide radius, and strength to refine the layout, as well as drag, pan, or zoom the graph for optimal viewing.

Graph: full screen zoomed out graph view Graph: full screen zoomed out graph view
Graph: filter notes with emphasized matches, and preview note Graph: filter notes with emphasized matches, and preview note
Graph: panel tracking the active note and emphasizing its connections Graph: panel tracking the active note and emphasizing its connections

Linking notes

Connect your notes, just type [[

Effortlessly connect notes as you type with automatically formatted and clickable links. Explore which notes link to the current note (aka. incoming or backlinks) with the finder or side panels.

Web: link insertion triggered by `[[` Web: link insertion triggered by `[[`
Vim: link insertion triggered by `[[` Vim: link insertion triggered by `[[`
Links: display all links Links: display all links
Links: display links related to the current note Links: display links related to the current note
Panels: note metadata with link-trees Panels: note metadata with link-trees

Embedded Web editor

Syntax highlighting and concealment

The editor is configured to syntax highlight based on markdown formatting. By default, special characters such as those used for bold, italic and code will be concealed except on the active-line. In addition, links will also be concealed and only display the title. This setting can be toggled using the icon in the note sidebar.

Table formatting and navigation

The editor will recognize when the cursor is placed within a table structure (identified by lines starting with the pipe character), and provides automatical table formatting, column alignment and dynamic adjustment, concealment support as well as navigation keybindings.

Design assumptions and rationale

Filenames are 8 hexidecimal digits, and deterministic

When storing notes as files, naming is challenging. Common conventions include using the note title, current timestamp, or both in concatenated form.

However, notes often evolve, making it hard to choose a good title upfront, which can lead to cognitive overload, as well as considerations for potential future collisions. If a better title is found or the note’s context changes later, renaming the file risks breaking existing links. Using timestamps might seem ideal, but depending on the format, it can result in long filenames and risk collisions due to timezones and daylight saving.

Notesium addresses this by using the UNIX epoch time, further encoding it in hexadecimal, resulting in 8 characters for the identifier and appending the .md suffix. The timestamp can easily be decoded and formatted, and the suffix ensures compatibility with other tools while limiting file processing.

There are only two hard things in Computer Science: cache invalidation and naming things. ~ Phil Karlton

Completely flat directory structure

It is better to prefer associative ontologies to hierarchical taxonomies.

Folders are often thought of as categories, but notes don't always fit neatly into just one category, which could result in decision paralysis when creating a new note, and can prematurely constrain what may emerge.

Links would also be broken when renaming a folder or moving a note from one folder to another.

Notesium assumes a flat directory structure, having all notes be siblings to one another, in one folder. Utilizing bi-directional links allows for the structure to emerge over time. Additionally, the label convention allows for a meta-hierarchical taxonomy to be created which can be useful in certain circumstances.

Titles are inferred from the first line

Note titles are like APIs, and when titled well they become an abstraction. Notesium assumes note titles are on the first line of the note.

One-word titles are considered labels

Even though tags are an ineffective association structure, Notesium supports the concept of labels, but there is no special label syntax. Instead, a label is just a regular note, and only considered a label if its title is one-word.

This essentially supports creating a meta-hierarchical taxonomy which can be searched, filtered and sorted. Additionally, the Web UI includes a dedicated label panel and label-tree providing a visual representation.

Links are inline

Notes should be densely linked, allowing for structure to emerge organically, and may even help you see unexpected connections which may surprise you.

Notesium assumes note links use the inline markdown syntax. This makes it easier to parse, and simple to insert links inline while typing.

Even though links are short, for an improved reading experience in Vim consider enabling conceallevel. This is implemented in the embedded web editor and enabled by default.

Periodic notes

Daily and Weekly deterministic notes

Notesium itself does not directly support periodic notes, instead the embedded Web app and Vim integration support daily and weekly notes using a creation-time convention (00:00:00 for daily and 00:00:01 on the first day of the week for weekly).

This convention results in deterministic, unique filenames, enabling instant identification of a specific periodic note, without the need for manual organization or special formatting - eliminating overhead and the need to search the entire notes folder for keywords or regular expressions. Additionally, past and future periodic notes can also be created using this convention while retaining chronological order.

date picker

Performance

Lightweight. Blazingly fast.

size, memory, stats, timed list
Binary size
Linux build
6.3 MB
Total system memory
Web and API
11.4 MB
Notes
12 labels, 263 links
147
Actual elapsed time
CLI: list, prefix and sort
0.008s

* These metrics are from a specific setup; actual performance may vary based on system configuration and usage.

Keybindings

Create, link and find notes without leaving the keyboard.

vim and webui keybindings

And so much more

Notesium is packed with features that reveal themselves as you use it, and it becomes exponentially more powerful and useful the more data you feed it.