Everything in PromptDeck is configured through a single YAML file. Edit it in any text editor, changes apply instantly. Version control friendly.
Your config file lives at ~/.promptdeck/buttons.yaml
Open in VS Code, Vim, TextEdit — any editor. It's just YAML.
Save the file. Changes push to your iPhone in under a second. No restart.
Track changes in git. Share configs. Roll back mistakes.
Control the connection, layout, injection behavior, and visual style.
| Option | Default | Description |
|---|---|---|
server.port | 9100 | WebSocket server port |
| Option | Default | Description |
|---|---|---|
grid.columns | 2 | Button grid columns (adaptive on iOS) |
grid.buttonShape | rounded | Default shape for all buttons |
| Option | Default | Description |
|---|---|---|
background.style | none | none, gradient, or animated |
| Option | Default | Description |
|---|---|---|
injection.mode | clipboard | clipboard or keystrokes |
injection.appendNewline | true | Press Enter after injection |
injection.cooldownMs | 250 | Min ms between injections |
injection.plainText | false | Plain text only (no RTF) |
| Option | Default | Description |
|---|---|---|
dock.position | top | top or bottom of the screen |
dock.showLabels | true | Show app names below icons |
| Option | Default | Description |
|---|---|---|
tabs.safari.fullTitles | false | Show full tab titles for Safari |
tabs.safari.title | false | Show "Safari" section header |
tabs.chrome.fullTitles | false | Show full tab titles for Chrome |
tabs.chrome.title | false | Show "Chrome" section header |
Every button supports these properties. Only id, label, and icon are required; color defaults to blue.
| Property | Default | Description |
|---|---|---|
id | — | Unique identifier |
label | — | Button text (empty string for icon-only) |
icon | — | SF Symbol name |
color | blue | Hex color (e.g., #5E5CE6). Falls back to group color, then blue |
action | inject | inject, toggle, toggleChecked, switchTab, launchApp, runShortcut, systemAction, scanBarcode, restApi, forgetPin |
prompt | — | Text to inject (for inject action) |
checked | false | Current state for toggle action buttons |
enabled | true | Set false to hide without removing from config |
url | — | URL pattern for switchTab action |
urlMatch | contains | contains, exact, or startsWith |
bundleId | — | App bundle ID for launchApp action |
shortcut | — | Shortcut name for runShortcut action |
target | phone | phone or host — where to run the shortcut |
systemAction | — | System action for systemAction type |
animation | none | pulse, variableColor, wiggle, breathe, rotate |
shape | (grid default) | rounded, square, pill, circle, hexagon, octagon, squircle |
metadata | — | Key-value pairs for extensibility |
repeat | once | once (on tap) or continuous (always animating) |
Organize buttons into swipeable pages. Group related buttons with labeled headers.
| Property | Default | Description |
|---|---|---|
label | — | Page name in the indicator |
type | buttons | buttons (grid) or list |
chrome | true | Show dock/tabs/spaces on this page |
sortOrder | natural | natural (YAML order) or alpha |
triggers | — | Auto-navigation triggers |
| Property | Default | Description |
|---|---|---|
label | — | Group header text |
color | gray | Group tint color (hex). Optional |
sortOrder | (inherit) | Override page sort order |
triggers | — | Context-aware group triggers |
pages:
- label: "Coding"
sortOrder: alpha
buttons:
- group:
label: Review
color: "#5E5CE6"
buttons:
- id: review
label: Review
icon: eye
color: "#5E5CE6"
prompt: "Review this code."
- label: "Shopping"
type: list
chrome: false
buttons:
- id: milk
label: Milk
icon: drop.fill
color: "#FFFFFF"
action: toggle
Include or omit top-level sections to control what appears on your iPhone. The order in YAML determines the order on screen.
dock:
Dock mirror with running app indicators
tabs:
Browser tab switcher (Safari + Chrome)
vscode:
VS Code window switcher
spaces:
macOS Spaces/Desktops navigator
Omit a section entirely to disable it. Include it (even empty) to enable.
# Order in YAML = order on iPhone
spaces: {}
tabs: {}
buttons:
- ...
vscode: {}
dock:
position: bottom
Save your file. See changes on your iPhone instantly.
PromptDeckHost monitors your config file with FSEvents. Changes are detected within milliseconds.
YAML is validated before applying. Syntax errors are logged with line numbers — your current config stays active.
Your selected page, toggle states, and scroll position are preserved across config reloads.