MakerZones CLI: The Complete Guide
MakerZones ships with a full command-line interface. Every feature you can configure through the GUI -- layouts, zones, profiles, edge snapping, app rules, gaps -- you can also control from your terminal. This opens up scripting, automation, and integration with tools like Alfred, Raycast, and tmux.
Why would you want a CLI for a window manager? A few reasons:
- Scripting -- Switch layouts, snap windows, and toggle features from shell scripts
- Automation -- Set up your workspace with a single command when you start your day
- Launcher integration -- Trigger MakerZones actions from Alfred, Raycast, or any launcher that can run shell commands
- Dotfiles -- Version-control your window management config alongside your other settings
- Remote/SSH workflows -- Manage settings on a headless Mac or from another machine
In this article
- Installation -- Getting the CLI on your PATH
- Window Management -- snap, move, layout, zones
- Import & Export -- export, import, import-from, share
- Profiles -- Save and switch screen assignment sets
- App Rules -- Per-app layout and zone assignments
- Feature Toggles -- edge-snap, window-memory, green-button, excluded-apps
- Settings -- modifiers, gaps, shortcuts
- License & Referral -- Activate, deactivate, referral program
- Utility Commands -- status, config, feedback
- Practical Recipes -- Real-world workflows
- Launcher Integration -- Alfred & Raycast
Installation
The CLI binary (makerzones) is bundled inside the MakerZones app. To use it from your terminal, you need to create a symlink to the binary.
Option 1: Symlink to /usr/local/bin
This puts the makerzones command on your PATH so you can run it from anywhere:
sudo ln -sf /Applications/MakerZones.app/Contents/MacOS/MakerZonesCLI /usr/local/bin/makerzones
Option 2: Add to your shell profile
If you prefer not to use sudo, add an alias to your ~/.zshrc or ~/.bashrc:
alias makerzones="/Applications/MakerZones.app/Contents/MacOS/MakerZonesCLI"
Verify it works
makerzones help
You should see the full list of available commands. The CLI communicates with the running MakerZones app via distributed notifications, so make sure MakerZones is running for commands like snap and move to work.
Window Management
These commands control windows in real time. They send requests to the running MakerZones app, which then snaps or moves the focused window.
snap
Snap the currently focused window to a specific zone.
makerzones snap --zone[--screen ]
The --zone flag is required. Use makerzones zones to see available zone IDs. The optional --screen flag targets a specific display.
# Snap to the first zone in the current layout makerzones snap --zone 1 # Snap to zone 3 on a specific screen makerzones snap --zone 3 --screen "Built-in Retina Display"
move
Move the focused window to the adjacent zone (left or right).
makerzones move
This is the CLI equivalent of the keyboard shortcuts for cycling through zones. If the window is in the leftmost zone and you move left, it wraps around.
# Move focused window one zone to the right makerzones move right # Move focused window one zone to the left makerzones move left
layout
Switch the active layout or list all available layouts.
makerzones layout --list makerzones layout --set[--screen ]
The --list flag shows all layouts with their zone count and screen assignments. The --set flag switches the active layout. If --screen is provided, the layout only changes on that display.
# List all layouts makerzones layout --list # Switch to a coding layout makerzones layout --set "3 Columns" # Switch layout on the external monitor only makerzones layout --set "Wide Center" --screen "LG HDR 4K"
zones
List all zones in a layout with their coordinates. Useful for finding zone IDs to use with snap.
makerzones zones [--layout]
Without --layout, it shows zones from the first layout alphabetically. Each zone is shown with its ID and position (x, y, width, height as fractions of the screen).
# Show zones in the default layout makerzones zones # Show zones in a specific layout makerzones zones --layout "3 Columns" # Example output: # Zones in '3 Columns': # 1: x=0.00 y=0.00 w=0.33 h=1.00 # 2: x=0.33 y=0.00 w=0.34 h=1.00 # 3: x=0.67 y=0.00 w=0.33 h=1.00
Import & Export
Move layouts between machines, share them with teammates, or migrate from another window manager.
export
Export a layout to a JSON file.
makerzones export --layout-o
# Export your coding layout makerzones export --layout "3 Columns" -o ~/Desktop/3columns.json # Export for dotfiles makerzones export --layout "Development" -o ~/.config/makerzones/layouts/dev.json
import
Import a layout from a JSON file.
makerzones import -i[--name ]
If --name is not provided, the layout is named after the file (minus the extension).
# Import with auto-naming (uses filename) makerzones import -i ~/Desktop/3columns.json # Import with a custom name makerzones import -i ~/Desktop/3columns.json --name "My Coding Layout"
import-from
Migrate layouts from Rectangle or Magnet. MakerZones reads their configuration files and converts the layouts automatically.
makerzones import-from
If a layout name already exists, MakerZones appends a number to avoid overwriting your existing layouts.
# Import from Rectangle makerzones import-from rectangle # Import from Magnet makerzones import-from magnet # Import from everything at once makerzones import-from all
share
Upload a layout and get a shareable URL. The URL is automatically copied to your clipboard.
makerzones share --layout
# Share your layout with a teammate makerzones share --layout "3 Columns" # Output: # Sharing layout '3 Columns' (3 zones)... # Share URL: https://makerzones.app/layout/abc123 # (URL copied to clipboard)
Profiles
Profiles save your screen-to-layout assignments. This is useful when you dock and undock a laptop, or when you switch between different monitor setups throughout the day. Save a profile for "laptop only," another for "docked with ultrawide," and switch between them with one command.
makerzones profile --list makerzones profile --savemakerzones profile --switch makerzones profile --delete
# Save your current setup as "docked" makerzones profile --save "docked" # Later, when you're on the laptop only makerzones profile --switch "laptop" # List all profiles makerzones profile --list # Output: # Profiles: # docked -- 2 screen(s) (active) # laptop -- 1 screen(s) # Remove a profile you no longer need makerzones profile --delete "old-setup"
App Rules
App rules assign specific apps to layouts and zones automatically. When an app launches or comes to the foreground, MakerZones can snap it to a predefined zone. This is useful for apps that you always want in the same spot -- Slack on the left, browser in the center, terminal on the right.
makerzones app-rules --list makerzones app-rules --add --bundle--layout [--zone ] makerzones app-rules --remove
The --bundle flag takes a macOS bundle identifier. You can find an app's bundle ID by running osascript -e 'id of app "App Name"' in Terminal.
# Always put Slack in zone 1 of the "3 Columns" layout makerzones app-rules --add --bundle com.tinyspeck.slackmacgap --layout "3 Columns" --zone 1 # Assign Safari to a layout (any zone) makerzones app-rules --add --bundle com.apple.Safari --layout "Wide Center" # List current rules makerzones app-rules --list # Output: # App Rules: # com.tinyspeck.slackmacgap -> layout "3 Columns" -> zone 1 # com.apple.Safari -> layout "Wide Center" # Remove a rule makerzones app-rules --remove com.tinyspeck.slackmacgap
Feature Toggles
Toggle MakerZones features on or off from the command line.
edge-snap
Edge snapping lets you drag a window to the edge or corner of the screen to snap it to a half or quarter position -- just like on Windows.
makerzones edge-snap --status makerzones edge-snap --enable makerzones edge-snap --disable
The --status flag shows the current configuration including threshold, corner size, delay, and which edges are active.
# Check edge snap settings makerzones edge-snap --status # Output: # Edge Snap: enabled # Threshold: 5px # Corner size: 50px # Delay: 200ms # Left half: true # Right half: true # Top maximize: true # Bottom half: true # Corners: true
window-memory
Window memory remembers where each window was placed and restores it when the app reopens. Quit Safari, reopen it, and it goes right back to where it was.
makerzones window-memory --status makerzones window-memory --enable makerzones window-memory --disable makerzones window-memory --clear
Use --clear to reset all saved window positions. The --status flag shows how many windows are currently remembered.
# Check memory status makerzones window-memory --status # Output: # Window memory: enabled # Saved windows: 12 # Start fresh makerzones window-memory --clear
green-button
Override the macOS green button behavior. Instead of entering full-screen mode, clicking the green button snaps the window to your MakerZones layout.
makerzones green-button --enable makerzones green-button --disable
excluded-apps
Exclude specific apps from MakerZones snapping. Useful for apps that manage their own window layout, like virtual machines or some IDEs.
makerzones excluded-apps --list makerzones excluded-apps --addmakerzones excluded-apps --remove
# Exclude Parallels Desktop makerzones excluded-apps --add com.parallels.desktop.console # List exclusions makerzones excluded-apps --list # Remove an exclusion makerzones excluded-apps --remove com.parallels.desktop.console
Settings
modifiers
View or change the modifier keys used to activate drag-to-zone. By default, you hold a modifier key while dragging a window to show the zone overlay.
makerzones modifiers makerzones modifiers --set[...]
# See current modifiers makerzones modifiers # Output: # Modifiers: control + shift # Change to just Control makerzones modifiers --set control # Use Control + Shift makerzones modifiers --set control shift
gaps
Control the spacing between zones (inner gaps) and between zones and screen edges (outer gaps). Gaps are specified in pixels.
makerzones gaps makerzones gaps --set --outer--inner
# Check current gaps makerzones gaps # Output: # Gaps: outer=8px inner=8px # Set tiling-style gaps (like i3/sway) makerzones gaps --set --outer 8 --inner 8 # Remove all gaps for maximum screen usage makerzones gaps --set --outer 0 --inner 0 # Only set inner gaps makerzones gaps --set --inner 4
shortcuts
View all configured keyboard shortcuts -- zone shortcuts, layout shortcuts, and built-in navigation shortcuts.
makerzones shortcuts --list
# List all shortcuts makerzones shortcuts --list # Example output: # Zone shortcuts: # Ctrl+Shift+1 -> 1 # Ctrl+Shift+2 -> 2 # Ctrl+Shift+3 -> 3 # # Layout shortcuts: # Ctrl+Shift+F1 -> 3 Columns # Ctrl+Shift+F2 -> Wide Center # # Built-in shortcuts: # Ctrl+Shift+Right -> cycle forward # Ctrl+Shift+Left -> cycle backward # Ctrl+Shift+[ -> move left # Ctrl+Shift+] -> move right
License & Referral
license
Manage your MakerZones Pro license from the terminal.
makerzones license --status makerzones license --activatemakerzones license --deactivate
# Check license status makerzones license --status # Output: # Pro status: active # License key: ABCD1234...EF56 # Activate a new key makerzones license --activate XXXX-XXXX-XXXX-XXXX # Deactivate (e.g., before transferring to a new machine) makerzones license --deactivate
referral
Check your referral program status or copy your referral URL to share with others.
makerzones referral --status makerzones referral --copy
# Check referral progress makerzones referral --status # Output: # Referral code: MZ-abc123 # Installs: 3/5 # Share URL: https://makerzones.app/ref/MZ-abc123 # Copy your referral link makerzones referral --copy # Output: # Referral URL copied to clipboard: https://makerzones.app/ref/MZ-abc123
Utility Commands
status
Show a complete overview of your MakerZones configuration -- everything at a glance.
makerzones status
# Example output: # MakerZones Status # Config: /Users/you/.config/makerzones/config.json # License: Pro # Layouts: 4 # Screen assignments: 2 # Profiles: 2 # App rules: 3 # Excluded apps: 1 # Edge snap: enabled # Window memory: enabled # Green button: enabled # Modifiers: control+shift
config
Access the raw configuration file. Useful for manual edits or debugging.
makerzones config --path makerzones config --open
# Print the config file path makerzones config --path # Output: # /Users/you/.config/makerzones/config.json # Open the config in your default editor makerzones config --open
feedback
Send feedback directly to the developer from the command line. No need to open an email client or navigate to a website.
makerzones feedback "Your feedback message"
# Send a feature request makerzones feedback "Would love support for vertical zone splits" # Report an issue makerzones feedback "Edge snap not triggering on left side of external monitor"
Practical Recipes
These are real-world workflows that combine multiple CLI commands. Copy them as shell scripts or wire them into your own automation.
Morning workspace setup
Open your standard apps and snap them into position. Save this as a shell script and run it when you start your day.
#!/bin/bash # morning-workspace.sh # Switch to the coding layout makerzones layout --set "3 Columns" # Open apps open -a "Safari" sleep 1 makerzones snap --zone 2 open -a "Terminal" sleep 1 makerzones snap --zone 3 open -a "Slack" sleep 1 makerzones snap --zone 1
Dock/undock automation
Automatically switch profiles when you connect or disconnect an external monitor. Combine with a tool like MonitorControl or a display-detection script.
#!/bin/bash
# dock-switch.sh
SCREEN_COUNT=$(system_profiler SPDisplaysDataType | grep -c "Resolution:")
if [ "$SCREEN_COUNT" -gt 1 ]; then
makerzones profile --switch "docked"
echo "Switched to docked profile"
else
makerzones profile --switch "laptop"
echo "Switched to laptop profile"
fi
Backup and restore layouts
Export all your layouts for backup or to sync across machines.
#!/bin/bash
# backup-layouts.sh
BACKUP_DIR="$HOME/.config/makerzones/backups/$(date +%Y-%m-%d)"
mkdir -p "$BACKUP_DIR"
# Export each layout
makerzones layout --list | grep "^ " | while read -r line; do
name=$(echo "$line" | sed 's/ (.*//' | xargs)
makerzones export --layout "$name" -o "$BACKUP_DIR/$name.json"
done
echo "Layouts backed up to $BACKUP_DIR"
Migrate from Rectangle
Switching from Rectangle? One command imports everything, then you can start using MakerZones immediately.
# Import all Rectangle layouts makerzones import-from rectangle # Verify the import makerzones layout --list # Set one as active makerzones layout --set "Rectangle - Left Half"
Context-based layout switching
Switch layouts based on what you are doing. Wire these into keyboard shortcuts or launcher actions.
# Coding mode: editor takes 60%, terminal 40% makerzones layout --set "Development" # Design review: single wide window makerzones layout --set "Wide Center" # Meeting mode: notes on the side makerzones layout --set "Presentation"
Launcher Integration
Any tool that can run a shell command can trigger MakerZones. This includes Alfred, Raycast, Keyboard Maestro, BetterTouchTool, and Hammerspoon.
Alfred
Create an Alfred workflow with a keyword trigger and a "Run Script" action. For example, keyword mz with argument {query}:
# Alfred "Run Script" action
/usr/local/bin/makerzones {query}
Then type mz layout --set "3 Columns" in Alfred to switch layouts. You can also create separate workflows for common actions -- "Snap left," "Snap right," "Switch to coding layout" -- each bound to a hotkey.
Raycast
Raycast can run shell scripts directly. Create a Raycast Script Command:
#!/bin/bash # Required parameters: # @raycast.schemaVersion 1 # @raycast.title Switch to Coding Layout # @raycast.mode silent # @raycast.packageName MakerZones /usr/local/bin/makerzones layout --set "3 Columns"
MakerZones also ships with dedicated Alfred and Raycast extensions that provide a native GUI experience. Check the MakerZones settings for download links, or look for "MakerZones" in the Raycast extension store.
Keyboard Maestro / BetterTouchTool
Both support "Execute Shell Script" actions. Use the full path to the CLI:
/usr/local/bin/makerzones snap --zone 1
Quick Reference
Every command on one page. Copy the one you need.
| Command | What it does |
|---|---|
| snap --zone <id> | Snap focused window to a zone |
| move <left|right> | Move window to adjacent zone |
| layout --list | List all layouts |
| layout --set <name> | Switch active layout |
| zones [--layout <name>] | List zones with coordinates |
| export --layout <name> -o <path> | Export layout to JSON |
| import -i <path> | Import layout from JSON |
| import-from <source> | Import from Rectangle/Magnet |
| share --layout <name> | Upload and get share URL |
| profile --list|--save|--switch|--delete | Manage screen profiles |
| app-rules --list|--add|--remove | Per-app zone assignments |
| edge-snap --status|--enable|--disable | Edge snap configuration |
| window-memory --status|--enable|--disable|--clear | Window position memory |
| green-button --enable|--disable | Green button override |
| excluded-apps --list|--add|--remove | App exclusion list |
| modifiers [--set ...] | View/set modifier keys |
| gaps [--set --outer --inner] | View/set gap sizes |
| shortcuts --list | Show all keyboard shortcuts |
| license --status|--activate|--deactivate | Manage Pro license |
| referral --status|--copy | Referral program |
| feedback "message" | Send feedback to developer |
| status | Full status overview |
| config --path|--open | Access config file |
| help | Show help |