Convert Figma logo to code with AI

org-roam logoorg-roam

Rudimentary Roam replica with Org-mode

5,640
483
5,640
264

Top Related Projects

Another piece of your extended mind

34,358

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

6,844

The personal knowledge management (PKM) tool that grows as you do!

15,635

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

  1. Creating a new Org-roam note:
(org-roam-node-find)

This command opens a completion interface to create or find an existing note.

  1. 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.

  1. 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:

  1. Install Emacs and set up Org-mode
  2. Install Org-roam using your preferred package manager (e.g., use-package)
  3. 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))
  1. Restart Emacs or evaluate the configuration
  2. 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.

34,358

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.

6,844

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.

15,635

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

Org-roam GitHub Release MELPA License GPL 3

Org-roam Logo

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.

Org-roam Screenshot

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:

  1. Install the package by cloning it with git from the source repository.
  2. 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 Started with Org Roam - Build a Second Brain in Emacs

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.