Appearance
Settings
Every key in ~/.config/pomelo/settings.json, with its default. Most are edited in the Settings window (,), on the page each section below is named after; Edit in settings.json at the top of the window opens the file itself. A missing key keeps its default, and keys this version does not know are written back untouched, so a file from a newer version survives.
Nested keys are written with dots here: completions.lsp is {"completions": {"lsp": true}} in the file.
The keys under Kept by the app record how you left the window; they change as you use it and rarely need editing by hand.
Appearance
| Key | Default | Description |
|---|---|---|
theme | "One Dark" | The theme shown when theme_selection is "static". |
theme_selection | "static" | "static" always shows theme; "dynamic" picks theme_light or theme_dark by theme_mode. |
theme_mode | "system" | With dynamic selection: "light", "dark" or "system" (follow the macOS appearance). |
theme_light | "One Light" | The theme used when light mode is active. |
theme_dark | "One Dark" | The theme used when dark mode is active. |
theme_overrides | {} | Per theme name, color tokens laid over that theme: {"One Dark": {"editor.background": "#1e2127"}}. |
buffer_font_family | ".PomeloMono" | Font family used for the code editor. |
buffer_font_size | 15.0 | Text size of the code editor. |
buffer_font_weight | 400.0 | Font weight for the code editor (100-900). |
buffer_line_height | "comfortable" | Line height for the code editor: "comfortable" (1.618), "standard" (1.3), a number or {"custom": n}. |
buffer_font_features | {} | OpenType features for the code editor, by tag. |
buffer_font_fallbacks | [] | Families tried, in order, for characters the editor font lacks. |
ui_font | ".PomeloSans" | Font family used for interface text. |
ui_font_size | 16.0 | Font size for UI elements. |
ui_font_weight | 400.0 | Font weight for UI elements (100-900). |
ui_font_features | {} | OpenType features for UI text, by tag: {"calt": false, "ss01": true}. |
ui_font_fallbacks | [] | Families tried, in order, for characters the UI font lacks. |
agent_font_size | 12.0 | Text size of the agent's tabs, apart from terminals. |
terminal_font_family | ".PomeloMono" | Font family used for terminals. |
terminal_font_size | 15.0 | Text size of terminals (the agent's tabs have agent_font_size). |
terminal_font_weight | 400.0 | Font weight for terminals (100-900). |
terminal_line_height | "standard" | Line height for terminals, in the same forms as buffer_line_height. |
terminal_font_features | {} | OpenType features for terminals, by tag. |
terminal_font_fallbacks | [] | Families tried, in order, for characters the terminal font lacks. |
multi_cursor_modifier | "alt" | The key held to add a cursor with a click: "alt", or "cmd_or_ctrl" (Alt-click then goes to the definition). |
cursor_blink | true | Whether the cursor blinks in the editor. |
cursor_animation.enabled | false | The cursor glides to where it moves instead of jumping. |
cursor_shape | "bar" | "bar", "block", "underline" or "hollow". |
hide_mouse | "on_typing_and_action" | When the pointer hides until the mouse moves: "never", "on_typing" or "on_typing_and_action". |
reduce_motion | "off" | "on" holds loading shimmers, pulsing placeholders and the cursor's glide still. |
Window & Layout
| Key | Default | Description |
|---|---|---|
func_hidden | [] | Which status bar buttons are hidden, in the order Files, Services, Git, Database. |
terminal_hidden | false | The terminal button is hidden from the status bar. |
agent_hidden | false | The agent button is hidden from the status bar. |
show_diagnostics | true | Show the error/warning count in the status bar. |
show_cursor_position | true | Show the line and column of the cursor in the status bar. |
show_language | true | Show the active language of the editor in the status bar. |
global_lsp_settings.button | true | Show the language server button in the status bar. |
show_branch | true | Show the active workspace's branch in the title bar. |
show_session_name | true | Show the current session name in the title bar. |
General
| Key | Default | Description |
|---|---|---|
restore_on_startup | "last_session" | "last_session" reopens each workspace's tabs from last time; "none" starts without them. |
auto_update | true | The installed app checks for a newer release. Nothing installs until you restart. |
Editor
| Key | Default | Description |
|---|---|---|
soft_wrap | false | Newly opened files wrap long lines at the editor's width. |
split_diff | true | Diffs open side by side when the pane is wide enough, else in one column. |
external_editor | "" | The app "Open in External Editor" uses; empty picks the first one installed. |
Languages & Tools
| Key | Default | Description |
|---|---|---|
enable_language_server | true | Language servers start for the languages they serve; off, none does. |
language_servers | ["..."] | Which servers a language uses, in order: a name turns one on, !name turns it off, ... stands for the rest of its defaults. |
completions.lsp | true | Language servers are asked for completions. |
completions.lsp_fetch_timeout_ms | 0 | How long to wait for a server's completions, in milliseconds; 0 waits for them. |
go_to_definition_scroll_strategy | "center" | Where a definition lands in view: "center", "minimum", "top" or "preserve". |
diagnostics_max_severity | "all" | The least severe diagnostic shown: "off", "error", "warning", "info", "hint" or "all". |
diagnostics.inline.enabled | false | New editors show each line's diagnostic at its end. |
diagnostics.inline.padding | 4 | Columns between a line's end and its diagnostic. |
diagnostics.inline.min_column | 0 | The column inline diagnostics line up at, when the line is shorter. |
file_types | {} | Language names to the file names, extensions or * globs that are that language, over detection: {"JSON": ["*.jsonc"]}. |
languages | {} | Per language name, settings over the shared ones: enable_language_server, language_servers and completions (lsp, lsp_fetch_timeout_ms). Unset keys keep the shared value. |
Terminal
| Key | Default | Description |
|---|---|---|
terminal_shell | "" | The shell new terminals run, with its arguments; empty runs your login shell. |
terminal_scrollback | 10000 | Lines of history each new terminal keeps. |
Keymap
| Key | Default | Description |
|---|---|---|
vim_mode | false | Modal (vim) editing in the editor: Normal and Insert modes, motions and counts. |
Agent
| Key | Default | Description |
|---|---|---|
agent_command | "claude" | The AI CLI the Agent button opens in a workspace; claude also gets pom's MCP server and prompt. |
agent_open_in | "dock" | Where agents open: "dock" in the agent dock, "center" as a tab next to the code. |
agent_tab_close | "hide" | Closing an agent's tab: "hide" leaves the agent running, "stop" ends it. |
Notifications
| Key | Default | Description |
|---|---|---|
notify_claude | true | Banners and sounds when a workspace's Claude starts, finishes, needs input or compacts. Needs macOS notification permission. |
notify_when_focused | false | Also alert for the workspace on screen in the focused window. |
sound_working | "" | The macOS sound played when an agent starts working; empty plays nothing. |
sound_finished | "Glass" | The macOS sound played when an agent finishes; empty plays nothing. |
sound_needs_input | "Ping" | The macOS sound played when an agent needs your input; empty plays nothing. |
sound_compacting | "" | The macOS sound played when an agent compacts its context; empty plays nothing. |
Dev Services
| Key | Default | Description |
|---|---|---|
dev_proxy_enabled | true | Run the dev proxy while a project is open. |
dev_proxy_port | 8767 | The dev proxy's port: a service opens at <service>.<repo>.<ticket or branch>.localhost:<port>. Restart running services after changing it. |
webhook_enabled | true | Run the webhook relay while a project is open. |
webhook_port | 8766 | The webhook relay's port: point an external webhook at localhost:<port>/<repo>/<service>. |
modules_store_enabled | true | A new workspace whose lockfile matches a stored one takes its node_modules instead of installing. |
modules_fallback | "hardlink" | Where a copy-on-write clone is impossible: "hardlink", "copy" or "install" (skip the store). |
modules_size_limit_gb | 20 | GB the node_modules store keeps at most; the least recently used copies go first. |
modules_unused_days | 14 | Days a stored copy is kept without a workspace taking it (0 keeps them until the size limit). |
Integrations
| Key | Default | Description |
|---|---|---|
jira_only_mine | false | The new-workspace ticket picker lists only Jira tickets assigned to you. |
group_workspaces | false | The WORKSPACES list is grouped under its tickets' statuses. |
Kept by the app
| Key | Default | Description |
|---|---|---|
onboard_with_ai | true | New projects are finished by the coding agent; off, you review the drafted pom.yml yourself. |
jira_board | 0 | The Jira board the ticket picker opened on last (0: none yet). |
sidebar_side | "left" | The dock the sidebar lives in: "left", "right" or "bottom". |
agent_side | "right" | The dock the agent lives in. |
terminal_side | "bottom" | The dock the terminal lives in. |
func_sides | [] | The dock each status bar button lives in, in the order of func_hidden. |
left_dock_width | 260.0 | Width of the left dock, in points. |
right_dock_width | 300.0 | Width of the right dock, in points. |
left_dock_collapsed | false | The left dock is closed. |
right_dock_collapsed | true | The right dock is closed. |
bottom_dock_collapsed | false | The bottom dock is closed. |
panels_collapsed | false | The left panel column (Files, Services, ...) is closed. |
