VS Code

Org2's most complete editor integration today is VS Code.

Install instructions

The extension currently lives in this repository at editors/vscode-org2/.

  1. Build Org2 CLI and repository artifacts:

git clone https://github.com/aviaviavi/org2.git
cd org2
npm ci
npm run build
  1. Install extension dependencies:

cd editors/vscode-org2
npm ci
  1. Install/run the extension:

  • Use VS Code Extension Development Host from this folder, or

  • Package to VSIX and install via Install from VSIX....

  1. Ensure org2 CLI is available:

  • Repo-built fallback is supported, or

  • Provide org2 on your PATH.

For settings and command behavior details, see editors/vscode-org2/README.md and Tooling reference.

Keyboard shortcuts

This list is comprehensive for current default bindings declared in editors/vscode-org2/package.json.

Direct bindings

Linux/WindowsmacOSCommand IDAction
ctrl+alt+tctrl+alt+torg2.toggleTodoToggle TODO status
ctrl+alt+octrl+alt+oorg2.toggleFoldHereToggle fold at cursor
ctrl+alt+dctrl+alt+dorg2.debugFoldingRangesDebug folding ranges
jjcursorDownVisible-line down (with VSCodeVim + org2.vim.visibleLineNavigation=true)
kkcursorUpVisible-line up (with VSCodeVim + org2.vim.visibleLineNavigation=true)

Power keymap

When org2.keymap.power=true (default), prefix is:

  • Linux/Windows: ctrl+;

  • macOS: cmd+;

Then use the second key (or namespace chord).

Agenda

Linux/WindowsmacOSCommand IDAction
ctrl+; a ocmd+; a oorg2.openAgendaOpen agenda
ctrl+; a rcmd+; a rorg2.refreshAgendaRefresh agenda
ctrl+; a fcmd+; a forg2.pickAgendaFilterAgenda filter picker

Roam

Linux/WindowsmacOSCommand IDAction
ctrl+; r bcmd+; r borg2.openBacklinksOpen backlinks pane
ctrl+; r hcmd+; r horg2.roamShowBacklinksByIdShow backlinks for prompted link/ID
ctrl+; r lcmd+; r lorg2.roamCopyIdLinkCopy ID link for current heading/file
ctrl+; r ccmd+; r corg2.roamCopyIdLinkByIdCopy ID link for prompted target
ctrl+; r icmd+; r iorg2.roamInsertBacklinkInsert backlink
ctrl+; r ocmd+; r oorg2.roamOpenIdOpen ID link target
ctrl+; r pcmd+; r porg2.roamOpenBacklinkOpen backlink source (current heading/file)
ctrl+; r gcmd+; r gorg2.roamOpenBacklinkByIdOpen backlink source by prompt
ctrl+; r tcmd+; r torg2.roamDailiesGotoTodayDailies: today
ctrl+; r ycmd+; r yorg2.roamDailiesGotoYesterdayDailies: yesterday
ctrl+; r mcmd+; r morg2.roamDailiesGotoTomorrowDailies: tomorrow
ctrl+; r dcmd+; r dorg2.roamDailiesGotoDateDailies: pick date
ctrl+; r ncmd+; r norg2.roamNodeNewNew roam node (selected text becomes the default title)
ctrl+; r scmd+; r sorg2.roamDbSyncRoam DB sync

AI lifecycle

Linux/WindowsmacOSCommand IDAction
ctrl+; i vcmd+; i vorg2.aiReviewWorkspaceReview workspace / active file
ctrl+; i rcmd+; i rorg2.aiMarkReviewedMark draft reviewed
ctrl+; i xcmd+; i xorg2.aiMarkRejectedMark draft rejected
ctrl+; i dcmd+; i dorg2.aiMarkDeferredMark draft deferred

TODO status

Linux/WindowsmacOSCommand IDAction
ctrl+; t tcmd+; t torg2.setTodoStatusSet TODO (args: todo)
ctrl+; t icmd+; t iorg2.setTodoStatusSet IN_PROGRESS (args: in_progress)
ctrl+; t dcmd+; t dorg2.setTodoStatusSet DONE (args: done)
ctrl+; t ccmd+; t corg2.setTodoStatusSet CANCELED (args: canceled)

Planning, archive, capture, export, folding

Linux/WindowsmacOSCommand IDAction
ctrl+; scmd+; sorg2.setScheduledSet SCHEDULED (prompt date)
ctrl+; s tcmd+; s torg2.setScheduledTodaySet SCHEDULED to today
ctrl+; dcmd+; dorg2.setDeadlineSet DEADLINE (prompt date)
ctrl+; d tcmd+; d torg2.setDeadlineTodaySet DEADLINE to today
ctrl+; xcmd+; xorg2.archiveSubtreeArchive subtree
ctrl+; x rcmd+; x rorg2.refileSubtreeRefile subtree
ctrl+; h leftcmd+; h leftorg2.promoteSubtreePromote subtree
ctrl+; h rightcmd+; h rightorg2.demoteSubtreeDemote subtree
ctrl+; h upcmd+; h uporg2.moveSubtreeUpMove subtree up
ctrl+; h downcmd+; h downorg2.moveSubtreeDownMove subtree down
ctrl+; g acmd+; g aorg2.graphAuditWorkspaceGraph audit workspace
ctrl+; c qcmd+; c qorg2.captureQuickEntryQuick capture
ctrl+; p hcmd+; p horg2.exportCurrentFileHtmlExport current file HTML
ctrl+; p wcmd+; p worg2.exportWorkspaceHtmlExport workspace HTML
ctrl+; 1cmd+; 1editor.foldLevel1Fold level 1
ctrl+; 2cmd+; 2editor.foldLevel2Fold level 2
ctrl+; 3cmd+; 3editor.foldLevel3Fold level 3
ctrl+; 4cmd+; 4editor.foldLevel4Fold level 4

Commands without default keybindings

Available from command palette (Cmd/Ctrl+Shift+P):

  • org2.refreshBacklinks

  • org2.searchWorkspace

  • org2.queryWorkspace

  • org2.compileWorkspaceCorpus

  • org2.roamLinkifyPreview (shows exact replacements plus review-only semantic/alias represented-node suggestions)

  • org2.roamLinkifyApply (applies exact safe replacements only)

  • org2.roamGraph (includes linkify maintenance suggestions with source ranges)

  • org2.aiSuggestLinks (writes a review-only AI-assisted link/entity suggestion report; canonical notes are not edited)

  • org2.formatWorkspaceCheck

  • org2.formatWorkspaceApply

  • org2.formatCurrentFileCheck

  • org2.formatCurrentFilePreviewDiff

  • org2.formatCurrentFileApply

  • org2.pickAgendaStatusFilter

  • org2.openAgendaItem

  • org2.setTodoTODO

  • org2.setTodoInProgress

  • org2.setTodoDone

  • org2.setTodoCanceled

  • org2.setScheduledTomorrow

  • org2.setScheduledNextWeek

  • org2.setScheduledNextMonth

  • org2.cryptDecryptSubtree

  • org2.cryptEncryptSubtree

  • org2.cryptReencryptSubtree

Set org2.crypt.recipients to the default GPG recipients that should be able to open newly encrypted subtrees, such as your personal/device key plus an agent key. org2.crypt.recipientFiles can point at armored public-key files. VS Code passes those recipients through to the CLI for encrypt/re-encrypt, while decrypt can still use the unlocked matching private key.

For selective sharing, put recipients on the subtree itself instead of in global VS Code settings:

* Private note shared with an agent :crypt:
:PROPERTIES:
:CRYPT_RECIPIENT_FILE: keys/agent-public.asc
:END:
This body is encrypted to the listed recipient file when you run Org2: Encrypt Subtree.

:CRYPT_RECIPIENT: / :CRYPT_RECIPIENTS: accept GPG recipient identifiers. :CRYPT_RECIPIENT_FILE: / :CRYPT_RECIPIENT_FILES: accept armored public-key files. Relative file paths are resolved from the Org2 file containing the subtree, which keeps shared corpora portable across devices.

  • org2.refileSubtree

  • org2.roamOpenTitle

  • org2.roamShowBacklinks

  • org2.rerunAutoFold

  • org2.debugListLinks

  • org2.graphAuditWorkspace

  • org2.aiReviewWorkspace

  • org2.aiMarkReviewed

  • org2.aiMarkRejected

  • org2.aiMarkDeferred

  • org2.promoteSubtree

  • org2.demoteSubtree

  • org2.moveSubtreeUp

  • org2.moveSubtreeDown