Skriuw Documentation
Reference

Keyboard shortcuts

Skriuw's keyboard-first model across the desktop shell and web app, the shortcut registry, scoped handlers, and how bindings are re-assigned per device.

Skriuw is keyboard-first across both the Tauri desktop shell and the hosted Next.js web app. Most application-level shortcuts live in apps/web/src/core/shortcuts/registry.ts. Route-owned surfaces register their local handlers through useShortcutScope, while GlobalNotesShortcuts registers the cross-route fallbacks so core note commands still work from settings, graph, trash, shared views, and other app screens. The settings shortcut recorder stores overrides in local storage, validates duplicate bindings before saving, and synchronizes shared binding groups such as settings and command palette shortcuts, so any shortcut backed by SHORTCUT_REGISTRY is re-assignable on the current device.

There are two intentional escape hatches:

  • Package-backed registry shortcuts may still use useShortcutMap directly for narrow UI surfaces such as editor search, but their key combinations now resolve from SHORTCUT_REGISTRY so they remain re-assignable.
  • Raw keyboard listeners use keydown/onKeyDown directly for desktop shell behavior, widget navigation, tree commands, and focused-widget interactions where the shortcut should not participate in the global registry.

Audit scope: this page documents app shortcuts and focused-widget keyboard commands. The Vim plugin is intentionally excluded because it is a custom modal editing feature rather than an app shortcut layer. The example apps in apps/note-properties-example and apps/search-example are also intentionally excluded.

mod means Cmd on macOS and Ctrl on Windows/Linux.

Shortcuts not using @remcostoeten/use-shortcut

Function nameWhat does it do?Shortcut combinationPath + line
onKeyDownDesktop-only hard quit of the Tauri app.mod+shift+qapps/web/src/features/desktop/desktop-quit-shortcut.tsx:17
onKeyDownDesktop-only zoom in.mod+= / mod++apps/web/src/features/desktop/desktop-zoom.tsx:56
onKeyDownDesktop-only zoom out.mod+- / mod+_apps/web/src/features/desktop/desktop-zoom.tsx:56
onKeyDownDesktop-only reset zoom.mod+0apps/web/src/features/desktop/desktop-zoom.tsx:56
onKeyDownClose the welcome walkthrough.Escapeapps/web/src/features/onboarding/components/welcome-walkthrough.tsx:193
onKeyDownMove to the next welcome walkthrough step.ArrowRightapps/web/src/features/onboarding/components/welcome-walkthrough.tsx:193
onKeyDownMove to the previous welcome walkthrough step.ArrowLeftapps/web/src/features/onboarding/components/welcome-walkthrough.tsx:193
handleKeyDownCapture a new shortcut binding in settings.Any non-modifier key combo; Escape cancelsapps/web/src/features/settings/sections/shortcuts-section.tsx:65
handleKeyDownMove down in the BlockNote suggestion menu.ArrowDownapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleKeyDownMove up in the BlockNote suggestion menu.ArrowUpapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleKeyDownJump to the last BlockNote suggestion.PageDownapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleKeyDownJump to the first BlockNote suggestion.PageUpapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleKeyDownPick the active BlockNote suggestion.Enter / Tabapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleGlobalTabMove focus from the editor to the floating format toolbar.Tabapps/web/src/features/editor/components/rich-text-editor.tsx:1178
handleInputKeyDownCommand palette result navigation and execution.ArrowDown, ArrowUp, Enterapps/web/src/shared/ui/command-palette.tsx:126
handleFindKeyDownSearch result navigation and close in find widgets.Enter, shift+enter, Escapeapps/web/src/features/editor/components/search-widget.tsx:102
handleContextMenuKeyDownRename or delete notes from a file context menu.r, Delete, Backspace, dapps/web/src/features/notes/components/file-list.tsx:601
handleTreeItemKeyDownNavigate and operate the file tree.ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeft, r, Delete, Backspace, d, m, Enter, Spaceapps/web/src/features/notes/components/file-list.tsx:931
handleTreeItemKeyDownComplete or cancel file-tree move mode.Escape, ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeft, Enter, Space, mapps/web/src/features/notes/components/file-list.tsx:948
handleKeyDownJournal tag suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/features/journal/components/plain-text-editor.tsx:143
handleKeyDownEmail domain suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/app/(auth)/email-domain-autocomplete.tsx:130

All shortcuts

Function nameWhat does it do?Shortcut combinationPath + line
menu.profileOpen profile from the user menu.papps/web/src/core/shortcuts/registry.ts:35
menu.notesGo to notes from the user menu.napps/web/src/core/shortcuts/registry.ts:41
menu.journalGo to journal from the user menu.japps/web/src/core/shortcuts/registry.ts:47
menu.activityGo to activity from the user menu.aapps/web/src/core/shortcuts/registry.ts:53
menu.signOutSign out from the user menu.mod+deleteapps/web/src/core/shortcuts/registry.ts:59
app.commandPaletteOpen the global command palette outside notes/journal-owned palettes.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:66
app.settingsOpen settings from anywhere outside notes/journal-owned handlers.mod+commaapps/web/src/core/shortcuts/registry.ts:75
notes.commandPaletteOpen the notes command palette on notes routes.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:85
notes.newNoteCreate note.mod+napps/web/src/core/shortcuts/registry.ts:93
notes.newFolderCreate folder.mod+shift+napps/web/src/core/shortcuts/registry.ts:101
notes.toggleSidebarToggle notes sidebar.mod+shift+bapps/web/src/core/shortcuts/registry.ts:108
notes.toggleMetadataToggle note details.mod+shift+alt+bapps/web/src/core/shortcuts/registry.ts:116
notes.settingsOpen settings.mod+commaapps/web/src/core/shortcuts/registry.ts:124
notes.toggleEditorSwitch editor mode.ctrl+mapps/web/src/core/shortcuts/registry.ts:131
notes.focusFileTreeFocus the active note in the file tree.ctrl+eapps/web/src/core/shortcuts/registry.ts:137
notes.toggleSplitToggle split editor.mod+shift+eapps/web/src/core/shortcuts/registry.ts:146
notes.splitHorizontalSplit editor horizontally.ctrl+happs/web/src/core/shortcuts/registry.ts:154
notes.closeTabClose the focused tab.ctrl+wapps/web/src/core/shortcuts/registry.ts:162
notes.closeSplitClose split pane.ctrl+shift+wapps/web/src/core/shortcuts/registry.ts:172
notes.focusNextSplitPaneFocus next split pane.ctrl+backtickapps/web/src/core/shortcuts/registry.ts:180
notes.focusPreviousSplitPaneFocus previous split pane.ctrl+shift+backtickapps/web/src/core/shortcuts/registry.ts:188
notes.switchTab1Go to tab 1.ctrl+1apps/web/src/core/shortcuts/registry.ts:196
notes.switchTab2Go to tab 2.ctrl+2apps/web/src/core/shortcuts/registry.ts:205
notes.switchTab3Go to tab 3.ctrl+3apps/web/src/core/shortcuts/registry.ts:213
notes.switchTab4Go to tab 4.ctrl+4apps/web/src/core/shortcuts/registry.ts:221
notes.switchTab5Go to tab 5.ctrl+5apps/web/src/core/shortcuts/registry.ts:229
notes.switchTab6Go to tab 6.ctrl+6apps/web/src/core/shortcuts/registry.ts:237
notes.switchTab7Go to tab 7.ctrl+7apps/web/src/core/shortcuts/registry.ts:245
notes.switchTab8Go to tab 8.ctrl+8apps/web/src/core/shortcuts/registry.ts:253
notes.switchTab9Go to last tab.ctrl+9apps/web/src/core/shortcuts/registry.ts:261
notes.focusEditorFocus editor.slashapps/web/src/core/shortcuts/registry.ts:270
notes.focusSidebarSearchFocus sidebar search.ctrl+slashapps/web/src/core/shortcuts/registry.ts:278
notes.findInNoteOpen or close find in the rich text note editor.mod+fapps/web/src/core/shortcuts/registry.ts
notes.searchMatchCaseToggle match case in the editor find widget.alt+capps/web/src/core/shortcuts/registry.ts
notes.searchWholeWordToggle whole-word search in the editor find widget.alt+wapps/web/src/core/shortcuts/registry.ts
notes.searchRegexToggle regex search in the editor find widget.alt+rapps/web/src/core/shortcuts/registry.ts
notes.helpOpen notes shortcut help.shift+slashapps/web/src/core/shortcuts/registry.ts:286
journal.commandPaletteOpen the journal command palette.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:293
journal.toggleSidebarToggle journal sidebar.mod+slashapps/web/src/core/shortcuts/registry.ts:301
journal.settingsOpen settings from journal.mod+commaapps/web/src/core/shortcuts/registry.ts:307
journal.toggleEditorSwitch journal editor mode.mod+eapps/web/src/core/shortcuts/registry.ts:314
journal.focusEditorFocus journal editor.slashapps/web/src/core/shortcuts/registry.ts:320
journal.helpOpen journal shortcut help.shift+slashapps/web/src/core/shortcuts/registry.ts:328
settings.toggleFocusToggle settings sidebar/main-pane focus.slashapps/web/src/core/shortcuts/registry.ts
findInNoteOpen or close find in the rich text note editor.mod+fapps/web/src/features/editor/components/rich-text-editor.tsx:1942
matchCaseToggle match case in the editor find widget.alt+capps/web/src/features/editor/components/rich-text-editor.tsx:1959
wholeWordToggle whole-word search in the editor find widget.alt+wapps/web/src/features/editor/components/rich-text-editor.tsx:1967
regexToggle regex search in the editor find widget.alt+rapps/web/src/features/editor/components/rich-text-editor.tsx:1975
handleSlashFocusToggleToggle settings sidebar/main-pane focus.slashapps/web/src/features/settings/components/settings-page.tsx:233
onKeyDownDesktop-only hard quit of the Tauri app.mod+shift+qapps/web/src/features/desktop/desktop-quit-shortcut.tsx:17
onKeyDownDesktop-only zoom in/out/reset.mod++, mod+-, mod+0apps/web/src/features/desktop/desktop-zoom.tsx:56
onKeyDownWelcome walkthrough navigation.Escape, ArrowRight, ArrowLeftapps/web/src/features/onboarding/components/welcome-walkthrough.tsx:193
handleKeyDownBlockNote suggestion menu navigation and selection.ArrowDown, ArrowUp, PageDown, PageUp, Enter, Tabapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleInputKeyDownCommand palette result navigation and execution.ArrowDown, ArrowUp, Enterapps/web/src/shared/ui/command-palette.tsx:126
handleFindKeyDownSearch result navigation and close in find widgets.Enter, shift+enter, Escapeapps/web/src/features/editor/components/search-widget.tsx:102
handleContextMenuKeyDownRename or delete notes from a file context menu.r, Delete, Backspace, dapps/web/src/features/notes/components/file-list.tsx:601
handleTreeItemKeyDownNavigate the file tree.ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeftapps/web/src/features/notes/components/file-list.tsx:931
handleTreeItemKeyDownRename, delete, move, or open file-tree items.r, Delete, Backspace, d, m, Enter, Spaceapps/web/src/features/notes/components/file-list.tsx:931
handleTreeItemKeyDownComplete or cancel file-tree move mode.Escape, ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeft, Enter, Space, mapps/web/src/features/notes/components/file-list.tsx:948
handleKeyDownJournal tag suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/features/journal/components/plain-text-editor.tsx:143
handleKeyDownEmail domain suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/app/(auth)/email-domain-autocomplete.tsx:130
handleGlobalTabFocus floating editor toolbar.Tabapps/web/src/features/editor/components/rich-text-editor.tsx:1178

Re-assignable shortcuts

Every row below is backed by SHORTCUT_REGISTRY, is shown in the shortcuts settings UI, and can be rebound on the current device. When a default has multiple combos, a user override records one replacement combo for that shortcut id. Shortcuts in the same shared binding group, such as app/notes/journal settings or command palette shortcuts, are rebound and reset together.

Function nameWhat does it do?Shortcut combinationPath + line
menu.profileOpen profile from the user menu.papps/web/src/core/shortcuts/registry.ts:35
menu.notesGo to notes from the user menu.napps/web/src/core/shortcuts/registry.ts:41
menu.journalGo to journal from the user menu.japps/web/src/core/shortcuts/registry.ts:47
menu.activityGo to activity from the user menu.aapps/web/src/core/shortcuts/registry.ts:53
menu.signOutSign out from the user menu.mod+deleteapps/web/src/core/shortcuts/registry.ts:59
app.commandPaletteOpen the global command palette outside notes/journal-owned palettes.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:66
app.settingsOpen settings from anywhere outside notes/journal-owned handlers.mod+commaapps/web/src/core/shortcuts/registry.ts:75
notes.commandPaletteOpen the notes command palette on notes routes.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:85
notes.newNoteCreate note.mod+napps/web/src/core/shortcuts/registry.ts:93
notes.newFolderCreate folder.mod+shift+napps/web/src/core/shortcuts/registry.ts:101
notes.toggleSidebarToggle notes sidebar.mod+shift+bapps/web/src/core/shortcuts/registry.ts:108
notes.toggleMetadataToggle note details.mod+shift+alt+bapps/web/src/core/shortcuts/registry.ts:116
notes.settingsOpen settings.mod+commaapps/web/src/core/shortcuts/registry.ts:124
notes.toggleEditorSwitch editor mode.ctrl+mapps/web/src/core/shortcuts/registry.ts:131
notes.focusFileTreeFocus the active note in the file tree.ctrl+eapps/web/src/core/shortcuts/registry.ts:137
notes.toggleSplitToggle split editor.mod+shift+eapps/web/src/core/shortcuts/registry.ts:146
notes.splitHorizontalSplit editor horizontally.ctrl+happs/web/src/core/shortcuts/registry.ts:154
notes.closeTabClose the focused tab.ctrl+wapps/web/src/core/shortcuts/registry.ts:162
notes.closeSplitClose split pane.ctrl+shift+wapps/web/src/core/shortcuts/registry.ts:172
notes.focusNextSplitPaneFocus next split pane.ctrl+backtickapps/web/src/core/shortcuts/registry.ts:180
notes.focusPreviousSplitPaneFocus previous split pane.ctrl+shift+backtickapps/web/src/core/shortcuts/registry.ts:188
notes.switchTab1Go to tab 1.ctrl+1apps/web/src/core/shortcuts/registry.ts:196
notes.switchTab2Go to tab 2.ctrl+2apps/web/src/core/shortcuts/registry.ts:205
notes.switchTab3Go to tab 3.ctrl+3apps/web/src/core/shortcuts/registry.ts:213
notes.switchTab4Go to tab 4.ctrl+4apps/web/src/core/shortcuts/registry.ts:221
notes.switchTab5Go to tab 5.ctrl+5apps/web/src/core/shortcuts/registry.ts:229
notes.switchTab6Go to tab 6.ctrl+6apps/web/src/core/shortcuts/registry.ts:237
notes.switchTab7Go to tab 7.ctrl+7apps/web/src/core/shortcuts/registry.ts:245
notes.switchTab8Go to tab 8.ctrl+8apps/web/src/core/shortcuts/registry.ts:253
notes.switchTab9Go to last tab.ctrl+9apps/web/src/core/shortcuts/registry.ts:261
notes.focusEditorFocus editor.slashapps/web/src/core/shortcuts/registry.ts:270
notes.focusSidebarSearchFocus sidebar search.ctrl+slashapps/web/src/core/shortcuts/registry.ts:278
notes.findInNoteOpen or close find in the rich text note editor.mod+fapps/web/src/core/shortcuts/registry.ts
notes.searchMatchCaseToggle match case in the editor find widget.alt+capps/web/src/core/shortcuts/registry.ts
notes.searchWholeWordToggle whole-word search in the editor find widget.alt+wapps/web/src/core/shortcuts/registry.ts
notes.searchRegexToggle regex search in the editor find widget.alt+rapps/web/src/core/shortcuts/registry.ts
notes.helpOpen notes shortcut help.shift+slashapps/web/src/core/shortcuts/registry.ts:286
journal.commandPaletteOpen the journal command palette.mod+k / mod+shift+papps/web/src/core/shortcuts/registry.ts:293
journal.toggleSidebarToggle journal sidebar.mod+slashapps/web/src/core/shortcuts/registry.ts:301
journal.settingsOpen settings from journal.mod+commaapps/web/src/core/shortcuts/registry.ts:307
journal.toggleEditorSwitch journal editor mode.mod+eapps/web/src/core/shortcuts/registry.ts:314
journal.focusEditorFocus journal editor.slashapps/web/src/core/shortcuts/registry.ts:320
journal.helpOpen journal shortcut help.shift+slashapps/web/src/core/shortcuts/registry.ts:328
settings.toggleFocusToggle settings sidebar/main-pane focus.slashapps/web/src/core/shortcuts/registry.ts

Shortcuts missing configuration support

These shortcuts exist but are not in SHORTCUT_REGISTRY, so users cannot reassign them from the shortcuts settings page. Cross-route note fallbacks are excluded here because they reuse the registry ids and user bindings.

Function nameWhat does it do?Shortcut combinationPath + line
onKeyDownDesktop-only hard quit.mod+shift+qapps/web/src/features/desktop/desktop-quit-shortcut.tsx:17
onKeyDownDesktop-only zoom controls.mod++, mod+-, mod+0apps/web/src/features/desktop/desktop-zoom.tsx:56
onKeyDownWelcome walkthrough navigation.Escape, ArrowRight, ArrowLeftapps/web/src/features/onboarding/components/welcome-walkthrough.tsx:193
handleKeyDownBlockNote suggestion menu navigation and selection.ArrowDown, ArrowUp, PageDown, PageUp, Enter, Tabapps/web/src/features/editor/components/rich-text-editor.tsx:307
handleInputKeyDownCommand palette result navigation and execution.ArrowDown, ArrowUp, Enterapps/web/src/shared/ui/command-palette.tsx:126
handleFindKeyDownSearch result navigation and close in find widgets.Enter, shift+enter, Escapeapps/web/src/features/editor/components/search-widget.tsx:102
handleContextMenuKeyDownRename or delete notes from a file context menu.r, Delete, Backspace, dapps/web/src/features/notes/components/file-list.tsx:601
handleTreeItemKeyDownFile tree navigation and item commands.ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeft, r, Delete, Backspace, d, m, Enter, Spaceapps/web/src/features/notes/components/file-list.tsx:931
handleTreeItemKeyDownComplete or cancel file-tree move mode.Escape, ArrowDown, ArrowUp, Home, End, ArrowRight, ArrowLeft, Enter, Space, mapps/web/src/features/notes/components/file-list.tsx:948
handleKeyDownJournal tag suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/features/journal/components/plain-text-editor.tsx:143
handleKeyDownEmail domain suggestion navigation and insertion.ArrowDown, ArrowUp, Enter, Tab, Escapeapps/web/src/app/(auth)/email-domain-autocomplete.tsx:130
handleGlobalTabFocus floating editor toolbar.Tabapps/web/src/features/editor/components/rich-text-editor.tsx:1178

Desktop versus web discrepancies

AreaDesktop behaviorWeb behaviorNotes
Quit appmod+shift+q invokes the Tauri quit_app command.Not registered because the Tauri command is absent.Desktop-only raw listener in DesktopQuitShortcut.
Zoommod++, mod+-, mod+0, and mod+wheel apply persisted webview zoom.Not registered. Browser zoom remains native.Desktop-only raw listener in DesktopZoom.
Tauri menu acceleratorsRust intentionally omits edit/view accelerators that the frontend owns.Not applicable.Prevents duplicate handling; frontend owns app shortcuts through useShortcut.
Registry shortcutsSame React codepath when the desktop shell renders apps/web.Same React codepath in the cloud app.Route-owned handlers and GlobalNotesShortcuts both resolve user bindings from SHORTCUT_REGISTRY; the global note fallback also allows note/folder creation from journal and non-notes routes.

On this page