Keyboard shortcuts
Keep your hands on the keyboard while you build: add a widget, group a few, run your app or undo a mistake without reaching for the mouse. This page lists the editor's shortcuts, grouped by where you use them. You don't need to learn them all at once. Start with these five:
- Ctrl/Cmd + K opens the Library so you can add a widget.
- Ctrl/Cmd + Z undoes your last change.
- Ctrl/Cmd + G groups the selected widgets.
- Ctrl/Cmd + P runs your app in the Embedded preview.
- Ctrl/Cmd + . shows the Shortcuts sheet, in case you forget the rest.
Most shortcuts use Ctrl on Windows and Linux and Cmd on macOS, so the tables below list both. On a Mac, tooltips and menus show Control as ⌃, Option as ⌥, Shift as ⇧ and Cmd as ⌘, always in that order, as in ⇧⌘Z or ⌥⌘]. On Windows and Linux they show Ctrl, Alt and ⇧ in the same order. You can't change the shortcuts.
Hover a board tool, or open a right-click menu, to see its shortcut next to the name.
Open the Shortcuts sheet
The editor has a built-in cheat sheet with common shortcuts, handy while you're still learning them.
- Click the keyboard icon (Shortcuts) at the bottom of the left sidebar, or press Ctrl + . (Cmd + . on macOS). The sheet opens over the editor.
- Close it with the same keys, the close button, Esc or a click outside the sheet.
The sheet shows its shortcuts in four groups, General, Tab Actions, Widgets and Designer, and leaves out many that are on this page. Tab Actions holds Back, Forward and Boards. Designer holds Add a widget and Go to a widget. Widgets holds Bring forward, Send backward, Bring to front and Send to back.
Two entries don't match what the keys really do:
| Sheet entry | The sheet shows | What happens |
|---|---|---|
| Show/Hide panels | Ctrl/Cmd + \ | Not bound to anything. To open or close a sidebar panel, use Ctrl/Cmd and a number, as in Sidebar panels. |
| Group/Ungroup | Ctrl/Cmd + G | It only groups. To ungroup, right-click the group and choose Ungroup. |
General
These work across the project editor. Some act on the area you're in.
| Action | Windows / Linux | macOS |
|---|---|---|
| Save (shows Saved!) | Ctrl + S | Cmd + S |
| Undo | Ctrl + Z | Cmd + Z |
| Redo | Ctrl + Shift + Z or Ctrl + Y | Cmd + Shift + Z or Cmd + Y |
| Open Action History | Ctrl + Shift + H | Cmd + Shift + H |
| Copy the selected widgets | Ctrl + C | Cmd + C |
| Cut the selected widgets | Ctrl + X | Cmd + X |
| Paste widgets you copied, or an image or text from another app | Ctrl + V | Cmd + V |
| Remove the selection, such as widgets and board items on the board, files in Files (code mode), or routes in Router | Delete | Backspace (⌫) |
| Go to a widget: in the designer, open the Library with its search ready (the field reads Go to...). In code mode, open Search for a file | Ctrl + O | Cmd + O |
| Open Settings | Ctrl + , | Cmd + , |
| Show or hide the Shortcuts sheet | Ctrl + . | Cmd + . |
| Open the Boards list with its search ready (not in code mode or the Run view) | Ctrl + B | Cmd + B |
| Back: go back to the editor you were in before, like a browser's back button | Ctrl + - | Control + - |
| Forward: go forward again | Ctrl + Shift + - | Control + Shift + - |
The Library has no Delete key: right-click a row and choose Delete. Back and Forward step through the editors you opened and keep your last 50 places. The Back and Forward arrows in the top bar do the same and grey out when there's nowhere to go. They're hidden in code mode and in the Run view, where the keys still work.
Undo and Redo work on the area you're in, and each area keeps its own history: every board or open screen, the Library, Files (code mode), Themes, Api, the Router editor and Circuit. So undoing in Circuit doesn't touch your design on the board. Action History lists the changes of that area. Click an entry to undo it and every change after it.
Sidebar panels
Press Ctrl (Cmd on macOS) and a number to open a panel. Press the keys again to close it.
| Panel | Windows / Linux | macOS |
|---|---|---|
| Assistant | Ctrl + 1 | Cmd + 1 |
| Library (Files in code mode) | Ctrl + 2 | Cmd + 2 |
| Themes | Ctrl + 3 | Cmd + 3 |
| Search | Ctrl + 4 or Ctrl + Shift + F | Cmd + 4 or Cmd + Shift + F |
| Git | Ctrl + 5 | Cmd + 5 |
| Outline | Ctrl + 6 | Cmd + 6 |
| Api | Ctrl + 7 | Cmd + 7 |
| Supabase | Ctrl + 8 | Cmd + 8 |
Router has no shortcut. In the playground, and in a public project you open as a guest, there's no Git panel, so the panels after Search move up one number.
Design on the board
These work on a board, on a screen or component opened on its own, and in the Outline panel. See Select, move and resize and Add widgets for what they do.
| Action | Windows / Linux | macOS |
|---|---|---|
| Add a widget: open the Library with its search ready (the field reads Add...). The shortcut does nothing while the Library has the focus: click the board first. Enter inserts the highlighted result | Ctrl + K | Cmd + K |
| Switch to the Select tool | V | V |
| Switch to the Shape tool (draws a Container) | R | R |
| Switch to the Text tool | T | T |
| Select all: the selected widget and its siblings, or every board item when nothing or a board item is selected | Ctrl + A | Cmd + A |
| Zoom the board to the selection | F | F |
| Group the selected widgets | Ctrl + G | Cmd + G |
| Bring forward: move the selected widget one step later in its parent | Ctrl + ] | Cmd + ] |
| Send backward: move it one step earlier | Ctrl + [ | Cmd + [ |
| Bring to front: move it to the last place | Alt + Ctrl + ] | Option + Cmd + ] |
| Send to back: move it to the first place | Alt + Ctrl + [ | Option + Cmd + [ |
| Nudge a widget you place freely (in a Stack, where widgets sit on top of each other, or loose on the board) by 1 px | ← ↑ → ↓ | ← ↑ → ↓ |
| Nudge by 10 px | Shift + an arrow key | Shift + an arrow key |
| Move a widget one place inside a Row (← →) or a Column (↑ ↓) | an arrow key | an arrow key |
| Open the screen or component that holds the selection on its own | Ctrl + I | Cmd + I |
| Create a board (opens New Board) | Ctrl + Shift + B | Cmd + Shift + B |
| Finish editing text on the board | Esc | Esc |
In a Stack, later widgets are drawn in front, so ] brings a widget forward and [ sends it back. To ungroup, right-click the group and choose Ungroup.
Mouse and trackpad
| Action | Windows / Linux | macOS |
|---|---|---|
| Pan the board | Scroll, or slide two fingers on a trackpad | Scroll, or slide two fingers on a trackpad |
| Pan sideways | Shift + scroll | Shift + scroll |
| Pan by dragging | Hold Space and drag, or drag with the middle mouse button | Hold Space and drag, or drag with the middle mouse button |
| Zoom toward the pointer | Ctrl + scroll, or pinch on a trackpad | Cmd + scroll, or pinch on a trackpad |
| Select several items | Drag a box on an empty part of the board | Drag a box on an empty part of the board |
| Add to the selection (board, Outline, screen and component titles) | Shift + click | Shift + click |
| Select a range in Files (code mode) | Shift + click | Shift + click |
| Add or remove one item in Files (code mode) | Ctrl + click | Cmd + click |
| Select the innermost widget under the pointer | Ctrl + click | Cmd + click |
| Select the widget inside the selected one, or edit a Text widget's text | Double-click | Double-click |
| Zoom the board to a widget | Double-click it in Outline | Double-click it in Outline |
| Rename a screen or component | Double-click its title, type, press Enter | Double-click its title, type, press Enter |
| Move along one axis only | Hold Shift while dragging | Hold Shift while dragging |
| Drag a copy of the selection | Hold Alt while dragging | Hold Option while dragging |
| Keep the proportions while resizing, or while drawing with Shape or Text | Hold Shift | Hold Shift |
| Resize or draw from the center | Hold Alt | Hold Option |
| Close a tab in code mode | Middle-click the tab | Middle-click the tab |
Snapping is off while you hold Shift or Alt/Option to resize. For more on panning and zooming, see Work with boards.
Run your app
| Action | Windows / Linux | macOS |
|---|---|---|
| Run your app in the Embedded preview (from a board or an open screen or component) | Ctrl + P | Cmd + P |
| Restart the app while the Embedded preview is open | Shift + R | Shift + R |
| Show the app fullscreen while the Embedded preview is open | Ctrl + F | Cmd + F |
The restart key does what the restart button in the top bar does: it puts your latest saved changes into the running app. In a local project that's Hot Reload, which updates the app in place. In a cloud project it's Hot Restart, which starts the app again. Instant Play has no shortcut: hover a screen's title and click Play. See Run your app and Play your app on the board.
Chat with Nowa AI
These work in the chat field of the AI Assistant panel. See Chat with Nowa AI and Give Nowa AI context.
| Action | Windows / Linux | macOS |
|---|---|---|
| Send your message | Enter | Return |
| Add a new line | Shift + Enter or Ctrl + Enter | Shift + Return or Cmd + Return |
| Delete the previous word | Alt + Backspace | Option + Backspace (⌫) |
| Paste text or an image | Ctrl + V | Cmd + V |
| Mention a screen, component or class | Type @, pick with ↑ ↓ and Enter | Type @, pick with ↑ ↓ and Return |
| Close the mention list | Esc | Esc |
Pickers
Pickers are search lists with a field at the top, such as Search for a file (code mode), the widget picker dialog, the template picker and Add context in the AI chat. Type to filter the list, then use these keys.
| Action | Windows / Linux | macOS |
|---|---|---|
| Move through the results | ↑ ↓ | ↑ ↓ |
| Choose the highlighted result | Enter | Return |
| Go back one step (when the search field is empty and the footer shows to cancel selected action) | Backspace | Backspace (⌫) |
| Close the picker | Esc | Esc |
Library search
The search at the top of the Library works like a picker, with a few extras.
| Action | Windows / Linux | macOS |
|---|---|---|
| Move down through the results. While you type, the first result is already highlighted, so the first press goes to the second | ↓ | ↓ |
| Go back to the search from the first result. The first press stops on its group heading, and the next one reaches the search | ↑ | ↑ |
| Act on the highlighted result: open it when the field reads Go to..., insert it when it reads Add... | Enter | Return |
| Do the other one: insert it when the field reads Go to..., open it when it reads Add... | Ctrl + Enter | Cmd + Return |
| Clear the search. On an empty search, give the keys back to the board so shortcuts work again | Esc | Esc |
| Jump from a row into the search. The letter you type stays selected, so the next one replaces it | Type a letter, digit or symbol | Type a letter, digit or symbol |
| Rename the row you're on | F2 | F2 |
| Put the details card away | Esc | Esc |
Circuit
These work in the Circuit logic editor, where each step of your logic is a node.
| Action | Windows / Linux | macOS |
|---|---|---|
| Select the previous or next node | ↑ ↓ | ↑ ↓ |
| Move the selected node up or down | Shift + ↑ or ↓ | Shift + ↑ or ↓ |
| Remove the selected node | Backspace (Delete works too) | Backspace (⌫) |
| Undo | Ctrl + Z | Cmd + Z |
| Redo | Ctrl + Shift + Z or Ctrl + Y | Cmd + Shift + Z or Cmd + Y |
Tabs in code mode
In code mode, files open as tabs. See Edit code in Nowa.
| Action | Windows / Linux | macOS |
|---|---|---|
| Open a New Tab (only one can be open) | Ctrl + T | Cmd + T |
| Go to the next tab | Ctrl + Tab | Control + Tab |
| Go to the previous tab | Ctrl + Shift + Tab | Control + Shift + Tab |
| Close the current tab | Ctrl + W | Cmd + W |
On macOS, switching tabs uses Control, not Cmd. In the designer, Ctrl/Cmd + W closes the board or screen you're on and shows Nothing is open.
Code editor
These work in the code editor in code mode.
| Action | Windows / Linux | macOS |
|---|---|---|
| Save | Ctrl + S | Cmd + S |
| Find | Ctrl + F | Cmd + F |
| Replace | Ctrl + Alt + F | Cmd + Option + F |
| Turn match case (Aa) on or off in Find | Ctrl + Alt + C | Cmd + Option + C |
Turn regular expressions (.*, search patterns) on or off in Find | Ctrl + Alt + R | Cmd + Option + R |
| Close Find | Esc | Esc |
| Comment or uncomment the line | Ctrl + / | Cmd + / |
| Comment or uncomment a block | Ctrl + Shift + / | Cmd + Shift + / |
| Delete the line | Ctrl + D | Cmd + D |
| Select the line | Ctrl + L | Cmd + L |
| Move the line up or down | Alt + ↑ or ↓ | Option + ↑ or ↓ |
| Indent or outdent | Tab or Shift + Tab | Tab or Shift + Tab |
| Go to the definition of a name (Dart files) | Ctrl + click | Cmd + click |
Select all, cut, copy, paste and undo use the usual keys (Ctrl/Cmd + A, X, C, V, Z). Redo is Ctrl/Cmd + Shift + Z. Home, End and the arrow keys move the cursor.
When a shortcut does nothing
- Focus. Designer shortcuts work when the board or Outline has focus. Click the board or an item on it first.
- Typing. While you type in a field, the tool keys (V, R, T), F, the arrow keys, [ and ], select all, copy, cut, paste, remove, undo and redo are ignored, so they don't change your design by accident.
- Playing. Designer shortcuts are off while an item plays on the board. Click Stop, then try again.
- View only. If you have the View Only role, only copy, the two tab-switching keys and Ctrl/Cmd + W work. Panning and zooming still work.
- Pop-ups. Ctrl/Cmd + O and Ctrl/Cmd + K don't open while the Shortcuts sheet or a picker is already open.
- Browser. A browser keeps some combinations for itself, such as Ctrl/Cmd + W, so a few shortcuts may not reach the web app. Use the buttons instead.
Two exceptions in Nowa 3.13 go the other way: a / you type in a Details field doesn't appear, and while you name something in the Variables list, the letters t, r, v and f can trigger board shortcuts instead of typing. Known issues has a workaround for each: the / in Details and the letters in the Variables list.
If you used an older version
If you learned Nowa from older videos, tutorials or an older Shortcuts sheet, two shortcuts may not do what you remember:
| You may know | Now |
|---|---|
| Ctrl/Cmd + P opens the widget picker | It runs your app in the Embedded preview. To add a widget, press Ctrl/Cmd + K, which opens the Library ready to search. |
| Ctrl/Cmd + G groups and ungroups | It only groups. To ungroup, right-click the group and choose Ungroup. |