Script Juggler is a floating workflow manager for Glyphs.app. It lets you collect any subset of your installed Glyphs scripts into an ordered list, run them one by one (or selectively), mark them done, and save the whole setup as a reusable preset—all without leaving Glyphs.
Look for Script Juggler in Window > Plugin Manager > Scripts, then click the Install button next to it. Once you are done, hold down the Opt key and choose Script > Reload Scripts (Cmd-Opt-Shift-Y).
Run Script Juggler from the Glyphs Script menu. The window is non-modal and can stay open while you work. You can run the script a second time to open a second, independent window—each window maintains its own list.
# ● Script Name ▶
┌────────────────────────────────────┐
│ 1 ○ Check Glyph Names ▶ │
│ 2 ● Decompose Compounds ▶ │
│ 3 ○ Remove Overlap ▶ │
│ 4 ○ Rename Glyphs ▶ │
├────────────────────────────────────┤
│ … ↺ + │
└────────────────────────────────────┘
Each row has four columns:
| Column | Contents | Purpose |
|---|---|---|
| # (number) | Row position | Drag handle for manual reordering |
| Ring | Status indicator | Shows done / played state (see below) |
| Title | Script name | Hover to see full path; double-click to run |
| ▶ | Play button | Click to run the script immediately |
Click the plus button at the bottom right to open the Collect dialog. This dialog lists every script in your Glyphs Scripts folder that has a # MenuTitle: declaration.
The ring in the second column communicates two independent states at a glance:
| Appearance | Meaning |
|---|---|
| 🔘 — empty grey circle | Marked as not done |
| 🟢 — solid green circle | Marked as done |
| extra dot inside circle | has been run at least once this session |
"Done" is a manual flag you set to track your progress through the workflow. "Played" is set automatically when a script has been executed—it resets each time you close and reopen the window.
Hover over the ring column header to see a quick-reference tooltip.
There are three ways to run a script:
- Click the ▶ button in the play column of any row.
- Double-click the script title.
- Press Return or Enter when exactly one row is selected.
After a script runs, its ring gains an inner dot to show it was played this session. Errors are reported in the Glyphs Macro Window, which opens automatically on failure.
There are two ways to toggle the "done" flag:
- Click the ring (○/●) to toggle that single row.
- Press Space to toggle all currently selected rows at once.
Done status is saved automatically and restored when you reopen the window.
When the script list has keyboard focus (click any row to give it focus):
| Key | Action |
|---|---|
↑ / ↓ |
Select previous/next script |
Shift ↑ / Shift ↓ |
Extend selection up/down |
Opt ↑ / Opt ↓ |
Select first/last script |
Cmd ↑ / Cmd ↓ |
Move selected script(s) one position up / down |
Cmd Opt ↑ / Cmd Opt ↓ |
Move selected script(s) to the very top / bottom |
Space |
Toggle done status for all selected rows |
Return or Enter |
Run the selected script (only when one row is selected) |
Delete or Backspace |
Remove selected row(s) from the list |
When moving multiple rows, their relative order is preserved. The selection moves with the rows.
Script Juggler uses standard macOS list selection:
| Gesture | Result |
|---|---|
| Click a row | Select that row exclusively |
| Shift-click | Extend selection to include all rows between the anchor and the clicked row |
| Cmd-click | Add or remove a single row from the current selection |
| Click empty space | Deselect all |
Multiple selected rows can be moved, toggled done, deleted, or dragged all at once.
Rows can be reordered by dragging. Only the number column (#) is the drag handle—clicking there starts a drag without changing the selection.
To drag one row:
- Click and hold the number at the left edge of any row.
- Drag up or down. A thin blue line appears between rows to show where the row will be inserted.
- A semi-transparent ghost image of the dragged row(s) follows the cursor.
- Release to drop the row at the indicated position.
To drag multiple rows:
- First, select the rows you want to move (Shift-click or Cmd-click).
- Click and hold the number of any row that is selected.
- All selected rows are moved together as a group, keeping their relative order.
- Release to drop them at the blue line.
If you click the number of an unselected row, only that single row is dragged regardless of the current selection.
The search field supports:
- Multiple terms (space-separated) — all terms must match (AND logic).
- Wildcards —
*matches any sequence of characters,?matches exactly one. - Quoted phrases — surround a multi-word phrase in double quotes for a literal match:
"check glyph".
The list filters in real time as you type.
- Click to select a script.
- Shift-click or Cmd-click to select multiple scripts.
- Double-click a script or press Return (or click Collect) to add the selection to the juggler.
Scripts are inserted immediately after the last selected row in the main list (or appended at the end if nothing is selected). Duplicates are silently skipped.
Hovering over any script in the list shows its __doc__ string as a tooltip, so you can read a short description before adding it.
Select one or more rows and press Delete or Backspace. The entries are removed from the list and the ↺ undo button appears at the bottom left.
The ↺ button (bottom left, shown only after a deletion or clear) restores the entire list to the state it was in just before the last destructive action. Only the most recent operation can be undone; once you undo, the button disappears.
Click the ⋯ button at the bottom left to open the actions menu:
| Item | What it does |
|---|---|
| Save Preset | Saves the current list to a .plist file. The save dialog defaults to the folder of the frontmost open font file. |
| Load Preset | Opens a .plist file and replaces the current list. Done flags are restored; played-this-session state is reset. |
| Clear List | Removes all rows. The ↺ undo button appears so you can recover the list if needed. |
Presets are standard XML property-list (.plist) files and can be shared between machines. They store each script's file path, display title, and done state. If a preset references a script that no longer exists at the saved path, that entry will still appear in the list—it will just fail to run with a message in the Macro Window.
The list is saved automatically to Glyphs' persistent preferences on every change. When you run Script Juggler again, it restores the list exactly as you left it—including which scripts are marked done.
Each open Script Juggler window saves its contents independently (keyed by window order). If you run Script Juggler twice, each window remembers its own list across sessions.
- Workflow order: Arrange scripts in the exact order you plan to run them. Use the keyboard shortcuts or drag-and-drop to tune the order without touching the mouse.
- Track progress: Mark scripts done as you work through a checklist. The green ring gives you an instant overview of what remains.
- Revisit played scripts: The inner dot shows which scripts were already run this session even if you haven't marked them done—useful when iterating on a script multiple times.
- Project-specific presets: Save a preset per font project (next to the
.glyphsfile) so you can load exactly the right workflow for each job. - Search shortcuts: In the Collect dialog, type the folder name to narrow down by category, e.g.
metricsorkerning "check pairs".