I first used Roam six years ago, in late 2020. Around the same time — just after GPT-3 came out — I wrote a post, The Social Information Platform Of the Future, about how the world was going to change because of GPT-n models. I was mostly right, surprisingly — and wrong in some interesting ways.

And change the world has. Roam is a great thinking environment, and I imagined it might even grow into the substrate for the whole web, a la Xanadu. Reality fell way short. But I’m still as excited about it as ever — and largely because of those same GPT-n models- I think Roam has the potential to be the best shared thinking substrate for agents & humans.

It was a fun exercise to write this roadmap, especially now as an outsider (I used to work at Roam for the better part of a year), and because of Roam’s stance on roadmaps :) My hope is I’ll either build plugins for some of these, or entice the team to build them themselves…

Improving what’s already there

  1. Better affordances for higher-level visual components
    • Roam has visual components like table and kanban that are built from block primitives. With the recent tables update, you don’t need to write them by hand anymore; you can sort columns, etc.
      • Kanbans could use that same kind of love:
        • Empty tables currently look like this:
        • Whereas empty kanbans look like this:
        • Some problems:
          • Kanban items don’t capture nested blocks, only cards (for instance, a block nested inside a card is invisible).
          • Kanbans are not full-width abstractions.
          • Keyboard navigation is not fully implemented — can’t jump to the next column easily, or select the card via Esc, or the whole column.
          • Agents don’t have high-level affordances for most components like table/kanban either, and instead have to work at the block level.
          • Lots of kanban affordances missing: sorting, moving columns around, filtering/search on the kanban (which is a specific version of a more general feature that should exist: block-level persistent filters).
      • so could queries :(
  2. Better sharing of Roam content, specifically ability to generate static sites & better SEO for Roam graph sharing.
    • I bet that the Roam team can now very cheaply implement static site generation + SEO improvements by throwing a GPT-5.5 / Fable type agent at it and just asking it to loop until the behavior mostly replicates the web app. 90% of why I publish my content on quartz (and use Obsidian) is because of this. There have been community attempts in the past but nobody has built a seamless, up-to-date version afaik.
  3. Improvements to the graph view
    • There are too many low hanging fruits here — it would take a whole day to write them up — but the graph view can be much much more useful.
      • Semantic layout, not just by explicit links.
        • Now that we have vector embeddings, to some extent you can lay out by similarity and overlay links. You can also then color clusters by topic or similar…
        • here’s an example of a graph view I built for Twitter exports, to give you a taste:
      • Time as a graph axis.
      • Full search/filter/query on the graph view.
      • Level of detail / multiscale / zoom.
    • For reference this is what it looks like right now:
  4. Make higher affordances composable
    • Can we have first-class fractal kanban support?
    • Can kanbans/tables/queries be taken as inputs for other components?
  5. Better exports
    • Roam users often write content outside of the page they’re writing about. For instance, I might write about [[Charles Darwin]] on a page named [[Evolution]]. But when you export your graph as markdown, there would be nothing when you open Charles Darwin.md.
      • The obvious solution here is to append a section in each page export called references that could at least supply the number of mentions, the mentioning pages and block text, etc.
    • You could have an export preview; export as pdf, a native Print button, etc…
  6. Unify query, filter, and search
    • The filter experience in general could be improved by quite a bit.
    • If you think about it, these are very similar experiences and often need to be used in conjunction across similar surfaces.
      • What’s the difference?
        • A query is just an instantiated version of a search you can reuse across your graph + lets you do logical search operators, but it doesn’t let you do full-text search:
          [[Important]] AND [[Project: Work]]
          
        • A search is a generative view of block candidates mostly based off text/semantic search — right now you can’t do query operations like or/and.
        • Filter, well, filters any list of blocks — across varying types of scopes (everywhere, only pages, linked refs, etc). But it gives you the pages to filter upfront (versus having to think what to query for), and you can persist this lens sometimes.
      • Well, these should be the same thing! I should be able to do logical operators in a search! I should be able to temporarily filter a search! I should be able to do substring search once I define what pages or blocks I’m looking for!
  7. Update that goddamn website
    • It needs a revamp to make things clearer. Roam is not a note-taking tool, though that was how it was bootstrapped. And if we had static site generation, the help/developer graphs would actually be easily findable, etc.
  8. Better TODOs
    • Add a TODONT state (I often have TODOs I don’t actually do in the end)? Record when it was marked done? Implement better deferrals? Add the ability for recurring TODOs e.g. {{[[TODO]]: recurs: [[weekly]]}} or similar?
  9. Implement Move block to... — pretty self-explanatory.
  10. Typing 1. should auto-switch to the numbered list block view.
    • I don’t care that technically the ‘numbered list’ is the parent block of where I type 1. — it should trigger! Add a ghost parent block, whatever, I don’t care.

Entirely new primitives

Agents & AI chats as first-class citizens

  • Flirt with the idea of Roam being a first-class substrate for knowledge traversed via LLM chats.
    • All of the LLM chat apps suffer from the same problem: information gets lost inside your chats. Roam is uniquely suited to be the substrate inside which these chats happen, and at the same time, where the knowledge can be distilled for knowledge-graph purposes.
      • In other words, both the inputs (chats) and the outputs (artifacts) can live in the same medium.
      • The first step in this direction is probably better chat primitives, as sketched out below.
      • Then, we could have Notion-like AI chats inside Roam. There are community plugins doing this, but honestly, I think this deserves first-class support.
  • Full MCP/CLI support for agents.
    • This is actually almost fully implemented now but I still think it’s important to mention. Agents don’t natively understand Roam, or its work-styles, or its components.
  • Better IDE-like affordances for agents. Roam has roam/js components that let you run code inside the graph — but maybe there are things that can be done so agents can use them better. For instance, a skill doc, better annotations for MCP tools, a semantic search tool for agents, etc…

We need better chat & multiplayer primitives

  • a) We need a chat block view / component.
    • Right now we have comments — which is mostly only a hotkey (Cmd+click the comment button) that instantiates a block structure for the comment via the sidebar.
    • But even just visually it can be made better.
    • You could define a chat that has block-level permissions — so only some people/agents can see or talk in that tree? etc.
  • b) We need a UX for PRs in Roam — proposed blocks — instead of committing them right away.
    • I think with multiplayer and agents, you need a way to see/approve/decline blocks/diffs instead of immediately committing them.
  • c) Better block versioning.
    • AI chat websites have implemented the first production-grade block versioning I’ve seen. Roam had block versions first, but it’s barely usable. It needs more love.

We need better time modeling

  • a) We need a timeline / Google Calendar block view.
    • A large part of Roam’s team and userbase uses interstitial journaling, yet there’s no first-class support for time at that level! It would be very useful to replicate the Google Calendar experience inside a Daily Note:
  • b) Composable time abstractions (hours > day > week > month > year > decade / century).
    • A big problem in Roam is how things get lost, how you can’t see the big picture over time.
    • Right now you have daily notes, but you can’t see or refer to a ‘week’/month/year in general.
    • On the visual side, even a simple masonry layout for the week, or a month-level calendar view, would be great.
  • Implement time throughout search/filters/queries etc — self-explanatory — I can’t say show me all the results for this query from last week, etc…
  • One part of the problem is that this time is simultaneously continuous and discrete — so I suspect some serious math needs to be done here…

Roam as an embeddable medium

  • I think this is not a new idea, but I’ve often wanted to use Roam, the medium, both as input and output elsewhere on the web. For instance:
    • Imagine a form you could embed on websites, that is built on Roam?
    • Embed a ‘Roam sheet’ so you can take notes next to a video.
    • Share scratch notes to a friend.
    • Embed Roam content inside a blogpost.
  • This is more possible now that several of their APIs are in place…

Actual graph traversal and hypergraph features

  • Edges can be a lot more powerful. Right now you can’t directly manipulate them in Roam. I think this is where attributes are headed roughly, but I could be wrong…
  • There’s also no way to manipulate ‘clusters’ or look at graphs from higher levels…

P.S. This post has nothing to do with Notion. I enjoy using their product and they have many talented people there including the amazing Geoffrey Litt. I just thought it was a funny title.