# Keyboard shortcuts
Orbit assumes you would rather not use the mouse. Press ? anywhere to
see the shortcuts that apply to what you are currently looking at.
Every shortcut on this page is read from the registry in the running app, so if
one here disagrees with what ? shows you, trust ? and
please [file a docs issue](https://github.com/Noveum/orbit/issues/new?template=documentation.yml).
## The two you actually need
| Keys | Does |
| --- | --- |
| Cmd K | Command palette. Search issues, run any command, jump anywhere |
| ? | Show the shortcuts that apply right now |
The palette is the fastest route to most things. Type an issue identifier like
`ENG-42` to jump straight to it, or type what you want to do and run it.
On Windows and Linux, Ctrl stands in for Cmd everywhere.
## Navigation
Press g, release it, then press the second key.
| Keys | Goes to |
| --- | --- |
| g i | Inbox |
| g m | My issues |
| g r | Pull requests |
| g p | Projects |
| g t | Sprints |
| g s | Standup |
| g v | Views |
| g a | Analytics |
| g d | Docs |
| g e | Settings |
## Settings
On any settings page, move through the sidebar with the keyboard.
| Keys | Does |
| --- | --- |
| j or Down | Next section |
| k or Up | Previous section |
| Enter | Open the focused section (native link activation) |
Account sections come first, then workspace sections, in the same order as the sidebar.
## Issues
These work on the issue list and the board, acting on whatever is selected.
### Moving around
| Keys | Does |
| --- | --- |
| j or Down | Next issue |
| k or Up | Previous issue |
| Enter | Open the issue |
| Space | Peek at the issue without leaving the list |
| Esc | Close the peek, then clear the selection |
Esc does one thing at a time on purpose. The first press closes the
peek, the second clears the selection, so you never lose a selection you meant
to keep.
### Selecting
| Keys | Does |
| --- | --- |
| x | Select or deselect the current issue |
| Shift j or Shift Down | Extend the selection down |
| Shift k or Shift Up | Extend the selection up |
| Cmd A | Select every issue |
Selecting several issues and then pressing s, p,
a or l changes them all at once.
### Changing an issue
| Keys | Does |
| --- | --- |
| c | Create a new issue |
| s | Change status |
| p | Change priority |
| a | Assign |
| l | Change labels |
| i | Change project |
| m | Change milestone |
| Shift e | Change estimate |
Each opens a menu you then drive with the keyboard, so `a` then a few letters of
a name then Enter reassigns an issue without touching the mouse.
## Filters and views
| Keys | Does |
| --- | --- |
| f | Add a filter |
| Shift f | Remove the last filter condition |
| Alt Shift f | Clear every filter |
| Alt v | Save the current filter as a view |
| Esc | Close the filter editor |
## Inbox
| Keys | Does |
| --- | --- |
| j or Down | Next notification |
| k or Up | Previous notification |
| u | Toggle read and unread |
| h | Snooze for a day |
| Backspace | Delete the notification |
## Docs
| Keys | Does |
| --- | --- |
| c | New doc |
c only appears when you have permission to write docs, which
contributors and guests do not.
## View
| Keys | Does |
| --- | --- |
| Cmd B | Switch between board and list |
| [ | Toggle the left sidebar |
| ] | Toggle the right panel |
| Shift T | Switch between light and dark theme |
## How the shortcuts resolve
Worth knowing if a shortcut ever does something you did not expect.
Shortcuts are registered with a **scope**, meaning the surface they belong to,
and a **priority**. When more than one could match, Orbit picks in this order:
1. A longer sequence beats a shorter one, so g i wins over
a plain g.
2. A higher priority wins, so a surface-specific shortcut beats a global one.
3. Where those tie, the more specific one wins, meaning the one using
Shift.
This is why j moves through notifications in the inbox and through
issues on a board, without either surface having to know about the other.
Shortcuts do not fire while you are typing in a text field, unless they were
explicitly registered to. Esc and Cmd K still
work in an input, because you always need a way out.
## Standup member switching
| macOS | Windows / Linux | Action |
| --- | --- | --- |
| Option + Tab | Alt + J | Next member |
| Option + Shift + Tab | Alt + K | Previous member |
Member cards are shown by default with first names; hover a card for the full name. The dropdown shows full names to distinguish members with the same first name. Open **Display options** and choose **Cards** or **Dropdown** under the **Members** section to change the layout. Your choice is remembered for your account in this browser. Changing layouts keeps the selected member and board filters.
The shortcuts work in both layouts and immediately filter the board. Switching wraps through All Members, the team members, and Unassigned when available. In dropdown mode, hold Option or Alt to keep the picker open and release it to close; cards remain visible in card mode. Hover the member group or dropdown button for your platform's shortcuts. Alt+Tab is left to the window switcher on Windows/Linux.
## Adding one
Shortcuts are registered with the `useHotkey` hook, and being in the registry is
what makes a shortcut appear in the ? dialog. There is no separate
list to update:
```ts
useHotkey('shift+z', duplicateIssue, {
label: 'Duplicate issue',
section: 'Issues',
scope: 'issues',
});
```
Set `advertised: false` for something that should work but not be listed. See
`apps/web/src/lib/keyboard/` and [CONTRIBUTING.md](https://github.com/Noveum/orbit/blob/main/CONTRIBUTING.md).