# Roam Research Help & User Documentation — full export
> Complete markdown export of Roam Research's official help graph
> (https://roamresearch.com/#/app/help): the product's user documentation.
> Exported 2026-07-03T16:36:48.284Z. Notation: [[Page]] = Roam Research page link, ((uid)) refs are resolved inline.
> Developer/API documentation is exported separately: https://roamdocs.fyi/llms-full.txt
## Table of contents
- Welcome to Roam
- Change Log
- FAQ
- White Paper
- Privacy Policy
- Terms and Conditions
- Commentarii Roamani
- roam/templates
- Diagram
- Roam-specific :q additions
- Themes
- What You Can't Say
- Block References
- Formatting
- Navigation
- Beating the Averages
- Kanban
- Coaching
- JSON Schema
- Examples of :q query blocks
- Apple Shortcuts/Speak to Roam
- Block Context Menu
- Features
- Pipedream Workflows
- TODO/DONE
- Blocks
- Graphs and Settings
- Search
- Why you can't say
- Callouts
- Zapier Integration
- Encrypted Graphs
- Mermaid Diagrams
- Right Sidebar
- / Commands
- Security
- Query
- Courses
- Updating Roam
- Create API Tokens
- Articles
- Developer Documentation
- Tag Styles
- Task Management
- roam/render
- Filter
- Welcome to Roam v2
- Pages
- Zettelkasten
- All Pages
- Graph Overview
- Pomodoro timer
- Hosted Graph
- Daily Notes
- Community
- Extensions
- Beginner's Guide
- Precise Links
- Templates
- Audio Player
- Roam Help
- roam/css
- Notable Graphs
- Miscellaneous
- Calculator
- Personal CRM
- News and Press
- Table
- Project Management
- Video Embed
- Upload Files
- Workflows
- Install Roam
- Longform writing
- Mentions
- Images
- Journaling
- Research
- Export
- Long Videos
- Date picker
- Attributes
- Bidirectional linking
- Studying
- Meeting notes
- Code Block
- Page References
- Scripture Study
- Sharing
- Word count
- Cancelling your membership during your free trial
- Spanish
- Console Logs
- Block Search
- Roam Depot
- Character count
- Why Roam?
- Chinese
- Current time
- Adding soft line breaks in a block
- Import
- Version Control
- Kids
- Left Sidebar
- Wiki
- Today
- Slider
- Russian
- Numbered List Extension
- Encrypted Block
- Tomorrow
- Tags
- Alexander Rink
- Korean
- Latex
- Key Commands
- Roam Slack
- Linked References
- Release notes (daily-note updates)
---
# Welcome to Roam
- Getting started ℹ️ (hint... shift-click the links in blue below 😉) #.box
- [Show me some video tutorials on where to begin]([[Beginner's Guide]])
- **[How to link your notes]([[Bidirectional linking]])**
- **[How to format your text]([[Formatting]])**
- **[How to work with several notes at a time with the right sidebar]([[Right Sidebar]])**
- Type `/` into a block to check out features available in the [[/ Commands]] menu
- 
- > Here are some amazing free courses from our [community]([[Community]])
- [[Workflows]]
- Roam is a tool geared for [[Writing]], [[Research]], and [[Studying]]
- It can also be used for [task]([[Task Management]]) and [project management]([[Project Management]]) or even as a [[Personal CRM]]
- Roam is highly flexible and our community discovers new [[Workflows]] it can support every day
- Still have questions?
- Check out [this page]([[Features]]) to see an overview of all the **features** available in Roam
- You should also join our [Slack](https://join.slack.com/t/roamresearch/shared_invite/zt-xy0pd90x-c0KDkgh1BeLKyi0iUlJ1CA), where our amazing community shares resources, workflows, tips, tricks, and more
- If you want to learn more about why Roam is __different__, see [[Why Roam?]]
- And if you really want to geek out, you should read our [[White Paper]]
---
# Change Log
### [Updating Roam]([[Updating Roam]])
### **New Changes**
- [[July 2nd, 2026]]
- [[Quality of Life Improvements]]
- Added copy blocks and delete blocks to the single block multi select menu
- Added saving code block folds
- [[Bug Fixes]]
- Fixed export page to respect filters
- Fixed copy to respect filters
- [[June 30th, 2026]]
- [[Roam Depot Extensions]]
- **Roam Alias Finder**
- Find the places you __meant__ to link but never did. Alias Finder scans your graph for plain‑text mentions of a page's existing aliases and lets you turn each one into a proper link with a single click. No alias list to maintain, no setup.
- [🔗](https://raw.githubusercontent.com/wireframe/roam-alias-finder/main/screenshots/screenshot.png)
- **Why**
- Roam aliases let you write `[slip-box]([[Zettelkasten]])` so natural prose still links to the right page. But once you've used an alias a few times, older notes are full of the same words sitting as plain text, invisible to backlinks. Finding and fixing them by hand is tedious.
- Alias Finder learns the aliases you already use for a page and surfaces every unlinked mention across the graph, so you can wire them up in seconds.
- **What it does**
- A Find unlinked aliases button appears at the bottom of every real page, right below Roam's Unlinked References section. It only shows on real pages — never on daily notes.
- Click it and Alias Finder:
- Reads the page's existing aliases — every `[text]([[ThisPage]])` already in your graph — and uses that text as the search terms. Nothing to configure.
- Scans the whole graph for unlinked, plain‑text occurrences of those terms.
- Groups the results by alias under collapsible, alphabetically‑sorted headers with a match count, and highlights the matched text in each block.
- Lets you link any match with one click — it wraps the text as `[text]([[ThisPage]])`, preserving your original casing, and removes the row.
- **Match rules**
- Matching is deliberately careful, because it writes to your graph:
- Whole words only — `OKRS` never matches inside `weorks`.
- Case‑insensitive — `Zettel` and `zettel` both match the alias `zettel`; your original casing is kept when linking.
- Skips text that's already linked — occurrences inside `[[page links]]`, `((block refs))`, `#tags`, and existing `[alias]([[page]])` links are ignored.
- Skips URLs — matches inside `http(s)://…` and `www.…` are ignored.
- Skips noise — single‑character aliases (`*`) and footnote‑style numbers (`1`, `2`, …) are never used as search terms.
- [[June 13th, 2026]]
- [[Roam Depot Extensions]]
- **🎧 Audio Feedback — Roam Research Extension**
- Adds subtle, synthesized audio cues to your Roam workflow. Every block action — checking a TODO, collapsing a branch, navigating to a new page — gets a sound that confirms the action without interrupting your flow.
- > 🚀 Zero Dependencies: Built entirely on the native browser Web Audio API. No external libraries, no bloated bundles. Sounds are generated mathematically on the fly.
- **Demo**
- **Themes**
- Select your theme in Settings → Extensions → Audio Feedback → Sound Theme.
- {{[[table]]}}
- Theme
- Character
- 🌿 Zen
- Soft sine tones that dissolve as quickly as they appear. Designed to confirm without interrupting.
- 👾 Retro
- Square-wave pulses with Game Boy-era frequencies. Every action lands with a satisfying, deliberate click.
- 💫 Halo
- Layered FM bells with a floating upper harmonic.
- 🎛 Custom
- Your sounds, your rules. Upload any audio file to your Roam graph and paste the Firebase URL to replace any event sound.
- **Events**
- {{[[table]]}}
- Event
- Trigger
- TODO Done
- Checking a TODO checkbox → DONE
- Collapse
- Collapsing a block that has children
- Expand
- Expanding a block that has children
- Indent
- Indenting a block (Tab)
- Outdent
- Outdenting a block (Shift+Tab)
- Navigate
- Zooming into a block or changing page
- Sidebar Open
- Opening a new item in the right sidebar
- **Settings Reference**
- {{[[table]]}}
- Setting
- Description
- Default
- Enable Audio Feedback
- Master on/off switch
- On
- Master Volume
- 0.0 to 1.0
- 0.4
- Sound Theme
- Zen · Retro · Halo · Custom
- Zen
- TODO Sounds
- Toggle checkbox event sounds
- On
- Navigation Sounds
- Toggle zoom and sidebar sounds
- On
- Hierarchy Sounds
- Toggle collapse, expand, indent, outdent sounds
- On
- **Command Palette**
- Three commands are available via `Cmd+P` (or `Ctrl+P`):
- Audio Feedback: Toggle On/Off — master switch without opening settings
- Audio Feedback: Volume Up — increases master volume by 0.1
- Audio Feedback: Volume Down — decreases master volume by 0.1
- Audio Feedback: Next Theme — cycles Zen → Retro → Halo → Zen (Custom is excluded from cycling; select it manually in settings)
- **Custom Sounds**
- Custom theme lets you replace any event sound with your own audio file.
- **How to upload a sound to your Roam graph**
- Open any page in Roam
- Type `/Upload file` and select your `.wav` or `.mp3`
- Once uploaded, right-click the file attachment → Copy link
- The URL will look like: `https://firebasestorage.googleapis.com/...`
- Paste that full URL into the corresponding field in Settings → Audio Feedback → CUSTOM SOUND URLs
- Switch theme to Custom
- **Notes on Custom playback**
- First play has a brief load delay — the extension fetches and decodes the audio file on first use. Every subsequent play of the same URL is instantaneous (the buffer is cached for the session).
- Blank URL = silence — if a URL field is empty, that event produces no sound. This is intentional. You can mix custom sounds for some events and silence for others.
- URL must include the `?alt=media&token=...` suffix — without it, Firebase returns a redirect rather than the raw audio file and playback will fail silently.
- Test URL (courtesy of Adam Krivka): `https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2FMyelin%2F-J1q4HZsEl.wav?alt=media&token=34ab3de0-1b43-4361-8c7e-141c1925011b`
- **Physics Bridge**
- All three synthesized themes (Zen, Retro, Halo) are aware of your block's position in the hierarchy. Sounds shift subtly based on:
- Depth — how many levels deep the block is nested. Deeper blocks produce slightly higher pitched, shorter sounds.
- Mass — how many children the block has. Heavier blocks produce slightly lower pitched, longer sounds.
- This means the same action sounds meaningfully different depending on where it occurs in your outline — without ever being distracting.
- [[June 11th, 2026]]
- [[Bug Fixes]]
- Fixed a bug where desktop links for offline and hosted graphs with the same name would not open a new window if the other was open, as in `roam://#/app/graph` and `roam://#/offline/graph`
- Added a new section to our privacy policy to be in compliance for our soon to be released remote MCP
- [[June 10th, 2026]]
- [[Bug Fixes]]
- Fixed search result highlighting to prioritize matching full phrases and to handle accented characters
- [[June 9th, 2026]]
- [[Bug Fixes]]
- Fixed large pastes and deletes causing thousands of unsynced changes
- Pasting tons attributes can still cause this but that will be fixed soon as well
- [[June 2nd, 2026]]
- [[Roam Depot Extensions]]
- **Oura Ring to Roam**
- Roam Depot extension that syncs Oura Ring data into a Roam graph as editable, queryable blocks with compact visual summaries.
- **What It Does**
- Syncs Sleep, Readiness, Activity, Vitals, My Health, Workouts, and Tags from the Oura API.
- Stores canonical history under a configurable `[[Oura Ring]]` page, one Roam day root per Oura day.
- Adds existing Daily Notes embeds for each day's `Daily summary` block without creating missing Daily Notes.
- Renders disposable visual components over Roam source blocks: daily sleep-first cards, hypnograms, contributor bars, HR/HRV trends, activity load, temperature, oxygen, stress, and weekly review.
- Keeps headline metrics queryable as Roam attributes such as `Sleep Score::`, `In bed at::`, `Out of bed at::`, `Readiness Score::`, `Activity Score::`, `HRV::`, `Resting HR::`, and `Steps::`.
- **Setup**
- Generate an Oura Personal Access Token at https://cloud.ouraring.com/personal-access-tokens.
- In Roam, open Roam Depot -> Extension Settings -> Oura Ring.
- Paste the token and choose your sync/backfill settings.
- Run Oura: Sync now from the command palette.
- The token is stored in Roam's extension settings for this graph. It is sent only to Oura through Roam's native CORS proxy when syncing.
- **Commands**
- Oura: Sync now fetches the configured window and reconciles the Oura page.
- Oura: Open Oura page opens the canonical store page.
- Slash commands: `/oura today`, `/oura yesterday`, `/oura sleep`, and `/oura callout`.
- [[June 1st, 2026]]
- [[Bug Fixes]] #PDF
- Fixed merging PDF pages into other non PDF pages
- Fixed displaying annotations on rotated PDFs
- Fixed double clicking to select a word, or triple clicking to select an entire line for most PDFs, although some may still have trouble
- [[May 28th, 2026]]
- Add back the nav bar find or create, with some of the UI improvements from the modal redesign
- 
- The modal can still be triggered via the button to open advanced search on the right, or `ctrl-o` to open the preview
- Or you can set a custom hotkey for "Open advanced search" and override the default cmd-u which focuses the navbar search.
- [[May 21st, 2026]]
- [[Quality of Life Improvements]]
- Redesigned the find or create [[Search]] (`cmd/ctrl-u`)
- Page results now show reference counts
- Block results now include paths, improved truncation, and clearer match highlighting
- Added a preview window that can be toggled with `ctrl-o`
- 
- [[May 15th, 2026]]
- [[Quality of Life Improvements]]
- Inline page search `[[]]` now sorts the exact match to the top
- Makes a difference when you have two pages with the same case
- 
- Inline block search `(())` can now search for UIDs if it's an exact match `((yPgg9DUbF))`
- [[Bug Fixes]]
- Fix paste from chatGPT adding extra newlines in bulleted lists
- [[May 5th, 2026]]
- [[Quality of Life Improvements]]
- Added a sort option for `{{table}}`
- 
- Improved drag-and-drop behavior: when dragging an item near the edge of a scrollable container, Roam now automatically scrolls the container so you can continue moving the item without interruption.
- [[Roam Depot Extensions]]
- **History of Today**
- A lightweight Roam Research extension that adds "On this day" buttons at the bottom of the calendar popover. Click a year button to instantly jump to that year's daily notes page.
- [🔗](https://raw.githubusercontent.com/laixintao/roam-research-history-of-today/main/pics/history-of-today.png)
- **Features**
- Shows up to 5 previous years at the bottom of the calendar
- Only displays years that already have a daily notes page — no clutter from empty years
- Buttons show the 2-digit year (e.g. `'25`, `'24`) with a full date tooltip on hover
- Automatically re-injects when the calendar popover is opened
- [[May 4th, 2026]]
- [[Roam Depot Extensions]]
- **Roam Meta Type**
- Typed pages for Roam Research. Add a `Type::` attribute to a page and a chip appears next to the title; click it to open a sidebar panel with the fields you care about for that type.
- **Encouraging Structure for Your Second Brain**
- Roam's freedom as an outline is the whole point. But the people, projects, books, and articles I keep coming back to all have __some__ structure: an email, a status, a due date, an author. Today that structure is invisible — you have to read the page to learn what kind of thing it is, and scan the outline to find the fields that matter.
- `roam-meta-type` keeps the outline. It just makes the structure visible.
- **What it does**
- Unobtrusive pill-shaped chip page identification based on supported `Type::` attribute. Multi-typed pages (`Type:: #Project #Blog`) get one chip per type.
- Click a chip → a panel mounts at the top of Roam's right sidebar with that type's pinned fields, rendered as label/value rows. [🔗](https://github.com/wireframe/roam-meta-type/blob/main/screenshots/panel-project.png)
- Sidepanel is an integrated inline-editor. Click any row → it flips to inline edit mode using Roam's own block editor (autocomplete, page-refs, formatting — all of it). Click any value to flip the row into Roam's block editor. Empty rows render as `—`. Click and the plugin creates the missing block (e.g. `Status:: `) before flipping into edit mode. [🔗](https://github.com/wireframe/roam-meta-type/blob/main/screenshots/inline-edit.png)
- Sidepanel reactively refreshes to updates live: edit `Priority::` directly in the page body, the panel updates without a re-render.
- Configurable types, fields, and accent colors via the Roam settings panel (no source edits required).
- **Configuring types**
- The extension ships with no default types. Open Settings → Meta Type to add your first one.
- The settings tab shows a vertical stack of cards, one per configured type. Each card has:
- Name — the type name. Must match the page-ref in `Type::` blocks (e.g., `Project`).
- Hue and Saturation — HSL components for the chip's accent color (hue 0–360, saturation 0–100; lightness is computed). A small swatch preview updates as you type.
- Fields — comma-separated list of field names (e.g., `Status, Priority, Due, Topics`). Each becomes a row in the sidebar panel.
- A trash button on the right to remove the card.
- Below the cards are Add type (appends a blank card) and Save. Click Save to persist; the extension closes any open panels and re-renders chips with the new config.
- Two settings are not exposed in the UI and remain at their defaults:
- `typePrefix` — the block prefix used to detect typed pages (default `Type::`).
- `flashColor` — the RGB highlight color for the click-flash animation (default `{ r: 16, g: 107, b: 163 }`).
- These are stored in the same JSON value as the types and preserved on every save. Power users who need to change them can edit the underlying setting key directly via Roam's developer tools (key: `types-config` under this extension's settings).
- If the stored JSON is missing or malformed (e.g., from a manual edit gone wrong), the extension falls back to the empty defaults and logs a warning to the browser console.
- **How a page gets typed**
- Add a `Type::` attribute as a top-level block on the page, with one or more `#TypeName` references:
- ```plain text
- Type:: #Project
- Status:: Doing
- Priority:: P1
- Due:: [[April 30th, 2026]]
- Topics:: [[Roam]] [[Productivity]]```
- The plugin reads `Type::`, looks each reference up in the configured types, and renders one chip per known type. Unknown types are silently skipped — no chip, no error.
- [[May 1st, 2026]]
- New version of the **Roam [[Raycast]] extension** is out!
- {{[[video]]: https://www.loom.com/share/998c8bce7ebd4827b3c9e8aec1278621}}
- Do watch the video to understand, but main improvements:
- Better Quick Capture
- you can have templates for capture now and also have a very quick way of capture that I’m calling “instant capture”
- Uses the Append API so you can have “capture groups” inside of pages and can also capture to encrypted graphs
- Better UI IMO where you enter the capture text first and only then select where you want to send it
- Windows support (raycast now supports windows)
- Better text and error messages across the extension
- Since this version is the first one that adds windows support, would particularly appreciate if Windows users put it through the paces and let us know of any bugs or issues
- [[April 27th, 2026]]
- [[Roam Depot Extensions]]
- **Roam Toolkit Vim Mode**
- Standalone Vim-like navigation and editing for Roam Research, extracted from the original Roam Toolkit browser extension.
- [🔗](https://raw.githubusercontent.com/Stvad/roam-vim-navigation/master/media/vim_demo.gif)
- This README summarizes the current functionality, but the authoritative up-to-date shortcut list is in Roam under `Settings -> Extensions -> Roam Toolkit Vim Mode`, where every binding is editable.
- **Current Functionality**
- Normal, insert, and visual-mode style workflows for Roam blocks
- Vim-like navigation within the current panel and across sidebars
- Selection, clipboard, block movement, history, hinting, and Roam-specific editing helpers
- Normal-mode `Tab` / `Shift+Tab` shortcuts for Roam-style indenting and outdenting
- **Default Keybindings**
- Default layout preset is `qwerty`. The Roam settings panel remains the authoritative live list, because every shortcut can be remapped there.
- If you switch `Keyboard Layout` to `colemak`, these defaults change:
- {{[[table]]}}
- Action
- QWERTY
- Colemak
- Select Block Up
- `k`
- `h`
- Select Block Down
- `j`
- `k`
- Select Panel Left
- `h`
- `j`
- Move Block Up
- `Cmd+Shift+K`
- `Cmd+Shift+H`
- Move Block Down
- `Cmd+Shift+J`
- `Cmd+Shift+K`
- Increment Date (layout up key)
- `Ctrl+Alt+K`
- `Ctrl+Alt+H`
- Decrement Date (layout down key)
- `Ctrl+Alt+J`
- `Ctrl+Alt+K`
- Increment Date by a week (layout up key)
- `Ctrl+Shift+K`
- `Ctrl+Shift+H`
- Decrement Date by a week (layout down key)
- `Ctrl+Shift+J`
- `Ctrl+Shift+K`
- Page-hint labels also switch to a Colemak-friendly alphabet when that layout preset is selected.
- **Navigation and Panels**
- {{[[table]]}}
- Mode
- Keys
- Action
- Normal + Visual
- `k`
- Select block up
- Normal + Visual
- `j`
- Select block down
- Normal
- `Shift+H`
- Select first visible block
- Normal
- `Shift+L`
- Select last visible block
- Normal
- `g g`
- Select first block
- Normal
- `Shift+G`
- Select last block
- Normal
- `Ctrl+U`
- Jump up by several blocks
- Normal
- `Ctrl+D`
- Jump down by several blocks
- Normal + Visual
- `Ctrl+Y`
- Scroll up while keeping selection visible
- Normal + Visual
- `Ctrl+E`
- Scroll down while keeping selection visible
- Normal + Insert
- `Alt+Z`
- Expand last reference breadcrumb
- Normal
- `Shift+Z`
- Collapse the current page view inside references or query results
- Normal
- `1`
- Open parent page
- Normal
- `Shift+1`
- Open parent page in sidebar
- Normal
- `2`
- Open mentions
- Normal
- `Shift+2`
- Open mentions in sidebar
- Normal
- `z`
- Toggle fold block
- Normal
- `Ctrl+Shift+Z`
- Collapse into parent block
- Normal
- `h`
- Select panel left
- Normal
- `l`
- Select panel right
- All
- `Ctrl+W`
- Close current sidebar page
- **Editing, Selection, and Clipboard**
- {{[[table]]}}
- Mode
- Keys
- Action
- All
- `Escape`
- Return to normal mode
- Normal
- `i`
- Edit selected block at start of line
- Normal
- `a`
- Edit selected block at end of line
- Normal
- `Shift+A`
- Edit selected block at end of line
- Normal
- `Shift+O`
- Insert block before current block
- Normal
- `o`
- Insert block after current block
- Normal
- `Tab`
- Indent current block under the previous sibling
- Normal
- `Shift+Tab`
- Outdent current block to the parent level
- Normal
- `v`
- Enter visual mode
- Normal + Visual
- `Shift+K`
- Grow selection upward
- Normal + Visual
- `Shift+J`
- Grow selection downward
- Normal
- `p`
- Paste below current block
- Normal
- `Shift+P`
- Paste before current block
- Normal + Visual
- `y`
- Copy selected block or selection
- Normal + Visual
- `Alt+Y`
- Copy block reference
- Normal + Visual
- `Shift+Y`
- Copy block embed
- Normal + Visual
- `d`
- Enter visual mode, or cut current visual selection
- Normal + Insert
- `Cmd+Shift+K`
- Move current block up
- Normal + Insert
- `Cmd+Shift+J`
- Move current block down
- Normal
- `u`
- Undo
- Normal
- `Ctrl+R`
- Redo
- **Hints**
- {{[[table]]}}
- Mode
- Keys
- Action
- Normal
- `q`, `w`, `e`, `r`, `t`, `f`, `b`
- Click inline hint targets `0` through `6` inside the selected block
- Normal
- `Shift+q`, `Shift+w`, `Shift+e`, `Shift+r`, `Shift+t`, `Shift+f`, `Shift+b`
- Shift-click inline hint targets `0` through `6`
- Normal
- `Ctrl+Shift+q`, `Ctrl+Shift+w`, `Ctrl+Shift+e`, `Ctrl+Shift+r`, `Ctrl+Shift+t`, `Ctrl+Shift+f`, `Ctrl+Shift+b`
- Modifier-click inline hint targets `0` through `6`
- Normal
- `s`
- Start page-wide hint mode for visible blocks only
- Normal
- `Shift+S`
- Start page-wide hint mode for visible blocks and links
- Normal
- `g l`
- Start page-wide hint mode for visible links only
- Normal
- `Shift+I`
- Start page-wide hint mode for visible blocks and enter insert mode
- **Roam-Specific Helpers**
- {{[[table]]}}
- Mode
- Keys
- Action
- Normal
- `Cmd+Enter`
- Toggle `TODO` / `DONE`
- Normal
- `Ctrl+Shift+1`
- Reschedule current SRS note as `AGAIN`
- Normal
- `Ctrl+Shift+2`
- Reschedule current SRS note as `HARD`
- Normal
- `Ctrl+Shift+3`
- Reschedule current SRS note as `GOOD`
- Normal
- `Ctrl+Shift+4`
- Reschedule current SRS note as `EASY`
- Normal
- `Ctrl+Alt+Up`
- Increment the only date reference in the block by one day
- Normal
- `Ctrl+Alt+Down`
- Decrement the only date reference in the block by one day
- Normal
- `Ctrl+Alt+K`
- Increment the only date reference in the block by one day using the layout up key
- Normal
- `Ctrl+Alt+J`
- Decrement the only date reference in the block by one day using the layout down key
- Normal
- `Ctrl+Shift+Up`
- Increment the only date reference in the block by one week
- Normal
- `Ctrl+Shift+Down`
- Decrement the only date reference in the block by one week
- Normal
- `Ctrl+Shift+K`
- Increment the only date reference in the block by one week using the layout up key
- Normal
- `Ctrl+Shift+J`
- Decrement the only date reference in the block by one week using the layout down key
- **Settings Model**
- `Keyboard Layout` switches layout-sensitive defaults between `qwerty` and `colemak`
- layout-sensitive bindings update from that preset, and page-hint labels follow the selected alphabet
- if the browser exposes keyboard layout change events, the plugin re-registers hotkeys automatically when the system layout changes
- shortcuts are grouped by mode in the Roam settings panel, and each binding can be customized there
- `Reset Shortcuts` restores the default keymap for the selected layout
- **Attribution**
- Most of the original Vim functionality in Roam Toolkit was developed by Dave Lu (@tntmarket on GitHub).
- [[April 17th, 2026]]
- [[mobile]]
- Added font size control
- Native view now follows settings from the web app for page brackets and namespaces
- Fix native view search keyboard not enabling swipe with Gboard
- Tables show heading cols/rows and respect column sizing from `/table` Improvements
- [[April 15th, 2026]]
- [[Quality of Life Improvements]]
- `/table` Improvements
- [[table]] is now interactive!
- You can click into cells, edit content, copy and paste, and move blocks around inside a table.
- 
- [[April 14th, 2026]]
- [[Roam Depot Extensions]]
- **꩜ Nautilus Enhanced**
- [English](https://github.com/hopeserena/nautilus-enhanced/tree/main#english) | [中文](https://github.com/hopeserena/nautilus-enhanced/tree/main#%E4%B8%AD%E6%96%87)
- **English**
- Nautilus Enhanced is an optimized, high-performance daily planner extension for Roam Research, inspired by the original Nautilus created by Tomas Barys.
- **Acknowledgements**
- This project is an enhanced fork of the original [roam-depot-nautilus](https://github.com/tombarys/roam-depot-nautilus) repository. A huge thank you to the original author, Tomas Barys, for his brilliant concept of using a spiral timeline to visualize energy and tasks throughout the day! This __Enhanced__ version introduces deep performance optimizations (eliminating memory leaks), fully localized bilingual Settings, Bezier curve typography connectors, and visual UI/UX spacing fixes.
- **Quick Start Guide**
- One-time Setup:
- Install Nautilus Enhanced.
- (Optional but Recommended) Install [Todo Trigger](https://github.com/dvargas92495/roamjs-todo-trigger) from Roam Depot to automatically append timestamps to completed tasks.
- Configure your preferences (workday start time, colors, lengths) in the Settings panel.
- Daily Routine:
- Type `;;` and select `Nautilus Enhanced` to insert the spiral component into today's Daily Note.
- Indent your tasks and meetings strictly underneath the component block.
- Events (Fixed time): Add a time range anywhere in the text (e.g., `12:30-14:00 Lunch`).
- Tasks (Flexible): Write your regular to-dos (e.g., `Read a book 30m`). If no time is set, they fall into the default setup.
- Watch the red pointer act as your dynamic clock, pushing unfinished, un-timed tasks forward into the future as the day goes on!
- **中文 (Chinese)**
- Nautilus Enhanced(鹦鹉螺行程图增强版) 是为 Roam Research 专门优化的每日行程与精力可视化插件。
- **致谢与鸣谢**
- 本项目基于 Tomas Barys 开发的原生开源项目 [roam-depot-nautilus](https://github.com/tombarys/roam-depot-nautilus) 进行了深度重构与增强。非常感谢原作者卓越的设计理念(使用螺旋形状映射人在一天中不断衰减的精力曲线)。本“增强版”解决了原版的由于计时器导致的严重内存泄露问题,重新设计了具备原生中英双语的设置面板,优化了连接线的贝塞尔曲线动画以及汉字的精准排版,让它真正成为了一个高可用、高颜值的生产力工具。
- **极简使用教程**
- 首次配置(只需做一次):
- 安装本插件。
- (建议配合使用)在 Roam 商店中安装 [Todo Trigger](https://github.com/dvargas92495/roamjs-todo-trigger) 插件,以实现当你勾选 TODO 为 DONE 时,系统能自动在句尾打上完成时间戳。
- 在插件设置页中,按你的习惯配置“工作开始时间”、“高亮触发词”、“默认时长”等内容。
- 日常使用工作流:
- 每天在你的 Daily Note(每日笔记) 页面通过输入 `;;` 唤出模板菜单,选择 `Nautilus Enhanced` 组件。
- 在渲染出的组件下方缩进一级作为子块(Children Block),把你今天想做的事情全部列出来。
- 固定日程:在你记录的事项文字任何一处输入时间段(如:`12:30-14:00 午餐会议`),它就会被固定分配在表盘特定时段上。
- 弹性待办:直接记录没有写绝对时间的待办事项(如:`回复邮件 30m`,默认占据时长在设置里可调)。
- 动态推移:随着现实时间流逝,图表上的红色实时指针会无情地前进;所有没打勾的弹性待办事项,总是会被红针自动“推”到未来的空白时间段中。
- 享受免焦虑时间管理的乐趣吧!
- [[April 10th, 2026]]
- Add quarter-aware **Custom symbols** for use with `:q`
- Examples are `dnp/this-quarter-start`, `ms/this-quarter-start`, `ms/+1Q-start`, `ms/+1Q-end`, `ms/this-quarter-end`, `ms/last-quarter-start`
- [Datalog block query](https://roamresearch.com/#/app/developer-documentation/page/CDPYVl-PE) now supports [our custom symbols and rules]([[Roam-specific :q additions]]) too
- fix small bugs re blocks selection in linked refs
- [[March 31st, 2026]]
- [[Quality of Life Improvements]] ✨ for `:q`
- Context
- `:q` feature has existed since very early Roam, but we revamped it last year
- Teaser into the revamped `:q`
- 
- The new stuff:
- `current/main-window-*` constants — 5 new symbols to reference the page/block focused in the main window
- New constants available for use in :q
- `current/main-window-page-title` **NEW ✨**
- `current/main-window-page-uid` **NEW ✨**
- `current/main-window-page-id` **NEW ✨**
- `current/main-window-block-uid` **NEW ✨**
- `current/main-window-block-id` **NEW ✨**
- Example
- One random old reference of the currently open page
- I manually clicked on ... then
set sorting to be random
set rows per column to a 1
- To test it out, open the query below on the sidebar (shift click) and then go to a page with a lot of references like [[video]]
- :q "One random old reference to open page"
[:find ?uid ?t
:where
(refs-page current/main-window-page-title ?b)
[?b :create/time ?t]
[?b :block/uid ?uid]
[(< ?t ms/-365D-start)]]
- :q "Page UID" [:find ?uid . :where [?page :node/title current/main-window-page-title] [?page :block/uid ?uid]]
- Add `in-dnp-between`, `refs-dnp-between`, `in-or-refs-dnp-between` rules to `:q`
- Rules we supported before:
- Some new useful inbuilt `rules` to ease writing queries
- **New rules we added now:**
- `(in-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- `(refs-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- `(in-or-refs-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- also adds convenience rules for single DNP variants
- `(in-dnp ?dnp ?b)` **NEW ✨**
- `(refs-dnp ?dnp ?b)` **NEW ✨**
- `(in-or-refs-dnp ?dnp ?b)` **NEW ✨**
- you could already do this, this just makes it simpler/more discoverable
- The `?start-dnp` `?end-dnp` and `?dnp` params accept dnp page titles or `dnp/*` style symbols (since they resolve to DNP page titles)
- Reference for these symbols:
- `dnp`
- **Usage notes:** These resolve to page title (i.e. `:node/title`) for the relevant daily note page
- `dnp/today`
- `dnp/yesterday`
- `dnp/tomorrow`
- `dnp/-1D`
- `dnp/+1D`
- `dnp/this-week-start`
- `dnp/this-week-end`
- `dnp/this-month-start`
- `dnp/this-quarter-start`
- `dnp/this-year-end`
- `dnp/=2025-01-01`
- resolves to "January 1st, 2025"
- Examples of queries our new `in-dnp-between`, `refs-dnp-between`, `in-or-refs-dnp-between` enable [[Examples of :q query blocks]]
- (this roam graph does not have much content in daily note pages, so below queries will probably be empty, please copy and test in your own graphs)
- DNP blocks this month with create time
- `(in-dnp-between dnp/this-month-start dnp/this-month-end ?b)`
- :q "DNP blocks this month with create time"
[:find ?b ?t
:where
(in-dnp-between dnp/this-month-start dnp/this-month-end ?b)
[?b :create/time ?t]]
- TODOs from last week's daily notes or reffing those DNPs
- `(in-or-refs-dnp-between dnp/last-week-start dnp/last-week-end ?b)`
- :q "TODOs from last week's daily notes or reffing those DNPs"
[:find ?b
:where
(in-or-refs-dnp-between dnp/last-week-start dnp/last-week-end ?b)
(refs-page "TODO" ?b)]
- Blocks referencing this week, written by particular user "Baibhav Bista"
- `(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)`
- :q "Blocks referencing this week, written by Baibhav"
[:find ?b
:where
(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]]
- Blocks referencing this week, written by particular user "Baibhav Bista" (also filter out blocks already in those DNPs)
- `(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(not (in-dnp-between dnp/this-week-start dnp/this-week-end ?b))`
- :q "Blocks referencing this week, written by Baibhav"
[:find ?b
:where
(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(not (in-dnp-between dnp/this-week-start dnp/this-week-end ?b))
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]]
- Expose the custom :q symbols and rules to [roamAlphaAPI.data.q](https://roamresearch.com/#/app/developer-documentation/page/SI3FNt3EQ)
- so now extension developers can just use custom symbols like `ms/next-week-start` or rules like `(in-or-refs-dnp-between ?start-dnp ?end-dnp ?b)`, as well as everything else in [[Roam-specific :q additions]]
- Change to how `ms/*` and `dnp/*` symbols are resolved when in daily note pages
- Now it works similarly to how `{between: [[today]] [[tomorrow]]}` in `{{query: ....}}` works
- that is, when the `:q` query is on a daily note page, `ms/today-start` (for example) resolves to the start of day for the day corresponding to that daily note page.
- wheras, for `:q` queries in any other (non-DNP) page, `ms/today-start` corresponds to the actual today
- this change is for all the relative ms/* and dnp/* special symbols
- When this happens, one can see an info button with details
- 
- In video form:
- {{[[video]]: https://www.loom.com/share/f62d4893563143ae84cdae3640af6eb8}}
- New and Revamped resources to learn about `:q`
- [[Roam-specific :q additions]]
- [[Examples of :q query blocks]]
- [[March 30th, 2026]]
- [[Bug Fixes]]
- Fixed export page failing on blocks that only contain a newline
- Fixed [[All Pages]] delete page skips user pages instead of failing
- [[March 24th, 2026]]
- [[Quality of Life Improvements]]
- Inline autocomplete [[Search]]
- Inline autocomplete now shows a live preview of pages and blocks.
- Toggle it with `Ctrl-O`
- 
- Search results highlight matching terms and truncate long blocks to keep results scannable
- 
- Reference counts are shown next to pages in autocomplete so you can gauge relevance at a glance
- 
- You can also disable this in user preferences
- Added attachment transfer for [[Local Graph]]s
- Added attachments view in settings for [[Local Graph]]s
- [[Bug Fixes]]
- Fix displaying titles like `[[> title]]` in blocks, before this mistakenly displayed a block quote
- Fixed the "Click here to update" button sometimes not updating
- [[March 11th, 2026]]
- [[Quality of Life Improvements]]
- Improved [[All Pages]] load time by 50% and now preserves the selected view/sort for the duration of your session.
- [[Roam Depot Extensions]]
- **[Chief of Staff](https://github.com/mlava/chief-of-staff)**
- An AI assistant embedded in Roam Research. Chief of Staff connects your Roam graph to large language models (Anthropic, OpenAI, Google Gemini, or Mistral) and to external tools via [Composio](https://composio.dev/), letting you ask questions, search and manage tasks, and orchestrate actions across your connected apps — all without leaving Roam.
- {{[[video]]: https://www.loom.com/share/9aa3c07de0f147af971d2fc54fe65e4a}}
- **Object Metadata Autocomplete**
- A Roam Research extension that lets you search for real-world objects (books, places, and more) and create structured pages with their metadata.
- **Features**
- **Book Autocomplete**
- Search [OpenLibrary](https://openlibrary.org/) for books and create rich pages with metadata:
- Cover image, author(s), publish year, rating, page count, subjects
- Author pages are auto-created with `isa::[[person]] [[author]]`
- Book link is copied to clipboard and the page opens in the sidebar
- **Google Maps Autocomplete**
- Search Google Places for locations and create pages with:
- Address, coordinates, Google Maps URL, website, vicinity
- Location type tags (e.g. `[[restaurant]]`, `[[park]]`)
- **Usage**
- Open the Roam command palette (`Cmd+P`) and run:
- Book autocomplete — search and insert books
- Google maps autocomplete — search and insert locations
- [[March 9th, 2026]]
- [[Quality of Life Improvements]]
- Moved all export / import options into a central location in settings
- 
- Renamed "User" settings to "Preferences" and "Files" to "Attachments"
- Changed the styling to limit the width of settings
- [[Roam Depot Extensions]]
- **DNP Default Filters**
- A Roam Research extension that applies default linked references filters to daily note pages.
- **Configuration**
- Go to Settings > Roam Depot > DNP Default Filters and set:
- Includes filter — comma-separated page names to include (e.g. `Queries, Projects`)
- Removes filter — comma-separated page names to exclude (e.g. `TODO, Evergreens`)
- Auto-apply on navigation — toggle automatic filter application on/off (on by default)
- **Features**
- **Auto-apply**
- When enabled, the extension automatically applies your configured filters to any daily note page's linked references section — both on Roam load (for today's DNP) and whenever you navigate to a DNP. Filters are merged with any existing ones on the page (no duplicates), and only applied once per DNP per session to avoid overwriting manual changes.
- **Command palette**
- Use Cmd+P (or Ctrl+P) and search for "DNP Filters: Apply to current page" to manually apply filters to whatever daily note page you're currently viewing. This also merges with existing filters.
- [[February 27th, 2026]]
- [[Quality of Life Improvements]]
- Added the ability to choose your own bullet color for multi-user graphs
- 
- You can also edit the bullet color of API token's pages you create from their display name page
- 
- [[February 26th, 2026]]
- [[Quality of Life Improvements]]
- Speed up the opening of [[Unlinked References]]
- Added TSX [[Code Block]]s
- [[Bug Fixes]]
- **Blockquote and callout paste/import fixes** — Pasting or importing blockquotes and callouts from HTML (e.g. from web pages) and Markdown now correctly produces single Roam quote blocks. Previously, multi-paragraph blockquotes would create separate blocks for each line. Consecutive `>` lines in Markdown imports are now grouped into a single blockquote block.
- **Blockquote viewer improvements** — The blockquote and callout viewer now properly handles the `>` prefix, including multi-line blockquotes and cases where `>` is not followed by a space. Previously, the first character after `>` could be clipped.
- **Blockquote and callout copy as HTML** — Copying blockquote and callout blocks now produces proper `
` HTML on the clipboard, so pasting into other apps preserves the quote formatting.
- Fix some issues pasting from github
- [[Roam Depot Extensions]]
- **Quick Capture shortcut**
- Allows a quick-capture experience without having to change context of whatever you're working on. Just press a hotkey and start typing!
- [🔗](https://www.loom.com/share/d625ff8b5e4949d2bdd14f791d1ae333)
- **How It Works**
- Press the hotkey (Ctrl+Shift+N on Mac, Alt+N on Windows/Linux) to:
- Create a new block at the bottom of today's Daily Notes page.
- Open that block in the right sidebar.
- Focus the cursor on it, ready for typing.
- You can customize the hotkey from the Command Palette.
- **Export with References**
- Export a Roam page or block — along with all its backlinks — to your clipboard in markdown format.
- For each backlink, the referencing block and all its children are included, grouped by source page.
- **Usage**
- **Commands**
- The extension registers three entry points:
- {{[[table]]}}
- Trigger
- Command
- Behavior
- Command palette
- Export with References
- Exports the focused block (if cursor is in a block) or the current page (if no block is focused)
- Command palette
- Export Page with References
- Always exports the entire current page, regardless of which block is focused
- Block context menu
- Export with References
- Right-click a block bullet → exports that specific block
- **From the Command Palette**
- Navigate to a page, or focus on a block
- Open the command palette (`Cmd/Ctrl + P`)
- Search for Export with References or Export Page with References
- The markdown is copied to your clipboard
- **From the Context Menu**
- Right-click on a block's bullet point
- Select Export with References
- The block content and its backlinks are copied to your clipboard
- **Output Format**
- The exported markdown looks like this:
- ```plain text
# Page Title- first block on the page
- nested child block
- second block
## Backlinks### [[Source Page A]]- block that references the exported page
- child of the referencing block
- another child
### [[Source Page B]]- another referencing block```
- `[[page references]]` are preserved as-is
- If there are no backlinks, the "Backlinks" section is omitted
- Children of each backlink block are included with proper indentation
- **Installation**
- Search for Export with References in the [Roam Depot](https://roamresearch.com/#/app/roamjs/page/rmGPdf3tS) marketplace and click install.
- **Roam Deep Research**
- Run long-form research jobs from inside Roam, poll/stream results from external providers, and write structured output back into your graph.
- **Purpose**
- This extension gives you a single command-palette workflow to:
- dispatch a research prompt to a provider (`Gemini`, `OpenRouter`, or `Manus`)
- track job state (`dispatched`, `polling`/`streaming`, `writing`, terminal states)
- write a structured result tree under a `Deep Research task::` block
- keep job metadata and status in extension settings for recovery and retries
- **Requirements**
- A valid API key for at least one supported provider (Gemini, OpenRouter, or Manus).
- The Manus provider requires Roam's built-in CORS proxy (`corsAnywhereProxyUrl`). The extension will display an error if the proxy is unavailable.
- **Core Functions**
- **1) Job Dispatch**
- Command palette: `Run Deep Research task`
- Slash command: `/Run Deep Research task` (runs against the current block)
- Prompt UI uses `iziToast` input modal
- Context is collected from selected/focused Roam blocks with safety limits:
- block cap
- character cap
- API call budget
- depth cap
- **2) Provider Execution Modes**
- `Gemini`: polling mode via `/v1beta/interactions`
- `Manus`: polling mode via `/v1/tasks` (through Roam CORS proxy)
- `OpenRouter`: streaming mode via SSE (`/api/v1/chat/completions`)
- **3) Status + Recovery**
- Cross-tab lease ownership for polling/writeback
- Persisted job state in `extensionAPI.settings`
- On load:
- resumes eligible polling jobs
- marks stale streaming jobs failed (streaming cannot resume after reload)
- runs maintenance/pruning
- **4) Writeback**
- Writes output as Roam blocks with batching and depth/size limits
- Adds `results_written:: true` marker for idempotency
- Includes sections such as:
- `Summary::`
- `Key Findings::`
- `Evidence / Citations::`
- `Open Questions::`
- `Suggested Next Actions::`
- `Attachments::`
- `References::`
- `Provenance::`
- **5) Cancellation + Retry**
- Command palette: `Cancel Deep Research task`
- Provider-aware cancellation:
- Gemini: DELETE interaction
- Manus: DELETE task, with local fallback
- OpenRouter: abort stream
- Retry path reuses prompt and current context collection flow
- **6) Tools API**
- Registers a public tools bridge at:
- `window.RoamExtensionTools['deep-research']`
- Tools:
- `rdr_run_research`
- `rdr_get_jobs`
- `rdr_cancel_job`
- Broadcast events:
- `rdr:job-dispatched`
- `rdr:job-completed`
- `rdr:job-failed`
- `rdr:job-canceled`
- **Settings (UI)**
- Settings shown in the extension panel and their behaviour impact:`Research provider`Values: `gemini`, `openrouter`, `manus`Changes runtime path (polling vs streaming), API auth, and provider normalisation.Provider key + model/profile`gemini`:`Gemini API key``Research agent` (currently fixed to `deep-research-pro-preview-12-2025`)`openrouter`:`OpenRouter API key``Research model` (select from curated deep-research models)`manus`:`Manus API key``Agent profile` (`manus-1.6`, `manus-1.6-lite`, `manus-1.6-max`)`Max job duration (minutes)`Upper wall-clock bound before a polling job is abandoned.`Max output blocks`Hard cap for writeback size and truncation behaviour.`Store raw output on schema errors`Adds raw provider payload blocks when structured parsing fails.`Archive completed jobs`Moves old terminal jobs to monthly archive pages before cleanup.`Upload attachments to Roam`
- Downloads provider attachments, uploads to Roam storage, and embeds if possible.
- Manus is one provider that specifically provides files that can be downloaded and stored within Roam Research storage if this setting is switched on.
- **Limitations**
- Streaming jobs (OpenRouter) cannot survive a page reload. If the tab is closed or refreshed mid-stream, the job is marked failed. Polling providers (Gemini, Manus) automatically resume after reload.
- Only one research job can run at a time.
- **Data + Safety Notes**
- API keys are stored in Roam extension settings (browser IndexedDB), not encrypted.
- The extension avoids overwriting non-empty user blocks by creating sibling/fallback roots where possible.
- Large output is truncated to respect block/size/depth safety limits.
- [[February 25th, 2026]]
- [[Quality of Life Improvements]]
- [[Import]] dialog redesign with a two-panel layout — scrollable page list on the left, detail panel on the right
- 
- As well as a lot more improvements
- Added folder selection for importing entire directories of markdown files
- Subfolder paths are now reflected in page titles (e.g. notes/Claim instead of Claim) to avoid false duplicates
- Added per-page title editing with option to update [[references]] across all imported pages
- Identical pages are auto-unchecked and dimmed; empty pages that already exist in the graph are flagged
- Block UID conflicts are now automatically remapped instead of failing the import
- Added callout directing users to Image Import for image files from another graph
- Fixed Select All / Deselect All being slow on large imports
- Improved performance for imports with many pages (500+)
- [[February 22nd, 2026]]
- [[Quality of Life Improvements]]
- [[File Manager]]
- Import / Export files, useful when restoring your graph to a new one, or backing up your files
- When exporting to the same directory twice, it will not duplicate the files
- Currently only supported in the desktop app, chome and edge browsers
- Small redesign from a list into a grid
- [[February 19th, 2026]]
- [[Mobile Native View]]
- Added callouts
- [[>]] [[!TIP]] Callouts are here! Try typing `> [!warning] Watch out` in any block.
See the [[Callouts]] page for all available types and how to style your own custom ones
- Fixed Markdown links with parentheses
- Fixed applying templates that include headings or text align
- Pasting a URL over selected text now creates a Markdown link (like the web app)
- Fixed [[iOS]] pasted text disappear after accepting paste
- [[Quality of Life Improvements]]
- Four / five backtick code blocks, useful for writing markdown in code blocks.
- Create with `/markdown`
- [[February 18th, 2026]]
- [[Quality of Life Improvements]]
- `/code block` slash command now inserts at the cursor position instead of replacing the entire block content
- `{{date}}` picker now auto-focuses today's date on open, so arrow keys work immediately for keyboard navigation
- Selecting a date in the `{{date}}` picker now refocuses the block with the cursor placed after the inserted page reference
- [[Roam Depot Extensions]]
- **tldraw**
- Turn any matching page into a fast, visual whiteboard with draggable page and block nodes, quick linking, and keyboard-friendly canvas controls.
- **Notice! This is a beta extension.**
- This extension is in active development and may contain bugs.
- If you notice anything off, or have feature requests, please reach out on GitHub or Slack.
- **Features**
- Auto load a canvas on pages that match your patterns (default: `Canvas/*`)
- Works in both the main view and right sidebar
- Adds dedicated Page and Block node tools to the tldraw toolbar
- Supports paste and drag/drop of links and block refs directly onto the canvas
- Includes a searchable inspector for picking target pages or blocks
- Opens linked items in the main view (`Ctrl+click`) or sidebar (`Shift+click`)
- Provides a configurable maximize hotkey for full-screen focus
- **Quick Start**
- The default canvas page pattern is `Canvas/*`.
- To create a canvas, create a page with a title like:
- `Canvas/Project Planning`
- `Canvas/Ideas`
- When you open that page, the canvas loads automatically.
- [[February 11th, 2026]]
- [[New Features]]
- [[>]] [[!TIP]] Callouts are here! Try typing `> [!warning] Watch out` in any block.
See the [[Callouts]] page for all available types and how to style your own custom ones
- [[Quality of Life Improvements]]
- Copy inline code block with right click -> "copy code" button
- [[February 10th, 2026]]
- [[Quality of Life Improvements]]
- Markdown links now support urls with parenthesis in them, as well as `[]()` for other urls which might not display right
- `[Mathematical theory](https://en.wikipedia.org/wiki/Theory_(mathematics))`
- `[title ...]()`
- wrapping a url in `<>` should always work, no matter then special characters in the URL
- [[Bug Fixes]]
- Fixed a bug that caused data loss in code blocks
- Code blocks now save progress while you are typing in them, no need to click outside to save anymore
- Fixed a bug with code blocks where pasting + changing the language would open, then close the language picker without letting you select a language
- [[Roam Depot Extensions]]
- **Breadcrumbs**
- Never lose your place in Roam again. Breadcrumbs adds a clickable trail of your recent pages and blocks in the top bar, so you can jump back instantly and navigate your graph with confidence.
[Ask DeepWiki](https://deepwiki.com/RoamJS/breadcrumbs)
- 
- **Features**
- Tracks recently visited pages and block locations
- Renders oldest-to-current breadcrumb trail in the top bar
- Click any non-current breadcrumb to navigate back
- Distinguishes pages vs blocks with different styles
- Supports Blueprint dark mode (`.bp3-dark`)
- **Settings**
- `Max breadcrumbs`: max number of prior locations to keep
- `Truncate length`: max label length before truncation
- **Sticky Notes**
- Quick, ephemeral notes that float on top of your Roam Research graph. Jot something down, drag it wherever you want, and when you're done—remove it. No clutter, no permanent page unless you want one.
[Ask DeepWiki](https://deepwiki.com/RoamJS/sticky-notes)
- 
- **What are Sticky Notes?**
- Sticky Notes are lightweight notes that sit in a layer above your Roam graph. They're meant for quick, temporary capture: ideas you're playing with, reminders for the current session, or scratch space while you work. When you delete a sticky note, it's gone—the block is removed from your graph. No archive, no cleanup later.
- **Features**
- Full Roam inside every note — Each sticky is a real Roam block. Use tags `#like-this`, images, embeds, links, and everything else you normally do in Roam.
- Drag anywhere — Grab the note by the header bar and drag it anywhere on your screen. Position and size are remembered for your session.
- Resize — Drag the corner or edge of a note to make it bigger or smaller.
- Minimize — Collapse a note to just its title bar when you want it out of the way but still visible.
- Ephemeral by design — Delete a note with the ✕ button and the block is removed from Roam. Perfect for throwaway thoughts and temporary scratch space.
- **How to use**
- Create a sticky note — Open the command palette (`Ctrl/Cmd + Shift + P`), run "Sticky Notes: Create Sticky Note", and a new note appears.
- Move it — Click and drag the colored header bar to place the note wherever you like.
- Edit — Type in the note as you would in any Roam block. Use `#tags`, `/commands`, images, and links.
- Remove it — Click the ✕ on the note when you're done. The note and its content are deleted from your graph.
- Sticky notes are stored under a single Roam page (`roam/js/sticky-note`) so they stay in your graph while they exist, but the extension is built so you can treat them as disposable: create, use, delete.
- **Stats**
- Know your graph in seconds—pages, words, links, and tags in one sleek drawer.
[Ask DeepWiki](https://deepwiki.com/RoamJS/stats)
- 
- **Features**
- Overview — Pages, interconnections (block refs), Firebase links, external links
- Content breakdown — Text blocks (count, words, characters), block quotes, code blocks
- Block types — Counts for TODO, DONE, query, embed, table, kanban, video, roam/js (click a tag to open that page)
- Account — Current user display name and email
- Open the drawer via the command palette: Stats: Toggle Stats Drawer.
- [[January 30th, 2026]]
- [[Roam Depot Extensions]]
- **[YouTube Transcript Sync](https://github.com/qcrao/roam-yts)**
- A Roam Research extension that fetches YouTube video transcripts and inserts them into your graph.
- [🔗](https://github.com/qcrao/roam-yts/blob/main/assets/demo.png?raw=true)
- **Features**
- Import transcripts from any YouTube video with captions
- Clickable timestamps that jump to the video position
- Multiple format options: nested blocks, single block, or code block
- **Installation**
- Go to Settings > Roam Depot > Community Extensions
- Search for "YouTube Transcript Sync"
- Click Install
- **Setup**
- Get your API key from [supadata.ai](https://supadata.ai/) (free tier includes 100 credits/month - enough for daily use)
- Open Settings > YouTube Transcript Sync
- Enter your API key
- [🔗](https://github.com/qcrao/roam-yts/blob/main/assets/settings.png?raw=true)
- **Usage**
- Paste a YouTube URL in any block (e.g., `https://youtube.com/watch?v=...`)
- Click on the block containing the URL
- Open command palette (`Cmd/Ctrl + P`) and run Import Youtube Transcript
- Tip: To enable clickable timestamp navigation, click the small button before the YouTube link to embed the video. Without embedding, transcripts will still be imported but timestamps won't jump to the video position.
- [🔗](https://github.com/qcrao/roam-yts/blob/main/assets/usage.png?raw=true)
- **Transcript Formats**
- {{[[table]]}}
- Format
- Description
- Nested Blocks
- Each segment as a child block with clickable timestamp
- Single Block
- All text in one block with soft line breaks and clickable timestamps
- Code Block
- Plain text in a code block (timestamps are not clickable)
- [🔗](https://github.com/qcrao/roam-yts/blob/main/assets/single%20block.png?raw=true)
- [🔗](https://github.com/qcrao/roam-yts/blob/main/assets/code%20block.png?raw=true)
- [[January 16th, 2026]]
- [[Bug Fixes]]
- Fixed outline highlight priority so selected blocks (blue) display over search highlights (yellow)
- Removed extra margin on block highlight outline
- Fixed shift-click on Daily Notes in sidebar to properly open today's page
- Fixed page title sync to properly update when title changes in the database
- When renaming a page causes a merge with an existing page:
- Main window now only navigates to the merged page if you had the deleted page open
- Sidebar windows showing the deleted page now navigate to the merged page instead of closing
- [[Quality of Life Improvements]]
- Increased bottom padding on pages from `120px` to `35vh` for more scroll room
- [[Roam Depot Extensions]]
- **Better Command Palette (BCP)**
- Better Command Palette enhances Roam Research’s command palette by letting you pin your favourite commands so they always appear at the top. You can also sort unpinned commands alphabetically if that’s your preference.
- This extension is intentionally lightweight, safe, and non-invasive:
- ✅ Does not modify your graph (no block/page writes)
- ✅ Does not override Roam commands
- ✅ Works entirely at the UI layer (DOM decoration + reordering)
- **✨ Features**
- **⭐ Pin favourite commands**
- Click the star next to any command to pin it
- Pinned commands move to the top instantly
- A divider is shown between pinned and unpinned commands (when both exist)
- **💾 Per-graph persistence**
- Your pinned commands are stored in Roam Depot settings for this graph
- Pins are restored every time you open the command palette
- **🔤 Sort unpinned commands**
- Choose Roam native, A → Z, or Z → A in settings
- Optionally override the sort mode for the current command-palette session using the footer buttons
- Note: pinned commands are always shown in A → Z order for stability.
- **⚡ Fast & safe**
- Only activates while the command palette is open
- Uses scoped `MutationObserver`s to react to Roam UI changes
- No polling, no key simulation, no DOM cloning
- **🖱 Usage**
- Open the command palette (`Cmd–P` / `Ctrl–P`)
- Click the ☆ star next to any command to pin it
- Pinned commands appear at the top immediately
- Click ★ to unpin
- The extension also adds three small buttons in the footer of the Command Palette. These allow you to override your global sort preference on a per-session basis.
- Footer sort overrides apply only to the current palette session and reset when the palette closes.
- **⚙️ Settings**
- This extension uses Roam Depot settings:
- Sort mode: `Roam native` / `A → Z` / `Z → A`
- Pinned commands storage: saved automatically as you pin/unpin
- Clearing the extension’s settings resets all pins and returns sorting to Roam native.
- **🧠 How it works**
- Watches for the Command Palette modal to appear
- Decorates each command with a star button
- Tracks pinned commands by a stable key derived from:
- label text, and
- shortcut (when present)
- Reorders the menu in place using Roam’s existing DOM nodes
- Resets cleanly when the palette closes
- **♿ Accessibility**
- Stars and sort controls are implemented as real `` elements
- Keyboard focusable
- Uses `aria-label` and `aria-pressed`
- **🛡 Safety & compatibility**
- Works with built-in commands and extension commands
- Does not interfere with filtering/searching/keyboard navigation
- If Roam changes the palette DOM, the extension fails gracefully (no graph impact)
- **📌 Limitations (by design)**
- Commands are identified by their label (and shortcut when present)
- If a command’s label changes, you may need to re-pin it
- The “original order” baseline is learned per palette open
- Roam remains the source of truth for native ordering
- These choices keep the extension robust and future-proof.
- [[January 12th, 2026]]
- **[[Roam Reader]] v1.1.4**
- __If you don't know about Roam Reader yet, some resources first__
- **[[Roam Reader]]**
- Your new tool for taking notes __intentionally__, reading in context, and growing ideas as you go
- Watch our [in-depth video tutorial (7 min long)](https://www.youtube.com/watch?v=stJ7SGo6J9w) or just read along!
- After that, if still interested, you can watch this 1-hour+ video of Live reading & writing with Roam Reader: https://www.youtube.com/watch?v=TNbo049RQ3g
- 📌 **Take notes in context**
- As you're reading, tap the astrolabe in the address bar, confirm the correct metadata and click on __Take Notes__
- A sidebar will open on the side, you're now reading, highlighting and writing in the same view without losing context
- 🖍️ **Highlight + comment as you read**
- Select any text from any article → click on on one of the icons: __highlight__, __tag__ or __comment__
- Your highlights are instantly added to the sidebar, synced with your Roam graph
- Use any of Roam's features on your outlined annotations!
- 🔖 **Save articles to your reading list**
- Click the astrolabe → **“Save to Inbox”**
You can tweak the title, tags, and metadata before it lands in your Roam graph.
- The default reading lists are: __Inbox, Shortlist, Archive, __but you can also make your own!
- ⚙️ **Setup takes 30 seconds:**
- Install the Chrome extension → Pin it → Pick an article → Click the astrolabe to sign in and then select your graph → You’re ready to go!
- Bugs, questions, feature ideas? Send them our way: [support@roamresearch.com](mailto:support@roamresearch.com) or via chat!
- ---
- **[[FAQ]]s** below:
- **Q:** I do not use Chrome. Is this available for Firefox/Safari?
- Soon! That is one of the first items in our plan
- **Q:** Are encrypted graphs not supported?
- Yes, sadly. They will be supported later, but in a limited form compared to normal hosted graphs (more details below)
- a thread from Roam Slack:
- 
- **Q:** Do you have a rough timeline for future additions/enhancements?
- Yes! Here is a rough short term plan for Roam Reader:
- ironing out all the bugs
- Roam Reader for mobile (at least a minimal version to allow capture)
- extension builds for other browsers (firefox, safari)
- **Q:** Where can I geek out about this and workflows for it !?!
- In the [roam-reader]([[Slack/roam-reader]]) channel in our [Slack](https://join.slack.com/t/roamresearch/shared_invite/zt-2ukldw4mq-vkF95tb~0zbzkJ38nzZ6uA)!
- **Direct Links**
- Install link for chrome extension: https://chromewebstore.google.com/detail/roam-reader/kghmbkhikifcnkjoakokkhdkfdhieonb?hl=en
- [[Loom video]] going through the major changes
- {{[[video]]: https://www.loom.com/share/8336c18bfe2b4d79819a15eefc8f1142}}
- **✨ New Features in Reading List**
- Filter Your Reading List
- Click any tag, author, or domain to instantly filter your reading list
- Shift-click to add multiple filters (e.g., show articles tagged both "AI" and "Research")
- Toggle between AND/OR matching for your filters
- Search across article titles, descriptions, and metadata
- Save Your Filters
- Save any filter combination as a reusable "Saved View"
- Saved views sync to your Roam graph under [[Roam Reader Saved Views]]
- Access all your saved views from the new left sidebar
- Rename or delete saved views anytime
- Advanced Query Builder
- Switch to advanced mode for complex queries with AND/OR/NOT logic
- Filter by annotation count (e.g., "articles with more than 5 annotations")
- Filter by specific reading list membership
- Combine conditions in ways not possible with simple filters
- Visual tree editor makes building queries intuitive
- Performance Improvements
- Virtualized list rendering for smooth scrolling with large reading lists
- Noticeably faster for users with 100+ saved articles
- **🔧 Improvements**
- "Bump to Top" action to move articles to the top of your list
- **🐛 Bug Fixes**
- Fixed nested page tags not displaying correctly in the popup
- Fixed search not returning expected results in some cases
- Fixed display issues for users without a display name set
- Fixed local file annotations not working
- Fixed occasional crashes when loading large reading lists
- Improved URL matching to reduce false duplicates
- [[Roam Depot Extensions]]
- **Better Bullets (Roam Research extension)**
- Replace Roam’s default bullet dot with meaningful, user-configurable glyph bullets — triggered by simple prefix markers you type at the start of a block.
- This extension is designed to be fast, reliable across Roam DB + DOM, and safe for daily use (no destructive edits unless you explicitly enable marker stripping).
- **What it does**
- When you type a marker at the beginning of a block (e.g. `-> `), Better Bullets:
- Recognises the marker (with optional “require space after marker” safety).
- Persists the detected bullet “type” into the block’s props (`better-bullets/type`), so the UI stays correct even after you strip the marker.
- Renders a matching bullet glyph via CSS by applying a class like `better-bullet-arrow` to the block container.
- Optional:
- If Strip marker prefix from text is enabled, the marker is removed __after__ recognition (never while the block is focused).
- **Quick start**
- Install the extension (Roam Depot).
- Open Settings → Better Bullets.
- Leave defaults as-is to start:
- ✅ Require a space after marker = ON
- ⛔ Strip marker prefix from text = OFF
- Try a few markers at the start of a block:
- `= `, `-> `, `=> `, `?? `, `... `
- **Marker → bullet map (default)**
- Tip: With “Require a space after marker” ON (default), markers only trigger when followed by a visible space/tab/NBSP or end-of-line.
- {{[[table]]}}
- Meaning
- Marker
- Bullet
- Equal / definition
- `=`
- `=`
- Leads to
- `->`
- `→`
- Result
- `=>`
- `⇒`
- Question
- `?`
- `?`
- Important / warning
- `!`
- `!`
- Idea / addition
- `+`
- `+`
- Right-angle arrow
- `v>` (configurable)
- `⤷`
- Contrast / however
- `~`
- `≠`
- Evidence / support
- `^`
- `▸`
- Conclusion / synthesis
- `∴` (configurable)
- `∴`
- Hypothesis / tentative
- `??`
- `◊`
- Depends on / prerequisite
- `<-`
- `↤`
- Decision / choice
- `
- `
- Reference / related
- `@`
- `↗`
- Process / ongoing
- `...`
- `↻`
- **Settings**
- **Require a space after marker (default: ON)**
- Prevents accidental triggers inside words. Example: with this ON, `->hello` won’t trigger; `-> hello` will.
- **Strip marker prefix from text (default: OFF)**
- If enabled, leading markers are removed after the block is recognised.
- Bullet type is preserved using block props, so the bullet stays even after the prefix disappears.
- **Enable toggles per bullet type (default: ON)**
- Disable any bullet type you don’t want.
- For bullet types with configurable prefixes, the prefix input only appears when that bullet type is enabled.
- **Command palette actions**
- Better Bullets: Clear bullet type from focused block
- Removes the persisted `better-bullets/type` prop from the focused block.
- Better Bullets: Enable all bullet types
- Better Bullets: Disable all bullet types
- Better Bullets: Show cheat sheet
- Prints a quick reference of enabled bullets, markers, and meanings.
- **CSS variables (optional)**
- You can customise sizing/alignment by overriding these variables (e.g. in your theme CSS):
- ```plain text
:root {
--bb-bullet-size: 14px;
--bb-bullet-font-size: 12px;
--bb-bullet-translate-y: 0px;
}```
- **Notes & troubleshooting**
- If markers don’t trigger, check:
- The bullet type is enabled
- You’re using the correct marker
- “Require a space after marker” behaviour matches how you’re typing
- If you enable marker stripping: stripping never happens while the block is focused, and is applied shortly after blur (focus-out) to avoid fighting the editor.
- **Privacy & safety**
- Runs entirely in your browser.
- Only writes to Roam via standard block updates when persisting `better-bullets/type`, and (optionally) when stripping marker prefixes you explicitly enabled.
- [[January 7th, 2026]]
- [[Bug Fixes]]
- Fixed bullet alignment with headers
- Fixed `#.rm-g` group css to display when a block is selected inside the group
- [[Mobile Web]]
- Enabled **auto-capitalization**
- Because `shift+enter` usually adds a new line within the current block, we adjusted when that behavior triggers so you won’t get “stuck” with `shift` held down and unable to create a new block.
- **Tradeoff:** creating multi-line blocks is now a bit harder.
- In order to add a new line to the current block, you must have shift on, and not be at the start of the block, or after ". "
- When working with blocks that are larger than the screen, we fixed it to not keep scrolling to the top of the block, it will now scroll to the cursor position.
- Fixed displaying iframe components
- Fixed tapping on an image to bring up the image modal
- Added a button to submit the share with form for adding editors/readers to a graph on mobile
#### [[2025]]
- [[December 31st, 2025]]
- [[Quality of Life Improvements]]
- New commands (no default hotkeys set)
- Add block below current block
- Delete current block
- Toggle expand/collapse for the blocks in the main window
- [[December 30th, 2025]]
- [[Bug Fixes]]
- Youtube videos now respect start times when the link includes a time (?t=)
- Fixed block [[Alias]] tooltips sometimes flickering when the block contains large content like an image, or when the window is small
- The fix is not perfect, and may cut off content if the block is very large, but you can at least get a sense of what the block is
- Fixed `{{table}}` not sorting rows correctly in some cases
- Fixed many issues with the `{{or: opt1 | opt2 | opt3}}` component
- Fixed the display on [[Firefox]]
- Fixed it getting stuck with empty options sometimes
- Fixed drag and dropping to reorder left sidebar shortcuts in [[Firefox]]
- Gave images a minimum size to prevent them from becoming too small to resize (smaller than the button to focus the block)
- Fixed `{{word-count}}` and word count in [[All Pages]] to work better with non English languages (notably Cyrillic)
- Many languages like Thai are fairly ambiguous, for those languages this should be seen as a best guess estimate of the word count.
- [[December 29th, 2025]]
- [[Desktop App]] [[Bug Fixes]]
- Fixed regression in windows with ctrl-shfit-v double pasting caused by the last update
- [[December 23rd, 2025]]
- [[Desktop App]]
- Added an option to toggle spellcheck in the edit menu
- Fixed `cmd-shift-v` (paste as plaintext) on [[Mac]]
- Fixed [[Mac]] icon display to be compatible with icon appearance settings, and fixed the default display to not be hazy (bug caused by the liquid glass update)
- Fixed local graph's videos not being playable
- Added a warning if you have the intel mac version installed on apple silicon
- Updated the right click menu to only show applicable options
- [[December 22nd, 2025]]
- [[Quality of Life Improvements]]
- Return cursor back to the focused block when canceling `cmd-u` (find or create) search
- When focused on the find or create search, the application losing focus will no longer clear the current search
- After selecting multiple blocks and deleting them, we now refocus the outline. This was also causing a bug where `cmd-enter` afterwards would also not refocus the outline
- Added [[Roam Reader]] and help docs links to the home page
- [[December 19th, 2025]]
- [[Quality of Life Improvements]]
- Added support for the standard key command for plaintext paste on mac, `cmd-opt-shift-v`
- [[December 18th, 2025]]
- [[Quality of Life Improvements]]
- Hotkeys for incrementing/decrementing date links
- No default is set, go into setting to choose one. `Alt+Up/Down` is good if you don't use those for something else
- [[Bug Fixes]]
- Fixed bullet alignment on [[Firefox]]
- Fixed the display of numbered lists with more than 99 items
- Added/fixed the display of empty page titles in all pages view
- Fixed issue with `{{calc}}` and having two in the same block which reference different blocks
- Example::
- {{[[calc]]: 2+2}} {{[[calc]]: 3+2}}
- 2
- 3
- Fixed issue with latex referencing the same block twice
- Example::
- $$\frac{$$n_1$$}{$$n^n$$ + $$n^n$$}$$
- $$n_1$$
- $$n^n$$
- Fixed `cmd/ctrl-f` on desktop app inside a code block triggering both the code block find and the page find
- Fixed an issue where changing the padding of `.rm-block-text` css class caused the arrow keys to stop working
- [[December 15th, 2025]]
- [[Bug Fixes]]
- Fixed broken references to [[PDF]] and [[Video]] uploads as well as some broken references created from the mobile app
- This requires a graph upgrade, which might take some time to run as we scan the graph for broken references
- Fixed Korean typed `가[` inserting `가[가[]` (duplicating the character)
- Fixed Safari breaking Chinese composition sometimes resulting in the wrong characters to be inserted
- Fixed Japanese quotes inserting brackets`[「]`
- Fixed backticks sometimes inserting multiple times when composing with Brazilian or Spanish
- Fixed last character repeating after a newline when typing in Korean with an external keyboard on iPad
- Fixed `option + >` not inputting ≥ (on [[Mac]])
- We now replace double Chinese punctuation with english in order to trigger autocompletes
- `【 【` -> `[[]]`
- `((` -> `(())`
- `;;` -> `;;`
- `::` -> `::`
- [[Roam Depot Extensions]]
- **Roam Export Block**
- A Roam Research extension that exports blocks (together with their children) to multiple formats, keeping the structure and formatting ready to paste into other applications.
- **Inspired by [logseq-export-block](https://github.com/avelino/logseq-export-block)** - A similar plugin for Logseq that served as the foundation for this Roam Research adaptation.
- **Features**
- Export Roam blocks with their children to multiple formats
- Maintain formatting and indentation appropriate for each target platform
- Copy directly to clipboard for easy pasting
- Support for rich text formatting where applicable
- Available directly from the block context menu
- **Supported Export Formats**
- **Slack**: Optimized formatting for Slack messages with proper link conversion and Slack-specific syntax
- **WhatsApp**: Clean formatting that works well with WhatsApp's limited markup
- **Google Docs**: Rich text formatting for better document integration
- **Rich Text**: General purpose rich text export
- **Installation**
- Open Roam Research and navigate to the **Roam Depot**.
- Search for **"Roam Export Block"** (or load the bundle manually if developing locally).
- Install/enable the extension.
- **Usage**
- Right-click on any block in Roam Research
- From the context menu, select one of the export options:
- `Export to Slack`
- `Export to WhatsApp`
- `Export to Google Docs`
- `Export to RichText`
- The block and its children will be copied to your clipboard in the selected format
- Paste the content into your target application
- **How It Works**
- The extension processes your Roam blocks and their children, applying format-specific transformations:
- Converts Roam markdown-style formatting to the appropriate syntax for each platform
- Handles links, lists, and indentation according to each platform's requirements
- For rich text formats (Slack, Google Docs), provides both plain text and HTML versions for better pasting results
- Uses modern clipboard APIs with fallbacks for maximum compatibility
- **Roam Todoist Backup**
- Roam Research extension that keeps a read-only backup of all Todoist tasks inside dedicated task pages of your graph.
- plugin inspired by [logseq-todoist-backup](https://github.com/avelino/logseq-todoist-backup)
- **Overview**
- Read-only integration with the Todoist REST API.
- Manual sync pelo command palette do Roam (`Todoist: Sync backup`) ou pelo ícone na topbar.
- Sincronização automática com intervalo configurável (padrão 5 minutos).
- Cada tarefa vive em uma página dedicada `todoist/`, preservando histórico por item.
- Atualiza blocos existentes com base em `todoist-id::`, evitando duplicidades e removendo tarefas inexistentes sem apagar concluídas.
- Gera blocos compatíveis com Roam, incluindo links, descrição, tags de projeto, labels saneadas e datas no padrão das páginas diárias.
- Converte labels inline do Todoist (`@label`) para hashtags (`#label`) para facilitar filtros dentro do Roam.
- **Requirements**
- Roam Research with extension support (Roam Depot or custom script loader).
- Todoist personal API token with read access.
- **Configuration**
- Abra `Roam Depot → Extension Settings → Todoist Backup`. A aba exibe todos os campos configuráveis:
- **Todoist Token**: cole o token pessoal obtido em [Todoist Integrations](https://todoist.com/prefs/integrations).
- **Target Page Prefix**: prefixo das páginas de destino (padrão `todoist`). Cada tarefa é escrita em `prefix/`.
- **Sync Interval (minutes)**: intervalo entre sincronizações automáticas (mínimo `1` minuto).
- **Download Comments**: ativa o download dos comentários do Todoist.
- **Excluded Task Title Patterns**: informe expressões regulares (uma por linha) para ignorar tarefas pelo título.
- **Enable Debug Logs**: habilita logs detalhados no console do navegador.
- **Status Alias**: personalize os rótulos exibidos para tarefas ativas, concluídas e removidas.
- As alterações são aplicadas na próxima sincronização manual ou automática.
- **Usage**
- **Manual sync**: clique no ícone da topbar (📁) ou execute `Todoist: Sync backup`.
- **Automatic sync**: roda em segundo plano conforme o intervalo configurado.
- **Formato do bloco principal**:
- ```plain text
[[January 2nd, 2025]] Task title #ProjectName
todoist-id:: [123456789](https://todoist.com/showTask?id=123456789)
todoist-due:: January 2nd, 2025
todoist-desc:: Optional description
todoist-labels:: #label-1 #label-2
todoist-completed:: [[January 2nd, 2025]]
todoist-status:: ✅
comments...
todoist-comments:: 2
[todoist](https://todoist.com/app/task/123456789/comment/456) Comment text
todoist-comment-id:: 456
todoist-comment-posted:: 2025-01-02T10:00:00.000Z```
- Dates are rendered as `MMMM Do, YYYY`, aligned with Roam's daily pages standard. Labels are sanitized and prefixed with `#`. When comment capture is active, a `comments...` child block brings each Todoist comment ordered chronologically.
- **Sync behavior**
- Each task remains on the `todoist/` page. Existing blocks are updated, new ones are added, and tasks removed from Todoist stop appearing (completed ones remain).
- Displayed dates use the `MMMM Do, YYYY` format, allowing direct links with Roam's daily pages.
- Comments (when enabled) appear as child blocks with direct links to Todoist.
- The entire flow is read-only in relation to Todoist.
- **Roam Oura Ring Integration**
- Roam Research extension that syncs your Oura Ring health metrics into daily pages.
- **Features**
- **Sleep**: Score, bedtime, duration, sleep stages (deep/REM/light/awake), efficiency, HRV, and contributor scores.
- **Readiness**: Score, temperature deviation/trend, and contributor breakdown.
- **Activity**: Steps, movement, calories, activity time breakdown, MET metrics, and goals.
- **Heart Rate**: Daily average, minimum, and maximum BPM.
- **Workouts**: Activity type, duration, calories, distance, intensity, and source.
- **Tags**: Custom tags with timestamps and comments from the Oura app.
- Pages are created as `ouraring/YYYY-MM-DD` with the header `#ouraring [[Month Do, YYYY]]`.
- **Requirements**
- Roam Research with extension support (Roam Depot or custom script loader).
- Oura personal access token with read access to your data.
- **Installation**
- **Via Roam Depot (Recommended)**
- Open Roam Research
- Go to **Settings → Roam Depot → Community Extensions**
- Search for "Oura Ring" and click Install
- **Manual Installation**
- Build the extension: `pnpm install && pnpm build`
- Load `extension.js` via Roam's custom script loader
- **Configuration**
- Open **Roam Depot → Extension Settings → Oura Ring** and configure:
- {{[[table]]}}
- Setting
- Default
- Description
- **Oura Personal Access Token**
- (empty)
- Token from [Oura Cloud → Personal Access Tokens](https://cloud.ouraring.com/personal-access-tokens)
- **Page Prefix**
- `ouraring`
- Prefix for daily pages (pages saved as `prefix/YYYY-MM-DD`)
- **Days to Sync**
- `7`
- How many past days to fetch (includes today)
- **Enable Debug Logs**
- `false`
- Show detailed logs in browser console
- If the settings panel is unavailable, the extension creates a fallback config page at `roam/js/ouraring`.
- **CORS Proxy**
- The Oura API doesn't include CORS headers, which means browsers block direct requests from web applications. This extension uses **Roam's native CORS proxy** (`roamAlphaAPI.constants.corsAnywhereProxyUrl`) to route API requests, adding the necessary headers automatically.
- This proxy is hosted by the Roam team and only works from Roam domains, ensuring security and reliability without any configuration required.
- **Usage**
- **Automatic**: The extension syncs recent data when it loads.
- **Manual**: Click the heart icon in the topbar or run `Oura: Sync daily data` from the command palette (Cmd/Ctrl + P).
- **Page Structure**
- Each daily page follows this structure (sections are omitted when empty):
- ```plain text
#ouraring [[November 29th, 2025]]
Sleep
Score: 85
Bedtime: 22:30 – 06:45
Total sleep: 7h 32m
...
Contributors
Deep sleep: 85
...
Readiness
Score: 78
Temperature deviation: +0.15°C
...
Activity
Score: 90
Steps: 8543
...
Heart rate
62 bpm avg / min 48 / max 145
Workouts
07:30 – Running (45m, 320 kcal, 5.20 km, moderate)
Tags
22:00 – [[No Caffeine]]
08:30 – [[Meditation]] – 15 min session```
- [[December 13th, 2025]]
- **[[New Features]] 🚀**
- **[[Roam Reader]]**
- Your new tool for taking notes __intentionally__, reading in context, and growing ideas as you go
- Watch our [in-depth video tutorial (7 min long)](https://www.youtube.com/watch?v=stJ7SGo6J9w) or just read along!
- After that, if still interested, you can watch this 1-hour+ video of Live reading & writing with Roam Reader: https://www.youtube.com/watch?v=TNbo049RQ3g
- 📌 **Take notes in context**
- As you're reading, tap the astrolabe in the address bar, confirm the correct metadata and click on __Take Notes__
- A sidebar will open on the side, you're now reading, highlighting and writing in the same view without losing context
- 🖍️ **Highlight + comment as you read**
- Select any text from any article → click on on one of the icons: __highlight__, __tag__ or __comment__
- Your highlights are instantly added to the sidebar, synced with your Roam graph
- Use any of Roam's features on your outlined annotations!
- 🔖 **Save articles to your reading list**
- Click the astrolabe → **“Save to Inbox”**
You can tweak the title, tags, and metadata before it lands in your Roam graph.
- The default reading lists are: __Inbox, Shortlist, Archive, __but you can also make your own!
- ⚙️ **Setup takes 30 seconds:**
- Install the Chrome extension → Pin it → Pick an article → Click the astrolabe to sign in and then select your graph → You’re ready to go!
- Bugs, questions, feature ideas? Send them our way: [support@roamresearch.com](mailto:support@roamresearch.com) or via chat!
- ---
- **[[FAQ]]s** below:
- **Q:** I do not use Chrome. Is this available for Firefox/Safari?
- Soon! That is one of the first items in our plan
- **Q:** Are encrypted graphs not supported?
- Yes, sadly. They will be supported later, but in a limited form compared to normal hosted graphs (more details below)
- a thread from Roam Slack:
- 
- **Q:** Do you have a rough timeline for future additions/enhancements?
- Yes! Here is a rough short term plan for Roam Reader:
- ironing out all the bugs
- Roam Reader for mobile (at least a minimal version to allow capture)
- extension builds for other browsers (firefox, safari)
- **Q:** Where can I geek out about this and workflows for it !?!
- In the [roam-reader]([[Slack/roam-reader]]) channel in our [Slack](https://join.slack.com/t/roamresearch/shared_invite/zt-2ukldw4mq-vkF95tb~0zbzkJ38nzZ6uA)!
- **Direct Links**
- Install link for chrome extension: https://chromewebstore.google.com/detail/roam-reader/kghmbkhikifcnkjoakokkhdkfdhieonb?hl=en
- [[December 11th, 2025]]
- [[Bug Fixes]]
- Fixed hotkeys settings being slow when a lot of extensions are installed
- Fix some extension commands not properly opening/closing blocks
- [[December 10th, 2025]]
- [[Bug Fixes]] & [[Quality of Life Improvements]]
- [[Advanced Block Search]]
- Changed to clearing the search box when selecting a block
- Added shift-tab to go up a level (tab navigates down a level)
- When focused on a block/page, it will now search text/blocks referenced in blocks
- Fixed a bug where when using from the [[Command Palette]] it would not insert the block reference
- If no block is selected, it will copy the reference to the clipboard
- Fixed inline block/page search sometimes overlapping the text when the search text wraps to a new line
- Fixed not showing [[roam/comments]] as a template on the [[roam/templates]] page
- [[December 2nd, 2025]]
- [[Quality of Life Improvements]]
- Added the ability to set a graph's homepage
- 
- [[Bug Fixes]]
- Fixed deleting a page with a block reference in the title not linking the page's linked references to the block
- This is useful if you want to change a page into a block
- Create a block -> copy page content into it -> copy block ref -> rename page to the block ref -> delete page
- Similar to this, fixed the same issue with a tag in the page title
- Fixed renaming pages with latex in them
- Fixed renaming pages with `{}` in them
- Fixed renaming a page to an emoji, previously it broke tag references
- Fixed search sidebar crashing Roam if you renamed a page in the results while the results are open
- [[November 25th, 2025]]
- Fix [[block view]] copy/paste, import/export, and use in templates
- [[November 20th, 2025]]
- **Better Tasks for Roam Research**
- Bring true task management to Roam Research!
- This extension automatically recognises and manages TODO items that match defined repeat patterns and/or date attributes, optionally generating the next instance when a repeating Better Task is completed.
- Note: This extension is in active development and should be considered a beta release. Please let me know of any bugs or unexpected behaviours in Slack - https://app.slack.com/client/TNEAEL9QW/
- This video provides a basic overview of some of the functionality of this extension.
- https://www.loom.com/share/bb6ffd38ff35441ab2ed5138b5c2cb70
- **📘 Quick Overview**
- You can create a Better Task directly or via the Command Palette — both behave identically, store their data in child blocks for reliability, and can include either a repeat rule or just start/defer/due dates for one-off scheduling.
- **🔹 Child Block Style**
- ```plain text
{{[[TODO]]}} Write weekly newsletter
- BT_attrRepeat:: every Friday
- BT_attrDue:: [[2025-11-07]]```
- When completed:
- ```plain text
{{[[DONE]]}} Write weekly newsletter
- BT_attrRepeat:: every Friday
- BT_attrDue:: [[2025-11-07]]- completed:: [[2025-10-31]]```
- Optionally include a start attribute `BT_attrStart::` (when the task becomes available) and/or defer attribute `BT_attrDefer::` (when it should resurface). These labels are configurable in settings; defaults are `BT_attrStart` and `BT_attrDefer`. The completion attribute defaults to `completed::` but can also be configured in Settings.
- **🔹 Scheduled (One-Off) Tasks**
- Leave the repeat field blank while setting any combination of `start::`, `defer::`, or `due::` to create a __scheduled one-off__ task. It uses the same child-block storage, pills, snooze controls, and completion logic — just without spawning a follow-up block. Completing it writes `completed:: [[]]` and hides the pill.
- **🔹 Optional Metadata**
- Better Tasks also understands the following optional child-block attributes (names configurable in settings; defaults shown):
- ```plain text
- BT_attrProject:: [[Website Refresh]]- BT_attrWaitingFor:: [[Finance Team]]- BT_attrContext:: @computer, #office
- BT_attrPriority:: high
- BT_attrEnergy:: medium```
- These lines are purely optional—omit any you don’t need. Whenever a metadata value exists, it appears both in the dashboard and in the inline pill with quick actions:
- Click → opens/creates the referenced page (project, waiting-for, context).
- Shift+Click → opens that page in the right sidebar.
- Cmd/Ctrl+Click → prompts you to edit the value directly.
- Priority/energy pills cycle through low/medium/high/none on click. You can also add/remove metadata from the “⋯” menu on the pill or the dashboard row.
- **🔹 Inline Pill Indicators**
- Regardless of how you enter the attributes, the extension emits a compact pill next to each Better Task whenever its child blocks are collapsed:
- [🔗](https://raw.githubusercontent.com/mlava/better-tasks/main/images/image.png)
- Pills disappear automatically when you expand the task (so you can edit the child blocks directly) and reappear when the block is collapsed.
- Marking the TODO complete hides the pill until the extension spawns the next occurrence, keeping finished items visually quiet.
- Tasks without a repeat rule still show the pill with their start/defer/due dates, just without the ↻ segment.
- Dates within the next 7 days show the weekday name (`Wed`, `Thu`); anything further out shows a short date (`Feb 26`), so you can scan upcoming items quickly.
- ↻ Repeat pill — Click to edit; Alt+Click copies the rule to the clipboard.
- ⏱ Start / ⏳ Defer / 📅 Next — Click to open the corresponding Daily Note Page.
- Shift+Click opens that page in the right sidebar (matches Roam).
- Alt-Cmd/Ctrl+Click on the due pill snoozes +1 day.
- Alt/Ctrl/Meta+Click on any date pill opens a date picker to change that date.
- 📁 / ⌛ / @ / ! / 🔋 metadata — Only appear when a project, waiting-for, context, priority, or energy is set. Click to open the page or cycle the value (priority/energy); Shift+Click opens in the sidebar; Cmd/Ctrl+Click prompts you to edit.
- ⋯ Menu — Opens the full Better Task menu (see below).
- **⚙️ Settings**
- **Destination for Next Task**
- Determines where the next instance of a Better Task appears:
- Daily Notes Page (DNP) — Default; next occurrence is created on its due date’s DNP.
- Same Page — Next occurrence appears below the current one.
- Under a Heading on DNP — Adds the new task under the heading you specify (default: “Tasks”).
- **DNP heading**
- Heading for Under a Heading on DNP
- **Repeat attribute name**
- Label for a child block attribute for the recurrence pattern
- **Start attribute name**
- Label for the optional “start/available on” date attribute (default `BT_attrStart`)
- **Defer attribute name**
- Label for the optional “defer/snooze until” date attribute (default `BT_attrDefer`)
- **Due attribute name**
- Label for the optional “due” date attribute (default `BT_attrDue`)
- **Completed attribute name**
- Label written when the task is marked DONE (default `BT_attrCompleted`).
- You can change any of these attributes in Settings. These defaults have been chosen to minimise the risk of unexpected behaviours if you already use start:: defer:: repeat:: due:: or completed:: in your graph for other purposes.
- **Confirm Before Spawning Next Task**
- If enabled, shows a confirmation dialogue (“Spawn next occurrence?”) when you complete a repeating Better Task.
- **First day of the week**
- Tells Better Tasks which weekday your graph treats as the start of the week, and allows you to match your Roam Research preference setting.
- Weekly rules that span multiple days or intervals (e.g., `every 2 weeks on Sat & Sun`, `Mon-Fri`) interpret ranges using this anchor. Default is Monday.
- **🤖 AI Task Input Parsing (Experimental)**
- What it does: optionally sends the raw task text to OpenAI (BYO key, client-side) and maps the returned JSON into Better Task title/repeat/date attributes. If anything fails, the normal “Create a Better Task” flow runs instead.
- How to enable: in Better Tasks settings, set AI parsing mode to “Use my OpenAI key” and paste your key into AI API key. When mode is Off or the key is blank, AI parsing is skipped automatically.
- Privacy: the key and task text are sent directly from your browser to OpenAI; no extra backend is used. The key is stored in Roam’s extension settings (standard for Roam Depot AI extensions).
- Limitations: early feature; repeat/date parsing may be conservative. Project/context/priority/energy fields are accepted but currently ignored. Ambiguous input may fall back to manual entry.
- Failure behaviour: network/JSON/validation issues show a small toast (“AI parsing unavailable…”) and the normal Better Task prompt runs so task creation never blocks.
- How it flows: use the existing “Create a Better Task” command palette entry or block context menu. If AI is enabled and you have text in the block, it’s sent to OpenAI; otherwise you’ll be prompted for text. A small spinner toast appears while waiting for the API.
- Data safety: only the task text you supply plus your API key are sent directly to OpenAI; no proxy/server is involved. Nothing else from your graph is transmitted. If you hit quota issues, you’ll see a toast pointing you to the provider’s billing/limits page (`https://platform.openai.com/settings/organization/billing/overview`).
- Note: The settings pane for the extension allows you to use whatever name for the repeat and start/defer/due date atttributes you choose. The extension defaults to using 'BT_attrRepeat', 'BT_attrStart', 'BT_attrDefer' and 'BT_attrDue' for the recurrence pattern and start/defer/due dates respectively. If you happen to already use these attributes for other purposes, the extension will recognise and attempt to use them if you don't set alternatives in the settings. Using 'frequency' and 'when' for example, would prevent the extension from acting on anything for which you already use 'BT_attrRepeat' and 'BT_attrDue'.
- **🧩 Pills and Menus**
- Each task shows an inline “pill” next to its checkbox when the child blocks are collapsed.
- Pill actions:
- Repeat pill (↻) — Click to edit; Alt+Click to copy rule text.
- Due pill (Next:) — Click to open DNP; Shift+Click opens in right sidebar; Alt-Cmd/Ctrl+Click snoozes +1 day; Alt/Ctrl/Meta+Click opens the date picker.
- ⋯ (menu) — Opens the task menu with more options:
- {{[[table]]}}
- Action
- Description
- Snooze +1 day
- Push start date forward 1 day
- Snooze +3 days
- Push start date forward 3 days
- Snooze to next Monday
- Move start to the next Monday
- Snooze (pick date)
- Choose a custom start date
- Skip this occurrence
- Jump directly to next repeat cycle
- Generate next now
- Immediately create the next task
- End recurrence
- Stop this task from repeating
- All actions support Undo via a toast notification. If a start date isn't configured the buttons snooze the due date instead. Skip / generate / end only appear for tasks with a repeat rule.
- **📊 Better Tasks Dashboard**
- Open the dashboard from the command palette (`Toggle Better Tasks Dashboard`) or the icon [🔗](https://raw.githubusercontent.com/mlava/better-tasks/main/images/image-2.png) that appears in Roam’s top bar. The dashboard lists every Better Task (recurring or scheduled one-off) with:
- Powerful filters for recurrence type, availability (start/defer), due bucket, and completion status.
- Quick snooze actions, completion toggles, and links back to the originating blocks.
- Background refreshes whenever task attributes change so pills and dashboard stay in sync.
- A floating panel you can drag anywhere within the Roam window. The position is remembered, so place it where it works best for your workflow.
- A subtle ⋯ menu beside each task’s pills that lets you add or remove repeat/start/defer/due attributes (or edit them) without leaving the dashboard.
- Optional metadata chips (project, waiting-for, context, priority, energy) with filters plus add/remove buttons that mirror the inline pill behaviour.
- A quick-add input at the top: type a task and hit OK or Enter to create it (uses AI parsing when enabled, otherwise the manual Better Task flow with scheduling).
- Clicking the repeat or date pills in the dashboard mirrors the inline pill behaviour: you can open the same pickers, copy repeat text, or jump straight to the target Daily Note without expanding the block in Roam.
- Use the dashboard to triage overdue work, snooze tasks, or jump straight to the next daily note page without leaving Roam.
- **🎨 Theme Compatibility (Adaptive)**
- Better Tasks samples colours from Roam’s active theme and applies a lightweight contrast layer so the dashboard and pills feel native in both light and dark modes. The adaptive styling now works with Roam Studio, CSS Dark Mode Toggle, Roam "Native" Dark and Blueprint light/dark themes; if you spot any illegible text or mismatched backgrounds in your graph, please report the theme so we can fine‑tune it.
- [🔗](https://raw.githubusercontent.com/mlava/better-tasks/main/images/theming.gif)
- **🧭 Commands**
- You can trigger these from Roam’s Command Palette (`Ctrl+P` / `Cmd+P`) or block context menu:
- Convert TODO to Better Task
- Create a Better Task
- These commands let you turn an existing task into a repeating Better Task or start a new scheduled TODO; just leave the repeat field blank to create a one-off with start/defer/due timing.
- **📆 Repeat Field Syntax (Current Support)**
- The `repeat::` attribute accepts natural-language patterns. Parsing is case-insensitive, tolerates extra whitespace, and supports separators like commas, `/`, `&`, and the word and.
- Abbreviations and ranges are supported (e.g., `Mon`, `Tue`, `Thu`, `MWF`, `TTh`, `Mon–Fri`).
- Anchor date: the next occurrence is calculated from `due::` (preferred). If no `due::` is present, the current date is used as the anchor.
- Week start: ranges and some weekly rules respect your First day of the week setting in the extension.
- This video demonstrates some of the recurrence/repeat functions:
- https://www.loom.com/share/f8856114bfd14d40a228292e7bcff9ee
- **🗓️ Daily & Business Days**
- {{[[table]]}}
- Example
- Meaning
- `every day` | `daily`
- once per day
- `every 2 days` | `every other day` | `every second day`
- every 2 days
- `every three days`
- every 3 days
- `every 5 days`
- every 5 days
- `every weekday` | `business days` | `workdays`
- Monday–Friday
- `every 2 weekdays`
- every 2 business days (Mon–Fri cadence)
- **📅 Weekly — Single Day (any case/abbrev)**
- {{[[table]]}}
- Example
- Meaning
- `every monday`
- every week on Monday
- `every mon` | `EVERY MON` | `every MOnDaY`
- variants accepted
- **📅 Weekly — Base Keywords & Intervals**
- {{[[table]]}}
- Example
- Meaning
- `weekly` | `every week`
- once per week (no fixed day)
- `every other week` | `every second week` | `biweekly` | `fortnightly` | `every fortnight`
- every 2 weeks
- `every 3 weeks`
- every third week (no fixed day)
- **📅 Weekly — Multiple Days (lists & separators)**
- {{[[table]]}}
- Example
- Meaning
- `weekly on tue, thu`
- Tuesday and Thursday
- `weekly on tue thu`
- same (spaces only)
- `weekly on tue & thu`
- same (`&` supported)
- `weekly on tue/thu` | `Tu/Th` | `t/th`
- slash shorthand
- `every mon, wed, fri` | `MWF`
- Monday, Wednesday, Friday
- `TTh`
- Tuesday and Thursday
- `weekly on tue, thu and sat & sun`
- mixed separators supported
- **📅 Weekly — Ranges (includes wrap-around)**
- {{[[table]]}}
- Example
- Meaning
- `every mon-fri` | `every mon–fri` | `every mon—fri`
- Monday through Friday
- `every fri–sun`
- Friday → Sunday range
- `every su–tu`
- Sunday → Tuesday (wrap)
- **📅 Weekly — Interval + Specific Day(s)**
- {{[[table]]}}
- Example
- Meaning
- `every 2 weeks on monday`
- every 2nd Monday
- `every 3 weeks on fri`
- every 3rd Friday
- `every 4 weeks on tue, thu`
- every 4th week on Tue & Thu
- **🗓️ Monthly — By Day Number (single/multi, clamps, EOM)**
- {{[[table]]}}
- Example
- Meaning
- `monthly`
- same calendar day each month (uses `due::` day)
- `every month on day 15`
- 15th of each month
- `the 1st day of each month`
- 1st day every month
- `day 31 of each month`
- clamps to end of shorter months
- `last day of the month` | `EOM`
- last calendar day each month
- `on the 1st and 15th of each month`
- 1st & 15th
- `on the 15th and last day of each month`
- 15th + EOM
- `on the 5th, 12th, 20th of each month` | `on the 5th/12th/20th of each month` | `on the 5th & 12th & 20th of each month`
- multiple specific dates
- **🗓️ Monthly — Nth Weekday Variants**
- `first monday of each month`
- `2nd wed every month`
- `last friday of each month`
- `1st and 3rd monday of each month`
- `penultimate friday of each month` / `second last friday ...`
- `first weekday of each month`
- `last weekday of each month`
- `every month on the second tuesday`
- `2nd Tue each month`
- `the last thu each month`
- **🗓️ Every N Months (date or Nth weekday)**
- `every 2 months on the 10th`
- `every 3 months on the 2nd tuesday`
- `quarterly`
- `semiannual` / `semi-annually` / `twice a year`
- **🎉 Yearly — Fixed Date & Nth Weekday-in-Month**
- `every March 10`, `on 10 March every year`
- `annually`, `yearly` (fixed-date anchor)
- `first Monday of May every year`
- **📆 Weekends**
- {{[[table]]}}
- Example
- Meaning
- `every weekend` | `weekends`
- Saturday & Sunday
- **Notes**
- Abbreviations & aliases: `Mon/Mon./Monday`, `Thu/Thurs/Thursday`, `MWF`, `TTh` are accepted.
- Ranges: `Mon–Fri` (or `Mon-Fri`) expands to all included days.
- Clamping: Day numbers beyond a month’s end clamp to the last valid date (e.g., `31st` → Feb 28/29).
- “Every N weekdays” counts business days (Mon–Fri) only.
- Pluralisation is flexible: `monday`/`mondays`, `week`/`weeks`, etc.
- **💡 Tips**
- Any TODO with a `repeat::` value automatically becomes a repeating Better Task.
- Completing it will spawn the next occurrence (optionally after confirmation).
- Collapsing a Better Task shows its pill; expanding it reveals the underlying child blocks for editing.
- Most actions (skip, snooze, edit) display an Undo toast.
- **🧰 Example Workflow**
- Draft the task (inline or empty block), then run Convert TODO to Better Task (or simply Create a Better Task if you’re starting fresh). The toast lets you enter the title, optional repeat rule, and optional start/defer/due dates; it stores the canonical data in child blocks and shows the inline pill.
- Mark it done — for repeating Better Tasks, the extension automatically creates the next task on its start date (or due date if no start is provided) so it appears on the right Daily Note or page.
- If you snooze or skip via the pill menu, the defer/due child blocks update and the pill reflects the new dates immediately.
- Enjoy Better Task management directly inside Roam Research!
- [[November 19th, 2025]]
- [[Desktop App]] update
- [[Windows]] new app menu bar
- Fixed [[Mac]] performance issues with macos 26 (liquid glass)
- [[November 11th, 2025]]
- [[Bug Fixes]]
- [[PDF]]
- Fixed encrypted graphs not working full screen
- Fixed encrypted graphs area highlight failing to upload image
- Fixed clicking highlights inside of diagrams to open the PDF
- Fixed some flakeyness when clicking a highlight to open the pdf and scroll it into view
- Fixed [[block view]]s inside of numbered lists
- [[November 6th, 2025]]
- [[Roam Depot Extensions]]
- **Roam Copilot**
- [🔗](https://youtu.be/SaAvypfKgUo)
- 👆 [Click to watch the demo video](https://youtu.be/SaAvypfKgUo)
- 🚀 Transform your Roam Research experience with AI-powered insights
- Roam Copilot brings the power of advanced AI directly into your Roam workspace. Get instant, context-aware assistance for brainstorming, analysis, and idea connections without ever leaving your graph.
- ✨ Key Highlights:
- 🧠 Context-Aware Intelligence - Automatically understands your current page content
- 🏠 Privacy-First with Local AI - Full support for local models via Ollama
- ⚡ Multi-Provider Support - OpenAI, Anthropic, Grok, DeepSeek, Qwen, Gemini, Groq, XAI, Ollama, and custom models
- 🎯 User-friendly Interface - Resizable window on the right side of your main workspace
- [🔗](https://github.com/qcrao/copilot/blob/main/assets/hero.png?raw=true)
- **✨ What Makes Roam Copilot Special**
- **🎯 Smart Context Understanding**
- Automatically reads your current page content
- Uses visible blocks, including sidebar notes, as conversation context
- No manual copy-pasting required
- **🏠 Privacy & Control**
- Local AI Models - Run powerful models privately via Ollama. Your data stays where you want it
- Multiple Providers - OpenAI, Anthropic, Grok, or custom endpoints
- **💬 Intuitive Chat Experience**
- User-friendly Interface - Draggable, resizable, and minimizable
- Conversation History - Never lose your AI conversations
- Quick Templates - Pre-built prompts for common workflows
- Command Palette - Keyboard shortcuts for power users
- Smart Input Features - @ to search pages, drag & drop blocks, / for templates
- **📝 Powerful Templates**
- Official Templates - Pre-built prompts for common workflows
- Insights
- Writing assistance
- Custom Templates - Create your own templates
- Define custom prompts
- Add descriptions and icons
- Organize by categories
- [🔗](https://github.com/qcrao/copilot/blob/main/assets/prompt-template.png?raw=true)
- **🚀 Quick Start**
- **Installation from Roam Depot**
- Install from Roam Depot - Search for "Roam Copilot" in your Roam Research extensions
- Configure Your AI Provider - Add API keys for OpenAI, Anthropic, or Grok in settings
- Start Chatting - Click the lightbulb icon in the bottom-right corner
- **Prerequisites**
- [Roam Research](https://roamresearch.com/) account
- API key from your preferred AI provider (or [Ollama](https://ollama.ai/) for local models)
- **Using Local Models (Ollama)**
- To use Roam Copilot with a local Ollama instance, you must configure Ollama to accept requests from Roam Research. This is a critical security step required by Ollama. Here is a detailed guide to get it working:
- 1. Check if Ollama is Running
- Open your terminal and run the following command. You should see a response from the Ollama server.
- ```plain text
curl http://localhost:11434/```
- 2. List Your Installed Models
- Verify which models you have available locally.
- ```plain text
ollama list
# or via the API
curl http://localhost:11434/api/tags```
- 3. Set the Allowed Origin for Roam Research
- This is the most important step. You need to tell Ollama to accept connections from `https://roamresearch.com`.
- **One-Click Setup Script (Recommended)**
- We provide scripts that automatically set up, test, and clean up CORS configuration. You can either download them from the repository or use our hosted versions:
- Download and run the setup script:
- ```plain text
# Option 1: Download from public URL
curl -fsSL https://public.qcrao.com/rr-copilot/setup_ollama_cors.sh | bash```
- This script will:
- Add the environment variable to your shell configuration file (`.zshrc`, `.bash_profile`, etc.)
- Create a persistent launchd configuration on macOS
- Restart Ollama automatically
- Verify the CORS configuration
- To test if CORS is working correctly:
- ```plain text
# Download and run the test script
curl -fsSL https://public.qcrao.com/rr-copilot/test_ollama_cors.sh | bash```
- To remove the CORS configuration later:
- ```plain text
# Download and run the cleanup script
curl -fsSL https://public.qcrao.com/rr-copilot/cleanup_ollama_cors.sh | bash```
- **💬 How to Use**
- **Getting Started**
- 💡 Click the lightbulb icon in the bottom-right corner, or
- ⌨️ Use Command Palette (`Cmd+P` / `Ctrl+P`) → Search "Roam Copilot"
- **Chat Interface**
- 🔄 Auto-Context - Your current page content is automatically included
- 📚 Chat History - Access previous conversations from the sidebar
- ➕ New Conversations - Start fresh chats anytime
- 🔽 Minimize/Expand - Keep it out of the way when not needed
- **Settings**
- You can configure the AI models and other settings from the settings panel.
- [🔗](https://github.com/qcrao/copilot/blob/main/assets/settings.png?raw=true)
- **Contributing**
- Contributions are welcome! Please feel free to submit a pull request or open an issue.
- **License**
- This project is licensed under the [MIT License](https://github.com/qcrao/copilot/blob/main/LICENSE).
- [[Bug Fixes]]
- Fix tab view tab titles updating and bug with no tabs
- [[October 24th, 2025]]
- [[Roam Depot Extensions]]
- **Quick Insert Block**
- When you need to insert a block above or below the target block , this plugin can help you reduce the number of steps.
- [🔗](https://user-images.githubusercontent.com/23192045/219314019-b3cd117c-81a8-4616-b251-633aac968dc6.gif)
- [[October 2nd, 2025]]
- [[Quality of Life Improvements]]
- import / export hotkeys
- [[October 1st, 2025]]
- [[Bug Fixes]]
- Fix displaying [[dropbox]] files in the new [[PDF]] viewer and annotator
- [[September 30th, 2025]]
- **[[New Features]] 🚀**
- [[PDF]] viewer and annotator
- 
- Click and drag to select and highlight text or hold `alt` and click and drag to select an area
- [[September 16th, 2025]]
- Bug fixes for export
- Database update for upcoming features
- "Replace with another DNP" in page reference right-click menu
- makes the alt-click UI for daily note page refs more discoverable
- 
- [[August 29th, 2025]]
- Update [[excalidraw]] to the latest version
- Fix bug in [[excalidraw]] where backticks would add a bunch of unwanted text to the block
- [[August 18th, 2025]]
- [[Bug Fixes]]
- Fixed tags not being created after an image
- Fixed [[Filters]] with the `{{mentions}}` component not applying right
- Fixed selecting the `{{date}}` component out of bounds, and increased the date range to 10 years from now
- [[August 15th, 2025]]
- [[Roam Depot Extensions]]
- **[Roam References Radar](https://github.com/dive2Pro/roam-references-radar)**
- A Roam Research plugin that helps you discover more potential connections in your knowledge graph by identifying and suggesting relevant references.
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FiUgA8O8PQA.mp4?alt=media&token=4a7e0c3e-72a0-46be-8384-e0ce056967b0}}
- **Key Functionality**
- Automatic Execution: The plugin starts working immediately after installation without any manual configuration needed.
- Visual Indicators: When a block contains text that can be referenced to an existing page, an icon appears at the end of the block as a visual indicator.
- Interactive Popover: Clicking on the indicator icon opens a popover that displays all potential reference keywords found in the block.
- Multiple Reference Links: For each identified keyword, the popover displays multiple possible reference links, allowing you to select the most relevant connection for your knowledge graph.
- **Usage Tips**
- Page Recognition Rules: The plugin automatically identifies pages in your Roam graph but filters out pages with overly short titles (such as single characters) to ensure more accurate and useful connection recommendations.
- [[August 2nd, 2025]]
- [[Quality of Life Improvements]]
- Added [[Filter]] on the daily notes page
- Added a [[Filter]] option to include or exclude all daily notes pages
- 
- Similar to Added a [[Roam Query]] clause to filter on all daily notes at once
- [[Roam Query]] builder now appears __above__ the results, letting you watch updates live as you refine the query.
- We’ve also swapped the pen icon for a hammer to avoid confusion pen icons which usually focus the underlying block
- Added a [[Roam Query]] clause to filter on all daily notes at once
- This is equivalent to manually listing out all of the pages, e.i [[August 1, 2023]], [[August 2nd, 2023]], and so on
- Meaning that this will include blocks on daily notes or under a reference to a daily note
- Fixed [[Roam Query]] search to also search page titles
- [[July 18th, 2025]]
- [[Quality of Life Improvements]]
- Added sorting for [[Query]] as well as filtering
- 
- Moved sorting for [[Linked References]] into the settings menu
- Replaced "Page Date" sorting with "Most Recent" to be more clear on the purpose, functionally they are almost the same.
- [[July 15th, 2025]]
- [[Roam Depot Extensions]]
- **Image OCR**
- Use tesseract.js to examine and extract text from images in your Roam Research graph.
- If you often take photos of poweerpoint presentations to save them for later, you'll understand the need to be able to extract text from those images. Using this extension you can extract text from an image or series of images and apply the recognised text as a child block to the image.
- There are several ways you can achieve this with this extension:
- Block context menu - Extensions / 'Get Text from Images (OCR) in selected block(s)'
- Block context menu - Extensions / 'Get Text from Images (OCR) in child blocks'
- Multiselect menu - Plugins / 'Get Text from Images (OCR) in selected block(s)'
- You can see this in this gif:
- [🔗](https://github.com/mlava/image-ocr/blob/main/Screen%20Recording%202025-06-20%20at%2010.44.04%E2%80%AFam.gif)
- The extension checks each selected block for the presence of an image tag. If there aren't any image tags nothing will happen. If it recognises an image tag it will attempt to recognise text and then apply as a child block.
- You can specify the recognition language in the Roam Depot settings, or it will default to English. You can also set a confidence threshold. Tesseract.js reports how confident it is in the text extracted. If you set a confidence threshold and the recognition confidence is below that level, the text won't be applied to your graph.
- In the case of a single block, toasts will be shown if the extension fails to recognise text in the image or the confidence level is below your set confidence threshold. If you run the extension on multiple blocks the toasts are disabled (stops toast spam on screen). It might be worth testing your language and confidence settings on single images until you're satisfied you have the settings refined.
- **DOCX Viewer**
- Roam Research allows you to upload and render pdfs, but until now you couldn't do that for DOCX files. You can with this extension.
- Drag & drop, paste or `/upload` a docx file into your graph and the extension will recognise the file, and render it in place.
- [🔗](https://github.com/mlava/docx-upload-render/blob/be1ea5087af8ac8230d3971fe5e33ecd64953538/image.png)
- If your document is more than one page long, the docx previewer will try to paginate and show buttons as below. (If your document is a single page the buttons will not appear.)
- [🔗](https://github.com/mlava/docx-upload-render/blob/be1ea5087af8ac8230d3971fe5e33ecd64953538/image-1.png)
- You can also examine existing pages for docx files you've uploaded to your graph, and convert them to the correct format to allow them to render.
- There are several ways you can do this:
- Command Palette options
- Render DOCX files in page - will check all blocks on the page for docx files
- Render DOCX files in focused block - will check the currently focused block for docx files
- Render DOCX files in focused block and children - will check the focused block and all children for docx files
- Block Context menu
- Render DOCX files in block(s) - will check the selected block for docx files
- Render DOCX files in block(s) and children - will check the selected block and all of its children for docx files
- Multiselect Context menu
- if you drag your mouse over several blocks and then right-click on the highlighted area, you can then use Plugins / Render DOCX files in selected block(s)
- Individual Multiselect
- you can select non-adjacent blocks using individual multiselect and then open the block context menu on any of them, select Extensions / Render DOCX files in block(s).
- **Important Limitations:**
- this extension allows you to preview docx files, but not edit them. AFAIK there are no nodejs packages that will render a docx file in React that would allow editing to occur.
- there might be some rendering issues for some content, as the imported library converts the docx content to html to render it.
- some docx documents will appear very long, as the renderer looks for page breaks within the source and if it doesn't find any it continues to render the content without forcing a page break
- With many thanks to [@dvargas92495](https://github.com/dvargas92495) and [@mdroidian](https://github.com/mdroidian) for their brilliant work and community contribution of https://github.com/RoamJS/roamjs-components. None of my extensions that use react components would be possible without their generosity.
- [[July 8th, 2025]]
- [[Quality of Life Improvements]]
- Added sorting for [[Linked References]]
- 
- Added settings for group by page, nesting under parent results, and show paths for [[Linked References]]
- 
- [[June 27th, 2025]]
- [[Quality of Life Improvements]]
- New billing page https://roamresearch.com/#/billing
- Moved from the top of the all graphs page
- New image modal with zoom, pan, copy and download features.
- [[June 24th, 2025]]
- [[Bug Fixes]]
- Fix `{{video: }}` not displaying `youtu.be` shortened urls
- [[June 13th, 2025]]
- [[Quality of Life Improvements]]
- Fix selecting blocks with the mouse when the blocks are aligned horizontally, such as with the horizontal [[block view]] or with css
- Auto scroll the page when selecting blocks with the mouse
- [[May 15th, 2025]]
- [[Bug Fixes]]
- Fix a bug with the automatic deleting of empty pages which caused orphan blocks, we now wait two days to clean up any empty (unused) pages
- [[May 13th, 2025]]
- [[Quality of Life Improvements]]
- All [[Search]]es across Roam will now find accented characters without explicitly having to search for the accent
- [[Bug Fixes]]
- Fixed issue with [[Import]] in which duplicate pages with accents would be created sometimes
- [[April 29th, 2025]]
- [[Quality of Life Improvements]]
- Added [[embed-children]] and [[embed-path]] to [[/ Commands]]
- improved the way the inline auto complete (`(())`, `[[]]`, etc) work to better keep the active item in view
- [[April 17th, 2025]]
- [[Bug Fixes]]
- [[Query Builder]]
- Change the editing icon to an eye when editing to be more clear and fix the tooltip to say "View Results"
- Fixed a bug that caused pages created while the editor is open to not show up in auto complete
- [[April 15th, 2025]]
- 🚀 **Roam Just Got Much Faster!** #[[Performance Improvement]]
- Previously, the more blocks open on screen, either from pages in the sidebar or open queries, the slower Roam became.
- Slowdowns were particularly bad if you had a query open which returned a lot of results, even if the query was set to not auto update. They also happened frequently if you forgot to close old sidebar pages, or editing a page with a lot of linked references.
- We've optimized Roam’s performance so it stays snappy and responsive, no matter how much content you have open.
- [[Example]] creating a few blocks and deleting them with a query open
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FopzCefLlvB.mp4?alt=media&token=8a51b5c7-f145-403d-a521-aaf8c99072ef}}
- [[April 11th, 2025]]
- 🖖 Small update to our [[Roam Append API]] (with some user-facing improvements)
- You can now pass nested markdown input in the "string" argument and it will be properly parsed into blocks
- To use it, just make sure the string starts with a "- "
- Example:
- 
- If you're a user and not a dev, this enables new functionalities for you too!
- For example, our [[Zapier Integration]] now has a highly-requested functionality: you can add multi nested content now too!
- 
- Similarly, for our [[Apple Shortcuts/Speak to Roam]], if you had enabled the Postprocess/Summary step, then now the output summary will be split into the required number of blocks (which is how it should've looked from the get-go!)
- 
- Left is old behavior; Right is current behavior
- If you're a dev and are interested in the [[Roam Append API]] itself, please checkout our Developer Documentation graph: https://roamresearch.com/#/app/developer-documentation/page/eb8OVhaFC
- [[April 9th, 2025]]
- [[Roam Depot Extensions]]
- **Perplexity AI**
- Search the advanced conversational search engine at Perplexity AI using their API from within your Roam Research graph!
- You will need an API key from https://www.perplexity.ai/settings/api and you can enter this in the Roam Depot settings for this extension.
- You will also need to choose the AI model to use for your search. The currently available options are available from https://docs.perplexity.ai/guides/model-cards.
- Pricing for the Perplexity AI service can be found at https://docs.perplexity.ai/guides/pricing, and rate limits and usage tiers are at https://docs.perplexity.ai/guides/usage-tiers.
- You can trigger this extension using the Command palette and the 'Ask Perplexity' command. You can choose to output the Sources on which Perplexity has relied to create its response. You can also turn on the option to show a Follow Up section. With both turned on the output to your first question will be something like this:
- 
- When this extension is installed, it creates a page in your graph with a SmartBlock. If you are using the SmartBlocks extension, which you absolutely should be, you can turn on the option to ask Follow-Up Questions in your Roam Depot Settings for this extension. Then, click the 'Ask Follow-Up Question' button as shown in the image above. This will create a pop-up in which you can enter a follow-up query.
- The result of the call will be displayed nested below the original query.
- 
- You can keep asking follow-up questions for as long as you wish, and the extension will keep track of the discussions.
- The settings pane in Roam Depot looks something like this:
- 
- The 'Include Sources in Follow-Up' setting allows you to turn on or off the sources display for any follow-up questions. Some users might prefer to have Sources for their first query but not their follow-up queries. It's up to you.
- Finally, the 'Default instructions' field allows you to specify some general instructions you wish to apply to all queries. Examples of these can be found on the Perplexity website, but one is copied below for convenience.
- `Consider all context from our conversation thread and use that context along with any results your search may produce to inform your response.`
- Perplexity also has an array of settings you could use to fine-tune your queries if you wish. You can access these by turning the 'Advanced Perplexity Settings' switch to ON.
- Each of these settings is described in the documents at https://docs.perplexity.ai/api-reference/chat-completions. This extension will check to make sure that any changes you specify are within the parameters described in the Perplexity docs. Note that a toast will appear if something you enter is outside the allowed range.
- For the 'Search domain filter' you can enter domains that you wish to search from or exclude. This feature is only available for some Perplexity account tiers. If you wish to use this, you need to enter an array as shown below. "space.com" will allow searching this domain. "-wikipedia.org" will exclude data from Wikipedia due to the preceding - sign. There is a limit of three domain filters you can list.
- `["space.com", "nasa.gov", "-wikipedia.org"]`
- If you have any issues, you can check the API documents at Perplexity or ask questions on [Slack](https://app.slack.com/client/TNEAEL9QW/).
- **[Card Theme](https://github.com/qcrao/card-theme)**
- Card Theme is a Roam Research extension that provides a beautiful, card-based theme with special styling for different types of notes (Fleeting, Literature, Reference, Permanent, and Question notes).
- 
- **Features**
- **Beautiful Card-Based Design**
- Clean and modern card-based interface
- Beautiful styling for different note types
- Shadow effects and rounded corners for better visual hierarchy
- **Note Type Styling**
- Fleeting Notes (F-Note): Light style with red accent
- Literature Notes (L-Note): Light style with green accent
- Reference Notes (R-Note): Light style with orange accent
- Permanent Notes (Z-Note): Blue gradient with arrow design
- Question Notes (Q-Note): Orange style with arrow design
- **Enhanced Navigation**
- Pin/unpin main content area
- **Installation**
- In Roam Research, go to Settings > Roam Depot > Community extensions
- Search for "Card Theme"
- Click "Install"
- **Configuration**
- After installation, the theme will be automatically applied to your Roam Research graph. No additional configuration is required.
- **Usage**
- **Pin/Unpin Main Content**
- The theme includes a pin/unpin feature for better navigation:
- Click the pin icon in the top bar to toggle between modes
- When unpinned: Main content stays fixed while right sidebar scrolls independently
- When pinned: Main content scrolls with right sidebar together.
- **Note Type Tags**
- To use the different note styles, simply tag your blocks with the appropriate tag:
- `#F-Note` - For Fleeting Notes
- `#L-Note` - For Literature Notes
- `#R-Note` - For Reference Notes
- `#Z-Note` - For Permanent Notes
- `#Q-Note` - For Question Notes
- 
- **Acknowledgments**
- This theme is built upon several amazing contributions from the Roam Research community:
- [Masonry Vanilla theme](https://gitmurf.github.io/masonry-vanilla/) by GitMurf, which provides the foundational masonry layout and functionality
- [Lisa Marie Cabrelli](https://www.youtube.com/@LisaMarieCabrelli/playlists), whose "Roam for Results" course demonstrated the practical application and effectiveness of this theme style
- The broader Roam Research community for their continuous contributions and improvements to the theming ecosystem
- The combination of these resources inspired the creation of this card-based theme to enhance the note-taking experience in Roam Research.
- **DOI Handling**
- Paste DOIs into Roam Research and receive a nicely formatted link instead of Roam's default simple text output. OR, check a page for all DOIs not already formatted as markdown and replace them with formatted links.
- Currently, Roam Research pastes DOIs as simple text:
- `10.1088/1741-4326/ab8e8b` or `doi.org/10.1016/j.neuron.2021.09.035` unless they are already preceded by `https://`
- With this extension, you can copy a DOI into your clipboard, focus a block in your graph and then trigger the Command Palette option 'Paste DOI from clipboard'. There are three options for how you can format the output, configurable in Roam Depot settings for this extension.
- Unaltered - what you have in your clipboard is shown as the alias for the link `[clipboard text](link)`
- Normalised - the alias will be formatted in the format `[10.1088/1741-4326/ab8e8b](https://doi.org/10.1088/1741-4326/ab8e8b)`
- Item Name - the extension will contact CrossRef and try to resolve a name for the item the DOI points to. The alias will then be the name `[Testing a global standard for quantifying species recovery and assessing conservation impact](https://doi.org/10.1111/cobi.13756)`
- The other Command Palette command is to 'Check page for DOIs'. This will parse the entire page of text, or that date's page if you're on the daily note page. Where it finds DOIs that aren't already in markdown alias format `[]()` the extension will convert that string to a markdown link using your preferred display format from the settings.
- [[March 28th, 2025]]
- [[Quality of Life Improvements]] ✨ for `:q`
- Background:: (in case you do not know what `:q` is)
- `:q` queries can be used to display the results of datomic/datascript queries in your Roam graph
- `:q` feature has existed since very early Roam, but we revamped it a few months ago in december
- Teaser into the revamped `:q`
- 
- **The new improvements:**
- Ability to "Nest under parent results" for columns containing blocks/pages
- Demo
- 
- Also, we now automatically detect which attributes in the find spec are roam entities
- so, no need anymore to return uids and have `uid` in the name
- for example, to show the pages in the graph, the query is as easy as
- `:q [:find ?p :where [?p :node/title]]`
- :q [:find ?p :where [?p :node/title]]
- Ability to transform columns containing strings
- 
- (i.e. column showing a `:block/string` or `:node/title`
- For now, only have two transformation functions
- `to number`
- Most useful to extract a number from a block and then sort according to that value
- `remove attribute`
- Example:: q getting children of a block and parsing out number
- sample data (student + roll number)
- Alice 1
- Bob 2
- Claire 3
- Herbert 43
- Andy 78
- the query
- ```clojure
[:find ?e ?s
:where
[?parent :block/uid "CQjUT-rQD"]
[?parent :block/children ?e]
[?e :block/string ?s]]```
- :q ```clojure
[:find ?e ?s
:where
[?parent :block/uid "CQjUT-rQD"]
[?parent :block/children ?e]
[?e :block/string ?s]]```
- Ability to customize how many results/rows to show per page (+ shuffle results)
- 
- Description::
- default pagination value is 10 rows/page
- can be customized via the footer
- If query has less than pagination, then the footer is not visible
- in those cases, the rows/page selector is in the `...` menu
- We've also added a new "shuffle results" button in the `...` menu
- Demo
- Example:: get 4 random pages in the graph
- `:q "Pages in the graph" [:find ?p :where [?p :node/title]]`
- :q "Pages in the graph" [:find ?p :where [?p :node/title]]
- GIF
- 
- Ability to represent dates inside of `:q` (i.e. date arithmetic)
- 
- Some new useful inbuilt `rules` to ease writing queries
- 
- Ability to resize columns
- 
- Ability to have the query syntax in a separate code block
- `:q "Title" ((clojure code block with query))`
- **An example:**
- **instead of **
- `:q "Number of pages in the graph" [:find (count ?page) . :where [?page :node/title _]]`
- :q
"Number of pages in the graph"
[:find (count ?page) . :where [?page :node/title _]]
- **you can have**
- a block with the query syntax
- ```clojure
[:find (count ?page) .
:where
[?page :node/title]]```
- and the main block uses this:
(looks like `:q "Number of pages in the graph" ((Zjbs1ksj0))`)
- :q "Number of pages in the graph" ```clojure
[:find (count ?page) .
:where
[?page :node/title]]```
- **Why?**
- datalog queries are easier to type when in a code block
- you can reuse query syntax across multiple queries
- **Video demo:**
- {{[[video]]: https://www.loom.com/share/a3e5f8126d924b3eb95c7c11209eceee}}
- For more info & examples, please go to this page: [[Examples of :q query blocks]]
- [[March 27th, 2025]]
- Fixed [[bug]] which caused blocks with versions to get orphaned when deleted
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FGpxVIPTKLy.mp4?alt=media&token=9a766494-2a02-4616-a5a8-2870f309e7e6}}
- Fixed [[bug]] which caused the cursor to get put in the wrong place after some multi-select operations
- Speed up multi-select delete, indent and unindent actions
- [[March 20th, 2025]]
- [[Quality of Life Improvements]]
- [[Mermaid Diagrams]]
- Removed horizontal scroll that was annoying on some diagrams
- Added support for the definition of the diagram to be a code block
- {{[[mermaid]]}}
- ```plain text
quadrantChart
title Reach and engagement of campaigns
x-axis Low Reach --> High Reach
y-axis Low Engagement --> High Engagement
quadrant-1 We should expand
quadrant-2 Need to promote
quadrant-3 Re-evaluate
quadrant-4 May be improved
Campaign A: [0.3, 0.6]
Campaign B: [0.45, 0.23]
Campaign C: [0.57, 0.69]
Campaign D: [0.78, 0.34]
Campaign E: [0.40, 0.34]
Campaign F: [0.35, 0.78]```
- Added support for setting the default [[Theme]]
- You can set the default theme with custom css
- {{[[roam/css]]}}
- ```css
:root {
--mermaidjs-theme: dark;
}```
- You will have to reload the page after applying this for it to take affect
- See the [docs for possible themes](https://mermaid.js.org/config/theming.html#available-themes)
- [[March 18th, 2025]]
- [[Quality of Life Improvements]]
- [[Mermaid Diagrams]] update
- Updated to the most recent mermaidjs, you can now create any of the diagrams listed in [the docs](https://mermaid.js.org/intro/)
- {{[[mermaid]]}}
- You can create a new mermaid diagram by typing `/mermaid` and selecting mermaid from the dropdown
- Fixed a [[bug]] where a full screen error would occasionally show up when copying the block's ref on a mermaid diagram
- 
- [[March 7th, 2025]]
- [[New Features]]
- [[Query]] Titles
- Click into the top bar to edit the title of your queries
- 
- [[March 6th, 2025]]
- Adds a timeout of 5 seconds to [:q query]([[Examples of :q query blocks]])
- this way, if you accidentally write (or generate 😉) a `:q`query that is very inefficient, it won't freeze your Roam graph indefinitely
- If this timeout is causing issues for you even for a valid query, please contact us at [support@roamresearch.com](mailto:support@roamresearch.com)
- [[Developer Notes]]
- We've added a timeout to `q`, `pull`, and variant functions in [[Roam Alpha API]]
- Throws an error with message `Query and/or pull expression took too long to run.` when you run into the timeout limit
- More info: https://roamresearch.com/#/app/developer-documentation/page/sxT2BV3Ko
- [[March 4th, 2025]]
- [[Bug Fixes]]
- cut / paste no longer creates "ghost" references
- Shift click opens version blocks in the sidebar
- [[February 27th, 2025]]
- [[New Features]]
- [[Query Builder]] For native Roam [[queries]]
- Click on the pen icon in the top right to edit an existing query or type `/query` to open a new one
- 
- [[February 24th, 2025]]
- [[Bug Fixes]]
- Fixed multiple bugs with pasting [[Markdown]] introduced by a recent update
- Roam will now convert the visual nesting of the copied text much better than before even if it isn't valid markdown
- An example of what wasn't working before
- 
- Now it converts it into the proper nesting
- 
- [[February 23rd, 2025]]
- **[[Zen Mode]]**
- **Zen Mode (or Focus mode)** allows you to focus on just the current page or block by hiding all unnecessary UI elements
- What happens when you trigger Zen Mode?
- hides the left and right sidebars
- hides the topbar ( a minimal topbar is visible on hover )
- a minimal topbar is visible on hover
- only has
- sync dot
- help button
- navigation arrow buttons (in desktop app)
- hides the search bar (you need to use the hotkey to trigger when in this mode)
- and, in [[Desktop App]], switches to full screen (removing menu bar too)
- When you get out of Zen Mode, it brings everything back to how it was before
- **Demo**
- 
- **How to use?**
- You can trigger Zen Mode by opening the command palette (`cmd-p` or `ctrl-p`) and then triggering the command **"Toggle Zen Mode"**
- To quit Zen mode, you just trigger that command again
- **Some useful shortcuts for navigating when in Zen Mode:**
- Search: `cmd-u` or `ctrl-u`
- Go to daily notes: `ctrl-shift-d` or `alt-d`
- **Huge thanks** to [[Mark Lavercombe]] for his extension [Focus Mode](https://github.com/mlava/focus-mode) which was a major source of inspiration for this feature
- We liked it so much that we decided to make it native 😁
- If you want more customizability than the native feature provides (like say, you want to not hide right sidebar, or keep search intact), do play around with his extension!
- **[[Desktop App]] 0.0.25**
- New option for Windows/Linux: `Menu Bar` > `View` > `Hide menu bar when fullscreen`
- 
- [[February 21st, 2025]]
- [[Roam Depot Extensions]]
- **Live AI Assistant**
- **Powerful and versatile AI Assistant tailor-made for Roam. Rely on efficient and smart built-in prompts, create rich custom prompts or use voice, image or any part of your graph as prompt or context, change the style of the AI responses or create your custom styles !**
- **Unlock the full power of advanced Roam queries using simple natural language queries with NL Query Agents! Discover a new way to interact with your graph with Live Outliner Agent, and structure AI responses exactly as you need. Support up-to-date models, and most of existing models through OpenRouter and local ones through Ollama.**
- **🆕 New in v.12 (MAJOR UPDATE)**
- New context menu with a large set of built-in prompts and better way to handle custom prompts
- AI Agents to convert natural language requests in Roam queries or :q queries, search and ask question to your graph
- Live Outliner Agent, a brand new way to apply generative AI to any given part of your Roam graph (an AI canva tailored for Roam)
- Tokens and pricing counter
- Recent models support, including DeepSeek, o3-mini (avaible only if you are tier 3 minimum currently)...
- (See changelog [here](https://github.com/fbgallet/roam-extension-speech-to-roam/blob/main/CHANGELOG.md))
- Live AI Demo `:q`:
- 
- Left sidebar or topbar controls:
- 
- ****GETTING STARTED****
- Choose the LLM provider(s) that will provide you with an API key to use their services at will and copy your API key in the extension settings.
- OpenAI and Anthropic currently provide the most suitable and widely tested models for Live AI Assistant, but many other options are available. For paid models, you will be billed for each request based on the number of tokens used, which in practice is **very much cheaper** than existing subscriptions, and without the specific limitations of these subscriptions (you don't need any subscription to use Live AI Assistant, do not confuse the paid use of the API with, for example, ChatGPT Plus).
- Obtaining an API key is a simple operation, accessible to any user. Follow the [instructions provided here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/api-keys-and-pricing.md) if you do not already have API keys and see [here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/api-keys-and-pricing.md#main-models-pricing-per-million-tokens) current API pricing.
- **Simple prompt**
- Just write some basic prompt in a block (or press the microphone button and provide vocal instructions), keep the cursor focus in this block and click on the AI Generation button (lightning bolt icon). That's all !
- You can change the **default model** in the extension settings or in the Live AI context menu, by right-clicking on a command to display the available models, and right-clicking on a model to set it as default model.
- You can easily use **structured prompts** by selecting multiple blocks (including images with models supporting image recognition). Note that block references will be resolved and remplaced by the corresponding block content.
- You can easily **compare AI models** responses: right click on 'Generate a response again' button `⟳` appearing on the right of the AI response and choose another model. The new response will be inserted just above the first one.
- **Chat with your AI Assistant**
- You can easily continue any conversation with an AI Assistant:
- 
- click on the conversation icon on the right of the last AI response block (if generated recently) or simply insert a block as next sibling of an AI response block (the one that contains it's role description, provided in settings, by default: `AI Assistant ():`). It is not necessary to insert your role (such as "Me:") but more convenient in terms of readability.
- write or dictate your prompt (it can include children blocks),
- click on the button to continue the conversation, or run the usual AI generation command, or click on "Continue the conversation" command in Live AI context menu (all previous sibling blocks and their children will be taken into account).
- **Apply built-in prompts to existing content**
- Often, you will ask your assistant to process information already available in your graph, such as translating or summarizing a set of blocks. You could write instructions and copy the blocks to process to use them as a big prompt, but to make the most common tasks easier, Live AI Assistant offers a set of built-in prompts (around fifty) designed to be effective, rigorous, and tailored to Roam's specific constraints. You simply need, either:
- to select (by multi-block selection) the content to process and choose the built-in prompt from the context menu.
- open the context menu, select some context element to use as input content and choose the built-in prompt to apply.
- To open the **context menu**, the most efficient way is to use the `Live AI Assistant: Open commands context menu` command from the Command Palette (Cmd/Ctrl + p), or even better, use the shortcut (default is `Cmd + Ctrl + a`, which you can modify as you wish). Two other very simple options: right-click on the AI completion icon, or Cmd/Ctrl + right-click anywhere on the page where right-clicking does not have a specific function in Roam.
- ⚡️ **In practice, all you need is a hotkey and a few letters to quickly find a command. For example, to translate a block into French, you just need to press 'cmd + Ctrl + a', type 'fre' and press Enter! It's almost instant !**
- You can add specific instructions to built-in prompts simply by clicking the '+' button on the left of the prompt search box.
- You can view the exact content of each of these prompts [here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/428602f8a383b46425a80f6e63ec2ef3af05d1b8/src/ai/prompts.js#L112).
- **Create & apply custom prompts**
- Create your custom prompts simply by inserting `#liveai/prompt` in some block. The content of this block will be used as title of your custom prompt and all its children will be used as a structured prompt (block references will be resolved). They will appear in the "custom prompts" section of the context menu. In the title block of your custom prompt, you can define an inline context, see the syntax [here]((https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#3-context-definition-and-inline-context).
- **Providing rich context**
- You can easily **add context** to your prompt, that is, a large set of data from your graph that will serve either as resources or as data to be processed, depending on the nature of your prompt and whether you have selected a set of blocks to process or not. In the first case, the context will be added to the system prompt and not as content to be processed. In the second case, the context will be inserted into the user prompt, to be processed directly.
- To define the context, you can either check the corresponding box in the context menu or press the corresponding modifier keys to catch all the content of the following elements (at different children depths depending on the element type and settings):
- **Page** (click +`Alt`): the current page zoom where the focus block or selected blocks are inserted, or by default, the main page zoom (at the center of the display)
- **LinkedRefs** (click +`Ctrl`): the linked references of the current page
- **Sidebar** (click +`Shift`): all the content of the sidebar
- **DNPs** (click +`Ctrl`): if you are in Daily Notes, the last DNPs (7 by default, you can increase the limit in the options)
- See more details on context definition and inline context [here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#3-context-definition-and-inline-context)
- **Query Agents**
- Currently, 4 complementary AI Agents can help users to find precise information in their Roam Graph through natural language queries. The first three do not send any data from your graph to the LLM, they simply interpret the user's request to transform it into native Roam database queries. In contrast, the "Ask to your graph..." agent will have access to the data extracted by the queries to answer your question or proceed with the required processing.
- **Natural language query**: transform the user request in a properly formatted Roam query. It supports period range and semantic variations, [see details here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/query-agents.md#natural-language-query-agent). Very reliable.
- **Natural language :q Datomic query**: transform the user request in a Datalog Datomic query using the native `:q` query syntax. The results are less reliable than with the previous agent because the syntax is much more complex. It works very well for fairly simple queries, more randomly for complex ones. [See details here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/query-agents.md#natural-language-q-datomic-agent).
- **Smart Search Agent**: transform the user requests in a set of Datomic queries relying on .q Roam API, to support more complexe queries with hierarchical conditions. In principle allows for more precise results than previous agents, but it can be slow or even cause momentary freezing for large graphs. ⚠️ Use with caution, knowing that this is an experimental feature 🧪. [See details here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/query-agents.md#smart-search-agent).
- **Ask to your graph...**: relying on the results of the SmartSearch Agent, proceed to post-processing expressed in the user instructions or question. ⚠️ Use with caution, knowing that this is an experimental feature 🧪. [See details here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/query-agents.md#ask-to-your-graph).
- **Live Outliner Agent**
- This is another way of using AI, an alternative to the "Chat" format. It involves an Agent that autonomously chooses to modify an outline, that is, a set of blocks located under a given parent block, based on user requests. Instead of generating a series of content one after another as in a chat, the Live Outliner Agent modifies, adds, or removes specific blocks in the outline, while maintaining the same structure. In other words, the generation is inserted into a pre-existing structure (similar to a template) and acts only surgically, modifying only the necessary elements, which reduces the number of output tokens. It's a powerful and innovative feature, still experimental 🧪. [See details here](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/live-outliner.md).
- **Detailed documentation [🔗](https://github.com/fbgallet/roam-extension-live-ai-assistant/tree/main#detailed-documentation)**
- **Generative AI**
- [Voice transcription](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#voice-transcription)
- [Built-in prompts](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#built-in-prompts)
- [Context definition and inline context](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#3-context-definition-and-inline-context)
- [Custom prompts](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#custom-prompts)
- [Custom styles](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#custom-styles)
- [Using SmartBlocks commands](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/generative-ai.md#smartblocks-commands)
- **AI Agents**
- [Query Agents](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/query-agents.md)
- [Live Outliner Agent](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/live-outliner.md)
- **LLM Providers**
- [Get API Keys](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/api-keys-and-pricing.md#get-api-keys)
- [Models pricing](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/api-keys-and-pricing.md#main-models-pricing-per-million-tokens)
- [Ollama to run local models](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/api-keys-and-pricing.md#using-ollama-to-run-local-models)
- **Support my work**
- This extension requires a lot of work in my free time. If you want to encourage me to develop further and enhance it, you can [buy me a coffee ☕ here](https://buymeacoffee.com/fbgallet) or [sponsor me on Github](https://github.com/sponsors/fbgallet). Thanks in advance for your support! 🙏
- **For any question or suggestion, DM me on **X/Twitter** and follow me to be informed of updates and new extensions : [@fbgallet](https://x.com/fbgallet).**
- Please report any issue [here](https://github.com/fbgallet/roam-extension-live-ai-assistant/issues).
- [[February 20th, 2025]]
- **New abilities to query**
- Ability to query for blocks `created-by:` or `edited-by:` any user
- Makes it possible to have queries like:
- example: Tasks created by [Conor]([[Conor White-Sullivan]]) and edited (i.e. finished) by [Baibhav]([[Baibhav Bista]])
- `{{[[query]]: {and: [[DONE]] {created-by: [[Conor White-Sullivan]]} {edited-by: [[Baibhav Bista]]}}}}`
- another example: Tasks completed by a team member in a particular project
- 
- Additional notes
- Use [[user's display page]]. You can find a user's display page title by hovering over a block they created.
- Note that `edited-by:` matches only the user who last edited the block.
- change in behavior for `by:`
- `by:` previously used to behave like `edited-by:` but now matches blocks either created or edited by particular user
- API tokens now have their own display name pages of the format [[API Token: ...desc...]]
- main consequence is that you can now query for blocks/pages created/edited by tokens
- **example:** if you're using our [[Raycast]] extension (deets here), you can query for blocks created or edited by the corresponding API token
- `{{[[query]]: {by: [[API Token: Baibhav's Raycast]]}}}`
- 
- to learn how to create API tokens, please visit [[Create API Tokens]]
- [[February 19th, 2025]]
- [[Roam Depot Extensions]]
- **Discourse Graphs**
- The Discourse Graph extension enables Roam users to seamlessly add additional semantic structure to their notes, including specified page types and link types that model scientific discourse, to enable more complex and structured knowledge synthesis work, such as a complex interdisciplinary literature review, and enhanced collaboration with others on this work.
- For more information about Discourse Graphs, check out our website at [https://discoursegraphs.com](https://discoursegraphs.com/)
- [[February 17th, 2025]]
- **[[Quality of Life Improvements]] [[roam@0.12.0]]**
- [[Encrypted Graphs]] now load up to 5 times faster than before, with much less memory usage. They are now only about 2 times slower to load than a regular graph of similar size.
- This might fix the "graph is too large" error on mobile for encrypted graphs
- Regular graphs also got a small improvement to load time.
- We hopefully fixed Roam freezing when coming back from being idle (in the background). Previously, if you had a really large graph this could freeze your graph for minutes at a time, and possibly crash it.
- [[February 14th, 2025]]
- [[Bug Fixes]]
- Fixed [[Unlinked References]] not working right for [[nested [[page refs]]]]
- Fixed pasting in markdown with roam links like `[changes]([[Change Log]])`
- [[February 7th, 2025]]
- [[Quality of Life Improvements]]
- Automatically clean up empty (and with no references) daily notes option
- 
- [[February 5th, 2025]]
- [[File Manager]]
- Added a download all button
- 
- Only available on chrome and the desktop app
- Most recent uploads now show at the top
- Fixed the files panel being slow to open by adding a "show more" button at the bottom
- Fixed bug causing the file manager to crash Roam
- [[Bug Fixes]]
- Fixed some images (svgs) not displaying in [[Encrypted Graphs]]
- [[February 4th, 2025]]
- [[Bug Fixes]]
- Fixed nested tables crashing Roam
- [[February 3rd, 2025]]
- [[Quality of Life Improvements]]
- Fixed markdown [[Export]] freezing and reduced memory usage
- Fixed markdown [[Export]] for [[embed-path]] and [[embed-children]]
- Small load time improvements
- [[January 27th, 2025]]
- Added graph size metrics to the graph settings tab
- 
- [[January 23rd, 2025]]
- Small [[Quality of Life Improvements]]
- Fix markdown import for daily-note-style titled pages
- If you have markdown files named like "January 23rd, 2025", then they now show up in the "Daily Notes" view
- Note that the files will need to be exactly in Roam's DNP title format for this to work
- Fix infinite spinner issue when exporting all files as Flat markdown
- [[Roam Depot Extensions]]
- **Last Year Today**
- Last Year Today is a Roam Research extension that automatically shows you what you wrote on the same day in previous years. It helps you reflect on your past thoughts, track your progress, and rediscover valuable insights from your journal entries.
- 
- **Features**
- **Automatic Daily Updates**
- Automatically opens your historical pages at a configurable time each day
- Displays entries from previous years in the right sidebar
- Customizable number of years to look back (1-10 years)
- **Visual Distinction**
- Historical pages are visually distinct with custom styling
- Beautiful borders and hourglass icons for easy identification
- Clean and intuitive interface
- **Flexible Controls**
- Command palette integration for manual control
- Open and close historical pages on demand
- Configurable settings through the Roam Research settings panel
- **Installation**
- In Roam Research, go to Settings > Roam Depot > Community extensions
- Search for "Last Year Today"
- Click "Install"
- **Configuration**
- After installation, configure the extension in the Roam Research settings panel:
- **Years Back**: Choose how many years to look back (1-10 years)
- Default: 1 year
- Maximum: 10 years
- **Hour to Open Last Year Today Page**: Set when the historical pages should automatically open
- Default: 9 AM
- Range: 0-23 (24-hour format)
- 
- **Usage**
- **Automatic Updates**
- The extension will automatically open your historical pages in the right sidebar at your configured time each day. Each historical page will be displayed in chronological order, from oldest to newest.
- **Manual Controls**
- You can also control the extension manually through the command palette (Cmd/Ctrl + P):
- **Open Last Year Today**
- Opens historical pages in the right sidebar
- Shows pages from previous years for the current date
- **Close Last Year Today**
- Closes all historical page windows
- Cleans up the sidebar
- 
- **Visual Indicators**
- Historical pages are marked with:
- Distinctive borders
- Hourglass icon (⏳)
- Highlighted date headers
- Subtle shadows for depth
- 
- [[January 9th, 2025]]
- Small [[Quality of Life Improvements]]
- Exclude media links from search results
- (both in web app and in [[mobile]] Native View)
- Fix incorrect behavior of [[nested [[page refs]]]] in queries
- In Mac, Support emacs-style `ctrl-p` and `ctrl-n` hotkeys for navigating up/down in a number of list views
- in page ref autocomplete (i.e. `[[]]`), cross graph search (`cmd-shift-u`), Find or create page (`cmd-u`) and Advanc3ed block search (`ctrl-shift-9`)
- You can already use vim-style `ctrl-k` and `ctrl-j` for navigating up/down too
- [[bluesky]] posts now embed nicely too!
- An example post
- https://bsky.app/profile/inkandswitch.com/post/3laaktm2s7x2s
- [[January 8th, 2025]]
- [[Quality of Life Improvements]]
- **Better touch screen experience for the web app**
- (tablet users should really like this change)
- Long press on any page or block reference to open context menu (i.e. right-click menu)
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FIGSfzIKdoG.mov?alt=media&token=5811a001-0b70-4584-908e-805683bf14da}}
- Weird accidental selection issues on iOS/iPadOS should be much reduced
- **Right-click menus now work more consistently across the app**
- Now available for alias links to block or alias links to page too
- For consistency, block ref context menu can now be triggered by right-click too (the original way i.e. left-click still works)
- ctrl-click works for right click (on MacOS)
- Small misc fixes:
- Fixes bug of shift-click sometimes selecting other content
- was particularly noticeable in linked refs
- Fixes ctrl-n (hotkey for "Open new Roam window") not working for some screens in Windows/Linux Desktop app
- [[January 7th, 2025]]
- [[Roam Depot Extensions]]
- **[API.Bible](https://github.com/mlava/bible) by [[Mark Lavercombe]]**
- Import verses, sections, passages and chapters from your preferred Bible into your Roam Research graph.
- 
- Features
- Command Palette
- Search Bible by string
- this option will present a search modal and then search the text of your preferred Bible for that string. It will then present a list of options to choose from in another modal, and then import the text of that verse once you've decided.
- 
- 
- Import Bible section
- a long list of available sections for your Bible will appear. This isn't very user friendly, but perhaps some might prefer this option.
- 
- Import Bible section by Chapter
- this option allows you to choose sections from a specific chapter, which presents a much shorter dropdown list.
- Search for and import a Bible section by title
- this will allow you to enter a search string and will then check for sections matching that string.
- Import a Bible passage or verse
- this will allow to specify a verse or range of verses from a Book and Chapter to import
- 
- Import a random Bible verse
- fairly obvious
- Details
- This extension requires an API key for API.Bible. You can sign up for free at https://scripture.api.bible/signup Then, go to https://scripture.api.bible/admin/applications and create a new application. Complete as shown below to get an API key
- 
- Copy the long alphanumeric key from https://scripture.api.bible/admin/applications and enter it into the settings for this extension in Roam Depot.
- Then, select your preferred language. This will call the API.Bible api and retrieve a list of Bibles available in your language. Once the Preferred Bible Version dropdown appears, choose a Bible and Roam will import some basic information about that Bible for future use.
- Not all Bible versions in the API have all Books and only some have Bible 'sections' - a series of verses that form a specific story. e.g.
- 
- You then have several options available to get scripture into your graph:
- Command Palette
- Search Bible by string
- this option will present a search modal and then search the text of your preferred Bible for that string. It will then present a list of options to choose from in another modal, and then import the text of that verse once you've decided.
- 
- 
- Import Bible section
- a long list of available sections for your Bible will appear. This isn't very user friendly, but perhaps some might prefer this option.
- 
- Import Bible section by Chapter
- this option allows you to choose sections from a specific chapter, which presents a much shorter dropdown list.
- Search for and import a Bible section by title
- this will allow you to enter a search string and will then check for sections matching that string.
- Import a Bible passage or verse
- this will allow to specify a verse or range of verses from a Book and Chapter to import
- 
- Import a random Bible verse
- fairly obvious
- SmartBlock
- is you have SmartBlocks installed, you can use the SmartBlock command <%IMPORTRANDOMVERSE%> and create a button for your daily template, for example.
- Notes:
- as not all Bible versions in the API have sections defined, those Command Palette options will not work if you have chosen a Bible without sections.
- [[January 3rd, 2025]]
- **[[Desktop App]] 0.0.24**
- A few Quality Of Life updates:
- Setting to "**Ask confirmation when quitting Roam**"
- very useful if, like some of our team members, you accidentally close the desktop app while trying to close some other window/app 😅
- You can turn this on via File menu > "Ask confirmation when quitting Roam"
- 
- Reopen last opened windows when using the desktop app again
- This used to work on MacOS before, but now it works across the board - on Windows and Linux too!
- ARM versions of the desktop app now available for Windows and Linux
- You can download the installers by going to our homepage: https://roamresearch.com/
- [[Video]] going through this QOL release
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2F3zOjPceTF4.mp4?alt=media&token=650dbfad-d762-4012-bc7c-a954b7e8a51c}}
- [[January 2nd, 2025]]
- [[Roam Depot Extensions]]
- **[Bluesky Extract](https://github.com/8bitgentleman/roam-depot-bluesky-extract) by [[Matt Vogel]]**
- Extract Bluesky posts into your Roam Research graph with formatted text and images.
- **Features [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-extract#features)**
- Extract Bluesky posts with a customizable template
- Import images as child blocks or inline
- Auto-extract posts on graph load when tagged
- Multiple ways to trigger extraction:
- Right-click menu
- Command palette
- Keyboard shortcut (Ctrl+Shift+B)
- **Usage [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-extract#usage)**
- Paste a Bluesky post URL into a block
- Either:
- Use the right-click menu and select "Extract Bluesky Post"
- Use the command palette (Cmd+P) and search for "Extract Bluesky Post"
- Use the keyboard shortcut Ctrl+Shift+B (configurable)
- **Configuration [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-extract#configuration)**
- The plugin can be configured in the Roam Depot settings panel:
- **Post Template**: Customize how extracted posts appear using variables:
- `{POST}` - Post content
- `{URL}` - Post URL
- `{AUTHOR_NAME}` - Author's display name
- `{AUTHOR_HANDLE}` - Author's Bluesky handle
- `{AUTHOR_URL}` - Author's Bluesky profile URL
- `{DATE}` - Post date
- `{NEWLINE}` - Line break
- `{IMAGES}` - Post images (when using inline mode)
- **Image Location**: Choose how images are handled:
- Child block: Images appear as blocks under the post
- Inline: Images appear within the post block
- Skip images: Images are not extracted
- **Auto Extract**: Automatically extract posts tagged with a specific tag when Roam loads. This is particularly useful when using a Quick Caption solution on mobile. When browsing bluesky share a post to roam and tag the block before sending it. Next time you load up your graph the post will be automatically extracted.
- **Auto Extract Tag**: Customize the tag used for auto-extraction (default: "bluesky-extract")
- **[Bluesky Post](https://github.com/8bitgentleman/roam-depot-bluesky-post) by [[Matt Vogel]]**
- Post directly from Roam Research to Bluesky! This Roam Depot extension allows you to share your thoughts, notes, and threads from Roam to your Bluesky account with just a few clicks.
- **Features [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#features)**
- 🚀 Post single blocks or entire thread structures
- 🖼️ Supports image uploads (including Dropbox images)
- #️⃣ Automatically converts Roam page references to hashtags
- 📝 Resolves block references in posts
- 📅 Optional date stamping of posted content
- ⌨️ Command palette integration with default hotkey (Ctrl+Shift+P)
- **Configuration [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#configuration)**
- **Bluesky Account Setup [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#bluesky-account-setup)**
- Go to Settings > Bluesky Post
- Enter your Bluesky username and password
- Click the "+" button to save your credentials
- **Date Append Settings (Optional) [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#date-append-settings-optional)**
- Enable/disable automatic date appending to posted blocks
- Customize the date append template (default: "sent on {DATE}")
- **Usage [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#usage)**
- Select any block in your Roam graph
- Either:
- Use the command palette (Ctrl+P) and search for "🦋 Post to Bluesky"
- Use the hotkey Ctrl+Shift+P
- The block and its children (if any) will be posted as a thread to Bluesky
- **Formatting Support [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#formatting-support)**
- `[[Page References]]` are converted to #hashtags
- `((Block References))` are resolved to their content
- Images with `` syntax are uploaded
- **Notes [🔗](https://github.com/8bitgentleman/roam-depot-bluesky-post#notes)**
- Character limit per post: 300 characters
- Supports nested thread creation from block hierarchies
- Images from Dropbox links are automatically handled
#### [[2024]]
- [[December 23rd, 2024]]
- [[mobile]] 1.1.4
- Unlock [[Encrypted Graphs]] with Face ID (ios) or fingerprint (android)
- Your password will be stored on your device, either in Keychain on ios or Keystore on android
- Fix a bug which sometimes prevented the regular (web) view from working while offline
- **Native View**
- Added the /date and `{{date}}` component
- Made it so that the references view opens blocks by default which only contain the referenced page (to match the behavior of web)
- [[December 20th, 2024]]
- [[Quality of Life Improvements]]
- **Revamp of `:q` query blocks**
- `:q` queries can be used to display the results of datomic/datascript queries in your Roam graph
- They are kind of an advanced feature (because of the syntax that you have to write the queries in)
- However, if you're not technically inclined like that, don't fret!
We have some new beginner-friendly query improvements coming soon! 😉
(also, if you have a `:q` you would like help with, can always ask in the Roam Slack. We have a lot of really helpful members!)
- Teaser into the revamped `:q`
- 
- Longer Demo video
- {{[[video]]: https://www.loom.com/share/b384798d37904947afefe9059c71035e}}
- For examples and documentation, please checkout [[Examples of :q query blocks]]
- [[Bug Fixes]]
- Fixed issue with pasting images from some websites
- introduced by Fixed lots of long standing bugs with copy and paste from other websites
- [[December 17th, 2024]]
- [[Bug Fixes]]
- Fixed a long standing memory leak
- [[December 15th, 2024]]
- [[mobile]] 1.1.0
- **Deep links to the mobile app**
- https://roamresearch.com and roam:// links will now open up in the mobile app when clicked on inside of another app
- **Native View**
- Added a "share link" button to the multi-select toolbar
- Fix syncing issues when editing a graph on mobile and the web app at the same time
- Double tap on the roam icon of the open graph to navigate to daily notes
- Fixed the first day of the week setting of the calendar to match the setting on the web app
- Changed the design of the calendar to be more compact
- Fixed the display of read only graphs
- Small performance improvement to the initial load time
- [[December 14th, 2024]]
- Fixed regression where [[Desktop App]] wouldn't save the last open windows
- [[December 6th, 2024]]
- [[Desktop App]] 0.0.23
- Fixed warning when installing on [[Windows]]
- Fixed it not working on [[Ubuntu]] >= 24.10
- Fixed images in offline graph's [[excalidraw]] not displaying
- Fixed images uploaded through offline graph's [[excalidraw]] not having the right file extension
- [[December 5th, 2024]]
- [[Bug Fixes]]
- Fixed pasting `{{table}}`s from Microsoft Excel desktop
- Fixed some bugs when pasting from Microsoft word desktop
- Formatting like bold and italics should copy over now
- Paste shouldn't include extra (random) newlines anymore
- [[November 26th, 2024]]
- [[New Features]]
- [[query]] full text search
- You can now use `{search: }` to search inside of your queries!
- {{[[query]]: {and: [[Bug Fixes]] {search: import}}}}
- You can also combine two searches with AND to search across block's paths
- `{{[[query]]: {and: {search: June} {search: mobile}}}}`
- {{[[query]]: {and: {search: June} {search: mobile}}}}
- [[November 25th, 2024]]
- [[Quality of Life Improvements]]
- Small speed improvement when opening `(())` search
- [[Bug Fixes]]
- Fix alignment of bullets in queries
- Fix alignment of the outermost | in inline refs
- [[November 24th, 2024]]
- [[Quality of Life Improvements]]
- Add vb and vbscript to [[Code Block]]s
- [[November 21st, 2024]]
- [[Bug Fixes]]
- Fixed pasting [[Table]]s, they now convert into `{{[[table]]}}`
- [[November 19th, 2024]]
- [[Bug Fixes]]
- Fixed lots of bugs when [importing]([[Import]]) [[Markdown]] (or pasting from a plain text source)
- Fixed an issue with multiline blocks, we previously didn't export multiline blocks with proper spacing for the new line, causing the new line to be interpreted as a new block at the wrong depth
- Previously exported markdown files will still be broken but newly exported markdown files will work correctly with the new import
- This also fixes import/export of code blocks
- We now convert `*italics*` into Roam syntax `__italics__`
- The only exception from regular markdown now is `__italics__`, which normally means bold, but passes through as italics so that Roam exports work correctly
- In general, we should parse markdown from other sources a lot better now
- Fixed lots of long standing bugs with copy and paste from other websites
- Fixed pasting code blocks and inline code
- Fixed pasting numbered lists
- Fixed pasting from logseq losing data in the paste
- We now better preserve whitespace when pasting
- Fixed import bug when the daily log for today doesn't exist yet
- Improved memory usage for [[Restore]] graph. It's now much less likely to cause out of memory and crash the page
- Fixed a memory leak that could occur if Roam stayed open for a long time without restarting
- [[November 18th, 2024]]
- [[Roam Depot Extensions]]
- **[Learn English in RR (Roam Research)](https://github.com/qcrao/learn-english-in-RR/tree/main#learn-english-in-rr-roam-research)**
- Learn English in RR is a powerful Roam Research extension designed to enhance your English learning experience within your Roam graph. This extension provides various features to help you understand, practice, and remember new English words and phrases.
- Recommendation: create a new Roam graph for learning English.
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/extract-new-words.gif?raw=true)
- **Features**
- **Word Extraction and Explanation**
- Extract new words or phrases from your Roam blocks, new words should be highlighted with ^^ (e.g., ^^unpretentious^^)
- Get detailed explanations including phonetics, definitions, examples, synonyms, antonyms, etymology, and usage notes
- **Text-to-Speech**
- Listen to the pronunciation of highlighted words or phrases
- Customizable voice selections
- **Mother Language Support**
- Receive translations and explanations in your native language
- Supports a wide range of languages (use [language codes](https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes))
- **AI-Powered Explanations**
- Utilizes OpenAI's GPT models for comprehensive word explanations
- Customizable AI model selection
- **Interactive UI**
- Speech icons automatically added to highlighted text
- Context menu integration for quick access to features
- **Installation**
- In Roam Research, navigate to Settings > Roam Depot > Community extensions > Browse > Search "Learn English in RR"
- Click "Install"
- **Configuration**
- After installation, configure the extension in the Roam Research settings panel:
- **Voice Selection**: Choose your preferred voice for text-to-speech (Nicky, Aaron, or Junior)
- **Mother Language**: Set your native language code (e.g., zh for Chinese, en for English)
- **Stream Response**: Toggle streaming responses from GPT models
- **OpenAI Model**: Select the AI model for explanations (e.g., gpt-4o-mini, gpt-3.5-turbo)
- **OpenAI API Key**: Enter your OpenAI API key for GPT model access
- **Usage**
- **1. **Customizing Explanations****
- Adjust the mother language in settings for translations in your native language
- Change the OpenAI model for different levels of explanation detail
- **2. **Active the block****
- Note: cursor should be inside the block when you extract new words, that means the block should be active
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/active_the_block.gif?raw=true)
- **3. **Extracting New Words****
- Highlight a word or phrase with ^^ (e.g., ^^unpretentious^^)
- Better less than 10 words at a time
- Right-click and select "Extract new words" from the context menu or use the hotkey Cmd+Shift+E (you should first set the hotkey in the settings) or use Cmd+P and type extract new words
- The extension will generate a detailed explanation below the current block
- **right click context menu**
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/right-click-extensions.jpg?raw=true)
- **hotkeys**
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/hotkeys.jpg?raw=true)
- **command palette**
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/cmd+p.jpg?raw=true)
- **4. **Text-to-Speech****
- [🔗](https://github.com/qcrao/learn-english-in-RR/blob/main/assets/new_words.jpg?raw=true)
- Hover over any highlighted text or the icon to hear the pronunciation
- **NOTE: Retry if the explanation is not detailed enough, you can delete the existing explanation and try again**
- **Tips**
- Use the extension regularly to build your vocabulary within your Roam graph
- Combine with other Roam features like daily notes and spaced repetition for effective learning
- Experiment with different AI models to find the best balance of speed and detail for your needs
- **Support**
- If you encounter any issues or have suggestions for improvement, please open an issue on the GitHub repository or contact me through email: qcrao91@gmail.com.
- [[November 12th, 2024]]
- [[Quality of Life Improvements]]
- Added the [mhchecm](https://mhchem.github.io/MathJax-mhchem/) extension for [[KaTeX]]/[[Latex]]
- This adds two functions for
- chemical equations
- `/ce`
- $$\ce{CO2 + C -> 2 CO}$$
- $$\ce{Hg^2+ ->[I-] HgI2 ->[I-] [Hg^{II}I4]^2-}$$
- $$C_p[\ce{H2O(l)}] = \pu{75.3 J // mol K}$$
- physical units
- `/pu`
- $$\pu{123 kJ/mol}$$
- $$\pu{1.2E3 kJ}$$
- [[November 4th, 2024]]
- [[Roam Depot Extensions]]
- **[Blueprint](https://github.com/rcvd/blueprint)**
- blueprint is a performance optimised theme for Roam Research incorporating a bunch of UI/UX enhancements. It is based on [blueprint.js](https://blueprintjs.com/), the React-based UI toolkit for building complex data-dense interfaces.
- [🔗](https://github.com/rcvd/blueprint/raw/main/screenshots/light.png)
- [🔗](https://github.com/rcvd/blueprint/raw/main/screenshots/dark.png)
- **Disclaimer**
- blueprint is work in progress, while it already reached a high level of maturity, there are still some things to be done. Please help making it the best theme for Roam Research by giving feedback, suggestions and reporting bugs.
- **Installation**
- Disable all other themes including Roam Studio
- Enable blueprint
- No further customisation or settings are needed
- **Enhancements**
- Lightning fast UI performance
- Consistent theming throughout the app in dark and light mode
- Enhanced readability and better layout for Roam's base components
- Mobile enhancements
- Popular Roam Depot plugins will be themed (work in progress)
- **Feature Requests, Bugs, and Feedback**
- If you have an idea for a new feature or find a bug (e.g., un-themed components in Roam, unusable plugins), file it under [Issues](https://github.com/rcvd/blueprint/issues) with a short description and a screenshot.
- If you have any additional comments or suggestions, please feel free to send them to [alex@goedel.io](mailto:alex@goedel.io).
- **If you want to support my work**
- [Become a GitHub Sponsor](https://github.com/sponsors/rcvd)
- [Buy Me a Coffee](https://www.buymeacoffee.com/rcvdio)
- [Become a supporter on gödel.io](https://www.goedel.io/subscribe?utm_medium=web&utm_source=subscribe-widget&utm_content=47299057)
- [Flattr](https://flattr.com/@rcvd)
- [Paypal](https://paypal.me/rcvd)
- [[November 1st, 2024]]
- ✨ [[Quality of Life Improvements]] for [[Roam Depot]]
- Admins can now enable extensions for all users which are invited to the graph
- All of the admin's settings will be copied and used by other users in the graph (be careful if your settings have sensitive information like API keys)
- Just click on the globe icon next to the extension to turn on for other users
- 
- You can also __disable__ extensions for other users in your graph, preventing them from installing them
- [[October 12th, 2024]]
- **✨ [[Quality of Life Improvements]] for [[queries]]**
- **New query option "Nest under parent results"**
- For queries which have a lot of results, you can use this option to reduce clutter
- mostly useful for queries for tasks/TODOs or if you use extensions like [[Abhay]]'s Autotag
- **Quick Start:** In a query's settings (the ⚙️ icon), enable the setting "Nest under parent results"
- Then,
- for a block tree like
- 
- which previously showed up in a query like
- 
- it will instead show up as
- 
- **Demo Video**
- {{[[video]]: https://www.loom.com/share/6a5d555e70f2477ca3a3bb305c95290e}}
- **Description & Example (If you do not want to watch the video above)**
- Lets say you have todos like this
- 
- then a TODOs query looks like this
- 
- Note that above is pretty cluttered and it is difficult to find the main info (which generally is just the topmost match i.e. " {{TODO}} Main task")
- If you turn on "Nest under parent results" option from the query settings, then you will see just the topmost result and then have the option to see nested results if you want
- turn on
- 
- after turning it on
- 
- When viewing the nested matches, they show up in a flattened list in the order they appear in the outline
- 
- Alternatively you can also view them via long pressing on the caret to the left of the parent result. The nested results are highlighted by a golden outline (another example below)
- 
- [[October 9th, 2024]]
- [[Roam Depot Extensions]]
- **Block Distributor**
- Block Sender is a Roam Research extension that automates the creation of block references based on user-defined tag rules.
- **🎬 Example**
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FQypfHsYp4w.mp4?alt=media&token=4eec5e8c-8055-4693-ac0d-439036d2979e}}
- **✨ How It Works**
- When a block is tagged with a watched tag, Block Sender detects the change
- A block reference is created at the specified destination
- The original tag is removed from the source block
- The original block remains in its original location
- **🚀 Usage**
- Install the extension in your Roam Research graph
- Navigate to the extension settings
- Create rules by specifying:
- A tag to watch
- A destination type (block, page, or block UID)
- The specific destination
- Block Sender will now monitor your graph and create block references according to your rules
- **💡 Benefits**
- Enhance information connectivity in your Roam graph
- Automate cross-referencing and reduce manual block referencing
- Maintain clean, tag-free blocks while creating new connections
- Preserve original context while distributing information
- **Tag Painter**
- Want to create tag styles but don't know CSS? Tag Painter allows you to easily customize the appearance of your tags within Roam.
- [🔗](https://github.com/8bitgentleman/roam-depot-tag-painter/raw/main/screenshot.png)
- **Features**
- Customize tag colors, backgrounds, borders, and more
- Add content before or after tags
- Saved styles persist across sessions
- Search functionality for quick access to CSS properties
- Toggle tag editing mode on/off with a convenient topbar button
- **Usage**
- Click the style icon (paintbrush) in the Roam Research topbar to activate Tag Painter.
- When active, the button will be highlighted, indicating that tag editing is enabled.
- Hover over any tag in your Roam graph to open the Tag Painter menu.
- Use the search bar to find CSS properties you want to apply.
- Select properties and adjust their values using the provided inputs.
- Changes are applied and saved automatically.
- Click the style icon again to deactivate Tag Painter and return to normal tag behavior.
- [[October 1st, 2024]]
- [[New Feature]] [[Graph History]]
- Travel back to any previous version of your Roam with **Graph History **to** **__access previous states of your notes__ or __recover accidentally deleted data__
- Settings! -> Graph History: pick date+time! -> Go!
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FPsILnyDDvo.mp4?alt=media&token=883e4371-b19c-415f-95fb-2d3a6b1d7994}}
- [[September 30th, 2024]]
- [[Quality of Life Improvements]] for the [[Auto Backups]]
- New setting: "Create a backup **every week**"
- previously, the only options were "every day" or "every hour"
- We feel like a weekly backup makes more sense in a lot of cases
- For local graphs, if you do not have auto backups turned on, alerts every time you open the graph
- We are strongly pushing towards setting up local graphs because they are stored in browser's local storage and so are lost if you clear browsing history/data
- ****Where are local graphs stored?****
- Local graphs are stored in your browser's local storage. This means that if you clear your browser data then you will lose all the data in your local graph. To mitigate this risk, we recommend you set up daily automatic backups.
- Also please note that since we have [[Encrypted Graphs]], if possible, we recommend using those instead of local graphs.
- Better error handling when running into any errors during backup (for example, browser permission errors)
- Please note that we previously changed auto backups to use the new export format: [[MessagePack]] (for faster exporting & reduction in file size)
- [[September 25th, 2024]]
- **📡 The [Roam x Zapier integration]([[Zapier Integration]]) is now live!**
- Automate your workflow by connecting Slack, Gmail, and more straight to Roam. Set up Zaps to have everything flow directly into your graph
- Pick your trigger in Zapier, set Roam as the destination, or vice-versa & done 🚀
- No clutter, no manual work 🦾
- Link: https://zapier.com/apps/roam-research/integrations
- Some examples of things you can do:
- 🔗 First up: Slack -> Roam
- In the middle of an important Slack convo and there’s something you want to keep for later? Just save the message, and Zapier will drop it right into Roam, organized & ready to link up👇
(Also, you can add the Zapier app to Slack if you want to add an extra comment!)
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FGrjkq5vnMB.mp4?alt=media&token=043ce47a-05c6-46d7-9598-e33ecf3b33a2}}
- ⭐️ Next: Starred emails -> Roam
- You star an email, and Zapier pulls it into Roam automatically. No more hunting through your inbox. It’s right there, ready to tag, link, or archive 📥
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FZNWCIlE2nW.mp4?alt=media&token=18108178-6a2d-45a3-bbbf-9e75534f96df}}
- 📄 Bonus: Google Forms -> Roam
- Need to collect top-secret mission briefings (or regular info) through a form? You can set up a Zap to send responses directly into Roam. No need to copy-paste—just let the answers show up where you need them 🎯
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2Fn5NU-83WFa.mp4?alt=media&token=b7a67469-d56c-488d-a814-1af118497aec}}
- Here is a **Walkthrough Video** showing how to connect your Roam graph to Zapier:
- **Walkthrough Video** showing how to connect your Roam graph to Zapier
- {{[[video]]: https://www.loom.com/share/0434049965254f3e86ae8909a368ca52}}
- apart from the setup process, this video also demonstrates how to use Zap templates, in particular, [one that adds new starred emails in Gmail to Roam daily note page](https://zapier.com/apps/gmail/integrations/roam-research/255568759/add-new-starred-emails-in-gmail-to-your-daily-note-pages-in-roam-research)
- More details in the [[Zapier Integration]] page
- [[September 11th, 2024]]
- [[Mobile Native View]]
- Fixed copy and paste issues caused by the last release on [[android]]
- [[September 9th, 2024]]
- Small [[Quality of Life Improvements]]
- Better [[File Manager]]
- Download button to be able to easily download media
- this works in encrypted graphs too
- Downloaded file name extra info:
- Filename for the downloaded media reflects the **graph name**, the **id of the file in the roam graph**, and the **original filename**
- New filename is
`graph-name` + "-" + `file-id-in-graph` + "-" + `original-file-name`
- Fixed issue where reference counter for blocks in linked references would get split up into two lines
- [[September 3rd, 2024]]
- [[Quality of Life Improvements]]
- [[MessagePack]] (.msgpack) export and restore format
- MessagePack format is much more efficient than [[EDN]]
- ~4x faster at exporting
- ~4-10x less memory usage
- 30% reduction in size of the file (more important for [[Auto Backups]] than anything else)
- Changed [[Auto Backups]] to use [[MessagePack]] format
- Changed [[Export all]] [[EDN]] and [[MessagePack]] formats to not download a zip file
- [[Mobile Native View]]
- Fixed current day not being created automatically
- Fixed search graph search icon not aligned
- Fixed calendar not matching the theme
- [[August 30th, 2024]]
- [[Mobile Native View]]
- Fix issue with last release on samsung [[android]] 14 which broke quick capture and the regular view
- [[August 29th, 2024]]
- [[Mobile Native View]]
- Drag and drop multiple blocks at once, scroll when at the edge of the screen when dragging and many more small fixes to DnD
- Fixed pasting the correct formatting into Roam from the web and many other apps
- Added the ability to change heading and text align
- Added support for emoji reactions
- [[Bug Fixes]]
- Fixed [[roam/render]] code blocks showing up in search
- Fixed queries and other large UI elements showing up in search
- [[August 28th, 2024]]
- [[Quality of Life Improvements]]
- update emojis to unicode 15 and small changes to the emoji display
- [[August 8th, 2024]]
- [[Roam Depot Extensions]]
- **[Semantic Scholar](https://github.com/mlava/semantic-scholar)**
- Access the scientific literature right within your Roam Research graph.
- This extension allows you to get data from the 214 Million Papers, 2.49 Billion Citations and 79 Million Authors in the Semantic Scholar database.
- There are a number of ways to access the data:
- Article title search
- Article Id search
- Author name search
- Author Id search
- Recommended articles using one article as the prompt
- Relevant articles for a search term
- All six options can have Roam Research hotkeys enabled to make searching for new data as quick as a keystroke!
- **Notes:**
- Please note that Semantic Scholar offers an API key by application, however this extension DOES NOT need an API key to work. Without an API key, Semantic Scholar limits calls to their API, and you might receive an error message that you are trying to import data too often. I have implemented a retry mechanism that will attempt up to ten times at ten second intervals, and will provide feedback about what is happening.
- You can apply for an API key at https://www.semanticscholar.org/product/api#api-key. If you are approved, you can enter the token in the Roam Depot settings for this extension, under the 'Set Here' or 'Home' tab.
- I successfully applied for an API key by stating that I was accessing the data for personal usage and would not be downloading any individual articles/papers in bulk, but one at a time.
- Rest assured that unless Semantic Scholar changes their access provisions, this extension will work without an API key. It might just be a bit slower, and give you warnings from time-to-time.
- To import a specific article, you can use IDs from Semantic Scholar (Corpus Id or Paper Id), DOI, Association for Computational Linguistics ID (ACL), arXiv ID, Microsoft Academic Graph ID (MAG), PubMed ID or PubMed Central ID. You can control which data is retrieved for an individual article by setting your preferences in the Roam Depot settings in the Article tab.
- 
- You can decide what data you want to see for an article, and the order in which it is output. These options include Journal data, Article Type, Authors, References, Citations, Influential Citations, External Sources and Abstract.
- If an article is Open Access and/or has an Open Access PDF, links to these sources will be displayed with the Article metadata.
- Author metadata can be imported using the Semantic Scholar Author ID. Again, the data types you wish to retrieve for an author can be set in the Author tab in the Roam Depot settings.
- 
- You can also decide what data you want to see for an author, and the order in which it is output. These options include Affiliations, Home Page, Citation Count, h-Index and Publications.
- You can choose to hide certain types of data from Article or Author import, and this will prevent that data being called from the Semantic Scholar API. This will reduce data transfer.
- You can search for a paper by title, and Semantic Scholar will only return a single result. Of course, you can filter the search to limit to particular Fields of Study, years of publication, venue of publication, minimum citation count, Open Access status and the availability of an Open Access PDF.
- 
- Or, search for an author by name and Semantic Scholar will return a list of authors. You can define how many you want to retrieve in the Author tab in settings.
- 
- Semantic Scholar uses a machine learning algorithm to determine relationships between articles, and you can access this feature in two ways. The first is to search for articles using the Relevance Search feature. You can enter a search term and a variety of filters to find the most accurate results.
- 
- Or, search for recommended articles related to a specific article using the article Paper Id from Semantic Scholar.
- 
- You can define how many results to obtain for Recommended or Relevance searches in the appropriate tab in Roam Depot settings.
- Semantic Scholar classifies their data using the following Fields of Study:
- Computer Science
- Medicine
- Chemistry
- Biology
- Materials Science
- Physics
- Geology
- Psychology
- Art
- History
- Geography
- Sociology
- Business
- Political Science
- Economics
- Philosophy
- Mathematics
- Engineering
- Environmental Science
- Agricultural and Food Sciences
- Education
- Law
- Linguistics
- You can set your preferred Fields of Study in the Roam Depot settings for this extension as comma-separated list. e.g. Medicine,Biology,Business
- The best features are enabled if you also have the SmartBlocks extension installed. When you install this extension, a new page will be created in your graph entitled 'Semantic Scholar Configuration'. This has all of the required SmartBlocks so that you won't need to create anything yourself.
- When you import any data from Semantic Scholar, a SmartBlock button will be placed after all article titles, author names, and search results. You can click that SmartBlock button to import the data for that item to your graph as well. For lists of Recommended or Relevant Article searches, or Author Name searches, you will be presented with both Refresh and Import More SmartBlock buttons. If you import 5 authors, for example, the Import More button will import another five authors. Refresh will update the data if there has been new publications become available.
- [[August 6th, 2024]]
- [[Roam Depot Extensions]]
- **[Automatic DNP](https://github.com/mlava/auto-DNP)**
- Roam CRM turns your graph into a __Relationship Management__ tool. Inspired by [Sivers](https://sive.rs/hundreds), and David Rockefeller's collection of [200,000 index cards](https://archive.is/zxbCA), Roam CRM keeps people and dates important to you top of mind.
- **Usage Example**
- **NOTE**
- There are certain tags and templates that Roam CRM relies on; **Tags:: #people** and **#Agenda** are the most vital. While these are not currently customizable they may be in the future.
- **Setup**
- Roam CRM is built on top of several Roam extensions. Please install them on Roam Depot:
- [Google](https://github.com/dvargas92495/roamjs-google) by David Vargas
- Install Google extension from Roam Depot
- Add your google accounts and calendar by following that extension's README
- You can now automatically pull events into Daily Note
- [Workbench](https://github.com/dvargas92495/roamjs-workbench) by David Vargas
- Install Workbench extension and enable the Attribute Select feature
- Navigate to the newly created page in your graph [[roam/js/attribute-select]]
- Add the attribute Contact Frequency
- Add these five options
- #[[A List]]: Contact every two weeks
- #[[B List]]: Contact every two months
- #[[C List]]: Contact every six months
- #[[D List]]: Contact once a year
- #[[F List]]: Never contact
- This is for convenience when switching a person's contact frequency. These durations are customizable in the Roam CRM settings.
- [Query Builder](https://github.com/dvargas92495/roamjs-query-builder) by David Vargas
- Install Query Builder extension
- Import Call Rollup Queries from
- **Features**
- **Metadata**
- Roam CRM creates metadata for each Tags::#people page inspired by [Matt Mochary](https://docs.google.com/spreadsheets/d/1Ti_xaV9IVvj-bklxOjNY-IeGsC-YqcgvB03qvfFQrnI/). This metadata and its structure is important, **without this structure Roam CRM will not work.**
- Each person page must have metadata structure which looks like this. You can use the **Person Metadata Template** button in the Roam CRM settings to import a quick Roam template for this metadata structure [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/metadata.png)
- At the bare minimum a person page must have this metadata for it to be recoginzed by Roam CRM [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/metadataMinimum.png)
- **Agenda Addr**
- Inefficient leaders waste a lot of time reaching out about or responding to one-off issues in real time. A much more efficient method is to batch your issues and discuss them all at once.
- Make a block anywhere that has as persons name ([[Bill Gates]] for example) and a hashtag #Agenda
- Roam CRM will automatically nest a block ref on Bill's page under an agenda attribute
- Use a hashtag to have the extension hide the name in the Agenda, e.g. #[[Bill Gates]]
- Next time you talk, you'll remember everything you wanted to tell Bill
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/agendaAddr.gif)
- **Contact Reminders**
- Set contact frequency reminders for each person. This can be customized in the settings. A modal will pop up reminding you to contact them.
- #[[A List]]: Contact every two weeks
- #[[B List]]: Contact every two months
- #[[C List]]: Contact every six months
- #[[D List]]: Contact once a year
- #[[F List]]: Never contact
- Within the modal you can type a quick message to each person to stay in flow. This message will be nested on their page for future reference.
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/modal%20message.png)
- **Birthday Reminders**
- Birthday reminders happen 14 days before, and on the day of. They remind you that 'Bill Gates turned 46 today.' A and B listers birthday reminders show up in the modal 14 & 7 days before as well as on the day of.
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/modal%20birthdays.png)
- C and B lister birthdays only show up on the day-of as a block ref on the DNP
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/birthdayRef.png)
- D and F listers do now show up at all
- **Full Page CRM UI**
- Easially accessable through the (optional) left sidebar button or via the modal toolbar the CRM Workspace is the central hub for all your contacts and your timeline of events.
- People
- A sortable list of all contacts together in one place
- Events
- Birthdays, calls, meetings, and any mentions are all shown in chronological order (sorted by either the DNP they show up on or the block's creation date)
- Home
- Coming soon, this will be a homepage for quick access to all CRM functionality. If you have ideas or wants for this space do reach out!
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/workplace.gif)
- **Google Calendar Sync**
- Via the Google extension RoamCRM, has the ability (toggable in settings) to connect to a google calendar and sync upcoming events to your graph. When enabled events in the next 7 days with more than 1 guest/attendee will be synced to your graph on the Daily Notes Page coresponding with the event date. If the event attendees, date, or details change Roam CRM will update the graph block accordingly.
- [🔗](https://github.com/8bitgentleman/roam-depot-Roam-CRM/raw/main/images/event.png)
- **Hotkeys**
- Roam CRM adds quality of life hotkeys for a variety of tasks including:
- Interacting with the right sidebar
- Showing the Reminder Modal as well as the Full Page CRM Workplace
- All hotkeys are configurable in settings
- **[Sheet Music](https://github.com/mlava/sheet-music)**
- For music lovers, sheet music in Roam Research is finally available!
- Create your own music using [abc notation](https://abcnotation.com/wiki/abc:standard) or paste and render sheet music for music you find on the internet.
- 
- There are two options available at present:
- Paste music in the abc notation directly into your graph using the command palette option 'Paste sheet music in ABC notation'
- Create music in abc notation within your graph. Start with a blank template by using the command palette option 'Create sheet music in ABC notation'
- You can find examples of music in abc notation at:
- https://abcnotation.com/examples
- https://thesession.org/
- https://www.montrealsession.ca/index.html
- Standard abc notation applies - you can find a key to the notation at [abc notation](https://abcnotation.com/wiki/abc:standard).
- **Notes:**
- In this first iteration, only one piece of music can be rendered on a page. I am working on a fix to allow multiple pieces to render correctly.
- At present, dragging notes in the rendered music will change the child block in RR but not the textarea box. I am working on a fix. In the meantime, you can click the pencil icon at top right to re-render the music and the changes you've made will be picked up.
- [[July 25th, 2024]]
- Fixed issue with [[Graph Overview]] explore mode where if a page was selected but then deleted it would cause an infinite loading spinner
- [[July 24th, 2024]]
- Update password requirements to be more secure
- Force all users to reset their passwords (sign in with google/apple not affected)
- Reasoning::
- Over the past two weeks we have been working to defend against a DDOS/credential stuffing attack. Credential stuffing is where the attackers have a list of emails and possible passwords (from the dark web) and they attempt to log in to Roam with each one. For those who are technical, you can read [this article](https://medium.com/swlh/google-firebase-authentication-vulnerability-245050cb7ceb) that explains the vulnerability of our auth provider in more depth.
- This has been a very sophisticated attack, we think they have access to millions of different computers (they rotate IP addresses very quickly) and millions of email addresses they are attempting to log into. For awhile we had managed to slow them down and stop them, but they adapted and resumed the attack.
- The attackers have unfortunately gained access to some accounts this way.
- I want to be clear that Roam did not leak these emails and passwords, we never directly have access to your password, we use Google/Firebase to manage them. Most accounts are unaffected and the attackers are mostly trying emails which don’t have accounts with Roam. The only way a Roam account could be affected by this attack is IF you had reused your Roam password somewhere else AND that service leaked your password. This attack also **does not affect those who use google or apple sign in only**, and it does not affect encrypted graphs, unless the encrypted graph password was used in another service and leaked there.
- I recommend everyone visits https://haveibeenpwned.com/ to see if your email/password has been involved in a data breach. It’s likely that if it has, then this attacker has tried to sign into Roam with it.We are still working with our authentication provider’s support (Google) to see if there is something we can do to stop attacks like this, but it increasingly looks like there is not.
- We are taking this very seriously and trying to do everything we can to protect the security of your Roam accounts. Therefore, we have decided to **change our password requirements to be more secure, and force all users to reset their passwords**. As soon as you sign out, you will not be able to sign back in until you reset your password. Eventually we will force everyone to sign out as well. We may also build more security features like multi-factor authentication in the future.
- When setting a new password, we highly recommend using a unique one you have not used anywhere else. This is because, at the end of the day, if someone has your email and password, there is not that much we can do.
- If you have any difficulty resetting your password, please email [support@roamresearch.com](mailto:support@roamresearch.com). I am very sorry for any inconvenience this might have caused.
- [[July 22nd, 2024]]
- Internal security updates
- [[July 12th, 2024]]
- Fix [[Desktop App]] sign in not working when not on the all graphs page
- [[July 7th, 2024]]
- **[[Quality of Life Improvements]]**
- **A better **"Created on day"** sidebar window**
- This view shows the pages and blocks created on the day
- (other than the blocks created on the daily note itself)
- You can think of it as a complement to the daily note
- Trigger it via right-clicking the title for a Daily Note and then "View created on ..."
- 
- [[June 27th, 2024]]
- **[[Quality of Life Improvements]]**
- New switcher to switch between different embed types: `embed`, `embed-path` and `embed-children`
- Checkout GIF below to see the different block embed types in action!
- 
- More comprehensive right-click context menu for page references
- 
- [[June 14th, 2024]]
- **[[New Features]] 🚀**
- **Alt-click (or opt-click) on a daily note page link to change the date**
- If you're a fellow procrastinator, you can use this to snooze any tasks for a future date! 😅
- 
- Some common use cases:
- (these are also showcased in the GIF above)
- If you have a task you'd planned for this week but will not be able to get it done, snooze it to start of next week
- When you find old/overdue tasks, assign them to today so you do not forget about them
- Btw, the “Coming Monday” in the date shortcuts gets set to “Coming Sunday” or other day of the week depending upon the “First day of the week” setting in Settings > User > International
- **Pin/Stick sidebar windows to the top!**
- Long press on the pin button to pin a sidebar window to the top
- The window will then have a red pin button
- New windows will appear below the pinned-to-top window
- 
- If you're a developer ...
- ... and want to access this programmatically, please check it out in [our frontend api changelog here](https://roamresearch.com/#/app/developer-documentation/page/rmWKYSSUh)
- __Related change__ to how closing pinned sidebar windows works
- Previously they used to come back/resurrect
- Now they will not resurrect.
- To make sure closing pinned windows does not happen accidentally, a new confirmation dialog has been added
- 
- [[Roam Depot Extensions]]
- **[Full Calendar](https://github.com/fbgallet/roam-extension-calendar)**
- **A comprehensive calendar to get an overview of your tasks and activities spread over numerous Daily Notes Pages.**
- 
- [[June 13th, 2024]]
- [[Mobile Native View]] 1.0.93
- Added `{{video}}` components
- Fixed bug with checking todos inside of a block ref
- Fixed bug with drag and drop reordering when dragging a block down in the list
- Fixed bug with deleting blocks and replacing references with the block text
- Added [[Delete Account]]
- [[June 12th, 2024]]
- [[Roam Depot Extensions]]
- **Block Share Card Extension**
- The Block Share Card extension for Roam Research enables users to effortlessly share the currently zoomed-in block as an image, tailored for optimal viewing on mobile and desktop devices.
- This extension enhances the user experience by simplifying the sharing process and ensuring content is easily readable on any device.
- **[[Screenshots]]**
- Desktop View
- 
- Mobile View
- 
- **Features**
- **Instant Block Sharing:** Quickly share any zoomed-in block from your Roam Research page with a single click.
- **Mobile and Desktop Optimization:** Choose from two image export options designed for different device displays:
- **Mobile:** Creates a narrower image, perfect for viewing on mobile devices.
- **Desktop:** Generates a wider image, ideal for desktop screens.
- **Usage**
- Once the extension is installed, you'll find a new sharing icon in the Roam Research toolbar. To use the extension:
- Zoom into the block that you wish to share.
- 
- Click the sharing icon from the Block Share Card extension.
- 
- Select "Mobile" or "Desktop" based on your preference for the image format.
- After selection, the image will be automatically downloaded to a specified folder, allowing you to easily access and share it across platforms.
- 
- [[June 11th, 2024]]
- [[Delete Account]] option in account settings
- 
- [[June 6th, 2024]]
- [[Roam Depot Extensions]]
- **Crosswords**
- A new extension by [[Mark Lavercombe]]!
- Import, render and complete a random New York Times crossword in Roam Research
- Screenshot
- 
- You can import a crossword using:
- command palette command 'Random crossword from New York Times'
- using a SmartBlock as shown:
- #SmartBlock crossword
- `<%NYTCROSSWORD%>`
- `{{NYTCrossword:SmartBlock:crossword}}`
- Your guessed letters are saved in your graph, so you can come back on another device or at another time and complete the puzzle. Good luck!
- [[May 29th, 2024]]
- **[[New Features]] 🚀**
- [[Diagram]]s got a makeover!
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2FpN9-ApURme.mov?alt=media&token=4d87d6a5-10be-47b9-bcbd-45707162182f}}
- Create one with /diagram -> click to expand -> name your mindmap
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2FcO8743btPn.mov?alt=media&token=cbeb5a9a-6fb7-4945-9dba-3ddb87eb2def}}
- To add a new block/node, double click the space — then align them
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2F0TOQ2WZC3D.mov?alt=media&token=f404d8db-459a-4966-ae98-cc55d1af85d5}}
- Play around with multiple resizable groups, move them around!
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2FDzvqF9twDX.mov?alt=media&token=4e3c2ca8-ead7-4d83-893f-419fe10800f7}}
- Connect your block by holding ⌥ (on mac) or ALT (windows) on the block and dragging your mouse to the connecting node. Infinite possibilities...
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2FZ7M8D7S0rJ.MOV?alt=media&token=075a029e-0af2-498d-8622-b4d097b03244}}
- Now, create a diagram inside another diagram! Select blocks or a block group > right-click > Move to subdiagram
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froam-maya%2FQtYQA1vTf4.mov?alt=media&token=8f354d26-e94e-44a3-a6a1-59dea851af76}}
- [[May 25th, 2024]]
- **[[New Features]] 🚀**
- **The New [[Roam Append API]] is out now!**
- This allows you to capture stuff to your unencrypted & **encrypted** graphs!
- **If you’re not a dev**,
- just know that this opens up a lot of possibilities for capture to your roam graphs.
- The recent improved Speak to Roam apple shortcut uses this, for example.
- We also have a couple more use-cases/integrations which will be dropping soon!
- In particular, a Zapier Integration, which would allow you to do things like:
- Automatically save Google Form/typeform responses to a page in your graph
- Add Slack saved messages to your graph
- 
- etc
- **If you’re a dev**, please checkout our developer-documentation graph for the docs: https://roamresearch.com/#/app/developer-documentation/page/eb8OVhaFC
- 
- [[May 23rd, 2024]]
- [[Desktop App]] Update (0.0.21)
- Security updates, no new features
- For some users, if you were having persistent slowness with the desktop app, this might make it faster
- We dropped support for windows 7 and 8, both of which reached microsoft's end of life over a year ago
- [[May 22nd, 2024]]
- **Improved [Speak to Roam Apple Shortcut]([[Apple Shortcuts/Speak to Roam]]) with support for encrypted graphs, capture to daily note, and more!! ✨✨**
- Link to install the newest version **v1.3.0**: https://www.icloud.com/shortcuts/ae1ae833cada4999b44d9ac5dda2dc6d
- Please checkout the [[Getting started]] guide to get started
- **Improvements**
- We now support both encrypted graphs and unencrypted graphs
- On encrypted graphs, you can create an "append-only" token!
- Captures to today's Daily Notes Page by default
- Captures are stored under a block/capture group `[[Speak to Roam]] Captures`
- 
- If you do not want to capture to DNP, you can alternatively pass an input page to capture underneath!
- More resilient to shortcut failure (If shortcut fails, you can find the recordings in Files in `Shortcuts/SpeakToRoam/FailedRecordings`. If it suceeds, you can find them in `Shortcuts/SpeakToRoam/HandledRecordings`. Behavior slightly different on Apple Watch)
- Shortcut is now available on the Share Sheet without extra configuration
- You can use this to share recordings from the Voice Memos app to Roam via the shortcut!
- **Requirements**
- apple devices only (iphone, ipad, mac, apple watch, etc.)
- Need an OpenAI API key for transcription & optional post-processing.
- if you do not have one, we go through how to create one in the steps below
- [[May 17th, 2024]]
- [[Quality of Life Improvements]]
- [[Linked References]] now searches through the children of references and opens the tree up down to the match
- Previously it would only search through the path or the linked block
- 
- [[May 3rd, 2024]]
- [[Quality of Life Improvements]] for the [[Command Palette]]
- Improved the design to match [[Cross Graph Search]]
- 
- Renamed "quick search" to "Find or create page search" to match what it was called elsewhere
- Added all of the commands/hotkeys you can use "everywhere" (see the hotkeys settings), such as toggling the sidebars, moving back / forward a day, or toggling brackets.
- In addition to these we added more commands for
- Open all pages
- Open graph overview
- Open today's daily note in sidebar
- [[April 26th, 2024]]
- **[[New Features]] 🚀**
- [[Cross Graph Search]]
- Quickly find and open content across all of your graphs!
- Trigger with `cmd-shift-u` on mac or `ctrl-shift-u` on windows
- Demo::
- {{[[video]]: https://www.loom.com/share/b99af123b0b84d118594a04fce159e47}}
- [[Mobile Native View]] 1.0.86
- Image improvements
- Tap on an image to bring it up in fullscreen
- Pinch to zoom in
- Share or download the image
- Fix -- [[iOS]] smart dash deleting a block (disabled smart dashes)
- Added an edit block button to the toolbar so you can edit images or other components when there is no space to click into the block
- [[April 22nd, 2024]]
- [[Mobile Native View]] [[New Features]] 1.0.84
- Image and video capture
- Image, video, and file upload
- `{{query}}` #[[Query]]
- `{{table}}` #[[Table]]
- Other components including `{{slider}}, {{word-count}}, {{character-count}}, {{embed-path}}, {{embed-children}}`
- `((parentheticals))`
- Automatic wrapping for `{`
- Improved the display of the block path in references, removed showing newlines and increased the space between lines
- [[April 17th, 2024]]
- [[Mobile Native View]] 1.0.82
- Fixed search erroring out sometimes
- Fixed multiselect toolbar in Ipad landscape mode not showing up
- Increased width of editing bar buttons by a few pixels
- Fixed url display with other text in the block
- [[April 13th, 2024]]
- [[Quality of Life Improvements]]
- Added [[xml]] support for [[Code Block]]s
- [[April 5th, 2024]]
- [[Quality of Life Improvements]]
- When deleting a page, instead of navigating to daily notes, we now navigate back to the last existing page or block in your history
- Added delete page to the context menu from right clicking on a page title so you can delete pages from the sidebar
- [[Bug Fixes]]
- Fixed templates which internally referenced the first block in the template had broken references when applying the template
- Example::
- test broken references template #roam/templates
- Referencing this block was broken
- Like this -> Referencing this block was broken
- Applying the template ended up like this ->
- Referencing this block was broken
- Like this -> ((fmZlzz2th))
- [[March 29th, 2024]]
- Fixed emojis in namespaced page titles #[[Bug Fixes]]
- Before and after
- 
- Updated our underlying code editor (codemirror) to the latest and remove the active line highlight
- [[March 28th, 2024]]
- [[mobile]] [[iOS]] and [[android]] [[Bug Fixes]] #[[Mobile Native View]]
- Fixed paste not working at all on [[android]] (still needs more work of formatting paste from external source but Roam to Roam paste works now)
- Fixed sharing multiple photos / files at once on [[android]]
- Fixed issue where history could display empty history items
- Fixed issue where references page could be missing data
- Fixed font size changing when phone's accessibility setting font size is changed
- Fixed encrypted graphs overlapping the status bar when beta is on
- [[March 22nd, 2024]]
- [[New Features]] #[[Mobile Native View]]
- https://twitter.com/RoamResearch/status/1771368456937676986
- [[March 13th, 2024]]
- **[[New Features]] 🚀 #[[mobile]] #[[Mobile Native View]]**
- Added the ability to edit the new mobile beta for believers
- Tap on "daily notes" to bring up a calendar to navigate to future or past days
- Hold the back button to bring up your history, or to navigate to daily notes or open your shortcuts
- [[March 12th, 2024]]
- Fix setting custom hotkeys on [[mobile]] web
- [[January 27th, 2024]]
- [[Roam Depot Extensions]]
- **[Live AI Assistant (formerly Speech-to-Roam)](https://github.com/fbgallet/roam-extension-speech-to-roam)**
- Speak instead of having to type into Roam.
Additionally, you can speak to a GPT model (providing context to the model from your Roam graph by selecting blocks before calling the command!), or even do translations to English
- **Features**
- 
- By default, the controls will be inserted in the left sidebar, after "Daily Notes". It's possible to display them in the topbar (always visible, more convenient on mobile).
- **Voice transcription**
- the transcribed text will be inserted at the bottom of the current page (or page view) or appended to the current focused block.
- Uses either an OpenAI API Key (that you need to set up in the extension settings), or if you disable Whisper, uses the free Web Speech API (⚠️ not available in Electron Desktop app and Firefox or Arc browser)
- **Translation**
- A large number of [source languages are supported](https://platform.openai.com/docs/guides/speech-to-text/supported-languages), but the target language is currently limited to English. This limitation can be easily overcome through post-processing using a GPT model, as it only requires asking it to translate into any language.
- **Speak directly to an AI Assistant (OpenAI GPT models)**
- ask any question, rephrasing, completion, translation! Feel free to specify the expected format of the response (its length, style, etc.).
- assistant response is inserted as last child of prompt block (current limitation: the answer is only one long block)
- you can easily **provide context by selecting some block(s)** in the page or right sidebar. You can use it to extend a conversation, ask a question about any content, request a summary or translation, and so on. 🚀
- on mobile (selection being not possible), place the cursor in a block to use its content as context, or enable the option to use the whole current view as context (unless you place the cursor in a blank block).
- model by default is currently gpt-3.5-turbo-1106
- you can try other chat completion model, or your own fine-tuned models
- **Quick Start**
- Install the extension by searching for "Speech to Roam" in Roam Depot
- Then, right after installation,
- In the settings, provide an OpenAI API key (by copying/pasting an existing key or generating a new key via [this link](https://platform.openai.com/api-keys)). You need an account on OpenAI to benefit from Whisper transcriptions.
- ⚠️ __Currently, this extension doesn't work on either the MacOS desktop app or the Android app, but it works on browsers (desktop and mobile) and on Windows desktop app.__
- [[January 25th, 2024]]
- [[Roam Depot Extensions]]
- **[Nautilus](https://github.com/tombarys/roam-depot-nautilus)**
- Nautilus is a Roam Research extension with a unique approach to stress-free day planning and time blocking in Roam
- This visual approach reduces the feeling of being overwhelmed, enhances task-effort estimating skills, and clearly shows what the feasible tasks are for the rest of the day. The spiral shape mirrors one's diminishing energy for creative tasks over a given day.
- **Features**
- 
- **Usage**
- only once: install **Nautilus** and **TODO Trigger** extension
- insert the component at the top of your Daily Page using ;;Nautilus template
- indent all events and tasks that you want to accomplish below the component as its children
- start inserting tasks, then folow up with events
- use e.g. "12:30-14:20" or "9 to 10:45" to anchor fixed time events
- use e.g. "10m" or "20min" to set the task duration (other than default)
- use e.g. "d18:30" or "d9:05" in tasks to denote the time when they were finished (or use extension for it)
- during a day: reorder tasks and move some of them after fixed events to ensure they will not be planned earlier
- **Quick Start Video**
- {{[[video]]: https://www.loom.com/embed/c66b99a39a5a4f74b2889ccab467e9eb?sid=5809279e-7deb-44e2-a448-f9de33ba8510}}
- [[January 22nd, 2024]]
- Ability to customize the Quick Capture template in the mobile app #mobile
- Please watch the [[Loom video]] below to see how it works
- {{[[video]]: https://www.loom.com/share/d63674bcd45e4b17bf247ec94893150c}}
- Small fixes / additions
- Fixes bug on paste from other websites where do not have :create/time and :create/user
- Fixes rare issue in multi user graphs where blocks seemed to appear in multiple places when lots of users were writing at the same time
- Fixes bug where options for "Adjust width of main page" does not change properly when resized
- ... other small bug fixes in the client
- Apple users might want to check out **[Speak to Roam]([[Apple Shortcuts/Speak to Roam]])** Apple Shortcut (speak and send transcript to your Roam graph)
- A number of small fixes and improvements on the backend API. If you're interested, please checkout [the docs in the developer-documentation graph](https://roamresearch.com/#/app/developer-documentation/page/W4Po8pcHQ)
- more info: [[Developer Documentation]]
#### [[2023]]
- [[September 26th, 2023]]
- Fix issues with pages and blocks having more than 1000 children
- Fix issues with broken references sometimes linking to the wrong block, references starting with numbers like `((88lsljdkf))` could create links if that uid didn't already exist in the graph
- [[September 19th, 2023]]
- **[[New Features]] 🚀 #[[mobile]]**
- We are excited to announce the first beta release of our redesigned mobile app! Our focus has been on ensuring quick access, eliminating "graph is too large" errors, and giving the app a more native feel. We're rolling out to believers first to stress test the system.
- To enable, visit the settings tab at the bottom, flip the switch and open a graph.
- The app is currently in "read only" mode. The capability to edit will be rolled out in the coming weeks.
- An active internet connection is required. It's possible we may add limited offline capability in the future.
- Unfortunately, encrypted graphs are not supported since it relies on our new backend API
- This release also includes some improvements for everyone
- Dark mode and new light theme colors to match the web app
- Fixed issues with sharing to the app
- Added graphs with read only access to the graph list
- Decreased size of the bottom navigation bar
- [[September 12th, 2023]]
- Improve keypress performance
- Fix x.com ([[Twitter]]) link embeds
- Added a user setting to not auto expand the embeds
- [[August 30th, 2023]]
- Added links to our [slack](https://join.slack.com/t/roamresearch/shared_invite/zt-21yynf99v-39t09XesqSiIsz_1VFmwtA) and [developer documentation](https://roamresearch.com/#/app/developer-documentation) to the help section (?) in the top right
- Also rewrote a lot of the clojurescript and roam/render documentation in the dev graph
- [[August 28th, 2023]]
- `{{embed-children: ((block ref))}}`
- like [[embed]], but it only displays the children of the block
- Example::
- A
- 1
- 2
- B
- A
- 1
- 2
- [[August 23rd, 2023]]
- Button to reload graph and disable all extensions
- 
- Useful if you are having an issue with Roam and think it might be one of your extensions
- [[August 21st, 2023]]
- [[Performance Improvement]] reduce the amount of work done per user action by 50% (update block, create new block, etc..), Roam should feel a little bit more snappy, especially with more content on the screen.
- Fix [[query]] updating sometimes when it shouldn't
- [[August 18th, 2023]]
- Small fixes for [[Video Timestamps]]
- If there are two or more of the same videos on screen, play the last used one
- Scroll video into view if it's not visible
- [[August 15th, 2023]]
- Small fixes to [[Graph Overview]]
- Saves last used settings locally
- Fix selected pages not always being highlighted
- Rename "Connect Selected Pages" to "Show links between" to clarify that it does not change your graph
- [[August 14th, 2023]]
- **New and Updated [[Raycast]] extension for Roam!!**
- MacOS users, watch the demo video below to get a sense of the power of having your Roam graph (or graphs 😉) at your fingertips:
- {{[[video]]: https://www.loom.com/share/3fa11c532cb44822a047caecc638e47f}}
- Features::
- Search across all your installed graphs or in one specific graph
- 
- 
- Quick capture notes to your Roam graph without leaving your keyboard
- 
- View a random block from your roam graph
- Easily create Raycast quicklinks to open Roam graphs or specific pages in the graph even faster
... and more features baking in the oven!
- Getting Started Guide
- Install [[Raycast]] from https://raycast.com
- Then install the Roam Extension from: https://raycast.com/roamresearch/roam-research
- Follow the loom video below to add a graph
- {{[[video]]: https://www.loom.com/share/31ada35f7c8b4f44a2ba537b15237854}}
- If you run into any issues, drop us a message at support@roamresearch.com or via Intercom and we will get on it immediately.
- Big thanks to [[hyc]] for their work on the initial version of this extension 🙏
- P.S. Users of the older versions of the Raycast extension will need to add their graph(s) again. Sorry for the inconvenience, this should only be a one time thing
- [[Roam Depot Extensions]]
- **[Send To Graph](https://github.com/8bitgentleman/roam-depot-send-to-graph)**
- A Roam Research extension to send blocks from one graph to another. The destination graph does not need to be open. This is a one-way push. The blocks are added to the new graph as if you had created them manually yourself.
- **Features**
- Send blocks to another graph with a simple right-click command or via hotkey.
- Configure multiple graphs to send blocks to.
- Option to nest sent blocks under a parent block (for example an __#inbox__ tag) in the destination graph.
- **Setup**
- This extension uses the new Roam backend API to allow sending of blocks to graphs that you do not have open. Note: only the creator of a graph can create new API tokens.
- In your destination graph go to the Graph Settings page and select New API Token
- [🔗](https://github.com/8bitgentleman/roam-depot-send-to-graph/raw/main/assets/api-1.png)
- Name the token however you want but make sure to set the Access Scope to Edit Access. This gives the extention edit permissions to the graph.
- Note: When sending blocks I __ONLY__ add to the destination graph. There is no code to modify or delete __ANYTHING__.
- [🔗](https://github.com/8bitgentleman/roam-depot-send-to-graph/raw/main/assets/api-2.png)
- Select Create to generate your unique graph API token. Make sure to save the generated token before navigating away as it is not possible to see the token again once you have navigated away.
- Open up the Source Graph and navigate to the Send To Graph settings page.
- Add the Graph name and Edit Access token for the destination graph to the settings panel and hit the plus symbol. If either of these is incorrect in any way blocks you attempt to send will not go through. You can add as many graphs as you like.
- [🔗](https://github.com/8bitgentleman/roam-depot-send-to-graph/raw/main/assets/api-3.png)
- **Usage**
- There are 2 ways of using the Send-To-Graph extension:
- Right-click on a block and select "Send to Graph". If you have multiple graphs configured, you will be asked to select the destination graph.
- Alternatively, assign a hotkey via the settings panel to send the currently focused block to another graph.
- **Example**
- {{video: https://github.com/8bitgentleman/roam-depot-send-to-graph/assets/4028391/fee66356-1a15-4432-9b73-52ece2c4d6d9}}
- [[August 8th, 2023]]
- [[New Features]]
- New [[Graph Overview]]
- 
- Graph overview now works with very large graphs!
- New "Explore" Feature
- Add pages to see how they connect, what other pages link into them, or what pages they link to.
- 
- The default layout is now a force directed layout, we unfortunetly had to remove the dagre and cose layouts (which only worked with very small graphs anyway)
- [[Roam Depot Extensions]]
- **Graph Radar**
- A Roam Research component to show the last edited pages in a graph. Useful for multiplayer graph or graphs not visited often.
- **Example**
- [🔗](https://github.com/8bitgentleman/roam-depot-graph-radar/raw/main/example.gif)
- **Setup**
- First make sure that **User code** is enabled in your settings. This allows custom components in your graph.
- [🔗](https://github.com/8bitgentleman/roam-depot-tidy-todos/raw/main/settings.png)
- **Usage**
- Easiest way to insert the component is though Roam's native template menu. Simply type ;; and look for **EXTENSION NAME HERE**
- [🔗](https://github.com/8bitgentleman/roam-depot-graph-radar/raw/main/template.png)
- [🔗](https://github.com/8bitgentleman/roam-depot-graph-radar/raw/main/explainer.png)
- **Marco Polo - CJK Symbols Converter**
- Automatically pair the following CJK(Chinese, Japanese, and Korean) brackets and quotation marks entered when the CJK input methods are activated.
- "【"
- "("
- "「"
- "『"
- Convert following consecutive inputs CJK(Chinese, Japanese, and Korean) brackets and quotation marks - a usage which does not exist in these languages - into corresponding Roam Research citation brackets or symbols when the CJK input methods are activated.
- "【【】】": "[[]]"
- "(())": "(())"
- "『「』」": "{{}}"
- "「『」』": "{{}}"
- "『『』』": "{{}}"
- "「「」」": "{{}}"
- [[August 7th, 2023]]
- [[Roam Depot Extensions]]
- **Paste from PDF**
- When some text copied from a PDF is in the clipboard, the command Paste PDF text from clipboard, removing undue line breaks replace line breaks by space and paste the text in the current block, at the current cursor position.
- Provide also the corresponding SmartBlocks command: REPLACENEWLINEBYSPACE with the text to paste as first argument. You can use it with the following SmartBlock (it can also be installed from the SmartBlocks Store).
- - #SmartBlock Paste text from pdf (replace new line by space)
- <%SET:cbText,<%CLIPBOARDPASTETEXT%>%><%REPLACENEWLINEBYSPACE:<%GET:cbText%>%>
- **[🔗](https://github.com/fbgallet/roam-extension-paste-from-pdf/tree/d52fd10913df564c6b9d3df45b90753912cbc1a5#for-any-question-or-suggestion-dm-me-on-twitter-and-follow-me-to-be-informed-of-updates-and-new-extensions--fbgallet)For any question or suggestion, DM me on **Twitter** and follow me to be informed of updates and new extensions : [@fbgallet](https://twitter.com/fbgallet).**
- **Roam Tabs**
- Manage your working pages with tabs.
- [🔗](https://user-images.githubusercontent.com/23192045/246862057-8423abe5-8697-4b9e-949d-cd707711a4b6.png)
- **Open Page In a New Tab**
- You can open the switch palette by pressing Ctrl or the Meta key and clicking the link (page or block reference). This will open a new tab.
- You can enable the "Auto" mode, after which just **clicking** will open a tab (if the page tab exists, it will focus on that tab).
- [🔗](https://user-images.githubusercontent.com/23192045/246862399-08b26378-8358-43fa-8924-4ae6c23975bf.png)
- **Switch Tab**
- [🔗](https://user-images.githubusercontent.com/23192045/249030317-820e8902-0532-4a6e-ab3b-4d1f2d4f123a.png)
- You can open the switch palette by
- Command Pallete [🔗](https://user-images.githubusercontent.com/23192045/249029975-212bdf80-1c5c-4da3-b545-9db90b8a405d.png)
- custom hotkeys [🔗](https://user-images.githubusercontent.com/23192045/249029837-5fe48402-a157-490e-b408-3b57e35bbb25.png)
- **Remember scroll position**
- Each tab can remember your scroll position and reback to it when you switch back to the tab
- [🔗](https://user-images.githubusercontent.com/23192045/249031404-d2413b24-8859-429e-a7a8-44241897aedc.gif)
- **Open Tab in Sidebar**
- **Shift** + click on tabs
- **Auto Hide**
- Auto Hide is a module for [Roam Research](https://roamresearch.com/) that hides the topbar when you scroll down.
- **Main Features**
- Hides the topbar when you scroll down and shows it when you hover with the mouse on the original location.
- Offers a setting to show the topbar when you scroll up
- Offers a setting for setting the topbar background color to match your personal theme. Not needed for Roam Studio.
- **If you want to support my work**
- [Become a GitHub Sponsor](https://github.com/sponsors/rcvd)
- [Buy Me a Coffee](https://www.buymeacoffee.com/rcvdio)
- [Become a supporter on gödel.io](https://www.goedel.io/subscribe?utm_medium=web&utm_source=subscribe-widget&utm_content=47299057)
- [Flattr](https://flattr.com/@rcvd)
- [Paypal](https://paypal.me/rcvd)
- **Save Scrollbar Position**
- A simple Roam Research extension that saves the position of the scrollbar on each page, and when you return to this page, it reverts to the position you last viewed.
- It just saves the position of the scrollbar in the browser's memory, so when you refresh the browser, the last saved data will be cleared.
- Demo1: [🔗](https://github.com/studyduck/roam-save-scrollbar-position/blob/main/demo1.gif)
- Demo2: [🔗](https://github.com/studyduck/roam-save-scrollbar-position/blob/main/demo2.gif)
- [[August 1st, 2023]]
- [[Quality of Life Improvements]]
- Changes to `{{video}}` `{{video-timestamp}}` #[[Video Timestamps]]
- Video timestamps now include a block reference to the video they belong to
- They can be dragged anywhere in Roam, and you can see all of the timestamps of a video from the linked references
- Old video timestamps will still work, but they are not auto updated to include the block reference
- Fixed a bug where timestamps would play a video hidden in the zoom path
- Inserting a timestamp now automatically adds a space after the timestamp
- Templates will now apply the state of `{{sliders}}`, `{{excalidraw}}`, `{{diagram}}` and other `{{}}` components
- You can also now reference templates inside themselves to track the usage of them
- Example::
- #roam/templates Daily mood template that tracks itself
- How is my mood? *
- {{[[slider]]}}
- When selecting a block with shift-arrow up or down, scroll the block into view
- [[June 26th, 2023]]
- Changes to the block context menu
- New button and key command for copying embed
- Original button still works to copy the block ref
- 
- [[June 20th, 2023]]
- [[Bug Fixes]]
- Fix filtering `{{mentions}}` and `{{children-mentions}}` components
- [[June 15th, 2023]]
- [[Experimental]] [[New Feature]]
- `{{children-mentions: [[page]]}}`
- Like linked references but it also collects the linked references from all of the children blocks of `[[page]]`. you can also use it with a block reference
- [[June 12th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- [[Performance Improvements]] and new search feature for [[Linked References]]
- Linked references now load lazily, which means it should open __much__ faster than before.
- The downside is that you can no longer search through them with `cmd-f` or `ctrl-f`, you need to use the built in search component.
- The new search looks through all of the references, the paths of the references, or the children if the children are open.
- 
- [[Roam Depot Extensions]]
- **[Magic Tags](https://github.com/rcvd/magic-tags)**
- Magic Tags by [[Alexander Rink]] transforms tags you specify into beautiful icons while maintaining all functionality, like backlinking and searching.
- [🔗](https://github.com/rcvd/magic-tags/raw/main/screenshots/magic-tags.gif)
- **How does it work**
- Select the Icon Theme. [Blueprint](https://blueprintjs.com/docs/versions/3/#icons) is the default for Roam Research. Roam Studio provides [Feather Icons](https://feathericons.com/).
- Select the first magic word - this is the name of the tag (e.g., if your tag is #love, your magic word is "love")
- Select an icon from the predefined list
- Select a color from the predefined list
- Select the lightness of the color
- **Notes** You can use the same icon for multiple tags - with different colors if you like. An example of this would be a marker for high and critical tasks, which both would use the alert icon, but in yellow for high and red for critical.
- [🔗](https://github.com/rcvd/magic-tags/raw/main/screenshots/high-critical.png)
- **Feature Requests, Bugs, and Feedback**
- If you need an additional icon, have an idea for a new feature, or find a bug, file it under [Issues](https://github.com/rcvd/MagicTags/issues) with a short description and a screenshot. If you have any additional comments or suggestions, please send them to [alex@goedel.io](mailto:alex@goedel.io).
- **If you want to support Alex's work**
- [Become a GitHub Sponsor](https://github.com/sponsors/rcvd)
- [Buy Me a Coffee](https://www.buymeacoffee.com/rcvdio)
- [Become a supporter on gödel.io](https://www.goedel.io/subscribe?utm_medium=web&utm_source=subscribe-widget&utm_content=47299057)
- [Flattr](https://flattr.com/@rcvd)
- [Paypal](https://paypal.me/rcvd)
- **[roam-depot-todo-progress-bar](https://github.com/8bitgentleman/roam-depot-todo-progress-bar)**
- Roam Research progress bar component for visually tracking TODOs in a list.
- **Example**
- [🔗](https://github.com/8bitgentleman/roam-depot-todo-progress-bar/raw/main/example.gif)
- **Setup**
- First make sure that **User code** is enabled in your settings. This allows custom components in your graph.
- [🔗](https://github.com/8bitgentleman/roam-depot-todo-progress-bar/raw/main/settings.png)
- **Usage**
- Easiest way to insert the component is though Roam's native template menu. Simply type ;; and look for **TODO Progress Bar**
- [🔗](https://github.com/8bitgentleman/roam-depot-todo-progress-bar/raw/main/template.png)
- **[oblique-strategies](https://github.com/mlava/oblique-strategies)**
- Overcome creative block by using an Oblique Strategy.
- Originally create by Brian Eno and Peter Schmidt as a way to encourage lateral thinking, Oblique Strategies were originally available as a stack of cards from which you would draw a random card which held a simple prompt. See also: https://en.wikipedia.org/wiki/Oblique_Strategies for more information.
- [🔗](https://user-images.githubusercontent.com/6857790/238811874-8d73b616-2bc1-49c4-89b0-f3755ed1a5a3.png)
- There have been six editions. This extension for Roam Research provides the ability to draw from any of the first five editions, or a combined list containing all of the prompts from the first five editions. The prompts were sourced from https://github.com/noaoh/oblique-stratagems with thanks.
- An Oblique Strategy prompt can be obtained using a Command Palette command or Roam Research Hotkey.
- The following commands are available:
- Random Oblique Strategy Random Oblique Strategy - 1st Edition Random Oblique Strategy - 2nd Edition Random Oblique Strategy - 3rd Edition Random Oblique Strategy - 4th Edition Random Oblique Strategy - 5th Edition
- **[Automatic DNP](https://github.com/mlava/auto-DNP)**
- Automatically paste in your preferred daily note page template when you open your DNP for the first time each day.
- This extension allows you to define templates for every day of the week, or for weekdays and weekends if you prefer to keep it simple.
- Usage
- Use the Roam Depot settings panel to choose either Daily or Weekday/Weekend for Preferred Mode.
- Then, paste in the block reference of a template to the corresponding fields in the Roam Depot settings screen. The example below shows the configuration for Weekday/Weekend mode:
- 
- **[Roam Power Previewer](https://github.com/dragonforce2010/roam-power-previewer)**
- Allows you to preview a website in a side drawer, without having to go out of Roam!
- 
- Usage
- After installing the extension from Roam Depot, just click on a link
- Please note that If you don't want to preview the website content in the sidedrawer or sometimes the website you are tring to preview has a iframe securty policy which forbids to do so, then you can simply press the following keys(ctrl, meta, shift) when click the link, to view the website in a new tab in browser
-
- [[June 9th, 2023]]
- [[Bug Fixes]]
- Editing `{{excalidraw}}` drawings or `{{slider}}`s also updates the last edited time
- [[June 6th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- [[Performance Improvement]] to [[Filters]]
- Opening filters is 4-5x faster
- Adding or removing a filter is 15-30x faster
- Memory usage is a lot less
- This is assuming [[Linked References]] is closed, because displaying all of the references is still very slow
- We will be releasing an improvement to linked references to solve this problem soon
- Internally we completely rewrote how these work to use the same logic as queries, so that in the future we can add OR filters
- The counts for tags changed inside of linked refs filter
- The counts now represent how many of the linked references have that tag. When you filter for "includes" a tag, it will show you that many references
- Small [[Performance Improvement]] to [[Unlinked References]]
- Small [[Performance Improvement]] to [[Streak]]
- Another small [[Performance Improvement]] to [[All Pages]]
- Fixed bug that caused versions to be reordered
- Fixed old daily notes loading on scroll
- previously it could get stuck and you would have to hover over the new note
- [[May 19th, 2023]]
- [[Quality of Life Improvements]] ✨
- [[Find or create page]] performance improvement
- Search is now 2x faster
- Uses 1/3 of the memory of before
- Fixed double digit numbered lists inside of the `{{search: }}` component
- Example::
- 
- [[May 16th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Big [[Query]] update!
- Queries are 2 to 10 times faster than before, depending on what you are querying for
- Queries do not auto update by default now
- To rerun the query, click the refresh button on the top right
- 
- Closing and re opening the query will also rerun it
- We made this change so that Roam doesn't get really slow when you have a query open on the page
- If you liked how it worked before, you can change the default back to auto updating in user settings
- 
- Delete blocks confirmation dialog
- 
- Hit `enter` to confirm, or `escape` to cancel
- You can change the threshold for when to get the warning in user settings
- 
- [[May 15th, 2023]]
- [[Roam Depot Extensions]]
- **[Switch+](https://github.com/dive2Pro/roam-switch-plus)**
- An awesome new extension by [[hyc]] which will change the way you navigate between blocks on a page.
- Has a number of different modes: text mode, tag mode, line mode, sidebar mode, latest changes mode.
- Usage
- Shortcut to activate the extension is ctrl/cmd + shift + p
Then, just start typing to search
- You can switch modes by typing `@`, `:`, `r:` or `e:` in the beginning of the search, or you can also set hotkeys which takes you directly to a particular mode
- Do checkout the video walkthrough below:
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FzIJm0nHEOh.mp4?alt=media&token=d69cb2b5-8002-459e-9eae-08022a028f70}}
- Separate GIFs demo-ing each mode
- Text Mode
- 
- Tag Mode
- 
- Line Mode
- 
- Right Sidebar Mode
- 
- If you like this, you might like another one of [[hyc]]'s extensions: [Search+](https://github.com/dive2Pro/roam-search-plus). Search for it in Roam Depot!
- **[Power CSS Pack](https://github.com/Roam-Research/roam-depot/pull/530)**
- An extension by [[Zhang Michael]] which adds a lot of useful CSS classes you can use to change how a particular block in your Roam graph looks
- Usage
- Just apply the tag you want in your block and the corresponding style will be applied. Some examples:
- `#.css-level-bg`
- `#.css-level-color`
- `#.css-font-yellow`
- `#.css-bg-olive-300`
- `#.css-grid3`
- Check the GIF below for some examples:
- 
- **[Roam Power Themes](https://github.com/dragonforce2010/roam-power-themes)**
- An extension by [[Zhang Michael]] with a collection of 23 beautiful themes
- 
- [[May 10th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Delete button in Mobile App Quick Capture
- [[Screenshots]]
- [[May 9th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Fixes for sign in via Google/Apple issues
- Say goodbye to the dreaded "Enable Third Party Cookies to Sign up with Google" error message 🤣
- [[Desktop App]] version 0.0.18
- Upgraded to electron 22
- Alongside security updates and performance improvements, enables new features like `has()` CSS selector.
- Changed history navigation shortcuts to default browser ones (`cmd + [ / ]` in mac, `alt + left/right` in windows/linux). Old shortcuts still work too.
- Fixes issue where forward and backward buttons in some mouses (like Logi) did not work
- Fixes issues in Ubuntu 22.04, popOS 22.04, etc.
- Added a setting "Exportable By" via which graph owners/admins can allow/restrict users from being able to export graph data
- 
- Settings is under the "Sharing" tab in the settings panel
- ... > Settings > Sharing > Exportable By
- The default is "Anyone with access to the full graph".
- If the graph has not been shared with any other email and is not public, then that option is the same as "Only Me"
- [[April 21st, 2023]]
- **[[Quality of Life Improvements]] ✨**
- More [[Performance Improvements]] to block autocomplete search
- [[April 20th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- [[Performance Improvements]] to the All Pages view
- [[April 17th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- [[Performance Improvements]] and [[Bug Fixes]] for block autocomplete search i.e. the search you get when pressing `((`
- [[April 14th, 2023]]
- **[[New Features]] 🚀**
- Tabs [[block view]] #[[Experimental]]
- 
- If you haven't heard of block views yet
- You can change the current block view by searching in the command palette (`cmd-p`) for "Change Block View"
- Then type the letter of the block view you wish to use as displayed on the screen
- You can also set a hotkey for it
- Block views are still experimental and many parts of Roam don't work seamlessly with them yet
- [[April 13th, 2023]]
- **[[Excalidraw]] update**
- Excalidraw is a virtual hand-drawn style whiteboard. We've now upgraded to the latest version (v0.14)
- You can create a drawing via the slash menu: `/excalidraw`
- 
- above is an image so that it displays properly in older Roam clients. If you'd like to play with it, the excalidraw drawing itself is nested underneath this block
- {{[[excalidraw]]}} {{-: Text elements in drawing: updated to latest version (v0.14) ; use via slash command: "/excalidraw" ; Some notable upgrades ; - Supports images inside of the drawings ; - Dark mode, Canvas Background ; - Ability to resize the drawings in view mode ; - Text elements within the drawing can now be searched ; - Better pen support ; - etc }}
- Some notable upgrades
- Supports images inside of the drawings
- Dark mode, Canvas Background
- Ability to resize the drawings in view mode
- Text elements within the drawing can now be searched
- Works for all new drawings. For old drawings, you have to open them once in edit/fullscreen mode
- Better pen support
- etc
- **[[Quality of Life Improvements]] ✨**
- Added JSON and JSON-LD [[Code Block]] languages
- Theme Authors and [[CSS]] hackers can now target code blocks for specific languages via new CSS classes of the format `.rm-code-block--{lang}`. For example: `.rm-code-block--js` for javascript code blocks, `.rm-code-block--clj` for Clojure code blocks #[[CSS Changes]]
- As an example, here are the customized CSS we're using for the new JSON and JSON-LD languages (color scheme inspired from VS Code)
- ```css
.rm-code-block--json, .rm-code-block--json-ld {
// colors inspired from VS Code
.cmt-propertyName {
color: #22509F;
}
.cmt-bool {
color: #0000ff;
}
.cmt-number {
color: #458A64;
}
.cmt-string {
color: #95261F
}
}
.rm-code-block--json-ld {
// json-ld seems to use cmt-atom for booleans and cmt-meta for property names that begin with @
.cmt-atom {
color: #0000ff;
}
.cmt-meta {
color: #22509fb6; // a lighter version of cmt-propertyName
}
}```
- **[[Bug Fixes]] 🛠**
- Released fixes for issues related to [[Roam Depot]] extensions and non-persistence of user settings
- If you're still encountering issues after this update, please contact us at support@roamresearch.com
- [[April 6th, 2023]]
- [[Roam Depot Extensions]]
- **[Roam Portal](https://github.com/dkapila/Roam-Portal)**
- One of the most loved Roam extensions, now available in Roam Depot!
- An easy-to-use but super-powerful search engine designed to help you explore your data visually.
- Here are just a few ideas for things you can do via this extension:
- **Filter blocks by user:** Filter blocks modified by a particular user.
- **View recently edited blocks:** View your recently edited blocks.
- **Search for reactions:** Search for reactions from users.
- **References**: Study frequent pages and blocks mentioned in your search
- **Time**: Analyze results over time
- In other words, it's an easy to use
- 
- **[🔗](https://github.com/dkapila/Roam-Portal#getting-started) How to use**
- After installing the extension, simply click on the Roam Portal icon located in the top right corner of the toolbar.
- For a video tutorial on how to use Roam Portal, [click here](https://www.loom.com/share/717fa8b788844c23aa08dd7d448bf0bf).
- **[Roam To SMS](https://github.com/mlava/roam-sms)**
- Send SMS messages from within Roam Research!
- This extension allows you to send the contents of a block to an SMS contact using the Nexmo / Vonage API.
- 
- [[March 16th, 2023]]
- **[[Bug Fixes]] 🛠**
- Fixes Roam Depot issue where "blank extensions" would appear in "Installed Extensions" section
- [[March 9th, 2023]]
- [[Roam Depot Extensions]]
- **[Link Preview](https://github.com/dive2Pro/roam-link-preview)**
- Show brief information for external links in roam
- [🔗](https://user-images.githubusercontent.com/23192045/219956966-43781827-285d-4b66-a493-cdfdd7ea2c01.png)
- [🔗](https://user-images.githubusercontent.com/23192045/219956975-20999ad0-f2ff-4a60-8891-9ee766a7c348.png)
- **[🔗](https://github.com/dive2Pro/roam-link-preview/tree/388b5b724f6c5ddc264ac222c15b5719c9755d34#how-to-use)How to use**
- You can create a custom component: link-preview with the URL as the argument
- {{link-preview https://google.com}}
- You can write the currently copied link into Roam using a custom shortcut key
- [🔗](https://user-images.githubusercontent.com/23192045/219956992-d574628e-959d-4247-be9b-b3a3d6c81e16.png)
- You can use the context block menu to transform all links in the entire block.
- [🔗](https://user-images.githubusercontent.com/23192045/223105097-8920f688-d22e-477c-af7e-461179d4dc47.png)
- **[Quick Insert Block](https://github.com/dive2Pro/roam-quick-insert-block)**
- When you need to insert a block above or below the target block , this plugin can help you reduce the number of steps.
- [🔗](https://user-images.githubusercontent.com/23192045/219314019-b3cd117c-81a8-4616-b251-633aac968dc6.gif)
- **[Sidebar Separators](https://github.com/mlava/sidebar-separators)**
- Organize your left sidebar shortcuts with separators.
- Sometimes you just want some visual separation between your list of shortcuts. This extension allows you to add a horizontal line or blank space between any of your shortcuts, so you can achieve just that.
- [🔗](https://user-images.githubusercontent.com/6857790/219263679-cd1ab703-bc54-49c3-a7a0-a82016b66199.png)
- In the above image I've inserted a horizontal line after my second shortcut and a blank line after my sixth shortcut.
- You can configure each separator in the Roam Depot settings. Use an integer to state where to insert the separator - it will be inserted after that numbered shortcut.
- You can have up to three separators, but if there's a need I'll add the option to create more.
- **[Roam Depot Format Hotkeys](https://github.com/8bitgentleman/roam-depot-format-hotkeys)**
- Adds hotkeys for various block formatting options including:
- Justify Block (Left, Center, Right, Full)
- View As Numbered List
- **[Page references counter](https://github.com/fbgallet/roam-extension-ref-count)**
- **[🔗](https://github.com/fbgallet/roam-extension-ref-count/tree/0de3d685be89d75b62e0e99883e589ac4b62bbc8#inline-count-for-page-references-tags-and-attributes-as-superscript-like-vanilla-inline-block-reference-counter)Inline count for page references, tags and attributes as superscript (like vanilla inline block reference counter).**
- 🔎 References counts are also displayed when you search for a reference, inline or in Quick search, in the autocomplete box, what is particularly useful to identify the actually used pages and the unused or wrong spellings!
- [🔗](https://user-images.githubusercontent.com/74436347/218118672-4d7e74aa-e47f-49fb-ac95-7e59e2b1b854.gif)
- By default, inline counts are always displayed. As an option, you can make the count appear only on hover over a given page reference. You can toggle separately inline count and search count with dedicated commands in command palette (with customizable hotkeys).
- **[🔗](https://github.com/fbgallet/roam-extension-ref-count/tree/0de3d685be89d75b62e0e99883e589ac4b62bbc8#for-any-question-or-suggestion-dm-me-on-twitter-and-follow-me-to-be-informed-of-updates-and-new-extensions--fbgallet)For any question or suggestion, DM me on **Twitter** and follow me to be informed of updates and new extensions : [@fbgallet](https://twitter.com/fbgallet).**
- To report some issue, follow [this link (Github)](https://github.com/fbgallet/roam-extension-stats/issues) and click on 'New issue'.
- [[March 1st, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Added Go, Markdown, and TOML [[Code Block]] languages
- **[[Bug Fixes]] 🛠**
- Fix astrolabe spinning off center
- [[February 27th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- `#.rm-hide-for-readers` css class / tag. Hides the block and it's descendants for people who only have read access to that block.
- Useful for hiding a contributing guide on a public graph from those that can't edit
- It is only a visual change ((you can still find the block in the DOM)) so don't use it to hide any secret information
- You can now sort [[Roam Depot]] extensions by downloads, created time, updated time, or alphabetical
- 
- [[Roam Depot]] search improvements
- Now it searches through authors, tags, full descriptions, and handles partial matches better
- You can search for all the extensions by an author
- 
- New syntax supported in LaTeX. Now also supports Macros!
- KaTeX (the LaTeX typesetting library we use) has been updated to the latest version, and Macros have been set up
- (demos below will not work if Roam has not updated to the latest version. A screenshot has been attached underneath this block)
- 
- Examples of some new supported syntax
- angl and angln
- $$A_{\angl n} + B_{\angl g} + C_\angln$$
- set
- $$\Set{x \| y}$$
- etc.
- Macros
- macro definition
- these definition blocks need to be visible in order for them to be registered
- $$\gdef\matrix#1{\begin{bmatrix}#1\end{bmatrix}}$$
- `\gdef\matrix#1{\begin{bmatrix}#1\end{bmatrix}}`
- katex blocks using the matrix macro defined above
- $$
\matrix{1&2&4\\1&2&3}
$$
- `\matrix{1&2&4\\1&2&3}`
- [More info on using macros](https://katex.org/docs/supported.html#macros)
- If you run into any issues with your latex blocks, please checkout the migration guide: https://katex.org/docs/migration.html
- We're now on v0.16.4
- If that does not resolve the issue, please contact Roam Support
- [[February 17th, 2023]]
- **[[Bug Fixes]] 🛠**
- Fixed the screen jump that happens when clicking into a block in the [[mobile]] app
- Requires:: [[iOS]] 15.5 or greater (or [[android]])
- **Before**
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froamteam%2FXcnjD59K61.MOV?alt=media&token=f2a52be0-21d8-4b59-b797-3985af297e4e}}
- **After**
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froamteam%2F6hyWxIeNdl.MOV?alt=media&token=7a0e5e66-ee37-46ae-9b5b-cf872c81d1a0}}
- Fixed the block moving off screen when moving a block up or down on [[mobile]]
- **Before**
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froamteam%2FlWKgJmFnLk.MOV?alt=media&token=ed03d18a-e9c3-4665-a699-1bb76cb45f7c}}
- **After**
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Froamteam%2Fu9q9wrvDQ6.MOV?alt=media&token=9e71a37f-9c0b-45c5-af8d-6c2f8dc4452e}}
- Fixed issues of mobile bar misbehaving
- for example, in some devices, it would float way up and then slowly float down. In others, it would get obscured. The behavior should be much better now across the board
- Requires:: [[iOS]] 15.5 or greater (or [[android]])
- **[[Quality of Life Improvements]] ✨**
- Filter [[queries]] by the author of blocks with `{by: [[user's display page]]}`
- You can find a user's display page title by hovering over a block they created
- Example::
- {{[[query]]: {and: [[Quality of Life Improvements]] {by: [[Baibhav Bista]]}}}}
- [[February 14th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Ability to set up hotkeys for commands set up by Extensions
- 
- Currently you might see all commands nested under "Ungrouped Extension Hotkeys". Extension-wise groupings will be available once the extension migrates to the new API (If you're an extension dev, [more here](https://roamresearch.com/#/app/developer-documentation/page/Xf6HHUsb3))
- Video
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FsYWw81Fk4s.mp4?alt=media&token=492f1dab-db08-4d4a-a57e-be0d05dcd655}}
- Expand block references in templates auto complete
- **Before**
- 
- **After**
- 
- Typing `"` or `'` with text selected will wrap the text with the matching character
- Pasting a link with text selected will automatically wrap the selected text with a markdown link
- 
- Fix display of localhost links, i.e. http://localhost:8020/#/app/test103
- **Before**
- 
- **After**
- 
- [[February 13th, 2023]]
- **[[New Features]] 🚀**
- `cmd-f` / `ctrl-f` find in page search for the [[Desktop App]] (version `0.0.16` or higher)
- 
- [[February 11th, 2023]]
- **[[New Features]] 🚀**
- Streak
- 
- got this via `{{[[streak]]: [[Daily Highlight]]}}`
- Provide it a reference to one or more pages or blocks, it will generate a heatmap showing how often that ref pattern appeared in your daily notes.
- Click any cell to open matching blocks in the sidebar
- use via `/streak`
- you can pass in a single page, or pass in multiple pages, or even pass in query-type syntax!
- examples
- `{{[[streak]]: [[DONE]]}}`
- `{{[[streak]]: [[DONE]] [[Solutions]]}}`
- `{{[[streak]]: {or: [[DONE]] [[Solutions]]}}}`
- [[Conor White-Sullivan]]'s tweet
- https://twitter.com/Conaw/status/1624154783560142848
- [[February 8th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- Multi-select move block up / down (Mac: `cmd-shift-up/down`, PC: `alt-shift-up/down`)
- 
- **[[Bug Fixes]] 🛠**
- [[mobile]] [[iOS]] Fix sync issues that would sometimes appear when reinstating app from background
- [[android]] version did not have this issue but will be receiving an update as well in the next few days
- **[[New Features]] 🚀**
- Open search in sidebar (alt-enter or opt-enter)
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2F5_JZnrFS-l.mp4?alt=media&token=b6bfe09e-14f3-42af-be58-02bb6a2fffbc}}
- One can also use the slash command for a persistent search view (i.e. type `/search`)
- [[February 7th, 2023]]
- **[[Quality of Life Improvements]] ✨**
- If global filters are applied on the log, then show the filter icon so you can remove them
- [[February 1st, 2023]]
- [[Roam Depot Extensions]]
- **[Self-Destructing Blocks](https://github.com/8bitgentleman/roam-depot-block-self-destruct)**
- Set blocks to self-destruct (be deleted) after a period of time. Every hour the plugin will search for all blocks that reference #[[self-destruct]] (configurable to whatever you would like). Any of those references that are older than the time set will be deleted.
- A custom deletion time can be set by nesting an attribute below the block that you want deleted.
- **[🔗](https://github.com/8bitgentleman/roam-depot-block-self-destruct#use-case-ideas)Use Case Ideas**
- Blocks left over from daily templates
- Using queries on your Daily Notes page or old queries in general.
- Keeping your graph lean and clean
- **[🔗](https://github.com/8bitgentleman/roam-depot-block-self-destruct#examples)Examples**
- [🔗](https://github.com/8bitgentleman/roam-depot-block-self-destruct/raw/main/example.png)
- **[Hide Topbar Buttons](https://github.com/mlava/hide-topbar-buttons)**
- Reduce unneccessary clutter!
- This extension allows you to take control of the appearance of your Roam Research topbar. You can choose to show or hide default Roam Research buttons in the topbar.
- [🔗](https://user-images.githubusercontent.com/6857790/213940140-67f212c2-596f-4771-a92a-e5519136a80a.png)
- In the topbar you can choose to hide:
- Page Filter button
- Calendar button
- Three Dot menu button
- Page Width button
- Help button
- Right Sidebar button
- You can select to Hide on Mobile or Hide on All Platforms. This means you can have different settings for different purposes.
- For example, if you want to hide the Help button on mobile only but hide the Calendar button on all platforms, just select Hide on Mobile for Help and Hide on All Platforms for Calendar.
- TODO:
- allow buttons from Roam Depot extensions to be hidden
- **[Augmented Headings](https://github.com/mlava/augmented-headings)**
- Add H4, H5 and H6 headings to your Roam Research graph!
- With this extension, you can create H4-H6 headings and control their CSS very easily. Simply install the extension and then modify the settings in Roam Depot. Note that if you don't change the font settings in Roam Depot settings you won't see any change in the text output even if you make that block a heading. You **must** set font settings to see any difference.
- **New:**
- added setting to allow user-configured heading tags. If you don't want #h4 you could use #.h4 or even #purple_elephant for that heading tag, and the extension will handle it.
- The new headings even work with my Sticky Headings and Table of Contents extension as well!
- [🔗](https://user-images.githubusercontent.com/6857790/214956832-d2711867-ab73-4af0-9e29-074eaf0b3ac8.png)
- For each heading level you can configure:
- font size
- font weight
- font style
- font variant
- You can set a heading using the Command Palette. Click into a block and then select 'Toggle Heading - H4', 'Toggle Heading - H5' or 'Toggle Heading - H6'. Or, right click on the block bullet, go to Plugins and then select the Toggle commands from there.
- If your heading is H4 and you click to toggle H4, it will return to normal text. This is how Roam handles H1-H3. However, if you toggle to a different heading level (e.g. H4 -> H5) it will overwrite to the new level. Again, this is how Roam handles this case.
- [[January 31st, 2023]]
- **[[Bug Fixes]] 🛠**
- Fix plaintext paste (`ctrl-shift-v`) pasting twice on desktop app in linux and windows
- [[Roam Depot Extensions]]
- **[Roam Website Title Parser](https://github.com/dragonforce2010/roam-website-title-parser)**
- This extension can parse the website title and transform the link to the markdown format when you paste a url into roam block
- For example, when you paste a link like this `https://developer.roamjs.com/`, this extension is gonna transform it to `[Introduction - RoamJS](https://developer.roamjs.com/)`
- [[January 30th, 2023]]
- **[[Bug Fixes]] 🛠**
- Fix Chinese language autocomplete not working in top level blocks in references
- Fix Chinese language showing the incorrect word count in all pages
- [[January 24th, 2023]]
- **[[Bug Fixes]] 🛠**
- Fix drag and drop on [[android]]
#### [[2022]]
- [[December 20th, 2022]]
- Fixes a couple of performance issues, should be noticeable especially for [[Local Graph]]s
- [[November 30th, 2022]]
- [[Roam Depot Extensions]]
- **Roam reference expands**
- show the path of the block reference
- 
- 
- **Uninstall**
- All configurations are stored on the [[roam/reference extends/config]] page and need to be removed manually if you want to uninstall the plugin cleanly.
- **Mapbox**
- Render interactive maps directly in your graph!
- **Usage**
- Type `{{maps}}` in a block. When the block renders, an interactive map will render in its place!
- To position the map at a particular center, create a child block with text "Center". Under that block, put in the latitude and longitude coordinates of the center delimited by a comma.
- To start the map at a particular zoom level, create a child block with text "Zoom". Under that block, put in the zoom level value which should be a number. A minimum value of 0 is zoomed all the way out and a maximum value of 18 is zoomed all the way in.
- To add Markers to the map, create a child block with text "Markers". Under that block, add one child for every marker you want to include. In the block, write the text you'd like as the label of the block. As a child of **that** block, put the latitude and longitude coordinates of the marker.
- For example, the following configuration will have to be set as the child of the block to produce the map below:
- Center
- 32.715736, -117.161087
- Zoom
- 12
- Markers
- David Vargas
- 32.7, -117.2
- RoamJS
- 32.72, -117.1
- If the Marker text is already a tag in your graph, clicking on the marker pin will take you to that page. Shift clicking the marker will open the tag in the sidebar.
- You could also filter the markers that are displayed on your map. Clicking the wrench icon on the top right will open the settings overlay, where you could specify a tag to filter by. All markers that are pages that have a block with the entered tag will remain on the map while the rest get filtered out.
- [[November 29th, 2022]]
- [[Roam Depot Extensions]]
- **Oura Ring**
- Import your Oura Ring daily summaries on a given day into your daily note page!
- **[🔗](https://github.com/dvargas92495/roamjs-oura-ring#usage)Usage**
- You'll first need to add your personal access token associated with your Oura Ring account to the Token field in your Roam Depot Settings. The extension needs this in order to access your personal data. [Click here](https://cloud.ouraring.com/personal-access-tokens), to generate your own personal access token.
- To import your Oura Ring data to your daily note page, open the Command Palette and enter "Import Oura Ring". If the current page is a Daily note page, it will query the day before the page title, since you usually want to track last night's sleep. Otherwise, it will query yesterday's data by default. It will output the following text:
- ```javascript
Bedtime Start:: hh:mm:ss
Bedtime End:: hh:mm:ss
Sleep Duration:: hh:mm:ss
Total Sleep:: hh:mm:ss
Total Awake:: hh:mm:ss
Light Sleep:: hh:mm:ss
Rem Sleep:: hh:mm:ss
Deep Sleep:: hh:mm:ss
Day Start:: hh:mm:ss
Day End:: hh:mm:ss
Low Activity:: hh:mm:ss
Medium Activity:: hh:mm:ss
High Activity:: hh:mm:ss
Rest Activity:: hh:mm:ss
Readiness Score:: hh:mm:ss```
- You can also import the data by creating a button by typing `{{import oura ring}}` into a page and clicking the button.
- **Roam native dark theme**
- [🔗](https://github.com/dive2Pro/roam-native-dark/blob/master/SCR-20221120-hek.png)
- [🔗](https://github.com/dive2Pro/roam-native-dark/blob/master/SCR-20221120-hfj.png)
- [[November 28th, 2022]]
- [[Roam Depot Extensions]]
- **SamePage**
- Official Roam client into [SamePage](https://samepage.network/) - the intra tool-for-thought protocol.
- Use SamePage to connect your Roam Graph to other notebooks to sync changes across them, perform cross notebook queries, and more! To get started, install this extension and request an invite code by emailing [support@samepage.network](mailto:support@samepage.network). Check out our docs at https://samepage.network/docs!
- **WARNING**
- The SamePage family of extensions are still **in beta** and are not considered stable yet for real or sensitive data. All data shared on SamePage is considered public and probability of data loss is high.
- Previously, extensions were not listed on the change log, please check out our [github](https://github.com/Roam-Research/roam-depot) for a [full list of new extensions and updates](https://github.com/Roam-Research/roam-depot/pulls?q=is%3Apr+is%3Aclosed). From now on, all new extensions will be listed here
- [[November 11th, 2022]]
- Small fixes
- Fixes issue on restore graph from EDN where some graphs would get stuck near completion
- Fixes "Roam was not built in a day" error that would arise sometimes when collapsing right sidebar windows corresponding to pages
- [[October 6th, 2022]]
- [[New Features]]
- Single Block Multiselect Mode
- Select blocks but not their children or select non consecutive blocks and perform bulk actions on them
- 
- **How to use**
- Toggle the mode on / off with `ctrl-m` (PC) or `cmd-m` (Mac) (customizable)
- Then click a checkbox to select it
- Shift click another checkbox to select a range between that checkbox and the last one selected
- **Available commands**
- Drag and dropping blocks
- Right click context menu
- 
- This feature is still a work in progress.
- Key commands (tab, shift-tab etc) do not work with it
- [[September 30th, 2022]]
- Small fix: if a window already exists in the sidebar and it is tried to open again, it jumps up to the top of the sidebar
- A number of changes throughout the last week for integration of write actions with the new backend API
- [[Developer Notes]]: Checkout [Roam Backend API (Beta) docs](https://roamresearch.com/#/app/developer-documentation/page/W4Po8pcHQ).
- New addition: [Write actions](https://roamresearch.com/#/app/developer-documentation/page/J-hxpYKmK)
- [[September 7th, 2022]]
- [[New Features]] #[[Improvements]]
- [Blueprint Color](https://blueprintjs.com/docs/versions/3/#core/colors) palettes for code blocks (these colors match what is used in Roam)
- 
- #[[Quality of Life Improvements]] #[[Bug Fixes]]
- Fixed checkbox alignment on [[Firefox]]
- **Before**
- 
- **After**
- 
- [[August 18th, 2022]]
- [[New Features]] __sort of__ #[[Tag Styles]]
- We decided to include some of the most useful [[roam/css]] [[Tag Styles]] we've developed for ourselves, you may find helpful/inspiring .rm-E .rm-g and .rm-hide
- **.rm-E **
- Behavior::
- Blocks tagged with `#.rm-E` will display their immediate children next to them,
- rather than indented below them
- Use Cases::
- When you want a sort of [[Mind Map]] light behavior,
- or just want to view things side by side
- 🤷♂️ it's nice to have when you want it not much more to it than that
- Example::
- A #.rm-E
- B
- Note that this only impacts the first level of nesting
- C
- If you want to go further, you have to keep using the tag
- D [[.rm-E]]
- Using the link, not the tag
- so you can see where it is used
- E [[.rm-E]]
- since this class hides itself when used as a tag
- **.rm-g **
- Behavior::
- Blocks tagged with `#.rm-g` are hidden when they are open - revealing the children nested within them
- Children are styled to look like they are one level higher in the block hiearchy than they are -- useful for adding meta-data tags without visually cluttering your outline.
- Use Cases::
- when you want to group a collection of items and hide the block that contains them
- Example::
- [[.rm-g]] #[[Fruits]]
- Apples
- Pears
- Cherries
- **.rm-hide**
- Use Cases::
- When you want to add some info to a block without visually cluttering things up - but still allow the info to be discoverable easily
- Behavior::
- This block only displays when it is open - when it is closed, it is replaced with a very light bar across it's length
- The bar get's darker on hover, and which
- when you click it - it opens the block
- In some ways a mirror of .rm-g
- Example::
- {{[[DONE]]}} This is a task that I'm hiding the metadata for
- Total Time:: 2 min #.rm-hide
- Start time:: 17:26
- End time:: 17:28
- The block above me (({{[[DONE]]}} This is a task that I'm hiding the metadata for)) has a hidden child - hover between us and click the bar to expand it - or arrow key up from me, or down from it, and you'll see it
- Have some hidden children here too
- #.rm-hide
- hidden children
- Look between us!
- [[CSS Changes]]
- Zooming out from sidebar, embed-path, or backlinks now outlines the block you were originally focused on, rather than coloring the block and all it's children with an obnoxious yellow
- Example::
- Shift click on this reference [[>]] Socrates is Mortal and then click a breadcrumb in the sidebar and
- you'll see this -> 
- Images now display inline (previously the forced a line break)
- References of blockquotes and Images now display inline
- Now it is easier to use them for building up compound statements
- Example::
- [[>]] All Men are Mortal
- [[>]] Socrates is a Man
- [[>]] Socrates is Mortal
- > [[IF]] [[>]] All Men are Mortal [[AND]] [[>]] Socrates is a Man
[[THEN]] [[>]] Socrates is Mortal
- [[August 17th, 2022]]
- [[New Features]] #[[Improvements]]
- [[Latex]] now will parse block references, including other latex so you can comp
- Example::
- $$\Large$$\frac{$$n_1$$}{$$n^n$$}$$ + \sum_{i=1}^z $$\mapsto $$n^n$$$$ $$
- **Recursive Latex**
- $$\frac{$$n_1$$}{$$n^n$$}$$
- $$n_1$$
- $$n^n$$
- **Plain Text**
- \sum_{i=1}^z
- ^z
- i=1
- **Reference of Reference - to describe how variable used in another context**
- $$\mapsto $$n^n$$$$
- Here you can describe the meaning of mapsto n^n
- $$n^n$$
- Here you could describe the meaning of the n^n that is being described here
- **Sizing**
- \Large
- Try changing \Large to
- \Huge
- \Small
- Use Cases::
- Being able to separately describe each element of the equation.
- #[[Quality of Life Improvements]] #[[Bug Fixes]] **[[Feature Behavior Change]]**
- Behavior of [[Inline Calculator]] `{{calc: }}` for parsing block references has changed
- [[Old State]]
- Previously, when you composed calculations across many blocks - all of the math text was pulled up and flattened - which could lead to unexpected behavior when building up statements and making calculations that depended on other calculations
- Example::
- Wait? 2 times 4 doesn't equal 5! 
- After Change:: 2 times 4 = 8 
- The old hack to get around required you to wrap block references in a `( )` to make sure that that each component in the calculation was evaluated independently before the values were aggregated After this update, every reference used in a calculation will be wrapped in a `()` automatically before calculation is applied remember [[PEMDAS]]?
- This is what is actually being evaluated now - if you're using lots of nested refs 
- [[New State]]
- After this update, every reference used in a calculation will be wrapped in a `()` automatically before calculation is applied
- Example::
- 2 times 4 = 8 
- Try it here
- 2 times 20 = 40, not 21
- 
- New Features::
- Clicking the green text of the [[calc]] function has always displayed content of the internals of the calcuation, but now if you click on the = sign after doing this, you can see the fully expanded function which is being evaluated, so you can confirm that everything is happening the way you want it to
- 
- 
- 
- **Try it yourself**
- [[Z]] {{[[calc]]: [[X]] {{calc: 1 + 1}} * [[Y]] {{calc: 2 + 2}}}}
- [[X]] {{calc: 1 + 1}}
- 1
- 1
- [[Y]] {{calc: 2 + 2}}
- 2
- 2
- [[August 15th, 2022]]
- [[New Features]] #[[Alpha]]
- `{{embed-path: ((block-ref))}}` - Experimental new view of block embeds where path is visible and clickable - similar to what you'd see for the block in inline-references
- [[Problem it Solves]]
- Often when viewing embeds, it is frustrating to not be able to see the context of the embed - the embed-path component lets you see the parent path of the block at a glance, and navigate to it quickly.
- #[[CSS Changes]]
- Changed the styling when you zoom out of a block in a context - like sidebar and moved the color into a css variable
- `var(--inline-highlight-color)` for the color of ^^highlights^^
- `var(--highlight-color)` for color of highlighted blocks due to zooming out in a embedded context like within backlinks, sidebar, or block refs.
- [[August 11th, 2022]]
- [[Quality of Life Improvements]]
- Search field to help you find the graph you want to switch to d
- in sidebar
- 
- on all-graphs page
- 
- Update to the help database to remove custom styling
- [[July 25th, 2022]]
- [[Roam Depot]] #[[Plugins]]
- [[PhonetoNote]]
- Create a dedicated phone number to send and forward messages to a Roam graph + more
- https://twitter.com/phonetonote/status/1551764556707397633?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[July 19th, 2022]]
- [[Roam Depot]] #[[Plugins]]
- [[Matter]]
- great way to sync highlights
- https://twitter.com/matter/status/1549490849595080704?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[July 15th, 2022]]
- #[[New Features]] [[Roam Depot]] #[[Major Launch]]
- https://twitter.com/RoamResearch/status/1547823281478066177?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[Roam Depot]] #Plugins
- [[Bionic Text]]
- https://twitter.com/fbgallet/status/1548083399977340930?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[July 11th, 2022]]
- Fixed backspace deleting selected blocks when opening up the command pallete
- Also added refocusing of the selected block when hitting `escape` to exit the command pallete
- Increase markdown import limit from 10 to 10,000
- [[June 24th, 2022]]
- [[mobile]]
- [[iOS]]
- Fixed tab, shift-tab, backspace, and arrow keys on ipad with an external keyboard
- Fixed sign in flash on app restart
- Fixed saving the last used graph across app restarts
- [[android]]
- Fixed back gesture
- Added native Google and Apple sign in
- Added sign out
- [[June 15th, 2022]]
- [[mobile]] [[iOS]]
- Apple sign in
- Native google sign in
- Fixed sharing text with newlines in it
- Password Manager autofill for login/password
- [[June 12th, 2022]]
- [[Desktop App]] Links
- Requires updating the desktop app to `0.0.15`
- Deep links that allow one to directly navigate to a graph/page/block in the desktop app
- Demo video (showing some convenient usage tricks too)
- {{[[video]]: https://www.loom.com/share/fb5095868df041a597712b7403c87ed4}}
- URL Format
- Similar format to normal Roam web links
- instead of `https://roamresearch.com/` we have `roam://`
- Example
- Roam web link: `https://roamresearch.com/#/app/help/page/hyL5OPFah`
- Desktop app link: `roam://#/app/help/page/hyL5OPFah`
- [[June 6th, 2022]]
- Sign in with Apple
- Report this page for public graphs
- 
- [[June 3rd, 2022]]
- Fixed bug with namespaces not showing correctly
- introduced yesterday in Fixed bug with changing the code block language
- [[June 2nd, 2022]]
- Fixed bug with changing the code block language
- introduced by parsing change
- Keep original block first in ordering of inline refs
- Password reset emails now use app.roamresearch.com
- [[May 25th, 2022]]
- Fix the parsing of bold in italics and italics in bold (and highlight and strikethrough). It no longer matters what order you put them in.
- Examples::
- `**__^^bih^^__**`: **__^^bih^^__**
- `__**^^ibh^^**__`: __**^^ibh^^**__
- `**^^__bhi__^^**`: **^^__bhi__^^**
- `__**^^ibh^^**__`: __**^^ibh^^**__
- `^^**__hbi__**^^`: ^^**__hbi__**^^
- `**__^^bih^^__**`: **__^^bih^^__**
- Small improvement to all pages search ((Longer debounce time and normalize the search value))
- [[May 23rd, 2022]]
- Fix [[mobile]] quick capture crashing when displaying old quick captures
- [[May 9th, 2022]]
- Fixed [[mobile]] quick capture page auto complete results
- [[April 4th, 2022]]
- Added the ability to remove email-password login if you are also signed in with Google
- [[April 3rd, 2022]]
- ****Mobile App****
- The Roam mobile app is now available for download on the [iOS](https://apps.apple.com/us/app/roam-mobile/id1609277273) (iphone and ipad) and [android](https://play.google.com/store/apps/details?id=com.roamresearch.relemma&hl=en_US&gl=US) app stores
- [[March 10th, 2022]]
- Performance improvement to opening pages with a large amount of mentions while the mentions are closed (~4x faster for a page with 6.1k mentions)
- Note that this does not improve the performance of actually opening the mentions
- [[March 8th, 2022]]
- [[Code Block]]
- [[Solidiity]] syntax highlighting support
- Fixed issue with color picker showing on the `constructor` keyword
- [[March 3rd, 2022]]
- Fixes "All Pages" view so that all columns (Word Count, Mentions, Updated, etc) can be seen when searched
- (was a CSS bug introduced some time ago)
- [[February 16th, 2022]]
- Apple Silicon (M1) [[Desktop App]]
- Do you need to install the new App?
- First [check if you are using a new M1 Mac](https://www.howtogeek.com/706226/how-to-check-if-your-mac-is-using-an-intel-or-apple-silicon-processor/)
- If you are using an M1 Mac, then you should install the new app
- It will be much faster than the old one
- See our migration guide for how to migrate from our old (intel) desktop app to the new (Apple Silicon) one
- [[February 12th, 2022]]
- Initial load memory and performance updates, related to Preparation work for graph load / memory improvements (stay tuned)
- You may experience a longer load time on while your graph upgrades, you should see a message like this
- 
- [[Technical Details]]
- Loading from Roam's servers
- up to 50% faster
- up to 66% less peak memory usage (during load)
- up to 20% reduction in idle memory usage (after app loads)
- Loading from Indexeddb (local)
- up to 16% faster
- up to 40% less peak memory usage (during load)
- up to 20% reduction in idle memory usage (after app loads)
- up to 33% reduction in used disk space
- https://www.loom.com/share/824de8dbd66c40e591eac1404e66198e
- [[February 11th, 2022]]
- Fix having to double click to edit text on [[iOS]] [[Safari]]
- Before
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FMgQBi2FROY.MP4?alt=media&token=10254893-b682-4a78-94e5-3ec85d632f1a}}
- After
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FXbMOzNrxpu.MP4?alt=media&token=42386235-418c-42a3-9b4c-5e6699a5cf0e}}
- [[February 9th, 2022]]
- Fixed bug selecting multiple blocks in embeds and linked references
- [[February 7th, 2022]]
- Update datascript to `1.3.9` * *
- Includes [performance improvements](https://github.com/tonsky/datascript/blob/master/CHANGELOG.md#130) that might make extensions faster
- Bug fixes related to Preparation work for graph load / memory improvements (stay tuned)
- Delayed full release of load performance improvements
- Fixed potential memory leak
- Bug fixes to our update / upgrade mechanism
- [[February 3rd, 2022]]
- Prevent clicking out of [[Import]] while files are importing
- Also added text showing progress, similar to EDN restore
- Change [[Encrypted Graphs]] password
- In the settings panel
- 
- Fix paste bug causing images to be pasted instead of text from Microsoft Word
- Revert Update datascript to `1.3.8`
- Unfortunately had a bug that broke some extensions, will re release as soon as the bug is fixed
- [[February 1st, 2022]]
- Add icon to encrypted graphs in all graphs view
- 
- Update datascript to `1.3.8`
- Includes [performance improvements](https://github.com/tonsky/datascript/blob/master/CHANGELOG.md#130) that might make extensions faster
- Fix bug with [[Restore]] graph, causing some data to not be imported correctly
- Fix not [[Export]]ing `:log/id`, causing daily note pages to not show up in the log
- [[January 29th, 2022]]
- [[Encrypted Graphs]]
- Unlimited graphs for all
- Increase upload file size from 100MB to 500MB
- [[January 28th, 2022]]
- Preparation work for graph load / memory improvements (stay tuned)
- Small additions to the roamAlphaAPI (see docs [here](https://roamresearch.com/#/app/developer-documentation/page/tIaOPdXCj) for detailed changelog)
- [[January 25th, 2022]]
- [[Import]]
- Small speed / memory improvements
- Bug fix causing import to fail when importing a large amount of files
- [[January 3rd, 2022]]
- A major change and some minor additions to `roamAlphaAPI`, the API that roam extensions are built on top of.
- If you're a dev or are interested, more details [here](https://roamresearch.com/#/app/developer-documentation/page/tIaOPdXCj)
#### [[2021]]
- [[December 7th, 2021]]
- [[Quality of Life Improvements]]
- Better error checking for queries
- fixed bug where queries could previously lead to "Roam was not built in a day" errors
- [[Performance Improvements]] for imports and queries
- [[November 26th, 2021]]
- [[Quality of Life Improvements]]
- Fix upload issues in [[iOS]]
- Automatic handling of snapshot issues
- [[November 17th, 2021]]
- Natural Language Date suggestions now work in "Find or Create Page" search bar
- Example screenshot
- 
- [[November 10th, 2021]]
- Natural Language Dates
- You can now write dates in natural language in Roam.
- Write the date in square brackets [[ ]] in any format, and Roam will convert it to a date.
- Select the suggested date for it to be entered in your block.
- **Example Screenshot**
- 
- Some other examples you might want to try
- `[[5 days ago]]`
- `[[2 weeks from now]]`
- `[[last friday]]`
- `[[wed]]`
- `[[2021-11-13]]`
- `[[11-13-2021]]`
- `[[17 nov 2019]]`
- [[November 9th, 2021]]
- [[Code Block]] [[Quality of Life Improvements]]
- Updated to `codemirror.next`
- Performance for large code blocks should be significantly better
- Styling changes
- **before**
- 
- **after**
- 
-
- Added `latex` and `dart` languages
- Added collapsable code gutters
- Added highlighting matching brackets
- Changed the default font to [fira code](https://github.com/tonsky/FiraCode)
- Added line wrapping
- [[Example]]
- 
- [[November 5th, 2021]]
- [[Bug Fixes]] - fix errant text insertion for [[Firefox]] tab change
- 
- [[October 12th, 2021]]
- Major [[Performance Improvements]] to filters on pages and backlinks
- Should be particularly noticeable on huge collections - like TODO pages or user display name pages in multiplayer graphs.
- [[October 7th, 2021]]
- [[Quality of Life Improvements]]
- Fix [[autocomplete]] appearing offscreen in [[embed]]s, the [[Right Sidebar]] and [[mobile]]
- [[embed]]
- **before**
- Autocomplete gets "trapped" inside of the embed
- 
- and scrolls the embed, which sometimes leads to the embed getting stuck
- 
- **after**
- 
- [[Right Sidebar]]
- **before**
- 
- also sometimes led to a similar issue as with embeds, where the sidebar got stuck offscreen
- **after**
- 
- [[mobile]]
- **before**
- Autocomplete causes the whole screen to scroll to the right
- 
- **after**
- Autocomplete adjusts to fit the size of the screen
- 
- [[September 28th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- All settings, including keyboard shortcut customizations accessible from [[Command Palette]]
- `cmd-p` on [[Mac]]
- `control-p` on [[Windows]] or [[Linux]]
- __handy way to discover or remember different keyboard shortcuts__
- Example::
- 
- [[September 27th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Added a shortcut (`Cmd/Ctrl+Opt+R`) to toggle [[Youtube]] [[Videos]] playback while typing in a block
- Made [[Video Timestamps]] look a little nicer
- **[[Bug Fixes]] 🛠**
- Fixed bug that caused Roam to crash when [[Query]] using `between` contained only one date
- [[September 21st, 2021]]
- [[Customization]] #[[End User Programming]] #[[Quality of Life Improvements]]
- Custom components in [[JSX]] and [[Javascript]]
- {{[[video]]: https://grain.co/highlight/NkzVPjnoX3P8gavWAVq9g00DiABYGCE1gWZIU63J}}
- [[Example]]
- {{[[video]]: https://grain.co/highlight/2xiEAKKj5It1deDSFzbwWMbm3JXLwqt0OdtzmQ53}}
- [[September 18th, 2021]]
- [[Customization]] [[Improvements]]
- Styling changes applied to blocks via `#.style-tags-like-this` now propogate to references of those blocks red #.bg-red-500 #.text-white , white and blue #.bg-blue-500 #.text-white
- white
- blue #.bg-blue-500 #.text-white
- red #.bg-red-500 #.text-white
- Propogates many levels up too -- see ((Styling changes applied to blocks via `#.style-tags-like-this` now propogate to references of those blocks red #.bg-red-500 #.text-white , white and blue #.bg-blue-500 #.text-white ))
- [[August 26th, 2021]]
- **[[Bug Fixes]] 🛠**
- Fixed bug where when opening references of a block in the sidebar, two instances would show up
- Fixed issues around Display Name not showing
- **[[Developer Notes]] 🧑💻 **
- Fixed bug for removing window via front-end API
- Fixed bug for opening mentions in sidebar via front-end API
- [[August 11th, 2021]]
- **[[New Features]] 🚀**
- You can now use [[Video Timestamps]] for Youtube videos!
- Either type `/video timestamp` or hit `Cmd/Ctrl+Alt+t` under a video to enter a timestamp
- Example::
- {{[[video]]: https://www.youtube.com/watch?v=4yXK9OMc2OU}}
- {{[[video-timestamp]]: 00:07:07}}
- #Notes Cmd+U opens search bar
- {{[[video-timestamp]]: 00:07:08}}
- {{[[video-timestamp]]: 00:07:08}}
- {{[[video-timestamp]]: 00:08:57}}
- {{[[video-timestamp]]: 00:09:02}}
- {{[[video-timestamp]]: 00:09:43}}
- {{[[video-timestamp]]: 00:09:45}}
- **[[Quality of Life Improvements]] ✨**
- Fixed [[Mobile Menu Bar]] to insert double brackets instead of single brackets
- [[August 3rd, 2021]]
- **[[Bug Fixes]] 🛠**
- Fixed bug with image links containing `\r`
- [[July 11th, 2021]]
- **[[New Features]] 🚀**
- You can now change your sign in email inside the new `Account` panel in the `Settings` menu
- [[July 8th, 2021]]
- **[[Bug Fixes]] 🛠 **
- Fixed bug where cursor remained did not move to the end of the generated template content
- Fixed bug where inline css would get loaded before styling from `roam/css`
- Minor bug fixes and improvements.
- **[[Developer Notes]] 🧑💻 **
- `data.block.create` and `data.block.update` can now be used to set alignment, heading, and the children blocks' view type. See [developer docs](https://roamresearch.com/#/app/developer-documentation/page/CAtB5a7wv) for more info.
- [[June 23rd, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Slash menu () will only trigger when the slash is at the very beginning of a block, or preceded by a space - __not__ in the middle of a word
- [[June 11th, 2021]]
- **[[New Features]] 🚀**
- Desktop app for macOS, Linux, and Windows is out now!
- Download from the `...` menu in the top right of your screen, the [[Graphs and Settings]] page, or [our home page](https://roamresearch.com)
- [[June 9th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Much faster load times when opening a graph
- [[June 8th, 2021]]
- **[[Bug Fixes]] 🛠 **
- Fixed some bugs around auto-backups, graph deletion, file manager
- [[June 4th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- [[Date picker]]
- Made it much faster
- You can now change first day of week and see the week number
- Go to `Settings > User Settings > International` to toggle.
- Improved styling
- {{[[table]]}}
- Before
- 
- After
- 
-
- [[June 2nd, 2021]]
- **[[Quality of Life Improvements]] ✨**
- You can now copy a [[Block References]] while editing it (via `Cmd/Ctrl+Shift+C`)
- You can now see other references inline for [[Block References]]. Go to `Settings > User Settings > Inline Reference Counts` to activate.
- **[[Bug Fixes]] 🛠 **
- Fixed plaintext paste in [[Safari]]
- [[May 25th, 2021]]
- **[[Bug Fixes]] 🛠 **
- Reverted Block embeds will now be expanded by default
- Comment button will no longer keep showing up after taking screenshots or switching apps
- Made date picker faster
- Fixed pasting multiple blocks multiple times
- **[[New Features]] 🚀 #.h**
- Added support for [[Kroki]] diagrams ([Link](https://kroki.io)) #.h
- How it works::
- Write your kroki code in a code/regular block, for instance,
- ```plain text
graph TD
A[ Anyone ] -->|Can help | B( Go to github.com/yuzutech/kroki )
B --> C{ How to contribute? }
C --> D[ Reporting bugs ]
C --> E[ Sharing ideas ]
C --> F[ Advocating ]```
- Then use the following syntax
- `{{[[kroki]]: TYPE_HERE: BLOCK_REF_HERE}}`
- so for instance, `{{[[kroki]]: mermaid:((13fZ8yxDr))}}` will produce:
- {{[[kroki]]: mermaid:```plain text
graph TD
A[ Anyone ] -->|Can help | B( Go to github.com/yuzutech/kroki )
B --> C{ How to contribute? }
C --> D[ Reporting bugs ]
C --> E[ Sharing ideas ]
C --> F[ Advocating ]```}}
- Screenshots::
- 
- [[May 17th, 2021]]
- **[[New Features]] 🚀**
- You can now quickly jump to/between [[Daily Notes]] pages using the date picker!
- 
- Open graph-view for page has been moved into the dropdown menu
- [[Secret Feature]] - to be announced after round on testing
- [[May 16th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- [[Pages]] [[Sharing]] has been re-introduced
- [[Query]] will load 50 results at a time ((to prevent humongous queries from freezing Roam))
- [[Query]] results can now be grouped by pages
- You can now show/hide paths of blocks in [[Query]] results
- **[[Developer Notes]] 🧑💻 **
- Added `data-uid` to [[Block References]]
- [[May 12th, 2021]]
- **[[Bug Fixes]] 🛠 **
- Long-pressing the expand/collapse button will expand all blocks in linked references, like in normal blocks.
- Fixed PDFs not rendering
- [[May 7th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Block embeds will now be expanded by default
- [[May 4th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- You can now shift-click breadcrumbs/path of zoomed-in block to open in [[Right Sidebar]]
- **[[Bug Fixes]] 🛠 **
- Made [[Query]] and [[Linked References]] slightly faster
- Pasting blocks containing images will no longer destroy block structure
- Made text highlights legible in [[Block References]] previews
- **[[Developer Notes]] 🧑💻**
- iFrame Components are a new possibility for extending Roam. Write components using any JS framework, host it on your own server, but interact with Roam graph data. Documentation https://roamresearch.com/#/app/developer-documentation/page/YNgZSgVSS.
- [[May 3rd, 2021]]
- **[[New Features]] 🚀**
- Hidden feature for [[Roam Team]]'s internal use, will be notifying believers if no bugs in next few days, and rest of the community shortly after that.
- [[April 30th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Added syntax highlighting for [[SPARQL]] and [[Turtle]] #[[.Kifah]]
- **[[Developer Notes]] 🧑💻**
- As part of our ongoing effort to keep Roam secure, we're improving how extension settings are stored. **Please review your roam/js, roam/css and Custom Components settings and re-enable the ones you want to use again. **
- **[[Bug Fixes]] 🛠**
- Auto-backups will no longer trigger when you switch/reload your graph.
- The block info pop-up will no longer show up while dragging blocks on [[Safari]]
- Fixed a bug with graph settings not appearing on local graphs
- [[April 29th, 2021]]
- **[[New Features]] 🚀**
- You can now easily manage/delete all your uploaded files by going to `... > Settings > Files`
- **[[Bug Fixes]] 🛠**
- Pasted HTML links/images whose URL contains brackets will no longer break [[Alias]]. Go ahead, paste that [[Wikipedia]] page!
- Prevent creating orphaned blocks on backspace
- **[[Developer Notes]] 🧑💻**
- Moved `data-edit-time`, `data-create-time`, and `data-edit-display-name` from `span.rm-bullet` to `div.rm-block`
- Added `data-edit-photo-url`
- So now we can style the entire block easily based on who wrote it and access the users' profile photo url if they have one from signing in with google ((and in the future all users when we allow custom profile pictures))
- [[April 28th, 2021]]
- **[[Bug Fixes]] 🛠**
- Fixed bug which created orphan blocks when deleting in [[Linked References]]
- [[April 23rd, 2021]]
- **[[Bug Fixes]] 🛠**
- Contents of [[Kanban]] will now load normally when its children are collapsed
- Pressing Enter will split the Kanban card instead of inserting an empty card
- Cards can be deleted or joined like in normal blocks
- Some components like images will no longer overflow the kanban
- Disabled vertical scrolling on the [[Mobile Menu Bar]]
- Minor performance improvements
- [[April 22nd, 2021]]
- **[[Bug Fixes]] 🛠**
- Fixed performance regression
- Made settings modal mobile-friendly.
- [[April 21st, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Added buttons for undo, redo, square+round brackets to the mobile menu bar!
- **[[Bug Fixes]] 🛠 **
- Cursor will be placed correctly when adding TODO via the mobile menu bar
- Multibar lines will no longer show over the mobile menu bar
- [[April 20th, 2021]]
- **[[Bug Fixes]] 🛠 **
- Fixed Graph Settings not opening and removed sharing tab for [[Local Graph]]
- [[April 18th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Improved dropdown menu
- Moved Sharing settings into its own tab
- **[[Bug Fixes]] 🛠 **
- Redo will now work more than once
- [[April 16th, 2021]]
- **[[New Features]] 🚀 **
- Custom shortcuts! You can find them in `Settings > Hotkeys`
- **[[Quality of Life Improvements]] ✨**
- You can now hide code blocks in search results. To toggle, go to `Settings > User Settings`.
- User Settings and Graph Settings have been unified into the new Settings modal.
- **[[Bug Fixes]] 🛠 **
- Empty `` (link) tags in pasted content will no longer be rendered.
- [[April 15th, 2021]]
- **[[New Features]] 🚀**
- Unlimited [local graphs]([[Local Graph]]) are now available for all Roam subscribers!
- [[April 14th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Hitting tab while writing a page reference will autocomplete the first option
- **[[Bug Fixes]] 🛠**
- Fixed an embed styling issue
- [[April 12th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Added [[Elixir]] as a code block option
- [[April 9th, 2021]]
- **[[Quality of Life Improvements]]**
- Page width is now persisted
- [[April 7th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Improved mobile menu bar and replaced Drawing helper button with [[TODO]] button
- {{[[kanban]]}}
- Before::
- 
- After::
- 
- **UI Updates**
- Cleaned up the [[Left Sidebar]]
- {{[[table]]}}
- Before::
- 
- After::
- 
- Cleaned up [[Quick Capture]]
- {{[[kanban]]}}
- Before::
- 
- After::
- 
- Revamped Import modal
- {{[[table]]}}
- Before::
- 
- After::
- 
- {{[[table]]}}
- Before::
- 
- After::
- 
- Updated Sharing settings
- {{[[table]]}}
- Before::
- 
- After::
- 
- And with the page sharing security warning:
- {{[[table]]}}
- Before::
- 
- After::
- 
- The sharing options:
- {{[[table]]}}
- Before::
- 
- After::
- 
- Lighter Roam bullets, slightly thinner bold text, and subtler multibar so you can focus on your content
- {{[[table]]}}
- Before::
- 
- After::
- 
- [[April 6th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- **Kanbans are now directly editable**
- Navigate around with key commands (cmd- on Mac)
- Relocate cards with key commands (cmd-shift- on Mac)
- Reorder with drag n' drop
- Drag and drop blocks in and out of the kanban with more precise location control
- Edit cards in the kanban
- Enter adds a card below and focuses it
- Click in a column to add a card
- **[[Bug Fixes]] 🛠**
- Minor performance improvements
- [[April 5th, 2021]]
- **[[Bug Fixes]] 🛠**
- Fixed a memory leak and improved performance
- [[April 2nd, 2021]]
- **[[Quality of Life Improvements]] ✨**
- Added shortcut hint in context menu for copying [[Block References]]
- Made it clearer that deleting a graph doesn't immediately allow using its name again
- {{[[table]]}}
- Before::
- 
- After::
- 
- **[[Bug Fixes]] 🛠**
- Update Changelog link in `Check for Updates` toast
- [[March 30th, 2021]]
- **[[New Features]] 🚀**
- You can now export the block you're zoomed into instead of the whole page
- **[[Quality of Life Improvements]] ✨**
- Block embeds are now resolved to text in [[Markdown]] exports
- Added an icon to easily access the right sidebar
- The shorcuts icon has been turned into an option inside the ... dropdown menu
- Added better visual feedback for adding/removing shortcuts
- **[[Bug Fixes]] 🛠**
- Strikethrough and redo shortcuts on Windows have been reverted to Win+Y and Ctrl+Y respectively following reports that users couldn't redo more than once.
- [[March 28th, 2021]]
- **[[New Features]] 🚀**
- You can now export in [[Flattened Markdown]], which removes all indentation and block formatting
- **[[Quality of Life Improvements]] ✨**
- [[Block Embed]]s will remember whether you closed or opened them between page reloads
- When editing a page title, any preceding/trailing whitespaces will be automatically removed
- When exporting a single [page]([[Pages]]), you'll directly receive the exported file instead of a zipped file.
- [[March 24th, 2021]]
- **[[New Features]] 🚀 **
- New Help Graph!
- **[[Quality of Life Improvements]] ✨ **
- Added warning banner to experimental graphs
### [Change Log Archive](https://roamresearch.com/#/app/help-archive/page/dxTi-iUs2)
- [[roam/comments]]
- [[May 11th, 2023]]
- [[Baibhav Bista]]
- [[Screenshots]]
- If anyone is curious how I got the two images side by side, open the command palette (cmd-p) and then "Change block view". The one I'm using here is "horizontal"
- If you use these block views regularly, might want to set a hotkey for it. That can be done via the command palette as well
- [[February 2nd, 2022]]
- [[Joshua Brown]]
- Unlimited graphs for all
- * not for beta users
---
# FAQ
## [Account]([[Account]])
#### **Can I change my profile picture?**
- Unfortunately no you can't yet change your profile picture.
- If you sign in with Google, it displays your Google photo and name.
- Sign out of your account and hit Sign in with Google from the [sign-in](https://roamresearch.com/#/signin) page-
- 
- If you choose the same Gmail account there, your name and profile picture or avatar should be updated according to your Google account.
#### **Can I change my account email?**
- Yes! Here's how to change your login email:
- **Please note** that if your new email has already been used to create another Roam account, the feature won't work for now - if that's the case, please contact us at [support@roamresearch.com](mailto:support@roamresearch.com) and we'll help you with that.
- From the three-dot menu on the top-right of your Roam, click on "Settings" and navigate to "Account"
- Make sure that your sign-in method is "Email"
- 
- If it says "Google", please click on the blue button that says "Send new password email" and follow the instructions
- 
- Under the "Email" field, type your current login password and click on "Confirm"
- 
- You will then be able to write your new preferred email as your new sign-in method.
- 
#### **How do I sign up?**
- Here's how to sign up to Roam:
- Go to https://roamresearch.com/ and click on the blue button that says "Sign Up"
- 
- After doing that, click on the button that says "Create your roam account"
- 
- Then, create an account with your email and a password (or choose "Sign up with Google"), then finally click on "Sign Up".
- 
- We have a three different membership levels. Monthly ($15), Yearly ($165) and our 5 year Believer plan ($500).
- We offer a free 31 day trial on monthly and yearly membership levels, which means that you can trial Roam for a month without any charge.
- However these memberships do require you to enter your credit card details in order to start your free trial. We don't charge you at all during the 31 day trial, and you are welcome to cancel without charge (instructions at bottom of page).
- Select the plan you would like and then press start free trial.
- 
- You will then be taken to our billing provider in Stripe, where you will be asked to enter credit card details.
- 
- Once you have entered your credit card details and pressed start trial, you are now underway, ready to start using Roam Research!
- If you are unsure at all, you are welcome to cancel anytime (here's a guide on [how to cancel your free trial]([[Cancelling your membership during your free trial]])).
#### **How do I change my password?**
- The procedure for changing your password is the same as the one for resetting it.
- You can click on the "Forgot your Password?" link from the [signup](https://roamresearch.com/#/signup) page, and that'll allow you to change it.
- 
## [Billing]([[Billing]])
#### **How much does Roam cost?**
- When you sign up for Roam, you can choose between a monthly subscription ($15/month), a yearly subscription ($165/year), and the [[Believer]] plan ($500/5 years).
- The monthly and yearly subscriptions will start once your free 31 trial ends, and the Believer Plan will start immediately.
#### **How do I change my membership level during my free trial?**
- It's possible to change your membership between monthly and yearly during your free trial.
- Log in to [www.roamresearch.com](https://www.roamresearch.com/) using your account email and password. The first page after signup is the graph overview page.
- To change your plan, press the 'Click here' link at the top of page, highlighted below:
- 
- This will launch Stripe which is our billing portal. From there, you can click 'Update plan'.
- 
- The next page will show you Plans Available, allowing you to choose between monthly and yearly. Update your preference, will bring up a continue button.
- 
- And the final stage to complete the process is to confirm.
- 
- **Your month trial**
- If you switch over plans, you will still receive the remaining part of your free trial, but your trial won't reset to 31 days.
- Any questions please let us know.
- That's it, you can now [[keep on Roaming]] for the months and years ahead!
#### **How can I upgrade to a** [[Believer]] **plan?**
- You have to cancel your original plan from the dashboard (from the "click here" link)
- 
- Then, follow the directions on the dashboard to upgrade
- 
- Here's a video walkthrough for upgrading to believer:
- {{[[video]]: https://www.loom.com/share/f28c077d47ce4d8396363e4bcae485b7}}
#### **If I upgrade/cancel/pause my subscription, will I lose my data?**
- No, we never delete any graphs unless asked to. So you can cancel/pause your subscription, reactivate it later and you'll still be able to get back to your graph. You can also [export]([[Export]]) your graph before your subscription expires so you always have a local backup.
#### **How can I cancel my membership during my free trial?**
- [[Cancelling your membership during your free trial]]
#### **How can I change my payment method?**
- Here are the steps for changing your payment method:
- Visit https://roamresearch.com/#/app then you'll see this
- 
- Click on the first link to cancel or update.
- The next page will look something like this.
- 
- From here you can cancel, change, or renew your plan, along with the payment method.
#### **Can I apply Roam Scholar pricing for the** [[Believer]] **plan?**
- Unfortunately, we cannot offer Scholar prices for our Believer plan—it ends up being the same price per month as the Scholar's discount plan!
## [Features]([[Features]])
#### **How do I create a graph?**
- Awesome! Thanks for signing up to Roam.
- The first page you will see is the graph overview page. A graph is another name for a database. Inside a graph is where you will do all the work in Roam, writing, making blocks and pages. And to get there, you have to create your first graph.
- **Create your first Graph**
- Click the + Create Graph button show below.
- 
- You will then be prompted to choose a graph name in the pop up.
- Just a warning! It's currently not possible to change your graph name after it has been created. Renaming graphs will be a feature in the future, but for now, please name your Graph something you will be happy with for a while. If you are unsure, something generic related to your name is a safe strategy.
- 
- Once you have entered a New Graph Name and pressed Create Graph you will be taken to the daily notes page within your graph. Congrats you are now officially able to use Roam!
- You can also contact support any time via the help menu that automatically pops up when you sign up, or from the ? button in the top right of your screen.
- But the best way to find out what Roam can do is to try for yourself and keep on Roaming!
#### **What's the difference between hosted vs** [[Local Graph]]?
- There is a big difference between hosted vs local graphs.
- You can only access the local graphs on the computer you hosted the local graphs with, whereas you can access the hosted graphs on any computer with your Roam account, as well as [[Sharing]] with collaborators for them to view or edit your graph.
- Though, some people would prefer local graphs for ultra-security (since the notes you jot down won't hit our server) and control of data.
- However, hosted graphs are used when we want to access our notes anywhere, on any machine, and collaborate with anyone :)
#### **How do I make a** [[Kanban]]**?**
- 
#### **How do I hide private things in my database?**
- If you need to make some blocks private, you can use our [[Encrypted Block]] feature.
#### **Can I change my graph name?**
- You can't change the name of graphs just yet. As a work around for now, you can create a new graph with your preferred name, export your notes from your old graph, and import them to your new graph. Follow these steps:
- 1) [[Export]] your graph (click the top right '...' menu and then 'Export All' as EDN format)
- 2) Create a new graph with the name you want (click your graph name in the top left and then 'Graphs and Settings' from the dropdown)
- 3) Once you are in your new graph, click the top right '...' menu and then 'Settings' -> 'Graph' and then restore this graph, by uploading your EDN file. This has then created an identical copy of your graph, with your new name.
#### **Does Roam have a mobile app? Can I install it on my machine?**
- Not yet, however Roam is available now as a webapp which gives you full access to your Roam and functions in a similar way to an app available through the appstore.
- Here's how to install Roam as a webapp on your **phone** or **tablet**:
- Go to chrome (or the other browser you use such as safari, firefox etc), then go to [http://www.roamresearch.com](http://www.roamresearch.com/), and it will ask you to sign in to your Roam account.
- Once you sign in you will see this screen below. And then click the prompt at the bottom that says 'Add Roam to homescreen', which will install Roam as a link on your tablet/phone.
- 
- An alternative way to do this, if you go to [roamresearch.com](http://roamresearch.com/) and sign in, you should should see 'install full site' as a button on the top right of page, if you click this it will install Roam on your device.
- Here's how to install Roam as a webapp on your **desktop**:
- Go to Chrome, and open your Roam graph
- From Chrome's three-dot-menu, go to "More Tools", "Create Shortcut"
- 
- More on this: https://www.roamtips.com/home/roam-research-app-mac-windows
#### **What are the available formats for** [exporting]([[Export]]) **and backing up the data in my graph?**
- Markdown, JSON and EDN
#### **How do I create new pages?**
- Create pages by typing square brackets [[ ]]
- When you type two opening square brackets, `[[`, anywhere in your existing Roam pages, Roam will automatically complete with the closing square brackets. Then to create a page: all you have to do to is write the title of the page within those brackets. Hit enter and the title will turn blue indicating it has now become its own page!
- Here's an example, where I created a new page called 'Swimming' to log my swimming sessions. Without leaving the Daily Notes, I created the [[swimming]] page, which I can then move into and back from (bidirectional linking!). I then also created a TODO for myself to look up more info for the local pool.
- 
- Creating new pages by typing square brackets in the flow of your writing takes some getting used to, but it is one of the distinctive features of Roam. Compared to other note-taking software which relies on the traditional sequence: __file -> new-> dropdown __or __file tree menu systems__, with Roam you'll expend no energy on file management. Pages - and insights! - will come about seamlessly, in the flow.
- If you have text that you have already written, it's also possible to highlight a word or phrase, and with it highlighted pressing [[ ]] will also turn it into a page. Here's an example:
- 
- Create new pages via the search bar on the top right
- You can use the search bar in the top right of Roam to search your existing pages, and you can also use it to create new pages. Click on the search bar (or hit cmd+u) and your existing pages will start showing up as you type. If you want to create a new page, type the title here, press enter, and the new page will be created.
- Here, I use the search bar to create a page for cycling.
- 
- In terms of end result, there is no difference between the pages created with either method - [[swimming]] or [[Cycling]] both will be new pages in your database. However, the first method creates pages in the flow of writing, more spontaneously, while the second is used more consciously to create a page that you may have in mind.
#### **How can I add frequently used pages as a shortcut?**
- To create a page shortcut, within the page you want to create a shortcut to, click the star button located in the top right next to the search bar.
- Clicking this star button will add a shortcut to that page in the left sidebar menu, making the page one click away from wherever you are in Roam.
- If later you want to remove this shortcut, follow the same process. Enter the page you want to remove from your shortcuts, and then simply un click the same star button.
- Here's an example:
- 
#### **How do I delete a** [page]([[Pages]])?
- There are different ways to delete a page:
- From the [[All Pages]] view
- 
- From the page itself
- Open the page you want to delete, then go to the three-dot-menu on the top-right corner and select "Delete".
- 
#### **Can I remove bullets from a** [page]([[Pages]])?
- Yes! On any page, right click on the title, and the select 'view as document' and it will remove the bullets.
- Here's an example -
- 
#### **How can I make a** [block reference]([[Block References]])?
- **Method 1**
- Type `(())`
- Start typing some words, and you'll see suggestions come up.
- Once you find the block you want, hit `Enter` and you'll see your reference
- 
- **Method 2**
- While pressing `Alt`, drag the block you want to reference and you'll create another block reference!
- 
- **Method 3**
- `Right-click` on a bullet
- Choose `Copy Block ref`
- Paste the block ref
#### **How do I toggle** [[Quick Capture]] **on mobile?**
- Inside your Roam graph, open the **left sidebar** and click on the dropdown icon next to your graph name.
- Once this opens, scroll down to the option `Quick Capture`. Clicking here will change to quick capture mode. Here's a screenshot:
- 
- If you are in quick capture mode already and want to get back to full site, there's a button on the top right that says `Full site` Clicking here will get you back to full site mode.
- 
#### **How do I update Roam?**
- Within any page in your graph, click the three dots on the top right. Scroll down to 'Check for updates'. If there is an update, an orange box will show up and ask you to install it. You will know you are on the latest version if you get the green box like shown below:
- 
#### **How much text can I paste at once?**
- You can paste a max of 50KB of text at a time.
#### **My display name is set as "Anonymous". How do I change that?**
- Here's how to change your display name: open User Settings from the three-dot-menu, then change your name under "Display Names" and click away.
- 
#### **How do I delete a graph?**
- You delete a graph from the graph setting menu. To get there, in any page of the the graph you want to delete, go to the three dot menu on the top right of the page. Then click 'Graph Settings', then click 'Delete this Graph'. It will then ask you to type in the name of the graph in order to delete.
- Please note that **this is deleting all the data in your graph**. If you want to first [export]([[Export]]) the contents of your graph as a back up, you can also do that first by the three dot menu, and select 'Export All'.
- Here's how the delete process looks like:
- 
#### **How can I merge pages?**
- Sometimes you can run into a situation where you've got a bunch of pages with names like: `ebooks`, `EBooks`, `eBooks`, and `Ebooks`.
- Each of those pages may contain different data, but all of those pages refer to the same concept... ebooks.
- Well, there's actually a solution for tidying up all of these pages.
- Let's try to merge together ebooks and EBooks into just "ebooks"
- Go to the EBooks page
- Click on the title to rename it
- Rename the page to ebooks
- An orange warning will ask you if you want to merge the two pages, click on the tick icon
- Done! Now all the data is merged :)
- 
-
#### **What are namespaces?**
- Namespaces is a function that allows you to deal with situations such as homonyms - multiple words that are spelt the same, but mean different things. You can show up to three levels with a slash `/` in the title.
- If you want to change what is displayed, go to the three-dot-menu on top right in the graph, then click on User Settings. Under "Cycle namespace view" Choosing the top option will show the complete name, which includes all the `/` in the title
- 
#### **What can I upload on Roam?**
- You can upload and embed files in Roam, including audio, PDFs, and images, so you can access files right on the spot
- More here: [[Upload Files]]
#### **What formats does Roam support when uploading images?**
- Currently supported formats include jpg and png.
#### **Why are some of my** [[Daily Notes]] **missing?**
- Sometimes, if you're looking for a specific date, you may notice that the Daily Note for the page doesn't exist.
- Here, notes for September 20th-22nd are missing.
- 
- Something to know about Daily Notes is that although they are automatically created each day, they **only save when you use them.**
- A Daily Note will save in one of two cases:
- 1. You write on the page.
- 2. You linked to the Daily Note from a different page.
- You can see this from the All Notes view (from the left sidebar). In the picture below, pages for September 17th and 19th were created but have no content.
- 
- Both dates have one mention, though. You can see from the Linked References of the page that the Daily Note of September 17th was linked from the previous day.
- 
- If you can't find a specific date in your Roam graph, it is most likely because you didn't use Roam on that day or you did all your writing in separate pages.
- If you're sure that you took notes on a specific Daily Note and can't find it, please reach out to us at support@roamresearch.com
#### **How do I** [export]([[Export]]) **a page from Roam?**
- First navigate to the page you want to export and then press **Export** inside the **... Share menu **in the top right of your screen:
- 
- Next you can choose between Markdown and JSON formats for the page you want to export. We recommend exporting into JSON if you want to import the page into another Roam graph as it keeps more Roam-specific information than Markdown allows for.
- 
- Your file will download once you press the **Export button**:
- 
#### **How do I move a local graph from one device to another?**
- Your local graphs are only saved and stored on the browser and device you created them from. If you want to transfer your local graph to another computer, you will need to export it and then import it to your new computer.
- Here's how to do it:
- Export your graph:
- First go into your local graph on your original machine. Once in any page, on the top right, click the three dot menu and then select "Export All"
- Make sure to export in EDN, as it is the highest fidelity export format. This will download your entire local graph as a zip file. Make sure to unzip the file before you continue with the following steps.
- 
- Create your new graph on your new computer:
- On your new computer, log in to Roam, and then create a new local graph from your graph overview page.
- The name of this graph can be the same as your previously exported graph.
- Once created, go into your local graph, and then click on the three-dot menu again. Then select "Settings", "Graph", and "Restore Graph".
- You will then be prompted to upload a graph. Upload your previous unzipped EDN export from step 1.
- 
- Things to watch out for:
- Please note you will now have the same local graph on two computers. If you make changes to one, it will not update on the other. To avoid confusion, please consider deleting the graph from your original computer **after** you've made sure that your import was successful (you'll see the "Graph restoration was successful!" message)
- Make sure you are **not** importing the zip file, but the actual EDN file contained in the previous zip export
#### **How do** [import]([[Import]]) **notes into Roam?**
- We currently offer two ways to import notes into Roam: JSON and Markdown.
- If you are interested in importing Roam notes, we suggest you import with JSON, which stores more metadata about Roam-specific content and will allow you to more seamlessly move notes from one graph to another. On the other hand, if you plan to import text files from any other source, we recommend Markdown.
- Here's how you can import notes in Roam:
- 1. Press **Import Files**__ __inside the **... **share menu at the top-right of your screen:
- 
- 2. Now choose your Markdown or JSON files from your file system and you will see them show inside the pop up, where you can see a preview, change file names, and choose which files you want to finish importing:
- 
- 3. Once they are finished uploading, you will see them available on your current Daily Notes page under the block "Import":
- 
- And there you have it! A quick and easy way to import your files into Roam.
#### **Can I merge two graphs?**
- Unfortunately it's not possible to merge graphs currently. [Importing]([[Import]]) in EDN format will overwrite the previous content in your graph.
- If one of the graphs is small, you can manually copy paste each page into another graph. Then, import all your content in EDN format into the small graph to have all your content in one place.
- To import in EDN format, go to the ... menu > Graph settings > Restore graphs
- 
#### **If I delete a graph, can I reuse that name when creating a new one?**
- Previous graph names are available for re-use 90 days after the deletion. So here are three possible options:
- Wait till then;
- Use another suitable name;
- Write in another graph meanwhile, then after 90 days, create the old-name graph again, [export]([[Export]]) all your from temporary name graph in __EDN__ format and [import]([[Import]]) it to the old-name graph.
#### **How to use templates and do you have some** [[Templates]] **I can use?**
- Check out how to use templates here: [[Templates]]
- Check out some of our template collections here: [[roam/templates]]
#### **How do I collapse or expand all blocks in a page?**
- If you have nested blocks in a page, it's possible to collapse or expand all of your blocks in a page with a single click.
- To do this, right mouse click on the title of the page. This will bring up a contextual menu that includes the options to expand or collapse all blocks.
- 
#### **Why can't I hear the** [[Pomodoro timer]] **bell sound?**
- In order for the pomodoro bell sound to go off, the timer needs to be in a page that's currently **open** in your graph.
- Here's an example:
- I start a pomodoro timer, and the block is on my [[Daily Notes]] page for the day.
- While working I open other pages
- If at the end of the pomodoro session I haven't returned to my [[Daily Notes]] view, **I won't hear the sound**
- The solution is fairly simple:
- Once you decide the page where you want your pomodoro timer to live, open that same page in the [right sidebar]([[Right Sidebar]]), so that your timer will always stay in an open page.
#### **How to do I paste text in a single block?**
- In order to paste content using [soft line breaks]([[Adding soft line breaks in a block]]), use `ctrl-shift-v`.
## [Multiplayer]([[Multiplayer]])
#### **How do I** [share]([[Sharing]]) **my graph?**
- Roam allows to share your graph as **readable** or **editable** by everyone with the url, or with specific emails addresses.
- You can access these settings from the **three-dot-menu -> Share**
- Here's how to share your graph as **readable** by everyone with the url:
- From "Share" settings, toggle the option "can be read by anyone with the url", then click away
- 
- Here's how to share your graph as **editable** by everyone with the url:
- From "Share" settings, toggle the option "can be edited by anyone with the url", then click away
- 
- Here's how to share a graph with specific **readers**:
- In the “Share” settings, toggle on “is shared only with the emails below.” Then, set the role to **read access** on the right side, and add the email addresses of the users you want to give access to. Hit Enter, and their emails will then be added as readers of the graph.
- One thing to keep in mind, the person needs to create a Roam account (does not have to have a plan) BEFORE his email is added to the sharing tab!
- 
- Here's how to share a graph with specific **editors**:
- In the “Share” settings, toggle on “is shared only with the emails below.” Then, keep the role to **edit access** on the right side, and add the email addresses of the users you want to give access to. Hit Enter, and their emails will then be added as editors of the graph.
- One thing to keep in mind, the person needs to create a Roam account (does not have to have a plan) BEFORE his email is added to the sharing tab!
- 
#### **Is anyone doing multiplayer at the moment?**
- Check out [[Notable Graphs]] for public graphs by our community
- Check out [[Roam Book Club]] for our own experiment with multiplayer
## [Security]([[Security]])
#### **How secure are my uploaded files?**
- When you upload an image, audio, or PDF file, it is stored on Google Firebase servers. While the link is public, it has a random unique identifier. So any images you upload are private so long as you keep the links private. If someone obtains access to your file's link then they can access it. No one can delete any files you have uploaded. We are releasing a file manager soon so you can view all your uploaded files and delete any files you do not want stored on Google's servers.
#### **Are my uploaded files/images automatically indexed by Google?**
- Absolutely not!
#### **Where are local graphs stored?**
- Local graphs are stored in your browser's local storage. This means that if you clear your browser data then you will lose all the data in your local graph. To mitigate this risk, we recommend you set up daily automatic backups.
#### **Can I store my data on my computer?**
- Right now, the only way to store data is in your browser's local storage. We will soon be offering a local file storage solution where you can have your Roam data stored inside your computer's file system.
#### **Who can access my data?**
- By default, hosted graphs you create are accessible only to you. You can also set up read and write access for specific emails or even make your hosted graph publicly readable or editable (you cannot however share your local graph with anyone).
- No one on the Roam team can access your data without your written permission.
- Local graphs are accessible to anyone who accesses Roam (even their own account) on the browser your local graph is stored currently. We are in the midst of removing this behaviour and only the user who made the local graph will have access to it.
#### **Can anyone access my pages / graphs?**
- No, unless you want them to.
- If you set your graph to publicly readable or editable,
- then your entire graph will be able to be seen or edited by anyone, respectively.
- If you share a page with someone else,
- because of the current architecture of the app, when someone with the link to the page opens it, it loads the entire graph's data into the browser and if a technically adept, motivated person could hypothetically, access the rest of your graph data, IF they had the link to your graph.
- However, a regular user would not be able to access the rest of the contents of your graph through the UI, they would just have access to the single page you shared.
#### **If local graphs are private, does that mean hosted graphs are public?**
- No-- local graphs are always private and cannot be shared.
- Hosted graphs are private by default, but you can choose to share them with others.
#### **Are my notes private?**
- All your notes are private by default. They will only be accessible by others if you have a hosted graph AND you have explicitly shared with other users explicitly from the Settings panel.
#### **Are local graphs secure enough for corporate IT policies?**
- Local graphs are not ever stored anywhere except your computer, but they are not encrypted so whether they are secure __enough__ depends on your corporate IT policy.
#### **Is my data secure?**
- Hosted graph data is stored in Google Firebase and inherits their security, the data is encrypted at rest inside Google's servers.
- Local graph data is as secure as your computer is.
- You can also [encrypt your graph]([[Encrypted Graphs]])
#### **Do you offer end-to-end encryption?**
- Yep. See [[Encrypted Graphs]]
#### **Do you offer 2-factor authentication?**
- We do not offer 2-factor authentication currently but it is something we are considering.
## Other
#### **Where do I learn more about Roam and engage with the** [[Community]]**?**
- Feel free to browse around [[Features]], [[Workflows]]
- Check out [[Community]] to see how you can engage with the community
#### **What's your security standards and** [[Privacy Policy]]**?**
- Roam's data is hosted by Google, encrypted at rest, and encrypted over the wires.
- We follow industry best practices for encryption - same as Evernote and Notion - but we make an additional guarantee in our [[Privacy Policy]] to not ever read your notes without your permission.
- If you want more thorough encryption, you can use the [[Encrypted Block]]. For more details on how we treat our users data, you can see our [[Privacy Policy]].
#### **Where do I find the newest feature updates and bug fixes?**
- Please check our [[Change Log]]
#### **How do I send console logs for debugging?**
- If you ever run into a problem with Roam, your best bet is to first check [GitHub](https://github.com/Roam-Research/issues/issues) and see if other users have faced the same issue, and whether or not the issue has been solved yet.
- If no one has reported the issue you are seeing, please file a [bug report]([[Bug Report]]) by [clicking here and filling out this template](https://github.com/Roam-Research/issues/issues/new?assignees=&labels=bug&template=bug_report.md&title=).
- If you want to help us solve the issue, its best if you send us the console logs from your browser session in Roam. The way you can do so is by first right clicking on any part of the page you are on in Roam and then selecting **Inspect **(Inspect Element on Safari):
- 
- 
- This will open up your browser's development tools, and from here, you'll want to click on the **Console **tab:
- 
- On the **Console **tab in Chrome, right click anywhere on the screen, and select **Save As...**
- On the **Console **tab in Safari, shift-select all the logs, right-click, and then choose **Save Selected**
- 
- **Remember!** When you take a screenshot of your console logs, ^^look for the red errors (not orange warning)^^ in the console log, and ^^ignore sentry/amplitude warnings^^.
- Please include these files in your bug reports or in any support emails to help us help you!
#### **How do I migrate from the Intel **[[Desktop App]]** to the Apple Silicon (M1) desktop app?**
- Before installing new M1 desktop app, if you have local graphs follow the following steps as a precaution:
- Export EDN backup of all local graphs in current desktop app before starting.
- Process to export:
- Open the local graph you want to export. Click on 'export all' within the three dot menu. Select EDN format for export.
- 
- Repeat for every local graph.
- Backup of local-graph-uploads
- To find this folder- Go to finder then type `cmd shift g`
- and enter `~/Library/Application Support/Roam Research`
- Then copy folder named `local-graph-uploads` to somewhere else (documents)
- Uninstall Intel Roam Version
- Install M1 Roam Version
- Download new M1 version from www.roamresearch.com
- 
- Unzip, double click to install. Save to application folder
- If you have local graphs, check they are all there and that they work.
- If you have any issues write to support@roamresearch.com.
- Don't panic, your data is safe, this is why we had you create a backup
- Enjoy m1 m8.
---
# White Paper
- **Abstract**. Roam is an online workspace for organizing and evaluating knowledge. The system is built on a directed graph, which frees it from the constraints of the classic file tree. Users can remix and connect ideas in multiple overlapping hierarchies, with each unit of information becoming a node in a dynamic network. Any given node can occupy multiple positions simultaneously, convey information through defined relationships, and populate changes throughout the graph. With weightings assigned to the strength of relationships between nodes, Roam also becomes a tool for Bayesian inference and decision making. The ultimate goal is to extend the system to collaborative reasoning, allowing groups to build shared mental maps and make faster and better-informed decisions.
- **1. Introduction**
- We are experiencing an unprecedented explosion of knowledge. Every day, 2700 books are published in the United States alone, 6850 scientific papers are authored, more than 2 million blog posts go live, and 294 billion emails fly back and forth. The amount of total data produced with every rotation of the Earth would fill a stack of books stretching to the moon and back. 1 While this exponential growth presents enormous opportunities for individuals and society at large, neither the human brain nor current technologies are equipped to harness it to its full potential.
- **2. Current approaches to knowledge management**
- Humans are poorly adapted to the Information Age, which has arisen only in the last ~0.02% of our evolutionary history. While the brain does have a remarkable capacity for raw storage, probably in the range of several petabytes,2 it is infamously fallible in processing information. Memory retrieval is lossy and unreliable, while many of our hardwired cognitive biases and heuristics misfire in the modern world, distorting our perception, judgement and decision-making ability. The plasticity of the brain enables it to rewire itself with new connections, but even this is a ‘use it or lose it’ feature, causing neglected neural pathways to atrophy.
- Many technologies for organizing knowledge outside of the brain have arisen in response to these limitations. Physical books and journals proliferated after the invention of the Gutenberg Press, and have since been partially supplanted by word processors, websites, blogs, forums, wikis, and software applications.
- While we are presented with a plethora of choices for organizing knowledge, almost every technology follows the same basic ‘file cabinet’ format: A unit of knowledge is saved to a certain file path, which places it within a taxonomy of folders, chapters or categories. Tags may be applied when an item relates to many things, but each file is generally only stored within one nested hierarchy. To access the information, the user must remember where they stored the file, what they tagged it with, or use a search function to locate it.
- Related Twitter Thread
- https://twitter.com/Conaw/status/1099181050045952006
- **3. Problems with the file cabinet approach**
- In some regards, current technologies remain vastly inferior to the human brain. If each neuron only held a single ‘unit’ of memory in this manner, our brains would quickly fill to overflowing. Instead, information is conveyed in the connections between neurons and neural networks, so a common idea can be made available across the entire brain; the concept of a blue sky might be used in countless seemingly discrete memories of time spent outdoors. This efficiency helps to explain why a computer requires several million times more energy to perform the same tasks as a human brain (which runs on about as much power as a dim light bulb).3
- Unlike the brain, the file cabinet approach makes it difficult or impossible to remix or reuse the same piece of information. Each time a change is made to any given file, it has to be tracked down and updated in every location in which it exists. This leads to redundancy, with a cluttering of near-identical ideas, and significant work any time a system-wide change is required.
- Current solutions also lack interconnectivity. Many files are divorced from context; cast into a drawer, rather than methodically fitted into a broader framework of knowledge. Knowledge trees can create pseudo-relationships between files nested within a given hierarchy, but these are not explicit, and can only describe a vertical ‘parent and child’ taxonomy. Some tools, such as web pages and wikis, also allow for orthogonal linking between related files, but this takes place in an ad hoc fashion, and again, there is no ability to explicitly define relationships.
- **4. Knowledge graphs as nodal networks **
- Large-scale collaboration requires a more flexible data structure than the classic file tree. Roam is built on a knowledge graph that maps all possible relationships, with ‘smart’ links between defined concepts. Users can connect similar ideas in multiple overlapping hierarchies, remix them without overwriting the original context, and selectively share parts of the graph with others to collaborate on specific sub-questions.
- If current tools resemble filing cabinets, Roam is more akin to the nodal networks in telecommunications, or the neurons in the human brain. Rather than existing in a vacuum, each note or file becomes a node in an interconnected graph of ideas. A single node may simultaneously hold positions in several different sequences, hierarchies or file paths, and can ‘talk’ to other nodes, communicating information back and forth about the nature of each relationship. The network is dynamic, so updates and revisions are populated across the entire graph simultaneously. Individual nodes or branches within the network can be forked as required, allowing a new pathway to deviate without changing the original meaning.
- At the simplest level, Roam’s structure makes it inherently easier to store, recall, and cross-reference ideas. This is the primary proposition for students, writers, self-directed learners, and users of existing note-taking apps.
- For power users, the knowledge graph also unlocks applications in logic and reasoning, Bayesian inference and decision-making, modelling complex problems, and collaborative research.
- These features are explored in Chapters 5 - 8, along with potential use cases for the technology.
- **5. Dependency graphs and logical reasoning**
- Everything from peer-reviewed research papers to the opinion pages of a newspaper are based on formulating arguments that support a certain premise, along the lines of the following:
- If A is true, then B is true.
- If C and D are both true, then A is true.
- C and D are true.
- Therefore, B is true.
- Example:: [[Precise Links]]
- Example
- say I have a collection of statements like these
- Socrates is a Man
- certainty:: {{[[slider]]}}
- Socrates is Mortal
- certainty:: {{[[slider]]}}
- All Men are Mortal
- certainty:: {{[[slider]]}}
- Then I can reference those statements into a compound statement like this
- If Socrates is a Man and All Men are Mortal then Socrates is Mortal
- certainty:: {{[[slider]]}}
-
- I will then see that statement whenever I visit one of the blocks that is referenced within it
- like this
- 
-
- Often, C and D will be supported by links to external articles, where they are conclusions reached by larger arguments based on combining other premises. Unfortunately, the structure of the argument is only implied by the prose. Rarely are the relationships between arguments and pieces of evidence explicitly laid out, except perhaps in the notes of the author investigating the claims.
- Roam allows individual researchers or writers to organize all the claims they wish to make across a number of different projects. It also creates opportunities for large-scale interdisciplinary research projects. When teams of interested collaborators have an agreed-upon structure for formatting arguments and counterarguments, it is possible to create expandable user interfaces which “bubble up” insight from claims which require expertise, to ones that are more easily understood by laypersons.
- The ambiguity of natural language derails many discussions. Unless [[terms]] are clearly defined from the outset, any form of argument is futile, and will often end up entrenching the initial positions of the interlocutors.
- Example A
- Alice: "A tree falling in a deserted forest makes a sound."
- Bob: "A tree falling in a deserted forest does not make a sound."
- Example B
- Alice: "A tree falling in a deserted forest [generates acoustic vibrations]."
- Bob: "A tree falling in a deserted forest does not [generate auditory experiences]." 4
- While these positions are contradictory as expressed in Example A, simply defining the term ‘sound’ reveals the underlying beliefs are entirely compatible.
- The ability to use clearly defined sets within a dependency graph helps to resolve ambiguity, reducing the chances of participants talking at cross-purposes, or deliberate “motte-and-bailey” style strategic equivocation. 5
- Besides reasoning and argument, dependency graphs have applications in education, self-directed learning, and general decision-making. Even a very complicated project can be traced backwards to a number of smaller [[task]]s. The user can see the tradeoffs involved in each pathway, map out which route is the fastest, and which path might bring them closer to other interesting goals. As the student marks their progress, they can discover new projects and pathways which make use of the skills they have acquired.
- The problems of prose apply even in the domain of mathematical proofs, see Lamport’s [[How to write a 21st Century Proof]]”
- **6. Untangling complexity**
- **6.1 Nonlinear causality**
- Simple problems often follow a straightforward causal path. When a patient has a range of symptoms strongly associated with the flu, the doctor might conclude from the observable variables that there is one invisible variable - the influenza virus. Treat that latent variable, and the symptoms disappear.
- Scott Alexander observes that his peers in psychiatry similarly try to attribute a collection of linked symptoms to a latent variable; for example, depression. 6 However, the symptoms ‘caused’ by depression - e.g. sleep disturbance, fatigue, guilt - can also have a causal effect on one another, and on the disorder itself. This complex web of relationships, which may include feedback loops, does not follow a path of linear causality. For complicated problems of this nature, nodal networks are a much more accurate model:
- A model of major depression (MD) and generalised anxiety disorder (GAD) by Nuijten, Deserno, Cramer, and Borsboom.7 The disorders roughly map onto clusters of symptoms that are often found together and reinforce one another, but there is no clear ‘bright line’ between the conditions.
- Even at face value, a nodal network provides a visual aid to problem-solving - a bird’s eye view of the connections between various elements. This may help to identify patterns or clusters which may be counterintuitive or entirely invisible when each piece of the puzzle is examined at the object level.
- **6.2 Bayesian reasoning**
- Applying Bayesian reasoning to the knowledge graph makes it a powerful tool for estimating probabilities, testing hypotheses, and making decisions. Bayes’ Theorem is a law of probability that tells us how much we should change our minds about something when we learn a new fact or acquire new evidence. The theorem is stated in the following equation:
$$P(A|B) = {P(B|A) P(A) \over P(B)}$$
- where A is the proposition of interest, B is the observed evidence, P(A) and P(B) are prior probabilities, and P(A|B) is the posterior probability of A.
- Suppose a doctor has a patient who is worried about carrying a latent disease, because he belongs to an at-risk group. This is the ‘proposition of interest’ on the left side of the equation. Prior data suggests 4% of the general population are carriers, so $$P(A) = 0.04$$. B is the observed evidence, which is that 32% of the general population are members of the at-risk group. $$P(B) = 0.32$$. The doctor knows that among patients who do carry the disease, 80% belong to the at-risk group: $$B|A = 0.8$$.
- The doctor applies Bayes’ theorem:
- $$P(A|B) = (0.8 * 0.04)/0.32$$
- $$P(A|B) = 0.1$$
- Her patient only has a one in 10 chance of being a carrier - which might be less than expected, given that almost all carriers are members of the at-risk group.
- While this is a simple calculation, the strength of Bayesian reasoning is that it breaks down seemingly insurmountable problems into small pieces. Even where no data are available, successive layers of estimates can still provide useful refinements to the confidence levels of various outcomes. By incorporating this framework into the defined relationships between nodes, revisions to the weightings at any point in the network will automatically populate throughout the knowledge graph.
- Bayesian probability also provides a framework for decision-making. By estimating the costs and tradeoffs of various options, users can calculate which pathway provides the highest expected value. Again, the quality of the decisions can be refined by successive layers of evidence for and against, even when the weightings are simple estimates of personal preference. An evaluation matrix allows someone to integrate a great deal of information into the final decision, rather than defaulting to simple heuristics.
- {{[[TODO]]}} [Example [[Diagram]] of decision tree/matrix]
- **7. Optimising for **[[Serendipity]]
- Just as humans are incapable of generating random numbers, we struggle to consciously generate random ideas - to the point where actively trying to ‘think differently’ often seems to only further calcify existing patterns. Instead of attempting to brute-force creativity, the brain must be confronted with novel stimuli in order to reorganize its perception. Exposure to a certain amount of random ‘noise’ - drugs, dreams, meditation, Tarot readings, mistakes - can jolt thoughts out of well-tracked grooves and into entirely new areas of idea-space. Typically these insights occur at the juncture of two or more seemingly unrelated fields, concepts, or images.
- The interconnectivity of the Roam knowledge graph constantly creates opportunities for [[Serendipity]] to blossom. Each node in the network can be viewed in several graphical displays, allowing users to see related ideas, scan up and down the vertical hierarchy, examine nearby clusters of nodes, and observe patterns.
- The Roam search function can be calibrated to include as much or as little ‘noise’ as the user desires. While looking for a specific passage or note, search is narrow enough to find exactly what the user has in mind. However, it can also be broadened out for ‘fishing trips’ aimed at surfacing categories of ideas. Some search results will consist of notes that the user might otherwise have forgotten about, some will be noise, and others will spark ideas the user didn’t even know they were looking for.
- The synthesis and cross-pollination of ideas from diverse fields presents low-hanging fruit for both individuals and society. The investment of time and effort required to become a specialist quickly runs into a point of diminishing returns. By contrast, accumulating a ‘talent stack’ of dilettante-level knowledge or skills can unlock insights and opportunities that have not been capitalised on by experts with a narrower focus.
- Highly specialised knowledge remains essential for opening new frontiers. However, an interdisciplinary approach is often required to solve the increasingly complex problems faced by scientists, technologists, and policymakers.
- **8. Collaborative problem-solving**
- While the individual use case for Roam stands on its own merits, the ultimate goal is to create a platform for collaborative research and learning. Current protocols are bound by the assumption of necessary consensus. The flexibility of a curated knowledge graph allows for a more pluralistic approach, with the ability to weight conflicting opinions and separate signal from noise without resorting to either autocracy or democracy.
- 8.1 **Finding signal in the noise**
- As the frequency of information increases, the world becomes noisier and noisier. Deliberate exposure to noise is a useful strategy in specific contexts, as described in Chapter 7, but otherwise obscures meaning. 8 Given we have a propensity for imposing stories and explanations onto randomness - the narrative fallacy - it is becoming increasingly difficult to separate out genuine signal from noise.
- Assume a trend has a signal-to-noise ratio of 1:1 on an annual basis (50% of the data are meaningful, 50% are random). Observing the same data on a daily basis, the composition changes to 95% noise, 5% signal. Observing the data hourly (as news hounds and market junkies do), and it becomes 99.5% random - which is to say, two hundred times more noise than signal.9
- Institutions entrusted with interpreting the data include the media, academia, and legislature. Some agents within these institutions deliberately obscure the truth, as demonstrated by ‘fake news’, p-hacking, and politicking. While actively malicious behaviour is the exception, even the best-intentioned reporters, researchers and analysts are not immune to being fooled by randomness.
- For most people, the problem of sorting signal from noise therefore involves finding trustworthy and accurate secondary sources of information. This difficult [[task]] is often frustrated by gated scientific journals, as well as search engine algorithms increasingly gamed by SEO-savvy content marketers.
- 8.2 **Redundancy**
- Navigating a vast sea of information creates massive redundancy. Most people labour away at problems that have already been solved a million times over. Those who tackle unsolved problems often do so in silos, unaware of each other’s existence. All the pieces of any given puzzle may be present, but no one individual or group holds them all. The wheel is reinvented over and over again, in endless forums and comments sections and web pages and books that burst into existence and fade just as quickly to obscurity.
- The goal of Roam is to enable systematic curation and collaboration on a large scale. Users will be able to selectively share parts of their graphs publicly, or with circles of peers and colleagues. In turn, they will be able to follow the work of persons they trust, whether they be domain experts or enthusiastic amateurs. Those looking to acquire specific knowledge can turn immediately to trusted sources, and set alerts to receive updates about new pieces of information pertaining to an area of interest.
- 8.3 **Dispensing with necessary consensus**
- Almost every medium today presents knowledge as though it were the last word; assuming both a necessary consensus and an uncomposable page. Wikipedia is one of the great wonders of the Internet age, but it makes both of these mistakes. There can only be one article on any subject for any given language, and the only connection between pages is through links, with no article "built" off another.
- By way of contrast, consider Github: Libraries are built on other libraries, and functions are built from other functions. Developers build tools that others can build upon to build ever more impressive tools. Most of the modern web is built on open-source technologies, which would not have been possible if programmers followed the old protocols for intellectual collaboration.
- Many problems can be solved by writing code, but natural language is still the way we determine which problems are worth solving. Natural language is how we explain the world to one another, and communicate our models of reality. It is the language of education. It is the language of decision-making. That language needs a toolchain for collaboration that is just as good as the one for managing code.
- 8.4 **Against autocracy; against democracy**
- The problem of necessary consensus is resolved by individuals or groups assembling their own graph of inferences, based on premises or data curated from their trusted networks. However, collaboration still requires a mechanism for evaluating which ideas are best. In the same way that individuals assign weightings to their personal predictions and decisions, groups must be able to ‘vote’ on the merits of any given idea, premise, or piece of evidence. There are various options for how these collective weightings might be calibrated, some of which are briefly described below.
- a) **Wisdom of crowds**
- A diverse collection of people can make certain decisions and predictions much better than any given individual: The great statistician Francis Galton was stunned to find that 800 people guessing the weight of an ox at a country fair returned an average that was just one pound shy of the correct figure of 1198 pounds.
- In other situations, the opinion of the crowd bears little relationship to objective reality. By definition, the tyranny of the majority will quash any position that is unpopular, regardless of whether it is true. Often, domain-specific knowledge may be required; for example, someone who has not studied free will would only be adding noise by ‘voting’ a preference for compatibilism, hard determinism, or libertarianism.
- Simple popularity contests do not always move us closer to the truth, but they are useful in that they tell us what we believe. This data could potentially be broken down by demographic to demonstrate how different groups perceive reality, and possibly alert users to biases amongst their own in-groups.
- b) **Believability scores**
- Hedge fund manager Ray Dalio pioneered a decision-making system at Bridgewater Associates that is much closer to epistocracy than democracy: The opinions of more “believable” people, who have repeatedly proven their grasp of a given topic or trait, hold more weight than those with lower believability scores. There is nothing to stop Dalio being overruled by his most junior employees, as long are they are consistently more right than he is. Implementing a similar system in Roam would necessitate the ability to track performance, perhaps by how much original content a user has contributed to the graph with broad support, or how well-calibrated their predictions are.
- c) **Prediction markets**
- When people succumb to peer pressure and other biases, do not have enough specialist knowledge, or deliberately make false predictions, the ‘wisdom of the crowd’ can end up being very wrong.
- The insight behind prediction markets is that participants can be incentivised to profit from any such mistakes. Wherever someone believes the consensus is wrong, they can stake money on it, and move the probability back to a better informed position. Insider information is not only permitted, but welcomed. In this way, vast amounts of information can be synthesised into one constantly updated data point, which is often remarkably accurate.
- The uptake and growth of prediction markets has been dampened by regulatory issues, but possible workarounds include a non-fiat token, or reputation-linked points system.
- **9. Conclusion**
- The project of human knowledge, as it stands today, is a vast ocean of ephemeral and fragmented information and ideas, much of it inaccurate, some of it malicious, with the best sources either restricted by gatekeepers, or near-impossible to locate. The volume of information is growing exponentially, which promises enormous opportunities if the underlying coordination problems can be resolved.
- Clearly a fundamentally different approach is required. The Roam vision for human knowledge is a collective, open-source intelligence, constantly rearranging, iterating and evolving in the pursuit of truth. Each of us would become a node within this collective intelligence, forging links and creating networks, sharing the very best each has to offer, improving ourselves even as we improve others, and advancing the interests of humanity as a whole.
- About Roam
- Roam was founded by Conor White-Sullivan and Joshua Brown. Conor has been working on tools for collective intelligence for more than nine years, founding the online town common Localocracy (acquired by AOL in 2011) then leading R&D for Huffington Post following the acquisition. Conor and Josh met at 42.us.org, a tuition-free coding university, where Josh placed in the top five of the first 1000 cadets to enter the US program during the month-long application exam. This white paper was co-authored by business journalist Richard Meadows, whose trial of early prototypes led him to become the first investor in Roam.
- The Roam stack:
- React
- Clojure and Clojurescript
- Datalog
- Contact Conor at cwhitesullivan@gmail.com with any enquiries.
- Notes and references
- [1] At least 2.5 quintillion bytes of information are produced every day, which is about the same amount as was produced during the entire year of 2002.
- [2] Scientific American: New Estimate Boosts the Human Brain's Memory Capacity 10-Fold.
- [3] Microelectronics pioneer Carver Mead, who coined the term Moore’s Law, correctly predicted in 1990 that present-day computers would use ten million times more energy for a single instruction than the brain uses for a synaptic activation.
- [4] This example is adapted from the Less Wrong sequence 37 Ways Words Can be Wrong.
- [5] Motte-and-bailey refers to arguing an easy-to-defend and often common-sense statement (the motte), in order to ward off critics from a hard-to-defend and more controversial statement (the bailey). The term was popularised by Scott Alexander, and explained in All in All, Another Brick in the Motte.
- [6] Slate Star Codex: Mental disorders as networks.
- [7] Michèle B. Nuijten, Marie K. Deserno, Angélique O. J. Cramer, Denny Borsboom: An introduction and overview of a network approach to psychopathology.
- [8] As Carl Sagan observed, while more data is broadcast in TV programs every day than the combined written works of all of history, "not all bits have equal value".
- [9] This example comes from Nassim Taleb’s Antifragile.
- Further Reading
- Daniel Kahneman, Thinking, Fast and Slow
- Robin Hanson, Could Gambling Save Science?
- [[Ray Dalio]], [[Principles]]
- H Van Dyke Paranuk, Don’t Link Me In: Set Based Hypermedia for Taxonomic Reasoning
- [[Michael Nielsen]], Reinventing Discovery: The New Era of Networked Science
- Richards J Heuer The Psychology of Intelligence Analysis
- Leslie Lamport: [[How to write a 21st Century Proof]]
- Douglas Engelbart, [[Augmenting the Human Intellect: A Conceptual Framework]]
- About this Paper
- We wrote this White Paper in Winter of 2017/2018, and while it still reflects much of our vision for the tool, some of the features -- particularly related to [[Bayesian Reasoning]], [[Argument Analysis]], and [[Prediction Markets]] we found to be in-fact much lower priority for the researchers and decision makers whose thinking we aim to assist -- and risked making the tool too complex for the more significant use cases. If you are interested in using Roam for more formal Quantitative Reasoning or building out formal models of belief networks, or if you are excited about ideas in this paper which you do not see a way to do currently within Roam, please contact us.
---
# Privacy Policy
#### **TLDR: **Roam does not own your data, nor do we sell it to others or use it for advertising. We will never read or access your private notes without written or verbal consent - unless compelled by law enforcement.
- As a quick reminder, here is our policy on User Content as per the [[Terms and Conditions]]:
- **I. Content.**
- Our Service allows you to post, link, store, share and otherwise make available certain information, text, graphics, videos, or other material ("Content") on the Service. You are responsible for the Content that you post on or through the Service, including its legality, reliability, and appropriateness.
- By posting Content on or through the Service, you represent and warrant that: (a) the Content is yours and/or you have the right to use it and the right to grant us the rights and license as provided in these Terms, and (b) that the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights or any other rights of any person or entity. We reserve the right to terminate the account of anyone found to be infringing on a copyright.
- You retain any and all of your rights to any Content you submit, post or display on or through the Service and you are responsible for protecting those rights. We take no responsibility and assume no liability for Content you or any third-party posts on or through the Service. When you post Content into certain Databases, you will be able to designate whether such Content is made publicly or privately available.
- As a condition of your use of the Service, you grant Roam a nonexclusive, perpetual, irrevocable, royalty-free, worldwide, transferable, sub-licenseable license to access, use, host, cache, store, reproduce, transmit, display, publish, distribute, modify and adapt and create derivative works (either alone or as part of a collective work) from your public Content. This license does not apply to content in private databases. **Furthermore, while Roam has the technical ability to access private content, we agree to never access private content without written or verbal consent from you - excluding cases where we are compelled by legal authorities.** As part of the foregoing license grant you agree that (a) the other users of the Service shall have the right to comment on and/or tag your public Content that you make available to them and/or to use, publish, display, modify or include a copy of your public Content that you make available to them, and (b) we have the right to make any of your public Content available to third parties, so that those third parties can distribute, make derivative works of, comment on and/or analyze your Content on other media and services (either alone or as part of a collective work); except that the foregoing (a) and (b) shall not apply to any of your Content that you post privately for non-public display on the Service.
- By posting Content that is set for public access to the Service, you grant us the right to display such public Content on and through the Service. Roam has the right but not the obligation to monitor all Content provided by users. In addition, any Content found on or through this Service that is not originally submitted, posted, or displayed by Users of the Service is the property of Roam or used with permission. You may not distribute, modify, transmit, reuse, download, repost, copy, or use said Content, whether in whole or in part, for commercial purposes or for personal gain, without express advance written permission from us.
- You agree that Roam has the right, but not the obligation, to remove any Content from the Service if Roam determines in its sole discretion that such Content has violated these Terms, the Roam Privacy Policy, applicable law, or the privacy rights, publicity rights, intellectual property, contract rights or any other rights of any person or entity, or if Roam determines in its sole discretion that such Content poses a risk of harm to Roam, other users of the Service or third parties.
- Any content stored on the Service will be stored indefinitely, unless it is explicitly deleted. This process is described in Article 2, Section XIV, Termination or Cancellation of Agreement.
-
#### 1. Introduction
- 1.1. This Privacy Policy applies to both registered **“Members”** and unregistered **“Visitors”** for use of the Roam Research website, operated by Roam Research, Inc. ("Roam", "us", "we", or "our") and of the Roam Services. Both Members and Visitors are hereinafter referred to as **“User(s)”**. By clicking “Join Now,” “Join Roam,” “Sign Up” or similar, registering, accessing or using our Services, User is entering into a legally binding agreement (either individually or on behalf of a Company) that includes the Roam Terms and Conditions and this Privacy Policy.
- 1.2. This Privacy Policy applies to all Users of www.roamresearch.com and the Roam mobile site, and all other Roam websites, apps, developer platforms, management and transaction services, premium services, other products and services offered by Roam, or any content or information provided as part of these services, including our blog (collectively, the **“Services”**).
- 1.3. This Privacy Policy is effective upon use of any Roam Services by all Users.
- 1.4. This Privacy Policy describes how we handle Users’ personal information for our Services. By accepting this Privacy Policy, User expressly consents to Roam’s collection, storage, use and disclosure of User’s personal information as described in this Privacy Policy.
- 1.5. Roam may modify this Privacy Policy from time to time. If we make material changes to this Privacy Policy, we will provide notice by email, to the email address on file in User’s Roam account at the time of notice. Immediately after such notice has been provided to User, continued use of the Services constitutes User’s understanding, consent and acceptance of this Privacy Policy.
#### 2. Collection
- 2.1. Data Controllers. Roam uses servers that may be located anywhere in the world, including but not limited to, the United States or other countries. If User has any concern about providing information to Roam as detailed in this Privacy Policy, User should not become a Member, visit our sites, applications, or otherwise use our Services.
- 2.2. Account Registration. When User creates an account on Roam, User may be required to provide some personal information, including, but not limited to, User’s name, email address, home, work, or mobile telephone number, facility address, mailing address, bank account information, credit card number, and a password. User will also be required to agree to the Roam Terms and Conditions, which includes our User Agreement, Terms of Service, and this Privacy Policy. Once User provides this information to Roam, User is no longer anonymous to us. When User provides us with its personal and financial information, User consents to the transfer and storage of that information on our servers, which may be located anywhere in the world, including but not limited to, the United States or other countries.
- 2.3. Client Services. When User contacts our Client Services support team, either by email or phone, Roam may access User’s account, settings, preferences, emails, and other contributions to our Services and collect the information needed to categorize User’s question, respond to it, and, if applicable, investigate any breach of our Terms and Conditions or this Privacy Policy. Roam will also use this information to track potential problems and trends and customize support responses to better serve our Users.
- 2.4. Using the Roam Sites, Services and Applications. By using our Services, User understands that Roam may collect the following information, in addition to the information specified in **Section 2.2** hereof:
- 2.4.1. Correspondence through our sites, or correspondence sent to any Roam employee or email address, or via telephone correspondence;
- 2.4.2. Any other information provided during User’s interaction with the site, Services, and content, including, but not limited to, computer and network information, statistics on page views, traffic to and from sites, IP addresses and standard web log information; and
- 2.4.3. Information from other companies, generation reporting companies, such as demographic and traffic data.
- 2.5. Collection of New Data. Roam’s Services are constantly evolving, as we work to continue to provide the best suite of Services to our Users. The introduction of new Services may result in the collection of new information. Additionally, new partnerships or corporate mergers or acquisitions may result in new Services that require the collection of new information. If we start collecting substantially new types of personal or financial information in a way that materially impacts how we handle our Users’ data, we will modify this Privacy Policy in accordance with **Section 1.5** hereof.
- 2.6. Cookies, Pixel Tags/Web Beacons, and Analytics Information. We, as well as third parties that provide content, advertising, or other functionality on the Services, may use cookies, pixel tags, local storage, and other technologies (“Technologies”) to automatically collect information through the Services. Technologies are essentially small data files placed on your devices that allow us and our partners to record certain pieces of information whenever you visit or interact with our Services.
- 2.6.1. Cookies. Cookies are small text files placed in device browsers to store their preferences. Most browsers allow you to block and delete cookies. However, if you do that, the Services may not work properly.
- 2.6.2. Pixel Tags/Web Beacons: A pixel tag (also known as a web beacon) is a piece of code embedded in the Services that collects information about engagement on the Services. The use of a pixel tag allows us to record, for example, that a user has visited a particular web page or clicked on a particular advertisement. We may also include web beacons in e-mails to understand whether messages have been opened, acted on, or forwarded.
- 2.6.3. Analytics: We may also use third-party service providers to collect and process analytics and other information on our Services. These third-party service providers may use cookies, pixel tags, web beacons or other storage technology to collect and store analytics and other information. They have their own privacy policies addressing how they use the analytics and other information and we do not have access to, nor control over, third parties’ use of cookies or other tracking technologies.
- 2.7. Information Collected from Users’ Devices and Networks. When User visits or leaves our Services (whether as a Member of Visitor) by clicking a hyperlink, or when User views a third party website that includes our Cookies or similar technology, Roam automatically receives the URL of the site from which User comes or the one to which User is directed. Additionally, Roam receives the internet protocol (**“IP”**) address of User’s company or the proxy server that User uses to access the web, User’s computer operating system details, User’s type of web browser, User’s mobile device (including User’s mobile device identifier provided by User’s mobile device operating system), User’s mobile operating system (if User is accessing Roam via a mobile device), and the name of User’s ISP or mobile carrier. Roam may also receive location data passed to us from a third party service provider or GPS-enabled devices that User has set up, which Roam may use to show User’s local information and for fraud prevention and security purposes. User understands that most mobile devices have settings to disable the sharing of real-time location data, and that User should enable these settings if it does not wish to share this information with Roam.
- 2.8. Social Media Widgets. A **“Widget”** is a stand-alone application used on our sites to display information or to invite Users to interact with the sites and Services in a variety of ways. Such Widgets include the Facebook “Like” button and the Twitter “Tweet”, or any other “Share” button that allows User to share content on a number of social media websites. These Widgets may collect User’s IP address, which page User is visiting on our sites, and may set a Cookie to enable the feature to function properly. User understands that social media features and Widgets are hosted by a third party or directly on our sites. Irrespective of host, User understands that these features are governed by the third party privacy policies of the company providing the feature.
#### 3. Use of User's Data
- 3.1. Roam collects personal and financial information in order to provide User with a safe, smooth, efficient and customized experience. User understands, accepts, and consents that Roam is authorized to use User’s personal and financial information in the following ways:
- 3.2. General. Roam is authorized to use User’s personal and financial information to:
- 3.2.1. Provide the Services and client services support requested by User;
- 3.2.2. Resolve disputes, collect Fees, and troubleshoot problems;
- 3.2.3. Enforce the Roam Terms and Conditions and this Privacy Policy;
- 3.2.4. Customize, measure and improve its Services and content;
- 3.2.5. Inform User about Service updates, changes, and promotions; and
- 3.2.6. Compare information for accuracy, and to verify it with third parties.
- 3.3. Communication. Roam may communicate with its Users via telephone, email, notices posted on the Roam sites or apps, direct messages, and other means available through the Services. Communications may include welcome and setup communications, Service communications, promotional communications, and other account support communications. These communications will be sent to User based on User’s account information and communication preferences. User understands and acknowledges, however, that User cannot opt out of receiving Service communications from Roam.
- 3.3.1. User consents to receive autodialed or prerecorded calls and text messages at the telephone number provided on the User’s account, or at any other telephone number provided by the User to Roam, regardless of whether the telephone number is a home, work, or mobile telephone number. Where applicable and permitted by law, User may decline to receive certain communications by opting out via express written notice to Roam.
- 3.4. Data Analysis. Roam may share certain User data with companies with whom Roam co-markets, partners, and collaborates for their analysis and internal use to provide Users with additional Services. Roam may use and disclose de-identified data shared with Roam either by the User or a third party providing data on behalf of the User, for any purpose. Any and all of this information may be aggregated with information from other Users or may be provided individually in a redacted format as an example of User experience and our Services. Roam is also expressly authorized by User to share with third parties, aggregate and/or de-identified data, including User’s use of the Services provided to User by Roam.
- However, Roam will collect and share additional, identified and/or personal location information about User as specified under Section II hereof and as detailed in the Roam [[Terms and Conditions]].
- 3.5. Data Sharing with Third Parties. In addition to the sharing specified in **Section 3.4** hereof, Roam may disclose User’s personal and financial information to third party services providers who assist Roam in providing our Services. User understands and accepts that Roam may contract with other companies and individuals to perform certain functions on our behalf, or to provide User with certain services. This includes, but is not limited to, processing credit card payments, issuing ACH deposits, sending postal mail and email, analyzing data, and providing marketing assistance. These third parties will only have access to personal information to the extent necessary to perform their intended function or service and are not authorized to use it for other purposes.
- 3.6. Marketing. Roam will not sell or rent User’s personal information to third parties for their marketing purposes without User’s explicit consent. However, Roam reserves the right to use User’s information to improve and personalize its Services and content. If User does not wish to receive marketing communications from us, User may indicate this preference at the bottom of Roam’s marketing emails.
- 3.7. Spam. Roam does not tolerate “Spam”. User is not licensed to add other Roam Users to User’s mailing list (email or postal mail) without that User’s express written consent. To report Roam-related Spam or Spoof emails to Roam, User should forward the suspected Spam or Spoof email to Roam with a notice that the email may be Spam or Spoof. User may not use Roam’s communication channels to send Spam or otherwise send content that would violate the Roam User Agreement. Roam automatically scans and may manually filter messages to check for Spam, viruses, phishing attacks and other malicious activity or illegal or prohibited content, and Roam does not permanently store messages sent through these filters.
- 3.8. AI Assistants. Roam offers features that allow User to connect third-party artificial-intelligence assistants (such as ChatGPT and Claude) to User's Roam graphs (Databases), either through Roam's hosted connector or through the Roam desktop application on User's own device. This feature is optional, and an assistant can access User's content through this feature only if User connects it and grants it access.
- 3.8.1. Access authorized by User. User controls which of User's graphs may be accessed through connected assistants and, for each, the level of access. The granted access level determines whether an assistant may view that graph's content, add new content to it, modify or remove existing content, or a combination of these. User may change which graphs are shared, or stop sharing any or all graphs, at any time.
- 3.8.2. Sharing with the assistant's provider. To carry out User's requests, graph content that User has authorized the assistant to access (such as User's pages, blocks, comments, and related information) may be transmitted to the third-party provider that operates the assistant (for example, OpenAI or Anthropic), either by Roam's hosted connector or by the Roam desktop application on User's device, depending on how User connects the assistant. That provider processes such content under its own terms and privacy policy, which Roam does not control. User is encouraged to review the applicable provider's terms before connecting an assistant. Revoking access in Roam prevents future access through this feature, but does not control content already processed by the assistant's provider.
- 3.8.3. Limitations on use. Roam does not use private graph content accessed through a connected assistant for advertising or marketing, does not use it to train artificial-intelligence or machine-learning models, and does not include it among the de-identified data uses described in Section 3.4 hereof.
- 3.8.4. Technical metadata. Roam may collect limited technical metadata about requests made through this feature (such as account and request identifiers, graph identifiers, network information, tool or operation names, timestamps, and error and performance information) solely to operate, secure, troubleshoot, audit, and support the feature; it is not collected to capture or store the contents of User's graphs.
#### 4. Security
- 4.1. All information processed by us may be transferred, processed, and stored anywhere in the world, including but not limited to, the United States or other countries, which may have data protection laws that are different from the laws where you live. We treat data as an asset that must be protected and use encryption, passwords, physical security and other security protocols to protect Users’ personal and financial information against unauthorized access and disclosure. However, third parties may unlawfully intercept or access transmission or private communications made between User and Roam or between Users of Roam, and other Users may abuse or misuse Users’ personal information that they collect from the sites. Therefore, to the extent permitted by law, User agrees to hold harmless Roam in the event that a third party unlawfully intercepts or accesses any information provided by User to Roam.
- 4.2. Account Access. User’s password is the key to User’s account. User should use unique numbers, letters and special characters, and should not disclose its Roam account password to anyone. If User does share its password or its personal information with others, User acknowledges and understands that User is responsible for all action taken in the name of User’s account. If User loses control of its password, User may lose substantial control over its personal and financial information and may be subject to legally binding actions taken on User’s behalf. If User’s password has been compromised for any reason, User should immediately contact and notify Roam and User should change its password.
#### 5. Data Modification and Retention
- 5.1. User can see, review and change most of its personal and financial information by signing into User’s Roam account. Generally, Roam will not manually modify User’s personal or financial information because it is difficult to verify your identity remotely. Accordingly, we strongly encourage, and sometimes require, Users to update their personal and financial information directly in their Roam account if it changes or is inaccurate.
- 5.2. Upon User’s written request, Roam will close User’s account and remove User’s personal and financial information from view as soon as reasonably practicable, based on User’s account activity and in accordance with applicable law. However, User acknowledges, understands and consents that Roam may retain User’s personal and financial information from closed accounts to comply with the law, prevent fraud, collect any fees owed, resolve disputes, troubleshoot problems, assist with any investigations, enforce the Roam Terms and Conditions, and take other actions otherwise permitted by law.
- 5.3. We store the personal information we receive as described in this Privacy Policy for as long as you use our Services or as necessary to fulfill the purpose(s) for which it was collected, provide our Services, resolve disputes, establish legal defenses, conduct audits, pursue legitimate business purposes, enforce our agreements, and comply with applicable laws.
#### 6. Disclosure
- 6.1. Roam may disclose personal or financial information to respond to legal requirements, to enforce our policies, or to protect anyone’s rights or property. Accordingly, User’s information may be shared with:
- 6.1.1. Members of the Roam corporate family to help detect and prevent potentially illegal acts;
- 6.1.2. Service providers under contract who provide assistance for our business operations (such as fraud investigations and bill collection);
- 6.1.3. Law enforcement or other governmental officials, in response to a verified request relating to a criminal investigation or alleged illegal activity. In such events, Roam may disclose information relevant to the investigation, including name, city, state, zip code, telephone number, email address, user ID history, IP address, fraud complaints, and bid and offer (order) history;
- 6.1.4. Other business entities, should Roam plan to merge with or be acquired by that business entity. Should a merger or acquisition occur, Roam will require that the new entity follow this Privacy Policy with respect to User’s personal and financial information. If User’s personal or financial information will be used in a manner contrary to this Privacy Policy, User will receive notice.
- 6.2 We may also share your personal information with other third parties, including other users, in the following circumstances:
- 6.2.1. Databases Accessible by Other Users: When you submit personal information in a database that can be accessed by others, such personal information may be displayed to other users in the same or connected databases. For example, your personal information may be included in your notes or reminders in a database which can be viewed by other users collaborating with you in that database. Further, your email address or photo may be displayed with your database profile to other users collaborating with you in that database. This may apply to both Public Databases and Private Databases from within which you have shared a specific page.
- 6.2.2. Share Content with Friends or Colleagues: Our Services may allow you to provide information about your friends, and may allow you to forward or share certain content with a friend or colleague, such as an invitation email.
- 6.3.Without limiting the authorizations under **Section 4.1** hereof, and in an effort to respect User’s privacy and our ability to keep the community free from bad actors, Roam will not otherwise disclose User’s personal or financial information to law enforcement, other government officials, or other third parties without a subpoena, court order, or substantially similar legal procedure, except when we believe in good faith that the disclosure of information is necessary to prevent imminent physical harm or financial loss or to report suspected illegal activity.
#### 7. Children’s Information
- The Services are not directed to children under 13 (or other age as required by local law), and we do not knowingly collect personal information from children. If you learn that your child has provided us with personal information without your consent, you may contact us as set forth below. If we learn that we have collected a child’s personal information without parental consent in violation of applicable law, we will promptly take steps to delete such information and terminate the child’s account.
#### 8. Copyright
- 8.1.Some data available on Roam is protected by copyright laws and may contain material proprietary to Roam Research, Inc. This data or any of its components may not be reproduced, republished, distributed, transmitted, displayed, broadcasted, or otherwise disseminated or exploited in any manner without the express prior written permission of Roam Research, Inc. The receipt or possession of this data or any of its components does not convey any rights to reproduce, disclose, or distribute its contents, or to manufacture, use, or sell anything that it may describe, in whole or in part. If consent to use specific data is granted, a link to the current version of that data on the Roam website must be included for reference and sourcing. If you have questions about the use or reproduction of data available on Roam’s sites, please contact us.
---
# Terms and Conditions
#### **TLDR: **Roam does not own your data, nor do we sell it to others or use it for advertising. We will never read or access your private notes without written or verbal consent - unless compelled by law enforcement.
#### Article 1. Introduction
- The following describes the terms upon which Roam Research, Inc. offers you access to our services. By clicking “Join Now,” “Join Roam,” “Sign Up” or similar, registering, accessing or using our services (including, but not limited to, www.roamresearch.com and the Roam mobile site, and all other Roam websites, apps, developer platforms, management and transaction services, premium services, other products and services offered by Roam, or any content or information provided as part of these services, collectively, the “**Services**”), you are entering into a legally binding agreement (either individually or on behalf of an entity).
- These Terms and Conditions include the Roam User Agreement, the Roam Terms of Service, the Roam [[Privacy Policy]], and other terms that will be displayed to you at the time you first use certain features or services, all of which may be amended by Roam from time to time. Roam shall provide notice by email, to the email address on file in User’s Roam account at the time of notice, if substantive changes are made to the Roam User Agreement, the Roam Terms of Service, or the Privacy Policy. After such notice has been provided, continued use of the Services constitutes understanding and acceptance of the revised and amended Terms and Conditions.
- These Terms and Conditions apply to both registered “**Members**” and unregistered “**Visitors**” for use of the Roam website and of the Roam Services. Both Members and Visitors are hereinafter referred to as “**User(s)**”.
#### Article 2. Roam User Agreement
- This User Agreement (the “**Agreement**”) is entered into by and between a user of Roam (hereinafter, “**User**”) and Roam Research, Inc, (hereinafter, “**Roam**”), a Delaware corporation (User and Roam are hereinafter individually referred to as a “**Party**” or collectively referred to as the “**Parties**”). This User Agreement applies to any and all Users of Roam, and specifies the general terms by which Roam offers its services to its users.
- **I. Using Roam.**
- While using Roam, User agrees that it will not:
- Violate any laws, third party rights, or Roam’s [[Privacy Policy]];
- Circumvent or manipulate Roam’s Fee structure, the billing process, or Fees owed to Roam;
- Post or otherwise disseminate false, inaccurate, misleading, defamatory, or libelous content (including personal information);
- Transfer User’s Roam account (including feedback) and User ID and/or password to another party without the express, written consent of Roam;
- Distribute viruses or any other technologies that may harm Roam, the Roam website, or the interests, information or property of Roam Users;
- Copy, modify, or distribute content from the Roam website, or misuse or otherwise infringe upon Roam’s copyrights and/or trademarks; or
- Harvest or otherwise collect information about Users, including email addresses and financial information, without each User’s express, written consent.
- By entering into this Agreement, each Party represents and warrants to the other Party that:
- It has the legal right to enter into this Agreement and to perform its obligations hereunder;
- It has taken all necessary action to authorize the execution and delivery of this Agreement and the performance of its obligations hereunder, including, but not limited to, delivering an executed copy of each and any form required by Roam;
- This Agreement constitutes a legal, valid and binding agreement of such Parties;
- It has all necessary power and authority to perform its obligations in this Agreement; and
- It has obtained all necessary consents, authorizations and approvals from any third party (including any federal, state or local governmental or regulatory authority) which may be required for such Party to execute and deliver this Agreement and consummate the transactions contemplated hereby, including, but not limited to, the release of any contractual obligations owed to any third party.
- **II. Service Availability; Cancellation by Roam.**
- Roam may change, suspend or terminate any Service, or change or modify its Fees at any time and at its sole discretion unless otherwise agreed to by the Parties. To the extent permitted by law, these changes are effective pursuant to the terms of Article 1 and Article 2, Section III hereof.
- User understands and agrees that Roam has no obligation to store, maintain or otherwise provide User with a copy of any content or information that you or others provide, except to the extent required by applicable law and as noted in our Privacy Policy.
- Without limiting other remedies, Roam may limit, suspend, or terminate Roam’s Services and User accounts, prohibit access to Roam’s website, delay or remove hosted content, and take technical and legal steps to prevent User from accessing the Roam website if Roam believes in good faith that User is creating problems or possible legal liabilities, is engaging in fraudulent activity, or is acting inconsistently with the letter or spirit of the Roam Terms and Conditions.
- **III. Fees.**
- Roam’s hosting services are subject to “**Fees**”, based upon the Roam Fee Schedule or based upon a separate fee schedule that is entered into directly by and between Roam and User in a separate agreement. Roam reserves the right to change its Fees from time to time. Changes to the Roam Fee Schedule are effective after Roam provides User with at least fourteen (14) days’ notice by posting the changes on the Roam website.
- Roam may choose to temporarily change the Fees for Roam’s Services for promotional events or for new services, and such changes are effective when Roam posts the temporary promotional event or new service on the Roam website, subject to the conditions of such promotional events or new services.
- **IV. Limitation of Liability.**
- Neither Party will hold the other responsible for third party Users’ actions or inactions, including comments written or posted on the Roam site.
- Neither Party will be liable for any loss of money, goodwill, or reputation, or any special, indirect, or consequential damages arising out of the use of Roam.
- Notwithstanding the foregoing, and in recognition of the relative risks and benefits of this arrangement between User and Roam, the risks have been allocated such that the User agrees, to the fullest extent permitted by law, to limit the liability of Roam to any third party for any and all claims, losses, costs, damages of any nature whatsoever or claims expenses from any cause or causes, including attorneys’ fees and costs and expert witnesses’ fees and costs, so that the total aggregate liability owed by Roam to User or to any third party shall not exceed the greater of (a) the total Fees User paid to Roam in the twelve (12) months prior to the action giving rise to the liability, and (b) U.S. $100.00.
- **V. Release.**
- If either Party has a dispute with one or more Users, this Party releases the other Party (and their officers, directors, agents, subsidiaries, joint ventures and employees) from claims, demands and damages (actual and consequential) of every kind and nature, known and unknown, arising out of or in any way connected with such disputes.
- **VI. Access and Interference.**
- The information on the Roam website is proprietary or is licensed to Roam by Roam’s Users or third parties. User agrees that it will not use any robot, spider, scraper or other automated means to access the Roam website for any purpose without Roam’s express, written permission and consent.
- Additionally, User agrees that User will not:
- Take any action that imposes or may impose (as interpreted by Roam at its sole discretion) an unreasonable or disproportionately large load on Roam’s infrastructure;
- Copy, reproduce, modify, create derivative works from, distribute, or publicly display any content (except for User’s information) from the Roam website without the express, written permission and consent of Roam and the appropriate third party, as applicable;
- Interfere or attempt to interfere with the proper working of the Roam website or any activities conducted on the Roam website; or
- Bypass Roam’s robot exclusion headers or any other such measures that Roam may use to prevent or restrict access to the Roam website.
- **VII. Privacy.**
- Roam views protection of User’s privacy as a very important software principle. Roam will use User’s information only as described in the Roam Privacy Policy. Roam stores and processes User’s information on computers that may be located anywhere in the world, including but not limited to, the United States or other countries, that are protected by physical as well as technological security devices. User can access and modify the information User provides us and may choose not to receive certain communications by opting out of emails received via an “Unsubscribe” or similar opt-out mechanism. Roam reserves the right to use third parties to verify and certify Roam’s privacy principles. For a complete description of how Roam uses and protects User’s personal information, please see the Roam [[Privacy Policy]], available on www.roamresearch.com.
- **VIII. Indemnity.**
- If any claim or demand, including reasonable attorneys’ fees, is made by any third party due to or arising out of a breach of this Agreement or violation of any law or the rights of a third party by a Party to this Agreement (the “**Offending Party**”), the Offending Party will indemnify and hold harmless the other Party (and their officers, directors, agents, subsidiaries, joint ventures and employees) from such claim or demand.
- **IX. No Agency; Advice.**
- No agency, partnership, joint venture, employee-employer or franchiser-franchisee relationship is intended or created by this Agreement.
- User understands that Roam is not qualified to give either legal advice or tax advice regarding prospective transactions or otherwise, and User shall not rely on Roam for advice on such matters.
- **X. Notices.**
- Except where explicitly stated otherwise, such as in Article 1 and in Article 2, Section III hereof, notice shall be served on Roam's Delaware registered agent (in the case of Roam) or on the agent or representative that User provides to Roam during the registration process (or to the Manager, agent, representative on file in User’s Roam account at the time of notice, if different) (in the case of User), where the law requires such service. Alternatively, Roam may give User legal notice by certified mail to the address provided during the registration process, where the law permits such service. In such case, notice shall be deemed to be complete on the day the certified mail receipt is signed by User or User’s Manager, agent or representative.
- **XI. Governing Law.**
- This Agreement shall be governed by and interpreted in accordance with the laws of the State of California and of the United States without giving effect to the doctrine of conflict of laws. All claims arising out of this Agreement that are not governed by Section XII hereof shall be resolved in accordance with the laws of the State of California in a court of competent jurisdiction.
- **XII. Disclaimer.**
- YOUR USE OF THE SERVICE IS AT YOUR SOLE RISK. THE SERVICE IS PROVIDED ON AN "AS IS" AND "AS AVAILABLE" BASIS. THE SERVICE IS PROVIDED WITHOUT WARRANTIES OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT OR COURSE OF PERFORMANCE.
- ROAM ITS SUBSIDIARIES, ITS AFFILIATES, AND ITS LICENSORS DO NOT WARRANT THAT (A) THE SERVICE WILL FUNCTION UNINTERRUPTED, SECURE OR AVAILABLE AT ANY PARTICULAR TIME OR LOCATION; (B) ANY ERRORS OR DEFECTS WILL BE CORRECTED; (C) THE SERVICE IS FREE OF VIRUSES OR OTHER HARMFUL COMPONENTS; OR (D) THE RESULTS OF USING THE SERVICE WILL MEET YOUR REQUIREMENTS.
- **XIII. Resolution of Disputes.**
- ANY DISPUTE, CLAIM OR CONTROVERSY ARISING OUT OF OR RELATING TO THIS AGREEMENT, OR THE BREACH, TERMINATION, ENFORCEMENT, INTERPRETATION OR VALIDITY THEREOF, INCLUDING THE DETERMINATION OF THE SCOPE OR APPLICABILITY OF THIS AGREEMENT TO ARBITRATE, WHICH CANNOT BE RESOLVED BY NEGOTIATION OR MEDIATION BETWEEN THE PARTIES, SHALL BE SETTLED BY FINAL AND BINDING ARBITRATION WITH ONE ARBITRATOR IN A VENUE MOST CONVENIENT TO THE PARTIES. THE ARBITRATION SHALL BE ADMINISTERED BY JAMS PURSUANT TO ITS COMPREHENSIVE ARBITRATION RULES AND PROCEDURES AND IN ACCORDANCE WITH THE EXPEDITED PROCEDURES IN THOSE RULES.
- THE COSTS OF THE ARBITRATION SHALL BE SHARED EQUALLY BETWEEN THE PARTIES, EXCEPT THAT EACH PARTY SHALL BE RESPONSIBLE FOR ITS OWN ATTORNEYS’ FEES AND COSTS IN PREPARING AND PRESENTING ITS CASE. THE ARBITRATOR’S AWARD MAY BE CONFIRMED, ENTERED, AND ENFORCED AS A FINAL JUDGMENT IN ANY COURT OF COMPETENT JURISDICTION. THIS CLAUSE SHALL NOT PRECLUDE THE PARTIES FROM SEEKING PROVISIONAL REMEDIES TO MAINTAIN THE STATUS QUO AND IN AID OF ARBITRATION FROM A COURT OF COMPETENT JURISDICTION; PROVIDED, HOWEVER, THAT, SHOULD USER FILE A CLAIM CONTRARY TO THIS SECTION, ROAM MAY RECOVER ATTORNEYS’ FEES AND COSTS INCURRED TO ADDRESS SUCH IMPROPER CLAIM, PROVIDED THAT ROAM HAS NOTIFIED USER IN WRITING OF THE IMPROPERLY FILED CLAIM(S), AND USER HAS FAILED TO PROMPTLY WITHDRAW THE CLAIM(S).
- THE ARBITRATOR’S AWARD SHALL BE ISSUED IN WRITING AND CONFINED TO A STATEMENT OF THE AMOUNT OF DAMAGES (IF ANY) AWARDED TO EITHER OR BOTH PARTIES ON THE CLAIMS AND COUNTERCLAIMS SUBMITTED TO THE ARBITRATOR. THE ARBITRATOR SHALL BE AUTHORIZED TO AWARD COMPENSATORY DAMAGES, BUT SHALL NOT BE AUTHORIZED (I) TO AWARD NON-ECONOMIC DAMAGES, SUCH AS FOR EMOTIONAL DISTRESS, PAIN AND SUFFERING OR LOSS OF CONSORTIUM, (II) TO AWARD PUNITIVE DAMAGES, OR (III) TO REFORM, MODIFY OR MATERIALLY CHANGE THIS AGREEMENT OR ANY OTHER AGREEMENTS CONTEMPLATED HEREUNDER; PROVIDED, HOWEVER, THAT THE DAMAGE LIMITATIONS DESCRIBED IN PARTS (I) AND (II) OF THIS TERM WILL NOT APPLY IF SUCH DAMAGES ARE STATUTORILY IMPOSED. THE ARBITRATOR SHALL ALSO BE AUTHORIZED TO GRANT ANY TEMPORARY, PRELIMINARY OR PERMANENT EQUITABLE REMEDY OR RELIEF HE OR SHE DEEMS JUST AND EQUITABLE AND WITHIN THE SCOPE OF THIS AGREEMENT, INCLUDING, WITHOUT LIMITATION, AN INJUNCTION OR ORDER FOR SPECIFIC PERFORMANCE.
- BY AGREEING TO THIS BINDING ARBITRATION PROVISION, THE PARTIES UNDERSTAND THAT THEY ARE WAIVING CERTAIN RIGHTS AND PROTECTIONS THAT MAY OTHERWISE BE AVAILABLE IF A CLAIM BETWEEN THE PARTIES WERE RESOLVED BY LITIGATION IN A COURT OF LAW.
- **XIV. Termination or Cancellation of Agreement.**
- We may terminate or suspend your account and bar access to the Service immediately, without prior notice or liability, under our sole discretion, for any reason whatsoever and without limitation, including but not limited to a breach of the Terms of Service.
- If you wish to terminate your account, you may do so by contacting us at support@roamresearch.com. After 60 days, the Content will be deleted from our servers and can no longer be recovered.
- If your account is terminated by us, you will (on request) be sent a copy of all of your work in Roam in plain text and machine readable form. (This is not guaranteed if termination is at your request.)
- **XV. Entire Agreement; Amendment.**
- **Entire Agreement.** Together with the Roam Terms of Service and the Roam Privacy Policy, this Agreement constitutes the entire agreement between the Parties, and there are no other representations, oral or otherwise, regarding the subject of this Agreement that are binding on either Party.
- **Amendment.** Together with the Roam Terms of Service and the Roam Privacy Policy, Roam may amend this Agreement from time to time. Roam shall provide notice by email, to the email address on file in User’s Roam account at the time of notice, if changes are made to the Roam User Agreement, the Roam Terms of Service, or the Privacy Policy. After such notice has been provided, continued use of the Services constitutes understanding and acceptance of these Terms and Conditions.
- **XVI. Severability.**
- Together with the Roam Terms of Service and the Roam Privacy Policy, the terms of this Agreement are severable such that if any term or provision is declared by a court of competent jurisdiction to be illegal, void, or otherwise unenforceable, the remainder of the provisions herein shall continue to be valid and enforceable.
- **XVII. Survival.**
- The following Sections survive termination, cancellation, or expiration of this Agreement: Section III. Fees (with respect to Fees owed for Services); Section IV. Limitation of Liability; Section V. Release; Section VI. Access and Interference; Section VII. Privacy; Section VIII. Indemnity; Section IX. No Agency; Advice; Section X. Notices; Section XI. Governing Law; Section XII. Resolution of Disputes; and Section XV. Severability.
- **XVIII. Non-waiver.**
- The failure or delay of either Party to exercise any of its rights hereunder for breach thereof shall not be deemed to be a waiver of such rights, and no waiver by either Party, whether written or oral, express or implied, of any rights or arising from this Agreement subsequent occasion; and no concession by either Party shall be treated as an implied modification of the Agreement, unless specifically agreed to in a writing signed by the Parties.
#### Article 3. Terms of Service
- Roam provides a platform wherein Users can create and manage an online database for organizing and evaluating knowledge. These Terms of Service apply to all Users of the Roam platform.
- **I. Content.**
- Our Service allows you to post, link, store, share and otherwise make available certain information, text, graphics, videos, or other material ("Content") on the Service. You are responsible for the Content that you post on or through the Service, including its legality, reliability, and appropriateness.
- By posting Content on or through the Service, you represent and warrant that: (a) the Content is yours and/or you have the right to use it and the right to grant us the rights and license as provided in these Terms, and (b) that the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights or any other rights of any person or entity. We reserve the right to terminate the account of anyone found to be infringing on a copyright.
- You retain any and all of your rights to any Content you submit, post or display on or through the Service and you are responsible for protecting those rights. We take no responsibility and assume no liability for Content you or any third-party posts on or through the Service. When you post Content into certain Databases, you will be able to designate whether such Content is made publicly or privately available.
- As a condition of your use of the Service, you grant Roam a nonexclusive, perpetual, irrevocable, royalty-free, worldwide, transferable, sub-licenseable license to access, use, host, cache, store, reproduce, transmit, display, publish, distribute, modify and adapt and create derivative works (either alone or as part of a collective work) from your public Content. This license does not apply to content in private databases. **Furthermore, while Roam has the technical ability to access private content, we agree to never access private content without written or verbal consent from you - excluding cases where we are compelled by legal authorities.** As part of the foregoing license grant you agree that (a) the other users of the Service shall have the right to comment on and/or tag your public Content that you make available to them and/or to use, publish, display, modify or include a copy of your public Content that you make available to them, and (b) we have the right to make any of your public Content available to third parties, so that those third parties can distribute, make derivative works of, comment on and/or analyze your Content on other media and services (either alone or as part of a collective work); except that the foregoing (a) and (b) shall not apply to any of your Content that you post privately for non-public display on the Service.
- By posting Content that is set for public access to the Service, you grant us the right to display such public Content on and through the Service. Roam has the right but not the obligation to monitor all Content provided by users. In addition, any Content found on or through this Service that is not originally submitted, posted, or displayed by Users of the Service is the property of Roam or used with permission. You may not distribute, modify, transmit, reuse, download, repost, copy, or use said Content, whether in whole or in part, for commercial purposes or for personal gain, without express advance written permission from us.
- You agree that Roam has the right, but not the obligation, to remove any Content from the Service if Roam determines in its sole discretion that such Content has violated these Terms, the Roam Privacy Policy, applicable law, or the privacy rights, publicity rights, intellectual property, contract rights or any other rights of any person or entity, or if Roam determines in its sole discretion that such Content poses a risk of harm to Roam, other users of the Service or third parties.
- Any content stored on the Service will be stored indefinitely, unless it is explicitly deleted. This process is described in Article 2, Section XIV, Termination or Cancellation of Agreement.
- **II. Copyright Policy.**
- We respect the intellectual property rights of others. It is our policy to respond to any claim that Content posted on the Service infringes on the copyright or other intellectual property rights ("Infringement") of any person or entity. It is our policy, in appropriate circumstances and at our discretion, to disable or terminate the accounts of users who repeatedly Infringe copyrights or intellectual property rights of others.
- If you are a copyright owner, or authorized on behalf of one, and you believe that any content, materials or works uploaded, downloaded or appearing on the Service have been copied in a way that constitutes copyright infringement, you may submit a notification pursuant to the Digital Millennium Copyright Act (DMCA) by providing our copyright agent with the following information in writing (see 17 U.S.C 512(c)(3) for further detail):
- an electronic or physical signature of the person authorized to act on behalf of the owner of the copyright's interest;
- a description of the copyrighted work that you claim has been infringed;
- identification of the allegedly infringing material on the Service, including URL or other specific location on the Service where the material that you claim is infringing is located;
- your address, telephone number, and email address;
- a statement by you that you have a good faith belief that the disputed use is not authorized by the copyright owner, its agent, or the law;
- a statement by you, made under penalty of perjury, that the above information in your notice is accurate and that you are the copyright owner or authorized to act on the copyright owner's behalf.
- **III. Intellectual Property.**
- The Service and its original content (excluding Content provided by users), features and functionality are and will remain the exclusive property of Roam and its licensors. The Service is protected by copyright, trademark, and other laws of both the United States and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Roam.
- **IV. Databases.**
- Content submitted, posted or modified by users in the Service is organized into separated sections we refer to as “Databases.”
- There are two general types of Databases on the Service:
- “Private Databases” that can only be accessed by the user that created the Database, unless you choose to grant full editor access to another specific user(s). You may also choose to grant page-level permissions to another user(s) for collaboration, but they will not have access to the rest of your content. Databases are private by default.
- “Public Databases” that can be accessed by anyone with the link. The user that created the Database retains administrative rights. You can allow the database to be fully editable by the public, or you can restrict access to be read-only.
- In the Service, you can work across multiple Databases at once, meaning your single account can access your own Private Database(s) and different Public Database(s). Databases are completely separate, and you won’t be able to link any Content between them (although you can transfer copies of Content from one Database to another). You can also export your User Content from your Databases for use outside of the Service via the application.
- **V. Accounts.**
- You are responsible for maintaining the confidentiality of your account and password, including but not limited to the restriction of access to your computer and/or account. You agree to accept responsibility for any and all activities or actions that occur under your account and/or password, whether your password is with our Service or a third-party service. You must notify us immediately upon becoming aware of any breach of security or unauthorized use of your account.
- You may not use as a username the name of another person or entity that is not lawfully available for use, or a name or trademark that is subject to any rights of another person or entity other than you, without appropriate authorization. You may not use as a username any name that is offensive, vulgar or obscene.
- You may not use the Service if you are 13 years of age or younger. By using the Service, you represent and warrant that you are over the age of 13.
- **VI. Subscriptions & Fee Schedule.**
- Payment obligations are non-cancellable, and fees paid are non-refundable and there are no credits for partially used Subscription periods. Certain refund requests for Subscriptions may be considered by Roam on a case-by-case basis and granted in sole discretion of Roam.
- Subscription Types (June 2020)
- Free Trial
- You'll be able to try Roam for free for 14 days. This trial includes the creation of one private or public database.
- If you cancel your Free Trial, you will still be able to read and export your notes indefinitely. If you do not cancel your Free Trial, it will be converted into a Standard Subscription by default at the end of that period.
- Standard Subscription
- A standard subscription includes the creation of up to three public or private databases. Rates may differ for monthly and annual payment plans.
- As of June 2020, standard subscription fees are:
- $15 per month when billed monthly
- $165 per year when billed annually
- Long Haul Subscription
- A long haul subscription includes the creation of up to three public or private databases, as well as a dedicated offline-only mode.
- As of June 2020, long haul subscription fees are:
- $500 / 5 years
- Discounted subscriptions or promotional rates may also be offered and granted at any time, and are subject to change in sole discretion of Roam.
- **VII. Communications From Roam.**
- By creating an account on our Service, you agree to subscribe to newsletters or marketing materials and other promotional information we may send. However, you may opt out of receiving any, or all, of these marketing communications from us by following the unsubscribe link or instructions provided in any email we send. Please note that we may still send you transactional or administrative messages related to the Service even after you have opted out of receiving marketing communications.
- **VIII. Feedback.**
- We welcome feedback, comments and suggestions for improvements to the Service (“Feedback”). You acknowledge and expressly agree that any contribution of Feedback does not and will not give or grant you any right, title or interest in the Service or in any such Feedback. All Feedback becomes the sole and exclusive property of Roam, and Roam may use and disclose Feedback in any manner and for any purpose whatsoever without further notice or compensation to you and without retention by you of any proprietary or other right or claim. You hereby assign to Roam any and all right, title and interest (including, but not limited to, any patent, copyright, trade secret, trademark, show-how, know-how, moral rights and any and all other intellectual property right) that you may have in and to any and all Feedback.
---
# Commentarii Roamani
#### Hello Again, Roamans -- [[April 5th, 2025]]
-
Roam is for people who think in outlines, jump between tabs, and write things down before they make sense.
- It’s not just for storing what you know but it’s for exploring what you don’t.
-
- When you rely on a tool like that, silence feels heavy.
- Lately, it’s been quiet and __that’s on us. __We haven’t stopped building, we only stopped communicating.
- Here’s what we’re planning to remedy that:
- The newsletter is back. Every two weeks, you’ll get product updates, workflows, tutorials, ideas worth trying, and the occasional glimpse into how the others are thinking with Roam
- Updates won’t be buried. When we ship something, you’ll know. When something breaks, we’ll say it.
- You’ll see what’s in progress: the rough edges, the sketches, and the stuff we’re still figuring out.
- We’ll ask for your input and actually use it. Every issue will include a space to share feedback, requests, insights, etc.
- Roam should grow with you, not hit puberty and stop texting back.
- 
- Now here’s a quick roundup of what’s landed in the last few months:
- 🧠 New in Roam
- [Diagram Redesign:](https://x.com/RoamResearch/status/1795920562826387833) Complete overhaul: fully redesigned for smoother arrows, cleaner styling, and a more intuitive layout
- [Zen Mode:](https://x.com/RoamResearch/status/1893889010201694693) new distraction-free writing environment that hides all sidebars and toolbars, so that you can focus solely on your content
- [Graph History:](https://x.com/RoamResearch/status/1841715046767890511) Travel back to any point in time to view past versions of your graph or recover accidentally deleted notes.
- [Cross-Graph Search:](https://x.com/RoamResearch/status/1783894268781777160) Quickly find and open content across all your graphs using `Cmd+Shift+U` (`Ctrl+Shift+U` on Windows)
- [Zapier Integration (Beta):](https://x.com/RoamResearch/status/1838987255710626154) Send starred emails, saved Slack messages, and more – directly into your Roam graph
- Query Nouveautés:
- [Query Builder](https://x.com/RoamResearch/status/1895176281601515943) supports combining multiple `{search:}` blocks with AND/OR/NOT logic and nested filters, using a simple visual interface instead of manual syntax
- Search for plain text inside your queries using `{search:}` and combine multiple searches to filter across different parts of a block, [see thread](https://x.com/RoamResearch/status/1862950982541611181)
- Query titles!
- `:q` inline query revamp with cleaner styling and improved template behavior, more details in [this thread](https://x.com/RoamResearch/status/1905657513699328335)
- Ability to query for blocks `created-by:` or `edited-by:` any user, [see here](https://x.com/RoamResearch/status/1892483213794390097)
-
- 🌿 Quality of Life Improvements
- [Performance Improvements:](https://x.com/RoamResearch/status/1893013088451821903) Encrypted graphs now load up to 5× faster, with filters and linked references also seeing general speed boosts.
- [Biometric Unlock on Mobile:](https://x.com/RoamResearch/status/1871275016932688291) Use Face ID or fingerprint to unlock encrypted graphs
- [Graph Size Metrics](https://x.com/RoamResearch/status/1887918594803056847): The Graph Settings tab now shows page count, block count and total graph size
- [Deep Linking:](https://x.com/RoamResearch/status/1868437329452617743) Roam links now open directly in the mobile app from outside sources
- [MessagePack Export:](https://x.com/RoamResearch/status/1833301962109960390) Export your graph in .msgpack: ~4× faster, ~10× less memory, and 30% smaller files than EDN
- [Download All Files:](https://x.com/RoamResearch/status/1887918588733902884) download all uploaded files from your graph in the File manager
- [Switch Out Daily References:](https://x.com/RoamResearch/status/1801581669666713809) Alt-click (or Opt-click) any daily note link to quickly reschedule it
- [Pin to top Sidebar:](https://x.com/RoamResearch/status/1804148729617785076) Long-press the pin icon to lock a sidebar tab in place, new windows will now open below it.
- [Mermaid Diagram Improvements:](https://roamresearch.com/#/app/help/page/nzZgnkbII) Cleaner visuals, theme control, and expanded diagram types including Gantt charts, sankey and sequence diagrams.
-
- 
- You’re receiving this because you’re part of the Roam community. You signed up, used the app, or crossed paths with us somewhere along the way. We want to share things that spark curiosity and help you think better. If that’s not quite what you’re looking for, feel free to [unsubscribe](https://preview.convertkit-mail2.com/unsubscribe). And if something’s on your mind, a thought, a wish, an idea, you can share it with us [here](https://forms.gle/rMjPJXinQDfw8F5NA). We’d love to hear from you!
#### Commentarii Roamani: Updates, a Simple Workflow, and Community Spotlight -- [[April 19th, 2025]]
### 📣 __What’s New __📣
- Roam is faster: Pages with complex queries, large sidebars, or long chains of linked references open with less friction, making the entire graph feel lighter and more responsive even when you’re working across several contexts at once.
- Small improvement to the Append API: It supports nested blocks with preserved structure, so indented content flows into your graph exactly as written. This makes tools like Speak to Roam more useful, and works just as well with Zapier, Shortcuts, or any custom setup.
### 🧠 __Workflow: Lightweight CRM in Roam __🧠
- CRM (Customer Relationship Management) sounds like something you need a whole system for. You meet people at events, shows, on calls, or through shared projects, and you want a simple way to remember who they are, what you talked about, and when to follow up. This little setup lives in your graph, slips into your notes without fuss, and just makes that part of life a bit easier to keep up with.
- The idea is simple:
- Meetings/hangouts get logged in your Daily Notes
- People have their own pages for long-term details
- Templates keep everything consistent
- Queries help you stay on top of follow-ups
- A few examples of attributes you can add to your `[[roam/templates]]`
- {{[[table]]}}
- Meeting Attributes (used in Daily Notes)
- `crm/contact::`
`crm/date::`
`crm/summary::`
`crm/next followup::`
`crm/outcome::`
`crm/channel::`
`crm/topic::`
`crm/owner::`
`crm/duration::`
`crm/tags::`
- Contact Attributes (used for person's page)
- `crm/first met::`
`crm/company::`
`crm/email::`
`crm/phone::`
`crm/location::`
`crm/time zone::`
`crm/socials::`
`crm/tags::`
`crm/source::`
`crm/notes::`
- Here's what it looks like populated:
- 
-  
- With this system, you can use queries to track meetings, walks, work sessions, etc., across your graph:
- 
- 
- also track hangouts with a specific person ⬇️
- 
-
### 🌟 __Community Spotlight: new Roam Depot extensions!____ __🌟
- [Card Theme:](https://github.com/qcrao/card-theme) This sleek extension styles your notes by type: fleeting, literature, permanent (and more) using block tags like `#F-Note` or `#Z-Note`. It's a clean way to bring visual structure to your graph effortlessly.
- [Ask Perplexity:](https://roamresearch.com/#/app/help/page/gT3R3AY0s) It pulls in answers from Perplexity’s search engine directly into your graph. You type a question, get a clean answer with sources, and follow up right inside Roam. It’s especially useful for quick research, filling in gaps, or exploring unfamiliar topics without switching tabs.
- ____
- 🐣 Keep on Roaming 🐇
-
- [Read this online](https://roam-research.kit.com/posts/commentarii-roamani-updates-a-simple-workflow-and-community-spotlight?_gl=1*1hegr2l*_gcl_au*NDM3MzE5MDY5LjE3NDMyODk3MzI.)
#### Commentarii Roamani: Pages Worth Building, [[Experiments]] -- [[May 3rd, 2025]]
- In today's newsletter, we're starting a series: Pages Worth Building. We'll present you with ideas and flows for Roam structures that can work as more permanent scaffolding for your thinking.
- Think pages that track patterns, hold shape-shifting ideas over time, or train a skill – which don't fit into tasks or outlines. For now, we have in mind: [[Experiments]], [[Momentum Log]], [[Reading Index]], [[Mission Control]], and more. If you’ve built something similar, or something completely different that’s earned a place in your graph, feel free to message us on Slack. We’d love to see what you’re working on!
- Let's start with [[Experiments]]
- ---
### 🧪 Pages Worth Building: [[Experiments]]
#### ✨ Why [[Experiments]] Deserves Its Own Page:
- It’s helpful to have a place where you can track what you’re trying.
- Not long-term goals or big changes, just something you’re adjusting to see what happens.
- This page holds the details: what you did, when you did it, and what you noticed. It’s simple, but it’s the kind of page you’ll keep coming back to.
#### 🧠 What Counts as an Experiment?
- Anything you’re trying on purpose to see how it affects something else. The key feature is that you can think ahead of evidence that would confirm or falsify your idea going into the experimentation. You want to check that the causality works (even loosely, by your own measures).
- It could be a change in routine, a new way of organizing your day, a shift in how you approach a task, or a habit you’re testing. It doesn’t need to be formal. It just needs to be specific enough that you can look back and notice what changed.
- Some examples:
- No screens 1h before bed ➔ does sleep quality change?
- A timed ten-minute journaling session ➔ does it help you complete more tasks?
- Batch meetings on one day ➔ does it free up creative flow?
- No caffeine after 2pm ➔ do you feel more steady through the day?
- The format can be flexible to fit behavior changes, workflow adjustments, substitutions, exploring assumptions/beliefs, etc.
#### 🔧 How to Structure It in Roam
- **🗂 Main Page: [[Experiments]]**
- This is your master index. You list what you're testing and what you've already tried:
- `Experiment:: [[Morning Phone Ban]]`
- `Experiment:: [[Voice Memos After Training]]`
- `Experiment:: [[Two-Tab Limit]]`
- Use tags like: `#Active - #Archived - Status:: - Category:: - etc.`
- **📄 Inside Each Experiment Block:**
- Each experiment starts as a single block on the [[Experiments]] page. The goal is to capture what you’re trying, how you're doing it, and what comes out of it. Keep the structure simple so it's easy to update.
- Here’s an example:
-  
-
- Track logs directly in Daily Notes: if you mention an experiment in your daily notes, tag it:
- `Experiments:: [[Morning Phone Ban]]`
- It will show up in your [[Experiments]] references because of the linked attribute.You can then link the block back into the log later, or leave it where it is, at the bottom of the page.
#### 🧬 Optional Fields & Features
- Your practice can become fairly thorough and deliberate, check these fields out:
- 
- Once you’ve run a few experiments, certain patterns may show up and the page can bring you a lot of value.
- [[Experiments]] becomes a reference page that will surface what tends to work, what falls apart, and what’s worth trying again – *for you*, in well defined contexts. Instead of relying on memory, you’ll have a record you can look back on.
- ---
- Let us know what you think about this series and look out for our next issue of the newsletter for more updates, community spotlights, and Roam-native powerhouse tools.
#### Commentarii Roamani: Pages Worth Building, [[Via Negativa]] -- [[May 18th, 2025]]
- **🌱 Quality of Life Improvements**
- Search now supports accented characters automatically. You no longer need to include the accent when searching – "etude" will find "étude"
- You can now use /embed-children and /embed-path to quickly insert embedded content
- Inline autocomplete (for things like (( )) and [[ ]] ) now scrolls more smoothly to keep the selected item visible while typing
- **🐞 Fixes**
- Empty page cleanup now delayed by 48h to avoid orphan blocks
- Fixed duplicate page creation during Import when titles included accented characters
- ---
### 📮Pages Worth Building: [[Via Negativa]]
- Some pages hold everything you’re working on.
- This one holds everything you’re not.
- > Via negativa (acting by removing) is more powerful and less error-prone than via positiva (acting by addition).
- — __Skin in the Game__, Nassim Nicholas Taleb
- Instead of trying to add more productive habits, start eliminating unproductive ones. To achieve happiness, look at what is causing you unhappiness, do not seek new sources of joy. The same logic applies to projects, habits, goals: consider asking which current commitments are draining your time, energy, or focus.
#### 🔩 Setting up the page in Roam
- If you're dropping a skill, log it. If a project feels dead, move it here. If you said No to something this week, write that down. You’re documenting what's no longer worth your time.
- The structure is simple: What? Why? When?
- 
- Once you’ve removed something (a habit, a project, a goal) you file it under one of three categories:
- Dropped Habits: for recurring actions or routines that clutter your time (and that you've decided to stop)
- Dropped Projects: for larger efforts you’re no longer working on (if a project already has its own page, reference the page directly)
- Dropped Goals: for intentions you’re no longer pursuing. These are especially important to log, since goals tend to linger in the background and quietly drain attention unless they're explicitly abandoned
- 
- You could also include a daily negation query in your page -- to collect small, situational No's you jot down in your Daily Notes as they happen. Tag them with e.g. #refusal (or any tag you prefer), then pull them into a query.
- 
- It will feel good to cut what doesn't work: with [[Via Negativa]] you'll have a quiet place to let things go, and peace of mind knowing that they're gone for a reason that made sense to you.
- 
#### Commentarii Roamani: Pages/Systems Worth Building, Learning using [[Roam Depot]] -- [[May 31st, 2025]]
- We continue our series Pages/Systems Worth Building, shifting focus from isolated pages to full systems that help your Roam graph grow more powerful day to day.
- This issue is useful for students, but also for any learners who are serious about mastering what they study. We’ll show you how to combine a couple of Roam Depot extensions into a study workflow that uses AI to leverage spaced repetition for learning.
- ---
### 🌀 Systems Worth Building: [[Learnloop]]
- Studying with AI lets you ask questions, go deeper, and clear up confusion. Add spaced repetition and you get the [[Learnloop]]: a system for understanding __and__ remembering, to prevent forgetting at an exponential decay rate. From [Gwern's post on spaced repetition](https://gwern.net/spaced-repetition):
- 
#### 🧰 The Tools
- To install an extension, go to the left sidebar, and open Roam Depot. Search for the extension and click__ Install __(see all the details in the video below). Each extension comes with a description from its creator. For this workflow we used:
- [Memo](https://github.com/digitalmaster/roam-memo) by [Jose Browne](https://x.com/JoseBrowneX): to turn any block into a spaced repetition card.
- [Live AI](https://github.com/fbgallet/roam-extension-live-ai-assistant) by [Fabrice Gallet](https://x.com/fbgallet): to have an AI assistant right inside Roam.
#### 🧱 (optional) Structure for your Notes
- Each large topic gets its own page, with subtopics and subcategories linked inside.
- Within those, you can create individual note pages: one per concept, idea, or question (think [[Permanent Notes]]!). This keeps your graph navigable, layered and atomized.
- For example, in a page like [[Philosophy]], you might link to [[Aristotle]], then to [[The Four Causes]] – a permanent note.
- 
- 
#### 🌊 The Workflow
- Here is a simple two-part workflow for taking and studying notes:
{{[[video]]: https://www.youtube.com/watch?v=kjTQOgLQTo8}}
-
- **Part I: [[Flashcards]]**
- While reviewing notes, use Live AI to generate flashcards by writing a prompt, selecting it, and clicking the ⚡️ icon. Once the AI suggests questions, format them as flashcards: tag the question block with #memo, and indent the answer underneath.
- To review, open the Memo extension from the left sidebar and click __Review__. Rate your recall and Memo will handle the scheduling by bringing due cards back to your sidebar automatically (very neatly color-coded).
- **Part II: [[Exploration]]**
- Take your conversations with the AI assistant right under the [[Exploration]] block in the permanent note you're studying. Use it to enrich your notes, ask questions, test your understanding, or follow threads of curiosity, by typing or using your voice (!). It’s a lightweight way to explore ideas while staying in context and neatly tracking tangents you go on.
- This balance between review and curiosity makes your notes active: part memory system, part thinking partner, all without leaving Roam 🏠
- 
#### Commentarii Roamani: Pages/Systems Worth Building, The [[Daily 5]] -- [[June 14th, 2025]]
- We’re continuing our series: Pages/Systems Worth Building with a system for anyone who wants to bring more clarity, structure, and intention into their day.
- ---
### Systems Worth Building: The [[Daily 5]]
- This is a five-part daily routine built in Roam: a simple template for reviewing your tasks, planning your time, logging your day, reflecting, and capturing anything new that comes up.
#### 🧰 The Tools
- [[roam/templates]]:
- Use templates to create a consistent daily structure: activate any saved template by typing ;; and selecting it from the dropdown menu.
- To install an extension, go to the left sidebar, and open Roam Depot. Search for the extension and click__ Install.__ Each extension comes with a description from its creator. For this routine we used:
- [Nautilus](https://github.com/tombarys/roam-depot-nautilus) by [Tomáš Baránek](https://barys.me/#english-section): transforms your tasks list into a visual overview
- 
- [Google](https://github.com/dvargas92495/roamjs-google) by [David Vargas](https://davidvargas.me/): connects to various Google services (we will use the Google Calendar) to your Roam graph
- 
- (Optional) If you don't use Google Calendar, and prefer to have a calendar within Roam, you can use the [Full Calendar](https://github.com/fbgallet/roam-extension-calendar) extension by [Fabrice Gallet](https://x.com/fbgallet).
- [Time Tracker](https://github.com/fbgallet/roam-extension-elapsed-time) by [Fabrice Gallet](https://x.com/fbgallet): Track how much time you spend on each activity using categories and sub-categories. Set goals or limits, and get feedback on your daily and long-term time usage.
#### 🪭 The Template
- 
-
#### ⚙️ How it works
- **[[Review]]**
- Start each day by:
- Surfacing unfinished tasks with this query:
- `{{[[query]]: {and: [[TODO]] [[__date__]]}}}`
- Pulling in events from your Google calendar
- 
- This step sets the stage for intentional planning; you can add other events or tasks as well.
- **[[Plan]]**
- Now that you know what’s on your plate, it’s time to build your day and map it out.
- Time-blocking is a practice that has been used for ages (Beethoven and Carl Jung used a form of time-blocking) before being popularized by Cal Newport. It consists of assigning each chunk of time in your day to a specific task.
- 
-
- > __Less mental clutter means more mental resources available for deep thinking.__
- – Cal Newport, Deep Work
- **[[Log]]**
- As your day unfolds, use this section to track what you’re doing: when you start on a task, block reference it under here and open a log with the __/current time __feature. When you're finished or take a break, close the log by writing the time and use the Time Tracker extension to see how much time you spent.
- 
- This helps you track what you spend your time on, and the pace you work at. You can also drop in any new events or tasks that come up during the day after planning. Don't hesitate to explore more with the Time Tracker extension features.
- **[[Journal]]**
- This is your space to reflect: freely or with prompts. Use it to process how the day felt: what worked, what didn’t, what surprised you, or what you'd do differently... anything that comes to mind.
- 
- Not only does journalling help you be more aware about what you feel and want, but it's also really fun to dig up after some time has passed.
- **[[Catch]]**
- This is your drop zone for anything new that comes up during the day: tasks, ideas, events, random thoughts (or distractions you resisted). Instead of interrupting your flow or cluttering your plan, just toss them here.
- ---
### 🌱 Quality of Life Improvements
- Fix selecting blocks with the mouse when the blocks are aligned horizontally, such as with the horizontal [[block view]] or with css
- Auto scroll the page when selecting blocks with the mouse
#### Commentarii Roamani: Pages/Systems Worth Building, Team Workflows - Part 1 -- [[June 28th, 2025]]
- We’re continuing our series: Pages/Systems Worth Building with a sequence of issues on using Roam for collaboration, or Roam as shared brain🧠
- We're building systems for daily check-ins, weekly progress, meetings, projects and so on... all while keeping things flexible enough for different team styles.
- ---
### Systems Worth Building: Team Workflows __Part 1__
#### Step 1: 🛠️ Getting Your Graph Ready for Collaboration
- Before building a shared system, make sure your graph is set up for other people to access and contribute.
- **1. Share Access**
- Go to Settings → Sharing and invite collaborators by email. This keeps the graph private to your group but accessible to those you've added. You can choose whether each person can edit or view only.
- 
- 🕯️ If you're using an Encrypted Graph, don't forget to share the password with your teammates.
- **2. Optional Adjustments**
- Edit Icons
- Roam displays a colored bullet next to blocks that were edited by you or others. Each person gets a unique color, making it easier to see who contributed what, at a glance.
- {{[[table]]}}
- 
- __each user gets a unique color__
- 
- Immutable Blocks
- By enabling Immutable Blocks, only the original author can modify their own blocks. This can help prevent accidental edits by other team members, as well as keep accurate track of individual contributions.
- 
#### 🤝 Team Workflows in Roam
- Once your graph is shared and set up, you’ll need a way to work together inside it.We'll be sharing a few core workflows that can serve as a foundation. Adapt them to match your team’s dynamic.
- **🗓️ Daily, Weekly, and Monthly Rhythm**
- Roam works best when it reflects the natural tempo of your team. Here's a simple structure you can use across three layers of time:
- daily execution
- weekly tracking, and
- monthly review.
- In this issue of the newsletter, let's look at a daily and weekly system. This is how it works:
- At the start of each day, the first person who becomes active opens this Team Daily template in the Daily Note (type ;; to toggle the template dropdown menu) for everyone.
- 
- The [[Dropzone]] section is for comments and conversations
-
- 🕯️ Pro Tip: Want to get someone’s attention?
- Instead of tagging their name as a page reference ([[Name]]), tag it as a block reference from that day’s Daily Note. This way, they’ll see a notification next to their name.
- {{[[table]]}}
- 
- __this comment is directed to Team Member 2 from Team Member 1__
- Each person works under their own name's bullet in the Daily Notes. Depending on your team's size and working style, people might organize their tasks differently.
- That said, we highly recommend using a shared format we call the [[Rolling Summary]].
#### The [[Rolling Summary]] 🛼
- At the start of the week (usually Monday), open the [[Rolling Summary]] template under your name.
- 
- Fill in the dates, then list your Priorities and Tasks for the week, and add other categories you want.
- {{[[table]]}}
- 
- __as the day goes on, log what you worked on using the __/current time __feature and check off tasks as you complete them__
-
- The next morning, head to the new Daily Note and
- block reference the [[Rolling Summary]] from the previous day
- replace it with original (this leaves a trace of references behind that you can conveniently open under the original!)
- block reference all the unfinished tasks and replace them with originals too
- add new tasks, events, meetings ([[Priorities]]) as needed
-
Repeat this each day. By the end of the work week, you’ll have a full trace of what got done, what's left to do or abandoned, and how your time was spent.
- 
- 
- ---
#### 🌱 Quality of Life Improvements
- The billing page has a new home: [roamresearch.com/#/billing](https://roamresearch.com/#/billing)
- Images now open in a better viewer: you can zoom, pan, copy, or download them.
#### 🐞 Bug Fixes
- YouTube links using youtu.be now display correctly when embedded with `{{video:}}`
-
#### Commentarii Roamani: Pages/Systems Worth Building, Team Workflows - Part 2 -- [[July 12th, 2025]]
- We’re continuing our series: Pages/Systems Worth Building with a sequence of issues on using Roam for collaboration, or Roam as a shared brain🧠
- We're building systems for daily check-ins, weekly progress, meetings, projects as well as team organization, all while keeping things flexible enough for different team styles.
- ---
### Systems Worth Building: Team Workflows __Part 2__
#### Step 1: 🛠️ Getting Your Graph Ready for Collaboration
- Before building a shared system, make sure your graph is set up for other people to access and contribute.
- **1. Share Access**
- Go to Settings → Sharing and invite collaborators by email. This keeps the graph private to your group but accessible to those you've added. You can choose whether each person can edit or view only.
- 
- 🕯️ If you're using an Encrypted Graph, don't forget to share the password with your teammates.
- **2. Optional Adjustments**
- Edit Icons
- Roam displays a colored bullet next to blocks that were edited by you or others. Each person gets a unique color, making it easier to see who contributed what, at a glance.
- {{[[table]]}}
- 
- __each user gets a unique color__
- 
- Immutable Blocks
- By enabling Immutable Blocks, only the original author can modify their own blocks. This can help prevent accidental edits by other team members, as well as keep accurate track of individual contributions.
- 
#### 🤝 Team Workflows in Roam:
- **The [[Sidebar]] and its components**
- Once your graph is shared and set up, you’ll need a way to work together inside it. This time, we want to share a few templates that could be useful in a team setting, as well as a way to set up your team’s graph.
- Here’s one example of how you might structure the sidebar to keep everything clear and easy to navigate:
- 
- 🌟 Featured Roam Depot extension: [Sidebar Separators](https://github.com/mlava/sidebar-separators) by [Mark Lavercombe](https://x.com/lavercombemark)
- **The Components**
- Each page in the sidebar serves a different purpose. You can adapt the structure to fit your team, but here are a few common components to start with:
- [[Étiquette]]:
- A set of rules/short guide to how the team works together. Include information on how to log, how to tag others, and so on. This page is very useful for big teams.
- [[Disponibilités]]:
- 
- A shared page for time zones and working hours. Make a simple table with names, cities, and general availability using the __/table __command. This is especially helpful for remote or part-time teams.
- [[Name]]:
- 
- A space for each person to organize their work in their own way and to indicate how they’ve chosen to do it. Some people prefer to work in the Daily Note, others might prefer a more structured page layout. Either way, the page brings it all together so it’s easy to see what everyone is focused on, especially for 1:1s or quick check-ins.
- [[Projects]]:
- 
- Every project has its own page, linked back to the main [[Projects]] page.
- We suggest using the same template for each project your team has. Here's an example:
- 
- 🕯️ Pro Tip: Use tags like #active or #inactive and this formula {{or: 🌘 | 🌑 | 🌗 | 🌖 | 🌕 }} to indicate the status of the project
- [[Meetings]]:
- The [[Meetings]] page collects all your team’s sessions in one place. Organize them according to what fits your workflow: by cadence (recurring vs. one-off), topic, or project – where each meeting has its own page, with a clear title and date:
- `[[[[Meetings]] ~ [[Topic or Project page]] ~ YYYY-MM-DD]]`
- This format facilitates referencing and staying organized over time.
- Use the template below for each new meeting as it gives structure before, during, and after without being too rigid.
- 
- Your graph doesn’t need to be perfectly organized to be useful. A few shared workflows go a long way in helping your team stay aligned and find what they need.
- 
### 🌱 Quality of Life Improvements
- [[Linked References]]
- Sorting system:
- 
- New display settings:
- 
#### Commentarii Roamani: Pages/Systems Worth Building, Reading Flows - Part 1 -- [[July 26th, 2025]]
- In this issue we’re sharing a simple flow for taking reading notes: it's our favorite routine for using Roam in order to make effective use of our readings.
- ---
### Systems Worth Building: Reading Flows __Part 1__
- Roam has many features that can elevate your reading by producing searchable and composable insights, which can serve as building input blocks for analysis, synthesis or creative work.
- Here's one we'll cover today: using Roam with [Matter](https://hq.getmatter.com/). Create a powerful flow for memorizing, surfacing favorite highlights, saving memorable sentences, and building a system for active recall!
- **🧰 The Tools**
- Quick reminder: install extensions by going to the left sidebar into Roam Depot. Search for the extension and click__ Install__. Each extension comes with a description from its creator. For this workflow we used:
- [Memo](https://github.com/digitalmaster/roam-memo) by [Jose Browne](https://x.com/JoseBrowneX): to turn any block into a spaced repetition card.
- [Matter](https://github.com/getmatterapp/roam-matter) by [The Matter Team](https://x.com/matter): to sync your highlights into Roam.
- **The [[Reading Flow 🐠]]**
- {{[[video]]: https://www.youtube.com/watch?v=31xztg6O_ck}}
- **The Setup**
- Matter is a read-later app that lets you save, highlight, and export content from across the web including Kindle, Spotify, X (ex-Twitter), Substack, etc. Here’s how to connect it to Roam:
- Install the Matter app on your iPhone, and the Chrome extension on your computer
- In Roam, install the Matter extension from Roam Depot
- Use the QR code to sign in and link your graph
- Set your Sync Frequency to every 12 hours (or less)
- ✅ You’re all set!
- Make sure you also have the Memo extension installed for this particular flow\\\
- **The Workflow**
- As you read or listen, highlight quotes you love, passages that resonate, or ideas you want to remember. Your highlights sync into Roam automatically: each article or book gets its own page, and the highlights also appear in your Daily Notes.
- In Roam, tag a highlight with `#memo` to turn it into a review card. You can also add reflections, context, or thematic tags like `#philosphy` or `#AI.`This builds links between ideas across different readings.
- Over time, you’ll create a reading stream that feeds your memory, connects your thoughts, and supports your creative work.
#### 🌱 Quality of Life Improvements
- Queries now support sorting and filtering
- Sorting for Linked References moved to Settings
- “Page Date” renamed to “Most Recent” for clarity
#### 🛒 New Roam Depot Extensions
- __by __Mark Lavercombe__
- Image OCR: Extract text from images using tesseract.js (great for screenshots, slides, handwritten notes)
- DOCX Viewer: Upload and preview .docx files directly in your graph
#### Commentarii Roamani: Roam Depot Gems: Algorithms of Thought -- [[August 9th, 2025]]
- In today's issue we spot the light on a Roam Depot extension. Algorithms of Thought (AOT) puts a toolkit of thinking patterns right inside your graph. You'll break down problems, make trade-offs explicit, and leave behind a reasoning trail that’s robust to hindsight bias and future you’s selective memory.
- ---
### Roam Depot Gems: Algorithms of Thought
- The AOT extension bundles several distinct approaches. Here are a few:
- Agreement, Disagreement and Irrelevance
- Break a statement or proposal into three parts: what you agree with, what you reject, and what’s irrelevant. This lens separates value from distraction, and often reveals that the crux of a disagreement is narrower than it first appears.
- Difference Engine
- 
- Start by describing where you are now and where you want to be. Compare the two and list the differences. Pick the most important one, then apply a technique designed to close that gap. If it works, move on to the next biggest difference; if it makes things worse, backtrack and try a different approach.
- Want, Impediment, Remedy:
- Define what you want, identify the obstacle, and decide on the most direct way to remove it. The simplicity is deliberate, since complexity often conceals the real barrier.
- Next Action
- Cut through planning inertia by asking one question: __What is the very next step you can take to move this forward?__ The answer should be small enough to start immediately and concrete enough that you’ll know when it’s done. It’s a simple way to turn abstract goals into motion.
- TOSCA:
- __T____rouble, ____O____wner, ____S____uccess Criteria, ____C____onstraints, ____A____ctors.__ Begin by defining the problem to be solved (Trouble) and identifying who is responsible for addressing it (Owner). Specify what success looks like (Success Criteria), note the limits you must work within (Constraints), and list the people or groups involved (Actors). Moving through the sequence reveals both the shape of the problem and the boundaries for solving it before you commit to a course of action.
-
- 
-
- This extension gives you structured prompts you can run from the Command Palette or hotkeys + leaves a clean outline of your reasoning in the graph, strengthening Roam's role as a thinking tool.
### Acknowledgements 💎
- Thanks to the Roam community and thinkers who’ve kept these ideas alive and evolving.
- [AOT extension](https://github.com/mlava/aot) — [__Mark Lavercombe__](https://x.com/LavercombeMark)
- [Roam42 SmartBlocks](https://github.com/dvargas92495/SmartBlocks/issues) — Early community work
- [Cortex Futura](https://www.cortexfutura.com/c/algorithm-of-thought/) — Algorithms of Thought background
- [VirtualSalt](https://www.virtualsalt.com/problem-solving-techniques/) — Problem-solving techniques
- [Zsolt’s blog](https://www.zsolt.blog/2020/12/tosca-pattern-for-framing-problems.html) — TOSCA framing
- [Edward de Bono](https://www.debono.com/de-bono-thinking-lessons-1) — PMI and related thinking patterns
### 🌱 Quality of Life Improvements
- Add filter on Daily Notes page.
- Option to include/exclude all Daily Notes.
- Move Query builder above results for live updates.
- Clause to filter all Daily Notes at once.
- Search now includes page titles.
- You can read more about these updates in [this thread](https://x.com/roamresearch/status/1953253277635657969?s=46).
#### Commentarii Roamani: Roam Depot Gems: Roam Portal, Search+ -- [[August 23rd, 2025]]
- In this issue we explore more Roam Depot extensions that encourage search and discovery. Roam is built to connect ideas across time, and with Search+ and Roam Portal, that ability becomes even more powerful.
### Roam Depot Gems
- To install an extension, go to the left sidebar, and open Roam Depot. Search for the extension and click__ Install. __You can toggle it with __Cmd + P__.
### [Roam Portal](https://github.com/dkapila/Roam-Portal) by [Dharam Kapila](https://x.com/dharamkapila)
- As the name suggests, Roam Portal is a gateway into your graph: a search engine that lets you step through and explore it from new angles.
- 
- Roam Portal turns search into exploration. Filter by page, user, or date, then shift into 2D or 3D visualizations of your graph. Locations mentioned in your notes appear on a map, timelines show ideas surfacing over months and years, and references can be sorted by frequency or attributes. Even tweets, images, and reactions inside your graph become searchable. Instead of narrowing in, Roam Portal is about stepping back and seeing your graph from a new angle.
- Say you’re preparing for a presentation. With this extension, you can trace when the main theme first appeared in your notes, see which related topics clustered around it, and spot sources you haven’t revisited in a while. Rather than scrolling through a flat list, you get a map of how your ideas developed over time. That perspective helps you notice angles you might have overlooked + gives your work a stronger backbone.
- 
### [Search+](https://github.com/dive2Pro/roam-search-plus) by [hyc](https://github.com/dive2Pro)
- Search+ is Roam’s native search on steroids.
- 
- Where the default search gives you a list, Search+ goes further. You can narrow queries by page or time range, sort results by date created or edited, and save searches you’ll want to revisit. It supports exact phrases, case sensitivity, and regular expressions for precise control in large graphs. You can copy results as references or open them in the sidebar, making search part of the building process instead of just retrieval. These features are especially useful when you’re working on a focused project.
- Imagine you’re writing a paper on Russian realism in literature. With Search+, you filter all your notes tied to authors like Tolstoy, Chekhov and Gogol, isolate your most recent highlights, and save that search for one-click access the next time you open Roam. From there, you can drop the results directly into your draft page, where they’re ready to be shaped into an argument. Search shifts from being a lookup tool to something closer to a staging ground for ideas.
### New Roam Depot extension 🛒
- [Roam References Radar](https://preview.convertkit-mail2.com/click/dpheh0hzhm/aHR0cHM6Ly9naXRodWIuY29tL2RpdmUyUHJvL3JvYW0tcmVmZXJlbmNlcy1yYWRhcg==)** **by [hyc](https://preview.convertkit-mail2.com/click/dpheh0hzhm/aHR0cHM6Ly9naXRodWIuY29tL2RpdmUyUHJv): A Roam extension that surfaces hidden links in your graph by suggesting relevant references. It helps you spot connections you might have missed, expanding the web of ideas as you go.
#### Commentarii Roamani: Back to School -- [[September 6th, 2025]]
- Fall is the season of academic beginnings, when new courses and obligations accumulate quickly. We dedicate this issue to new and returning students, but also more generally to all learners who use Roam. Think of your graph as your course hub that consolidates schedules, syllabi, and study materials.
### Back to School 📍📌📚✂️🎓📕📒✏️🚌📓📖📆🚍📝📔📘🏫📙📏📎🚸🖌️📗🖍️📅🖇️🗓️📐🖊️📋
- The phrase "Back to School" recalls the Homeric exhortation αἰὲν ἀριστεύειν which means __ever to excel__. In Homer, the phrase was spoken as a charge from father to son: to strive, to surpass, to bring honor through excellence in all domains. For us, the return of fall carries the same call. In other words:
- 
- Roam is well suited to this rhythm of striving because it allows us to be messy without suffering for it.
#### __The Course Hub__
- The course hub gathers syllabi, timetables, and study materials into one place. Here's how to organize it:
- Courses: list every class's link to its own page
- Schedule: keep a copy of your timetable
- Resources: store files and key links (like the printing procedure)
- 
- Then, read through your syllabi (or course outlines) and feed all the dates to ChatGPT so it puts everything in the same format:
- 
- Add the test dates and deadlines to your graph:
- 
- When preparing for the next day, or the next week, all the homework will be referenced in your Daily Notes.
- Study Tip: manually add references for possible times to keep yourself prepared. For most students, the difficulty lies less in exertion than in organization, because hard work follows when the tasks are clearly arranged.
- 
#### __Roam 🤝 Calendar__
- Seeing your time laid out visually makes it easier to organize for studying, exercise, and fun, and it sets you on the path to __ever excel__.
- 
- Use the [Google](https://github.com/dvargas92495/roamjs-google) by [David Vargas](https://davidvargas.me/) extension to connect your google account to Roam, or the [Full Calendar](https://github.com/fbgallet/roam-extension-calendar) extension by [Fabrice Gallet](https://x.com/fbgallet) to have a calendar within Roam.
- 
- __follow these steps to connect Roam to your Google account__
- To install an extension, go to the left sidebar, and open Roam Depot. Search for the extension and click__ Install.__ Each extension comes with a description from its creator.
### 🐞 Bug Fixes
- Tags are now created correctly after images
- Filters with apply as expected
- works within range (now extended to 10 years)
- 
#### Commentarii Roamani: Back to School, Part 2: Notes and Exams -- [[September 21st, 2025]]
- Last time we set up Roam as your course hub. Now that classes have started, the focus is on taking notes, keeping them connected, and getting ready for exams.
### Back to School, Part 2: Notes and Exams
- We hope everyone had a great Back to School this September! If you haven’t already, check out [our last newsletter](https://roam-research.kit.com/posts/commentarii-roamani-back-to-school?_gl=1*lwoeew*_gcl_au*OTA1ODQ4MDE0LjE3NTY5OTY4MDEuMTkyNDQ2OTY3LjE3NTg0MzA1NjUuMTc1ODQzMDY3Nw..) on setting up your courses for this semester in Roam.
- 
- Now, preparing for exams is a different task. We’ll show you how to take notes in Roam and organize them so you can spend your time studying, not figuring out what to study.
#### __Where__
- Add a section for notes on each course page. For every lecture, insert the date with `/today` and take your notes beneath that block.
- 
#### __How__
- During lectures it’s normal not to know the full structure of the material. The best approach is simply to keep writing. Roam’s bullets and nesting structure will keep your notes organized as you go, and whenever an idea pops up or you come across a concept you've already seen, simply add a hashtag and keep moving.
- 
- After taking your initial notes, turn them into permanent notes or flashcards for review. Once you have a general overview of the topic, it’s easier to distill the main points into material you can memorize.
- 
- See [this issue](https://roam-research.kit.com/posts/commentarii-roamani-pages-systems-worth-building-learning-using-roam-depot?_gl=1*p5snoa*_gcl_au*OTA1ODQ4MDE0LjE3NTY5OTY4MDEuMTkyNDQ2OTY3LjE3NTg0MzA1NjUuMTc1ODQzMDY3Nw..) for tips on creating flashcards 🌟
- Then, use the `/diagram` feature to build visual maps of your course and link your permanent notes together.
- 
- Sometimes professors draw on the board, and it can be difficult to capture that directly in Roam while typing. In those cases, open Excalidraw with `/excalidraw` and sketch it out.
- 
- Study Tip: Under each test in your Course Hub, add references for possible times you can study. These will surface in your Daily Notes as reminders and keep you prepared.
- 
- We also recommend using any Roam Depot extensions to enrich your workflow, more on this in the next issue!
#### Change Log 🪵
- Bug fixes for export
- Database update for upcoming features
- "Replace with another DNP" in page reference right-click menu (makes the alt-click UI for daily note page refs more discoverable)
- 
#### Commentarii Roamani: Winter Arc ❄️ -- [[October 5th, 2025]]{{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:02}} {{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:10}} {{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:10}} {{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:10}} {{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:11}} {{[[video-timestamp]]: {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}} 00:00:11}}
- Every October, the Winter Arc picks up online: the idea is to finish the year strong instead of waiting for January. We'll show you how to make it work inside Roam.
- We’ve launched a [[New Feature]]: the PDF Annotator. It lets you highlight, tag, and add notes to your PDFs directly in Roam! Check out [this post on X](https://x.com/RoamResearch/status/1973905945336897807).
- {{[[video]]: https://www.youtube.com/watch?v=S3xEDqY2sLI}}
- ---
## The Winter Arc
- The Winter Arc is a stretch of focus you could undertake from October to December, to start working early on building momentum before the flood of New Year’s resolutions. While others slow down or hibernate, the cold months test consistency and reward those who lock in early.
- 
- It’s about using the last three months of the year to build structure, discipline, and progress that last through the holidays and carry into the new year.
#### __Big Picture__
- **Step 1: List all your goals**
- The first step is finding your goals and writing them down where they can take shape. Create a page in Roam called [[Winter Arc]] and list them under [[Goals]]: we like it simple.
- **Step 2: Plan out three goals**
- Add a section called [[Focused Goals]]. At the start of each week, select three goals, decide when you’ll work on them, and define the specific actions that will move them forward.
- 
- **Step 3: Track your progress**
- Each week, open [[Progress]] and note what __actually __happened. Take notice of the goals you ignored and the ones where you made progress. The point is to see your path take shape over time, to see your results evolve. If you’re training, include weekly photos or numbers. If you’re creating music, art, or writing, add each new version or update here. Tip: by using the __/streak__ feature like this:
- ` {{[[streak]]: [[Goal 1/Build stronger attention]]}}` -> you'll have a visual record of every day you've worked on Goal 1:)
- 
- **__Day to Day__**
- Each day has a small place in the arc you’re building. The goal isn’t to push harder but to stay present in the work. Some progress is visible, most of it isn’t, but each repetition leaves a trace that builds on the last. Over time, the pages begin to form a streak of their own, a quiet line of effort running through the season. You’ll see where your attention goes, and how often it returns. That pattern is the real measure of consistency.
- 
- 
- If you’d like to give this rhythm a home, here’s one way you could do it. A daily template can hold your goals, actions, and reflections in one place, making it easier to see how the days start to link together.
- A simple Roam setup that connects long-term structure to daily rhythm. The Focused Goals query pulls the week’s priorities from the [[Winter Arc]], and the daily sections guide short, intentional work sessions. Here's what a full day could look like:
- 
- 
- Start small. Stay steady.
- 
#### Commentarii Roamani: Roam Live Ai -- [[October 19th, 2025]]
- This issue focuses on the Live AI extension, which integrates advanced language models directly into your graph, enabling you to harness the power of AI without ever leaving Roam.
- 
- ---
## The AI extension for Roam: Live AI
#### Setting it up
- To install an extension, go to the left sidebar, and open Roam Depot. Search for the [Live AI](https://github.com/fbgallet/roam-extension-live-ai-assistant) extension by [Fabrice Gallet](https://x.com/fbgallet) and click__ Install.__ This extension comes with an extensive, detailed, awesome description from its creator.
#### How it works
- The first thing you should do after installing it is get an API key from OpenAI, Anthropic, or another provider. Simply follow the links given in the extension description and you'll be all set to start exploring.
- 
- There are many other settings, but don't worry about those for now (unless you want to 🤷♀️).
- Now Live AI will appear in your sidebar:
- 
#### Start here!
- There is so much to explore in this extension, so we recommend starting with these four functions (which we will explore in more depth in the following issues).
- 1. Voice Transcribing
- Dictate your thoughts directly into Roam, and let AI transcribe them in real time. It’s the fastest way to capture fleeting ideas before they disappear. Ideal for stream-of-consciousness thinking, meeting or lecture notes, hands-free journaling, and even translating!
- 2. Ask AI
- 
- This command sends the focused or selected blocks as a prompt to the default model. The response is added directly to your graph as child blocks, making it the quickest way to ask the AI anything.
- {{[[video]]: https://www.youtube.com/watch?v=KoprE9zl1-U}}
- 3. Ask Your Graph Agent
- 
- This agent performs semantic search and reasoning across your entire Roam graph. It interprets natural-language queries, retrieves relevant blocks and pages, and lets you view, filter, or even chat with the results. You can choose from three privacy modes (private, balanced, or full) to control how much of your graph is sent to the language model. Ask questions across your entire graph and receive synthesized answers based on your own notes, links, and pages.
- 4. Outliner Agent
- 
- This agent modifies existing outlines directly. It can add, remove, or edit specific blocks inside a defined structure.
- 
- __[from Fabrice Gallet's documentation](https://github.com/fbgallet/roam-extension-live-ai-assistant/blob/main/docs/live-outliner.md)__
-
- These are the basics of the amazing Live AI extension. Explore with it more until the next issue where we will walk through more features in more detail.
- 
#### Commentarii Roamani: Live AI in practice - Part 1 -- [[November 3rd, 2025]]
- 
- This is the second issue focusing on the Live AI extension, which integrates advanced language models directly into your graph, enabling you to harness the power of AI without ever leaving Roam 🔮 See [our previous issue](https://roam-research.kit.com/posts/commentarii-roamani-roam-live-ai) for more if you haven't already!
- ---
### 🧚 Live AI in practice
- Today we're looking at how to use the extension (created by [Fabrice Gallet](https://github.com/sponsors/fbgallet)) as a writing assistant. As we go through the process of writing a research paper with Roam, we'll look at some of the amazing tools it can help us with.
- 
- This week is __Part 1__: choosing your topic and gathering sources.
- ---
### 🎃 Step 1: Topic Selection
- First, you need to find the question you’ll ask for your research paper.
- If you’re writing a research paper just for fun and have no idea where to start, try the __Ask Your Graph__ tool and use prompts like:
- What patterns or recurring themes appear in my notes?
- to surface the topics you revisit a lot, the ones you’re still curious about or used to be. From there, you can dig deeper 🧟♂️
- 
- If you have some ideas but you're not sure how to shape them in a clear research question, use the __Ask AI__ tool to talk it out.
- You can also record yourself with the __Voice Transcription__ tool and let it reply in text (see [our previous issue](https://roam-research.kit.com/posts/commentarii-roamani-roam-live-ai) to learn how).
- Let's say we want to write a paper about...WITCHES 🧙♀️
### 🎃 Step 2: Research
- Now that we have a theme, it’s time to gather sources. Just converse with the AI model of your choice.
- [watch the clip here!](https://api.filekitcdn.com/e/vudzdYPdpXbwDanZpLkZZM/6An3J91X8AVMJtPNuvLhvF/player)
- And use it to find both primary and secondary materials related to your topic:
- __Find primary and secondary sources about [topic]__
- Once you’ve found a few, you can ask for short summaries to quickly grasp each author’s main argument before diving in.
- Don't forget, this extension supports all your favourite AI models 👻
- 
- ---
- In __Part 2__, we’ll move from research to writing and see how to turn those ideas into a polished essay using Roam’s creative tools.
- 
- So, over the next two weeks, read through your research and jot down every idea that comes to mind so when the next issue comes out, you can follow along and write your paper in Roam.
#### Commentarii Roamani: Live AI in practice (Part 2) + roamOS -- [[November 16th, 2025]]
- This is the third issue featuring the [Live AI](https://github.com/fbgallet/roam-extension-live-ai-assistant) extension, which integrates advanced language models directly into your graph, enabling you to harness the power of AI without ever leaving Roam. See [our previous issue](https://roam-research.kit.com/posts/commentarii-roamani-live-ai-in-practice-part-1) for more if you haven't already!
- Also in this issue: a community spotlight on the new [roamOS](https://www.roamos.work/) extension!
- ---
### Live AI in practice
- Today we're continuing to look at how to use the extension (created by [Fabrice Gallet](https://github.com/sponsors/fbgallet) and available via Roam Depot) as a writing assistant. As we go through the process of writing a research paper with Roam, we'll look at some of its amazing tools and its newest updates!!!
- 
- As a reminder, last week we worked on choosing a topic and gathering sources.
- This week is __Part 2: __the writing process
- ---
### Newest Updates:
- One of the main reasons we use Roam is because it connects all our thoughts seamlessly while staying easy to work with. This extension takes that a step further, giving you the ability to directly chat with your graph.
- This version is now even simpler and smoother to use, as it has a chatbox:
- 
- As well as chat storage!
- We mentioned this last time, but one capability that truly sets this extension apart from other AI tools is its ability to search your graph AND all the info that comes with a language model at the same time, something you can't do with any other AI.
- You can even restrict the amount of information you give, along with many other preferences:
- 
- 
- __style, prompts, model settings...__
- 
- __layout preferences__
- [Fabrice Gallet](https://buymeacoffee.com/fbgallet) added many many instructions and details on his extension, which you can find in Roam Depot:
- 
- Now let's pick up where we left off last week on our research paper...
### Step 3: Writing - outlining, drafting, and correcting
- After you read your sources, you'll probably be able to draw parallels with other ideas you've encountered or came up with, so last week we suggested to jot all of them down.
- We organized our notes according to the sources:
- 
- 🌟 Featured Extension: [Roam PDF Highlighter 2](https://github.com/c3founder/ccc-roam-pdf-2) by [CCC](https://x.com/cococ_rr) 🌟
- And then did some brainstorming...
- 
- The LiveAI tool can really come in handy when it comes to writing because you can start by using the action rubric to help plan your project or paper, then use the content analysis rubric to summarize, extract key insights or reasoning structures as you're researching, and finally use the creation, rephrasing, and critical reasoning tools to write, correct and perfect your drafts, as well as to hedge against haters.
-   
- Everyone’s writing process differs, but Live AI offers tools that can seriously speed things up regardless of how you approach writing, especially if you don’t have a set procedure and tend to be very ADHD about it 🌀
- ---
### 🌱 Community Spotlight: [roamOS](https://www.roamos.work/)
- Community member [Ryan Sonnek](https://codecrate.com/) built roamOS, a native iOS and macOS app that brings your Roam graph into your daily workflow. Quick capture thoughts from anywhere via keyboard shortcuts or Siri, without opening Roam. Display your custom Datalog queries as widgets on your home screen or desktop. Your second brain, integrated with your operating system.
- 
### What it does:
- 🚀 Quick Capture Everywhere - Capture to Roam instantly via keyboard shortcuts, Siri voice commands, menu bar launcher, or iOS app—without opening your browser.
-
- 🧩 Knowledge Widgets - Display your custom Datalog queries as native iOS/macOS widgets. Put your TODOs on your lock screen, daily notes on your desktop, or random quotes that surprise you throughout the day.
-
- 🔗 Deep System Integration - Your Roam graph integrates with Siri, Spotlight, and Shortcuts. Query your second brain from anywhere in your OS.
-
- 📱💻 Cross-Platform - Works on iPhone, iPad, and Mac with universal purchase. Pay once, use everywhere.
### See it in action:
- Quick Capture:
- {{[[video]]: https://www.youtube.com/watch?v=CJC5O4MrVbE}}
- Query Widget:
- {{[[video]]: https://www.youtube.com/watch?v=vpmUH5XQlvc}}
- Simple pricing: $20 one-time purchase includes both platforms. No subscriptions. Lifetime updates.
- Learn more and download it [here](https://www.roamos.work/).
-
- ---
- 
- __see you next time!!!__
#### Commentarii Roamani: Roam Depot Gems: Better Tasks -- [[November 30th, 2025]]
- In this issue, we look at [Better Tasks](https://github.com/mlava/better-tasks), a Roam Depot extension by [Mark Lavercombe](https://github.com/mlava) that brings structured, repeatable task logic directly into your graph. It treats each TODO as a block with clear attributes: __repeat, start, defer, due__ so you can manage tasks without leaving Roam or maintaining a second system.
- 
- ---
## 💎 Roam Depot Gems: Better Tasks 💎
- Better Tasks works quietly: when you complete a repeating task, the extension can generate the next instance on the correct day based on your settings. One-off tasks use the same attributes without a repeat rule. Everything is stored directly in Roam blocks, so the system stays transparent and easy to inspect.
#### The Core Mechanism
- A Better Task is a TODO with child blocks that hold its data. You create one by opening Roam’s Command Palette and selecting Create a Better Task (or by converting an existing TODO using Convert TODO to Better Task):
- 
- Completing the task writes a completed attribute and, if a repeat rule is present, creates the next occurrence according to your settings. You can add optional attributes for availability and resurfacing:
- BT_attrStart -- when the task becomes available
- BT_attrDefer -- when it should reappear
- BT_attrDue -- when it is due
- __and more...__
- Leaving the repeat field blank produces a scheduled one-off task. It behaves the same way, just without generating a successor.
#### Inline Pills
- When a Better Task is collapsed, the extension shows a pill beside the checkbox. The pill summarizes the task’s attributes:
- ↻ the repeat rule
- ⏱ / ⏳ / 📅 start, defer, and due dates
- __"__⋯__"__ menu for task actions: skipping, ending recurrence, generating the next instance, and adjusting metadata (snooze applies to the due date when no start date is set)
- 
- Pills hide automatically when the block is expanded so you can edit the child blocks directly. Date formatting is optimized for scanning: items due within seven days show the weekday name; anything further out uses a short date.
- Pill interactions match the extension’s interface:
- click a date pill to open that Daily Note
- Shift+Click opens it in the sidebar
- Alt+Cmd/Ctrl+Click snoozes the due date one day forward
- Alt/Ctrl/Meta+Click opens a date picker
- metadata pills cycle their values or open the related pages
- Alt+Click on the repeat pill copies the rule text
- Completed tasks hide their pill until the next occurrence is created.
- Better Tasks supports optional child-block fields for project, waiting-for, context, priority, and energy. These values are not required, but when present, they appear as pill segments and become filterable in the dashboard
- 
-
#### Dashboard
- The dashboard is a floating, draggable panel that lists all Better Tasks. From the dashboard you can snooze or skip tasks, open their source blocks, adjust metadata, and edit repeat or date values through the same pill interactions used inline. A quick-add bar at the top lets you create new tasks, with AI parsing applied when enabled.
- 
- It updates automatically as attributes change and gives you filters for recurrence, start/defer status, due buckets, and completion state:
- 
#### Settings
- In the Roam Depot extension settings, you can choose where the next occurrence appears (Daily Notes Page, same page, or under a DNP heading) and rename all attribute labels to match your graph.
- You can also enable confirmation before spawning the next task, set the first day of the week, turn on AI parsing with your own API key, and adjust the checkbox threshold for pill rendering:
- 
- ---
- There’s much more than we can cover here in Better Tasks, and the extension rewards exploration. Try the menu, adjust the settings, experiment with the dashboard filters, and see how different repeat rules shape your workflow. If you want to capture tasks faster, you can also enable the optional AI parsing mode with your own API key. Read the full documentation [here](https://github.com/mlava/better-tasks)
- 
- see you next time!!!
#### Commentarii Roamani: Roam Reader!!! -- [[December 13th, 2025]]
- Reading produces value when a thought interrupts the page. A sentence lands, a question forms, a connection starts to appear, and then the article keeps moving. What matters is whether that moment turns into something you can work with later.
- Roam Reader is your tool for reading intentionally: remix your notes, comment on them, tag them, nest them. Watch our [in-depth tutorial on YT](https://www.youtube.com/watch?v=stJ7SGo6J9w) here and [our thread on X](https://x.com/RoamResearch/status/2000051955746394488)!
- It's built around capturing the moment in a form that stays flexible. As you read on the webpage itself, your notes are directly by it, in the sidebar. The article remains intact, with its intended layout and context but your thinking grows alongside it.
- Your notes could then be remixed, pulled into other parts of your graph, and reused across projects. Over time, reading produces fewer static traces and more material that stays alive inside your system.
- 
- 
- ---
#### Setting it Up
- Visit the Chrome Web Store and find the [Roam Reader extension.](https://chromewebstore.google.com/detail/roam-reader/kghmbkhikifcnkjoakokkhdkfdhieonb?hl=en&pli=1) Then, add it to chrome and pin it to your Address Bar. Go to the article you wish to read or annotate with Roam Reader, click the astrolabe once to sign-in via Google/Apple or Email+Password and a second time to select which graph to use for your reading lists and annotations.
- 
#### Saving an Article to your Reading List
- To save an article to your reading list, click the astrolabe in the top right corner to open the menu. Tweak the metadata as you like, and add some tags. Click on Save To Inbox or some of the other default reading lists like: Shortlist & Archive.
- 
#### Taking Notes & Highlighting
- With the article open, click the astrolabe icon and choose Take Notes instead of saving it to your reading list. A sidebar opens beside the page, where you can start writing notes under today’s date, indented beneath Notes by [[User]].
- To highlight, select text in the article and click the highlighter icon that appears. You can also choose a highlight color! Each highlight is added automatically to the sidebar, ordered according to its position in the article. If you indent the empty bullet beneath your most recent highlight, the next highlights will nest underneath it, making it easy to outline and group related passages as you go.
- You can add tags and comments as you highlight using the icons provided. Roam handles the formatting for you, inserting the # and indentation automatically.
- 
#### How It's Organized In Roam
- In Roam, to avoid cluttering your graph, saved articles first appear as blocks on [[Reading List: Inbox]]. They remain simple blocks with their metadata nested underneath. Each entry follows the default template set in your Roam Reader settings, which you can change at any time. Only when you start taking notes on an article does it expand into its own page.
- If you want more structure, you can update the title template to use a namespace-based format, which keeps reading material grouped and easier to navigate as it grows.
- 
- 
- ---
- Roam Reader is designed to stay close to how reading on the web already works. Many articles today are readable, carefully laid out, and worth engaging with in their original form. Stripping them down -- as most reader apps do -- often removes context, structure, or even content that matters.
- You read where you are, take notes intentionally as ideas land, and let structure form early without interrupting the flow. Notes remain flexible, reusable, and easy to pull into the rest of your graph when they become relevant.
- If you already use Roam to think, write, or plan, this fits naturally. Reading becomes another input to your system, shaped as you go, and still usable long after the tab is closed.
- 
- onward! roam & read:)
#### Commentarii Roamani: 2025 Roam Wrapped 🎁 -- [[December 29th, 2025]]
- 
- In this issue we'll do a wrap-up of the main ideas and systems we explored in __Commentarii Roamani__ in 2025.
- If you're a new subscriber, read on to see where to go for content you've missed! And if you've been around for the whole journey, revisit the issues that could help you turbocharge your entry into 2026! Either way, think of bookmarking and sharing this issue as a useful reference tool (we linked all the issues to make it handy)
- 
- The newsletter issues we've sent out fall into three categories: building personal thinking systems, learning and knowledge construction, and AI as a thinking partner.
- ---
### Building personal thinking systems
- A large part of this year focused on building workflows and systems that improve our daily life, in Roam.
- 
- **Experiments** -- is a page where you log new things you are trying with deliberation, along with the changes you notice over time, and it's meant to document what works and what doesn't to improve your day-to-day life. Over time, this works to amass empirical evidence for your choices and iterate moving forward on what habits to keep.
- **Via Negativa** -- is a page where you write down habits, projects, or goals you have decided to stop pursuing. Writing these decisions down helps clear mental space, because once something is explicitly abandoned, it stops resurfacing.
- **The Daily 5** -- is an organized daily workflow in Roam built around a fixed template with five sections: review, plan, log, journal, and catch. Each day, you open the same structure in your Daily Notes and fill it in as the day unfolds, removing the inertia from starting each day, but also offering a predictable structure to follow.
- **Team Workflows pt.1 and pt2** -- is a system that focuses on using Roam as a shared space. The issue covers setting up a graph for collaboration and adding lightweight structures for daily check-ins, weekly progress, meetings, and projects, so teams can share context and track work over time without forcing everyone into the same workflow.
- **Algorithms of Thought** -- is an extension that structures reasoning itself. It provides explicit thinking patterns for breaking down problems, comparing options, and clarifying decisions. Instead of keeping reasoning implicit or scattered, it leaves a clear trace of how conclusions are reached, which makes decisions easier to revisit and revise over time.
- **Better Tasks** -- is a task system in Roam where each task is a block with its own dates and repeat rules. Instead of rewriting the same tasks or relying on memory, tasks automatically resurface when they are due or available.
- **Focused Goals** -- is a planning workflow built around a fixed time window and a small number of priorities. We explored this workflow during the Winter Arc, but it can be reused for any focused stretch of work.
### Learning and knowledge construction
- This was another recurring theme: we posited that learning takes shape over time, from initial setup to reading, studying, and reuse.
- 
- In **Back to School pt1 and pt2 **-- we looked at how to organize courses, schedules, syllabi, lecture notes, and exams in Roam.
- We also created the **Learnloop** workflow to look at how notes can be created and revisited regularly through short reviews and spaced repetition. This way, understanding builds over time instead of accumulating only around deadlines. This was our first peek at using AI from within Roam, which is covered in the next section.
- Finally, we look at reading as part of the same process. In **Roam Reader**, we show how reading can happen alongside your notes, with highlights and comments captured in context and saved directly into the graph, making what you read easier to reuse later for writing, synthesis, or further study.
### AI as a thinking partner
- This section focuses on how AI is used inside Roam as a support layer for thinking, writing, and exploration.
- 
- The **Live AI issues pt0, pt1 and pt2** cover how AI operates directly on blocks, pages, and the graph itself, and because AI works on selected context or the graph, thinking stays anchored to your own material rather than starting from scratch.
- We also looked at how AI changes search and discovery inside large graphs. With tools like **Search+ and Roam Portal**, search is not limited to finding a specific block. You can filter by time, page, or structure, save searches, and step back to see how ideas develop and connect across months or years. This makes search part of the building process.
- ---
- Thank you all for this wonderful year!!! If you have ideas for features, suggestions, or need any help, send us a message: __support@roamresearch.com.__
- 
- 
#### Commentarii Roamani: Roam Depot Gems: Roam Copilot -- [[January 10th, 2026]]
- 
- 
- We are starting 2026 by looking at Roam Copilot, an AI assistant that brings context-aware help into your Roam workspace.
- ---
## ♦️Roam Depot Gems: Roam Copilot♦️
#### How to set it up
- Go to Roam Depot and search for [Roam Copilot](https://github.com/qcrao/copilot) by [qcrao](https://github.com/qcrao). Install it.
- 
- Then, in the settings, choose your AI provider. Find, copy, and paste your API key (using the given links)
- 
- __there is a large range of options to pick from__
- Copilot is now installed! Open it from the lightbulb icon in the bottom-right corner and start a new chat.
-  
#### How it works
- Roam Copilot reads the content of the page you are currently on, along with any blocks that are visible in the sidebar, and uses that combined context as the input for the model.
- 
- You interact with the model of your choice through a chat panel on the right side of your workspace, where you can ask questions, request summaries, generate outlines, explore arguments, develop ideas, etc... and the responses are grounded in the material that you opened and are looking at.
- 
- One of the features that makes this extension so special is how intuitive and easy it is to use!
- You can start new conversations whenever you want, return to previous ones, and keep the panel minimized when you are not using it, so it stays available without getting in the way of your usual workflow.
- 
- Another thing that makes this tool so practical is the built-in templates, and the option to build your own custom templates.
- 
- 
- Roam Copilot is a very cool and promising addition to the Roam ecosystem (thanks [qcrao](https://github.com/qcrao)!), because it brings AI support directly into the graph and turns your intertwined notes and open context into something you can actively think with!
- More information is available on the Roam Copilot page in Roam Depot. If you try it, we’d love to hear how it fits into your workflow ☃️
- ---
- We hope you are all having a great beginning of 2026, join our slack channel [here](https://join.slack.com/t/roamresearch/shared_invite/zt-3n31y81xe-PVYEXT6rOmkT0f3oxWyTYA), and don't forget to check out [the Roam help graph](https://roamresearch.com/#/app/help/page/Ec97klr7x) for updates!
- 
- __Happy 2026!__❄️
-
---
# roam/templates
- Dev docs #.h
- Tutorials::
- How-to guides::
- [[Reference]]
- [[Examples]]
- [[Community]]
- Roam Daily Template
- Designer:: [[Jonathan Borichevskiy]]
- Special Features::
- #Slider | #Tags | #TODO/DONE
- Templates::
- Last updated:: [[February 27th, 2021]]
- Weekly Agenda (created on a different day, and embedded with /Block Reference)
- [[Morning Questions]]
- {{[[slider]]}} How many hours of sleep did I get?
- What's one thing top of mind today?
- What's the one thing I need to get done today to make progress?
- Review #[[Index: Questions]] #values
- Agenda
- {{[[TODO]]}} Morning walk #goal-health #habit
- {{[[TODO]]}} Check calendar for scheduled events
- {{[[TODO]]}} Morning focus hour
- {{[[TODO]]}} Read 30 minutes #goal-learning #habit
- {{[[TODO]]}} Review Readwise.io
- {{[[TODO]]}} 10 minutes meditation #goal-health #habit
- {{[[TODO]]}} Workout or run #goal-health #habit
- {{[[TODO]]}} Evening focus hour
- {{[[TODO]]}} Do 7 - 30 - 90 review
- {{[[TODO]]}} read for pleasure, watch something, go for a walk
- [[Evening Questions]]
- List three things I'm grateful for #habit #gratitude
- What made me happy today?
- What made me sad?
- Where there any signs of my day going to shit that I could recognize?
- What prevented me from reaching my goals today?
- What am I looking forward to?
- Skeletons/Methods/Tags/Tools
- Designer:: [[Samuel Orion]]
- Special Features::
- #[[Attributes]] | #[[Kanban]]
- Templates::
- Last updated:: [[July 1st, 2020]]
- **Article::**
- **Topic:**
- **Tags: **
- **URL**:
- **Quotes / Summary:**
- **Comments / Questions:**
- **Book::**
- **Quotes / Summary:**
- **Comments / Questions:**
- **Topic**:
- **Tags**:
- **URL**:
- Podcast
- Show:
- Speaker(s):
- Topic:
- Tags:
- URL:
- Summary:
- Videos
- Speaker:
- Tags:
- Summary:
- Link or Embed:
- Projects
- Due Date:
- Completed Date:
- Status:
- Related Goals:
- Success Criteria:
- Tags:
- Quarterly Preview
- Review [[Yearly Planning]]
- My biggest wins
- Process on annual goals for this quarter (% successful)
- Overall, what worked and what didn’t?
- What will you keep doing?
- What will you start doing?
- What will you improve?
- What will you stop doing?
- [[tools]]
- [[Find and replace]]
- [[KANBAN BOX]]
- {{kanban}}
- indent once for column title
- and another item
- this could be a great way to write an articles / thesis - very easy to read
- clock on the block to open the side bar - and see furtherinfo
- I was in column 2, now I am in column 1
- This is a second collum
- I was in column 1, now I am in column 2 - just click and drag
- indent again for items to put in list (ps look at the next level)
- stuff inside
- A third column
- more stuff
- Daily Log
- Designer:: [[Mark Robertson]]
- Twitter:: [@calhistorian](https://twitter.com/calhistorian)
- Special Features::
- #[[Attributes]] | #[[Query]] | #[[TODO/DONE]]
- 
- Code::
- Last updated:: [[July 1st, 2020]]
- #[[Morning Review]]
- #[[Weather Report]]
- Location:: #Home
- Weather Summary:: Weather Data (Summary)
- Conditions:: Weather Data (Condition) with Weather Data (Precipitation Chance)
- H/L Temp:: High - Weather Data (High), Low - Weather Data (Low)
- #[[Sleep Log]]
- Sleep Time::
- Sleep Quality::
- #[[Morning Pages]]
- #[[Morning Reflection]]
- {{[[query]]: {and: [[-1 Day]] [[Evening Pages]] {not: [[query]]}}}}
- [[Who benefits from your work?]]
- [[What am I grateful for?]]
- [[What do I want the day’s highlight to be?]]
- [[Daily Affirmations]]
- [[What am I think of?]]
- #[[Open Questions]]
- {{[[query]]: {and: [[Question]] [[TODO]] {not: {or:[[query]] [[DONE]] [[Templates]]}}}}}
- #[[Calendar]]
- #Family
- Family Events
- #Professional
- #[[Pedagogical Reflections]]
- #[[Daily Notes]]
- #[[Action List]]
- {{[[TODO]]}} Process Linked and Unlinked Mentions
- {{[[query]]: {and: [[TODO]] [[Action]] {not: {or: [[query]] [[Subtask:]]}}}}}
#[[Upcoming]]
- {{[[query]]: {and: [[TODO]] [[Scheduled]] {not: {or: [[query]] [[Action]]}} {between: [[Today's Date]] [[+2 Weeks]]}}}}
- #[[Evening Review]]
- {{[[TODO]]}} #[[Evening Pages]]
- [[Amazing things that happened]]
- [[What I have learned]]
- [[What could I have done better?]]
- #[[Capture Inbox]]
- The Roam Team
- Contact
- Name::
- Email::
- Company::
- Phone::
- Choice
- {{[[TODO]]}} [[Choice]]
- Context::
- Options::
- Decision::
- Daily agenda Updated
- [[Daily agenda]]
- {{[[kanban]]}}
- All day
- 00:00
- 01:00
- 02:00
- 03:00
- 04:00
- 05:00
- 06:00
- 07:00
- 08:00
- 09:00
- 10:00
- 11:00
- 12:00
- 13:00
- 14:00
- 15:00
- 16:00
- 17:00
- 18:00
- 19:00
- 20:00
- 21:00
- 22:00
- 23:00
- [[Need to plan]]
- An Engineering Problem Solving Process
- ^^An engineered, systematic approach to problem solving can be invaluable in solving problems, capturing knowledge, and discovering solutions.^^ An approach that I suggest involves starting with a simple outline consisting of the following sections (as appropriate - sometimes it makes sense to combine or eliminate certain sections). Feel free to delete this paragraph as you fill out the template.
- Problem Statement:: This should be a simple 1-2 sentence (no more!) statement of the problem. Do not describe symptoms. To the best of your ability, reduce the problem to its bare essence here. Over time this statement may be refined. A key principle is that ^^if you cannot state your problem concisely, you probably don't know what it is and you almost certainly cannot communicate it effectively to others^^.
- Description:: Here you provide a detailed description of the problem.
- Describe why you want to solve this problem (if you do) and what, if anything, makes this problem particularly hard. This can be particularly valuable if you are considering writing new code. Sometimes after further evaluation you will realize it is better to use an alternative or take no action at present.
- Sometimes it is worth capturing the ideas but saving the solution for another time.
- Given:: List all things that have been provided to you, including facts, stories, etc.
- Required:: State all of the requirements to be met to provide a solution to the problem.
- Functional/User (Required): These are the things that a user must be able to do to solve the problem. They may be stated as user stories such as "As a user, I can do X so that Y." If you do not state who can do what and why, then the requirement is suspect.
- Nonfunctional/Technical: Technical requirements often revolve around criteria such as scaling, cost, operations, etc. I often recommend a different page for technical requirements as it is easy for problem solvers (especially developers) to move towards a technical solution (a form) prior to actually understanding the problem to be solved (the function).[1](((https://en.wikipedia.org/wiki/Form_follows_function)))
- Knowns:: State all the things you know about the problem. Provide links, references, citations, etc. as needed to trace the lineage of each known item.
- Unknowns:: What don't you know about the problem. Here you will try to anticipate the questions that you need to answer to better understand the problem.
- Alternative presentations of knowns and unknowns could include a Johari Window[2](((https://en.wikipedia.org/wiki/Johari_window))) or a "Rumsfeld-esque"[3](((https://en.wikipedia.org/wiki/There_are_known_knowns))) categorization.
- {{[[table]]}}
-
- Known to Self
- Not Known to Self
- Known to Others
- Arena
- Blind Spot
- Not Known to Others
- Facade
- Unknown
- Assumptions:: What do you believe to be true regarding this problem?
- Alternatives:: What alternatives already exist to this problem? What do you do now to solve the problem? What happens if you do nothing? If this is a technical solution, can an existing solution be used?
- Solution:: Based on all of the previous information, provide the solution to the problem. This could be a technical solution, process, new product, etc. Note that if multiple solutions are provided (suppose you provide multiple product offerings to solve the same problem) it is perfectly appropriate to have subpages for each solution.
- Recommendations:: An alternative to (or something to be used in conjunction with) a solution is one or more recommendations. Again, if appropriate recommendations can merit their own subpages.
- Hickey Design Process
- [[Problems]]
- Take wants/needs and translate them into problems
- [[Symptoms]]
- Symptoms of the problems
- [[Requirements]]
- [[Knowns]]
- What I know how to do
- [[Unknowns]]
- What I don't know how to do
- [[Domain-side]]
- Business requirement
- [[Solution-side]]
- Technical constraints (it has to compile to JS, for example)
- [[Unstated]]
- Things that everyone wants the system to avoid
- Doesn't crash, use too much memory, require too much energy, are examples of unstated requirements
- [[Solutions]]
- Solution A
- Benefits::
-
- Tradeoffs::
-
- Costs::
-
- Problem fit::
-
- Solution B
- Benefits::
-
- Tradeoffs::
-
- Costs::
-
- Problem fit::
-
- Course
- **[Course name](course link) by `[[Author Name]]` __price__**
- 2-3 sentence blurb describing the course
- Theme
- `theme name`
- Screenshots::
- Last updated::
- Designer:: name
- Twitter:: [link to bio]()
- Love this theme? Say thanks via [PayPal]() (and/or other payment service)
- Special Features::
- Code::
- {{[[roam/css]]}}
- ```css
```
- Plugin
- `plugin_name`
- Info::
- Must include GIF and/or video of usage
- Link::
- Getting started::
- Installation, activation and configuration
- Tutorials::
-
- Reference::
- Developer::
- Twitter::
- Love this plugin? Say thanks via [Paypal]()
- Code::
- Browser Extension
- `browser_extension_name`
- Info::
- Must include GIF and/or video of usage
- Link::
- Getting started::
- Installation, activation and configuration
- Tutorials::
-
- Reference::
- Developer::
- Twitter::
- Love this plugin? Say thanks via [Paypal]()
- Coaching
- `Course Author Name`
- Info::
- Website::
- Areas of specialty::
- Contact::
- Price::
- Docs #.h
- {{[[TODO]]}} Introduction (few bullets) and some GIFs
- Roam Team Videos::
- {{[[TODO]]}}
- Articles::
- {{[[TODO]]}}
- Community Videos::
- {{[[TODO]]}}
- Key Commands::
- Video/article #.h
- {{[[TODO]]}} [Article link]() or {{[[video]]: }}
- Features mentioned::
- Page refs to features
---
# Diagram
- Diagrams are an extra dimension of the blocks in your graph. You can lay your thoughts out in a 2D infinite canvas, group and connect ideas. Every node (or group) in the diagram corresponds to a block in your graph. Any blocks used in a diagram will show up in references section for that block.
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FV_WiYRS5RY.mov?alt=media&token=161c5af3-9e45-44a8-8575-907c3abfc023}}
- To create a diagram
- Type `/` then search for `diagram` and hit enter
- Alternatively you can type or copy and paste`{{diagram}}` into a new block
- Examples::
- {{diagram: How to Do Great Work by Paul Graham (mapped by @jasonshen)}}
- Superlinear returns
- At least it'll be on a fascinating topic
- Show up in successive versions
- Develop your own taste
- **Work on a project of one's own**
- Don't wait for a "big break"
- Have the confidence to cut
- **Work hard**
- Break rules
- Lots of work is hard
- Fear of failure
- Deep interest/curiosity
- Fear of hard work
- Prerequisites
- Avoid per-project procrastiation
- Optimize for interestingness
- Chase outlier ideas
- Gatekeeper rejection is not great work
- just try to do something amazing
- Make things YOU want
- Your best job → distinctiveness
- Who have surprising insights
- Don't worry about "style"
- "If at first you don't succeed: either try again, or backtrack and try again
- Learn fundamentals
- Natural aptitude
- doing something important so well that you expand people's ideas of what's possible
- Notice gaps in the field
- **Nurture your morale**
- Laying the groundwork
- **Great work:**
- So what
- Modesty
- Very ambitions
- **Do work that compounds**
- What holds people back
- Scope to do great work
- Are novel yet obvious
- Don't burn out
- "Am I working on what I most want to work on?"
- Get to the frontiers
- Good ideas
- No precise definition
- Come from prolificness
- Don't have to tell people your intentions
- Extraordinary growth may justify extraordinary effort
- "Stay upwind"
- **Seek out the best colleagues**
- **Make things people want**
- {{diagram:@visakan's Memex}}
- **Introspect.** If you don’t
know what you want, your
wants will be decided for
you, by people and forces
who don’t have your best
interests at heart.
- **Beware assholes.** Learn to
identify assholes, and to lead
people in coordinating
effectively to diminish the
costs of their actions.
- **Develop your taste.** Taste is the most
precious and important thing in the world.
People with great taste create a
disproportionate amount of value in the
world, but the world we live in
disincentivizes the development of taste.
- **Do not dehumanize
people**. People are
people. Do not demonize
or pedestalize them.
- **Be honest
about what
you don’t
know.**
- **Be kind.**
- **Own your shit and fix
it.** You will never be
perfect, but you can
always be better than
you were yesterday.
- Aggressively seek
out agreements,
particularly with
outgroup.
- everything is connected
- **Be more sensitive.** In
every sense. It helps
with everything.
- If you don’t decide,
you’re letting
somebody else
decide.
- Real progress
happens at the
bottlenecks.
- The public is insufficiently
educated on how to be a good
public.
- **Confront your fears headon.** Most fears are outdated,
obsolete, and can be
dismantled with a little work
- **Find out how you are
fucked up.** “They fuck you
up your mom and dad, they
don’t mean to but they do…”
You inherited all sorts of
bullshit that you don’t even
know.
- **Appreciate
incentives.**
- **Recognize that
your mental
models are
flawed.** Everybody
inherits a flawed,
imperfect system.
- everything is a remix,
so don’t worry about
being “original”
- Everything is vague to a
degree you do not
realize until you attempt
to make it precise.
- **Have stuff to look
forward to.** You can’t
engineer happiness,
but you sure can
engineer excitement.
- **Learn project
management.**
Everything is a
project.
- **The main thing
holding you back
is the way that
you’re thinking.**
- **Have fun. **You were born
crying. You should die
laughing.
- **Take notes.** Keeping a journal of your
own thoughts, ideas and beliefs over
time will teach you things about yourself
you cannot learn any other way.
- **It’s not about you.**
- **Prioritize.**
There’s an
infinite set of
things to do.
What’s the
most important
thing? Do that.
- **Do not be afraid of
being sad or wrong.**
- the point of strength
is to nourish others.
- **Strategize**. You have
limited time and limited
resources.
- **Continue.** Life will kick
your ass. Dont’ give up,
don’t give in. Get up and
try again.
- **Be so prolific you don’t
recognize yourself.** This is
the most effective way to
develop your ability to gratify
your own taste.
- **Be Economically Useful.**
The world is not kind to
those who cannot create
value in the marketplace.
- **Seek to learn &
understand
everything.** It can
never be done, but
it’s always worth
trying.
- **Make Friends.** It is
dangerous to go alone.
You heal yourself by
helping others. Be kind
and serve others. We can
do more together than we
can do alone.
- **One must imagine Sisyphus
LOL-ing.** Existence is absurd, and
laughter is the only reasonable
response to an absurd universe.
- **Articulate your
assumptions and
question them.** If you
identify a bad one, you
can get rid of it and have
a marginally better life,
instantly
- the tool should
fit the user
- Narcissists ruin
self-love for the
rest of us.
- **Fiddle with it.**
Mess around.
It’s the most
natural way of
learning
things.
- all advice is context dependent to a
degree most do not realize until
they encounter a different context
- **We all want to be loved.**
- **Indulge your curiosity.**
Following your nose will lead
you to interesting places, and
in the process you will become
an interesting person.
- safe spaces are for
nurturing, not coddling.
- **Ask clarifying questions.**
- {{diagram:Dune Mindmap: Paul Atreides}}
- Fate and Prophecy
- Survival
- Secondary Plots
- Kaitain
- Planets
- Lady Jessica
- Betrayal of House Atreides
- Primary Plots
- Baron Vladimir Harkonnen
- Caladan
- Themes
- House Corrino
- Duncan Idaho
- Atreides' Move to Arrakis
- Characters
- House Harkonnen
- Stilgar
- The Spice Melange Trade
- Paul's Fremen Integration
- Fremen Rebellion
- Jessica's Bene Gesserit Agenda
- Houses
- Duke Leto Atreides
- Rise of Paul Atreides
- Giedi Prime
- House Atreides
- Religion and Mysticism
- Plots
- Gurney Halleck
- Power and Politics
- Paul Atreides
- House Vernius
- Chani
- Arrakis
- Ecology and Environment
- {{diagram: David Bowie: Aerial Silk Act - Moodboard}}
- 
- Scorpion Pose
- 
- No Hands Middle Split
- Full-release single twist
- Russian Climb
- Triple Twist Open Drop
- **Vibe:**
{{[[video]]: https://www.youtube.com/watch?v=_ZtHxP4EMV0}}
- Croissant Climb
- 
- Double-Sided Knee Climb
- Funky Climbs
- Flexible Poses
- S-Wrap Bridge Pose
- Helicopter
- Full-release Front Salto
- 
- Possible Aerial Silk Colors
- Costumes
- Dynamic Elements
- Sequence on the Silks
- Makeup
- Thinner, bold lips
- Pigmented cheekbones
- Bright eyeshadow: orange, red, blue
- **Music Choice:**
{{spotify: https://open.spotify.com/track/3ZE3wv8V3w2T2f7nOCjV0N?si=2ecb0b31c20d41f3}}
- {{diagram: EA Memespace}}
- Cause Areas
- Nuclear Warfare
- Existential Risk
- Global Health
- Vaccine Development
- Malaria
- AI Existential Risk
- Misalignment
- Losing Control of AGI
- Animal Welfare
- Wildlife Welfare
- Animal Abuse
- Zoos
- Factory Farming
- Animal Testing
- Biosecurity
- Bioweapons
- Pandemics
- Poverty
- Climate Change
- Eliminating Conflict
- EA
- Short Termism
- Longtermism
- ITN Framework
- Neglectedness
- Impact
- Cost effectiveness/
tangible
- Policy
- EA Literature
- LessWrong
- Do Good Better
- Twitter
- The Precipice
- Eliezer Yudkowsky
- Eigenrobot
- Slate Star Codex
- Gwern
- Roam Team Videos::
- Archived ⬇️ (old version of the diagram feature)
- Diagrams in Roam Research by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=RD_Gi8EQGVQ}}
#[[Diagram]]
- Articles::
- Archived ⬇️ (old version of the diagram feature)
- [How to build diagrams in Roam Research](https://nesslabs.com/roam-research-diagrams) by [[Anne-Laure Le Cunff]] #Diagram
- Community Videos::
- Archived ⬇️ (old version of the diagram feature)
- Drawing and Diagrams in Roam Research by [[Chester]]
- {{[[video]]: https://www.youtube.com/watch?v=-q5JRaZbcrA}}
- Also see [[Mermaid Diagrams]]
---
# Roam-specific :q additions
- If you're a dev (or even if not!), you can use our very flexible query features to do the kinds of specialized queries you want
- **Ways to use it**
- use our `:q` query blocks feature inside Roam
- Teaser into the revamped `:q`
- 
- you can checkout examples in [[Examples of :q query blocks]]
- via our frontend API: [window.roamAlphaAPI.data.q](https://roamresearch.com/#/app/developer-documentation/page/SI3FNt3EQ)
- via our backend API: [/api/graph/{graph-name}/q](https://roamresearch.com/#/app/developer-documentation/page/vbEj2bZql)
- All but the backend API can use the additions we have detailed below
Also note that below we will talk about and have examples for `:q` primarily but
- **Custom symbols**
- Description:: new special words/symbols are available to represent dates which you can use directly in the `:where` clause
- Some examples:
- Example:: get current page and how many backrefs it has (this uses `current/page-title` )
- the query
- ```clojure
[:find ?p (count ?b)
:where
[?p :node/title current/page-title]
[?b :block/refs ?p]]```
- :q ```clojure
[:find ?p (count ?b)
:where
[?p :node/title current/page-title]
[?b :block/refs ?p]]```
- Example:: get additions to changelog in current calendar month (this uses the special symbols `ms/this-month-start` and `ms/this-month-end` )
- How this works:
- to minimize the number of results, we're also nesting results under parent results
- we're also sorting via `?t` to get recent results at top (you can hide this column and keep sorting!)
- the query
- ```clojure
[:find ?b ?t
:where
[?changelog-p :node/title "Change Log"]
[?b :block/page ?changelog-p]
[?b :create/time ?t]
[(<= ms/this-month-start ?t ms/this-month-end)]]```
- :q ```clojure
[:find ?b ?t
:where
[?changelog-p :node/title "Change Log"]
[?b :block/page ?changelog-p]
[?b :create/time ?t]
[(<= ms/this-month-start ?t ms/this-month-end)]]```
- Reference:: the special symbols available in `:q`
- `current`
- **Usage notes:** Specify the location of the query or the block/page open on the main window
- `current/block-id`
- returns the :db/id for the block which has the `:q` query
- It can be used directly in the first place in a where clause
- for example `?e` in `[?e ?a ?v]`
- `current/page-id`
- returns the :db/id for the page whose child block has the `:q`
- It can be used directly in the first place in a where clause
- for example `?e` in `[?e ?a ?v]`
- `current/page-title`
- returns the title of the page where the `:q` exists
- `current/block-uid`
- returns the :block/uid for the block which has the `:q` query
- `current/page-uid`
- returns the :block/uid for the page whose child block has the `:q`
- `current/main-window-page-title` **NEW ✨**
- Returns the :node/title for the page open in the main window. If you're zoomed into a block, we get it's parent page's node/title
- can be useful for queries you open in the sidebar. The query gets refreshed when page open on the left side (main window changes)
- `current/main-window-page-uid` **NEW ✨**
- Returns the :block/uid for the page in the main window. If you're zoomed into a block, we get it's parent page's block/uid
- can be useful for queries you open in the sidebar. The query gets refreshed when page open on the left side (main window changes)
- `current/main-window-page-id` **NEW ✨**
- returns the :db/id for the page in the main window. If you're zoomed into a block, we get it's parent page's :db/id
- It can be used directly in the first place in a where clause
- for example `?e` in `[?e ?a ?v]`
- can be useful for queries you open in the sidebar. The query gets refreshed when page open on the left side (main window changes)
- `current/main-window-block-uid` **NEW ✨**
- returns the :block/uid for the zoomed in block (or page!) open in the main window
- can be useful for queries you open in the sidebar. The query gets refreshed when page open on the left side (main window changes)
- `current/main-window-block-id` **NEW ✨**
- returns the :db/id for the zoomed in block (or page!) open in the main window
- It can be used directly in the first place in a where clause
- for example `?e` in `[?e ?a ?v]`
- can be useful for queries you open in the sidebar. The query gets refreshed when page open on the left side (main window changes)
- `ms`
- **Usage notes: ** These return time in milliseconds. Primarily for use with attributes like `:create/time`/`:edit/time`
- for use with
- attributes like `:create/time`/`:edit/time`
- or rules `(created-between ?t1 ?t2 ?b)`/`(edited-between ?t1 ?t2 ?b)`)
- `ms/today-start`
- equivalent to `:ms/+0D-start`
- `ms/today-end`
- equivalent to `:ms/+0D-end`
- `ms/this-week-start`
- equivalent to `:ms/+0W-start`
- `ms/this-week-end`
- equivalent to `:ms/+0W-end`
- `ms/last-week-start`
- equivalent to `:ms/-1W-start`
- `ms/last-week-end`
- equivalent to `:ms/-1W-end`
- `ms/next-week-start`
- equivalent to `:ms/+1W-start`
- `ms/next-week-end`
- equivalent to `:ms/+1W-end`
- `ms/this-month-start`
- `ms/this-month-end`
- `ms/this-quarter-start`
- `ms/this-quarter-end`
- `ms/last-quarter-start`
- equivalent to `:ms/-1Q-start`
- `ms/this-year-start`
- `ms/this-year-end`
- `ms/+1D-end`
- `ms/-5D-start`
- `ms/+1D-start`
- `ms/+1D-end`
- `ms/+1W-end`
- not equal to `ms/+7D-end`
- notably not the same as `:ms/+7d-end`
- is actually the end of next week
- `ms/+1M-start`
- next month's start millisecond
- might be 31 days later or even 1 day later
- `ms/+1Q-start`
- next quarter's start millisecond
- might be 90 days later or even 1 day later
- `ms/+1Q-end`
- `ms/+0Y-start`
- not equal to `ms/+365D-start`
- first millisecond of Jan 1 for this year
- `ms/+0Y-end`
- last millisecond of Dec 31 for this year
- `ms/=2025-01-01-start`
- `ms/=2025-12-31-end`
- `dnp`
- **Usage notes:** These resolve to page title (i.e. `:node/title`) for the relevant daily note page
- `dnp/today`
- `dnp/yesterday`
- `dnp/tomorrow`
- `dnp/-1D`
- `dnp/+1D`
- `dnp/this-week-start`
- `dnp/this-week-end`
- `dnp/this-month-start`
- `dnp/this-quarter-start`
- `dnp/this-year-end`
- `dnp/=2025-01-01`
- resolves to "January 1st, 2025"
- **Supported inbuilt rules**
- Description::
- Rules are packaged logic which can be used to more easily do common operations
- more technical detail:
- Datomic Rules reference: https://docs.datomic.com/query/query-data-reference.html#rules
- what we're doing for :q inbuilt rules is providing a set of rules that we find useful when writing queries
- Right now, we do not support custom rules/ability to pass your own rules
- If you have the idea for a rule you think will be useful, please let us know!
- An example:
- Example:: query to get backrefs of a page (in this example: [[Quality of Life Improvements]]) created by [a specific user]([[Baibhav Bista]]) in the current calendar year ((This uses the rules `(refs-page ?page-title ?b)`, `(created-by ?user-name ?block)`, and `(created-between ?t1 ?t2 ?b)`))
- the query
- ```clojure
[:find ?b ?t
:where
[?b :block/uid ?uid]
(refs-page "Quality of Life Improvements" ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]
(created-between ms/this-year-start ms/this-year-end ?b)]```
- in action ...
- :q ```clojure
[:find ?b ?t
:where
[?b :block/uid ?uid]
(refs-page "Quality of Life Improvements" ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]
(created-between ms/this-year-start ms/this-year-end ?b)]```
- How this works:
- this uses the rules `(refs-page ?page-title ?b)`, `(created-by ?user-name ?block)`, and `(created-between ?t1 ?t2 ?b)`
- After getting the query, using the UI, we're also sorting in descending order of `?t`
- (so that latest is at the top)
- 
- **Reference:** The rules:
- `(created-by ?user-name ?block)`
- `(edited-by ?user-name ?block)`
- `(by ?user-name ?block)`
- `(refs-page ?page-title ?b)`
- `(block-or-parent-refs-page ?page-title ?b)`
- `(created-between ?t1 ?t2 ?b)`
- `(edited-between ?t1 ?t2 ?b)`
- `(in-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- `(refs-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- `(in-or-refs-dnp-between ?start-dnp ?end-dnp ?b)` **NEW ✨**
- `(in-dnp ?dnp ?b)` **NEW ✨**
- `(refs-dnp ?dnp ?b)` **NEW ✨**
- `(in-or-refs-dnp ?dnp ?b)` **NEW ✨**
- ---
- **NEW ✨**
---
# Themes
- [[.--]]
- **[Request to be featured](https://roamresearch.typeform.com/to/g5W8uCqz)**
- **Applying Custom Themes to you Graph by [[Conor White-Sullivan]]**
- {{[[video]]: https://youtu.be/UY-sAC2eGyI }}
- ****Team Favorites****
- **[["Advaita" aka Better Dark Age / Dracula Pro]]**
- Screenshots::
- Dracula Pro
- 
- Last updated:: [[December 30th, 2020]]
- Designer:: [[Abhay Prasanna]]
- Twitter:: [@AbhayPrasanna](https://twitter.com/AbhayPrasanna)
- Love this theme? Say thanks via [PayPal](https://www.paypal.me/abhayprasanna) or Venmo @Abhay-Prasanna (all proceeds reinvested in the Roam community!)
- Special Features::
- Very responsive to CSS changes (update within 24 hours)
- Multiple Dark Colorsets
- Material Palenight
- 
- Dark Night
- 
- Shades of Purple
- 
- Switches to Light mode based on OS setting
- 
- Masonry add-on
- Pages stack in columns in sidebar
- 
- Rainbow indents add-on
- Colorful shadowed indent levels
- 
- Code::
- {{[[roam/css]]}}
- ```css
@import url('https://abhayprasanna.github.io/material-palenight-roam.css');
@import url('https://abhayprasanna.github.io/rainbow-indent.css');
@import url('https://abhayprasanna.github.io/dark-masonry.css') (min-width:700px);```
- Replace "dark-age-dracula" with the following for other colorsets:
- material-palenight-roam *
- dark-night-roam *
- shades-of-purple *
- Various optional adjustments I use in my own theme (annotated in code):
- {{[[roam/css]]}}
- ```css
@import url('https://abhayprasanna.github.io/optional.css');```
- **[[Railscast]]**
- Screenshots::
- 
- Last updated:: [[January 6th, 2021]]
- Designer:: [[Jeff Harris]]
- Twitter:: [@jeffharrissays](https://twitter.com/jeffharrissays)
- Love this theme? Say thanks via [Cash App](https://cash.app/$jeffharris) or [paypal](https://paypal.me/jmharris903?locale.x=en_US)
- Special Features::
- Robust variables for customization
- {{[[roam/css]]}}
- ```css
:root {
/* Roam default variables */
--primary-color: #137cbd;
--s1: 8px;
--background-color: #e1e8ed;
/* Primary fonts */
--main-font: 'Inter', sans-serif;
--main-font-color: #999;
--main-font-size: 14px;
--code-font: 'Source Code Pro', 'Courier New', Courier, monospace;
--code-font-color: #6d9cbe;
--code-font-size: 0.9rem;
--caret-color: #0080ff;
/* Fonts */
--alias-bg: transparent;
--alias-font-color: #fecf2b;
--attr-font-color: rgba(17, 137, 189, 0.65);
--block-ref-bg: none;
--block-ref-border: rgba(254, 207, 43, 0.6);
--block-ref-font-size: 1em;
--block-ref-hover: #eb9854;
--block-ref-hover-bg: #111;
--breadcrumb-bg: transparent;
--breadcrumb-color: #5c7080;
--breadcrumb-font-size: 13px;
--breadcrumb-line-height: 0.85em;
--calculation-color: #ff6000;
--db-menu-bg: #333;
--db-menu-border: #3d3d3d;
--db-menu-header: #5c7080;
--db-menu-item: #eb9854;
--db-title-font-color: #eb9854;
--db-title-hover: rgba(167, 182, 194, 0.3);
--dialog-bg: #333;
--dialog-font-color: #eee;
--emphasis: #fc5963;
--external-link-color: #8dbb40;
--h1-font: var(--main-font);
--h1-font-color: #1189bd;
--h1-font-size: 2.25em;
--h1-font__link--color: var(--page-link-color);
--h2-font: var(--h1-font);
--h2-font-color: #1189bd;
--h2-font-size: 1.625em;
--h2-font__link--color: var(--page-link-color);
--h3-font: var(--h1-font);
--h3-font-color: #1189bd;
--h3-font-size: 1.2rem;
--h3-font__link--color: var(--page-link-color);
--hashtag: #e9892475;
--highlight-background-color: #008aff5e;
--highlight-font-color: #bbb;
--highlight-link-color: #ff6000;
--left-sidebar-font-color: #1189bd;
--left-sidebar-font-color-hover: #e98924;
--left-sidebar-font-size: 1rem;
--left-sidebar-shortcuts-color: var(--left-sidebar-font-color);
--left-sidebar-shortcuts-font-size: 1rem;
--left-sidebar-shortcuts-title-color: var(--left-sidebar-font-color);
--page-brackets: rgba(228, 124, 67, 0.25);
--page-link-color: #eb9854;
--page-link-namespace-color: #ebd454;
--popover-font-color: #e98924;
--popover-bg: #333;
--ref-count-font-size: 0.8em;
--right-sidebar-font-color: var(--main-font-color);
--right-sidebar-link-color: #eb9854;
--right-sidebar-bg: #323232;
--right-sidebar-masonry-bg: var(--body-bg);
--right-sidebar-masonry-outline: #3d3d3d;
--right-sidebar-section-border-color: #e9892475;
--search-bg: #252525;
--search-body-font-color: #8a9ba8;
--search-font-color: #af671c;
--search-new-page-color: #8dbb40;
--search-outline: #e9892475;
--search-selected-row: #4c4c4c;
--strong: #508bb5;
--tag-font-color: #777;
--tag-font-color-hover: #fff;
--tag-hover-bg: #e98924;
--tag-padding: 0.071428571em 0.428571429em 0.214285714em;
--tag-radius: 2em;
/* Backgrounds and objects */
--block-highlight: #00588e;
--block-highlight-current: rgba(255, 255, 255, 0.05);
--block-highlight-bg: #312c28; // This is the Mentions background highlight color
// --body-bg: #232323;
--body-bg: #2c2c2c;
--bullet: rgba(225, 117, 28, 0.3);
--bullet-closed: rgba(225, 117, 28, 1);
--bullet-closed-right-sidebar: var(--bullet-closed);
--bullet-outline: #404040;
--bullet-outline-highlight: #ff9500;
--bullet-outline-hover: #ff9500b3; //recommend this be 70% of --bullet-outline-highlight
--bullet-position: 4px;
--bullet-version: #137cbd;
--checkmark-border: #137cbd;
--checkmark-bg: #555;
--checkmark-color: #137cbd;
--code-bg: #002b36;
--datepicker-bg: transparent;
--datepicker-day-wrapper: #d9822b7a;
--datepicker-font-color: var(--popover-font-color);
--datepicker-select-bg: #444;
--hr: rgba(225, 117, 28, 0.5);
--icon-bg-hover: rgba(167, 182, 194, 0.3);
--icon-color: #e78924;
--icon-color-hover: #e78924;
--inline-search-bg: #333;
--inline-comment-bg: transparent;
--inline-comment-bg-hover: var(--reference-item-bg);
// --left-sidebar-bg: #2b2b2b;
--left-sidebar-bg: #323232;
--left-sidebar-hover-bg: #1f1f1f;
--reference-item-bg: #d8ac6e1a; // JH: Railscast uses 1 semi-transparent color for all three bg values
--reference-item-bg-2: #d8ac6e1a;
--reference-item-bg-3: #d8ac6e1a;
--section-border-color: #e9892475;
--select-bg: #232323;
--topbar-bg: var(--body-bg);
--topbar-border-color: #333;
/* Misc */
--pages-delete-bg: #222; // modal variable
--pages-delete-border-color: #d8e1e8; // JH: modal variable, New variable TODO add to body .delete-all-dialog-items
--pages-header-row-bg: #262626;
--pages-header-row-font-color: #bfccd6;
--pages-mentions-bg-empty: #3a3a3a;
--pages-mentions-color: #ff6000;
--pages-mentions-color-empty: #737373;
--pages-row-highlight: #292929;
--pages-search-bg: #3a3a3a;
--pages-search-outline: #e9892475;
// --pages-search-outline: var(--search-outline); //no longer exists in Roam, add if needed for Theme or replace with inherit or initial?
--pages-table-border: #2f373d;
--pages-sorted-color: #508bb5;
--table-border: #444;
--table-font-size: 0.85rem;
--kanban-board-bg: #333333;
--kanban-card-bg: #555555;
--kanban-card-font-color: #6d9cbe;
--kanban-column-bg: #454545;
--kanban-column-font-color: #e98924;
--encrypted-font-color: #ff6000;
--encrypted-bg: #222;
--pomodoro-bg: transparent;
--pomodoro-color: #fc5963;
--pomodoro-border: #fc596370;
--blockquote-font-color: rgba(109, 156, 190, 0.89);
--blockquote-font-size: 14px;
--blockquote-border-color: #30404d;
--blockquote-bg: none;
--blockquote-cite: #777;
--emoji-bg: #2d2d2d;
--emoji-border: rgba(225, 117, 28, 0.4);
--emoji-color: #aaa;
--no-query-results: 'Query returned no results';
--no-query-results-color: #fc5963;
--query-results-border: #f2c98f1a;
--q1: #50b2c0;
--q2: #c5d86d;
--q3: #ff6b6b;
--q4: #ca7d4a;
/* Scrollbar settings - to disable set values to none */
--scrollbar-thumb: #323232;
--scrollbar-track: rgba(153, 153, 153, 0.1);
/* Saving icon colors */
--saving-local: #99280f;
--saving-remote: #d9822b;
--synched: #0f9960;```
- Customize query display
- MINIMIZE QUERIES: add any one of the following tags before the beginning of your query (in the same block): #min-title = hides the page reference link / page title #min-con = hides the contextual reference information (breadcrumbs) #minimal = hides both the title and the context #min-q = hides the query string, similar to legacy behavior #min-all = hides everything — title, context, and query string
- Expanded Bullet collapse
- Fullwidth search bar
- Code::
- {{[[roam/css]]}}
- ```css
@import url('https://jmharris903.github.io/Railscast-for-Roam-Research-Theme/RailsRoam.css');```
- **[[Better Roam Research]]**
- Screenshots::
- If your OS is in Light Mode:
- 
- If your OS is in Dark Mode:
- 
- Designer:: [[Fabrizio Rinaldi]]
- Twitter:: [@linuz90](https://twitter.com/linuz90)
- Love this theme? Say thanks via [Paypal](https://www.paypal.me/linuz90)
- Special Features::
- #[[Dark Mode]] but only if your OS is set to dark!
- Code::
- Last updated [[June 4th, 2020]]. If it's been a while, you can check [Github](https://github.com/linuz90/better-roam-research) for the latest version.
- {{[[roam/css]]}}
- ```css
:root {
--font-size: 15.5px;
--border-color: rgba(0, 0, 0, 0.08);
--subtle-border-color: rgba(0, 0, 0, 0.05);
--main-background-color: hsl(210, 9%, 98%);
--body-background-color: #ffffff;
--reference-item-background: hsl(0, 0%, 99%);
--brackets-color: rgba(0, 0, 0, 0.25);
--empty-text-color: hsl(203, 12%, 75%); }
.rm-title-untitled,
#block-input-ghost > span,
textarea::placeholder {
color: var(--empty-text-color) !important; }
body,
div,
textarea,
.level2 {
font-family: 'Quattro', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif !important; }
iframe {
border: none !important; }
.loading-astrolabe {
position: absolute !important;
width: 80px !important;
height: 80px !important;
opacity: 0.3 !important;
top: calc(50% - 40px) !important;
left: calc(50% - 40px) !important; }
#roam-sidebar-logo {
display: none !important; }
body,
#app {
background: var(--main-background-color) !important; }
.roam-center {
border-left: 1px solid var(--border-color) !important;
border-top: 1px solid var(--border-color) !important;
border-right: 1px solid var(--border-color) !important;
border-radius: 6px;
box-shadow: 0px 2px 14px rgba(0, 0, 0, 0.04) !important;
overflow: visible !important;
background: var(--body-background-color) !important;
margin-top: 10px;
margin-right: 16px;
margin-left: 16px; }
.roam-center > div:first-child {
padding-right: calc(0.5 * (100% - 820px)) !important;
padding-left: calc(0.5 * (100% - 820px)) !important; }
.roam-topbar {
background: var(--main-background-color) !important; }
.roam-topbar input#find-or-create-input {
box-shadow: none !important;
border: 1px solid var(--border-color) !important; }
.roam-body,
.roam-topbar,
#right-sidebar,
.roam-sidebar-container {
background: transparent !important; }
#right-sidebar {
border: none !important;
transition: none !important;
overflow: hidden !important; }
#right-sidebar h1 {
font-size: 18px !important; }
#right-sidebar #roam-right-sidebar-content > div[style] {
border-bottom: 1px solid var(--subtle-border-color) !important; }
#right-sidebar .hoverparent,
#right-sidebar .react-resizable {
max-width: 100% !important; }
#right-sidebar .hoverparent img,
#right-sidebar .react-resizable img {
max-width: 100% !important; }
.rm-page-ref-tag {
color: #9099a1 !important; }
span.checkmark {
top: -2px; }
.rm-level1 div,
.rm-level1 textarea {
font-size: 22px !important;
line-height: 1.5 !important; }
.rm-level2 div,
.rm-level2 textarea {
font-size: 20px !important;
line-height: 1.5 !important; }
.rm-level3 div,
.rm-level3 textarea {
font-size: 18px !important;
line-height: 1.5 !important; }
.level2 {
font-weight: inherit !important; }
.roam-log-container .roam-log-page {
border-top: 1px solid var(--subtle-border-color) !important; }
.roam-log-container .roam-log-page:first-child {
min-height: 0 !important;
border-top: none !important; }
.rm-reference-item {
background: var(--reference-item-background) !important;
border: 1px solid #f0f0f0 !important;
border-radius: 6px !important;
padding: 8px 10px 8px 2px !important; }
.rm-reference-item .rm-block-text {
font-size: var(--font-size) !important; }
.CodeMirror {
font-size: 13px !important; }
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .log-button:hover,
.roam-body
.roam-app
.roam-sidebar-container
.roam-sidebar-content
.starred-pages-wrapper
.starred-pages
.page:hover {
color: inherit !important;
background-color: transparent !important; }
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .log-button,
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .starred-pages-wrapper,
.roam-body
.roam-app
.roam-sidebar-container
.roam-sidebar-content
.starred-pages-wrapper
.starred-pages
.page,
.bp3-minimal > div {
color: #666666 !important;
font-size: 13px !important; }
.roam-sidebar-content {
padding: 0 !important; }
.roam-sidebar-content > div:not(.log-button):not(:first-child) {
padding: 0 !important; }
.roam-sidebar-content > div:first-child {
padding-bottom: 18px !important; }
.starred-pages-wrapper > div:first-child {
display: none; }
.starred-pages-wrapper .flex-h-box,
.starred-pages-wrapper .flex-h-box span {
font-size: 13px !important;
opacity: 0.6 !important; }
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .log-button,
.roam-body
.roam-app
.roam-sidebar-container
.roam-sidebar-content
.starred-pages-wrapper
.starred-pages
.page {
padding: 6px 24px 6px !important; }
.bp3-icon-small {
padding-left: 24px !important; }
.rm-block-text {
max-width: 640px !important;
font-size: var(--font-size) !important; }
.block-bullet-view {
margin-bottom: 3px !important; }
.roam-article > div > div h1 {
font-size: 26px !important;
font-weight: 700 !important;
height: auto !important;
line-height: 1.5 !important; }
.rm-title-display,
.rm-title-textarea {
height: auto !important;
line-height: 1.5 !important; }
.roam-log-container .roam-log-preview h1 {
font-size: 22px !important;
font-weight: 700 !important; }
strong {
font-weight: 700 !important; }
.block-border-left {
border-left-color: var(--subtle-border-color) !important; }
.rm-reference-main div > strong {
color: gray !important; }
@media (prefers-color-scheme: dark) {
body {
background: #171717 !important; }
#app {
filter: invert(1) hue-rotate(180deg) !important; }
img,
div#buffer,
.bp3-portal,
.intercom-app,
.loading-astrolabe,
.bp3-dialog,
.twitter-tweet,
iframe {
filter: invert(1) hue-rotate(180deg) !important; }
.roam-highlight {
background-color: #e2cb47 !important; }
.bp3-overlay-backdrop {
background-color: rgba(255, 255, 255, 0.7) !important; }
:root {
--border-color: rgba(0, 0, 0, 0.07) !important;
--subtle-border-color: rgba(0, 0, 0, 0.05) !important;
--main-background-color: hsl(0, 0%, 96%) !important;
--body-background-color: hsl(0, 0%, 90%) !important;
--reference-item-background: hsl(0, 0%, 93%) !important;
--brackets-color: rgba(0, 0, 0, 0.3) !important;
--empty-text-color: hsl(203, 5%, 70%); } }```
- **[[Leyendecker]]**
- 
- Designer:: [[Maggie Appleton]]
- Twitter:: [@mappletons](https://twitter.com/mappletons)
- Love this theme? Say thanks via [Paypal](https://paypal.me/maggieappleton)
- Special Features::
- Queries and Kanbans got some extra love.
- Custom data-tags are all at the end of the CSS file, which you'll probably want to edit/customise.
- 
- Code::
- Last updated [[June 4th, 2020]]
- [[Site-wide]]
- {{[[roam/css]]}}
- ```css
h1,
h2,
h3,
h4,
h5,
h6 {
font-family: "Lato", sans-serif;
font-size: 3em;
}
div,
textarea {
font-weight: 400;
color: #3F4758;
font-size: 1.002em;
}
.roam-block-container {
max-width: 1000px;
}
.rm-pomodoro {
background: #fff !important;
color: #ff4747 !important;
padding: 4px 14px;
line-height: 2em;
font-weight: 600;
border-radius: 2em;
border: 1px solid #ff474770;
}
.rm-pomodoro {
background: #ff6956 !important;
color: #fff !important;
padding: 4px 14px;
line-height: 2em;
font-weight: 600;
border-radius: 2em;
border: 1px solid #ed5845;
}
.rm-pomodoro::first-letter {
margin-right: 8px;
}
.rm-query {
border: 0.5px solid #e4e9ec;
border-radius: 5px;
}
.rm-query .rm-query-title {
background-color: #f7f8f8;
padding: 0.8em;
color: #d1dbe2;
font-size: 80%;
}
.rm-reference-main.rm-query-content {
padding: 0.8em;
}
.rm-reference-main .rm-reference-item .rm-block-text {
font-size: 90%;
}
.rm-ref-page-view-title span {
}
.rm-reference-main .rm-reference-item .controls {
margin-left: -1em;
}
.rm-ref-page-view {
padding: 0.4em 0.2em;
}
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .starred-pages-wrapper .starred-pages .page {
padding: 6px;
}
div.flex-v-box.starred-pages-wrapper > div.flex-h-box > span {
font-size: 14px !important;
opacity: 80%;
letter-spacing: 0.04em;
}
div.roam-sidebar-container.noselect > div > div {
font-size: 14px !important;
letter-spacing: 0.03em;
}
#block-input {
background: white;
}
.roam-body #block-input > span > div {
padding: 6px 24px;
background: white;
}
span.bp3-icon-small.bp3-icon-star {
display: none;
visibility: hidden;
}
.roam-block {
max-width: 850px;
}
#right-sidebar > div {
background-color: #f7f8fa;
border-left: 1px solid #e9ebef;
}
.controls .simple-bullet-outer .simple-bullet-inner {
background-color: #e5e9f2;
}
.block-border-left {
border-left: 1px solid #f3f6f7;
}
.kanban-board {
background-color: #fff;
}
.kanban-card {
background-color: white;
margin: 8px;
box-shadow: 0px 1px 2px #9eb3c0a8;
padding: 10px;
border-radius: 2px;
line-height: 1.3em;
}
.kanban-title {
text-align: center;
font-weight: 600;
font-size: 1.1em;
opacity: 80%;
color: #485f6f;
padding-top: 8px;
border-bottom: 1px solid #c5d1d8;
}
.kanban-column {
background-color: #e7eff3;
margin: 0px 4px 0px 4px;
padding: 4px;
min-width: 200px;
border-radius: 3px;
}
.rm-block-ref::before {
content: '';
display: inline-block;
width: 2px;
border-radius: 40px;
height: 12px;
background: #ff913c;
margin-right: 8px;
}
.rm-block-ref {
border-bottom: none;
font-size: 1em;
color: #515e70;
}
.rm-block-ref:hover {
background: none;
cursor: pointer;
}
.checkmark {
background: #fff;
}
.check-container input:checked ~ .checkmark {
background: #33bdea;
}
.check-container input:checked ~ .checkmark:after {
border-color: #fff;
}
.rm-reference-item {
margin-top: 8px;
border-radius: 6px;
border: 1px solid #e4e9ee;
margin-right: 8px;
flex: 1 1 100%;
word-break: break-word;
background-color: #f7f9fb;
padding: 8px;
}
.rm-level2 {
font-size: 1.5em;
}
.rm-level3 {
color: #939aae;
font-weight: 400;
font-size: 1.3em;
}
.rm-page-ref {
color: #9aabd0;
}
.rm-page-ref-link-color {
color: #ec6f35;
font-weight: 600;
}
a {
color: #8A3CC8;
}
.intercom-app,
.intercom-launcher-frame,
#intercom-container {
display: none !important;
}
.roam-body .roam-app .roam-sidebar-container {
background-color: white;
border-right: 1px #eee solid;
}
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .starred-pages-wrapper .starred-pages .page,
.roam-body .roam-app .roam-sidebar-container > * {
opacity: 80%;
box-shadow: none;
}
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .starred-pages-wrapper .starred-pages .page:hover,
.roam-body .roam-app .roam-sidebar-container .roam-sidebar-content .log-button:hover {
background: white;
color: black;
opacity: 100%;
}
#buffer.tall {
height: calc(100vh - 50px) !important;
}
.check-container {
padding-right: 4px;
}
span.rm-page-ref {
border-radius: 2px;
padding-left: 1px;
padding-right: 1px;
}
.content span.rm-page-ref {
padding: 4px 1px 1px;
/* required for fixing azo */
}
.center-proj {
text-align: center;
}
```
- [[Tag Styles]]
- {{[[roam/css]]}}
- ```css
/* Custom data tags */
span.rm-page-ref[data-tag="Tweet"] {
background: #81D5ED !important;
color: white !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Literature Notes"] {
background: #9769FF !important;
color: white !important;
padding: 3px 7px;
font-weight: 500;
line-height: 2em;
}
span.rm-page-ref[data-tag="Evergreens"] {
background: #0DBAC6 !important;
color: #fff !important;
padding: 3px 8px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Seedling"] {
color: #0dbac6 !important;
padding: 3px 3px;
font-weight: 600;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Idea Bank"] {
color: #FCB815 !important;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Idea Bank"]:before {
content: '✦ '
}
span.rm-page-ref[data-tag="Illustrated Notes"] {
color: #7172FC;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Garden Notes"] {
color: #9DBC13;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Video Tutorial"] {
color: #db3b8d;
padding: 3px 4px;
line-height: 1.4em;
font-weight: 700;
}
span.rm-page-ref[data-tag="Essay"] {
background: #ADCB2A;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Livestream"] {
color: #B979CF;
padding: 3px 4px;
line-height: 1.4em;
font-weight: 700;
}
span.rm-page-ref[data-tag="Talk"] {
background: #7172FC;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Waiting"] {
background: #F9C866;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Researching"] {
background: #FF9D66 !important;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Synthesising"] {
background: #FC766F !important;
color: #fff !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Alive"] {
background: #EE5F85 !important;
color: #fff !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}```
- **[[Zenith]]**
- 
- Designer:: [[Azlen Elza]]
- Twitter:: [@azlenelza](https://twitter.com/azlenelza)
- Love this theme? Say thanks via [Paypal](https://www.paypal.me/azlenelza).
- Also created [[Cosmonaut]] and [[Yggdrasil]]
- Special Features::
- Collapsible columns -- side-by-side view for items opened in the sidebar
- Searchbar appears in main page
- Overlay side-by-side view over graph/diagram
- 
- Code::
- {{[[roam/css]]}}
- ```css
/* IMPORT CORE THEME */
@import url('https://azlen.github.io/roam-themes/core.css');
/* GOOGLE FONTS */
@import url('https://fonts.googleapis.com/css2?family=Source+Sans+Pro:ital,wght@0,400;0,700;1,400;1,700&display=swap');
:root {
--page-width: 616px;
--page-order: row-reverse; /* new pages show up to the right */
/*--page-order: row; /* new pages show up to the left */
--header-font: "Source Sans Pro", "Inter", sans-serif;
--body-font: "Source Sans Pro", "Inter", sans-serif;
--bg-color: #EEEEEE;
--page-color: rgba(255, 255, 255, 0.95);
--text-color: #000000;
--icon-color: #5c7080;
--bullet-color: rgba(0, 0, 0, 0.2);
--page-shadow: 0px 8px 14px rgba(0, 0, 0, 0.05);
--color-primary: 73, 197, 91;
--color-primary-contrast: #FFFFFF;
--color-secondary: 147, 100, 235;
--color-secondary-contrast: #FFFFFF;
}
/* CHANGE COLOURS IN CANVAS */
canvas[data-id="layer2-node"] {
filter: invert(1) hue-rotate(110deg) saturate(2.5);
}```
- ****Dark Modes****
- **[[Cosmonaut]]**
- 
- Designer:: [[Azlen Elza]]
- Twitter:: [@azlenelza](https://twitter.com/azlenelza)
- Love this theme? Say thanks via [Paypal](https://www.paypal.me/azlenelza).
- Also created [[Zenith]] and [[Yggdrasil]]
- Special Features::
- #[[Dark Mode]]
- Variation on [[Zenith]] which has:
- Collapsible columns -- side-by-side view for items opened in the sidebar
- Searchbar appears in main page
- Overlay side-by-side view over graph/diagram
- Code::
- {{[[roam/css]]}}
- ```css
/* IMPORT CORE THEME */
@import url('https://azlen.github.io/roam-themes/core.css');
/* GOOGLE FONTS */
@import url('https://fonts.googleapis.com/css2?family=Oxanium:wght@600&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Ubuntu:ital,wght@0,400;0,700;1,400;1,700&display=swap');
/* VARIABLES */
:root {
--page-width: 616px;
--header-font: "Oxanium", "Inter", sans-serif;
--body-font: "Ubuntu", "Inter", sans-serif;
--bg-color: #000000;
--page-color: rgba(44, 44, 44, 0.95);
--text-color: #FFFFFF;
--icon-color: rgb(102, 102, 102);
--bullet-color: rgba(255, 255, 255, 0.3);
--page-shadow: 0px 8px 14px rgba(0, 0, 0, 0.25);
--color-primary: 47, 155, 249;
--color-primary-contrast: #FFFFFF;
--color-secondary: 228, 78, 244;
--color-secondary-contrast: #FFFFFF;
}
/* CHANGE COLOURS IN CANVAS */
canvas[data-id="layer2-node"] {
filter: invert(1) contrast(1.1) hue-rotate(180deg) saturate(2);
}
/* CODE BLOCK STYLING */
/* modified from https://codemirror.net/demo/theme.html#night */
.CodeMirror { background: var(--bg-color) !important; color: #f8f8f8 !important; }
div.CodeMirror-selected { background: #447 !important; }
.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: rgba(68, 68, 119, .99); }
.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: rgba(68, 68, 119, .99); }
.CodeMirror-gutters { background: var(--bg-color); border-right: 1px solid #252525; }
.CodeMirror-guttermarker { color: white !important; }
.CodeMirror-guttermarker-subtle { color: #bbb !important; }
.CodeMirror-linenumber { color: #f8f8f8; }
.CodeMirror-cursor { border-left: 1px solid white !important; }
span.cm-qualifier { color: #666666 !important; }
span.cm-comment { color: #C71FF9 !important; }
span.cm-atom { color: #B58AFD !important; }
span.cm-number, span.cm-attribute { color: #ffd500 !important; }
span.cm-keyword { color: #599eff !important; }
span.cm-string { color: #37f14a !important; }
span.cm-meta { color: #369BFF !important; }
span.cm-variable-2, span.cm-tag { color: #99b2ff !important; }
span.cm-variable-3, span.cm-def, span.cm-type { color: white !important; }
span.cm-bracket { color: #8da6ce !important; }
span.cm-builtin, pan.cm-special { color: #ff9e59 !important; }
span.cm-link { color: #845dc4 !important; }
span.cm-error { color: #F41000 !important; }
.CodeMirror-activeline-background { background: #1C005A !important; }
.CodeMirror-matchingbracket { outline:1px solid grey !important; color:white !important; }```
- ****Feature Expansions****
- **Nested Links**
- 
- Designer:: [[Cato Minor]]
- Twitter:: [@CatoMinor3](https://twitter.com/CatoMinor3)
- Love this theme? Say thanks via [Paypal](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=6AMGMUDRX29XU&source=url)
- Special Features::
- Additional underlining for nested tags
- 
- Code::
- Last updated [[June 4th, 2020]]
- {{[[roam/css]]}}
- ```css
:root {
--custom-background-color: lightsteelblue;
--custom-background-color-hover: orange;
}
.rm-page-ref-link-color{
color:black !important;
background: linear-gradient(0deg, var(--custom-background-color) 2px, white 1px, transparent 1px);
background-position: 0 100%;
line-height: 24px;
padding-bottom: 4px;
}
.rm-page-ref-link-color:hover{
color:black !important;
background: linear-gradient(0deg, var(--custom-background-color-hover) 2px, white 1px, transparent 1px);
background-position: 0 100%;
text-decoration: none;
line-height: 24px;
padding-bottom: 4px;
}
.rm-page-ref-link-color .rm-page-ref-link-color {
color: black !important;
background: linear-gradient(0deg, var(--custom-background-color) 2px, white 1px, transparent 1px);
background-position: 0 100%;
line-height: 28px;
padding-bottom: 8px;
}
.rm-page-ref-link-color .rm-page-ref-link-color:hover {
color: black !important;
background: linear-gradient(0deg, var(--custom-background-color-hover) 2px, white 1px, transparent 1px);
background-position: 0 100%;
line-height: 28px;
padding-bottom: 8px;
}
.rm-page-ref-link-color .rm-page-ref-link-color .rm-page-ref-link-color {
color: black !important;
background: linear-gradient(0deg, var(--custom-background-color) 2px, white 1px, transparent 1px);
background-position: 0 100%;
line-height: 32px;
padding-bottom: 12px;
}
.rm-page-ref-link-color .rm-page-ref-link-color .rm-page-ref-link-color:hover {
color: black !important;
background: linear-gradient(0deg, var(--custom-background-color-hover) 2px, white 1px, transparent 1px);
background-position: 0 100%;
line-height: 32px;
padding-bottom: 12px;
}```
- ****More Colors****
- **[[Yggdrasil]]**
- 
- Designer:: [[Azlen Elza]]
- Twitter:: [@azlenelza](https://twitter.com/azlenelza)
- Love this theme? Say thanks via [Paypal](https://www.paypal.me/azlenelza).
- Also created [[Cosmonaut]] and [[Zenith]]
- Special Features::
- Collapsible columns -- side-by-side view for items opened in the sidebar
- Searchbar appears in main page
- Overlay side-by-side view over graph/diagram
- Code::
- {{[[roam/css]]}}
- ```css
/* IMPORT CORE THEME */
@import url('https://azlen.github.io/roam-themes/core.css');
/* GOOGLE FONTS */
@import url('https://fonts.googleapis.com/css2?family=Crimson+Text:ital,wght@0,400;0,700;1,400;1,700&display=swap');
/* VARIABLES */
:root {
--page-width: 616px;
--header-font: "Crimson Text", serif;
--body-font: "Crimson Text", serif;
--bg-color: #f5f1e2;
--page-color: rgba(236, 231, 209, .95);
--text-color: #000000;
--icon-color: #5c7080;
--bullet-color: rgba(0, 0, 0, 0.2);
--page-shadow: 0px 8px 14px rgba(0, 0, 0, 0.02);
--color-primary: 181, 124, 38;
--color-primary-contrast: #FFFFFF;
--color-secondary: 100, 181, 38;
--color-secondary-contrast: #FFFFFF;
}
/* YGGDRASIL CUSTOM STYLES */
.rm-page-ref-tag {
padding: 3px 6px 2px 6px;
}
/* reverse colours for saving / saving-remote so that green is used for "saved" */
.rm-saving-icon .rm-synced {
background-color: rgb(var(--color-secondary));
}
.rm-saving-icon .rm-saving-remote {
background-color: rgb(var(--color-primary));
}
.block-bullet-view .bp3-button:not([class*="bp3-icon"]) {
padding: 5px 14px 0px 14px!important;
}
.kanban-card {
box-shadow: 0px 1px 2px rgba(0,0,0, 0.3);
}
.kanban-column {
background-color: var(--bg-color);
}
/* CHANGE COLOURS IN CANVAS */
canvas[data-id="layer2-node"] {
filter: invert(1) hue-rotate(170deg) saturate(2.5);
}```
- ****Block Level Customizations****
- from [[Maggie Appleton]] in [[Leyendecker]]
- [[Tag Styles]]
- {{[[roam/css]]}}
- ```css
/* Custom data tags */
span.rm-page-ref[data-tag="Tweet"] {
background: #81D5ED !important;
color: white !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Literature Notes"] {
background: #9769FF !important;
color: white !important;
padding: 3px 7px;
font-weight: 500;
line-height: 2em;
}
span.rm-page-ref[data-tag="Evergreens"] {
background: #0DBAC6 !important;
color: #fff !important;
padding: 3px 8px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Seedling"] {
color: #0dbac6 !important;
padding: 3px 3px;
font-weight: 600;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Idea Bank"] {
color: #FCB815 !important;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Idea Bank"]:before {
content: '✦ '
}
span.rm-page-ref[data-tag="Illustrated Notes"] {
color: #7172FC;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Garden Notes"] {
color: #9DBC13;
padding: 3px 4px;
font-weight: 700;
line-height: 1.4em;
}
span.rm-page-ref[data-tag="Video Tutorial"] {
color: #db3b8d;
padding: 3px 4px;
line-height: 1.4em;
font-weight: 700;
}
span.rm-page-ref[data-tag="Essay"] {
background: #ADCB2A;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Livestream"] {
color: #B979CF;
padding: 3px 4px;
line-height: 1.4em;
font-weight: 700;
}
span.rm-page-ref[data-tag="Talk"] {
background: #7172FC;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Waiting"] {
background: #F9C866;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Researching"] {
background: #FF9D66 !important;
color: #fff;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Synthesising"] {
background: #FC766F !important;
color: #fff !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}
span.rm-page-ref[data-tag="Alive"] {
background: #EE5F85 !important;
color: #fff !important;
padding: 3px 7px;
line-height: 2em;
font-weight: 500;
}```
---
# What You Can't Say
- [[Essay]] [[Paul Graham]]
- [[Full Text]]
- January 2004
-
- Have you ever seen an old photo of yourself and been embarrassed at the way you looked? __Did we actually dress like that?__ We did. And we had no idea how silly we looked. It's the nature of fashion to be invisible, in the same way the movement of the earth is invisible to all of us riding on it.
- What scares me is that there are moral fashions too. They're just as arbitrary, and just as invisible to most people. But they're much more dangerous. Fashion is mistaken for good design; moral fashion is mistaken for good. Dressing oddly gets you laughed at. Violating moral fashions can get you fired, ostracized, imprisoned, or even killed.
- If you could travel back in a time machine, one thing would be true no matter where you went: you'd have to watch what you said. Opinions we consider harmless could have gotten you in big trouble. I've already said at least one thing that would have gotten me in big trouble in most of Europe in the seventeenth century, and did get Galileo in big trouble when he said it — that the earth moves. [1]
- It seems to be a constant throughout history: In every period, people believed things that were just ridiculous, and believed them so strongly that you would have gotten in terrible trouble for saying otherwise.
- Is our time any different? To anyone who has read any amount of history, the answer is almost certainly no. It would be a remarkable coincidence if ours were the first era to get everything just right.
- It's tantalizing to think we believe things that people in the future will find ridiculous. What __would__ someone coming back to visit us in a time machine have to be careful not to say? That's what I want to study here. But I want to do more than just shock everyone with the heresy du jour. I want to find general recipes for discovering what you can't say, in any era.
- **The Conformist Test**
- Let's start with a test: Do you have any opinions that you would be reluctant to express in front of a group of your peers?
- If the answer is no, you might want to stop and think about that. If everything you believe is something you're supposed to believe, could that possibly be a coincidence? Odds are it isn't. Odds are you just think what you're told.
- The other alternative would be that you independently considered every question and came up with the exact same answers that are now considered acceptable. That seems unlikely, because you'd also have to make the same mistakes. Mapmakers deliberately put slight mistakes in their maps so they can tell when someone copies them. If another map has the same mistake, that's very convincing evidence.
- Like every other era in history, our moral map almost certainly contains a few mistakes. And anyone who makes the same mistakes probably didn't do it by accident. It would be like someone claiming they had independently decided in 1972 that bell-bottom jeans were a good idea.
- If you believe everything you're supposed to now, how can you be sure you wouldn't also have believed everything you were supposed to if you had grown up among the plantation owners of the pre-Civil War South, or in Germany in the 1930s — or among the Mongols in 1200, for that matter? Odds are you would have.
- Back in the era of terms like "well-adjusted," the idea seemed to be that there was something wrong with you if you thought things you didn't dare say out loud. This seems backward. Almost certainly, there is something wrong with you if you __don't__ think things you don't dare say out loud.
- **Trouble**
- What can't we say? One way to find these ideas is simply to look at things people do say, and get in trouble for. [2]
- Of course, we're not just looking for things we can't say. We're looking for things we can't say that are true, or at least have enough chance of being true that the question should remain open. But many of the things people get in trouble for saying probably do make it over this second, lower threshold. No one gets in trouble for saying that 2 + 2 is 5, or that people in Pittsburgh are ten feet tall. Such obviously false statements might be treated as jokes, or at worst as evidence of insanity, but they are not likely to make anyone mad. The statements that make people mad are the ones they worry might be believed. I suspect the statements that make people maddest are those they worry might be true.
- If Galileo had said that people in Padua were ten feet tall, he would have been regarded as a harmless eccentric. Saying the earth orbited the sun was another matter. The church knew this would set people thinking.
- Certainly, as we look back on the past, this rule of thumb works well. A lot of the statements people got in trouble for seem harmless now. So it's likely that visitors from the future would agree with at least some of the statements that get people in trouble today. Do we have no Galileos? Not likely.
- To find them, keep track of opinions that get people in trouble, and start asking, could this be true? Ok, it may be heretical (or whatever modern equivalent), but might it also be true?
- **Heresy**
- This won't get us all the answers, though. What if no one happens to have gotten in trouble for a particular idea yet? What if some idea would be so radioactively controversial that no one would dare express it in public? How can we find these too?
- Another approach is to follow that word, heresy. In every period of history, there seem to have been labels that got applied to statements to shoot them down before anyone had a chance to ask if they were true or not. "Blasphemy", "sacrilege", and "heresy" were such labels for a good part of western history, as in more recent times "indecent", "improper", and "unamerican" have been. By now these labels have lost their sting. They always do. By now they're mostly used ironically. But in their time, they had real force.
- The word "defeatist", for example, has no particular political connotations now. But in Germany in 1917 it was a weapon, used by Ludendorff in a purge of those who favored a negotiated peace. At the start of World War II it was used extensively by Churchill and his supporters to silence their opponents. In 1940, any argument against Churchill's aggressive policy was "defeatist". Was it right or wrong? Ideally, no one got far enough to ask that.
- We have such labels today, of course, quite a lot of them, from the all-purpose "inappropriate" to the dreaded "divisive." In any period, it should be easy to figure out what such labels are, simply by looking at what people call ideas they disagree with besides untrue. When a politician says his opponent is mistaken, that's a straightforward criticism, but when he attacks a statement as "divisive" or "racially insensitive" instead of arguing that it's false, we should start paying attention.
- So another way to figure out which of our taboos future generations will laugh at is to start with the labels. Take a label — "sexist", for example — and try to think of some ideas that would be called that. Then for each ask, might this be true?
- Just start listing ideas at random? Yes, because they won't really be random. The ideas that come to mind first will be the most plausible ones. They'll be things you've already noticed but didn't let yourself think.
- In 1989 some clever researchers tracked the eye movements of radiologists as they scanned chest images for signs of lung cancer. [3] They found that even when the radiologists missed a cancerous lesion, their eyes had usually paused at the site of it. Part of their brain knew there was something there; it just didn't percolate all the way up into conscious knowledge. I think many interesting heretical thoughts are already mostly formed in our minds. If we turn off our self-censorship temporarily, those will be the first to emerge.
- **Time and Space**
- If we could look into the future it would be obvious which of our taboos they'd laugh at. We can't do that, but we can do something almost as good: we can look into the past. Another way to figure out what we're getting wrong is to look at what used to be acceptable and is now unthinkable.
- Changes between the past and the present sometimes do represent progress. In a field like physics, if we disagree with past generations it's because we're right and they're wrong. But this becomes rapidly less true as you move away from the certainty of the hard sciences. By the time you get to social questions, many changes are just fashion. The age of consent fluctuates like hemlines.
- We may imagine that we are a great deal smarter and more virtuous than past generations, but the more history you read, the less likely this seems. People in past times were much like us. Not heroes, not barbarians. Whatever their ideas were, they were ideas reasonable people could believe.
- So here is another source of interesting heresies. Diff present ideas against those of various past cultures, and see what you get. [4] Some will be shocking by present standards. Ok, fine; but which might also be true?
- You don't have to look into the past to find big differences. In our own time, different societies have wildly varying ideas of what's ok and what isn't. So you can try diffing other cultures' ideas against ours as well. (The best way to do that is to visit them.) Any idea that's considered harmless in a significant percentage of times and places, and yet is taboo in ours, is a candidate for something we're mistaken about.
- For example, at the high water mark of political correctness in the early 1990s, Harvard distributed to its faculty and staff a brochure saying, among other things, that it was inappropriate to compliment a colleague or student's clothes. No more "nice shirt." I think this principle is rare among the world's cultures, past or present. There are probably more where it's considered especially polite to compliment someone's clothing than where it's considered improper. Odds are this is, in a mild form, an example of one of the taboos a visitor from the future would have to be careful to avoid if he happened to set his time machine for Cambridge, Massachusetts, 1992. [5]
- **Prigs**
- Of course, if they have time machines in the future they'll probably have a separate reference manual just for Cambridge. This has always been a fussy place, a town of i dotters and t crossers, where you're liable to get both your grammar and your ideas corrected in the same conversation. And that suggests another way to find taboos. Look for prigs, and see what's inside their heads.
- Kids' heads are repositories of all our taboos. It seems fitting to us that kids' ideas should be bright and clean. The picture we give them of the world is not merely simplified, to suit their developing minds, but sanitized as well, to suit our ideas of what kids ought to think. [6]
- You can see this on a small scale in the matter of dirty words. A lot of my friends are starting to have children now, and they're all trying not to use words like "fuck" and "shit" within baby's hearing, lest baby start using these words too. But these words are part of the language, and adults use them all the time. So parents are giving their kids an inaccurate idea of the language by not using them. Why do they do this? Because they don't think it's fitting that kids should use the whole language. We like children to seem innocent. [7]
- Most adults, likewise, deliberately give kids a misleading view of the world. One of the most obvious examples is Santa Claus. We think it's cute for little kids to believe in Santa Claus. I myself think it's cute for little kids to believe in Santa Claus. But one wonders, do we tell them this stuff for their sake, or for ours?
- I'm not arguing for or against this idea here. It is probably inevitable that parents should want to dress up their kids' minds in cute little baby outfits. I'll probably do it myself. The important thing for our purposes is that, as a result, a well brought-up teenage kid's brain is a more or less complete collection of all our taboos — and in mint condition, because they're untainted by experience. Whatever we think that will later turn out to be ridiculous, it's almost certainly inside that head.
- How do we get at these ideas? By the following thought experiment. Imagine a kind of latter-day Conrad character who has worked for a time as a mercenary in Africa, for a time as a doctor in Nepal, for a time as the manager of a nightclub in Miami. The specifics don't matter — just someone who has seen a lot. Now imagine comparing what's inside this guy's head with what's inside the head of a well-behaved sixteen year old girl from the suburbs. What does he think that would shock her? He knows the world; she knows, or at least embodies, present taboos. Subtract one from the other, and the result is what we can't say.
- **Mechanism**
- I can think of one more way to figure out what we can't say: to look at how taboos are created. How do moral fashions arise, and why are they adopted? If we can understand this mechanism, we may be able to see it at work in our own time.
- Moral fashions don't seem to be created the way ordinary fashions are. Ordinary fashions seem to arise by accident when everyone imitates the whim of some influential person. The fashion for broad-toed shoes in late fifteenth century Europe began because Charles VIII of France had six toes on one foot. The fashion for the name Gary began when the actor Frank Cooper adopted the name of a tough mill town in Indiana. Moral fashions more often seem to be created deliberately. When there's something we can't say, it's often because some group doesn't want us to.
- The prohibition will be strongest when the group is nervous. The irony of Galileo's situation was that he got in trouble for repeating Copernicus's ideas. Copernicus himself didn't. In fact, Copernicus was a canon of a cathedral, and dedicated his book to the pope. But by Galileo's time the church was in the throes of the Counter-Reformation and was much more worried about unorthodox ideas.
- To launch a taboo, a group has to be poised halfway between weakness and power. A confident group doesn't need taboos to protect it. It's not considered improper to make disparaging remarks about Americans, or the English. And yet a group has to be powerful enough to enforce a taboo. Coprophiles, as of this writing, don't seem to be numerous or energetic enough to have had their interests promoted to a lifestyle.
- I suspect the biggest source of moral taboos will turn out to be power struggles in which one side only barely has the upper hand. That's where you'll find a group powerful enough to enforce taboos, but weak enough to need them.
- Most struggles, whatever they're really about, will be cast as struggles between competing ideas. The English Reformation was at bottom a struggle for wealth and power, but it ended up being cast as a struggle to preserve the souls of Englishmen from the corrupting influence of Rome. It's easier to get people to fight for an idea. And whichever side wins, their ideas will also be considered to have triumphed, as if God wanted to signal his agreement by selecting that side as the victor.
- We often like to think of World War II as a triumph of freedom over totalitarianism. We conveniently forget that the Soviet Union was also one of the winners.
- I'm not saying that struggles are never about ideas, just that they will always be made to seem to be about ideas, whether they are or not. And just as there is nothing so unfashionable as the last, discarded fashion, there is nothing so wrong as the principles of the most recently defeated opponent. Representational art is only now recovering from the approval of both Hitler and Stalin. [8]
- Although moral fashions tend to arise from different sources than fashions in clothing, the mechanism of their adoption seems much the same. The early adopters will be driven by ambition: self-consciously cool people who want to distinguish themselves from the common herd. As the fashion becomes established they'll be joined by a second, much larger group, driven by fear. [9] This second group adopt the fashion not because they want to stand out but because they are afraid of standing out.
- So if you want to figure out what we can't say, look at the machinery of fashion and try to predict what it would make unsayable. What groups are powerful but nervous, and what ideas would they like to suppress? What ideas were tarnished by association when they ended up on the losing side of a recent struggle? If a self-consciously cool person wanted to differentiate himself from preceding fashions (e.g. from his parents), which of their ideas would he tend to reject? What are conventional-minded people afraid of saying?
- This technique won't find us all the things we can't say. I can think of some that aren't the result of any recent struggle. Many of our taboos are rooted deep in the past. But this approach, combined with the preceding four, will turn up a good number of unthinkable ideas.
- **Why**
- Some would ask, why would one want to do this? Why deliberately go poking around among nasty, disreputable ideas? Why look under rocks?
- I do it, first of all, for the same reason I did look under rocks as a kid: plain curiosity. And I'm especially curious about anything that's forbidden. Let me see and decide for myself.
- Second, I do it because I don't like the idea of being mistaken. If, like other eras, we believe things that will later seem ridiculous, I want to know what they are so that I, at least, can avoid believing them.
- Third, I do it because it's good for the brain. To do good work you need a brain that can go anywhere. And you especially need a brain that's in the habit of going where it's not supposed to.
- Great work tends to grow out of ideas that others have overlooked, and no idea is so overlooked as one that's unthinkable. Natural selection, for example. It's so simple. Why didn't anyone think of it before? Well, that is all too obvious. Darwin himself was careful to tiptoe around the implications of his theory. He wanted to spend his time thinking about biology, not arguing with people who accused him of being an atheist.
- In the sciences, especially, it's a great advantage to be able to question assumptions. The m.o. of scientists, or at least of the good ones, is precisely that: look for places where conventional wisdom is broken, and then try to pry apart the cracks and see what's underneath. That's where new theories come from.
- A good scientist, in other words, does not merely ignore conventional wisdom, but makes a special effort to break it. Scientists go looking for trouble. This should be the m.o. of any scholar, but scientists seem much more willing to look under rocks. [10]
- Why? It could be that the scientists are simply smarter; most physicists could, if necessary, make it through a PhD program in French literature, but few professors of French literature could make it through a PhD program in physics. Or it could be because it's clearer in the sciences whether theories are true or false, and this makes scientists bolder. (Or it could be that, because it's clearer in the sciences whether theories are true or false, you have to be smart to get jobs as a scientist, rather than just a good politician.)
- Whatever the reason, there seems a clear correlation between intelligence and willingness to consider shocking ideas. This isn't just because smart people actively work to find holes in conventional thinking. I think conventions also have less hold over them to start with. You can see that in the way they dress.
- It's not only in the sciences that heresy pays off. In any competitive field, you can [win big](http://www.paulgraham.com/avg.html) by seeing things that others daren't. And in every field there are probably heresies few dare utter. Within the US car industry there is a lot of hand-wringing now about declining market share. Yet the cause is so obvious that any observant outsider could explain it in a second: they make bad cars. And they have for so long that by now the US car brands are antibrands — something you'd buy a car despite, not because of. Cadillac stopped being the Cadillac of cars in about 1970. And yet I suspect no one dares say this. [11] Otherwise these companies would have tried to fix the problem.
- Training yourself to think unthinkable thoughts has advantages beyond the thoughts themselves. It's like stretching. When you stretch before running, you put your body into positions much more extreme than any it will assume during the run. If you can think things so outside the box that they'd make people's hair stand on end, you'll have no trouble with the small trips outside the box that people call innovative.
- **__Pensieri Stretti__**
- When you find something you can't say, what do you do with it? My advice is, don't say it. Or at least, pick your battles.
- Suppose in the future there is a movement to ban the color yellow. Proposals to paint anything yellow are denounced as "yellowist", as is anyone suspected of liking the color. People who like orange are tolerated but viewed with suspicion. Suppose you realize there is nothing wrong with yellow. If you go around saying this, you'll be denounced as a yellowist too, and you'll find yourself having a lot of arguments with anti-yellowists. If your aim in life is to rehabilitate the color yellow, that may be what you want. But if you're mostly interested in other questions, being labelled as a yellowist will just be a distraction. Argue with idiots, and you become an idiot.
- The most important thing is to be able to think what you want, not to say what you want. And if you feel you have to say everything you think, it may inhibit you from thinking improper thoughts. I think it's better to follow the opposite policy. Draw a sharp line between your thoughts and your speech. Inside your head, anything is allowed. Within my head I make a point of encouraging the most outrageous thoughts I can imagine. But, as in a secret society, nothing that happens within the building should be told to outsiders. The first rule of Fight Club is, you do not talk about Fight Club.
- When Milton was going to visit Italy in the 1630s, Sir Henry Wootton, who had been ambassador to Venice, told him his motto should be __"i pensieri stretti & il viso sciolto."__ Closed thoughts and an open face. Smile at everyone, and don't tell them what you're thinking. This was wise advice. Milton was an argumentative fellow, and the Inquisition was a bit restive at that time. But I think the difference between Milton's situation and ours is only a matter of degree. Every era has its heresies, and if you don't get imprisoned for them you will at least get in enough trouble that it becomes a complete distraction.
- I admit it seems cowardly to keep quiet. When I read about the harassment to which the Scientologists subject their critics [12], or that pro-Israel groups are "compiling dossiers" on those who speak out against Israeli human rights abuses [13], or about people being sued for violating the DMCA [14], part of me wants to say, "All right, you bastards, bring it on." The problem is, there are so many things you can't say. If you said them all you'd have no time left for your real work. You'd have to turn into Noam Chomsky. [15]
- The trouble with keeping your thoughts secret, though, is that you lose the advantages of discussion. Talking about an idea leads to more ideas. So the optimal plan, if you can manage it, is to have a few trusted friends you can speak openly to. This is not just a way to develop ideas; it's also a good rule of thumb for choosing friends. The people you can say heretical things to without getting jumped on are also the most interesting to know.
- **__Viso Sciolto?__**
- I don't think we need the __viso sciolto__ so much as the __pensieri stretti.__ Perhaps the best policy is to make it plain that you don't agree with whatever zealotry is current in your time, but not to be too specific about what you disagree with. Zealots will try to draw you out, but you don't have to answer them. If they try to force you to treat a question on their terms by asking "are you with us or against us?" you can always just answer "neither".
- Better still, answer "I haven't decided." That's what Larry Summers did when a group tried to put him in this position. Explaining himself later, he said "I don't do litmus tests." [16] A lot of the questions people get hot about are actually quite complicated. There is no prize for getting the answer quickly.
- If the anti-yellowists seem to be getting out of hand and you want to fight back, there are ways to do it without getting yourself accused of being a yellowist. Like skirmishers in an ancient army, you want to avoid directly engaging the main body of the enemy's troops. Better to harass them with arrows from a distance.
- One way to do this is to ratchet the debate up one level of abstraction. If you argue against censorship in general, you can avoid being accused of whatever heresy is contained in the book or film that someone is trying to censor. You can attack labels with meta-labels: labels that refer to the use of labels to prevent discussion. The spread of the term "political correctness" meant the beginning of the end of political correctness, because it enabled one to attack the phenomenon as a whole without being accused of any of the specific heresies it sought to suppress.
- Another way to counterattack is with metaphor. Arthur Miller undermined the House Un-American Activities Committee by writing a play, "The Crucible," about the Salem witch trials. He never referred directly to the committee and so gave them no way to reply. What could HUAC do, defend the Salem witch trials? And yet Miller's metaphor stuck so well that to this day the activities of the committee are often described as a "witch-hunt."
- Best of all, probably, is humor. Zealots, whatever their cause, invariably lack a sense of humor. They can't reply in kind to jokes. They're as unhappy on the territory of humor as a mounted knight on a skating rink. Victorian prudishness, for example, seems to have been defeated mainly by treating it as a joke. Likewise its reincarnation as political correctness. "I am glad that I managed to write 'The Crucible,'" Arthur Miller wrote, "but looking back I have often wished I'd had the temperament to do an absurd comedy, which is what the situation deserved." [17]
- **ABQ**
- A Dutch friend says I should use Holland as an example of a tolerant society. It's true they have a long tradition of comparative open-mindedness. For centuries the low countries were the place to go to say things you couldn't say anywhere else, and this helped to make the region a center of scholarship and industry (which have been closely tied for longer than most people realize). Descartes, though claimed by the French, did much of his thinking in Holland.
- And yet, I wonder. The Dutch seem to live their lives up to their necks in rules and regulations. There's so much you can't do there; is there really nothing you can't say?
- Certainly the fact that they value open-mindedness is no guarantee. Who thinks they're not open-minded? Our hypothetical prim miss from the suburbs thinks she's open-minded. Hasn't she been taught to be? Ask anyone, and they'll say the same thing: they're pretty open-minded, though they draw the line at things that are really wrong. (Some tribes may avoid "wrong" as judgemental, and may instead use a more neutral sounding euphemism like "negative" or "destructive".)
- When people are bad at math, they know it, because they get the wrong answers on tests. But when people are bad at open-mindedness they don't know it. In fact they tend to think the opposite. Remember, it's the nature of fashion to be invisible. It wouldn't work otherwise. Fashion doesn't seem like fashion to someone in the grip of it. It just seems like the right thing to do. It's only by looking from a distance that we see oscillations in people's idea of the right thing to do, and can identify them as fashions.
- Time gives us such distance for free. Indeed, the arrival of new fashions makes old fashions easy to see, because they seem so ridiculous by contrast. From one end of a pendulum's swing, the other end seems especially far away.
- To see fashion in your own time, though, requires a conscious effort. Without time to give you distance, you have to create distance yourself. Instead of being part of the mob, stand as far away from it as you can and watch what it's doing. And pay especially close attention whenever an idea is being suppressed. Web filters for children and employees often ban sites containing pornography, violence, and hate speech. What counts as pornography and violence? And what, exactly, is "hate speech?" This sounds like a phrase out of __1984.__
- Labels like that are probably the biggest external clue. If a statement is false, that's the worst thing you can say about it. You don't need to say that it's heretical. And if it isn't false, it shouldn't be suppressed. So when you see statements being attacked as x-ist or y-ic (substitute your current values of x and y), whether in 1630 or 2030, that's a sure sign that something is wrong. When you hear such labels being used, ask why.
- Especially if you hear yourself using them. It's not just the mob you need to learn to watch from a distance. You need to be able to watch your own thoughts from a distance. That's not a radical idea, by the way; it's the main difference between children and adults. When a child gets angry because he's tired, he doesn't know what's happening. An adult can distance himself enough from the situation to say "never mind, I'm just tired." I don't see why one couldn't, by a similar process, learn to recognize and discount the effects of moral fashions.
- You have to take that extra step if you want to think clearly. But it's harder, because now you're working against social customs instead of with them. Everyone encourages you to grow up to the point where you can discount your own bad moods. Few encourage you to continue to the point where you can discount society's bad moods.
- How can you see the wave, when you're the water? Always be questioning. That's the only defence. What can't you say? And why?
- **Notes**[ ](http://www.paulgraham.com/saynotes.html)
- **Thanks** to Sarah Harlin, Trevor Blackwell, Jessica Livingston, Robert Morris, Eric Raymond and Bob van der Zwaan for reading drafts of this essay, and to Lisa Randall, Jackie McDonough, Ryan Stanley and Joel Rainey for conversations about heresy. Needless to say they bear no blame for opinions expressed in it, and especially for opinions __not__ expressed in it.
---
# Block References
- One of Roam's most powerful, flagship features
- What is it?
- Every block in Roam has its own ID, unique to only that block
- When you want to refer to something, instead of copying the literal content of that block, you can copy the ID that refers to that block
- Like every page can have linkage with each other, blocks can be interconnected too
- Why is it important?
- Block references help you make every block of your notes more reusable, either by yourself in the future, or by others when the graph is shared
- This means
- Less reinvention of the wheel
- No need to copy and paste, and generate a bunch of content that means the same thing!
- Less maintenance, less confusion
- If you change the content in the original block, the references that point towards the original block will all be automatically changed, saving you time to maintain multiple copies of the same content
- More incentives for quality content creation
- The more insightful content, the more it gets referenced by yourself and others
- Ultimately, knowledge is no longer static, but becomes fluid
- You are free to open up different windows in the sidebar, Roam around and remix and rematch content from articles, people, days, and projects
- How to use it?
- You can replace block references with text, embed, alias, original or with text + alias. The most important of these is text and alias
- Example::
- from [[Beating the Averages]]
- This is a block ref
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.
- It is a window onto a block from somewhere else in your Roam Graph - changes to that block will be reflected here as well.
- To make a block ref, to Create a block reference
- right click on a block
- 
- alt-drag and drop
- 
- If you click on a block ref you will now see the below menu:
- 
- [[Jump to block]] and [[open in sidebar]] will do the same thing that clicking and shift-clicking (respectively) used to - they move either the focus of your main work area to that block - or open it in it's original context
- You can also do these operations with Control-o and Control-shift-o (o standing for open) respectively.
- If you select [[Replace With]] you will see the below menu:
- 
- If you choose to replace with `embed` you will get this:
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.
- You can now see the refs in the right margin and the block now lives here and its original location is now holding a reference to the above block
- This is useful when you want to change the location of a block to make the references more easily accessible or where the original block makes more sense to be
- If you choose to replace with `original` you will get this:
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.
- You can now see the refs in the right margin and the block now lives here and its original location is now holding a reference to the above block
- This is useful when you want to change the location of a block to make the references more easily accessible or where the original block makes more sense to be
- If you choose to replace with `text` you will get this:
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.
- It is the same as copy-pasting the original text - there is no longer any connection between the text and the new block
- If you choose to replace with `alias` you will get this:
- *
- This gives you a link to the original item - but in a hyperlinked alias
- The format for aliases is `[alias](((blockid))``)`
- We default to having the alias as the `*` footnote symbol, but you can edit this however you feel
- This is useful if you want to point to multiple ideas, but refer to them with another phrasing - like Premise 1 and Premise 2
- you will see that if you hover over an alias you can see the text of the block you are pointing to as a preview
- If you choose to replace with [[text and alias]] you will get this:
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface. *
- This is useful for drafting - or making a modified version of the original text - you have an alias pointing to the source material - but the text is conveniently there for editing/rewording etc. #Writing
- Apply children
- 
- Copying multiple block references
- 
- Team GIFs::
- Create a block reference
- right click on a block
- 
- alt-drag and drop
- 
- Replace with
- text and alias
- 
- text
- 
- original
- no children
- 
- with children
- 
- Apply children
- as text
- 
- as references
- 
- Inline references
- Toggling and navigating
- 
-
- Read status
- 
- Community Videos::
- Quick Intro to Block References in Roam Research by [[Matias Faure]]
- {{[[video]]: https://www.youtube.com/watch?v=O413tVCseio}}
#[[Block References]] | #[[Right Sidebar]]
- Roam Research: Quick access to concepts/definitions using Links and Block References by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=nhGhg0LdgSQ}}
#[[Linked References]] | #[[Block References]]
- Articles::
- [Roam’s Block Reference Context Menu: A Primer](https://roamstack.com/roam-block-reference-menu/) by [[RoamStack]]
- #[[Block References]] | #[[Right Sidebar]] | #[[Block Embed]] | #[[text and alias]] | #[[Alias]]
- [What is a block in Roam Research (and what are block embeds)?](https://www.roamtips.com/home/what-is-block-roam-research) by [[Roam Tips]]
- Key Commands::
- `(())`
---
# Formatting
#### [[Bold]]
- Wrap your text in double asterisks `**like this**` to make it **bold**.
- You can also press `cmd+b`(or `ctrl+b` on PC).
- Try bolding the next word: Zettelkasten
- Gif
- 
#### [[Highlight]]
- Add `^^double carets^^` on both sides to ^^highlight^^.
- Try selecting the next sentence and pressing `cmd+h` (`ctrl+h` on PC):
- "I want to stand out."
- 
#### [[Italics]]
- __Emphasize__ part of a sentence using `__double underscores__`
- Or press `cmd+i` (`ctrl+i` on PC)!
- 
#### [[Strikethrough]]
- ~~Strike~~ Cross things out using `~~double tildes~~`.
- Use `cmd+y` ( `ctrl+y` on PC) to strike out the next word: Evernote
- 
- ℹ️ Remember, you don't have to remember all of this- just type `/` in any block to bring up the [slash commands]([[/ Commands]]). #.box
#### > Start a block with `> ` to make a cool [[Blockquote]] like this one!
- Try making one below:
- "Put a `>` and then a space before the quote in this block"
- 
- [[Callouts]]
- [[>]] [[!TIP]] Helpful tip — try using callouts for emphasis!
Combine callouts with **bold**, *italic*, and `code` formatting in both the title and body.
- ---
- Create **separators** like the one above by entering **only** three hyphens (`-`) into any block.
- Try it out below by finishing the block with another `-`
- --
- 
#### Links
- The way to alias a link is by writing `[Roam](https://roamresearch.com)`. You can link to blocks, pages or external websites like we've done here: blocks, [pages]([[Page References]]), [external websites](http://roamresearch.com).
- You can select [block ref]([[Block References]]), [page ref]([[Page References]]), or external link text, press `cmd+k` (macOS) / `ctrl+k` (PC) and then type the alias where your cursor is placed to make an aliased link
- Try it out below:
- Make the page reference below a link with the alias `birthday`
- [[March 3rd, 2021]]
- gif
- 
- Make the block reference below a link with the alias `Bardia's favourite site`
- ((aSzIzGKZc))
- Gif
- 
-
- You can select any text you want to use as an alias and then press `cmd+k` (macOS) / `ctrl+k` (PC) and then enter the [block ref]([[Block References]]), [page ref]([[Page References]]), or external link to make an aliased link
- Try it out below:
- Add an external link to your favourite website to the text below
- My favourite site
- 
- You can hover over any aliased link to view a preview of the underlying data in a tooltip
- Hover over the following to see how the tooltip works:
- Block
- [Page]([[March 3rd, 2021]])
- [Link](https://maggieappleton.com)
#### 
- [[Images]]
- You can embed an image by placing a link inside an alias with a `!` in front like this:
``
#### Headings
- You can make a header by using the Markdown formatting by typing `#`, `##`, and `###` at the start of a line for H1, H2, and H3 respectively
- 
- You can also make headings with the
- 
- Key Commands::
- `cmd+opt+1` (macOS) / `ctrl+opt+1` (PC)
- Toggle Heading 1
- `cmd+opt+2` (macOS) / `ctrl+opt+2` (PC)
- Toggle Heading 2
- `cmd+opt+3` (macOS) / `ctrl+opt+3` (PC)
- Toggle Heading 3
#### [[Alignment]]
- You can left-, center-, and right-align your text as well as justify it, like below:
- 
#### [[KaTeX]]
- Write down your equations inside Roam with $$KaTeX$$ by wrapping the text with `$$` on both sides
- 
- [KaTeX docs](https://katex.org/)
#### [[Code Block]]
- You can make code blocks like in the GIF below with syntax highlighting for most popular languages
- 
#### Children View Types
- View as Document
- 
- View as Bulleted List
- 
- View as Numbered List
- 
#### Sort blocks
- You can sort your blocks alphabetically as shown below:
- 
- Sort these below:
- Alphabetically
- Blocks
- Sort
- These
#### [[Adding soft line breaks in a block]]
---
# Navigation
- If you're used to clicking hyperlinks when browsing the web, you already know how to navigate in Roam! Click on any page reference or external link, and you'll be taken to the desired destination :)
- 
- Roam also offers a variety of navigation shortcuts that allow you to speed up your workflow - here are some of the most important ones:
- **Zooming in and out of blocks**
- With your cursor placed on a block, hit the following keys to zoom in or out of that block -
- **Mac: **
- Focus in: `Cmd+Shift+Period`
- Focus out: `Cmd+Shift+Comma`
- **Windows: **
- Focus in: `Alt+Right`
- Focus out: `Alt+Left`
- 
- **Focusing in on blocks**
- Focusing on a block couldn't be easier: just click on the bullet!
- 
- Key Commands::
- `Cmd+Shift+Period` * on Mac
- `Alt+Right` * on Windows
- **Opening breadcrumbs**
- Your recently opened pages and blocks are available from the search bar under the "Recent" Section. Here's an example:
- 
- Key Commands::
- `Cmd+u` on Mac
- `Ctrl+u` on Windows
- **Back and forward**
- Roam takes advantage of browser navigation shortcuts to allow you to go forward and back.
- 
- Key Commands::
- `Cmd+Right` and `Cmd+Left` on Mac
- `Ctrl+Right` and `Ctrl+Left` on Windows
- **Opening blocks and pages in sidebar**
- Open **anything** in the sidebar by shift-clicking it!
- 
- Key Commands::
- `Shift+click` on any pages, block references, etc
- **Go to Daily notes**
- To go back to the Daily Notes view, open the left sidebar and click on "Daily Notes"
- 
- Key Commands::
- `Ctrl+shift+d` on Mac
- `Alt+d` on Windows
- **Go to next day / previous day**
- From a Daily Note page, hitting these key commands will take you to the previous and the next day!
- 
- Key Commands::
- `Ctrl+alt+p` and `Ctrl+alt+n`
- **Go to first / last block on page**
- With your blocks in reading mode (i.e when the cursor is not blinking on any block), hitting these commands will place the cursor on the first block of the page or to the last block of the page.
- 
- Key Commands::
- `Cmd+enter`and `Cmd+shift+enter` on Mac
- `Ctrl+enter` and `Ctrl+shift+enter` on Windows
- **Follow a link under cursor**
- If your cursor is placed on a linked reference, hitting these commands will open the link.
- 
- Key Commands::
- `Ctrl+o`
- **Open a link under cursor in the sidebar**
- If your cursor is placed on a linked reference, these key commands will open the link in the sidebar!
- 
- Key Commands::
- `Ctrl+Shift+o`
- **Jump to the start and end of a block**
- With your cursor on a block (edit mode) hitting these key commands will place the cursor at the beginning and end of the block.
- 
- Key Commands::
- `Ctrl+a` and `Ctrl+e` on Mac
- `Ctrl+home` and `Ctrl+end` on Windows
---
# Beating the Averages
- [[Paul Graham]] #[[Essay]]
- April 2001, rev. April 2003
- __(This article is derived from a talk given at the 2001 Franz Developer Symposium.)__
- In the summer of 1995, my friend Robert Morris and I started a startup called [Viaweb](http://docs.yahoo.com/docs/pr/release184.html). Our plan was to write software that would let end users build online stores. What was novel about this software, at the time, was that it ran on our server, using ordinary Web pages as the interface.
- A lot of people could have been having this idea at the same time, of course, but as far as I know, Viaweb was the first Web-based application. It seemed such a novel idea to us that we named the company after it: Viaweb, because our software worked via the Web, instead of running on your desktop computer.
- Another unusual thing about this software was that it was written primarily in a programming language called Lisp. It was one of the first big end-user applications to be written in Lisp, which up till then had been used mostly in universities and research labs. [1]
- **The Secret Weapon**
- Eric Raymond has written an essay called "How to Become a Hacker," and in it, among other things, he tells would-be hackers what languages they should learn. He suggests starting with Python and Java, because they are easy to learn. The serious hacker will also want to learn C, in order to hack Unix, and Perl for system administration and cgi scripts. Finally, the truly serious hacker should consider learning Lisp:
- Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot.This is the same argument you tend to hear for learning Latin. It won't get you a job, except perhaps as a classics professor, but it will improve your mind, and make you a better writer in languages you do want to use, like English.
- But wait a minute. This metaphor doesn't stretch that far. The reason Latin won't get you a job is that no one speaks it. If you write in Latin, no one can understand you. But Lisp is a computer language, and computers speak whatever language you, the programmer, tell them to.
- So if Lisp makes you a better programmer, like he says, why wouldn't you want to use it? If a painter were offered a brush that would make him a better painter, it seems to me that he would want to use it in all his paintings, wouldn't he? I'm not trying to make fun of Eric Raymond here. On the whole, his advice is good. What he says about Lisp is pretty much the conventional wisdom. But there is a contradiction in the conventional wisdom: Lisp will make you a better programmer, and yet you won't use it.
- Why not? Programming languages are just tools, after all. If Lisp really does yield better programs, you should use it. And if it doesn't, then who needs it?
- This is not just a theoretical question. Software is a very competitive business, prone to natural monopolies. A company that gets software written faster and better will, all other things being equal, put its competitors out of business. And when you're starting a startup, you feel this very keenly. Startups tend to be an all or nothing proposition. You either get rich, or you get nothing. In a startup, if you bet on the wrong technology, your competitors will crush you.
- Robert and I both knew Lisp well, and we couldn't see any reason not to trust our instincts and go with Lisp. We knew that everyone else was writing their software in C++ or Perl. But we also knew that that didn't mean anything. If you chose technology that way, you'd be running Windows. When you choose technology, you have to ignore what other people are doing, and consider only what will work the best.
- This is especially true in a startup. In a big company, you can do what all the other big companies are doing. But a startup can't do what all the other startups do. I don't think a lot of people realize this, even in startups.
- The average big company grows at about ten percent a year. So if you're running a big company and you do everything the way the average big company does it, you can expect to do as well as the average big company-- that is, to grow about ten percent a year.
- The same thing will happen if you're running a startup, of course. If you do everything the way the average startup does it, you should expect average performance. The problem here is, average performance means that you'll go out of business. The survival rate for startups is way less than fifty percent. So if you're running a startup, you had better be doing something odd. If not, you're in trouble.
- Back in 1995, we knew something that I don't think our competitors understood, and few understand even now: when you're writing software that only has to run on your own servers, you can use any language you want. When you're writing desktop software, there's a strong bias toward writing applications in the same language as the operating system. Ten years ago, writing applications meant writing applications in C. But with Web-based software, especially when you have the source code of both the language and the operating system, you can use whatever language you want.
- This new freedom is a double-edged sword, however. Now that you can use any language, you have to think about which one to use. Companies that try to pretend nothing has changed risk finding that their competitors do not.
- If you can use any language, which do you use? We chose Lisp. For one thing, it was obvious that rapid development would be important in this market. We were all starting from scratch, so a company that could get new features done before its competitors would have a big advantage. We knew Lisp was a really good language for writing software quickly, and server-based applications magnify the effect of rapid development, because you can release software the minute it's done.
- If other companies didn't want to use Lisp, so much the better. It might give us a technological edge, and we needed all the help we could get. When we started Viaweb, we had no experience in business. We didn't know anything about marketing, or hiring people, or raising money, or getting customers. Neither of us had ever even had what you would call a real job. The only thing we were good at was writing software. We hoped that would save us. Any advantage we could get in the software department, we would take.
- So you could say that using Lisp was an experiment. Our hypothesis was that if we wrote our software in Lisp, we'd be able to get features done faster than our competitors, and also to do things in our software that they couldn't do. And because Lisp was so high-level, we wouldn't need a big development team, so our costs would be lower. If this were so, we could offer a better product for less money, and still make a profit. We would end up getting all the users, and our competitors would get none, and eventually go out of business. That was what we hoped would happen, anyway.
- What were the results of this experiment? Somewhat surprisingly, it worked. We eventually had many competitors, on the order of twenty to thirty of them, but none of their software could compete with ours. We had a wysiwyg online store builder that ran on the server and yet felt like a desktop application. Our competitors had cgi scripts. And we were always far ahead of them in features. Sometimes, in desperation, competitors would try to introduce features that we didn't have. But with Lisp our development cycle was so fast that we could sometimes duplicate a new feature within a day or two of a competitor announcing it in a press release. By the time journalists covering the press release got round to calling us, we would have the new feature too.
- It must have seemed to our competitors that we had some kind of secret weapon-- that we were decoding their Enigma traffic or something. In fact we did have a secret weapon, but it was simpler than they realized. No one was leaking news of their features to us. We were just able to develop software faster than anyone thought possible.
- When I was about nine I happened to get hold of a copy of __The Day of the Jackal,__ by Frederick Forsyth. The main character is an assassin who is hired to kill the president of France. The assassin has to get past the police to get up to an apartment that overlooks the president's route. He walks right by them, dressed up as an old man on crutches, and they never suspect him.
- Our secret weapon was similar. We wrote our software in a weird AI language, with a bizarre syntax full of parentheses. For years it had annoyed me to hear Lisp described that way. But now it worked to our advantage. In business, there is nothing more valuable than a technical advantage your competitors don't understand. In business, as in war, surprise is worth as much as force.
- And so, I'm a little embarrassed to say, I never said anything publicly about Lisp while we were working on Viaweb. We never mentioned it to the press, and if you searched for Lisp on our Web site, all you'd find were the titles of two books in my bio. This was no accident. A startup should give its competitors as little information as possible. If they didn't know what language our software was written in, or didn't care, I wanted to keep it that way.[2]
- The people who understood our technology best were the customers. They didn't care what language Viaweb was written in either, but they noticed that it worked really well. It let them build great looking online stores literally in minutes. And so, by word of mouth mostly, we got more and more users. By the end of 1996 we had about 70 stores online. At the end of 1997 we had 500. Six months later, when Yahoo bought us, we had 1070 users. Today, as Yahoo Store, this software continues to dominate its market. It's one of the more profitable pieces of Yahoo, and the stores built with it are the foundation of Yahoo Shopping. I left Yahoo in 1999, so I don't know exactly how many users they have now, but the last I heard there were about 20,000.
- **The Blub Paradox**
- What's so great about Lisp? And if Lisp is so great, why doesn't everyone use it? These sound like rhetorical questions, but actually they have straightforward answers. Lisp is so great not because of some magic quality visible only to devotees, but because it is simply the most powerful language available. And the reason everyone doesn't use it is that programming languages are not merely technologies, but habits of mind as well, and nothing changes slower. Of course, both these answers need explaining.
- I'll begin with a shockingly controversial statement: programming languages vary in power.
- Few would dispute, at least, that high level languages are more powerful than machine language. Most programmers today would agree that you do not, ordinarily, want to program in machine language. Instead, you should program in a high-level language, and have a compiler translate it into machine language for you. This idea is even built into the hardware now: since the 1980s, instruction sets have been designed for compilers rather than human programmers.
- Everyone knows it's a mistake to write your whole program by hand in machine language. What's less often understood is that there is a more general principle here: that if you have a choice of several languages, it is, all other things being equal, a mistake to program in anything but the most powerful one. [3]
- There are many exceptions to this rule. If you're writing a program that has to work very closely with a program written in a certain language, it might be a good idea to write the new program in the same language. If you're writing a program that only has to do something very simple, like number crunching or bit manipulation, you may as well use a less abstract language, especially since it may be slightly faster. And if you're writing a short, throwaway program, you may be better off just using whatever language has the best library functions for the task. But in general, for application software, you want to be using the most powerful (reasonably efficient) language you can get, and using anything else is a mistake, of exactly the same kind, though possibly in a lesser degree, as programming in machine language.
- You can see that machine language is very low level. But, at least as a kind of social convention, high-level languages are often all treated as equivalent. They're not. Technically the term "high-level language" doesn't mean anything very definite. There's no dividing line with machine languages on one side and all the high-level languages on the other. Languages fall along a continuum [4] of abstractness, from the most powerful all the way down to machine languages, which themselves vary in power.
- Consider Cobol. Cobol is a high-level language, in the sense that it gets compiled into machine language. Would anyone seriously argue that Cobol is equivalent in power to, say, Python? It's probably closer to machine language than Python.
- Or how about Perl 4? Between Perl 4 and Perl 5, lexical closures got added to the language. Most Perl hackers would agree that Perl 5 is more powerful than Perl 4. But once you've admitted that, you've admitted that one high level language can be more powerful than another. And it follows inexorably that, except in special cases, you ought to use the most powerful you can get.
- This idea is rarely followed to its conclusion, though. After a certain age, programmers rarely switch languages voluntarily. Whatever language people happen to be used to, they tend to consider just good enough.
- Programmers get very attached to their favorite languages, and I don't want to hurt anyone's feelings, so to explain this point I'm going to use a hypothetical language called Blub. Blub falls right in the middle of the abstractness continuum. It is not the most powerful language, but it is more powerful than Cobol or machine language.
- And in fact, our hypothetical Blub programmer wouldn't use either of them. Of course he wouldn't program in machine language. That's what compilers are for. And as for Cobol, he doesn't know how anyone can get anything done with it. It doesn't even have x (Blub feature of your choice).
- As long as our hypothetical Blub programmer is looking down the power continuum, he knows he's looking down. Languages less powerful than Blub are obviously less powerful, because they're missing some feature he's used to. But when our hypothetical Blub programmer looks in the other direction, up the power continuum, he doesn't realize he's looking up. What he sees are merely weird languages. He probably considers them about equivalent in power to Blub, but with all this other hairy stuff thrown in as well. Blub is good enough for him, because he thinks in Blub.
- When we switch to the point of view of a programmer using any of the languages higher up the power continuum, however, we find that he in turn looks down upon Blub. How can you get anything done in Blub? It doesn't even have y.
- By induction, the only programmers in a position to see all the differences in power between the various languages are those who understand the most powerful one. (This is probably what Eric Raymond meant about Lisp making you a better programmer.) You can't trust the opinions of the others, because of the Blub paradox: they're satisfied with whatever language they happen to use, because it dictates the way they think about programs.
- I know this from my own experience, as a high school kid writing programs in Basic. That language didn't even support recursion. It's hard to imagine writing programs without using recursion, but I didn't miss it at the time. I thought in Basic. And I was a whiz at it. Master of all I surveyed.
- The five languages that Eric Raymond recommends to hackers fall at various points on the power continuum. Where they fall relative to one another is a sensitive topic. What I will say is that I think Lisp is at the top. And to support this claim I'll tell you about one of the things I find missing when I look at the other four languages. How can you get anything done in them, I think, without [[macros]]? [5]
- Many languages have something called a macro. But Lisp [[macros]] are unique. And believe it or not, what they do is related to the parentheses. The designers of Lisp didn't put all those parentheses in the language just to be different. To the Blub programmer, Lisp code looks weird. But those parentheses are there for a reason. They are the outward evidence of a fundamental difference between Lisp and other languages.
- Lisp code is made out of Lisp data objects. And not in the trivial sense that the source files contain characters, and strings are one of the data types supported by the language. Lisp code, after it's read by the parser, is made of data structures that you can traverse.
- If you understand how compilers work, what's really going on is not so much that Lisp has a strange syntax as that Lisp has no syntax. You write programs in the parse trees that get generated within the compiler when other languages are parsed. But these parse trees are fully accessible to your programs. You can write programs that manipulate them. In Lisp, these programs are called [[macros]]. They are programs that write programs.
- Programs that write programs? When would you ever want to do that? Not very often, if you think in Cobol. All the time, if you think in Lisp. It would be convenient here if I could give an example of a powerful macro, and say there! how about that? But if I did, it would just look like gibberish to someone who didn't know Lisp; there isn't room here to explain everything you'd need to know to understand what it meant. In [Ansi Common Lisp](http://paulgraham.com/acl.html) I tried to move things along as fast as I could, and even so I didn't get to [[macros]] until page 160.
- But I think I can give a kind of argument that might be convincing. The source code of the Viaweb editor was probably about 20-25% [[macros]]. Macros are harder to write than ordinary [[Lisp]] functions, and it's considered to be bad style to use them when they're not necessary. So every macro in that code is there because it has to be. What that means is that at least 20-25% of the code in this program is doing things that you can't easily do in any other language. However skeptical the Blub programmer might be about my claims for the mysterious powers of [[Lisp]], this ought to make him curious. We weren't writing this code for our own amusement. We were a tiny startup, programming as hard as we could in order to put technical barriers between us and our competitors.
- A suspicious person might begin to wonder if there was some correlation here. A big chunk of our code was doing things that are very hard to do in other languages. The resulting software did things our competitors' software couldn't do. Maybe there was some kind of connection. I encourage you to follow that thread. There may be more to that old man hobbling along on his crutches than meets the eye.
- **Aikido for Startups**
- But I don't expect to convince anyone ([over 25](http://www.trollope.org/scheme.html)) to go out and learn Lisp. The purpose of this article is not to change anyone's mind, but to reassure people already interested in using Lisp-- people who know that Lisp is a powerful language, but worry because it isn't widely used. In a competitive situation, that's an advantage. Lisp's power is multiplied by the fact that your competitors don't get it.
- If you think of using Lisp in a startup, you shouldn't worry that it isn't widely understood. You should hope that it stays that way. And it's likely to. It's the nature of programming languages to make most people satisfied with whatever they currently use. Computer hardware changes so much faster than personal habits that programming practice is usually ten to twenty years behind the processor. At places like MIT they were writing programs in high-level languages in the early 1960s, but many companies continued to write code in machine language well into the 1980s. I bet a lot of people continued to write machine language until the processor, like a bartender eager to close up and go home, finally kicked them out by switching to a risc instruction set.
- Ordinarily technology changes fast. But programming languages are different: programming languages are not just technology, but what programmers think in. They're half technology and half religion.[6] And so the median language, meaning whatever language the median programmer uses, moves as slow as an iceberg. Garbage collection, introduced by Lisp in about 1960, is now widely considered to be a good thing. Runtime typing, ditto, is growing in popularity. Lexical closures, introduced by Lisp in the early 1970s, are now, just barely, on the radar screen. [[macros]], introduced by Lisp in the mid 1960s, are still terra incognita.
- Obviously, the median language has enormous momentum. I'm not proposing that you can fight this powerful force. What I'm proposing is exactly the opposite: that, like a practitioner of Aikido, you can use it against your opponents.
- If you work for a big company, this may not be easy. You will have a hard time convincing the pointy-haired boss to let you build things in Lisp, when he has just read in the paper that some other language is poised, like Ada was twenty years ago, to take over the world. But if you work for a startup that doesn't have pointy-haired bosses yet, you can, like we did, turn the Blub paradox to your advantage: you can use technology that your competitors, glued immovably to the median language, will never be able to match.
- If you ever do find yourself working for a startup, here's a handy tip for evaluating competitors. Read their job listings. Everything else on their site may be stock photos or the prose equivalent, but the job listings have to be specific about what they want, or they'll get the wrong candidates.
- During the years we worked on Viaweb I read a lot of job descriptions. A new competitor seemed to emerge out of the woodwork every month or so. The first thing I would do, after checking to see if they had a live online demo, was look at their job listings. After a couple years of this I could tell which companies to worry about and which not to. The more of an IT flavor the job descriptions had, the less dangerous the company was. The safest kind were the ones that wanted Oracle experience. You never had to worry about those. You were also safe if they said they wanted C++ or Java developers. If they wanted Perl or Python programmers, that would be a bit frightening-- that's starting to sound like a company where the technical side, at least, is run by real hackers. If I had ever seen a job posting looking for Lisp hackers, I would have been really worried.
- **Notes**
- [1] Viaweb at first had two parts: the editor, written in Lisp, which people used to build their sites, and the ordering system, written in C, which handled orders. The first version was mostly Lisp, because the ordering system was small. Later we added two more modules, an image generator written in C, and a back-office manager written mostly in Perl.
- In January 2003, Yahoo released a new version of the editor written in C++ and Perl. It's hard to say whether the program is no longer written in Lisp, though, because to translate this program into C++ they literally had to write a Lisp interpreter: the source files of all the page-generating templates are still, as far as I know, Lisp code. (See [Greenspun's Tenth Rule](http://paulgraham.com/quotes.html).)
- [2] Robert Morris says that I didn't need to be secretive, because even if our competitors had known we were using Lisp, they wouldn't have understood why: "If they were that smart they'd already be programming in Lisp."
- [3] All languages are equally powerful in the sense of being Turing equivalent, but that's not the sense of the word programmers care about. (No one wants to program a Turing machine.) The kind of power programmers care about may not be formally definable, but one way to explain it would be to say that it refers to features you could only get in the less powerful language by writing an interpreter for the more powerful language in it. If language A has an operator for removing spaces from strings and language B doesn't, that probably doesn't make A more powerful, because you can probably write a subroutine to do it in B. But if A supports, say, recursion, and B doesn't, that's not likely to be something you can fix by writing library functions.
- [4] Note to nerds: or possibly a lattice, narrowing toward the top; it's not the shape that matters here but the idea that there is at least a partial order.
- [5] It is a bit misleading to treat [[macros]] as a separate feature. In practice their usefulness is greatly enhanced by other Lisp features like lexical closures and rest parameters.
- [6] As a result, comparisons of programming languages either take the form of religious wars or undergraduate textbooks so determinedly neutral that they're really works of anthropology. People who value their peace, or want tenure, avoid the topic. But the question is only half a religious one; there is something there worth studying, especially if you want to design new languages.
---
# Kanban
- [[.--]]
### Below is a [[Kanban]] in Roam. Play around with it to see how you can use it!
- Kanban example - [[Roam Canon]]
- {{[[kanban]]}}
- Must Read
- [[White Paper]]
- [[Books]]
- [[Good Strategy/Bad Strategy]]
- [[The Beginning of Infinity]]
- [[Principles]]
- [[Shape Up]]
- [[How to Take Smart Notes]]
- [[Reinventing Discovery]]
- [[The Design of Everyday Things]]
- [[Where Good Ideas Come From]]
- [[Antifragile]]
- [[How to Solve It]]
- [[How to Read a Book]]
- [[On Writing Well]]
- [[CFAR Handbook]]
- [[Nonviolent Communication]]
- [[Articles]]
- [[Learn to Learn: A manual to help you get the best results from the Awareness Through Movement lessons]]
- [[Thrust, Drag and the 10x effect]]
- [[Want to Remember Everything You'll Ever Learn? Surrender to This Algorithm]]
- [[Speed as a Habit]]
- [[Early Work]]
- [[Products are Functions]]
- [[Augmenting Long-term Memory]]
- [[Analogy as the Core of Cognition]]
- [[Scholarship: How to Do It Efficiently]]
- [[Why education is so difficult and contentious]]
- [[A Codebase is an Organism]]
- [[Taste for Makers]]
- [[Writing, briefly]]
- [[Holding a Program in One's Head]]
- [[The Hardest Lessons for Startups to Learn]]
- [[How to Learn From Conversations]] [[LessWrong]]
- [[Talks]]
- [[Inventing on Principle]]
- [[The Multidisciplinary Approach to Thinking]]
- [[Hammock Driven Development]]
- [[Normal Considered Harmful]]
- [[Simple Made Easy]]
- [[You and Your Research]]
- [[Websites]]
- [[untools]]
- [[[[Andy Matuschak]]'s Notes]]
- [[[[Gordon Brander]]'s Patterns]]
- [[Explorable Explanations]]
### Team GIFs::
#### Creating a Kanban and drag and drop within it
- 
#### Open Kanban in sidebar
- 
### Community Videos::
#### Roam Research: Kanban Board by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=zZIBcCunK-I}}
#[[Kanban]] | #[[Block References]]
#### Roam Research: How to Plan Your Week in Roam by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=p-hpOG6TmeM}}
#[[Kanban]] | #[[Templates]]
### Articles::
#### [How to create a Kanban board on Roam](https://www.roamtips.com/home/roam-kanban-board) by [[Roam Tips]]
- [[.--]]
---
# Coaching
### Get specialized 1:1 help to master Roam from one of our vetted coaches
- [[Coaches]]
- **[R.J. Nestor]([[R.J. Nestor]])**
- Info::
- Business & Executive Coach, Musician, Writer
- Helps you develop and optimize your Roam workflows
- Created courses [Your Road to Roam](https://courses.rjnestor.com/p/your-road-to-roam) and [Powerful Task Management in Roam Research](https://courses.rjnestor.com/p/powerful-task-management-in-roam-research)
- Website::
- [roamcoaching.rjnestor.com](https://roamcoaching.rjnestor.com) [rjnestor.com](https://rjnestor.com) [youtube.com/c/rjnestorcoach](https://youtube.com/c/rjnestorcoach)
- Areas of specialty::
- [[Roam fundamentals]] ⬅ for ANY Roam skill level
- [[Workflows]] [[Processes]]
- [[Productivity]] [[GTD]]
- [[Content creation]] [[Writing]] [[Creative writing]]
- Contact::
- DM on [Twitter](https://twitter.com/rjnestor)
- Message through [Facebook coaching page](https://m.me/rjnestorcoach)
- Price::
- [Roam coaching packages](https://roamcoaching.rjnestor.com) start at $150
- [DM](https://twitter.com/rjnestor) or [message](https://m.me/rjnestorcoach) for custom coaching package needs
- **[Cortex Futura]([[Cortex Futura]]) **
- Info::
- PhD Student, Data Analyst, Teacher, Writer
- Helps you
- Created courses [Cite to Write](https://t.co/Z95EFrEenY?amp=1) (using Roam in academia) and Galaxy Brain (Algorithms of Thought)
- Website::
- [Coaching Website](https://learn.cortexfutura.com/p/roam-research-coaching?utm_source=roamresearch&utm_medium=graph&utm_campaign=helpgraph)
- Areas of specialty::
- [[Roam fundamentals]]
- [[Workflows]]
- [[Writing]], [[Publishing]]
- [[Academia]]
- Contact::
- [DM on Twitter](https://twitter.com/cortexfutura)
- coaching@cortexfutura.com
- Price::
- Roam Coaching Packages starting at $150
- DM or message for custom coaching package needs
- **[[Maarten van Doorn]]**
- Info::
- PhD, Polymath, Tools for Thought Explorer, Essayist, Coach, Author
- Helps you set up your personal Zettelkasten and smart notes workflow in Roam. You'll remember what you learn, discover new ideas and insights, turn your thoughts and discoveries into convincing written pieces, and build up a treasure of smart and interconnected notes along the way.
- Wrote [The Complete Guide To Effective Note-Taking](https://roambrain.com/the-complete-guide-to-effective-note-taking/) and [The Complete Guide to Effective Reading](https://maartenvandoorn.medium.com/the-complete-guide-to-effective-reading-fc1835937757) (>300K reads). Created course [Academic Mastery with Roam Research](https://www.academicmasterywithroam.com/).
- Website::
- [Coaching website](https://maartenvandoorn.com/roam-research-coaching/)
- Areas of specialty::
- [[Roam fundamentals]]
- [[Effective Reading and Note-Taking in Roam Research]]
- [[Information analysis]]
- [[Academic writing]]
- [[Popular writing]]
- Contact::
- [DM on Twitter](https://twitter.com/maartenvdoorn)
- maarten@maartenvandoorn.nl
- Price::
- Get lifetime access to [Academic Mastery with Roam](https://www.academicmasterywithroam.com/) for $159.
- [Coaching](https://maartenvandoorn.com/roam-research-coaching/) costs only $99 per one-hour 1:1 session, because I'm just an overachieving nerd who wants to help people :)
- [DM](https://twitter.com/maartenvdoorn) or [message](mailto:maarten@maartenvandoorn.nl) for custom coaching package needs! I focus on the specific use case desired by you.
#### [Request to be vetted](https://roamresearch.typeform.com/to/g5W8uCqz)
---
# JSON Schema
- **Description**
- A schema for JSON import into Roam. A file being uploaded must be an array of pages. Keys not defined in the schema will be ignored.
- **Objects**
- Page
- description:: An object representing a page. The only required key is the title
- keys::
- title
- children
- create-time
- edit-time
- edit-user
- Block
- description:: An object representing a block. The only required key is the string
- keys::
- string
- uid
- children
- create-time
- edit-time
- edit-user
- heading
- text-align
- **Keys**
- title
- description:: The title of a page. The string is unique across a user's database. If importing a title that is already used, it will merge with the already existing content.
- type:: string
- string
- description:: The string of a block
- type:: string
- uid
- description:: The unique identifier of a block. Use this if you want to preserve block references. If the unique identifier conflicts with other uid's in the database or the import, the import will fail. Be careful using this attribute. Standard Roam uid's are 9 characters, but can be any length. Roam uses naniod.js to generate these
- type:: string
- children
- description:: An array of blocks, the order is implicit from the order of the array
- type:: array of Blocks
- create-time
- description:: The time the object was created, measured in ms since unix epoch. If not supplied, the create-time of the object will be filled in by either the edit-time, or now.
- type:: integer
- Epoch time in milliseconds (13-digit numbers)
- edit-time
- description:: The time the object was last edited, measured in ms since unix epoch. If not supplied, the edit-time of the object will be filled in by either the create-time, or now.
- type:: integer
- edit-user
- description:: The user who last edited the object.
- type:: json object of the format `{":user/uid" "ROAM-USER-UID"}`
- heading
- description:: Determines what heading tag to wrap the block in, default is no heading (0)
- type:: integer, 0 | 1 | 2 | 3
- For level of heading, 0 being no heading (the default) 1 heading h1, etc
- text-align
- description:: The text-align style for a block
- type:: string, "left" | "center" | "right" | "justify"
- By default is left (as determined by the browser defaults)
- **Example**
- ```javascript
[{:title "December 10th 2018"
:create-email "josh@roamresearch.com"
:create-time 1576025237000
:children [{:string "[[Meeting]] with [[Tim]]"
:children [{:string "Meeting went well"}]}
{:string "[[Call]] with [[John]]"}]}
{:title "December 11th 2018"}]```
- More (better) examples can be found by exporting roam to json
---
# Examples of :q query blocks
- `:q` queries can be used to display the results of datomic/datascript queries in your Roam graph
- If you're technically inclined (or prompt an AI to do it well), you can use these to very flexibly query any condition in your graph
- Resources::
- Query Reference Resource: https://docs.datomic.com/query/query-data-reference.html
- **Tip:** If your variable name contains "uid", then in the table, shows block view or page view
- Here's a very useful blog article on getting started with roam-flavored datascript queries: https://www.zsolt.blog/2021/01/Roam-Data-Structure-Query.html
- Video going through this feature and the demos below:
- original video
- {{[[video]]: https://www.loom.com/share/b384798d37904947afefe9059c71035e}}
- video with quality of life improvements from [[March 28th, 2025]]
- {{[[video]]: https://www.loom.com/share/a3e5f8126d924b3eb95c7c11209eceee}}
- video with QOL improvements from [[March 31st, 2026]]
- {{[[video]]: https://www.loom.com/share/f62d4893563143ae84cdae3640af6eb8}}
## Examples
#### Getting started example
- :q
"Number of pages in the graph"
[:find (count ?page) . :where [?page :node/title _]]
#### Some other small examples
- (small = returning a single value, which is shown inline)
- :q
"Number of code blocks in the graph"
[:find (count ?b) .
:where [?b :block/string ?s]
[(clojure.string/starts-with? ?s "```")]]
- :q
"Number of TODOs in the graph:"
[:find (count ?b) . :where [?todo-page :node/title "TODO"] [?b :block/refs ?todo-page]]
- equivalent queries to the above, but without the title:
- :q
[:find (count ?page) . :where [?page :node/title ?page-title]]
- :q
[:find (count ?b) .
:where [?b :block/string ?s]
[(clojure.string/starts-with? ?s "```")]]
- :q
[:find (count ?b) . :where [?todo-page :node/title "TODO"] [?b :block/refs ?todo-page]]
- Here's an interesting query:
- :q "5 random pages in the graph"
[:find (sample 5 ?class_title) .
:where
[?a_class_page :node/title ?class_title]
[?a_class_page :block/uid ?class_page_uid]]
#### Some table examples
- (we show as a table when the query returns a number of "columns" and a number of data)
- Technically, we show as table [when the find spec denotes a relation](https://docs.datomic.com/query/query-data-reference.html#find-specs). This will look something like `:find ?a ?b` in the query
-
- :q "All Roam pages with 'API' in their title, their first blocks"
[:find ?page-title ?page-uid ?first-block-uid (count ?block)
:where
[?page :node/title ?page-title]
[?page :block/uid ?page-uid]
[(clojure.string/includes? ?page-title "API")]
[?page :block/children ?block]
[?block :block/order 0]
[?block :block/uid ?first-block-uid]]
-
- :q "All Roam pages with 'API' in their title, sorted so that recently created at top"
[:find ?page-uid ?create-time
:where
[?page :node/title ?page-title]
[?page :block/uid ?page-uid]
[?page :create/time ?create-time]
[(clojure.string/includes? ?page-title "API")]]
-
- A more involved example: **All Readwise highlight pages**
- the q
- :q "All Readwise Highlight Pages, sorted so that recently created at top"
[:find ?page-uid ?first-child-uid ?page-create-time
:where
[?page :node/title ?page-title]
;; hack: readwise default template all page titles contain "(highlights)" string
[(clojure.string/includes? ?page-title "(highlights)")]
[?page :block/uid ?page-uid]
[?page :create/time ?page-create-time]
[?page :block/children ?b]
[?b :block/order 0]
[?b :block/uid ?first-child-uid]]
- no such pages in this graph sadly, please check our video for a demo:
- 
-
- Example:: q getting children of a block and parsing out number
- sample data (student + roll number)
- Alice 1
- Bob 2
- Claire 3
- Herbert 43
- Andy 78
- the query
- ```clojure
[:find ?e ?s
:where
[?parent :block/uid "CQjUT-rQD"]
[?parent :block/children ?e]
[?e :block/string ?s]]```
- :q ```clojure
[:find ?e ?s
:where
[?parent :block/uid "CQjUT-rQD"]
[?parent :block/children ?e]
[?e :block/string ?s]]```
-
- Example:: get 4 random pages in the graph
- `:q "Pages in the graph" [:find ?p :where [?p :node/title]]`
- :q "Pages in the graph" [:find ?p :where [?p :node/title]]
- GIF
- 
-
- Example:: get current page and how many backrefs it has (this uses `current/page-title` )
- the query
- ```clojure
[:find ?p (count ?b)
:where
[?p :node/title current/page-title]
[?b :block/refs ?p]]```
- :q ```clojure
[:find ?p (count ?b)
:where
[?p :node/title current/page-title]
[?b :block/refs ?p]]```
-
- Example:: get additions to changelog in current calendar month (this uses the special symbols `ms/this-month-start` and `ms/this-month-end` )
- How this works:
- to minimize the number of results, we're also nesting results under parent results
- we're also sorting via `?t` to get recent results at top (you can hide this column and keep sorting!)
- the query
- ```clojure
[:find ?b ?t
:where
[?changelog-p :node/title "Change Log"]
[?b :block/page ?changelog-p]
[?b :create/time ?t]
[(<= ms/this-month-start ?t ms/this-month-end)]]```
- :q ```clojure
[:find ?b ?t
:where
[?changelog-p :node/title "Change Log"]
[?b :block/page ?changelog-p]
[?b :create/time ?t]
[(<= ms/this-month-start ?t ms/this-month-end)]]```
-
- Example:: query to get backrefs of a page (in this example: [[Quality of Life Improvements]]) created by [a specific user]([[Baibhav Bista]]) in the current calendar year ((This uses the rules `(refs-page ?page-title ?b)`, `(created-by ?user-name ?block)`, and `(created-between ?t1 ?t2 ?b)`))
- the query
- ```clojure
[:find ?b ?t
:where
[?b :block/uid ?uid]
(refs-page "Quality of Life Improvements" ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]
(created-between ms/this-year-start ms/this-year-end ?b)]```
- in action ...
- :q ```clojure
[:find ?b ?t
:where
[?b :block/uid ?uid]
(refs-page "Quality of Life Improvements" ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]
(created-between ms/this-year-start ms/this-year-end ?b)]```
- How this works:
- this uses the rules `(refs-page ?page-title ?b)`, `(created-by ?user-name ?block)`, and `(created-between ?t1 ?t2 ?b)`
- After getting the query, using the UI, we're also sorting in descending order of `?t`
- (so that latest is at the top)
- 
-
- Examples of queries our new `in-dnp-between`, `refs-dnp-between`, `in-or-refs-dnp-between` enable [[Examples of :q query blocks]]
- (this roam graph does not have much content in daily note pages, so below queries will probably be empty, please copy and test in your own graphs)
- DNP blocks this month with create time
- `(in-dnp-between dnp/this-month-start dnp/this-month-end ?b)`
- :q "DNP blocks this month with create time"
[:find ?b ?t
:where
(in-dnp-between dnp/this-month-start dnp/this-month-end ?b)
[?b :create/time ?t]]
- TODOs from last week's daily notes or reffing those DNPs
- `(in-or-refs-dnp-between dnp/last-week-start dnp/last-week-end ?b)`
- :q "TODOs from last week's daily notes or reffing those DNPs"
[:find ?b
:where
(in-or-refs-dnp-between dnp/last-week-start dnp/last-week-end ?b)
(refs-page "TODO" ?b)]
- Blocks referencing this week, written by particular user "Baibhav Bista"
- `(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)`
- :q "Blocks referencing this week, written by Baibhav"
[:find ?b
:where
(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]]
- Blocks referencing this week, written by particular user "Baibhav Bista" (also filter out blocks already in those DNPs)
- `(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(not (in-dnp-between dnp/this-week-start dnp/this-week-end ?b))`
- :q "Blocks referencing this week, written by Baibhav"
[:find ?b
:where
(refs-dnp-between dnp/this-week-start dnp/this-week-end ?b)
(not (in-dnp-between dnp/this-week-start dnp/this-week-end ?b))
(created-by "Baibhav Bista" ?b)
[?b :create/time ?t]]
-
- One random old reference of the currently open page
- I manually clicked on ... then
set sorting to be random
set rows per column to a 1
- To test it out, open the query below on the sidebar (shift click) and then go to a page with a lot of references like [[video]]
- :q "One random old reference to open page"
[:find ?uid ?t
:where
(refs-page current/main-window-page-title ?b)
[?b :create/time ?t]
[?b :block/uid ?uid]
[(< ?t ms/-365D-start)]]
-
-
---
# Apple Shortcuts/Speak to Roam
- An Official Capture [[Apple Shortcut]], built by the Roam team!
- Link to install latest version: https://www.icloud.com/shortcuts/ae1ae833cada4999b44d9ac5dda2dc6d
- For issue reports or enhancement requests, please email us at support@roamresearch.com
- [[Getting started]] guide
- **Requirements**
- apple devices only (iphone, ipad, mac, apple watch, etc.)
- Need an OpenAI API key for transcription & optional post-processing.
- if you do not have one, we go through how to create one in the steps below
- **Steps**
- Follow this link for the shortcut:
- Link to install latest version: https://www.icloud.com/shortcuts/ae1ae833cada4999b44d9ac5dda2dc6d
- Click on "Set up Shortcut" & Enter your graph's name to get started
- 
- Get an "append-only" Roam API token
- settings > graph > new API token.
- 
- 
- In the next screen, enter a description for the token and change the scope to `append-only`
- 
- In the next screen, click on the "Clipboard" icon 📋 to copy the token to your clipboard. It will start with "roam-graph-token-"
- 
- insert the token in the shortcuts app
- 
- In the next screen, leave empty if you want to capture to the daily note, otherwise, enter the title of the page you want to ✨speak to✨
- create your OpenAI API keys:
https://platform.openai.com/api-keys > create new secret key
- 
- 
- 
- Enter the OpenAI API keys into the shortcut
- 
- Few configuration steps regarding if we want to post-process, if we want to save the raw transcript if so, and if we want to change the post-processing prompt
- 
- 
- 
-
- Congrats! Now you can speak to your graph!
- [[Change Log]]
- small change to the behavior for capturing to Daily Note pages [[October 26th, 2024]] - **no action needed on your side!**
- It turns out that Apple broke some shortcut-related behavior in iOS 18 and that caused this Apple Shortcut to fail if it was set up to save to the daily note page.
- We made a backend change and it should be working now (abeit with some difference in how the captured text looks like)
- **tldr; ** No action needed on your side. The shortcut should work for all iOS, ipadOS and MacOS versions
- The difference in how the captured text looks like:
- **What it looked like previously**
- 
- **What it looks like now**
- 
- We will be releasing a new version soon-ish that fixes this change (and have a few new features), but this was the only way we could make the current and older versions of the Apple Shortcut to still work on the new OS
- v1.3.0: https://www.icloud.com/shortcuts/ae1ae833cada4999b44d9ac5dda2dc6d
- **Improvements**
- We now support both encrypted graphs and unencrypted graphs
- On encrypted graphs, you can create an "append-only" token!
- Captures to today's Daily Notes Page by default
- Captures are stored under a block/capture group `[[Speak to Roam]] Captures`
- 
- If you do not want to capture to DNP, you can alternatively pass an input page to capture underneath!
- More resilient to shortcut failure (If shortcut fails, you can find the recordings in Files in `Shortcuts/SpeakToRoam/FailedRecordings`. If it suceeds, you can find them in `Shortcuts/SpeakToRoam/HandledRecordings`. Behavior slightly different on Apple Watch)
- Shortcut is now available on the Share Sheet without extra configuration
- You can use this to share recordings from the Voice Memos app to Roam via the shortcut!
- v1.2.0
- 1. additional optional GPT4 API post processing step after transcription (records the output in a single roam block. Later, you can easily copy paste the block contents to get a nested structure)
- 2. The initial check of no internet should be faster (since we do a GET request to google.com now)
- v1.1.0
- If no internet, fail immediately
- If recording has been made and then something fails (Whisper API or Roam Backend), then save the recording to “iCloud Drive/Shortcuts/SpeakToRoam/FailedRecordings/” folder and show a proper error message to the user
---
# Block Context Menu
- The Block Context Menu is the menu that gets pulled up when you right click the circle bullets on any block, it brings up a list of common features you might need, these commands include:
- Team GIFs::
- Toggling block context menu
- 
- Copy Block ref
- 
- Focus on block
- 
- Open in Sidebar
- 
- Expand All
- 
- Collapse all
- 
- Add reaction
- 
- Make todo
- 
- Add version
- 
- Delta (not really sure about this, added it in case it's needed)
- 
- View as Numbered list
- 
- View as Document
- 
- Alignment
- 
- Headings
- 
- Roam Team Videos::
- Mermaid diagrams combined with version control in Roam Research by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=UF22iK8fX-A&t}}
#[[Version Control]] | #[[Diagram]]
- Articles::
- [Programming your attention with Roam Research and ∆](https://elaptics.co.uk/journal/roam-research-programmable-attention/) by [[Elaptics]]
- #[[Delta]] | #[[Spaced Repetition]] | #[[Programmable Attention]]
- [Beyond Spaced Repetition: Δ in Roam Research](https://www.iantay.dev/post/beyond-spaced-repetition-%CE%B4-in-roam-research/) by [[Ian Tay]]
- #[[Delta]] | #[[Spaced Repetition]] | #[[Programmable Attention]]
- [A short (preliminary) guide to Spaced Repetition in Roam Research](https://www.cortexfutura.com/preliminary-spaced-repetition-roam/) by [[Cortex Futura]]
- #[[Delta]] | #[[Spaced Repetition]]
- [Spaced Repetition in Roam Research](https://davidbieber.com/snippets/2021-01-02-spaced-repetition-in-roam-research/) by [[David Bieber]]
- Community Videos::
- Roam Research: Delta Feature by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=2DkzqmidG54}}
#[[Delta]]
- Concept of using Delta and Kanban for Time Management by [[RoamHacker]]
- {{[[video]]: https://www.youtube.com/watch?v=sCGnWMqLteE}}
#[[Delta]] | #[[Kanban]]
- Versions: Fundamentals of Roam Research by [[R.J. Nestor]]
- {{[[video]]: https://www.youtube.com/watch?v=ryU0bMAz1zo}}
#[[Version Control]]
- Key Commands::
- `⬅ Right click on the circle bullet`
---
# Features
## [[Fundamentals]]
#### [[Bidirectional linking]]
- It doesn't matter what [page]([[Pages]]) you've written a note on, if you mention an idea, every place where you mentioned that idea will get collected underneath that page in the [[Linked References]] section when you turn turn that idea into a [page reference]([[Page References]])
- Roam Team Videos::
- {{[[video]]: https://www.youtube.com/watch?v=v9s3pusI1JQ}}
- {{[[video]]: https://www.youtube.com/watch?v=lHkMq3aqDtw&ab_channel=ConorWhite-Sullivan}}
- Articles::
- [A Short History of Bi-Directional Links](https://maggieappleton.com/bidirectionals) by [[Maggie Appleton]]
- Key Commands::
- `[[` to find or create [[Page References]]
- `cmd+u` (macOS) / `ctrl+u` (PC) to [[Find or create page]]
- `#` to find or create [[Page References]] as a [tag]([[Tags]])
#### [Navigation]([[Navigation]])
#### [Formatting]([[Formatting]])
#### [Search]([[Search]])
#### [Key Commands]([[Key Commands]])
## **Components** #.rm-grid
### Basic
#### [[Blocks]]
#### [Pages]([[Pages]])
#### [[Right Sidebar]]
#### [[/ Commands]]
#### [[Daily Notes]]
#### [[TODO/DONE]]
#### [[Templates]]
#### [[Command Palette]]
### Advanced
#### [[Filter]]
#### [[Kanban]]
#### [[Diagram]]
#### [[Table]]
#### [[Query]]
#### [[Slider]]
#### [[Calculator]]
#### [[Encrypted Block]]
### Other
#### [Left Sidebar]([[Left Sidebar]])
#### [Reactions]([[Reactions]])
#### [Graphs and Settings]([[Graphs and Settings]])
#### [All Pages]([[All Pages]])
#### [Graph Overview]([[Graph Overview]])
#### [Sharing]([[Sharing]])
#### [Import]([[Import]])
#### [Export]([[Export]])
## **Extend** #.rm-grid 🚧
#### [[roam/js]]
#### [[roam/css]]
#### [[roam/render]]
-
---
# Pipedream Workflows
- Pipedream is a no-code / low-code platform where one can build powerful workflows that connect your applications, services, APIs, and more
- In other words, it is similar to [Zapier]([[Zapier Integration]]) but is more powerful and flexible (particularly if you can code a little bit)
- If you do not know how to code, do not worry, the workflows below do not require any coding knowledge to set up
- Workflows
- ****Audio file in Cloud Storage -> Transcript & Summary in Roam****
- **Just upload an audio file to Dropbox/GDrive, and automatically get the transcript and summary in your Daily Note!!**
- ****What you will need****
- A Roam graph you want to capture to
- This works even in encrypted graphs!
- Won't work for local graphs though 😢
- An OpenAI API Key
- we use OpenAI APIs for both transcription and summarization
- transcribing the audio file - uses __Whisper__
- summarizing the transcript - uses __gpt-4o-mini__
- If you do not have an OpenAI API key, please go to https://platform.openai.com/api-keys > create new secret key
- Do note that api keys using the Trial credit are rate limited pretty hard by OpenAI. If you think you will use this workflow regularly, we recommend you set up billing, then create a new secret key and use that in this workflow
- ****Costs****
- **tldr:** a little bit more than 0.36$ per hour of audio (or $0.006 per minute of audio)
- as long as you do not have very frequent usages
- **Alternative:** If your use case is that you have a lot of small recordings/voice memos that you want to send to Roam, and if you are in the Apple Ecosystem, please checkout our [[Apple Shortcuts/Speak to Roam]]
- Breakdown
- Whisper cost = **$0.006 / minute** (or eqvt 0.36$ per hour of audio)
- this should be the vast majority of the cost of using this workflow
- Summarization (gpt-4o-mini) cost = **negligible**
- The cost for this should be much less than transcription since this is OpenAI's cheapest model till date
- Pipedream: **Free (for non-heavy usage)** (details below)
- Pipedream's free plan is very generous (compared to competitors) and should be more than enough for regular usage
- Their free plan is 10 credits/day. Most voice recordings should only use up 1 credit.
- So, this means their free plan supports 10 voice recordings per day.
- You will probably only need to upgrade if you use this workflow more frequently or if you input larger files
- Larger files can take up multiple credits. For example, when testing with a podcast episode of 1.5 hours, it took up 3 credits
- **Alternative:** If your use case is that you have a lot of small recordings/voice memos that you want to send to Roam, and if you are in the Apple Ecosystem, please checkout our [[Apple Shortcuts/Speak to Roam]]
- ****Installation Process****
- Please watch the video and use the links below
- This workflow has two versions
- Google drive version: https://pipedream.com/new?h=tch_ovfa8o
- Dropbox version: https://pipedream.com/new?h=tch_8rf9P4
- **[[Loom video]] showing how to set up the workflow for yourself**
- {{[[video]]: https://www.loom.com/share/17c40a12022c476dbf85f5eb086e63eb}}
- (Baibhav here: sorry for the long video 😅, this goes through setting up the workflow as well as any problems that might arise)
- ****Things to keep in mind** **
- First, please watch the video!
- When setting up the Google drive version, in the second step, `File` config might be empty. You NEED to enter `{{steps.trigger.event.id}}` there
- this not being automatically set seems to be a bug in Pipedream
- When setting up the Dropbox version, in the second step, the `Path` config might be empty. You NEED to enter `{{steps.trigger.event.path_lower}}` there
- this not being automatically set seems to be a bug in Pipedream
- If you run into any issues, please contact us at [support@roamresearch.com](mailto:support@roamresearch.com)
- Idea: weekly digest sent to your gmail
---
# TODO/DONE
- TODOs are the core of [task management]([[Task Management]]). We have been using them in our bullet journals, task apps, and now... Roam.
- Creating TODOs in Roam is incredibly easy! Below are different ways to do that:
- **Right clicking on the bullet**
- `Right-click` on the bullet you want to transform into a todo.
- Click on `Make TODO`
- **Using the keyboard shortcut**
- While you're editing the block you want to transform into a TODO, press:
- `cmd+return` (macOS)
- `ctrl+enter` (PC)
- **Using the** [[/ Commands]] **Menu**
- Type `/`
- Hit `enter`
### Roam Team Videos::
- {{[[video]]: https://www.youtube.com/watch?v=3aCl7dCYVqA&t=6s&ab_channel=ConorWhite-Sullivan}}
#[[TODO/DONE]] | #[[Daily Notes]] | #[[Filter]] | #[[Linked References]] | #[[Block Embed]] | #[[Current time]] | #[[Block References]]
- {{[[video]]: https://www.youtube.com/watch?v=asQ4RSjjCu4&ab_channel=ConorWhite-Sullivan}}
#[[TODO/DONE]] | #[[Linked References]]
### Team GIFs::
#### Cycling state in one block
- 
- Select a block
- Press `ctrl+enter` (PC) / `cmd+return` (macOS)
#### Cycling state in multiple blocks
- 
- Select multiple blocks
- Press Ctrl+enter (PC) / Cmd+enter (macOS)
#### Checking todo box and unchecking it
- 
- You can also right click the bullet to "Make TODO"
- Click the todo box to mark it TODO or DONE
### Community Videos::
#### Roam Research: TODOs by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=3taL1v-IKXg}}
#[[TODO/DONE]] | #[[Linked References]] | #[[/ Commands]]
#### Roam: How to Make a Master Task List on Roam by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=mIEgS0JkJBo&t=5s&ab_channel=ShuOmi}}
#[[TODO/DONE]] | #[[Page References]] | #[[Filter]] | #[[Daily Notes]]
#### Plan Your Day With The Magic List (Roam Research Task Management) by [[Daniel Wirtz]]
- {{[[video]]: https://www.youtube.com/watch?v=5U62cEE7QsM&t=6s&ab_channel=DanielWirtz}}
#[[TODO/DONE]] | #[[Query]] | #[[Page References]] | #[[Daily Notes]] | #[[Block References]]
#### Todoist to Roam Research - Advanced Task Management in Roam by [[Matt Goldenberg]]
- {{[[video]]: https://www.youtube.com/watch?v=xOTTyLtgqpM}}
#[[roam/css]] | #[[Extensions]] | #[[roam/js]] | #[[Sidebar]] | #[[TODO/DONE]] | #[[Query]]
### Articles::
#### [Using Roam Research for GTD-Style Task Management – The Sweet Setup](https://thesweetsetup.com/using-roam-research-for-gtd-style-task-management/)
- #[[Daily Notes]] | #[[TODO/DONE]] | #[[Page References]] | #[[Query]] | #[[Linked References]]
#### [Using TODO to Get Things Done with Roam Research (GTD) — Roam Tips & Hacks](https://www.roamtips.com/home/use-todo-get-things-done-roam-research-gtd)
- #[[TODO/DONE]] | #[[Page References]] | #[[Date picker]] | #[[Filter]]
### Key Commands::
- Cycle through TODO/DONE state:
- `cmd+return` for macOS
- `ctrl+enter` for Windows
---
# Blocks
- **Each bullet you see is a __block__, and we write them inside pages like this one.**
- We create new blocks by pressing `Enter`; and nest them using `Tab` (press`Shift+Tab` to unindent)-
- This creates __children blocks__, which we can expand, collapse, and focus.
- [Indenting]([[Indentation]]) provides structure. We can scan pages with ease and find related blocks.
- You can press `Shift+⬇` in a block to select it, and click and drag the bullet to move blocks around.
- One of Roam's most powerful features is [[Block References]].
### Team GIFs::
#### Creating a block
- 
- Key Commands::
- Be on a block and press `enter`
#### Indenting and outdenting
- 
- Key Commands::
- `Tab` to indent
- `Tab+enter` to outdent
#### Collapsing and expanding
- 
#### Multibar
- 
#### Deleting a block
- 
- Key Commands::
- `Esc+backspace`
#### Selecting multiple blocks
- 
#### Selecting blocks and then copying block refs
- 
- Key Commands::
- `Cmd+shift+c` on Mac
- `Ctrl+shift+c` on Windows
#### Moving blocks
- **Drag and drop**
- 
- **Keyboard shortcut**
- 
- Key Commands::
- `cmd+shift+up` and `cmd+shift+down` on Mac
- `alt+shift+up` + `alt+shift+down` on Windows
### Articles::
#### [What is a block in Roam Research (and what are block embeds)?](https://www.roamtips.com/home/what-is-block-roam-research) by [[Roam Tips]]
### Community Videos::
#### What makes Blocks in Roam Research different by [[Cortex Futura]]
- {{[[video]]: https://www.youtube.com/watch?v=6VmtiDYjy_k}}
#[[Blocks]] | #[[Block References]]
#### Blocks in Roam Research: Part One - What Makes Them Unique by [[Lisa-Marie Cabrelli]]
- {{[[video]]: https://www.youtube.com/watch?v=hGzTuIPXv7I}}
#[[Blocks]] | #[[Block References]]
---
# Graphs and Settings
### Team GIFs::
#### Access from
#### Dropdown menu to access graphs
- 
-
#### URL
- 
-
#### Sign up for a plan
- 
-
#### Upgrade to believer flow
- 
-
#### Create new [[Graph]]
#### [[Hosted Graph]]
- 
#### [[Local Graph]]
- 
-
#### View all graphs
#### Via [[Left Sidebar]]
- 
-
#### Via [[Graphs and Settings]]
- 
-
#### Chat with us through the live chat button
- 
-
#### Sign out
- 
-
#### Cancel subscription
- 
## What do the different icons mean?
- 
- 
- 
- 
- 
---
# Search
## [[Find or create page]]
### Team GIFs::
#### Find page via "Find or Create Page"
- 
#### Create page via "Find or Create Page"
- 
#### Key Commands::
- Toggle focus: `ctrl+u` on PC, `cmd+u` on mcOS
## [[Page References]]
### Team GIFs::
#### Inline page reference search
- 
#### Search All Pages
- 
### Key Commands::
- Inline page reference search `[[]]`
## [[Block References]]
### Team GIFs::
#### Inline block reference search
- 
### Key Commands::
- Inline block reference search: `(())`
## [[Block Search]]
### Team GIFs::
#### Advanced block reference search
- 
### Key Commands::
- Toggle advanced block reference search: `ctrl+shift+9`
### Community Videos::
#### Top 10 Roam Shortcuts for Beginners by [[Zack Fan]]
- {{[[video]]: https://www.youtube.com/watch?v=hWeU14NAgyw}}
#[[Right Sidebar]] | #[[Graph Overview]] | #[[Block Search]] | #[[Find or create page]] | #[[Navigation]]
## [[Tags]]
### Team GIFs::
- Inline tag search
- 
### Key Commands::
- Inline tag search: `#`
### Articles::
#### [The two types of search in Roam and seven ways to search](https://roamstack.com/searching-in-roam/) by [[RoamStack]]
- #[[Search]] | #[[Block Search]] | #[[Reference]]
---
# Why you can't say
- #[[Full Text]] {{=: | [[Kevin Lacker]] [[Whiteboarding Challenges]] [[Taboos]]}}
- [Kevin Lacker's blog](https://lacker.io/)
- [About Me](https://lacker.io/about/)
- **Why You Can't Say**
- Apr 5, 2017
- Recently on a tip from [Ivan Kirigin](https://twitter.com/ikirigin) I reread this now-ancient Paul Graham article, [What You Can’t Say](http://www.paulgraham.com/say.html). Like the idea of [Straussian reading](http://lacker.io/books/2017/03/26/straussian-reading.html), the essay is looking for secret truths which are currently inappropriate to share publicly.
- > It's tantalizing to think we believe things that people in the future will find ridiculous. What __would__ someone coming back to visit us in a time machine have to be careful not to say? That's what I want to study here. But I want to do more than just shock everyone with the heresy du jour. I want to find general recipes for discovering what you can't say, in any era.
- At first I was going to dig in, follow the instructions in this essay, perhaps try to get meta and turn them on the essay itself, and find some secret truths. But there was just too much to bite off at once and I ended up gnawing on a tangent.
- Specifically, the part that really sparked some thought for me was this hypothesis on the source of taboos:
- > To launch a taboo, a group has to be poised halfway between weakness and power. A confident group doesn't need taboos to protect it. It's not considered improper to make disparaging remarks about Americans, or the English. And yet a group has to be powerful enough to enforce a taboo.*
- > I suspect the biggest source of moral taboos will turn out to be power struggles in which one side only barely has the upper hand. That's where you'll find a group powerful enough to enforce taboos, but weak enough to need them.
- I’m not totally convinced that most moral taboos come from power struggles. My personal suspicion is that the best explanation of the source of moral taboos comes from the theory of [[Social Constructionism]]
-
- __Human beings rationalize their experience by creating models of the social world and share and reify these models through language.__
- Basically, some truths you believe because they are inherently logical. If at least one of Alice, Bob and Eve has a wrench in their pocket, but Alice and Bob have no pockets, then Eve has the wrench. Some truths you believe because there is empirical evidence. The Earth is round because I saw it on the SpaceX video. But some truths you believe just because other people believe them.
- Instinctively you might think, oh ho that is one of the [147 types of bad arguments](http://www.don-lindsay-archive.org/skeptic/arguments.html). But in practice there are a zillion things you believe not because of logic, but because other people told you to.
- You shouldn’t eat mud
- Red lights mean stop
- Human life is a precious thing
- Lots of useful and totally true facts about the world are socially constructed.
- This can lead to a taboo situation, though. A small group believes X. A much larger group believes Not X. Since both of these truths are socially constructed, there’s no baseline reality. There’s no way to have an intelligent debate. So the larger group turns into an angry internet mob and shouts down the smaller group.
- I believe the topic of startup advice is particularly vulnerable to this phenomenon. You cannot deduce the principles of running a startup from first principles. One effective mechanism is to learn what worked for successful startup founders - to seek out their socially constructed truth. But that’s a pretty small group. In particular, the set of all people in tech industry is a much larger group. Sometimes these groups have opposing socially constructed truths.
- Here’s an example: whiteboard interviews. Are whiteboard interviews a good strategy for interviewing people, or a bad strategy for interviewing people?
- Go read mainstream tech news or social media and you will conclude that whiteboard interviews are terrible. From the first few search results for “whiteboard interviews”:
- [“Whiteboard interviews are widely hated. They also discriminate against people who are already underrepresented in the field.”](https://theoutline.com/post/1166/programmers-are-confessing-their-coding-sins-to-protest-a-broken-job-interview-process)
- [“Virtually every developer I’ve talked with agrees that one’s ability to write algorithms from memory on a whiteboard has almost nothing to do with real day-to-day developer work.”](https://medium.freecodecamp.com/why-is-hiring-broken-it-starts-at-the-whiteboard-34b088e5a5db)
- [“Tech interviews are hard enough, but for many tech pros there’s an aspect that’s downright unbearable: the whiteboard. Developers complain about it often (and have for years), while some tech companies have stopped whiteboard exercises altogether. The question remains: should we just ditch the whiteboard?”](http://insights.dice.com/2016/11/21/whiteboard-interview-problems/)
- The mainstream conclusion is clearly that whiteboard interviews are a bad idea. But on the other hand:
- 
- The most successful companies all use whiteboard interviews. It’s not just the top big companies, it’s the top late stage startups, top early stage startups, the top tier at every point. Nevertheless, the median tech internet is opposed. What’s happening here?
- I think the fundamental discord comes from the nature of interviewing. For example, [Google accepts under 1% of job applicants](https://www.quora.com/What-is-Googles-internship-acceptance-rate). And yet Google has [70,000 employees](https://www.statista.com/statistics/273744/number-of-full-time-google-employees/). If my simplistic math holds up, they have rejected over 7 million people.
- Personally, when I go apply for a job, I think of it like an axiom that I deserve that job. When I get rejected I usually conclude the company is either morons or evil or perhaps if the interviewers were very kind I will be charitable and just conclude that it’s a flawed process. So yeah, I can see how there would be 7 million people out there convinced that Google interviews are a flawed process. They know they are correct because their friends mostly agree with them. But I don’t think Larry is kicking himself wishing they had never adopted the whiteboard interview.
- What is really a shame, though, is that once I had a conversation with a startup CTO that went like this:
- __Me: So how’s recruiting?CTO: Going great, not having any trouble finding software engineers.Me: Wow, I don’t hear that often.CTO: Yeah, once we raised we needed 8 people and we hired them in a month.Me: Double wow. How did your tiny team even do enough interviews to hire 8 people in a month?CTO: Oh, we only had to interview 9 people.Me: Uh oh. How did you interview them?CTO: Well as everyone knows, whiteboard interviews are terrible, so we just kind of chatted about their past experience.Me: Oh no.CTO: I have a really good feeling about this.__
- So, be careful about taking the median startup advice. You might end up with the median outcome.
- **Kevin Lacker's blog[["subscribe via" " " "[RSS](https://lacker.io/feed.xml)"]]**
- [ lacker](https://github.com/lacker)
- [ lacker](https://twitter.com/lacker)
- TODO: insert description here
---
# Callouts
- Callouts are styled [[Blockquote]]s with a type-specific icon and color.
- Start any block with `[[>]] [[!NOTE]]` to create one (or `> [!NOTE]`).
- You can also use the **/Callout** slash command to quickly insert one.
- Click the callout's icon to change its type.
- **Types**
- [[>]] [[!NOTE]] This is a basic note callout
Notes are great for highlighting general information you want to draw attention to.
- [[>]] [[!INFO]] Informational callout with an info icon
Use these for additional context or background details.
- [[>]] [[!SUMMARY]] A summary or abstract callout
Perfect for executive summaries, TLDRs, or condensed overviews.
- Aliases: `abstract`, `tldr`
- [[>]] [[!TIP]] Helpful tip — try using callouts for emphasis!
Combine callouts with **bold**, *italic*, and `code` formatting in both the title and body.
- Aliases: `hint`, `important`
- [[>]] [[!SUCCESS]] Operation completed successfully
All 47 tests passed. The deployment to staging is live.
- Aliases: `check`, `done`
- [[>]] [[!QUESTION]] How do callouts work in Roam?
The first line after `[[!TYPE]]` is the title. Add body text on the next line with **Shift+Enter**.
- Aliases: `help`, `faq`
- [[>]] [[!WARNING]] Be careful when editing shared pages
Other users may be viewing or editing at the same time.
- Aliases: `caution`, `attention`
- [[>]] [[!FAILURE]] Build failed due to missing dependencies
Run `npm install` and check that all peer dependencies are satisfied.
- Aliases: `fail`, `missing`
- [[>]] [[!DANGER]] Do NOT delete this page — critical data
This page contains production configuration values referenced by multiple systems.
- Alias: `error`
- [[>]] [[!BUG]] Found a rendering issue on mobile viewports
The sidebar overlaps the main content when screen width is below 768px.
- [[>]] [[!EXAMPLE]] Here's how you format a callout
Use `[[>]] [[!TYPE]] Title` on the first line. Add body text with Shift+Enter.
- [[>]] [[!QUOTE]] "The best way to predict the future is to invent it."
— Alan Kay, 1971
- Alias: `cite`
- **Foldable Callouts**
- Add `+` or `-` after the type (e.g. `[[!TIP]]+`) to make it foldable. `+` starts expanded, `-` starts collapsed. Click the header to toggle.
- [[>]] [[!TIP]]+ Click to collapse this tip
This body is visible by default because of the `+` marker. It hides when you click the header.
- [[>]] [[!WARNING]]- Hidden by default — click to expand
This body starts collapsed because of the `-` marker. Click the header to reveal it.
- **Headings + Callouts**
- Callouts work inside heading blocks. The title scales with the heading size while the body stays regular size.
- **[[>]] [[!WARNING]] Heading callout**
Body text stays regular size.
- **Custom Types & CSS**
- Unrecognized types fall back to "note" styling but get a `.rm-callout--{type}` CSS class for custom styling. Each callout exposes `--callout-color` and `--callout-bg` custom properties — override these to restyle any type or define your own.
- Turn on the css below to enable the custom types
- {{[[roam/css]]}}
- ```css
/* Override an existing callout type's colors */
/* .rm-callout--warning {
--callout-color: #a371f7;
} */
/* Custom type with emoji icon */
.rm-callout--recipe {
--callout-color: #f778ba;
}
.rm-callout--recipe .rm-callout__icon::before {
content: "🍪";
font-family: initial;
}
/* Custom type with SVG icon from URL (inherits callout color) */
.rm-callout--security {
--callout-color: #e5534b;
}
.rm-callout--security .rm-callout__icon::before {
content: "";
}
.rm-callout--security .rm-callout__icon {
width: 1em;
height: 1em;
background: currentColor;
-webkit-mask-image: url("https://unpkg.com/lucide-static@latest/icons/shield-alert.svg");
mask-image: url("https://unpkg.com/lucide-static@latest/icons/shield-alert.svg");
-webkit-mask-size: contain;
mask-size: contain;
-webkit-mask-repeat: no-repeat;
mask-repeat: no-repeat;
}
/* Override background separately if needed */
/* .rm-callout--recipe {
--callout-bg: rgba(247, 120, 186, 0.2);
} */
```
- > [!recipe] Grandma's cookies
- > [!security] Security alert
---
# Zapier Integration
- [Zapier](https://zapier.com/apps/roam-research/integrations) lets you connect Roam Research to 6,000+ other web services. Automated connections called Zaps, set up in minutes with no coding, can automate your day-to-day tasks and build workflows between apps that otherwise wouldn't be possible.
- Link: https://zapier.com/apps/roam-research/integrations
#### **Getting Started**
- **Walkthrough Video** showing how to connect your Roam graph to Zapier
- {{[[video]]: https://www.loom.com/share/0434049965254f3e86ae8909a368ca52}}
- apart from the setup process, this video also demonstrates how to use Zap templates, in particular, [one that adds new starred emails in Gmail to Roam daily note page](https://zapier.com/apps/gmail/integrations/roam-research/255568759/add-new-starred-emails-in-gmail-to-your-daily-note-pages-in-roam-research)
- Steps::
- Open the graph you want to link with Zapier
- Create a new API Token
- Steps to create new API Token
- **Walkthrough GIF**
- 
- Process is the same for encrypted graphs but you should select the "append-only" scope instead (It is the only option for encrypted graphs)
- Please note that you can only create API tokens for your graphs, not for graphs that have been shared with you
- **Steps** (if you prefer following via text)
- Open your settings via ... > Settings, then go to the "Graph" tab
- 
- In the "Graph" tab in settings, click on the green "+ New API Token" button
- Do note that you need to be the owner/admin of the graph in order to create API tokens
- 
- After clicking the button, please enter a clear description of expected usage. In the access scope, select **read & edit access** for unencrypted graphs and **append-only access** for encrypted graphs. More regarding scope below
- More details regarding scopes for API tokens below:
- **read-only access**
- (only available for unencrypted graphs)
- This scope only allows access to read to your graph.
- In the case of the Zapier integration, this means that you can only use the "Trigger"s, but not the "Action"s
- **read & edit access**
- (only available for unencrypted graphs)
- this scope is the most permissive one. It allows the service to both read your graph and edit/add stuff to it.
- In the case of the Zapier integration, this means that you can use both the "Trigger"s and the "Action"s
- **append-only access**
- (available for **both** encrypted & unencrypted graphs)
- this access only provides the service ability to __add__ stuff to your graph
- In the case of the Zapier integration, this means that you can only use the "Actions"s, but not the "Trigger"s
- In the next screen, click on the "Clipboard" icon 📋 to copy the token to your clipboard. It will start with "roam-graph-token-"
- 
- Then setting up the graph in Zapier:
- **Walkthrough GIF**
- 
- **Steps** (if you prefer following text instead)
- (First of all, you need a Zapier account)
- Go to https://zapier.com/apps/roam-research/integrations
- Click on "Connect Roam Research to 6000+ apps" button
- In the zap that opens, click on the "Sign In" button in the "Account" section in the right sidebar
- 
- A popup window will then appear. There you have to enter three things: the name of your graph, whether it is encrypted or not, and the API token you got from the previous step.
- 
- You can now disregard the zap and start instead from one of our zap templates: https://zapier.com/apps/roam-research/integrations#zap-template-list
- Details
- **More info on Zapier terminology, and what Roam building blocks you can use**
- Each Zap has one app as the **Trigger**, where your information comes from and which causes one or more **Actions** in other apps, where your data gets sent automatically.
- For now, the Roam Zapier Integration has **2 triggers**, **3 write actions** and **1 search action**
- **2 triggers**
- New Linked Reference for a Page/Block
- New or modified Linked Reference for a Page/Block
- **3 write actions**
- Add Content to a Daily Note Page
- Add Content to a Page
- Add Content underneath an existing Block in Your Graph
- **1 search action**
- Get Data for a Page / Block
- If you're using an **unencrypted graph**, you can use all of the building blocks above
- If you're using an **encrypted graph**, you cannot do any reads from the graph (due to it being end to end encrypted), so the only primitives you can use are the **3 write actions**
- In other words, you can only append/add stuff to the graph. This is also suggested by the fact that the only kind of API tokens you can create for encrypted graphs is **append-only access**
---
# Encrypted Graphs
### Limitations of encrypted graphs
#### Warning #.bg-red-200
- If you forget your password for an encrypted graph
- **We cannot retrieve or reset it, and we cannot recover your encrypted notes**
- [[Roam Depot]] and [[roam/js]] extensions running in an encrypted graph will have access to the unencrypted data
- If you want to be sure your notes are secure **do not use** [[roam/js]] extensions that you did not write yourself
- Roam Depot extensions undergo a review process which includes a security review, so they should be okay for most purposes.
- If the data is very critical, you may want to not use any Roam Depot extensions either
- [[Quick Capture]] is disabled
- Existing graphs cannot be encrypted
- We recommend creating a new encrypted graph and importing the existing graph, then delete the existing graph
- Backups and [[Export]]s of the graph are **not encrypted**
- Backups and exports currently do not contain the unencrypted images and media files
- We hope to add this in the future
- [[Offline Graph]]s on the desktop app do not encrypt the images / media files you upload
- The media files are stored on your computer, unencrypted
- You can still share an encrypted graph with someone else, but they need the password used to encrypt it to access the graph
- In the future we hope to release the ability to have multiple password to a graph
- Load times of encrypted graphs may be longer than non encrypted
- Future features, such as a backend API, may not be available for encrypted graphs
- We designed it with the backend API in mind, but likely many of the features of it will not be possible for encrypted graphs
- More Info
- Images and media files are encrypted only on hosted graphs
- This may effect the load time of them
- [[Offline Graph]]s on the desktop app do not encrypt the images / media files you upload
- Roam only encrypts blocks, pages, and media files
- Some metadata about your graph is not encrypted
- For example whether block text is centered or a heading is not encrypted, but the actual content of the block is
- [[Developer]]
- These keys are encrypted
- `:user/display-name :user/email :create/email :edit/email :node/title :block/string :user/uid :user/photo-url :entity/attrs :block/props :ent/emojis :user/settings`
- How do I change my password?
- In the settings panel
- 
- How do I create an encrypted graph?
- {{[[video]]: https://www.loom.com/share/5f7cea684d154559a16d0167cd53f93b}}
- How can I verify that my graph is encrypted?
- {{[[video]]: https://www.loom.com/share/338bd42b80b647aaa0bed3082c53dccd}}
---
# Mermaid Diagrams
- An embedded version of MermaidJS, create mermaid diagrams inside of Roam!
- To read more about Mermaid syntax see https://mermaid.js.org/intro/
- To create a mermaid diagram
- type `/mermaid` and select it from the dropdown or copy and paste `{{mermaid}}` into a new block
- It will look like below
- {{mermaid}}
- Examples::
- Flowchart
- {{[[mermaid]]}}
- flowchart TB
- A --> C
- A --> D
- B --> C
- B --> D
- Sequence Diagram
- {{[[mermaid]]}}
- sequenceDiagram
- Alice->>John: Hello John, how are you?
- John-->>Alice: Great!
- Alice-)John: See you later!
- Gantt Chart
- {{[[mermaid]]}}
- gantt
dateFormat YYYY-MM-DD
title Adding GANTT diagram functionality to mermaid
excludes weekends
%% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)
section A section
Completed task :done, des1, 2014-01-06,2014-01-08
Active task :active, des2, 2014-01-09, 3d
Future task : des3, after des2, 5d
Future task2 : des4, after des3, 5d
section Critical tasks
Completed task in the critical line :crit, done, 2014-01-06,24h
Implement parser and jison :crit, done, after des1, 2d
Create tests for parser :crit, active, 3d
Future task in critical line :crit, 5d
Create tests for renderer :2d
Add to mermaid :until isadded
Functionality added :milestone, isadded, 2014-01-25, 0d
section Documentation
Describe gantt syntax :active, a1, after des1, 3d
Add gantt diagram to demo page :after a1 , 20h
Add another diagram to demo page :doc1, after a1 , 48h
section Last section
Describe gantt syntax :after doc1, 3d
Add gantt diagram to demo page :20h
Add another diagram to demo page :48h
- Themes::
- You can set the theme for an individual diagram like this
- `%%{init: {"theme": "forest"}}%%`
- {{[[mermaid]]}}
- %%{init: {"theme": "forest"}}%%
stateDiagram-v2
direction LR
state [OPEN] {
IDEA --> DRAFT
DRAFT --> PENDING
PENDING --> APPROVED
PENDING --> REJECTED
PENDING --> DRAFT
APPROVED --> ACTIVE
ACTIVE --> INACTIVE
INACTIVE --> ACTIVE
INACTIVE --> DRAFT
ACTIVE --> DRAFT
INACTIVE --> RETIRED
RETIRED --> DRAFT
}
state [CLOSED] {
REJECTED
RETIRED
}
state [What] {
TEST
HEY
}
- You can set the default theme with custom css
- {{[[roam/css]]}}
- ```css
:root {
--mermaidjs-theme: dark;
}```
- You will have to reload the page after applying this for it to take affect
- See the [docs for possible themes](https://mermaid.js.org/config/theming.html#available-themes)
- Roam Team Videos::
- Mermaid diagrams combined with version control in Roam Research by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=UF22iK8fX-A&t}}
#[[Version Control]] | #[[Diagram]]
---
# Right Sidebar
- Roam Team Videos::
- **Sidebar in Roam by [[Conor White-Sullivan]]**
- {{[[video]]: https://www.youtube.com/watch?v=7dASSNABtIo}}
#[[Right Sidebar]] | #[[Linked References]] | #[[TODO/DONE]]
- Community Videos::
- **Roam Research: Right Sidebar and Block References by [[Les Kristofs]]**
- {{[[video]]: https://www.youtube.com/watch?v=rorHyn0BBb4}}
#[[Block References]] | #[[Right Sidebar]]
- Team GIFs::
- **Opening and closing sidebar**
- 
- **Opening window in sidebar**
- 
- **Opening graph view in sidebar**
- 
- **Rearranging order of sidebar**
- 
- **Expand and collapse windows in sidebar**
- 
- **Pin and unpin windows in sidebar**
- 
- **Creating a page and opening it in the right sidebar**
- 
- **Open Kanban in sidebar**
- 
- **Open pages from all pages in right sidebar**
- 
- **Resizing sidebar**
- 
- **Open node in sidebar**
- 
- Articles::
- **[How to use the Roam sidebar](https://www.roamtips.com/home/roam-research-sidebar) by [[Roam Tips]]**
- #[[Right Sidebar]] | #[[Block Embed]] | #[[Linked References]]
- Key Commands::
- `Shift+click` on the page you want to open in the Right Sidebar
- `Ctrl+Shift+O` to open link under cursor
---
# / Commands
- The / Commands give you access to a variety of functions in Roam
- Key Commands::
- To access / Commands, type `/` + `any of the below keyword` + `enter` (in any block) to access each feature
- Team GIFs::
- 
- #.--rm-grid
- ****Functions****
- [[TODO]]
- [[Page References]]
- [[Block References]]
- [[Block Embed]]
- [[Table]]
- [[Diagram]]
- [[Upload Files]]
- [[Templates]]
- [[Video Embed]]
- [[Calculator]]
- [[Mentions]]
- [[Word count]]
- [[Character count]]
- [[Query]]
- ****Time****
- [[Current time]]
- [[Today]]
- [[Tomorrow]]
- [[Date picker]]
- [[Pomodoro timer]]
- **[Formatting]([[Formatting]])**
- [[Links]]
- [[Code Block]]
- [[Inline Code]]
- [[Bold]]
- [[Italics]]
- [[KaTeX]]
- [[Strikethrough]]
---
# Security
## [Security Policy](https://github.com/Roam-Research/issues/security/policy)
- Security is core to our values, and we value the input of security researchers acting in good-faith to help us maintain a high standard for the security and privacy for our users. This includes encouraging responsible vulnerability research and disclosure. This policy sets out our definition of good-faith in the context of finding and reporting vulnerabilities, as well as what you can expect from us in return.
## [🔗](https://github.com/Roam-Research/issues/security/policy#expectations)Expectations
- When working with us according to this policy, you can expect us to:
- Work with you to understand and validate your report, including a timely initial response to the submission;
- Work to remediate discovered vulnerabilities in a timely manner; and
- Recognize your contribution to improving our security if you are the first to report a unique vulnerability, and your report triggers a code or configuration change.
## [🔗](https://github.com/Roam-Research/issues/security/policy#official-communication-channels)Official Communication Channels
- The primary communication channel in via email to [security@roamresearch.com](mailto:security@roamresearch.com). Afterwards communication proceeds to a [Security Advisory](https://help.github.com/en/github/managing-security-vulnerabilities/about-github-security-advisories) on GitHub.
- Security Advisories are separate from public issues in that only you and the Roam team can see them, which allows us to work on fixing the problem without publicizing it further for exploitation.
## [🔗](https://github.com/Roam-Research/issues/security/policy#disclosure-policy)Disclosure Policy
- We follow a [Coordinated Disclosure](https://cheatsheetseries.owasp.org/cheatsheets/Vulnerability_Disclosure_Cheat_Sheet.html#responsible-or-coordinated-disclosure) model, also known as Responsible Disclosure.
- Coordinated disclosure attempts to find a reasonable middle ground between Private and Full disclosure models. With coordinated disclosure, the initial report is made privately, but with the full details being published once a patch has been made available.
- Addressing vulnerabilities requires time and resources. While discussing the initial report we'll agree with you on a deadline for addressing it. If this deadline is not met, then you may adopt the full disclosure approach, and publish the full details. In our case the default deadline is 90 days.
- Google's Project Zero adopts a similar approach, where the full details of the vulnerability are published after 90 days regardless of whether or not the organisation has published a patch.
## [🔗](https://github.com/Roam-Research/issues/security/policy#ground-rules)Ground Rules
- To encourage vulnerability research and to avoid any confusion between legitimate research and malicious attack, we ask that you attempt, in good faith, to:
- Play by the rules. This includes following this policy and any other relevant agreements;
- Report any vulnerability you’ve discovered promptly;
- Avoid violating the privacy of others, disrupting our systems, destroying data, and/or harming user experience;
- Use only the Official Communication Channels to discuss vulnerability information with us;
- Handle the confidentiality of details of any discovered vulnerabilities according to our Disclosure Policy;
- Perform testing only on in-scope systems, and respect systems and activities which are out-of-scope;
- If a vulnerability provides unintended access to data: Limit the amount of data you access to the minimum required for effectively demonstrating a Proof of Concept; and cease testing and submit a report immediately if you encounter any user data during testing, such as Personally Identifiable Information (PII), Personal Healthcare Information (PHI), credit card data, or proprietary information;
- You should only interact with test accounts you own or with explicit permission from the account holder; and
- Do not engage in extortion.
## [🔗](https://github.com/Roam-Research/issues/security/policy#safe-harbor)Safe Harbor
- When conducting vulnerability research according to this policy, we consider this research conducted under this policy to be:
- Authorized in view of any applicable anti-hacking laws, and we will not initiate or support legal action against you for accidental, good faith violations of this policy;
- Authorized in view of relevant anti-circumvention laws, and we will not bring a claim against you for circumvention of technology controls;
- Exempt from restrictions in our Acceptable Usage Policy that would interfere with conducting security research, and we waive those restrictions on a limited basis; and
- Lawful, helpful to the overall security of the Internet, and conducted in good faith.
- You are expected, as always, to comply with all applicable laws. If legal action is initiated by a third party against you and you have complied with this policy, we will take steps to make it known that your actions were conducted in compliance with this policy.
- If at any time you have concerns or are uncertain whether your security research is consistent with this policy, please submit a report through one of our Official Channels before going any further.
## [Security Advisories](https://github.com/Roam-Research/issues/security/advisories)
---
# Query
- [[.--]]
- ****Types of queries****
- ****and****
- Find all blocks matching multiple conditions – i.e. blocks or their parents containing multiple page or block references.
- `{{query: {and: [[page A]] [[page B]] }}}
{{query: {and: [[articles]] ((block)) }}}
{{query: {and: [[Tyler Cowen]] ((block)) [[econ]] }}}
`
- ****or****
- Find all blocks matching any of a number of conditions – i.e. blocks or their parents containing any of the selected page or block references.
- `{{query: {or: [[page A]] [[page B]] }}}
{{query: {or: [[Zen]] [[Buddhism]] }}}
{{query: {or: [[Utah]] [[Idaho]] [[Montana]] }}}
`
- ****not****
- Exclude blocks matching any of the page or block references selected.
- `{{query: {and: [[page A]] {not: [[page B]] }}}}
{{query: {and: [[Slate Star Codex]] {not: [[psychiatry]] }}}}`
- ****between****
- Finds all blocks on daily pages and blocks mentioning a date between two days. ^^**This only works on Daily Notes page**^^.
- You can use the following as a shorthand: [[today]], [[tomorrow]], [[yesterday]], [[last week]], [[next week]], [[last month]], and [[next month]].
- `{{query: {between: [[January 1st, 2021]] [[today]] }}
{{query: {and: [[mistakes]] {between: [[January 1st, 2020]] [[December 31st, 2020]] }}}}
{{query: {and: [[TODO]] {between: [[last week]] [[today]] }}}}`
- **Community Videos::**
- **Query syntax and logic: how to ask Roam questions with queries by [[Robert Haisfield]]**
- {{[[video]]: https://www.youtube.com/watch?v=LJZBGJOzhUY&t=20s&ab_channel=RobertHaisfield}}
- **How Queries Work in Roam Research by [[R.J. Nestor]]**
- {{[[video]]: https://www.youtube.com/watch?v=lBmklV0n8D0}}
- **Roam Research Search Queries by [[David Perell]]**
- {{[[video]]: https://www.youtube.com/watch?v=HoccqyiHvPw}}
- **Insight Hunting with Queries in Roam by [[Cortex Futura]]**
- {{[[video]]: https://www.youtube.com/watch?v=gLAlQGM_l1Q}}
- **Roam Research Query Tutorial: Pending Tasks for Task Management and Task Dashboard Using Queries by [[The Upgraded Brain]]**
- {{[[video]]: https://www.youtube.com/watch?v=Kg5omIyWu8s}}
- **Articles::**
- **[How to query in Roam](https://roamhacks.com/how-to-query-roam/) by [[Roamhacks]]**
- **[Searching Roam With Queries: A Primer](https://www.roamstack.com/roam-queries-primer/) by [[RoamStack]]**
- **Key Commands::**
- `/query`
---
# Courses
#### [Request to be featured](https://roamresearch.typeform.com/to/g5W8uCqz)
## Free
### [Roam in Context](https://signup.cortexfutura.com/roam-in-context) by [[Cortex Futura]]
- Learn the fundamentals of Roam from seven different perspectives. In six videos per use-case, Roam in Context will teach you Roam's basic features in the context of writing, note-taking, task management, project management, journaling, decision making and research/academia. Pick and choose the focus that fits your needs best – zero previous knowledge required.
### [How to Use Roam Research: A Complete Guide](https://www.youtube.com/playlist?list=PLralmZwl_8jJuJMIebWFqm6K5I20a5Qve) by [[Shu Omi]]
- An extensive and comprehensive collection of Roam videos packaged into a free course which can be watched on YouTube.
- They require some existing knowledge of how to use Roam to be most effective.
### [Effective Note-Taking With Roam Research](https://roam.elaptics.co.uk/learn) by [[Andy Henson]]
- A free 14-day email course providing a comprehensive introduction to Roam.
- It starts off with basic instructions and features, progressively feeding you useful tips and tricks along the way, and finally ends with more advanced concepts and use-cases.
### [100 Roam Tips: Beginner to Advanced in 25 Minutes](https://www.youtube.com/watch?v=4yXK9OMc2OU&feature=youtu.be) by [[Marc Koenig]]
- Marc shows you how to go from 0 to 100 in Roam real quick.
- The video also provides timestamps for all the tips, and Marc is including updates and amendments to his tips as Roam evolves and things inevitably change.
### [60 Seconds To Roam](https://www.youtube.com/playlist?list=PL86ba93-ysP_u1i2D44yI9c_tJ5YyTNK-) by [[Mark McElroy]]
- A very short and sweet 6-part course totalling less than 7 minutes total run time.
- Mark guides you through the essentials of Roam in each 60-second episode.
## Paid
### [Your Road to Roam](https://courses.rjnestor.com/p/your-road-to-roam) by [[R.J. Nestor]] $90
- RJ teaches the nuts and bolts of Roam's feature set and provide learners with the tools to develop their own unique workflows based on their specific interests and needs.
### [Magical Academic Note-Taking](https://roam-for-results.teachable.com/p/magical-academic-note-taking) by [[Lisa-Marie Cabrelli]] $129
- Learn how to create, collect and organize magical, time-traveling, smart notes and help your dissertation or thesis write itself. After taking the Magical Academic Note-Taking course, you'll have the skills and process in place to write every day without hesitation. Complete this course and [writing]([[Writing]]) will be fun. Instead of dreading the page, you'll run to the page.
### [Roam Untangled](https://www.jamoe.org/roam) by [[Jamie Miles]] $0-$89
- Learn to setup your Roam from scratch with use-case driven 90-minute online course that focuses on the 20% of features that will get you 80% of the benefit.
- Offered with a freemium model with some free lessons and advanced paid lessons. Features 10 micro-lessons that cover all the Roam essentials and then you jump write into a Roam workflows for producing written content faster.
### [Cite to Write](https://www.cortexfutura.com/p/cite-to-write/?utm_source=roamresearch&utm_medium=graph&utm_campaign=helpgraph) by [[Cortex Futura]] $150
- Cortex Futura's course covers the whole academic process from literature [research]([[Research]]) over note-taking to [writing]([[Writing]]) inside Roam – and how to get your writing from Roam into a nicely formatted draft in Word or PDF format. The course assumes zero previous Roam knowledge, has already helped hundreds of people in [academia]([[Studying]]) use Roam for their research and received much praise from the community.
### [Effortless Output in Roam](https://www.effortlessoutput.com) by [[Nat Eliason]] $250
- Nat's first version of this course was officially endorsed by Roam and he's back again with an updated version, where he'll show you how to master the basics, build and organize your graph, manage projects and produce output, effortlessly.
### [Roam Essentials](https://nesslabs.com/roam-essentials) by [[Anne-Laure Le Cunff]] $49
- Learn how to make the most out of Roam with real-life examples and powerful mental models. Nesslabs's Anne-Laure Le Cunff will guide you through the essentials with short videos and templates for a variety of workflows, helping you kickstart your Roam journey.
-
---
# Updating Roam
#### How do I update Roam?
- **In the top right the the ... menu, there is a button to "check for updates", click it**
- 
- **If you're up to date you'll see this**
- 
- **If there's an update you'll see**
- 
- **Just click on the update button and you'll get the new version**
- (if you have issues see I clicked check updates, it didn't work/I don't see the new feature I'm looking for, whats going on?)
#### How do I update the desktop app?
- You can update the desktop app the same way you update the web app
- Alternatively, you can
- Click on "Roam Research" in the menu bar
- and click on "Check for updates"
- 
#### How do I know what version of the desktop app I am on?
- Click on "Roam Research in the menu bar
- Click on "About Roam Research"
- You should get a popup like this
- 
#### I clicked check updates, it didn't work/I don't see the new feature I'm looking for, whats going on?
- Sometimes, updates can take awhile to reach you. If you close all tabs with Roam open and then reopen them, you can get the update faster/fix any problems you are having with getting the update.
- If you have the installed app, just close it and reopen
#### How do I know what version I am on?
- If you press the help icon (?), the furthest right one in the nav bar
- 
#### How often do you release updates?
- We generally release updates as we finish them, so usually we'll deploy changes a few times a week.
#### Why does the change log not show x feature Conor tweeted about?
- We do our best to keep the change log up to date, but because we release very frequently, sometimes the change log is a few days behind Conor's twitter updates
---
# Create API Tokens
- (how to create Roam API tokens for a graph)
- If you're a developer, you can use these with [[Roam Backend API]] or [[Roam Append API]]
- Steps to create new API Token
- **Walkthrough GIF**
- 
- Process is the same for encrypted graphs but you should select the "append-only" scope instead (It is the only option for encrypted graphs)
- Please note that you can only create API tokens for your graphs, not for graphs that have been shared with you
- **Steps** (if you prefer following via text)
- Open your settings via ... > Settings, then go to the "Graph" tab
- 
- In the "Graph" tab in settings, click on the green "+ New API Token" button
- Do note that you need to be the owner/admin of the graph in order to create API tokens
- 
- After clicking the button, please enter a clear description of expected usage. In the access scope, select **read & edit access** for unencrypted graphs and **append-only access** for encrypted graphs. More regarding scope below
- More details regarding scopes for API tokens below:
- **read-only access**
- (only available for unencrypted graphs)
- This scope only allows access to read to your graph.
- In the case of the Zapier integration, this means that you can only use the "Trigger"s, but not the "Action"s
- **read & edit access**
- (only available for unencrypted graphs)
- this scope is the most permissive one. It allows the service to both read your graph and edit/add stuff to it.
- In the case of the Zapier integration, this means that you can use both the "Trigger"s and the "Action"s
- **append-only access**
- (available for **both** encrypted & unencrypted graphs)
- this access only provides the service ability to __add__ stuff to your graph
- In the case of the Zapier integration, this means that you can only use the "Actions"s, but not the "Trigger"s
- In the next screen, click on the "Clipboard" icon 📋 to copy the token to your clipboard. It will start with "roam-graph-token-"
- 
---
# Articles
- [Request to be featured](https://roamresearch.typeform.com/to/g5W8uCqz)
## Overview
#### [Roam Research: Why I Love It And How I Use It](https://www.nateliason.com/blog/roam) by [[Nat Eliason]]
#### [How to use Roam Research: a tool for metacognition](https://nesslabs.com/roam-research) by [[Anne-Laure Le Cunff]]
#### [Getting Comfortable with Roam](https://www.colemanm.org/post/getting-comfortable-with-roam/) by [[Coleman McCormick]]
#### [How to Take Better Notes With Roam Research](https://lawsonblake.com/roam-research-review/) by [[Lawson Blake]]
#### [Computer Assisted Intuition: How Roam Research fulfills the web's original dream](https://capiche.com/e/roam-research-worldwideweb-xanadu) by [[Matthew Guay]]
## Guides
### [Journaling]([[Journaling]])
#### [How to Keep a Journal in Roam Research](https://markmcelroy.com/how-to-keep-a-journal-in-roam-research/) by [[Mark McElroy]]
#### [How I Use Roam as a Digital Bullet Journal](https://medium.com/my-learning-journal/how-i-use-roam-as-a-digital-bullet-journal-df6e51e56f0f) by [[Shu Omi]]
#### [Atomic Journaling - Expanding Thoughts](https://brandontoner.substack.com/p/atomic-journaling) by [[Brandon Toner]]
#### [Interstitial journaling: combining notes, to-do & time tracking - Ness Labs](https://nesslabs.com/interstitial-journaling) by [[Anne-Laure Le Cunff]]
#### [How to use Roam Research for Interstitial Journaling](https://www.cortexfutura.com/interstitial-journaling-roam-research/) by [[Cortex Futura]]
#### [A beginner’s guide to Roam Research: getting started in 5 easy steps](https://nesslabs.com/roam-research-beginner-guide) by [[Anne-Laure Le Cunff]]
#### [In search of the Literature X-ray: Using Roam in academic research](https://www.roambrain.com/in-search-of-the-literature-x-ray/) by [[Cortex Futura]]
#### [10 ways to speed up your Roam Research workflow](https://nesslabs.com/roam-research-workflow-tips) by [[Anne-Laure Le Cunff]]
### [Studying]([[Studying]])
#### [How to Get the Most Out of Online Courses with Roam](https://infodistillery.com/roam/) by [[Anita Amini]]
### [Product Management]([[Project Management]])
#### [Networked Thinking Meets Product Thinking: Using Roam for Product Management](https://www.roambrain.com/networked-thinking-meets-product-thinking/) by [[Andrew Yu]]
### [[Zettelkasten]]
#### [Implementing Zettelkasten in Roam](https://www.roambrain.com/implementing-zettelkasten-in-roam/) by [[Zakk Fleischmann]]
- {{[[roam/css]]}} #.h
- ```css
.black .rm-alias {
color: #202B33 !important;
}```
-
#### **Check us out in the** [News and Press]([[News and Press]])
---
# Developer Documentation
- If you're a developer who'd like to build extensions for Roam or connect stuff to Roam, please checkout our `developer-documentation` graph: https://roamresearch.com/#/app/developer-documentation
- **Some starting points**
- [[Roam Alpha API]]: https://roamresearch.com/#/app/developer-documentation/page/tIaOPdXCj
- This is the API that frontend Roam extensions use
- If you're writing a [[Roam Depot]] [extension]([[Roam Depot Extensions]]), in addition to the `roamAlphaAPI`, you can also use the `extensionAPI` ([linked here](https://roamresearch.com/#/app/developer-documentation/page/y31lhjIqU))
- [[Roam Backend API]]: https://roamresearch.com/#/app/developer-documentation/page/W4Po8pcHQ
- A REST API for your roam graph
- You can use this API to read or write to your Roam graph via your own code or a variety of services
- Some examples of things that use the Roam Backend API
- **[Speak to Roam]([[Apple Shortcuts/Speak to Roam]])** Apple Shortcut (speak and send transcript to your Roam graph)
- An Apple Shortcut which allows you to speak and send the transcript to your Roam graph (works on iPhone, iPad, Mac and even on an Apple Watch )
- And it’s free! (though you do have to enter an OpenAI key 😅)
- Latest version: **v1.2.0: ** https://www.icloud.com/shortcuts/9280597747c543eab39dd65d4aebd992
- Features
- Uses the [[OpenAI]] Whisper API to transcribe a voice recording
- Optionally post-process the transcript via an [[OpenAI]] GPT4 API call (prompt is customizable)
- If recording has been made and then something fails, then save the recording to “iCloud Drive/Shortcuts/SpeakToRoam/FailedRecordings/” folder and show a proper error message to the user
- [[Loom video]]s
- (these are for an older version but should be generally correct)
- The demo video: https://www.loom.com/share/76ebb8a30b1043b3a566f4077054ea73Longer
- Set up guide video: https://www.loom.com/share/9bdbf2495e1f4a049d3d7354594a9808
- the [[Raycast]] extension
- **New and Updated [[Raycast]] extension for Roam!!**
- MacOS users, watch the demo video below to get a sense of the power of having your Roam graph (or graphs 😉) at your fingertips:
- {{[[video]]: https://www.loom.com/share/3fa11c532cb44822a047caecc638e47f}}
- Features::
- Search across all your installed graphs or in one specific graph
- 
- 
- Quick capture notes to your Roam graph without leaving your keyboard
- 
- View a random block from your roam graph
- Easily create Raycast quicklinks to open Roam graphs or specific pages in the graph even faster
... and more features baking in the oven!
- Getting Started Guide
- Install [[Raycast]] from https://raycast.com
- Then install the Roam Extension from: https://raycast.com/roamresearch/roam-research
- Follow the loom video below to add a graph
- {{[[video]]: https://www.loom.com/share/31ada35f7c8b4f44a2ba537b15237854}}
- If you run into any issues, drop us a message at support@roamresearch.com or via Intercom and we will get on it immediately.
- Big thanks to [[hyc]] for their work on the initial version of this extension 🙏
- P.S. Users of the older versions of the Raycast extension will need to add their graph(s) again. Sorry for the inconvenience, this should only be a one time thing
- [[Roam Append API]]: https://roamresearch.com/#/app/developer-documentation/page/eb8OVhaFC
- difference from the Backend API is that this can be used by [[Encrypted Graphs]] too
- Other convenience features for writes/captures
---
# Tag Styles
- Links and tags whose name begins with a `.` add a css class to the roam block that they are on
- This can be useful for [[Use Cases]] like
- visually organizing your day if you track your time
- Try it out
- {{[[roam/css]]}}
- ```css
.morning-routine {
background-image:
linear-gradient(
hsla(4,90%,58%,0.42),
hsl(45,100%,51%, 0.6)
);
}
.break {
background-color: #607D8B59;
}
.increased-emotional-energy {
border-right: 4px solid green;
}
.decreased-emotional-energy {
border-right: 4px solid red;
}
.ramp-up {
border-right: 4px solid;
border-image:
linear-gradient(
to top,
green,
rgba(0, 0, 0, 0)
) 1 100%;
}
```
- [[Example]] Top Level of your Daily Note
- Log
- 06:00 - 7:00 #[[.morning-routine]]
- 7:00 - 8:00 Great writing #[[.increased-emotional-energy]]
- 8:00 - 8:30 Frustrating Meeting #[[.decreased-emotional-energy]]
- 8:30 - 9:30 #[[.break]]
- 9:30 - 10:00 Getting back in zone #.ramp-up
- What you'll see if you hit turn on the [[roam/css]] here 
- Taken to the max, they can pretty dramatically change the layout of particular your blocks in your graph
- {{[[embed-path]]: We decided to include some of the most useful [[roam/css]] [[Tag Styles]] we've developed for ourselves, you may find helpful/inspiring .rm-E .rm-g and .rm-hide}}
- Roam ships with these CSS libraries built in, so you can play with classes from them right away
- [[TailwindCSS]]
- Blue background, white text with `#.bg-blue-500 #.text-white` #.bg-blue-500 #.text-white
- #.text-xl larger text with `#.text-xl`
- [[Blueprint]]
- Card is probably the most useful by itself `#.bp3-card` #.bp3-card
-
---
# Task Management
### Community Videos::
#### Roam Research for Daily Task Management using Bullet Journaling Method by [[The Upgraded Brain]]
- {{[[video]]: https://www.youtube.com/watch?v=ftv6ew7Tcbg&t}}
#[[Templates]] | #[[Slider]] | #[[TODO/DONE]] | #[[Sidebar]]
#### Simple Task Management with Roam Research by [[Mickey Mellen]]
- {{[[video]]: https://www.youtube.com/watch?v=Au4WnEqdJU0}}
#[[Current time]] | #[[Query]] | #[[Page References]] | #[[Attributes]] | #[[Tags]]
#### Task Management, Roam Research: Inbox, Contexts, & Projects by [[R.J. Nestor]]
- {{[[video]]: https://www.youtube.com/watch?v=5wI0il4YVDg}}
#[[Query]] | #[[Task Management]] | #[[TODO/DONE]] | #[[Tags]]
#### Roam Research: TODOs by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=3taL1v-IKXg}}
#[[TODO/DONE]] | #[[Linked References]] | #[[/ Commands]]
#### Roam: How to Make a Master Task List on Roam by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=mIEgS0JkJBo&t=5s&ab_channel=ShuOmi}}
#[[TODO/DONE]] | #[[Page References]] | #[[Filter]] | #[[Daily Notes]]
#### Plan Your Day With The Magic List (Roam Research Task Management) by [[Daniel Wirtz]]
- {{[[video]]: https://www.youtube.com/watch?v=5U62cEE7QsM&t=6s&ab_channel=DanielWirtz}}
#[[TODO/DONE]] | #[[Query]] | #[[Page References]] | #[[Daily Notes]] | #[[Block References]]
- Roam Team Videos::
- **Task Management by [[Conor White-Sullivan]]**
- {{[[video]]: https://www.youtube.com/watch?v=3aCl7dCYVqA&t=6s&ab_channel=ConorWhite-Sullivan}}
#[[TODO/DONE]] | #[[Daily Notes]] | #[[Filter]] | #[[Linked References]] | #[[Block Embed]] | #[[Current time]] | #[[Block References]]
- **Tasks in Roam by [[Conor White-Sullivan]]**
- {{[[video]]: https://www.youtube.com/watch?v=asQ4RSjjCu4&ab_channel=ConorWhite-Sullivan}}
#[[TODO/DONE]] | #[[Linked References]]
- Articles::
- **[Using Roam Research for GTD-Style Task Management – The Sweet Setup](https://thesweetsetup.com/using-roam-research-for-gtd-style-task-management/)**
- #[[Daily Notes]] | #[[TODO/DONE]] | #[[Page References]] | #[[Query]] | #[[Linked References]]
- **[Using TODO to Get Things Done with Roam Research (GTD) — Roam Tips & Hacks](https://www.roamtips.com/home/use-todo-get-things-done-roam-research-gtd)**
- #[[TODO/DONE]] | #[[Page References]] | #[[Date picker]] | #[[Filter]]
---
# roam/render
-
- **[[Examples]]** of How to use Roam/render using JSX (NOTE: only ES5 works)
- {{[[video]]: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp%2FoDD64HiDSz.mp4?alt=media&token=e91182a5-7720-4899-b0ca-b9b0fe2ffcb5}}
- https://grain.com/share/highlight/NkzVPjnoX3P8gavWAVq9g00DiABYGCE1gWZIU63J
- {{roam/render: ```javascript
function main() {
return React.createElement('h1', {}, 'Hello from Javascript')
}```}}
- ```javascript
function main() {
return React.createElement('h1', {}, 'Hello from Javascript')
}```
- {{roam/render: ```jsx
var HelloWorldButton = function () {
var _useState = React.useState(false),
showText = _useState[0],
setShowText = _useState[1];
var handleClick = function handleClick() {
setShowText(!showText);
};
return React.createElement(
"div",
null,
React.createElement(
"button",
{ onClick: handleClick },
"Click Me"
),
showText && React.createElement(
"p",
null,
"Hello World"
)
);
};
```}} -- This one was generated by `chatGPT`- just specify that you can't use const, import statements, exports
- ```jsx
var HelloWorldButton = function () {
var _useState = React.useState(false),
showText = _useState[0],
setShowText = _useState[1];
var handleClick = function handleClick() {
setShowText(!showText);
};
return React.createElement(
"div",
null,
React.createElement(
"button",
{ onClick: handleClick },
"Click Me"
),
showText && React.createElement(
"p",
null,
"Hello World"
)
);
};
```
- {{roam/render: ```jsx
function main() {
return Hello from JSX
}```}}
- ```jsx
function main() {
return Hello from JSX
}```
- https://twitter.com/conaw/status/1440594757462335496?lang=ca
- [[.--]]
- **Articles::**
- **[A closer look at roam/render](https://www.zsolt.blog/2021/02/a-closer-look-at-roamrender.html) by [[Zsolt Viczian]]**
- {{iframe: https://www.zsolt.blog/2021/02/a-closer-look-at-roamrender.html}}
- **Examples::**
- Code:
- ```clojure
(ns md.example
(:require
[reagent.core :as r]
[roam.util :as u]))
(defn parsed-text []
(u/parse "[[Pages]] ((uWcJicabj)) and [link](https://roamresearch.com)"))```
- Rendered:
- {{roam/render: ```clojure
(ns md.example
(:require
[reagent.core :as r]
[roam.util :as u]))
(defn parsed-text []
(u/parse "[[Pages]] ((uWcJicabj)) and [link](https://roamresearch.com)"))```}}
- Content #.rm-hide
- ```clojure
(ns roam.keycommand
(:require
[clojure.string :as str]
[clojure.core :refer [println]]
[reagent.core :as r]
[roam.util :as u]))
(defn includes? [s1 s2]
(when (and (string? s1)
(string? s2))
(str/includes? (str/upper-case s1) (str/upper-case s2))))
(defn includes-strings? [s strings]
(every? #(includes? s %) strings))
(def help-content
[{:category "The Basics"
:id 0
:type :key-command
:functions [{:name "Find or create new page"
:shortcut {:mac "cmd+u"
:pc "ctrl+u"}}
{:name "Bring up quick commands"
:shortcut {:mac "/"
:pc "/"}}
{:name "Reference or create new page"
:shortcut {:mac "[["
:pc "[["}}
{:name "Reference a block"
:shortcut {:mac "(("
:pc "(("}}
{:name "New block"
:shortcut {:mac "return"
:pc "enter"}}
{:name "Indent block"
:shortcut {:mac "tab"
:pc "tab"}}
{:name "Unindent block"
:shortcut {:mac "shift+tab"
:pc "shift+tab"}}]}
{:category "Formatting"
:id 1
:type :markdown-key-command
:functions [{:markdown "**Bold**"
:shortcut {:mac "cmd+b"
:pc "ctrl+b"}}
{:markdown "__Italics__"
:shortcut {:mac "cmd+i"
:pc "ctrl+i"}}
{:markdown "~~Strikethrough~~"
:shortcut {:mac "cmd+y"
:pc "ctrl+y"}}
{:markdown "^^Highlight^^"
:shortcut {:mac "cmd+h"
:pc "ctrl+h"}}
{:markdown "[Link](/#/app/help)"
:shortcut {:mac "cmd+k"
:pc "ctrl+k"}}
{:markdown "$$\\KaTeX$$"
:shortcut {:mac "$$"
:pc "$$"}}
{:markdown "# Heading 1"
:shortcut {:mac "cmd+opt+1"
:pc "ctrl+alt+1"}}
{:markdown "## Heading 2"
:shortcut {:mac "cmd+opt+2"
:pc "ctrl+alt+2"}}
{:markdown "### Heading 3"
:shortcut {:mac "cmd+opt+3"
:pc "ctrl+alt+3"}}]}
{:category "Navigating"
:id 2
:type :key-command
:functions [{:name "Move cursor to next block"
:shortcut {:mac "down"
:pc "down"}}
{:name "Move cursor to previous block"
:shortcut {:mac "up"
:pc "up"}}
{:name "Go to Daily Notes page"
:shortcut {:mac "ctrl+shift+d"
:pc "alt+d"}}
{:name "Zoom in to current block"
:shortcut {:mac "cmd+."
:pc "alt+right"}}
{:name "Zoom out to parent block"
:shortcut {:mac "cmd+,"
:pc "alt+left"}}
{:name "Go to next day\n(when on daily page)"
:shortcut {:mac "ctrl+opt+n"
:pc nil}}
{:name "Go to previous day\n(when on daily page)"
:shortcut {:mac "ctrl+opt+p"
:pc nil}}
{:name "Go to first block on page\n(when nothing is selected)"
:shortcut {:mac "cmd+return"
:pc "ctrl+enter"}}
{:name "Go to last block on page\n(when nothing is selected)"
:shortcut {:mac "cmd+shift+return"
:pc "ctrl+shift+enter"}}
{:name "Follow link under cursor"
:shortcut {:mac "ctrl+o"
:pc "ctrl+o"}}
{:name "Open link under cursor in sidebar"
:shortcut {:mac "ctrl+shift+o"
:pc "ctrl+shift+o"}}
{:name "Move cursor forward"
:shortcut {:mac "ctrl+f"
:pc nil}}
{:name "Move cursor backward"
:shortcut {:mac "ctrl+b"
:pc nil}}
{:name "Jump to start of block"
:shortcut {:mac "ctrl+a"
:pc "ctrl-home"}}
{:name "Jump to end of block"
:shortcut {:mac "ctrl+e"
:pc "ctrl-end"}}]}
{:category "Blocks"
:id 3
:type :key-command
:functions [{:name "Move block up"
:shortcut {:mac "cmd+shift+up"
:pc "alt+shift+up"}}
{:name "Move block down"
:shortcut {:mac "cmd+shift+down"
:pc "alt+shift+down"}}
{:name "New line within block"
:shortcut {:mac "shift+return"
:pc "shift+enter"}}
{:name "Expand block"
:shortcut {:mac "cmd+down"
:pc "ctrl+down"}}
{:name "Collapse block"
:shortcut {:mac "cmd+up"
:pc "ctrl+up"}}
{:name "Select current block and children"
:shortcut {:mac "shift+up"
:pc "shift+up"}}
{:name "Select block above\n(when block selected)"
:shortcut {:mac "shift+up"
:pc "shift+up"}}
{:name "Select block below\n(when block selected)"
:shortcut {:mac "shift+down"
:pc "shift+down"}}
{:name "Select all blocks on page"
:shortcut {:mac "cmd+shift+a"
:pc "ctrl+shift+a"}}
{:name "Copy block reference(s)\nof selected block(s)"
:shortcut {:mac "cmd+shift+c"
:pc "ctrl+shift+c"}}
{:name "Cycle TODO state of\n current / selected blocks"
:shortcut {:mac "cmd+return"
:pc "ctrl+enter"}}
{:name "Open block search"
:shortcut {:mac "ctrl+shift+9"
:pc "ctrl+shift+9"}}]}
{:category "Sidebar"
:id 4
:type :key-command
:functions [{:name "Toggle left sidebar visibility"
:shortcut {:mac "cmd+\\"
:pc "ctrl+\\"}}
{:name "Toggle right sidebar visibility"
:shortcut {:mac "cmd+/"
:pc "ctrl+/"}}
{:name "Open page in right sidebar"
:shortcut {:mac "shift+click"
:pc "shift+click"}}
{:name "Open mentions in right sidebar"
:shortcut {:mac "cmd+shift+click"
:pc "ctrl+shift+click"}}
{:name "Create page in sidebar\n(from search)"
:shortcut {:mac "shift+return"
:pc "shift+enter"}}
{:name "Open link in sidebar\n(when editing)"
:shortcut {:mac "ctrl+shift+o"
:pc "ctrl+shift+o"}}]}
{:category "Appearance"
:id 5
:type :key-command
:functions [{:name "Toggle display of\ndouble brackets"
:shortcut {:mac "ctrl+c+b"
:pc "ctrl+c+b"}}
{:name "Toggle display of\nall inline mentions"
:shortcut {:mac "ctrl+c+r"
:pc "ctrl+c+r"}}
{:name "Toggle all users' bullet colors"
:shortcut {:mac "ctrl+c+s"
:pc "ctrl+c+s"}}
{:name "Toggle other users' bullet colors"
:shortcut {:mac "ctrl+c+c+s"
:pc "ctrl+c+c+s"}}
{:name "Toggle block live preview"
:shortcut {:mac "ctrl+c+p"
:pc "ctrl+c+p"}}
{:name "Cycle namespace display"
:shortcut {:mac "ctrl+c+l"
:pc "ctrl+c+l"}}]}
{:category "Other"
:id 6
:type :key-command
:functions [{:name "Toggle help popup visibility"
:shortcut {:mac "opt+shift+h"
:pc "alt-shift+h"}}
{:name "Undo"
:shortcut {:mac "cmd+z"
:pc "ctrl+z"}}
{:name "Redo"
:shortcut {:mac "cmd+shift+z"
:pc "ctrl+shift+z"}}
{:name "Move character under cursor forward"
:shortcut {:mac "ctrl+t"
:pc nil}}]}])
(def PC?
(when-not (nil? js/navigator)
(not (str/includes? js/navigator.userAgent "Mac OS X"))))
(defn key-command-view
[{:keys [name shortcut]}]
(when (or (not PC?)
(and PC? (:pc shortcut)))
[:div.rm-help-function
[:div.rm-help-function__name
name]
[:span.rm-help-function__shortcut
[:code
(if PC?
(:pc shortcut)
(:mac shortcut))]]]))
(defn markdown-key-command-view
[{:as props
:keys [markdown shortcut]}]
(when (or (not PC?)
(and PC? (:pc shortcut)))
[:div.rm-help-markdown-function
[:div.rm-help-markdown-function__style
(cond
(str/starts-with? markdown "###")
[:span.rm-level3 (subs markdown 4)]
(str/starts-with? markdown "##")
[:span.rm-level2 (subs markdown 3)]
(str/starts-with? markdown "#")
[:span.rm-level1 (subs markdown 2)]
:else
(u/parse markdown))]
[:span.rm-help-markdown-function__markdown
markdown]
[:span.rm-help-markdown-function__shortcut
(when shortcut
[:code
(if PC?
(:pc shortcut)
(:mac shortcut))])]]))
(defn content [_]
(let [*query (r/atom "")
*selected-category-id (r/atom nil)]
(fn [_]
(let [split-query (str/split @*query #"\s+")
filtered-content (->> help-content
(map (fn [category]
(assoc category
:functions
(filter
(fn [{:as function
:keys [name
markdown
title
description
shortcut]}]
(or
(includes-strings? name split-query)
(includes-strings? markdown split-query)
(includes-strings? (:pc shortcut) split-query)
(includes-strings? (:mac shortcut) split-query)))
(:functions category)))))
(filter #(> (count (:functions %)) 0)))]
[:div.rm-help
[:div.rm-help-search.sticky
[:div.rm-help-search__icon-container
[:span.bp3-icon-large.bp3-icon-search]]
[:input.rm-help-search__input
{:placeholder "Search all key commands"
:value @*query
:auto-focus "autofocus"
:on-change #(reset! *query (.. % -target -value))}]]
[:div.rm-help-results
[:div.rm-help__left-panel.sticky
[:div.rm-help-categories
(doall
(for [{:keys [category id]} filtered-content]
^{:key (str "category-" category)}
[:div.rm-help-category-menu-item
{:class (when (= id @*selected-category-id)
"rm-help-category-menu-item--selected")
:on-click #(let [function-group (.getElementById
js/document
(str "rm-help-" id))]
(.scrollIntoView function-group)
(reset! *selected-category-id id))}
category]))]]
[:div.rm-help-functions
(doall
(for [{:keys [category functions id type]} filtered-content]
^{:key (str "title-" category)}
[:div.rm-help-functions__category
{:id (str "rm-help-" id)}
[:div.rm-help-category__name
category]
[:hr]
(doall
(for [{:as function
:keys [name
markdown]} functions]
^{:key (str "function-" (or name markdown))}
(condp = type
:key-command [key-command-view function]
:markdown-key-command [markdown-key-command-view function])))]))]]]))))```
---
# Filter
- [[.--]]
- [[.--]]
- **Team GIFs::**
- **Filter includes**
- 
- **Filter removes**
- 
- **Global filters**
- 
- **Filter linked references**
- 
- **Roam Team Videos::**
- **Filters in Roam by [[Conor White-Sullivan]]**
- {{[[video]]: https://www.youtube.com/watch?v=BnwWdTnXlxU}}
- **Community Videos::**
- **Filters: Fundamentals of Roam Research by [[R.J. Nestor]]**
- {{[[video]]: https://www.youtube.com/watch?v=wBqUySIvUZc}}
#[[Attributes]] | #[[Filter]] | #[[Linked References]] | #[[Tags]]
- **How to use filters in Roam Research by [[Mickey Mellen]]**
- {{[[video]]: https://www.youtube.com/watch?v=hx9AmzNUCZY}}
#[[Attributes]] | #[[Filter]] | #[[Linked References]] | #[[Tags]]
- **Articles::**
- **[How to use filters in Roam](https://www.roamtips.com/home/how-to-use-filters-in-roam) by [[Roam Tips and Hacks]]**
- **[Using Roam Research for GTD-Style Task Management](https://thesweetsetup.com/using-roam-research-for-gtd-style-task-management/) by [[Mike Schmitz]]**
---
# Welcome to Roam v2
### **Quick Start**
- There's very little to know to start using Roam.
- **Everything is a block**
- **Each bullet you see is a __block__, and we write them inside pages like this one.**
- We create new blocks by pressing `Enter`; and nest them using `Tab` (press`Shift+Tab` to unindent)-
- This creates __children blocks__, which we can expand, collapse, and focus.
- Indenting provides structure. We can scan pages with ease and find related blocks. Try clicking the **ᐅ** icon on the next block!
- **Everything is where you need it to be**
- **Organizing information is effortless with** [page]([[Page References]])/[block references]([[Block References]]).
- Let's say we have a meeting. In our Daily Notes, we might write
- {{[[TODO]]}} Have a [[meeting]] with [[John Smith]] about [[Roam Research]] on [[February 8th, 2021]]. #marketing
- Those square brackets turn text into **__backlinks__**.
- This automatically creates a page for each keyword--click the backlink to go the keyword's page.
- At the bottom, you'll find instances where the page was mentioned--its __page references__.
- So the meeting reminder block appears on [[meeting]], [[John Smith]], [[marketing]], and [[Roam Research]]!
- This way, we never have to worry about which folder to file things in- just [[backlink]] as you go.
- **Everything is a `/` away**
- Roam is packed with powerful features. Anytime you want to do more than type text,
- just type `/` to bring up the inline command palette.
- If you don't find what you're looking for, click on the Help
- icon in the top right of the page! If you can think it, you can do it in Roam.
---
# Pages
### Team GIFs::
#### Creating a page from page reference search
- 
#### Creating a page from Find or Create Page
- 
#### Creating a page and opening it in the right sidebar
- 
#### Creating a page with tags
- 
#### Deleting a page
- 
#### Changing page title
- 
#### Merging pages
- 
#### View as Document
- 
### Community Videos::
#### Page-Level block filters & Merging two page contents by [[Roam Tips]]
- {{[[video]]: https://www.youtube.com/watch?v=_AZGz94Uv-c}}
#[[Pages]] | #[[Filter]]
---
# Zettelkasten
### Roam Team Videos::
#### Live Zettling on Roam by [[Conor White-Sullivan]]
- {{[[video]]:https://www.youtube.com/watch?v=ScRrcL__SSI&t=2029s&ab_channel=ConorWhite-Sullivan}}
#[[Current time]] | #[[Page References]] | #[[Block References]] | #[[Indentation]] | #[[Daily Notes]] | #[[Right Sidebar]] | #[[Block Embed]] | #[[Alias]] | #[[TODO/DONE]] | #[[Indentation]] | #[[Query]] | #[[Table]]
- Articles::
- **[Active Reading in Roam Research Featuring the Zettelkasten Method](https://padminipyapali.medium.com/zettelkasten-method-roam-research-f7b341f14fbd) by [[Padmini Pyapali]]**
- #[[Block References]] | #[[Page References]]
- **[Implementing Zettelkasten in Roam: A Practical Guide](https://www.roambrain.com/implementing-zettelkasten-in-roam/) by [[RoamBrain]]**
- #[[Page References]] | #[[Block References]]
- **[Roamkasten - a practical how to guide to optimize Zettelkasten in Roam Research](https://www.thrivinghenry.com/writings/roamkasten-a-practical-how-to-guide-to-optimize-zettelkasten-in-roam-research) by [[Thriving Henry]]**
- #[[Page References]] | #[[Linked References]] | #[[Unlinked References]] | #[[Indentation]] |
- **[Roamkasten - a practical how to guide to optimize Zettelkasten in Roam Research](https://www.thrivinghenry.com/writings/roamkasten-a-practical-how-to-guide-to-optimize-zettelkasten-in-roam-research) by [[Thriving Henry]]**
- #[[Page References]] | #[[Linked References]] | #[[Unlinked References]] | #[[Indentation]] | #[[Block References]] | #[[Right Sidebar]]
-
### Community Videos::
#### How to Take Smart Notes | Zettelkasten Method in Roam Research by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=ljyo_WAJevQ&t=188s&ab_channel=ShuOmi}}
#[[Page References]] | #[[Right Sidebar]] | #[[Block References]] | #[[Linked References]] | #[[Filter]]
#### How Taking Smart, Simple Notes Will Make You a Better Writer
by [[Drew Coffman]]
- {{[[video]]: https://www.youtube.com/watch?v=wMOACjJzfgM}}
#### Roam Tour: Professor [[Joel Chan]]- Zettelkasten and Evergreen Notes for Generative Thought by [[Robert Haisfield]]
- {{[[video]]: https://www.youtube.com/watch?v=A6PIrVZoZAk&ab_channel=RobertHaisfield}}
#[[Page References]] | #[[Right Sidebar]] | #[[Query]] | #[[Linked References]] | #[[Indentation]]
---
# All Pages
#### Delete pages
- 
#### Export pages
- 
#### Open pages from all pages in right sidebar
- 
#### Sort by word count
- 
#### Sort by mentions
- 
#### Sort by updated
- 
#### Sort by created
- 
#### Show/hide daily notes
- 
#### Show/hide columns
- 
---
# Graph Overview
- [[.--]]
- **Open graph overview from left sidebar**
- 
-
- **Change layout**
- 
-
- **Remove log days**
- 
-
- **Selecting node and zooming in on node**
- 
-
- **Moving node**
- 
-
- **Open node in sidebar**
- 
---
# Pomodoro timer
- Creating a Pomodoro timer is incredibly easy! Here's how:
- Open the [[/ Commands]] by typing a forward slash `/`
- Start typing the word `pomodoro` and click on `Pomodoro Timer`
- 
- Click on `Start` and the standard 25-minute timer will start counting down.
- 
- Once the 25 minute session ends, you'll hear a bell sound and you'll see a quick notification telling that you can stop working and rest for 5 minutes.
- 
- Sometimes you want to change the timer of your Pomodoro from the standard 25 minutes to whatever else... Here's how to do it:
- Open the [[/ Commands]] by typing a forward slash `/`
- Start typing the word `pomodoro` and click on `Pomodoro Timer`. You'll see something like this:
- 
- Change the number from 25 (minutes) to some other number, like 10 for example.
- 
- Community Videos::
- Roam Research: Useful Hacks (No Add Ons Required). Pomodoro, Timer, Calculator, KanBan & More. by [[The Upgraded Brain]]
- {{[[video]]: https://www.youtube.com/watch?v=u_iIWQTIuIE}}
#[[Pomodoro timer]] | #[[Calculator]] | #[[Kanban]] | #[[Diagram]] | #[[Slider]] | #[[Word count]] | #[[Options]] | [[Table]] | [[Calculator]]
---
# Hosted Graph
- What does it mean?
- If it's a private graph (you're the only person accessing it)
- You are able to access your Roam graph anywhere with its URL once you're logged into your account
- If it's shared with selected individuals
- The shared accounts can either read or edit your graph, when they log into Roam and open your graph's URL
- See [[Sharing]] for more info
- If it's publicly available
- Anyone can see your graph via its URL
- See [[Sharing]] for more info
- How many can you make?
- as many as you want :)
- Where is it hosted?
- Google Firebase
- Can I access it offline?
- Yes, but your changes won't be synced to our servers until you're back online when the sync button becomes green
- 
- So be careful of closing Roam or clearing the cache of your browser (as data will be temporarily stored there)
---
# Daily Notes
- [[.--]]
### **Daily Notes are the backbone of the Roam experience.**
- When you sign into Roam, you will start on a page with today's date.
- We encourage people to start writing on this page because it gives context to your notes.
- For example, if you take meeting notes in the Daily Note, the date of your meeting will always be tied to the notes.
- 
- Even if you create a new page, it's often helpful to do so from the Daily Note. This way, you'll be able to see when you created these pages, and your work will be visible when reviewing your days.
- Consider the following Daily Note:
- 
- What does this person get by using the Daily Note instead of just working in the [[Weekly Experiments]] and [[5 Year Plan]] pages?
- The context for why they started Weekly Experiments
- An overview on what they changed in their 5 Year Plan, and an intention to work on it more next week.
### **Conclusion**
- Roam is all about making connections. The Daily Note is intended to help you make connections with yourself over time.
- Your future self will thank you!
### Roam Team Videos::
- {{[[video]]: https://www.loom.com/share/ed65ea5c73e04035a910c9c96510d83a}}
---
# Community
- [[Roam Slack]]
- [Join us on Slack](https://join.slack.com/t/roamresearch/shared_invite/zt-ni1vw9yf-HzeWr05ZJBt55j_zfddPsw) to learn new workflows, get tips and tricks from your fellow Roamans, and much more!
- [[Twitter]]
- Join the [#roamcult](https://twitter.com/search?q=%23roamcult&src=typeahead_click) and keep up to date with all the latest and greatest in Roam
- [[Roam Book Club]]
- Learn how to use Roam, take better notes, make friends, and more
- [[Articles]]
- An (incomplete) list of all the articles written about Roam!
- [[Community Videos]]
- A list of all the great videos made by our wonderful community
- [[Courses]]
- Learn how to use Roam with a collection of free and paid online courses made by top community members
- [[Coaching]]
- Get specialized 1:1 help to master Roam from one of our vetted coaches
- [Notable Graphs]([[Notable Graphs]])
- A list of public graphs available to browse or contribute to
---
# Extensions
- CSS
- [{:tag :h3}Roam themes: how to style Roam Research with custom CSS ...](https://nesslabs.com/roam-research-themes-custom-styling-css)
- [{:tag :h3}Painting Roam with Custom CSS - Maggie Appleton](https://maggieappleton.com/paintingroam/)
- [{:tag :h3}Best Roam Research CSS Themes — Keep Productive](https://www.keepproductive.com/blog/best-roam-research-css-themes)
- [{:tag :h3}Ultimate list of Roam Research themes and CSS styles ...](https://www.roamtips.com/home/roam-research-css-styles)
- [{:tag :h3}Make Your Roam Theme Your Own With These CSS Snippets ...](https://www.maggiedelano.com/2020/09/05/roamcsssnippets.html)
- [{:tag :h3}CSS for Roam (1st lesson): Roam with Style | by Cato Minor ...](https://catominor3.medium.com/roam-with-style-8a18c216d338)
- [{:tag :h3}RoamThemes - Style your Roam with Custom Themes](https://roamthemes.io/)
- [{:tag :h3}Pro Tip: Roam Research now supports custom themes, via CSS.](https://capiche.com/q/pro-tip-roam-research-now-supports-custom-themes-via-css)
- JS Plugin
- [Make Roam for Your Mind: Ode to Customization | by Cato ...](https://catominor3.medium.com/make-roam-for-your-mind-9e7f09e6a7b0)
- [JavaScript for Roam (introduction) | by Cato Minor | Medium](https://catominor3.medium.com/javascript-for-roam-introduction-f19f82ca297)
- Chrome Extension
- [Roam JS Extensions](https://roamjs.com/docs/)
- [Roam Hacker](https://www.youtube.com/channel/UClmpveyXiwZP3PlKpDKdGEA/videos)
---
# Beginner's Guide
## A short but comprehensive guide
#### A Beginner’s Guide to Roam Research by [[Drew Coffman]]
- {{[[video]]: https://www.youtube.com/watch?v=X6OOos4met0}}
- #[[Daily Notes]] | #[[/ Commands]] | #[[Bidirectional linking]]
## [[Why Roam?]]
#### Leonardo Da Vinci and Roam-Thinking by [[Drew Coffman]]
- {{[[video]]: https://www.youtube.com/watch?v=S3qJdvPzOC8}}
## Best [[Features]] of Roam
#### The Simple Guide to Roam Research by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=RTI6Mxu3YiI}}
- #[[Daily Notes]] | #[[Bidirectional linking]]
## What [[Workflows]] can I use Roam for?
#### What's So Great About Roam Research? by [[Nat Eliason]]
- {{[[video]]: https://www.youtube.com/watch?v=syKAar8ZD-U}}
- #[[Daily Notes]] | #[[Bidirectional linking]] | #[[Linked References]] #[[Book]] | #[[Sidebar]] | #[[Tags]] | #[[Evergreen Notes]] | #[[Block References]] | #[[Templates]] | #[[Query]]
---
# Precise Links
- Example
- say I have a collection of statements like these
- Socrates is a Man
- certainty:: {{[[slider]]}}
- Socrates is Mortal
- certainty:: {{[[slider]]}}
- All Men are Mortal
- certainty:: {{[[slider]]}}
- Then I can reference those statements into a compound statement like this
- If Socrates is a Man and All Men are Mortal then Socrates is Mortal
- certainty:: {{[[slider]]}}
-
- I will then see that statement whenever I visit one of the blocks that is referenced within it
- like this
- 
---
# Templates
### Team GIFS::
- 
#[[roam/templates]]
### Community Videos::
#### How to create templates in Roam Research by [[Productivity Academy]]
- {{[[video]]: https://www.youtube.com/watch?v=O_-lhwprLXs}}
#[[Templates]] | #[[Attributes]] | #[[Sidebar]]
#### Daily Templates in Roam Research by [[Mickey Mellen]]
- {{[[video]]: https://www.youtube.com/watch?v=mK7wa0UXzrk}}
#[[Templates]] | #[[Task Management]] | #[[Current time]] | #[[Tags]]
#### Native Templates In Roam Research by [[Praveen Anuraj]]
- {{[[video]]: https://www.youtube.com/watch?v=OxCgJaeUh90}}
#[[Attributes]] | #[[Templates]]
### Articles::
#### [How to use templates in Roam Research](https://nesslabs.com/roam-research-templates-tutorial) by [[Anne-Laure Le Cunff]]
#### [How to Create and Use Templates in Roam Research](https://www.appsntips.com/learn/create-use-templates-roam-research/) by [[appsntips]]
### Key Commands::
- Search for template to trigger `;;`
---
# Audio Player
- You can upload and embed audio into Roam! Check out this interactive demo on [[Conor White-Sullivan]] describing Roam as Excel
- {{audio: https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp-documentation%2Fhz3WHZhdUg.mp3?alt=media&token=9af83477-66d5-4b97-8643-2d9844ba6b99}}
- Team GIFs::
- 
- Roam Team Videos::
- {{[[video]]: https://www.loom.com/share/5c6c03a96aec4a1ab62234a86209abb2}}
- Community Videos::
- Playing sound files in Roam Research by [[Darin Flynn]]
- {{[[video]]: https://www.youtube.com/watch?v=J-x4srxcNrU}}
#[[Audio Player]] | #[[Block References]]
- Articles::
- [How to upload and play audio files in Roam Research](https://nesslabs.com/roam-research-audio-files) by [[Ness Labs]] [[Anne-Laure Le Cunff]]
- #[[/ Commands]] | #[[Audio Player]]
- Key Commands::
- `/upload`
---
# Roam Help
## [[Welcome to Roam]]
- ---
## [[Change Log]]
## [[Workflows]]
## [[Features]]
- ---
## [[Community]]
## [[Roam Depot]]
- ---
## 🚧 [Developer Hub](https://roamresearch.com/#/app/developer-documentation/page/49715b-M2) 🚧
- ---
## [[FAQ]]
## [[Why Roam?]]
## [[White Paper]]
---
# roam/css
- #.rm-g
- From having a dark theme to opening multiple panels, with a few clicks (and no coding skill required), roam/css helps you customize the look and feel of your Roam graph
- Check out our [community-built themes for inspiration]([[Themes]])
### Articles::
#### [Painting Roam with Custom CSS](https://maggieappleton.com/paintingroam) by [[Maggie Appleton]]
#### [Roam themes: how to style Roam Research with custom CSS](https://nesslabs.com/roam-research-themes-custom-styling-css) by [[Anne-Laure Le Cunff]]
### Community Videos::
#### How to do color tagging in Roam by [[Zack Fan]]
- {{[[video]]: https://www.youtube.com/watch?v=kUgAqyzwGzw&t=99s}}
#### How to Create and Edit Roam CSS: Interview with [[Abhay Prasanna]]
- {{[[video]]: https://www.youtube.com/watch?v=Cz07-oZlPzA&t=3s&ab_channel=MikeGiannulis}}
### Roam Team Videos::
#### Applying Custom Themes for your RoamResearch Knowledge Graph by [[Conor White-Sullivan]]
- {{[[video]]: https://youtu.be/UY-sAC2eGyI }}
---
# Notable Graphs
## Directory
### [RoamPublic.com](https://www.roampublic.com/all-texts/)
### [The Roaman Agora](https://roamresearch.com/#/app/The-Roaman-Agora/page/wujSyfjAu)
### [Roam Collective](https://roamresearch.com/#/app/Roam-Collective/page/MorTyZR-2)
### [Roam Book Club]([[Roam Book Club]])
### [Creator Cooperative ](https://roamresearch.com/#/app/Creator-Cooperative)
### [Roam Slack](https://roamresearch.com/#/app/roam-slack)
### [RoamCN](https://roamresearch.com/#/app/RoamCN)
### [Holy Omniscience Graph](https://roamresearch.com/#/app/holy-omniscience/page/c3Z8Q3cb_)
### [Navalmanack](https://roamresearch.com/#/app/Navalmanack)
### [Roam Depot Developers](https://roamresearch.com/#/app/roam-depot-developers)
-
#### {{[[TODO]]}} Request to be featured
---
# Miscellaneous
### [[Wiki]]
### [[Scripture Study]]
### [[Language Learning]]
### [[Hacking and Coding]]
### Roam Research for [[Kids]]
### International Languages
- [[Chinese]]
- [[Korean]]
- [[Russian]]
- [[Spanish]]
- [[German]]
- [[Japanese]]
- [[Turkish]]
---
# Calculator
- Calculates basic arithmetic.
- `{{calc: 4 + 5 }}`
- {{calc: 4 + 5}}
- If a block reference is used an argument, it will search for a number in that block and use that – e.g.
- three in “My 3 apples” or
- five in "his 5 amazon stocks"
- `{{calc: ((block)) + ((block)) * 2 }}`
- {{calc: three in “My 3 apples” or + five in "his 5 amazon stocks" * 2}}
### Community Videos::
#### [Roam Research: Using the Calculator](https://www.youtube.com/watch?v=kxWykFHUtNo) - [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=kxWykFHUtNo}}
### Roam Team Videos::
- https://twitter.com/i/status/1209449973902802944
---
# Personal CRM
### Community Videos::
#### Roam: The Best Personal CRM Ever by [[Nat Eliason]]
- {{[[video]]: https://www.youtube.com/watch?v=cRDgrdlfYdE&ab_channel=NatEliason}}
#[[Page References]] | #[[Sidebar]] | #[[Linked References]] | #[[Attributes]]
#### Mini CRM in Roam Research: Logging Meeting Notes by [[R.J. Nestor]]
- {{[[video]]: https://www.youtube.com/watch?v=CnakhkONQ_g&ab_channel=R.J.Nestor}}
#[[Page References]] | #[[Sidebar]] | #[[Daily Notes]] | #[[Tags]] | #[[Indentation]] | #[[Linked References]] | #[[Filter]] | #[[Attributes]]
### Articles::
#### [Using Roam Research as a Customer Relationship Manager](https://thesweetsetup.com/using-roam-research-as-a-customer-relationship-manager/) by [[Josh Ginter]]
- #[[Page References]] | #[[Attributes]] | #[[Templates]] | #[[Daily Notes]] #[[Current time]] | #[[Task Management]] | #[[Calculator]] | #[[Pomodoro timer]] | #[[Kanban]]
#### [Use Roam Research as a Personal CRM - Nicolo S's pro tip about Roam Research | YourStack](https://yourstack.com/pro-tips/340-use-roam-research-as-a-personal-crm) by [[Nicolo S]]
- #[[Attributes]] | #[[Page References]]
#### [Roam Research: Why I Love It and How I Use It](https://www.nateliason.com/blog/roam#crm) by [[Nat Eliason]]
- #[[Attributes]] | #[[Page References]] | #[[Linked References]]
-
---
# News and Press
-
- [[The Hustle]]: [Roam Research could be the future of note-taking and knowledge management](https://thehustle.co/09142020-roam-research/)
- > __Launched only last fall, Roam Research raised $9m at a $200m valuation. Will its software become the future of note-taking?__
#### [[Built In]]: [Roam is a Note-Taking Tool, and a Dream of a Better Self](https://builtin.com/consumer-tech/roam-note-taking-app-personal-wiki)
- > __Its app connects ideas the same way our brains do. Its cult following has helped it land record-breaking investments.__
#### [[Forbes]]: [The Cloud 100 Rising Stars 2020: Cloud Computing’s Next Wave, From Resilia To Roam Research](https://www.forbes.com/sites/kenrickcai/2020/09/16/cloud-100-rising-stars-2020)
- > __...its tools that help developers, writers and researchers link together connected notes.__
#### [[Enterprise Tech 30]]: [Roam Research: The Enterprise Tech 30 Early Stage Startup](https://www.enterprisetech30.com/#early-stage)
- > __Inductees to the ET30 are on a fast track of growth and and are expected to be future IPOs and multi-billion dollar exits.__
#### [[The Information]]: [A $200 Million Seed Valuation for Roam Shows Investor Frenzy for Note-Taking Apps](https://www.theinformation.com/articles/a-200-million-seed-valuation-for-roam-shows-investor-frenzy-for-note-taking-apps)
- > __...in early development, the no-frills service has attracted a following in the research community and among an influential set of tech CEOs like__ [Patrick Collison](https://www.theinformation.com/articles/venture-capitalists-newest-threat-stripe).
#### [[Divinations]]: [Roam's road ahead](https://every.to/divinations/roams-road-ahead-2444209)
- > __Out of all the teams in technology, if there was one that I’d bet on to defy conventional wisdom, it’d honestly be Roam.__
---
# Table
- [[.--]]
- {{[[table]]}}
### Articles::
- [How to build a table in Roam Research](https://web.archive.org/web/20201109133038/https://www.roamtips.com/home/create-tables-roam-research) - [[Roam Tips and Hacks]]
### Community Videos::
#### How to Set Goals Using Tables in Roam Research by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=CPk5RSnlpDA}}
#### Roam Research: Tables by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=nZHlz6RUleE}}
### Roam Team Videos::
#### Tables with Complex Cells (no audio) by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=J_hH5vH2DTo}}
#[[Table]]
- [[.--]]
---
# Project Management
### Community Videos::
#### Managing tasks and projects with Roam Research by [[Mickey Mellen]]
- {{[[video]]: https://www.youtube.com/watch?v=NoNebWRn9ZQ&ab_channel=MickeyMellen}}
#[[TODO/DONE]] | #[[Page References]] | #[[Daily Notes]] | #[[Linked References]] | #[[Date picker]] | #[[Filter]]
#### PARA in Roam Reserach, Managing projects and tasks by [[Praveen Anuraj]]
- {{[[video]]: https://www.youtube.com/watch?v=SQ71uG1q79g&ab_channel=PraveenAnuraj}}
#[[Page References]] | #[[TODO/DONE]] | #[[Query]] | #[[Date picker]]
### Articles::
#### [How I’m using Roam Research to Document a Sales Project | by Eran Boodnero | Medium](https://medium.com/@eboodnero/how-i-became-a-productivity-power-house-9da20ba728c0)
- #[[Page References]] | #[[TODO/DONE]] | #[[Block References]] | #[[Daily Notes]]
#### [Project management for people who like flow and hate project management – Joshua Mitchell](https://lelon.io/blog/roam-research-project-management)
- #[[Page References]] | #[[TODO/DONE]] | #[[Current time]] | #[[Right Sidebar]] | #[[Linked References]] | #[[Search]]
#### [Tasks and notes: A match made in Roam - R.J. Nestor](https://rjnestor.com/home/tasks-and-notes-a-match-made-in-roam/)
- #[[Page References]] | #[[Query]] | #[[Block References]] | #[[Replace With]] | #[[text and alias]] | #[[TODO/DONE]]
-
---
# Video Embed
- You can embed videos in Roam directly, without going to a separate page to access them
- Video Embed currently supports YouTube, Vimeo and Loom video embeds
- YouTube
- {{[[video]]: https://www.youtube.com/watch?v=mlCiO2oIF2s}}
- Vimeo
- {{[[video]]: https://vimeo.com/412417062}}
- Loom
- {{[[video]]: https://www.loom.com/share/89c445cb29424dfdb9e1163723dd1405}}
- Key Commands::
- `/video`
- Or just paste the video URL and click on the play button for the URL to auto convert to a video embed
- 
---
# Upload Files
- You can upload and embed files in Roam, including audio, PDFs, and images, so you can access files right on the spot
- Upload audio [[Audio Player]]
- 
- Upload PDFs
- 
- Upload [[Images]]
- 
- Community Videos::
- Roam Research: Adding a File by [[Les Kristofs]]
- {{[[video]]: https://www.youtube.com/watch?v=JgT_zGrudko}}
#[[Upload Files]] | #[[/ Commands]]
- Key Commands::
- `/upload`
---
# Workflows
## [Journaling]([[Journaling]])
## [Longform writing]([[Longform writing]])
## [Meeting notes]([[Meeting notes]])
## [Zettelkasten]([[Zettelkasten]])
## [Research]([[Research]])
## [Studying]([[Studying]])
## [Task Management]([[Task Management]])
## [Project Management]([[Project Management]])
## [Personal CRM]([[Personal CRM]])
## [Miscellaneous]([[Miscellaneous]])
-
-
---
# Install Roam
#### **Does Roam have a mobile app? Can I install it on my machine?**
- Not yet, however Roam is available now as a webapp which gives you full access to your Roam and functions in a similar way to an app available through the appstore.
- Here's how to install Roam as a webapp on your **phone** or **tablet**:
- Go to chrome (or the other browser you use such as safari, firefox etc), then go to [http://www.roamresearch.com](http://www.roamresearch.com/), and it will ask you to sign in to your Roam account.
- Once you sign in you will see this screen below. And then click the prompt at the bottom that says 'Add Roam to homescreen', which will install Roam as a link on your tablet/phone.
- 
- An alternative way to do this, if you go to [roamresearch.com](http://roamresearch.com/) and sign in, you should should see 'install full site' as a button on the top right of page, if you click this it will install Roam on your device.
- Here's how to install Roam as a webapp on your **desktop**:
- Go to Chrome, and open your Roam graph
- From Chrome's three-dot-menu, go to "More Tools", "Create Shortcut"
- 
- More on this: https://www.roamtips.com/home/roam-research-app-mac-windows
---
# Longform writing
- Community Videos::
- **Transform Your Creative Process with Roam Research by [[Drew Coffman]]**
- {{[[video]]: https://www.youtube.com/watch?v=t4AD320OG60}}
#[[Bidirectional linking]] | #[[Graph Overview]]
- **How to Use Roam to Outline a New Article in Under 20 Minutes by [[Nat Eliason]]**
- {{[[video]]: https://www.youtube.com/watch?v=RvWic15iXjk&feature=emb_title&ab_channel=NatEliason}}
#[[Right Sidebar]] | #[[Block References]] | #[[Page References]] | #[[Unlinked References]] | #[[Formatting]]
- **Writing in Roam Research: Keeping Track of Multiple Drafts by [[R.J. Nestor]]**
- {{[[video]]: https://www.youtube.com/watch?v=6tr0O0xT3WY&t=2s&ab_channel=R.J.Nestor}}
- #[[Tags]] | #[[Filter]] | #[[Version Control]] | #[[Right Sidebar]] | #[[Block References]] | #[[Replace With]] | #[[text and alias]] | #Formatting | #[[Page References]] | #[[Linked References]]
- Articles::
- **[Roam Research has unlocked my desire to write](https://radi.blog/roam-research-has-unlocked-my-desire-to-write/) by [[Radi Baboe]]**
- #[[Page References]] | #[[Search]]
---
# Mentions
- Mentions help you pull information (i.e., References) right on any [[Blocks]], without you having to open extra windows or sidebars to access them
- For example, pulling the mentions for the [[Linked References]] and [[Unlinked References]] for White Paper
- {{[[mentions]]: [[White Paper]]}}
- Community Videos::
- How To Use Roam Research Basics: Mentions and Using It With Daily To Dos or Task Management by [[The Upgraded Brain]]
- {{[[video]]: https://www.youtube.com/watch?v=5zC0EEeeMX0}}
#[[Task Management]] | #[[Mentions]] | #[[Task Management]]
- Articles::
- [What are page mentions and block mentions in Roam?](https://www.roamtips.com/home/page-mentions-and-block-mentions-roam) by [[Roam Tips]]
- #[[/ Commands]] | #[[Mentions]]
- Key Commands::
- `/mentions`
---
# Images
- You can include images on Roam in these two ways
- Pull from the internet (nothing gets stored, so if original link is broken, you lose the [image](https://firebasestorage.googleapis.com/v0/b/firescript-577a2.appspot.com/o/imgs%2Fapp%2Fhelp-documentation%2FE5b-pBgXuQ.png?alt=media&token=b29c9beb-f9f3-44c7-88db-42a6b2b32289))
- 
- Upload from your local computer (the image gets uploaded to our server)
- Team GIFs::
- 
- `/upload` to upload from your local computer
#[[Key Commands]]
- 
- Highlight a word, press `Cmd+k or Ctrl+k`, paste the image link
#[[Key Commands]]
- Key Commands::
- `` to pull from the internt
---
# Journaling
### Articles::
#### [How to Keep a Journal in Roam Research](https://markmcelroy.com/how-to-keep-a-journal-in-roam-research/) by [[Mark McElroy]]
- #[[Daily Notes]] | #[[Page References]] | #[[Slider]]
#### [How to use Roam Research for Interstitial Journaling](https://www.cortexfutura.com/interstitial-journaling-roam-research/) by [[Cortex Futura]]
- #[[Daily Notes]] | #[[Current time]] | #[[Page References]]
#### [Atomic Journaling - Expanding Thoughts](https://brandontoner.substack.com/p/atomic-journaling) by [[Brandon Toner]]
- #[[Daily Notes]] | #[[Templates]] | #[[Block References]]
#### [Interstitial journaling: combining notes, to-do & time tracking](https://nesslabs.com/interstitial-journaling) by [[Anne-Laure Le Cunff]]
- #[[Daily Notes]] | #[[Current time]] | #[[Task Management]] | #[[Page References]]
#### [The Power of Roaman Journaling](https://www.roambrain.com/the-power-of-roaman-journaling/) by [[Tracy Winchell]]
- #[[Templates]] | #[[Daily Notes]] | #[[Current time]] | #[[Block Embed]]
---
# Research
### Roam Team Videos::
#### Roam for Research by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=L6GIW4PprQE&t=17s&ab_channel=ConorWhite-Sullivan}}
#[[Page References]] | #[[Linked References]] | #[[Unlinked References]] | #[[Right Sidebar]] | #[[Block References]]
### Community Videos::
#### How I Use Roam for Academic Research by [[Notes with Ren]]
- {{[[video]]: https://www.youtube.com/watch?v=JvoSiVolPko&t=7s&ab_channel=NotesWithRen}}
#[[Page References]] | #[[Images]] | #[[Indentation]] | #[[Daily Notes]]
#### How to Use Roam Research Attributes for Academic Reference Management by [[Nabhan]]
- {{[[video]]: https://www.youtube.com/watch?v=7A_KMK4qILo&ab_channel=Nabhan}}
#[[Query]] | #[[Page References]] | #[[Attributes]] | #[[Indentation]]
### Articles::
#### [In search of the Literature X-ray: Using Roam in academic research](https://www.roambrain.com/in-search-of-the-literature-x-ray/) by [[Cortex Futura]]
- #[[Query]] | #[[Page References]] | #[[Alias]]
---
# Export
#### [[Markdown]] Export
- 
#### [[MessagePack]] Export
- 
#### [[EDN]] Export
- 
#### [[JSON]] Export
- 
#### Auto Backups
- 
---
# Long Videos
#### Implementing a Digital Zettelkasten using Block References in Roam Research with [[Beau Haan]] by [[Robert Haisfield]]
- {{[[video]]: https://www.youtube.com/watch?v=KoddCmn3eL0&ab_channel=RobertHaisfield}}
#[[Block References]] | #[[Page References]] | #[[Indentation]] | #[[Daily Notes]] | #[[Current time]] | #[[Right Sidebar]]
#### Todoist to Roam Research - Advanced Task Management in Roam by [[Matt Goldenberg]]
- {{[[video]]: https://www.youtube.com/watch?v=xOTTyLtgqpM}}
#[[roam/css]] | #[[Extensions]] | #[[roam/js]] | #[[Sidebar]] | #[[TODO/DONE]] | #[[Query]]
#### A Beginner’s Guide to Roam Research by [[Drew Coffman]]
- #[[Daily Notes]]
- {{[[video]]: https://www.youtube.com/watch?v=X6OOos4met0}}
#### How I Organise My Life with Roam by [[Ali Abdaal]]
- #[[Daily Notes]] | #[[Bidirectional linking]] | #[[Linked References]] #[[Book]] | #[[Sidebar]] | #[[Tags]] | #[[Evergreen Notes]] | #[[Block References]] | #[[Templates]] | #[[Query]]
- {{[[video]]: https://www.youtube.com/watch?v=bpikCLhpIRY}}
---
# Date picker
- Date picker helps you pick a date's page by showing you a calendar
- {{date}}
- Roam Team Videos::
- Scheduling with Roam by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=ByiFhtlI66A}}
#[[Linked References]] | #[[TODO/DONE]] | #[[Date picker]]
- Community Videos::
- How to Build a Weekly Schedule in Roam by [[Dalton Mabery]]
- {{[[video]]: https://www.youtube.com/watch?v=E8GW5QhY9VY}}
#[[Date picker]] | #[[TODO/DONE]] | #[[Tags]] | #[[Filter]] | #[[Linked References]] | #[[Query]]
- Key Commands::
- `/date`
---
# Attributes
- Community Videos::
- Roam Basics Part 3: Attributes and Use of / by [[Dr Alex Popadich]]
- {{[[video]]: https://www.youtube.com/watch?v=uO1zMII3gWs}}
#[[/ Commands]] | #[[Attributes]]
- Using Template Pages in Roam (Metadata) by [[Dalton Mabery]]
- {{[[video]]: https://www.youtube.com/watch?v=FkIzSeXydZ4}}
#[[Templates]] | #[[Attributes]] | #[[Sidebar]]
- Task Management, Roam Research: Dealing with Dates by [[R.J. Nestor]]
- {{[[video]]: https://www.youtube.com/watch?v=MyDpU4Shwcw}}
#[[Filter]] | #[[Linked References]] | #[[Attributes]]
- An in-depth look at Attributes in [[Roam Research]] + BONUS by [[m4rrc0]]
- {{[[video]]: https://www.youtube.com/watch?v=uWXm85VFOQs}}
#[[Attributes]]
-
---
# Bidirectional linking
- It doesn't matter what [page]([[Pages]]) you've written a note on, if you mention an idea, every place where you mentioned that idea will get collected underneath that page in the [[Linked References]] section when you turn turn that idea into a [page reference]([[Page References]])
- Roam Team Videos::
- {{[[video]]: https://www.youtube.com/watch?v=v9s3pusI1JQ}}
- {{[[video]]: https://www.youtube.com/watch?v=lHkMq3aqDtw&ab_channel=ConorWhite-Sullivan}}
- Articles::
- [A Short History of Bi-Directional Links](https://maggieappleton.com/bidirectionals) by [[Maggie Appleton]]
- Key Commands::
- `[[` to find or create [[Page References]]
- `cmd+u` (macOS) / `ctrl+u` (PC) to [[Find or create page]]
- `#` to find or create [[Page References]] as a [tag]([[Tags]])
---
# Studying
- Community Videos::
- **Roam Research: Notetaking Session for School by [[J M]]**
- {{[[video]]: https://www.youtube.com/watch?v=ZOWk76FhwEU&feature=youtu.be&ab_channel=JM}}
#[[Page References]] | #[[Indentation]] | #[[Right Sidebar]]
- **Roam for Students | How to Take Notes in a Lecture by [[Shu Omi]]**
- {{[[video]]: https://www.youtube.com/watch?v=nWgXBGDP3nI&ab_channel=ShuOmi}}
#[[Page References]] | #[[Indentation]]
- **How I use Roam Research for Lecture Notes (for college students) by [[Abhinav Kejriwal]]**
- {{[[video]]: https://www.youtube.com/watch?v=gBYwBNY3pNc&ab_channel=AbhinavKejriwal}}
#[[Page References]] | #[[Sidebar]] | #[[Block References]]
### Articles::
#### [How I Used Roam Research to Study for Medical School](https://toolsforgrowth.substack.com/p/how-i-used-roam-research-to-study)
- #[[Daily Notes]] | #[[Page References]] | #[[Indentation]] | #[[Linked References]]
---
# Meeting notes
### Community Videos::
#### Mini CRM in Roam Research: Logging meeting notes by [[R.J. Nestor]]
- {{[[video]]: https://www.youtube.com/watch?v=CnakhkONQ_g&t=6s&ab_channel=R.J.Nestor}}
#[[Daily Notes]] | #[[Tags]] | #[[Indentation]] | #[[Linked References]] | #[[Filter]] | #[[Right Sidebar]]
### Roam Team Videos::
#### Meeting Notes in Roam by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=wMOOU8uFLZI&t=129s&ab_channel=ConorWhite-Sullivan}}
#[[Page References]] | #[[Daily Notes]] | #[[Date picker]] | #[[Linked References]] | #[[TODO/DONE]] | #[[Right Sidebar]] | #[[Filter]] | #[[Query]] | #[[Block References]] | #[[Alias]]
#### Taking Notes on 1:1s by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=otoF_ane688&ab_channel=ConorWhite-Sullivan}} #[[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=otoF_ane688&ab_channel=ConorWhite-Sullivan}}
#[[Current time]] | #[[Page References]] | #[[Right Sidebar]] | #[[Linked References]] | #[[Query]] | #[[TODO/DONE]] | #[[Block References]]
-
---
# Code Block
- You can include code in different programming languages in Roam, for example
- JS block
- ```javascript
Before the script...
...After the script.
```
- CSS block
- ```css
Hello, Roamans! ```
- Clojure block
- ```clojure
(ns hello-world.core)
(println "Hello Roamans!")```
- Key Commands:
- `/code block`
---
# Page References
- Page references are links to [[Pages]] in your graph
- You can reference an existing page by typing `[[`, which will open a dropdown menu with reference it in place or reference an existing page
- All references to a page that have been linked through this method will appear in that pages [[Linked References]]
- You can transform any mention of a page to a page reference by opening up the [[Unlinked References]] underneath where you can see and link all the mentions of a page that haven't been linked yet
- Roam Team Videos::
- {{[[video]]: https://www.youtube.com/watch?v=v9s3pusI1JQ}}
- {{[[video]]: https://www.youtube.com/watch?v=lHkMq3aqDtw&ab_channel=ConorWhite-Sullivan}}
- Community Videos::
- Articles::
---
# Scripture Study
### Community Videos::
#### Processing Sermon/Bible Notes Using Roam Research by [[Mickey Mellen]]
- {{[[video]]: https://www.youtube.com/watch?v=nplokaE6FKY&ab_channel=MickeyMellen}}
#[[Page References]] | #[[Linked References]] | #[[Graph Overview]] | #[[Block References]] | #[[Sidebar]]
### Articles::
#### [How I’m Using Roam Research for Bible Study](https://thesweetsetup.com/how-im-using-roam-research-for-bible-study/) by [[Josh Ginter]]
- #[[Graph Overview]] | #[[Date picker]] | #[[Upload Files]] | #[[Markdown]] | #[[Page References]] | #[[Block References]]
#### [Processing sermon and Bible notes using Roam](https://www.roambrain.com/processing-sermon-and-bible-notes-using-roam/) by [[Mickey Mellen]]
- #[[Page References]] | #[[Linked References]] | #[[Graph Overview]] | #[[Block References]] | #[[Sidebar]]
---
# Sharing
#### Sharing graph as read-only
- 
#### Sharing graph as publicly editable
- 
#### Sharing graph with specific editors
- 
#### Sharing graph with specific readers
- 
---
# Word count
- Word count counts the number of words in a block, for example
- The below child block has 115 words
- Roam is an online workspace for organizing and evaluating knowledge. The system is built on a directed graph, which frees it from the constraints of the classic file tree. Users can remix and connect ideas in multiple overlapping hierarchies, with each unit of information becoming a node in a dynamic network. Any given node can occupy multiple positions simultaneously, convey information through defined relationships, and populate changes throughout the graph. With weightings assigned to the strength of relationships between nodes, Roam also becomes a tool for Bayesian inference and decision making. The ultimate goal is to extend the system to collaborative reasoning, allowing groups to build shared mental maps and make faster and better-informed decisions. {{[[word-count]]}}
- The below child block has 0 words
- {{word-count}}
- You can also go to ALL PAGES on your [[Left Sidebar]] and view the pages with the most to least word count, or vice versa
- Key Commands::
- `/word`
---
# Cancelling your membership during your free trial
- [Sign In](https://roamresearch.com/#/signin) to your Roam account, with the email address you used at sign up:
- 
- Then, you can cancel/manage your trial/subscription directly from the following link:
https://roamresearch.com/#/billing
- You can also access your Billing page by going to the [Graphs & Settings](https://roamresearch.com/#/app) page, and cancel/manage your subscription by clicking on your **Name/Email > Billing > Manage Subscription > Cancel Subscription**
- 
- This will cancel your trial. If you have any problems at all, please contact Roam support at [support@roamresearch.com](mailto:support@roamresearch.com). We can also cancel your trial/plan manually on your behalf well.
- For your information, Canceling or failing to renew a subscription has 0 effect on your notes - you won't be able to add new notes or edit them, but you'll have access to the graph and the ability to [export your notes](https://roamresearch.com/#/app/help/page/FK4fiJVom) (as Markdown, JSON, EDN or [MessagePack](https://roamresearch.com/#/app/help/page/8StBIyCnR) format).
- Thanks for trying Roam!
---
# Spanish
#### ✏️Cómo TOMAR NOTAS con ROAM RESEARCH & ZETTELKASTEN | Tutorial en español by [[Emowe Aprendizaje]]
- {{[[video]]: https://www.youtube.com/watch?v=bwpVWyOBjHw}}
#[[Daily Notes]] | #[[Page References]] | #[[Formatting]] | #[[Graph Overview]] | #[[Right Sidebar]] | #[[Linked References]] | #[[Navigation]] | #[[Block References]] | #[[Block Embed]]
- ---
#### [Curso Roamresearch "Beta"](https://www.youtube.com/playlist?list=PL2CI0VRuaLWcDOU6RQLVJQb6lwW4QRqAN) | by [[Jorge Arone]]
- #Courses
- ---
#### [Curso Roamresearch "Avanzado"](https://www.youtube.com/playlist?list=PL2CI0VRuaLWchGZi3KZOwvwqPNDGBicXP) | by [[Jorge Arone]]
- #Courses
---
# Console Logs
- To capture console logs
- 
- Right click your Roam screen
- Click "Inspect"
- Click "Console"
- Right click anywhere in the console logs
- Click "Save as"
- Save
---
# Block Search
- Key Things to Know
- Open by pressing `Ctrl+Shift+9` while focused on a block
- `Tab` or `Enter` will add an item to the path or—when there is no text in the search field—select the block and ref it in the focused block
- `Delete` will move you back up the path
- Use Cases::
- Placing new items on another page, then referencing them in your current context
- Without breaking flow
---
# Roam Depot
- Official [[Plugins]]
- [[July 21st, 2021]]
- https://twitter.com/RoamResearch/status/1550192726540374016?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[PhonetoNote]]
- https://twitter.com/phonetonote/status/1551764556707397633?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
- [[Matter]]
- https://twitter.com/matter/status/1549490849595080704?s=20&t=qEEBfrUN4jkSq9qSt5HDAQ
---
# Character count
- Character count counts the number of characters in a block, for example
- The below child block has 768 characters
- Roam is an online workspace for organizing and evaluating knowledge. The system is built on a directed graph, which frees it from the constraints of the classic file tree. Users can remix and connect ideas in multiple overlapping hierarchies, with each unit of information becoming a node in a dynamic network. Any given node can occupy multiple positions simultaneously, convey information through defined relationships, and populate changes throughout the graph. With weightings assigned to the strength of relationships between nodes, Roam also becomes a tool for Bayesian inference and decision making. The ultimate goal is to extend the system to collaborative reasoning, allowing groups to build shared mental maps and make faster and better-informed decisions. {{character-count}}
- The below child block has no characters
- {{character-count}}
- Key Commands::
- `/character`
---
# Why Roam?
- This thread of threads on Twitter answers the question of "Why Roam?" pretty well, if not succinctly 😉
- https://twitter.com/Conaw/status/1198399750032232449?s=20a
- *Conor mentions the old help graph in this thread. If you are searching for the white paper, he mentioned, find it in this graph [here]([[White Paper]]).
-
- Community Videos::
- **Exploring Networked Thought: The Story of Roam Research by [[Futurism]]**
- {{[[video]]: https://www.youtube.com/watch?v=EqyJweIHaeg}}
#[[Bidirectional linking]]
---
# Chinese
- Community Videos::
- **Roam Research Tutorials by [[Shuyi Wang]]**
- {{[[video]]: https://www.youtube.com/watch?v=TXKa0VbQZeY&list=PL-BErONJz2qEEUS3OjpuWHhtb9JjXKFBZ&index=2}}
#[[Page References]] | #[[Bidirectional linking]] | #[[Block References]] | #[[Linked References]] | #[[Graph Overview]]
- **用Roam Research做唸書筆記:以民法總則為例 by [[yang Scicily]]**
- {{[[video]]: https://www.youtube.com/watch?v=Ic3Ens2DJzs&feature=youtu.be}}
#[[Graph Overview]] | #[[Sidebar]] | #[[Page References]]
- **Roam教學:第一集(Otter.ai與otter2roam的運用) by [[曹建雄]]**
- {{[[video]]: https://www.youtube.com/watch?v=W2CkfWkxluo}}
#[[Upload Files]] | #[[Audio Player]] | #[[Video Embed]] | #[[otter2roam]]
---
# Current time
- Current time displays the current time in your time zone, it's great for tracking time while writing daily logs
- For example
- 21:19
- Task Management by [[Conor White-Sullivan]]
- {{[[video]]: https://www.youtube.com/watch?v=3aCl7dCYVqA&t=6s&ab_channel=ConorWhite-Sullivan}}
#[[TODO/DONE]] | #[[Daily Notes]] | #[[Filter]] | #[[Linked References]] | #[[Block Embed]] | #[[Current time]] | #[[Block References]]
- Key Commands::
- `/time`
---
# Adding soft line breaks in a block
- Each individual bullet point in a page in Roam is referred to as a block. When you press enter Roam creates a new block on the next line in your page. Here's an example from a test page where I create five separate blocks.
- 
- It's also possible to create blocks that include soft line breaks between text. If you have a block with a lot of text, rather than have all your text as a slab, using soft lines breaks allows you to space out this text within a single block.
- To add a soft line break press enter + shift. You can then write on a new line, but it remains in the same block. Here's an example where I add soft line breaks by pressing enter + shift five times between the first and second sentence. In contrast to the first example, both of these sentences in the second example remain in the same block. You can notice this because there are no bullets between the top and bottom sentence.
- 
- Adding soft line breaks is a nice formatting tool, it allows you to create blocks with a lot of rich information such as paragraphs but also giving the text a more readable style with these blocks.
- The best way to see whether soft line breaks are a useful feature for you is try it out yourself
---
# Import
#### Importing [[JSON]]
- 
#### Importing [[Markdown]]
- 
#### Restore your entire graph from [[EDN]] or [[MessagePack]]
- 
---
# Version Control
- Version control helps you create different versions of of the same block, often used when you want to make multiple drafts of something
- This is an example with Roam's elevator pitch, click on the numbers to see the different versions
- Roam is a tool to compound knowledge, something I'd be proud to look back on how my brain has grew and evolved 20 years later.
- Key Commands::
- `Ctrl+,` for Windows
- `Cmd+,` for Mac
---
# Kids
### Community Videos::
#### Roam Research for Kids by [[Les Kristofs]]
- {{[[youtube]]: https://www.youtube.com/watch?v=PMJL2cvmeeQ&list=PLS7Ix7BP1Vuoi3Hl46nUnDHukb52xQWx2}}
#[[Daily Notes]] | #[[Page References]] | #[[Bidirectional linking]] | #[[Task Management]] | #[[Table]] | #[[Current time]] | #[[Right Sidebar]] | #[[Templates]] | #[[Block References]] | #[[Tags]]
### Articles::
#### [Let the Kids Roam](https://www.roambrain.com/let-the-kids-roam/) by [[Les Kristofs]]
- #[[Pomodoro timer]] | #[[KaTeX]] | #[[Calculator]] | #[[Task Management]] | #[[Upload Files]] | #[[Page References]]
---
# Left Sidebar
#### Star/unstar pages
- 
#### Drag and drop to reorder shortcuts
- 
#### Dropdown menu to access graphs
- 
---
# Wiki
### Community Videos::
#### Creating a Life Wiki in Roam by [[Shu Omi]]
- {{[[video]]: https://www.youtube.com/watch?v=PrEuEgxZMQw}}
#[[Graph]] | #[[Diagram]]
### Articles::
#### [Building a Personal Wikipedia with Roam Research](https://thalein.medium.com/building-a-personal-wikipedia-with-roam-research-b26b489b9e4b) by [[Tim de Rooij]]
- #[[Attributes]] | #[[Block References]] | #[[Linked References]]
---
# Today
- The "today" function auto generates today's daily notes page, it will either give you a static result, or a variable result ("today" will always point to today's date, rather than a set date) when used in a [[Query]]
- For example, a static result: today is [[March 8th, 2021]]
- A variable result: {{[[query]]: {and: [[today]] [[tomorrow]] {not: [[query]]}}}}
- Key Commands::
- `/today`
---
# Slider
- Sliders are good for representing data on a scale, and are especially useful for polls on [[Multiplayer]] graphs!
- Type `{{[[slider]]}}` (or select `Slider` after [typing]([[/ Commands]]) `/`) to conjure one:
- {{[[slider]]}}
- 
- Other users can click on the slider to give their rating as well
---
# Russian
### Community Videos::
#### Мастер-класс по Roam Research от Сергея Хабарова by [[Школа ченджеров]]
- {{[[video]]: https://www.youtube.com/watch?v=sPAioC8un2w&feature=emb_title&ab_channel=%D0%A8%D0%BA%D0%BE%D0%BB%D0%B0%D1%87%D0%B5%D0%BD%D0%B4%D0%B6%D0%B5%D1%80%D0%BE%D0%B2}}
#[[Page References]] | #[[Linked References]] | #[[Graph Overview]] | #[[Unlinked References]] | #[[Daily Notes]] | #[[Block References]] | #[[Right Sidebar]] | #[[/ Commands]]
### Articles::
#### [Гид по философии Roam Research](https://khabaroff.com/roam-research/) by [[khabaroff]]
---
# Numbered List Extension
- Thank you for installing the Numbered List extension for Roam Research. This page has been automatically generated to allow creation of a SmartBlock to allow you to refresh your numbered lists after you move things around and re-order them.
- Below the horizontal line is the Refresh Numbered List SmartBlock. Please don't change it unless you know what you are doing!
- ---
- #SmartBlock Refresh Numbered List
- <%REFRESHNUMBEREDLIST%>
---
# Encrypted Block
- Encrypted block creates encrypted text that can only be unlocked with a secret password
- Try clicking on the encrypted block below, and enter the passphrase `hello`
- {{encrypt:U2FsdGVkX19S1e0ybaJH2keLGMifvVhqsBlVINdMpvPegcL01PWU6gjltQgbMGwzLoZWQdzrejJ8tJFNKIjNAUfBZ2o4d5XVpZRhDyICt8DoDCbPD65ATX9HHfM4Oa72zxv5jKUESYe0xku/Yqj3Lg==}}
### Roam Team Videos::
- https://twitter.com/i/status/1226658292333568003
---
# Tomorrow
- The "tomorrow" function auto generates tomorrow's daily notes page, it will either give you a static result, or a variable result ("tomorrow" will always point to tomorrow's date, rather than a set date) when used in a [[Query]]
- For example, a static result: tomorrow is [[March 9th, 2021]]
- A variable result: {{[[query]]: {and: [[today]] [[tomorrow]] {not: [[query]]}}}}
- Key Commands::
- `/tomorrow`
---
# Tags
- Tags are just [[Page References]] that are styled a bit differently (light grey font color) so that the tag is not as prominent
- Usually used at the end of blocks or at the beginning, whereas normally [[Page References]] are used alone as parent block or inline as part of a sentence
- Key Commands::
- `#` to find or create [[Page References]] as a [tag]([[Tags]])
---
# Alexander Rink
- [[Roam Depot Extensions]]
- [Roam Studio](https://github.com/rcvd/RoamStudio)
- Discover a wide range of themes for Roam Research that are beautiful and highly customizable, with various options and modules to choose from.
- [Magic Tags](https://github.com/rcvd/magic-tags)
---
# Korean
-
### Articles::
#### ['롬 리서치' 카테고리의 글 목록](https://learning-and-practice.tistory.com/category/%EB%A1%AC%20%EB%A6%AC%EC%84%9C%EC%B9%98)
- #[[Right Sidebar]] | #[[Block References]] | #[[Block Embed]] | #[[Daily Notes]] | #[[Page References]] | #[[Linked References]] | #[[Indentation]] | #[[Unlinked References]]
---
# Latex
- Description::
- Any text entered with `$$double dollar signs$$` will be evaluated as latex, using [[Khan Academy]]'s katex typesetting library -- see docs for that here https://katex.org/ - particularly here https://katex.org/docs/supported.html
- [[Change Log]]
- {{embed-path: [[Latex]] now will parse block references, including other latex so you can comp}}
---
# Key Commands
- Turn key commands instruction on with custom components like this
- 
- {{roam/render: ```clojure
(ns roam.keycommand
(:require
[clojure.string :as str]
[clojure.core :refer [println]]
[reagent.core :as r]
[roam.util :as u]))
(defn includes? [s1 s2]
(when (and (string? s1)
(string? s2))
(str/includes? (str/upper-case s1) (str/upper-case s2))))
(defn includes-strings? [s strings]
(every? #(includes? s %) strings))
(def help-content
[{:category "The Basics"
:id 0
:type :key-command
:functions [{:name "Find or create new page"
:shortcut {:mac "cmd+u"
:pc "ctrl+u"}}
{:name "Bring up quick commands"
:shortcut {:mac "/"
:pc "/"}}
{:name "Reference or create new page"
:shortcut {:mac "[["
:pc "[["}}
{:name "Reference a block"
:shortcut {:mac "(("
:pc "(("}}
{:name "New block"
:shortcut {:mac "return"
:pc "enter"}}
{:name "Indent block"
:shortcut {:mac "tab"
:pc "tab"}}
{:name "Unindent block"
:shortcut {:mac "shift+tab"
:pc "shift+tab"}}]}
{:category "Formatting"
:id 1
:type :markdown-key-command
:functions [{:markdown "**Bold**"
:shortcut {:mac "cmd+b"
:pc "ctrl+b"}}
{:markdown "__Italics__"
:shortcut {:mac "cmd+i"
:pc "ctrl+i"}}
{:markdown "~~Strikethrough~~"
:shortcut {:mac "cmd+y"
:pc "ctrl+y"}}
{:markdown "^^Highlight^^"
:shortcut {:mac "cmd+h"
:pc "ctrl+h"}}
{:markdown "[Link](/#/app/help)"
:shortcut {:mac "cmd+k"
:pc "ctrl+k"}}
{:markdown "$$\\KaTeX$$"
:shortcut {:mac "$$"
:pc "$$"}}
{:markdown "# Heading 1"
:shortcut {:mac "cmd+opt+1"
:pc "ctrl+alt+1"}}
{:markdown "## Heading 2"
:shortcut {:mac "cmd+opt+2"
:pc "ctrl+alt+2"}}
{:markdown "### Heading 3"
:shortcut {:mac "cmd+opt+3"
:pc "ctrl+alt+3"}}]}
{:category "Navigating"
:id 2
:type :key-command
:functions [{:name "Move cursor to next block"
:shortcut {:mac "down"
:pc "down"}}
{:name "Move cursor to previous block"
:shortcut {:mac "up"
:pc "up"}}
{:name "Go to Daily Notes page"
:shortcut {:mac "ctrl+shift+d"
:pc "alt+d"}}
{:name "Zoom in to current block"
:shortcut {:mac "cmd+."
:pc "alt+right"}}
{:name "Zoom out to parent block"
:shortcut {:mac "cmd+,"
:pc "alt+left"}}
{:name "Go to next day\n(when on daily page)"
:shortcut {:mac "ctrl+opt+n"
:pc nil}}
{:name "Go to previous day\n(when on daily page)"
:shortcut {:mac "ctrl+opt+p"
:pc nil}}
{:name "Go to first block on page\n(when nothing is selected)"
:shortcut {:mac "cmd+return"
:pc "ctrl+enter"}}
{:name "Go to last block on page\n(when nothing is selected)"
:shortcut {:mac "cmd+shift+return"
:pc "ctrl+shift+enter"}}
{:name "Follow link under cursor"
:shortcut {:mac "ctrl+o"
:pc "ctrl+o"}}
{:name "Open link under cursor in sidebar"
:shortcut {:mac "ctrl+shift+o"
:pc "ctrl+shift+o"}}
{:name "Move cursor forward"
:shortcut {:mac "ctrl+f"
:pc nil}}
{:name "Move cursor backward"
:shortcut {:mac "ctrl+b"
:pc nil}}
{:name "Jump to start of block"
:shortcut {:mac "ctrl+a"
:pc "ctrl-home"}}
{:name "Jump to end of block"
:shortcut {:mac "ctrl+e"
:pc "ctrl-end"}}]}
{:category "Blocks"
:id 3
:type :key-command
:functions [{:name "Move block up"
:shortcut {:mac "cmd+shift+up"
:pc "alt+shift+up"}}
{:name "Move block down"
:shortcut {:mac "cmd+shift+down"
:pc "alt+shift+down"}}
{:name "New line within block"
:shortcut {:mac "shift+return"
:pc "shift+enter"}}
{:name "Expand block"
:shortcut {:mac "cmd+down"
:pc "ctrl+down"}}
{:name "Collapse block"
:shortcut {:mac "cmd+up"
:pc "ctrl+up"}}
{:name "Select current block and children"
:shortcut {:mac "shift+up"
:pc "shift+up"}}
{:name "Select block above\n(when block selected)"
:shortcut {:mac "shift+up"
:pc "shift+up"}}
{:name "Select block below\n(when block selected)"
:shortcut {:mac "shift+down"
:pc "shift+down"}}
{:name "Select all blocks on page"
:shortcut {:mac "cmd+shift+a"
:pc "ctrl+shift+a"}}
{:name "Copy block reference(s)\nof selected block(s)"
:shortcut {:mac "cmd+shift+c"
:pc "ctrl+shift+c"}}
{:name "Cycle TODO state of\n current / selected blocks"
:shortcut {:mac "cmd+return"
:pc "ctrl+enter"}}
{:name "Open block search"
:shortcut {:mac "ctrl+shift+9"
:pc "ctrl+shift+9"}}]}
{:category "Sidebar"
:id 4
:type :key-command
:functions [{:name "Toggle left sidebar visibility"
:shortcut {:mac "cmd+\\"
:pc "ctrl+\\"}}
{:name "Toggle right sidebar visibility"
:shortcut {:mac "cmd+/"
:pc "ctrl+/"}}
{:name "Open page in right sidebar"
:shortcut {:mac "shift+click"
:pc "shift+click"}}
{:name "Open mentions in right sidebar"
:shortcut {:mac "cmd+shift+click"
:pc "ctrl+shift+click"}}
{:name "Create page in sidebar\n(from search)"
:shortcut {:mac "shift+return"
:pc "shift+enter"}}
{:name "Open link in sidebar\n(when editing)"
:shortcut {:mac "ctrl+shift+o"
:pc "ctrl+shift+o"}}]}
{:category "Appearance"
:id 5
:type :key-command
:functions [{:name "Toggle display of\ndouble brackets"
:shortcut {:mac "ctrl+c+b"
:pc "ctrl+c+b"}}
{:name "Toggle display of\nall inline mentions"
:shortcut {:mac "ctrl+c+r"
:pc "ctrl+c+r"}}
{:name "Toggle all users' bullet colors"
:shortcut {:mac "ctrl+c+s"
:pc "ctrl+c+s"}}
{:name "Toggle other users' bullet colors"
:shortcut {:mac "ctrl+c+c+s"
:pc "ctrl+c+c+s"}}
{:name "Toggle block live preview"
:shortcut {:mac "ctrl+c+p"
:pc "ctrl+c+p"}}
{:name "Cycle namespace display"
:shortcut {:mac "ctrl+c+l"
:pc "ctrl+c+l"}}]}
{:category "Other"
:id 6
:type :key-command
:functions [{:name "Toggle help popup visibility"
:shortcut {:mac "opt+shift+h"
:pc "alt-shift+h"}}
{:name "Undo"
:shortcut {:mac "cmd+z"
:pc "ctrl+z"}}
{:name "Redo"
:shortcut {:mac "cmd+shift+z"
:pc "ctrl+shift+z"}}
{:name "Move character under cursor forward"
:shortcut {:mac "ctrl+t"
:pc nil}}]}])
(def PC?
(when-not (nil? js/navigator)
(not (str/includes? js/navigator.userAgent "Mac OS X"))))
(defn key-command-view
[{:keys [name shortcut]}]
(when (or (not PC?)
(and PC? (:pc shortcut)))
[:div.rm-help-function
[:div.rm-help-function__name
name]
[:span.rm-help-function__shortcut
[:code
(if PC?
(:pc shortcut)
(:mac shortcut))]]]))
(defn markdown-key-command-view
[{:as props
:keys [markdown shortcut]}]
(when (or (not PC?)
(and PC? (:pc shortcut)))
[:div.rm-help-markdown-function
[:div.rm-help-markdown-function__style
(cond
(str/starts-with? markdown "###")
[:span.rm-level3 (subs markdown 4)]
(str/starts-with? markdown "##")
[:span.rm-level2 (subs markdown 3)]
(str/starts-with? markdown "#")
[:span.rm-level1 (subs markdown 2)]
:else
(u/parse markdown))]
[:span.rm-help-markdown-function__markdown
markdown]
[:span.rm-help-markdown-function__shortcut
(when shortcut
[:code
(if PC?
(:pc shortcut)
(:mac shortcut))])]]))
(defn content [_]
(let [*query (r/atom "")
*selected-category-id (r/atom nil)]
(fn [_]
(let [split-query (str/split @*query #"\s+")
filtered-content (->> help-content
(map (fn [category]
(assoc category
:functions
(filter
(fn [{:as function
:keys [name
markdown
title
description
shortcut]}]
(or
(includes-strings? name split-query)
(includes-strings? markdown split-query)
(includes-strings? (:pc shortcut) split-query)
(includes-strings? (:mac shortcut) split-query)))
(:functions category)))))
(filter #(> (count (:functions %)) 0)))]
[:div.rm-help
[:div.rm-help-search.sticky
[:div.rm-help-search__icon-container
[:span.bp3-icon-large.bp3-icon-search]]
[:input.rm-help-search__input
{:placeholder "Search all key commands"
:value @*query
:auto-focus "autofocus"
:on-change #(reset! *query (.. % -target -value))}]]
[:div.rm-help-results
[:div.rm-help__left-panel.sticky
[:div.rm-help-categories
(doall
(for [{:keys [category id]} filtered-content]
^{:key (str "category-" category)}
[:div.rm-help-category-menu-item
{:class (when (= id @*selected-category-id)
"rm-help-category-menu-item--selected")
:on-click #(let [function-group (.getElementById
js/document
(str "rm-help-" id))]
(.scrollIntoView function-group)
(reset! *selected-category-id id))}
category]))]]
[:div.rm-help-functions
(doall
(for [{:keys [category functions id type]} filtered-content]
^{:key (str "title-" category)}
[:div.rm-help-functions__category
{:id (str "rm-help-" id)}
[:div.rm-help-category__name
category]
[:hr]
(doall
(for [{:as function
:keys [name
markdown]} functions]
^{:key (str "function-" (or name markdown))}
(condp = type
:key-command [key-command-view function]
:markdown-key-command [markdown-key-command-view function])))]))]]]))))```}}
-
---
# Roam Slack
## We have a thriving community on Slack!
## Join via [this link](https://join.slack.com/t/roamresearch/shared_invite/zt-1x2y9jkx1-KkSjlsWeTdfXy5H8hMB7tg)
### We've got a curated graph of content of important things, accessible [here](https://roamresearch.com/#/app/roam-slack)
#### If you'd like access to the archive, fill out [this form](https://docs.google.com/forms/d/e/1FAIpQLSc8SpE4UOr2UynEqk-2Ob9TZECQaYGNO6XksphxqVPH2HosmQ/viewform)
---
# Linked References
#### Description::
- The Linked References section at the bottom of each page collects all the references to that page that
- You can [filter]([[Filter]]) the linked references based on the other pages referenced in the same parent path
---
# Release notes (daily-note updates from the help graph)
## April 1st, 2026
- dsagj da
- dsaj dag
- dashj dsag kjsda
- dsanj kdsah dsbaj k
- dabsj sdag jbksda
- dsaj khsag jdas
- gsda jkh dsjkdsa
- h ajsdg dsa
- dsanj kdsah
- j kdas
## March 24th, 2026
-
## March 15th, 2026
- test [[March 15th, 2026]]
## January 22nd, 2026
- 19:13 - 20:57
- 20:57 -
## January 2nd, 2026
-
## June 21st, 2025
- [[Quality of Life Improvements]]
- Fix selecting blocks with the mouse when the blocks are aligned horizontally, such as with the horizontal [[block view]] or with css
- Auto scroll the page when selecting blocks with the mouse
## May 24th, 2025
-
## March 7th, 2025
-
- {{[[query]]: "Query bug fixes" {and: [[Query]] [[Bug Fixes]]}}}
-
## February 27th, 2025
-
-
## February 20th, 2025
-
## January 8th, 2025
-
## November 26th, 2024
- [[test mobile long press]]
## June 17th, 2024
-
## June 14th, 2024
-
## June 11th, 2024
-
## September 19th, 2023
- [[Change Log]]
## May 9th, 2023
-
## March 3rd, 2023
-
## February 10th, 2023
- [[Project: 30 Demos in 6 Weeks]]
- {{[[DONE]]}} [[Experiment]] - Demo how it was possible to use the combination of [[roam/render]] and [[roam/templates]] to create a **factory template** the creates customizable dropdowns which add block-refs to a selected item from a particular list.
- Video
- {{[[video]]: https://www.loom.com/share/1adf78d01db9435fb69bf4249a296a66}}
- To use
- {{[[TODO]]}} copy this block into your graph #.bp3-card
- **Conor's [[Factory Template]] for creating Option Dropdowns based on block refences #[[roam/templates]]**
- Congratulations! You have just created a new **Dropdown Template**
- #.rm-g #.rm-h
- {{[[TODO]]}} Edit the block below to change the template
- [[RM/Component/Select]] an item from Dropdown List [[roam/templates]]
- {{[[roam/render]]: ```clojure
(ns niki.dropdown
(:require
[clojure.string :as str]
[roam.block :as block]
[roam.datascript.reactive :as dr]))
(defn replace-with-block-ref [block-uid opts-uid ref-uid]
(let [before (->> [:block/uid block-uid]
(dr/pull [:block/string])
(deref)
:block/string)
pattern (re-pattern
(str
"\\{\\{"
"(?:\\[\\[)?roam/render(?:\\]\\])?:" ;; [[roam/render]]
"\\s*"
"\\(\\(([a-zA-Z0-9-]+)\\)\\)" ;; render code block
"\\s*"
"\\(\\((" opts-uid ")\\)\\)" ;; options block
"\\s*"
"(\\(\\(([a-zA-Z0-9-]+)\\)\\))?" ;; selected block
"\\}\\}"))
after (str/replace before pattern
(str "{{[[roam/render]]: (($1)) (($2)) ((" ref-uid "))}}"))]
(block/update
{:block
{:uid block-uid
:string after}})))
(defn view-children-clickable [block-uid opts-uid selected-uid]
(let [children (->> [:block/uid opts-uid]
(dr/pull [{:block/children [:block/uid :block/string]}])
deref
:block/children)]
[:select {:id opts-uid
:on-change #(replace-with-block-ref block-uid opts-uid (-> % .-target .-value))}
(for [c children]
[:option
{:value (:block/uid c)
:selected (= (:block/uid c) selected-uid)
:on-change #(replace-with-block-ref (:block/string c))}
(:block/string c)])]))
(defn main [{:keys [block-uid]} [_ opts-uid] & [[_ selected-uid]]]
[view-children-clickable block-uid opts-uid selected-uid])``` Dropdown List}}
- {{[[TODO]]}} Edit these blocks to change the items visible in the dropdown
- Dropdown List
- A
- B
- C
- {{[[TODO]]}} Apply the template #.rm-E
- {{[[TODO]]}} type `;;`
- {{[[TODO]]}} search for the label you've given it here ->
- This will produce a custom Select Component like this one
- {{[[roam/render]]: ```clojure
(ns niki.dropdown
(:require
[clojure.string :as str]
[roam.block :as block]
[roam.datascript.reactive :as dr]))
(defn replace-with-block-ref [block-uid opts-uid ref-uid]
(let [before (->> [:block/uid block-uid]
(dr/pull [:block/string])
(deref)
:block/string)
pattern (re-pattern
(str
"\\{\\{"
"(?:\\[\\[)?roam/render(?:\\]\\])?:" ;; [[roam/render]]
"\\s*"
"\\(\\(([a-zA-Z0-9-]+)\\)\\)" ;; render code block
"\\s*"
"\\(\\((" opts-uid ")\\)\\)" ;; options block
"\\s*"
"(\\(\\(([a-zA-Z0-9-]+)\\)\\))?" ;; selected block
"\\}\\}"))
after (str/replace before pattern
(str "{{[[roam/render]]: (($1)) (($2)) ((" ref-uid "))}}"))]
(block/update
{:block
{:uid block-uid
:string after}})))
(defn view-children-clickable [block-uid opts-uid selected-uid]
(let [children (->> [:block/uid opts-uid]
(dr/pull [{:block/children [:block/uid :block/string]}])
deref
:block/children)]
[:select {:id opts-uid
:on-change #(replace-with-block-ref block-uid opts-uid (-> % .-target .-value))}
(for [c children]
[:option
{:value (:block/uid c)
:selected (= (:block/uid c) selected-uid)
:on-change #(replace-with-block-ref (:block/string c))}
(:block/string c)])]))
(defn main [{:keys [block-uid]} [_ opts-uid] & [[_ selected-uid]]]
[view-children-clickable block-uid opts-uid selected-uid])``` Dropdown List}}
- built off this Dropdown List
- This component is an experiment, and was built paritally as a demo of what you can do with [[roam/render]] - a feature of roam that allows you to build interactive components out of code blocks written __inside__ your roam graph and referenced by the component in this format `{{[[roam/render]]: ((id for the code block goes here)) }}`
- If you'd like to edit the code for the template - you can edit it here
- ```clojure
(ns niki.dropdown
(:require
[clojure.string :as str]
[roam.block :as block]
[roam.datascript.reactive :as dr]))
(defn replace-with-block-ref [block-uid opts-uid ref-uid]
(let [before (->> [:block/uid block-uid]
(dr/pull [:block/string])
(deref)
:block/string)
pattern (re-pattern
(str
"\\{\\{"
"(?:\\[\\[)?roam/render(?:\\]\\])?:" ;; [[roam/render]]
"\\s*"
"\\(\\(([a-zA-Z0-9-]+)\\)\\)" ;; render code block
"\\s*"
"\\(\\((" opts-uid ")\\)\\)" ;; options block
"\\s*"
"(\\(\\(([a-zA-Z0-9-]+)\\)\\))?" ;; selected block
"\\}\\}"))
after (str/replace before pattern
(str "{{[[roam/render]]: (($1)) (($2)) ((" ref-uid "))}}"))]
(block/update
{:block
{:uid block-uid
:string after}})))
(defn view-children-clickable [block-uid opts-uid selected-uid]
(let [children (->> [:block/uid opts-uid]
(dr/pull [{:block/children [:block/uid :block/string]}])
deref
:block/children)]
[:select {:id opts-uid
:on-change #(replace-with-block-ref block-uid opts-uid (-> % .-target .-value))}
(for [c children]
[:option
{:value (:block/uid c)
:selected (= (:block/uid c) selected-uid)
:on-change #(replace-with-block-ref (:block/string c))}
(:block/string c)])]))
(defn main [{:keys [block-uid]} [_ opts-uid] & [[_ selected-uid]]]
[view-children-clickable block-uid opts-uid selected-uid])```
## August 15th, 2022
- {{embed-path: [[August 15th, 2022]]}}
## June 13th, 2022
-
## May 13th, 2022
-
## February 3rd, 2022
-
## January 24th, 2022
-
## October 29th, 2021
- {{[[query]]: {and: [[ex-A]] [[ex-B]]}}}
## October 7th, 2021
- [[October 7th, 2021]]
- [[Quality of Life Improvements]]
- Fix [[autocomplete]] appearing offscreen in [[embed]]s, the [[Right Sidebar]] and [[mobile]]
- [[embed]]
- **before**
- Autocomplete gets "trapped" inside of the embed
- 
- and scrolls the embed, which sometimes leads to the embed getting stuck
- 
- **after**
- 
- [[Right Sidebar]]
- **before**
- 
- also sometimes led to a similar issue as with embeds, where the sidebar got stuck offscreen
- **after**
- 
- [[mobile]]
- **before**
- Autocomplete causes the whole screen to scroll to the right
- 
- **after**
- Autocomplete adjusts to fit the size of the screen
- 
## October 1st, 2021
-
## September 28th, 2021
- [[September 28th, 2021]]
- **[[Quality of Life Improvements]] ✨**
- All settings, including keyboard shortcut customizations accessible from [[Command Palette]]
- `cmd-p` on [[Mac]]
- `control-p` on [[Windows]] or [[Linux]]
- __handy way to discover or remember different keyboard shortcuts__
- Example::
- 
## September 27th, 2021
-
- [[Quality of Life Improvements]] ✨
- Added a shortcut (`Cmd/Ctrl+Opt+R`) to toggle [[Youtube]] [[Videos]] playback while typing in a block
- Made [[Video Timestamps]] look a little nicer
- [[Bug Fixes]] 🛠
- Fixed bug that caused Roam to crash when [[Query]] using `between` contained only one date
## September 21st, 2021
- [[September 21st, 2021]]
- [[Customization]] #[[End User Programming]] #[[Quality of Life Improvements]]
- Custom components in [[JSX]] and [[Javascript]]
- {{[[video]]: https://grain.co/highlight/NkzVPjnoX3P8gavWAVq9g00DiABYGCE1gWZIU63J}}
- [[Example]]
- {{[[video]]: https://grain.co/highlight/2xiEAKKj5It1deDSFzbwWMbm3JXLwqt0OdtzmQ53}}
## September 18th, 2021
- [[September 18th, 2021]]
- [[Customization]] [[Improvements]]
- Styling changes applied to blocks via `#.style-tags-like-this` now propogate to references of those blocks red #.bg-red-500 #.text-white , white and blue #.bg-blue-500 #.text-white
- white
- blue #.bg-blue-500 #.text-white
- red #.bg-red-500 #.text-white
- Propogates many levels up too -- see ((Styling changes applied to blocks via `#.style-tags-like-this` now propogate to references of those blocks red #.bg-red-500 #.text-white , white and blue #.bg-blue-500 #.text-white ))
## June 11th, 2021
-
## June 1st, 2021
-
## May 30th, 2021
-
## May 25th, 2021
-
## May 10th, 2021
-
## April 22nd, 2021
-
## April 20th, 2021
-
## April 17th, 2021
-
## April 16th, 2021
-
## April 11th, 2021
-
-
## April 8th, 2021
-
## April 3rd, 2021
- Good morning! Today's a great day to test out the mobile interface! :)
- Indenting is cool. But I don't foresee anyone
- Ever moving their stuff using these icons. But I might. Be wrong. The thing is that the menu bar thing doesn't scroll properly, which makes everything clunky.
- Some low hanging fruits would be, to replace drawing with TODOs and add one more icon in there, probably for [[Bidirectional linking]]
## April 2nd, 2021
-
## April 1st, 2021
-
## March 31st, 2021
-
## March 27th, 2021
- Import
- [[February 8th, 2021]]
- From: February 8th, 2021.json
## March 26th, 2021
-
## March 25th, 2021
- https://twitter.com/Conaw/status/1375280053882253313?s=20
- https://twitter.com/Conaw/status/1375287978482835468?s=20
- [[Essay]] - [[Why you can't say]] [[Kevin Lacker]]
- Response to:: [[Essay]] [[What You Can't Say]] [[Paul Graham]]
- [[Tangent]]
- See {{iframe:https://en.m.wikipedia.org/wiki/Social_constructionism}}
and the idea of [[Roam Browser]] [[Electron App]]
- When you visit the page - you could have an easy indicator -- like highlighting things from the page - (to pull into your Roam -- or spending a certain amount of time on it -- or a [[30ms Gesture]] like a moving the mouse in a pattern, or hitting a super easy keyboard shortcut -- and have the page be sent to [[ArWeave]] or [[Internet Archive]])
- {{[[TODO]]}} Learn more about [[ArWeave]] -- catchup with [[Mek]] and [[Gerben]] and see what the current state of [[Web Archival]] is
- it's been a few years -- but linkrot is huge problem - and one we should have easy answer for -- also could have options for global registries of these (or ipfs content hash the contnets (though content hash maybe maybe maybe has security concerns (probably moot if we have e2ee and you can choose what archival services you use...)))
## March 24th, 2021
-
## March 14th, 2021
-
## March 13th, 2021
-
## March 6th, 2021
-
## March 5th, 2021
-
## March 4th, 2021
-
## March 3rd, 2021
-
## February 8th, 2021
-
- [[Hiring]] [[Work at Roam]] [[Clojure Engineer]] - [[Backend Role]] [[Take Home Project]]
- {{[[TODO]]}} Given a map, or a [datascript](https://github.com/tonsky/datascript) database at two points in time
- {{[[TODO]]}} Generate a diff of the two structures
- {{[[TODO]]}} Generate the minimal transaction which will bring A -> B, and vice versa.
- #Bonus
- {{[[TODO]]}} Given a set of User-Events which map to certain transactions - find the sequence of user events which brought A -> B, or which would bring B -> A
- {{[[TODO]]}} Take a roam outline tree, and create a datascript DB with just the data contained within it - such as this one This item
- {{[[TODO]]}} Publish your code and the demo on a roam graph using `roam/render` and custom components
- Roam allows you to write arbitrary CLJS code - and evaluate it in your graph - you can use this code - and the roam Alpha API to query your graph, and create mutations for it.
- Submit your answer as a roam-graph
- All code should be in the same Roam Graph as the working demo.
- {{[[roam/render]]: ```clojure
(ns starting-point-for-custom-roam
(:require
[reagent.core :as r]
[datascript.core :as d]
[roam.datascript.reactive :as dr]))
(defn x [{b :block-uid} x]
[:div.bp3-card
[:ul
[:li (pr-str @(dr/pull '[:block/string {:block/children ...}
:block/uid
] x))]
[:li [:h3"Schema" ]
(pr-str @(dr/q
'[:find [?a ...]
:where [_ ?a _]]))]
[:li (pr-str (keys @(dr/pull '[*] [:block/uid b])))]]]
)``` This item}}
- ```clojure
(ns starting-point-for-custom-roam
(:require
[reagent.core :as r]
[datascript.core :as d]
[roam.datascript.reactive :as dr]))
(defn x [{b :block-uid} x]
[:div.bp3-card
[:ul
[:li (pr-str @(dr/pull '[:block/string {:block/children ...}
:block/uid
] x))]
[:li [:h3"Schema" ]
(pr-str @(dr/q
'[:find [?a ...]
:where [_ ?a _]]))]
[:li (pr-str (keys @(dr/pull '[*] [:block/uid b])))]]]
)```
- This item
- Has children
- Abcd
- B
- C
- **IF you want to also be considered for #[[UI Engineer]]**
- {{[[TODO]]}} generate a UI for displaying the diff
- {{[[TODO]]}} create a simple component that will let you save the state of a block subtree at various points, and return to these states - by firing new transactions
- Import
- [[December 1st, 2020]]
- From: December 1st, 2020.json
## February 1st, 2021
- {{[[TODO]]}} Have a [[meeting]] with [[John Smith]] about [[Roam Research]] on [[February 8th, 2021]]. #marketing
## January 1st, 2020
-