Skip to content

Roam Research

What it is

Roam Research is a "note-taking tool for networked thought." It popularized the concept of bi-directional linking and a non-hierarchical, "graph-based" approach to personal knowledge management (PKM). By July 2026, it serves as a robust engine for personal knowledge graphs that integrate with frontier AI models via the MCP 3.0 Task Protocol, enabling agentic reasoning across complex webs of information.

What problem it solves

Traditional folder-based note-taking systems often force users to categorize information prematurely. Roam allows for organic growth of knowledge by connecting ideas via [[links]] and #tags, creating a web of interrelated concepts where "the graph is the file system." This enables discovery of non-obvious connections between disparate research points.

Where it fits in the stack

AI & Knowledge. It serves as a primary source of unstructured personal data that can be used for building personal knowledge graphs or providing high-signal context for RAG systems.

Typical use cases

  • Research Synthesis: Connecting disparate notes from books, articles, and lectures.
  • Daily Logging: Using the "Daily Notes" page as a scratchpad that automatically links to project pages.
  • Zettelkasten: Implementing a permanent note system for long-term thinking.
  • Recursive Task Management: Managing nested tasks that reference specific research blocks.
  • Agentic Knowledge Retrieval: Using an agent to traverse the graph and synthesize answers from multiple blocks.

Strengths

  • Bi-directional Linking: Automatically shows "unlinked references," surfacing hidden connections.
  • Block-level Granularity: Every paragraph (block) is a first-class citizen with a unique ID, allowing for block embedding and referencing.
  • Fluid Interface: Encourages frictionless entry of information without worrying about "where it goes."
  • Programmability: Powerful "Roam/js" and "Roam/css" extensions allow users to build custom functionality.
  • AI Integration: Native support for Gemma 3, Claude 4.8 Opus, and GPT-5.5 for graph-wide reasoning.

Limitations

  • Proprietary/Closed Source: Data is stored on Roam's servers (though encrypted graphs are supported).
  • Learning Curve: The "daily notes" first workflow and complex syntax take time to master.
  • Performance: Large graphs can experience lag; search can slow down with 50k+ blocks.
  • Syncing: Mobile-to-desktop syncing can occasionally experience conflicts in high-velocity multi-device setups.

When to use it

  • When you prioritize discovering connections between ideas over strict organization.
  • When your work involves heavy cross-referencing and research synthesis.
  • When you want a platform that can be extended with custom JavaScript.
  • When you need a knowledge base that "thinks" like a graph.

When not to use it

  • When you require a local-first, fully open-source solution (use Logseq or Obsidian instead).
  • When you need a simple, folder-based filing system.
  • When high-performance mobile access is a dealbreaker (Roam's mobile app is primarily a wrapper).

Getting started

Users can quickly get started with Roam using its core syntax: - [[Page Name]]: Creates or links to a page. - #Tag: Creates or links to a page (shorthand for [[Tag]]). - ((Block ID)): References a specific block. - {{[[TODO]]}}: Creates a checkbox. - {{[[query]]: {and: [[Task]] {not: [[DONE]]}}}}: Creates a dynamic query. - MCP Setup: Install the Roam MCP server to allow tools like Claude Code to query your graph.

CLI examples

Using community-developed CLI tools like roam-to-git, you can automate the backup of your graph to a local Git repository in Markdown format.

# Example backup script
roam-to-git ./my-roam-backup --graph MyGraph --token $ROAM_TOKEN

# Listing backup contents
ls -R ./my-roam-backup/markdown/

API examples

The Roam Alpha API allows for programmatic interaction with graphs, essential for syncing homelab data or automated agents.

Writing Blocks

import requests
import json

GRAPH_NAME = "my-research-graph"
API_TOKEN = "your_roam_api_token"

def create_block(location_id, text):
    url = f"https://api.roamresearch.com/v1/alpha/graph/{GRAPH_NAME}/write"
    payload = {
        "action": "create-block",
        "location": {"parent-uid": location_id, "order": 0},
        "block": {"string": text}
    }
    headers = {
        "Authorization": f"Bearer {API_TOKEN}",
        "Content-Type": "application/json"
    }
    response = requests.post(url, headers=headers, json=payload)
    return response.json()

# Example: Push a home automation alert to Roam
create_block("daily-notes-uid", "[[Home Automation]] Alert: Front door opened at 14:00")

Graph Analysis (JSON Export)

Roam allows for full graph exports in JSON format, which can be analyzed by local LLMs like Llama 4 Maverick.

[
  {
    "title": "Project Alpha",
    "uid": "proj-alpha-123",
    "children": [
      {
        "string": "Key research finding [[Source-1]]",
        "uid": "abc-123",
        "children": [
            { "string": "Supporting data point", "uid": "def-456" }
        ]
      }
    ]
  }
]

Sources / references

Contribution Metadata

  • Last reviewed: 2026-07-21
  • Confidence: high