Org-roam development status, May 2025

Hi gang, I’ve taken on a member role in the org-roam organization to help shepard the project along. This year I was able to bring things up to speed with built-in SQLite support for Emacs 29 and later, and work through CI issues. We have started addressing what I think is the biggest class of issues: performance. A PR to improve org-roam-node-find performance was recently merged, and v2.3 was released to melpa-stable (after 3 years since the last release).

I won’t be doing the lion’s share of active development myself, but will support those who do — and there are a few eager folks working at it.

There are a ton of open issues and PRs in GitHub and a lot of them are quite old and have gone stale. I’m going to set up a workflow to auto-close dormant issues after 6 months of inactivity with a 2 week warning comment. If you have an issue or PR that you’ve been following and would like to see attended to, please give it a ping in the comment thread.

I love org-roam. I use it every day. I appreciate this community and look forward to giving back. :heart:

5 Likes

It may be worth looking into GitHub - meedstrom/org-node: A notetaking system like Roam using Emacs Org-mode by @meedstrom1. It reimplements many org-roam features but with a different and more performant database backend. Perhaps some of these improvements can be brought back to org-roam.

Definitely. @meedstrom has been very helpful in the Master Issue for Making Org-Roam Faster.

To see some perf fixes for the *org-roam* buffer, you can check out what org-node-roam-accelerator-mode does! I meant to upstream at some point but, uh, life. Happy to answer any questions.

1 Like

@dustinfarris Thank you for all you do! Happy to see v2.3 published. You are doing herculean work.

Perhaps I can join force with you, do my bits and try to update the documentation – I have been wanting to go back to Zero-to-Emacs-and-Org-roam guide – but instead (and additionally), I could send some PR for the official documentation to be in line with Emacs 29 with SQLite embedded… Not immediately. I am pacing myself, looking at the rest of year 2025.

1 Like

org-node-roam-accelerator-mode

will definitely check this out — i’d very much like your work to be brought in. totally understand about “life”! :joy:

Thanks @nobiot — your past contributions and participation in the community are a big part of what makes org-roam great. No pressure to do all the things all at once. I would like to see the following done by EOY, somewhat in order of priority:

  1. Bug fixes
  2. Performance improvements
  3. Better test coverage
  4. Documentation updates

And then start looking at new features.

1 Like

** Suggestions for temporary buffers
Fixes, performance

  1. Org roam mode
(defmacro org-roam-with-temp-buffer (file &rest body)
  "Execute BODY within a temp buffer.
Like `with-temp-buffer', but propagates `org-roam-directory'.
If FILE, set `default-directory' to FILE's directory and insert its contents."
  (declare (indent 1) (debug t))
  (let ((current-org-roam-directory (make-symbol "current-org-roam-directory")))
    `(let ((,current-org-roam-directory org-roam-directory))
       (with-temp-buffer
         (let ((org-roam-directory ,current-org-roam-directory)

;; HHHH---------------------------------------------------
	       (org-inhibit-startup t))
;; HHHH---------------------------------------------------

	   (delay-mode-hooks (org-mode))
           (when ,file
             (insert-file-contents ,file)
             (setq-local default-directory (file-name-directory ,file)))
           ,@body)))))

Simple cache design

  1. Wrap org-mode inside delay-mode-hooks otherplace
(defun modified/org-roam-fontify-like-in-org-mode (s)
  (with-temp-buffer
    (insert s)
    (let ((org-ref-buffer-hacked t))
      ;; (org-mode)
      (delay-mode-hooks (org-mode))	
      (setq-local org-fold-core-style 'overlays)
      (font-lock-ensure)
      (buffer-string))))

(advice-add 'org-roam-fontify-like-in-org-mode
	    :override
	    #'modified/org-roam-fontify-like-in-org-mode)

Please consider. Thanks.

My suggestions should close

And

Thank you very much for helping with the development of org-roam. I do too:

:heart: I love org-roam. I use it every day. I appreciate this community and look forward to giving back. "

Thanks @akashp . I’m looking these over.

@akashp would you mind approving this?

The difference is incredible. :heart_eyes:

You might be surprised to find it gets even faster if you also let-bind org-agenda-files to nil before enabling org-mode.

And org-element-cache-persistent - as it’s a temp buffer, it just causes unnecessary work as far as I’ve understood. Perhaps that should be considered an upstream bug.

So to make a proper org temp buffer:

(let ((org-inhibit-startup t)
      (org-agenda-files nil)
      (org-element-cache-persistent nil))
  (delay-mode-hooks (org-mode))
  (setq-local org-element-cache-persistent nil))

Here I’ve set org-element-cache-persistent twice because enabling any major mode kills all local variables previously present.

1 Like

Very cool! I’ll take a swing at this later today.