Top Related Projects
Another piece of your extended mind
A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: http://trello.com/b/8txSM12G/roadmap
The personal knowledge management (PKM) tool that grows as you do!
A personal knowledge management and sharing system for VSCode
Quick Overview
Org-roam is a note-taking tool and knowledge management system built on top of Org-mode in Emacs. It implements a Zettelkasten method for organizing and linking notes, allowing users to create a network of interconnected ideas and concepts.
Pros
- Seamless integration with Org-mode and Emacs ecosystem
- Powerful linking and backlink functionality for creating knowledge graphs
- Customizable and extensible through Emacs Lisp
- Supports both plain text and structured data formats
Cons
- Steep learning curve for users new to Emacs and Org-mode
- Limited cross-platform compatibility (primarily for Emacs users)
- Performance can slow down with very large note collections
- Requires manual setup and configuration for optimal use
Code Examples
- Creating a new Org-roam note:
(org-roam-node-find)
This command opens a completion interface to create or find an existing note.
- Inserting a link to another note:
(org-roam-node-insert)
This function allows you to insert a link to another note in your current buffer.
- Displaying backlinks for the current note:
(org-roam-buffer-toggle)
This toggles the visibility of the Org-roam buffer, which shows backlinks and other metadata.
Getting Started
To get started with Org-roam, follow these steps:
- Install Emacs and set up Org-mode
- Install Org-roam using your preferred package manager (e.g., use-package)
- Add the following configuration to your Emacs init file:
(use-package org-roam
:ensure t
:custom
(org-roam-directory (file-truename "/path/to/org-files/"))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-graph)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture))
:config
(org-roam-db-autosync-mode))
- Restart Emacs or evaluate the configuration
- Start creating notes with
M-x org-roam-node-find
Competitor Comparisons
Another piece of your extended mind
Pros of Promnesia
- Supports a wider range of data sources, including web browsing history, PDFs, and various note-taking apps
- Offers a browser extension for seamless integration with web browsing
- Provides a unified interface for searching and exploring connections across different data sources
Cons of Promnesia
- Steeper learning curve and more complex setup process
- Less integrated with Emacs ecosystem compared to Org-roam
- Requires additional configuration for optimal performance with large datasets
Code Comparison
Promnesia (Python):
from promnesia.common import Visit, Loc
from datetime import datetime
def index() -> Iterable[Visit]:
yield Visit(
url='https://example.com',
dt=datetime.now(),
context='Example visit',
locator=Loc.file('example.txt')
)
Org-roam (Emacs Lisp):
(setq org-roam-directory "~/org-roam")
(setq org-roam-completion-everywhere t)
(org-roam-db-autosync-mode)
(org-roam-setup)
Both projects aim to enhance personal knowledge management, but they take different approaches. Promnesia focuses on integrating various data sources and providing a unified interface, while Org-roam is more tightly integrated with the Emacs ecosystem and the Org-mode format.
A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: http://trello.com/b/8txSM12G/roadmap
Pros of Logseq
- User-friendly interface with a graphical editor, making it more accessible for non-technical users
- Built-in graph view for visualizing connections between notes
- Cross-platform support (desktop and mobile) with offline functionality
Cons of Logseq
- Less flexible and customizable compared to Org-roam's Emacs-based system
- Steeper learning curve for advanced features and queries
- Limited integration with external tools and workflows
Code Comparison
Org-roam (Emacs Lisp):
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/org-roam")
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n i" . org-roam-node-insert)))
Logseq (ClojureScript):
(ns logseq.graph-parser.mldoc
(:require [logseq.graph-parser.mldoc.block :as block]
[logseq.graph-parser.mldoc.inline :as inline]))
(defn parse [content]
(let [blocks (block/parse content)
inlines (inline/parse content)]
{:blocks blocks :inlines inlines}))
The code snippets demonstrate the configuration for Org-roam in Emacs and a parsing function in Logseq. Org-roam's setup is more concise, while Logseq's code shows its ClojureScript-based parsing approach.
The personal knowledge management (PKM) tool that grows as you do!
Pros of Dendron
- Cross-platform compatibility (VS Code extension)
- More extensive hierarchical note organization
- Built-in publishing and sharing features
Cons of Dendron
- Steeper learning curve
- Less integrated with Emacs ecosystem
- Requires VS Code as the primary editor
Code Comparison
Dendron (JavaScript):
export function createNoteLink(note: Note, alias?: string): string {
const noteName = note.fname;
return alias ? `[[${noteName}|${alias}]]` : `[[${noteName}]]`;
}
Org-roam (Emacs Lisp):
(defun org-roam-node-insert (node &optional template)
(let ((title (org-roam-node-title node))
(id (org-roam-node-id node)))
(insert (org-link-make-string
(concat "id:" id)
(or title id)))))
Both projects aim to enhance note-taking and knowledge management, but they cater to different ecosystems. Dendron offers a more structured approach with hierarchical organization, while Org-roam integrates seamlessly with the Emacs environment. Dendron's cross-platform nature and publishing features make it more accessible to a wider audience, but Org-roam's tight integration with Org-mode and Emacs provides a powerful workflow for dedicated Emacs users.
A personal knowledge management and sharing system for VSCode
Pros of Foam
- Built for Visual Studio Code, leveraging its extensive ecosystem and familiarity
- Supports multiple file formats (Markdown, plain text, etc.)
- Easier setup and configuration for users new to note-taking systems
Cons of Foam
- Less mature and feature-rich compared to Org-roam
- Lacks the power and flexibility of Org-mode syntax
- Smaller community and fewer extensions/plugins available
Code Comparison
Org-roam (Emacs Lisp):
(use-package org-roam
:ensure t
:custom
(org-roam-directory "~/org-roam")
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)))
Foam (JavaScript):
// No specific code setup required
// Foam is primarily configured through VS Code settings
// and markdown files in the .foam directory
Both Org-roam and Foam are powerful note-taking and knowledge management tools, but they cater to different user bases. Org-roam is deeply integrated with Emacs and Org-mode, offering a highly customizable and feature-rich experience for users familiar with this ecosystem. Foam, on the other hand, provides a more accessible entry point for users comfortable with Visual Studio Code and Markdown, sacrificing some advanced features for ease of use and broader compatibility.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Org-roam

Org-roam is a plain-text knowledge management system. It brings some of Roam's more powerful features into the Org-mode ecosystem.
Org-roam borrows principles from the Zettelkasten method, providing a solution for non-hierarchical note-taking. It should also work as a plug-and-play solution for anyone already using Org-mode for their personal wiki.
- Private and Secure: Edit your personal wiki completely offline, entirely in your control. Encrypt your notes with GPG. Take lasting notes in plain-text.
- Networked Thought: Connect notes and thoughts together with ease using backlinks. Discover surprising and previously unseen connections in your notes with the built-in graph visualization.
- Extensible and Powerful: Leverage Emacs' fantastic text-editing interface, and the mature Emacs and Org-mode ecosystem of packages.
- Free and Open Source: Org-roam is licensed under the GNU General Public License version 3 or later.
Installation
Down below you will find basic installation instructions for how to quickly
install org-roam
using various environments for various purposes. For more
detailed information, please read the manual.
Using package.el
Toggle instructions
You can install org-roam
from MELPA or MELPA
Stable using package.el
:
M-x package-install RET org-roam RET
Using straight.el
Toggle instructions
Installation from MELPA or MELPA Stable using straight.el
:
(straight-use-package 'org-roam)
Or with use-package
:
(use-package org-roam
:straight t
...)
If you need to install the package directly from the source repository, instead of from MELPA, the next sample shows how to do so:
(use-package org-roam
:straight (:host github :repo "org-roam/org-roam"
:files (:defaults "extensions/*"))
...)
If you plan to use your own local fork for the development and contribution, the next sample will get you there:
(use-package org-roam
:straight (:local-repo "/path/to/org-roam-fork"
:files (:defaults "extensions/*")
:build (:not compile))
...)
Using Doom Emacs
Toggle instructions
Doom's :lang org
module comes with support for org-roam
, but it's not
enabled by default. To activate it pass +roam2
flag to org
module in your
$DOOMDIR/init.el
(e.g. (org +roam2)
), save the file and run doom sync -u
in your shell.
To provide better stability, Doom pins the package to a specific commit. If you
need to unpin it (not recommended doing that, request Doom to bump the package
instead) use the next in your packages.el
:
(unpin! org-roam)
If for some reasons you want to use a different recipe for org-roam
, you can
use the next form in your packages.el
to install the package from a recipe
repository (e.g. MELPA):
(package! org-roam)
You can pass :pin "commit hash"
to pin the package to a specific commit.
With the next sample you can install the package directly from the source repository:
(package! org-roam
:recipe (:host github :repo "org-roam/org-roam"
:files (:defaults "extensions/*")))
And if you plan to use your own local fork for the development or contribution, the next sample will get you there:
(package! org-roam
:recipe (:local-repo "/path/to/org-roam-fork"
:files (:defaults "extensions/*")
:build (:not compile)))
Without a package manager
Toggle instructions
To install the package without using a package manager you have the next two options:
- Install the package by cloning it with
git
from the source repository. - Or install the package by downloading the latest release version.
In both of the cases you will need to ensure that you have all the required dependencies. These include:
- dash
- f
- s
- org (9.6 is the minimum required version!)
- emacsql
- magit-section
- filenotify-recursive
After installing the package, you will need to properly setup load-path
to the
package:
(add-to-list 'load-path "/path/to/org-roam/")
(add-to-list 'load-path "/path/to-org-roam/extensions/")
After which you should be able to resolve (require 'org-roam)
call without any
problems.
Org-roam also comes with .texi
files to integrate with Emacs' built-in Info
system. Read the manual to find more details for how to install them manually.
Configuration
Here's a very basic sample for configuration of org-roam
using use-package
:
(use-package org-roam
:ensure t
:custom
(org-roam-directory (file-truename "/path/to/org-files/"))
:bind (("C-c n l" . org-roam-buffer-toggle)
("C-c n f" . org-roam-node-find)
("C-c n g" . org-roam-graph)
("C-c n i" . org-roam-node-insert)
("C-c n c" . org-roam-capture)
;; Dailies
("C-c n j" . org-roam-dailies-capture-today))
:config
;; If you're using a vertical completion framework, you might want a more informative completion interface
(setq org-roam-node-display-template (concat "${title:*} " (propertize "${tags:10}" 'face 'org-tag)))
(org-roam-db-autosync-mode)
;; If using org-roam-protocol
(require 'org-roam-protocol))
Note that the file-truename
function is only necessary when you use symbolic
link to org-roam-directory
. Org-roam won't automatically resolve symbolic link
to the directory.
Getting Started
David Wilson of System Crafters has produced an introductory video that covers the basic commands:
Getting Help
Before creating a new topic/issue, please be mindful of our time and ensure that it has not already been addressed on GitHub or on Discourse.
- If you are new to Emacs and have problem setting up Org-roam, please ask your question on Slack, channel #how-do-i.
- For quick questions, please ask them on Slack, channel #troubleshooting.
- If something is not working as it should, or if you would like to suggest a new feature, please create a new issue.
- If you have questions about your workflow with the slip-box method, please find a relevant topic on Discourse, or create a new one.
Knowledge Bases using Org-roam
Contributing
To report bugs and suggest new feature use the issue tracker. If you have some code which you would like to be merged, then open a pull request. Please also see CONTRIBUTING.md.
License
Copyright © Jethro Kuan and contributors. Distributed under the GNU General Public License, Version 3.
Top Related Projects
Another piece of your extended mind
A privacy-first, open-source platform for knowledge management and collaboration. Download link: http://github.com/logseq/logseq/releases. roadmap: http://trello.com/b/8txSM12G/roadmap
The personal knowledge management (PKM) tool that grows as you do!
A personal knowledge management and sharing system for VSCode
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot