Every action has a text form. That’s what config.json binds keys to, and what app/scripts/spacetile-ctl sends:
app/scripts/spacetile-ctl place left
Keys are written modifier-modifier-key in config.json, for example "alt-shift-h": "swap west". Modifiers are ctrl, alt (or opt), shift and cmd. The default keys follow one pattern:
| Modifier | Family |
|---|---|
| ⌥ | Focus and layout |
| ⌥⇧ | Move windows |
| ⌥⌃ | Place and size |
| ⌥⇧⌃ | Preselect |
| ⌃⇧ | Join |
Settings → Keys shows every action grouped by family. Click a shortcut to re-record it, or click a group’s prefix keycaps, hold new modifiers and release to move the whole group.
Other key binders
Raycast, skhd and Karabiner-Elements can run Spacetile’s commands too. To bind them only there, turn off Use Spacetile’s shortcuts at the top of Settings → Keys. Spacetile then registers no shortcuts and keeps yours for when you turn it back on.
From a shell, the app binary passes its arguments to the running Spacetile and exits straight away:
/Applications/Spacetile.app/Contents/MacOS/Spacetile focus west
Link it onto your PATH to call it spacetile:
ln -s /Applications/Spacetile.app/Contents/MacOS/Spacetile /usr/local/bin/spacetile
Raycast
The Spacetile extension has a command for every action in Settings → Keys, each with Raycast’s alias and hotkey fields. Run Command sends any other command, such as load Work.
skhd
In ~/.skhdrc:
alt - h : spacetile focus west
alt - 1 : spacetile space 1
alt + shift - 1 : spacetile send 1
alt + ctrl - h : spacetile place left
Karabiner-Elements
Add a rule under Complex Modifications. Karabiner runs commands without your shell’s PATH, so use the full path:
{
"description": "Spacetile: ⌥H focuses the window on the left",
"manipulators": [
{
"type": "basic",
"from": { "key_code": "h", "modifiers": { "mandatory": ["option"] } },
"to": [{ "shell_command": "/Applications/Spacetile.app/Contents/MacOS/Spacetile focus west" }]
}
]
}
Spaces
| Default key | Command | What it does |
|---|---|---|
| ⌥1 … ⌥9, ⌥0 | space 1 … space 10 |
Switch to that Space instantly, with no slide animation. Full-screen apps count, in their Mission Control place |
| ⌥. / ⌥, | space next / space prev |
Next or previous Desktop, wrapping round. From a full-screen app, the Desktop either side of it |
| ⌥` | space last |
The Space you were on before this one |
| ⌥⇧1 … ⌥⇧0 | send 1 … send 10 |
Send the focused window to that Space and follow it (see “Follow after sending”). A full-screen app’s Space can’t take it |
| ⌥⇧. / ⌥⇧, | send next / send prev |
Send the focused window to the next or previous Space |
| none | display next / display prev |
Focus the display to the right or left; the pointer moves there, making it the active display |
| none | send display next / send display prev |
Move the focused window to the Space showing on the display to the right or left |
Focus
| Default key | Command | What it does |
|---|---|---|
| ⌥h / ⌥j / ⌥k / ⌥l | focus west / south / north / east |
Focus the neighbouring tile; the pointer follows if “Mouse follows focus” is on |
| ⌥n / ⌥p | stack next / stack prev |
Cycle through the windows stacked in the focused tile, or the whole Space in stack layout |
Move
| Default key | Command | What it does |
|---|---|---|
| ⌥⇧h / j / k / l | swap west … |
Swap the focused window with its neighbour |
| ⌃⇧h / j / k / l | join west … |
Put the focused window and its neighbour in that direction together in one tile, split the other way: side by side become one above the other, and stacked become side by side. Their order stays |
Layout
| Default key | Command | What it does |
|---|---|---|
| ⌥z, ⌥m | zoom |
Toggle the focused window filling the whole Space; the tree underneath is kept |
| ⌥f | float |
Take the focused window out of the tiling, or put it back |
| ⌥e | split |
Flip the focused window’s split between side by side and stacked |
| ⌥b, ⌥=, ⌥] | balance |
Give every tile an equal share and remove holes |
| ⌥d | layout bsp |
Tile this Space |
| ⌥s | layout stack |
Stack this Space: every window fills it; cycle with ⌥n / ⌥p |
| none | layout float |
Leave this Space’s windows where you put them |
| ⌥x | mirror vertical |
Swap top and bottom across the Space |
| ⌥y | mirror horizontal |
Swap left and right across the Space |
| ⌥r | rotate 270 |
Rotate the layout anticlockwise; rotate 90 and rotate 180 also exist |
| none | retile |
Re-read windows and re-apply the current Space’s layout |
| none | close |
Close the focused window through its close button |
Place and size
These give the focused window a region of the Space. The other windows keep their own arrangement in what’s left. Where there aren’t enough windows to fill the shape, empty “holes” stand in (see Spaces and layouts). On a floating window they set its frame directly, as Raycast does. They do nothing on a stack-layout Space.
| Default key | Command | What it does |
|---|---|---|
| ⌥⌃h / j / k / l | place left / bottom / top / right |
A full-height column or full-width row on that edge. Press again to cycle ½ → ⅔ → ⅓ |
| none | place left 3/4, place right 1/3, … |
A fixed fraction on an edge: 1/4, 1/3, 1/2, 2/3, 3/4 or a decimal |
| ⌥⌃y / u / b / n | place top-left / top-right / bottom-left / bottom-right |
A quarter; the window shares its column with the neighbour below or above it, or a hole |
| ⌥⌃c | place center |
The middle third; other windows split either side |
| ⌥⌃↑ | place column |
Maximize height: a full-height column where the window already is, at its width. At an edge the others keep their arrangement; in the middle they form a column either side. restore undoes it |
| none | place top-left-sixth … place bottom-right-sixth |
One cell of a three-column, two-row grid; other windows fill the rest in order |
| ⌥⌃= / ⌥⌃- | grow / shrink |
Move the window’s inner borders outwards or inwards by a tenth of the Space |
| ⌥⌃r | restore |
Undo the last run of place, grow and shrink on this Space |
| none | border horizontal -100, border vertical 100, … |
Nudge the nearest border by points (negative is left or up) |
Full screen
Full-screen apps get a Space of their own, which Spacetile shows between the Desktops but doesn’t tile (see Spaces and layouts).
| Default key | Command | What it does |
|---|---|---|
| ⌥⇧f | fullscreen |
Turn native full screen on or off for the focused window. A tiled window keeps its tile and goes back to it |
| none | fullscreen pair |
The focused window and its neighbour in the tiling go full screen side by side (Split View), each on the side it’s on now. Spacetile starts it from the app’s Window ▸ Full-Screen Tile menu, then chooses the other window in the picker macOS shows |
| none | space fullscreen next / space fullscreen prev |
Next or previous full-screen app on the active display, skipping Desktops |
Preselect
| Default key | Command | What it does |
|---|---|---|
| ⌥⇧⌃h / j / k / l | preselect west … |
The next new window opens on that side of the focused window. A teal hint shows where; the same key again cancels |
Profiles
| Default key | Command | What it does |
|---|---|---|
| none | capture <name> |
Save every Space’s arrangement as a profile |
| none | load <name> |
Apply a profile. Shortcuts set in the profile designer are stored as these |
Spacetile
| Default key | Command | What it does |
|---|---|---|
| none | pause |
Pause or resume all tiling. While paused Spacetile moves no windows, ignores other commands and mouse gestures, and releases every shortcut except the ones bound to pause. Resuming lays out the current Space again. If you (or macOS Fill & Arrange) arranged its tiled windows into a clean tiling while paused, Spacetile keeps that arrangement; a window that overlaps another, or a gap, means the old tiling comes back |
| none | settings |
Open Settings. Opening Spacetile again from Finder, Spotlight or Raycast does the same, so Settings stays reachable when macOS hides the menu-bar item |
Unbound by default
Bind any of these in Settings → Keys, or in config.json:
-
display next|prevandsend display next|prev -
join west|south|north|east -
fullscreen pairandspace fullscreen next|prev -
layout float -
rotate 90|180 -
retile -
close -
the fixed-fraction and sixth
placecommands -
the
bordernudges
Shortcuts from other tools
Settings → Keys → Use Shortcuts From swaps in another window manager’s default shortcuts, mapped onto Spacetile’s commands. Spacetile’s own shortcuts stay for everything the tool doesn’t bind. The few whose keys the tool uses move to new ones in the tool’s style. Edit → Undo takes it back. The maps live in KeyPresets.swift.
| Tool | What maps | Not in Spacetile | Spacetile commands moved to make room |
|---|---|---|---|
| Rectangle (Recommended; Raycast’s and Magnet’s sets match) | Halves, quarters, thirds, two-thirds, maximize (zoom), maximize height, center, larger/smaller, restore, next/previous display | Center two-thirds; Rectangle’s center keeps the window’s size, Spacetile’s takes the middle third | place top, place bottom to ⌃⌥⌘↑ / ⌃⌥⌘↓ |
| Spectacle (also Rectangle’s Spectacle set) | Cycling halves, quarters, maximize, maximize height, center, larger/smaller, restore, displays | Undo/redo | none |
| AeroSpace | Focus, move (swap), workspaces 1–9 (focus and send), back-and-forth, tiles and accordion (stack) layouts, resize | Workspaces A–Z, moving a workspace to another monitor, service mode (join, float and balance have direct shortcuts instead) | space prev to ⌥[ |
| Amethyst | Fullscreen layout (stack), shrink/expand, focus and throw to the next screen, throw to Space 1–10 and left/right, float, pause, re-evaluate (retile) | Layout cycling and tall/wide/column layouts, main pane, focus and swap round the layout, screens by number, focus-follows-mouse toggle | swap west, swap east to ⌥⇧← / ⌥⇧→; preselect west, preselect east to ⌃⌥⇧, / ⌃⌥⇧. |
| BetterStage (Standard) | Stages 1–9 (focus and send), next/previous, retile, focus IJKL, halves, quarters, thirds, two-thirds, maximize, center | Stages Bar, new and close stage, window mode cycling, center two-thirds | place top, place bottom to ⌃⌥⌘↑ / ⌃⌥⌘↓; place column to ⌃⌥⇧↑ |
| ShiftPlus | Previous workspace, cycle workspaces | Capturing a workspace by shortcut (Save Layout as Profile… is in the menu bar) | none |
No preset:
- Raycast, Moom and yabai ship no default shortcuts. Raycast’s own presets copy Rectangle, Magnet and Spectacle, so choose Rectangle or Spectacle.
- macOS’s built-in tiling uses fn⌃ chords, which global hotkeys can’t register. They work with Spacetile: see macOS tiling.
The other direction: none of these tools’ defaults cover preselect, stack cycling, mirror, rotate, balance, the split toggle, join (except AeroSpace’s service mode), sending across displays while keeping the Desktop, or applying profiles. Those keep Spacetile’s shortcuts.