A delightfully fun and powerful collection of power user tools for Roam


You could use the Copy Extension button below to individually install this extension. To install, just paste anywhere in your Roam graph and click "Yes, I Know What I'm Doing".

Manual Installation

If the extension doesn't work after using the copy extension button above, try installing manually using the instructions below.

First create a block with the text {{[[roam/js]]}} on any page in your Roam DB. Then, create a single child of this block and type three backticks. A code block should appear. Copy this code and paste it into the child code block in your graph:

var existing = document.getElementById("roamjs-roam42-main");
if (!existing) {
  var extension = document.createElement("script");
  extension.src = ""; = "roamjs-roam42-main";
  extension.async = true;
  extension.type = "text/javascript";

Finally, click "Yes, I Know What I'm Doing".


Roam42 is the ultimate swiss army knife of the Roam power user. Roam42 makes it easy and fast to navigate and manipulate Roam.

Documentation was migrated from RoamHacker's Personal Roam. On it, you could find other helpful Roam-related resources an interesting content that he's collected notes on.

Be sure to check out the Update Log for the latest new functionality and bug fixes.


On 04/30/2021, Roam42 changed owners, and is now maintained by RoamJS. To migrate, simply replace the link in your Roam42 installation with the new link. The video below simply walks through these steps.


  • workBench - workBench (wB for short) is a work bench for the Roam "handyman" or "hacker". Although Intended for serious users looking to push Roam to new places by quickly navigating, manipulating and hacking the Roam environment, it also has some resources for anyone comfortable with keyboard application navigation. Roam is the blocks, workBench is your chisel.

  • SmartBlocks - SmartBlocks makes it easy to reuse text in a dynamic way in Roam. It can be compared to other snippet/template insertion tools like TextExpander and Alfred. However, SmartBlocks just doesn't insert templates, it also lets add commands that make the text dynamic.

  • Live Preview - See live and editable previews of page links underneath your mouse cursor. Allows you to stay in the context of your work without having to navigate to another page to see its content. Note: this feature is off by default and needs to be enabled to use it. Please see Live Preview for more info.

  • Daily Note Popup - Daily notes is a second window that you can toggle open and close quickly to get at your daily notes page. It is often referred to as the "Roam within your Roam." Note: this feature is off by default and needs to be enabled to use it. Please see Daily Note Popup for more info.

  • Date NLP - Roam42 can convert human readible dates into Roam42 formatted dates

  • Jump Navigation - Keyboard shortcuts for interacting with the Roam user interface, for example copying the block reference for the current block, expanding and collapsing the page outline and many many more.

  • Deep Nav - Advanced keyboard navigation of Roam using the keyboard. Can jump to any block in a page or sidebar.

  • Privacy Mode - This feature Redacts confidential information when showing your Roam database to others or while working in an area with prying "eyes".

  • Roam42 and Roam Tutorials - Learn how to use Roam42 features and Roam basics right from within Roam. This approach allows you to watch and learn.

  • Dictionary - Rich dictionary at your fingertips right inside of Roam without having to leave Roam

  • Strikeout text shortcut - Shortcut key for striking out text

Disabling Features

Roam42 comes with a ton of features. Having them all enabled by default could have negative performance implications depending on the size of your graph. To disable a given feature, go to the Roam42 installation in your graph and add an array called window.disabledFeatures to the top of the code block, adding all the features you'd like to disable. These are all the available options:

window.disabledFeatures = [


By default, Roam42 is disabled on mobile as most of its features are catered towards desktop usage. If you would like to enable Roam42 on mobile anyway, add this line to the top of your roam/js code block:

window.loadRoam42InMobile = true;

Module Loading

Roam42 attempts to load all of its modules at once right when you load Roam. When it's finished, it fires a custom roamjs:roam42:loaded event to the document.body to alert when it's finished. Any developer dependent on Roam42 utilities could listen for this event before executing their own logic:

document.body.addEventListener('roamjs:roam42:loaded', (e) => {
  // do roam42 dependent things here


This extension is brought to you by RoamJS! If you are facing any issues reach out to or click on the chat button on the bottom right.

If you get value from using this extension, consider sponsoring RoamJS by clicking on the button below!

A special thanks to those who's contributions also helped make this extension possible:

George Roukas 💵
George Roukas 💵
John Haugaard
John Haugaard
Tobias Harmes
Tobias Harmes

Other Extensions