Skip to content

Importing from Roam Research

When to use

When a user imports a Roam JSON export (Export All → JSON — unzip it first and pass the .json). You own it end to end. Read limestone-vault-conventions, working-with-collections, and importing-from-obsidian first.

Run the import (one tool call)

Call limestone_import_notebook(path, collection_name) with the .json. Returns the usual summary + unconverted list.

How the import works (what the tool does)

Roam is a graph of pages, each an outline of blocks:

Roam Limestone
each page a record (title = the page title)
the block tree nested Markdown - bullets (headings preserved)
#tag, #[[multi word]] real note tags
[[Page]] links left as-is (they resolve to the imported pages)
create-time / edit-time (epoch ms) Created / Updated date properties

Finalizing (your job)

The importing-from-obsidian playbook applies. Roam-specific:

  1. Block references ((uid)) don't resolve in Limestone — replace with a [[Page]] link or inline the referenced text where it matters.
  2. Images are remote Firebase URLs, left as links (a warning counts them). Download the important ones and re-attach with attaching-a-file.
  3. Daily notes import as normal pages titled by date; group or tag them if useful.

Evolving this skill

If a Roam structure recurs badly, work out the mapping and propose an update here or to importers/roam.py. Keep the two in sync.