Skip to content

Command palette

The command palette is the editor's universal action launcher. Open it with Ctrl+K (or Ctrl+P if you came from VSCode), type a few characters of the action name, press Enter to run.

It's the fastest path to almost everything in the editor — every tool, every dialog, every project / palette / animation action has a command. ~60 commands ship today.

💡 The palette opens even from inside text inputs. It's an escape hatch — when you're lost in a dialog field, Ctrl+K always works.

![Screenshot: command palette open with 'pen' typed, "Pencil" highlighted at the top of the matched results — placeholder]

Where to find it

  • Hotkey: Ctrl+K (primary) or Ctrl+P (alternative). Both bypass the browser's default behaviours: Ctrl+P is preventDefault'd so the print dialog doesn't intercept.
  • The palette has no top-bar button — it's keyboard-first by design.

How to use it

  1. Press Ctrl+K.
  2. Start typing — the list filters in real time using fuzzy matching across the command title and a list of synonyms (erase matches "Eraser", delete matches "Eraser" too).
  3. Use ↑ / ↓ to move the highlight, Enter to run the selected command, Esc to close.
  4. Hovering a row also moves the highlight, so mouse + keyboard mix freely.
  5. Each row shows:
    • An icon for the command's category
    • The command title with matched characters highlighted
    • The bound shortcut as a chip on the right (when there's one)
    • A category pill (Tools / Palette / Layers / Animation / …) — useful when several commands have similar names

When the search box is empty, the palette shows your most recently run commands under a "Recent" header (max 8), followed by every other command under "All commands".

Commands shipped

The list grows every release; here's the categorical breakdown as of v0.15.0:

CategoryExamples
ToolsPencil, Eraser, Eyedropper, Fill, Color Replace, Shade, Line, Rectangle, Ellipse, Rect Select, Magic Wand, Lasso, Selection Brush, Slice, Gradient
PaletteSort by hue / luminosity, Remove unused, Open palette tools, Convert to Indexed / RGB, palette-preset cycle, "Load palette: DB16" (one per built-in preset, hidden when already active)
LayersAdd layer, Add group, Duplicate, Delete (with toast undo), Toggle visibility / lock, Solo, Link / Unlink across frames
AnimationNew / Duplicate / Delete frame, New frame tag, Toggle onion skin, Interpolate frames, Generate auto-tile 47, Import image as new frame
WorkspaceToggle tile preview / pixel-perfect / symmetry / preview window, Free Transform, Workspace presets dialog
ViewZoom in / out / 100%, Flip H / V, Rotate 90° CW / CCW
ExportExport PNG / sheet / GIF / JSON, Smart upscale dialog
ProjectNew / Open project, Save (Ctrl+S), Export .mstack, Import .mstack, Create / Restore backup
TutorialsInteractive tutorials — Drawing basics, Color cycling, Slices for gamedev, Auto-tile 47, …
HelpKeyboard shortcuts, Help & cheatsheet, Preferences, Plans (Free / Pro)

All command titles and category labels are fully localized — they render in the active display language (English or Español, set in Preferences).

Disabled vs hidden commands

Commands that don't apply to the current state are hidden, not greyed out:

  • "Unlink layer" only appears when the active layer is linked across frames.
  • "Delete frame" only appears when there's more than one frame.
  • "Convert to RGB mode" only appears when the project is in indexed mode (and vice versa for "Convert to Indexed").
  • "Load palette: DB16" disappears when DB16 is already the active palette.

This keeps the search results compact — empty rows don't crowd the list.

Recents

The last 8 commands you ran persist in localStorage (motestack:command-recents). They reflect how you work across the whole editor, not which project you have open — switching projects keeps your recents.

Bound shortcuts

The chip on each row reads through the same getBinding() system the editor uses for hotkeys. Remap a shortcut in the Keyboard shortcuts dialog (⌨️ icon in the top bar), reopen the palette, and the chip will reflect the new binding.

Performance

The palette is a lazy chunk. It only loads when you press Ctrl+K for the first time — the editor's main bundle stays smaller. Once loaded, fuzzy search across ~60 commands is sub-millisecond on any machine.

See also

Motestack is a personal hobby project. The editor and these docs ship under no warranty — back up your `.mstack` files.