renzora
Game Engine

Keyboard Shortcuts

Every default editor shortcut, the command palette, and how to rebind keys to your liking.

Shortcuts are an editor-only feature. They live in the renzora_keybindings crate (KeybindingsPlugin), and the action/binding types are defined in renzora::core::keybindings (EditorAction, KeyBinding, KeyBindings) so other editor plugins can dispatch them. Because the whole editor ships as the removable renzora_editor bundle, none of these bindings exist in an exported game.

The fastest way to find any command is the command palette — press Ctrl+P and start typing. It lists every tool, action, panel, and layout with its current keybinding, so you rarely need to memorize the tables below.

Command palette

Press Ctrl+P to open the command palette (renzora_command_palette). It is a fuzzy-searchable modal that aggregates, with zero per-plugin wiring:

  • Registered tools from the toolbar (only those visible in the current context).
  • Plugin shortcuts registered via register_shortcut, each showing its current binding.
  • Every built-in editor action (the EditorAction enum), shown with its key and dispatched exactly as a real key press.
  • LayoutsSwitch to <Workspace>.
  • PanelsOpen <Panel> (focuses it if already docked).
  • Settings tabs, File menu commands, and Documentation links.
KeyAction
Ctrl+POpen / close the palette
TypeFilter by label or category
Up / DownMove selection
EnterRun the selected command
EscDismiss

Camera

Movement keys are active only while you hold the right mouse button to fly. The same W E Q letters switch gizmo tools when you are not flying (see below) — they never conflict because flying gates them.

KeyAction
W A S DFly forward / left / back / right (hold right-click)
E / QFly up / down (hold right-click)
Left ShiftFly faster (hold)
FFocus selected
HomeReset camera
AFrame all
EndMove camera to cursor
] / [Camera speed up / down
LToggle pivot lock

View angles

Blender-style numpad views; the Ctrl modifier gives the opposite view.

KeyAction
Numpad 1 / Ctrl+Numpad 1Front / Back
Numpad 3 / Ctrl+Numpad 3Right / Left
Numpad 7 / Ctrl+Numpad 7Top / Bottom
Numpad 5Toggle perspective / orthographic

Tools

These set the persistent gizmo handle (ActiveTool). They fire only when the right mouse button is not held and no modal transform is in progress.

KeyAction
QSelect
WTranslate (move)
ERotate
RScale

Modal transforms (Blender-style)

With at least one entity selected (and the viewport in Scene mode), these start a real-time modal transform driven by mouse movement.

KeyAction
GGrab (move)
RRotate
SScale

While a modal transform is active:

KeyAction
X / Y / ZConstrain to that axis
Shift+X / Shift+Y / Shift+ZConstrain to the opposite plane
Type digits / . / -Enter a precise value
Enter or left-clickConfirm
Esc or right-clickCancel

Selection

Mouse picking happens in the viewport; the keyboard handles the rest.

InputAction
Left-clickSelect (replace)
Ctrl+ClickToggle selection
Shift+ClickAdd to selection
Left-dragBox (marquee) select
EscDeselect all
Ctrl+ASelect all
XSelect under cursor
VMove selection to cursor
Ctrl+DDuplicate
Alt+DDuplicate and move (starts a modal grab)
DeleteDelete
F2Rename
H / Shift+HHide selected / isolate selected

Edit

KeyAction
Ctrl+ZUndo
Ctrl+YRedo
Ctrl+C / Ctrl+VCopy / Paste
Ctrl+ACreate node

Undo/redo are command-based (renzora_undo). Redo defaults to Ctrl+Y — there is no Ctrl+Shift+Z binding out of the box. History is per-context (scene, material graph, blueprint, …), depth-capped at 500, and exposed in the History panel.

File

KeyAction
Ctrl+NNew scene
Ctrl+OOpen scene
Ctrl+SSave scene
Ctrl+Shift+SSave scene as
Ctrl+,Open Settings

View

KeyAction
Alt+ZToggle wireframe
Alt+Shift+ZToggle lighting
Ctrl+GToggle grid
Ctrl+`Toggle bottom panel
TToggle snap
Shift+TToggle edge snap
Alt+TToggle scale-from-bottom
Ctrl+0Reset UI scale to 100%

Wireframe is Alt+Z (not bare Z) and lighting is Alt+Shift+Z. Plain Z was dropped because it clashed with Ctrl+Z and the gizmo tool keys.

Play

KeyAction
F5Play / Stop

Code editor

These apply when the Code panel has keyboard focus (category "Code Editor"). Several reuse chords that mean something else in the viewport (Ctrl+S, Ctrl+G, Ctrl+D) — focus decides which action fires.

KeyAction
Ctrl+S / Ctrl+Shift+SSave file / save all
Ctrl+WClose tab
Ctrl+Tab / Ctrl+Shift+TabNext / previous tab
Ctrl+F / Ctrl+HFind / replace
Ctrl+GGo to line
Ctrl+/ / Ctrl+Shift+/Toggle line / block comment
Ctrl+SpaceTrigger autocomplete
Ctrl+DSelect next occurrence
Ctrl+Shift+DDuplicate line
Ctrl+Shift+KDelete line
Alt+Up / Alt+DownMove line up / down
Ctrl+Alt+Up / Ctrl+Alt+DownAdd cursor above / below
Shift+EscClear extra cursors
F12Go to definition
Ctrl+Shift+FFormat document
Ctrl+Alt+DShow diff vs saved
Ctrl+Shift+[Toggle fold
Ctrl+\Split editor right

Customizing shortcuts

Open Settings → Shortcuts (or Ctrl+, then the Shortcuts tab) to rebind any action. Each binding is a key plus the Ctrl / Shift / Alt modifiers, and modifier matching is exact — Ctrl+S will not fire if Shift is also held. Rebound keys are respected everywhere, including the command palette and programmatic dispatches.

Some defaults intentionally overlap: A is both Frame All and the fly-left key, and Ctrl+A is both Select All and Create Node. Context (whether you are flying, what panel is focused, what is selected) decides which one runs. If a chord feels ambiguous, rebind it here.

Plugin shortcuts

Plugins add their own commands through the editor SDK, and they appear in the command palette and the Shortcuts settings automatically. Register a ShortcutEntry with a default KeyBinding:

use bevy::prelude::*;
use renzora::core::keybindings::KeyBinding;
use renzora_editor_framework::{AppEditorExt, ShortcutEntry};

fn build(app: &mut App) {
    app.register_shortcut(ShortcutEntry::new(
        "my_plugin.do_thing",          // stable id
        "Do The Thing",                // display name
        "My Plugin",                   // category
        KeyBinding::new(KeyCode::KeyP).ctrl().shift(),
        |world: &mut World| {
            // handler runs with full &mut World access
        },
    ));
}

The id is stable so user-customized bindings survive plugin reloads. This is exactly how the command palette itself registers Ctrl+P (command_palette.toggle).