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:
- Block references
((uid))don't resolve in Limestone — replace with a[[Page]]link or inline the referenced text where it matters. - Images are remote Firebase URLs, left as links (a warning counts them). Download
the important ones and re-attach with
attaching-a-file. - 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.