Blog CLI Guide

MakerZones CLI: The Complete Guide

15 min read CLI & Automation

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

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 --save 
makerzones 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 --add 
makerzones 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 --activate 
makerzones 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

Try MakerZones free

Custom zones, drag-to-snap, CLI automation. No signup required.

Download Free