Org-roam major redesign

Not in the initial release, but is trivial to add.

Does it mean a version control system?

How about leaving an abstraction here and let the end-users build their own? For example, making a variable

  • default not saving file/headline creating time
  • UNIX system
  • other systems

Although it is not part of the UNIX api, ext4 file system supports it. stat command returns creation date among other things.
I don’t know about windows or mac.

I think the easiest way is to use the keyword created much like roam_tag and roam_alias because, this way, org roam can support this feature with minimal change to file parsing, capture template and database update. It would also lend it self to custom workflows because it makes it easy to implement personal timestamp across files that is supported by org roam (for example if one wants to track something else than creation time).

In the future, filesystem and os centric methods can be implemented to augment this feature.

I started tracking created time along with last_updated within the file through recommended templates I found online (either in the docs, this discourse group or github issues). I don’t know if it is well spread (maybe we can do a poll). The default capture template is bare because it doesn’t use supported keywords. It can be updated to include this keyword among others for future files.

why was this discontinued? It sounds useful and it is possible to place sort over title length with it (either sort by date then by title length or the opposite).

I think the easy way to do this is to search :ID: in Git. Since the
smallest unit is a headline, this will be a durable solution for
tracking the creating time of the notes. To gather the statistics of
everyday work, I would prefer to run a periodic script to track the
number of :ID: with respect to the latest change.

For a long time, I also use another metadata: modified time. However,
I do not have any practical usage over the past year. Further thinking
about this meta data, I think it is possible to track from the
git-blame function.

A quick and dirty workaround script for this trival task:

git diff ~/PATH/TO/ORG-ROAM-NOTES/ > ~/.emacs.d/tmp.log 2>&1
grep ':ID:       ' ~/.emacs.d/tmp.log | wc -l

will give how many nodes created.

For v2 something like what you suggest is needed. Creation time will need to be stored as metadata within a headline drawers. Then during parsing, headline drawers are checked for timestamps. A specific keyword (like created) can be used to specify creation time. I believe org ql has a similar feature.

I implemented parsing #+created for the current version. I am willing to implement for V2.

1 Like

Single line update from V1 to V2 that will update my daily tracker:

-TODAY=`date +"%Y%m%d"`
-ls -l ~/Dropbox/myNote/zk/ | grep "$TODAY" | grep -v "~" |  awk '{print $9}' | wc -l > ~/.emacs.d/nyan-mode/log.today_effort 2>&1
+cd ~/Dropbox/myNote/zk/ && git diff ~/Dropbox/myNote/zk/ > ~/.emacs.d/nyan-mode/tmp.log 2>&1

When I hear the news about V2, I tend to write fewer new files, but write more headlines. Now, back to the previous state where I can “fool” myself.

I love the idea. If I understand it correctly, this means every subtree with an ID will be cached in org-roam db and treated as its own atomic note.

Does this mean that each node/subtree-with-ID will appear as its own node in graph (via org-roam-server)? That would be fantastic!

I’ve been using org and org-id for 1.5 years and have highly inter-linked subtrees across 4-5 very long org files. It sounds like org-roam v2 will be able to take this structure and generate graphs through org-roam-server.

Will this unify roam-tags with regular org-tags?

How will this affect org-id? I believe org-id currently catalogs the names of org files and the IDs they contain. It is kept in a file (.something file in .emacs.d, I believe) to serve as a look-up table (I assume).

Thanks for building org-roam v2. I look forward to trying it when it is available (is it already?)

I believe org-expiry has some auto-stamping method for inserting creation date in the properties drawer of a newly created note. M-x org-expiry-insinuate turns on the automatic insertion of creation date. I’ve often wondered that this could be refactored to also insert modification date.

That is correct.

Yes, but org-roam-server needs to be updated for the new db schema.

Issues with processing large org files still remain (for now), but it will support the structure.

Yes, Tags will be specified via Org tags (and FILETAGS for file-level nodes)

Unaffected. Org-roam duplicates that information, and can choose not to use it.

I’ve personally been using the V2 branch for a few months now and making changes where necessary. Works fine for the minimal subset of features I rely on.

That’s encouraging! I will probably wait on V2 because my workflow relies on org-roam-server and graphing. Based on your response above, it sounds like that aspect is in development phase. Thanks for your hard work on this package.


I’m looking for an adequate tool for note-taking (Zettelkasten method) to be used on my Linux (Debian) machines…tried several of them - Neuron looks interesting, but a bit too exotic - Haskell/nix-install etc. Installed Zettlr & Joplin - they look nice, not perfect, but I prefer not to depend on Electron apps and prefer using real editor (Joplin does support it though). There are Foam & Dendron - the latter is very interesting, but simply do not want to use VSCode editor and OniVim2 is not ready having no support for tree/graph views.

Org-roam, probably, does everything what I need, but I’m not quite Emacs/org-mode user and recently stumbled upon nb which is very cool and markup-agnostic, so I wonder about your rationale to keep (part of) your notes in *.md?

For task management I do use Taskwarrior, Thunderbird for email - iow. not org-mode, so not sure if using org-roam just for note-taking would provide optimal setup and/or whether there is some ‘cons’ in using org-roam with the Markdown?

It’s all in retrospect for me, so I could come up with any reason to justify why I’m using markdown files now and try to say something smart :wink:

I tried Neuron and Zettlr; it’s fun to try out different tools. Md-roam “sort of” works nicely with them. This might change when I adapt Md-roam to V2 with ID-based links. I will see how this will pan out soon.

It’s probably more useful to think “Why have I not stopped using markdown with org-roam?”. Two honest reasons:

  1. I use iA Writer (markdown editor) on iPad and iPhone to take notes (especially websites, as I tend to read web articles more on iPad/iPhone than on PC)
  2. I learned how to code elisp through developing Md-roam by studying how Org-roam is programmed – and it turned out to be a lot of fun. I could not code elisp before that. I do not code for living, so it was a discovery for me

So… It’s all person specific to me. The reason why I haven’t quit markdown with Org-roam is that it poses the least friction with my life away from PC, it’s fun, and perhaps the joy of discovery still lingers on (like a chick hatching out of an egg identities its mother).

I think this is looking at “pros and cons” from a different angle. I don’t weigh them with different tools. It just so happens that I found a tool set that is frictionless with my life and fun; I just stopped searching for “better”.

I still “shop for a better tool” because it’s fun. But I would also want to spend more time using the tool to make something.

EDIT: Since you asked about note-taking use of Emacs… Not sure what will be optimal for you; just sharing what I do.

I use Emacs mostly for note-taking for both work and private. I also use it to write long prose – like my Org-roam setup guide for Windows and write a draft of a book. That’s it. Emacs for me is for note-taking + converting the notes into longer material – “text editing” without programming (except for Elisp).

I mostly use iPad, Apple Pencil, and a drawing app for day-to-day task management (in place for pen and paper). MS Outlook inbox is my GTD inbox for my corproate work. I use Org Mode only a little bit to organise my personal projects (mostly Emacs packages like Md-roam; these projects are done in PC) as an experiment to see if it works.

I am not sure if I would like to put everything in my PC, probably because I used to travel a lot pre-COVID.

1 Like

@nobiot, much of your organizing approach sounds a lot like mine, right down to using a pen-based app. Do you try to integrate that in any way with org-roam or org-mode? I use OneNote a lot, but it’s always kind of “off to the side” – I’d like to mix it in somehow with Emacs tools.

This has become long after writing it – it’s an interesting topic (“transition” from OneNote). We might like to post separately, as it is going off topic from V2 :wink:

I still use OneNote in parallel. It has been (still is) integral to my work; the integration from Outlook for meeting notes, iPad app for handwritten notes, search including the handwritten notes, etc. etc.; these are just so good if your daily work life is embedded in MS Office Suite.

I decided to try out Emacs and Org-roam for work throughout this year. This was triggered by the fact now that I have too many OneNote items (I think it’s more than 5,000) that the API started to not work when you create meeting notes from within Outlook (one of the major benefits gone like this).

I am still experimenting and started to identify some “key gaps” (not very firm “requirements”, really — just some points of frictions). Some are not functional; it’s relation between my adaptation and tool’s concept.

  1. Search text
    Solved with Ripgrep (within Emacs)

  2. Image pasting (for screen shots)
    Solved with my custom function for Windows

  3. Notes on “recurring” events, such as meetings on a specific theme / topic / issue
    Creating a shell of a meeting notes from Outlook calendar entry (with participants, date, etc.) is not achievable – not worth trying in my view. I think this is where using the classic bullet points style of Org Mode might be more useful than the “atomic” nature of Zettelkasten notes; that is, I can create a note on a theme or meeting, and use each heading as an event with a time stamp (e.g. Meeting on 2021-03-20), etc. etc.

  4. Handwritten notes, and search
    I am thinking of something like this. Not sure if this is going to work, but it should be fun to try:
    Org/ vs. org/org-roam/ directories OR am I supposed to link to files outside of org-roam? - #7 by nobiot


Karlicoss experiments are very interesting in this case…

1 Like

Thanks! I’ve concluded to settle on Emacs & org-roam. :slight_smile:

This does not apply here.

I’m glad to hear it - that’s something I still have to tackle. :wink:

After some consideration I’ve concluded to focus solely on Emacs as editor and org-mode markup…Emacs is for quite some time around and hopefully will continue so. Otoh, having experience with several markups (markdown, rst, Asciidoc) I believe that org-mode is rich-enough as well as readable to serve as single-source markup for my own needs.

Lastly, although I like Taskwarrior for task management, it does not handle recurring tasks properly, so it’s another reason to stick to org-mode. :smiley:

1 Like

Hi, @jethro. I wanted to test the new version in order to get an insight of what needs to be adjusted in Org Roam BibTeX to keep it working.

So far I spent quite a bit of time trying to make org-roam-buffer show the backlinks. With my setup of Doom with no extra config in a separate VM, it appeared that the following:

(require 'org-roam)

was not enough.

To make the Org Roam buffer actually work I had to:

(require 'org-roam-backlinks)
(require 'org-roam-unlinked-references) ; to be able to follow links
(add-to-list 'org-roam-mode-sections #'org-roam-backlinks-insert-section)

I assume the same should be done for ref links to show up.

Is it the intended way to load the org-roam-buffer functionality, which is still in transition toward org-roam-modules or similar, or did these pieces just did not make it yet into the branch?

Thanks for trying v2 out so early, appreciate any feedback.

Yeah, the setup is pretty involved now, I haven’t decided on what would be good defaults, so I’ve left this in my config for now: