Settings
This page is generated from the app’s own tables on every build of the site, so it matches the release it was built with.
Settings live in ~/.config/infiniterm/settings.json. Beside it, settings.default.json lists every setting with its default and is rewritten at every launch, so edits there are lost; copy a line into settings.json and change it there. Keys are flat and dotted, VS Code style: "terminal.fontSize": 16 is a whole override. Comments and trailing commas are allowed.
Default: "Violite"
Terminal colour scheme, by file name without the extension, from ~/Library/Application Support/dev.ekinertac.infiniterm/themes/. Five hundred schemes are put there on first launch; any .itermcolors file dropped in is picked up too. “Switch theme” in the palette writes it here.
startingDir
Section titled “startingDir”Default: ""
Where the first card’s shell starts. Empty means your home directory. Cards opened afterwards inherit the directory of the card they were opened next to, so this is the root of that chain rather than an override.
terminal
Section titled “terminal”The terminals themselves. Changes reach cards that are already open.
terminal.shell
Section titled “terminal.shell”Default: ""
Program to run in a new card, with any arguments (“/bin/zsh -l”, “fish –private”). Empty uses your login shell ($SHELL). Only affects cards opened afterwards; a running shell is not restarted.
terminal.backend
Section titled “terminal.backend”Default: "daemon"
Where a card’s shell lives: “pty”, “tmux”, or “daemon”. pty is a plain local shell that dies with the window. tmux keeps the shell running when infiniterm quits, and the same sessions are reachable with tmux attach -t infiniterm from any terminal. Each card is one tmux window, but tmux is a second terminal emulator: a program that redraws INLINE, like Claude Code, can come out with two lines in one row, because two emulators are tracking one program and a redraw that never clears never recovers from a disagreement. Shells and full-screen programs are fine. daemon, the default, runs one small iftd sidecar per card: it parses no terminal output at all, so a reattach after infiniterm quits replays the exact bytes our own emulator would have seen live, with no second emulator to disagree with. ift sessions and ift attach <id> reach a daemon card’s shell even with infiniterm not running. Neither tmux nor daemon is the default yet, pending more use.
terminal.cursorStyle
Section titled “terminal.cursorStyle”Default: "block"
“block”, “bar”, or “underline”.
terminal.cursorBlink
Section titled “terminal.cursorBlink”Default: true
Whether the cursor blinks.
terminal.cursorColor
Section titled “terminal.cursorColor”Default: ""
The cursor’s colour as a hex colour (“#ffcc00”). Empty follows the theme. The letter under a block cursor is drawn in black or white, whichever reads.
terminal.fontFamily
Section titled “terminal.fontFamily”Default: "ui-monospace, Menlo, monospace"
Any monospace family installed on the system. A Nerd Font is needed for the powerline segments and icons most shell prompts draw.
terminal.fontSize
Section titled “terminal.fontSize”Default: 14
In points. The cell size, and so the card grid, follows it.
terminal.fontWeight
Section titled “terminal.fontWeight”Default: "normal"
Weight for normal text: “normal”, “bold”, or 100-900.
terminal.fontWeightBold
Section titled “terminal.fontWeightBold”Default: "bold"
Weight for text the shell asks to be bold.
terminal.letterSpacing
Section titled “terminal.letterSpacing”Default: 0
Extra pixels between characters; negative tightens. Narrow faces such as Iosevka read loosely tracked at 0, since xterm rounds the cell width up.
terminal.lineHeight
Section titled “terminal.lineHeight”Default: 1.2
Multiple of the font size. 1.2 is tighter than the 1.25 a font asks for.
terminal.scrollback
Section titled “terminal.scrollback”Default: 10000
Lines kept per card. Costs memory per card, not per app.
terminal.sessionBuffer
Section titled “terminal.sessionBuffer”Default: 4
MiB of raw output the “daemon” backend keeps per card, replayed on reattach. Ignored by “pty” and “tmux”. Turn it down to shrink the worst case of many cards each holding a full buffer; turn it up if a card’s early output is gone by the time you reattach to it.
terminal.decoyCommand
Section titled “terminal.decoyCommand”Default: "command log stream --style compact"
What Cmd+Shift+H runs over the focused card when somebody is reading your screen: a program that looks like work and says nothing. The card underneath keeps running unseen; Enter or Escape brings it back. “ping 8.8.8.8” and “top” are the other classics. It runs through a login shell, not an interactive one, so a PATH set in .zshrc is not there: give a Homebrew program its full path, cron’s rule (“/opt/homebrew/bin/htop”). On Windows it runs through PowerShell instead, so write it as PowerShell.
terminal.copyOnSelect
Section titled “terminal.copyOnSelect”Default: false
Copy a mouse selection to the clipboard as soon as it is made.
terminal.reverseLinkClick
Section titled “terminal.reverseLinkClick”Default: false
Swap what Cmd+click and Cmd+Shift+click do on a URL. Off: Cmd+click opens a browser card beside the terminal, Cmd+Shift+click your default browser. On: the other way round.
terminal.scrollMultiplier
Section titled “terminal.scrollMultiplier”Default: 1
Scroll speed: lines per wheel step, times this. 0.1 to 10.
terminal.padding
Section titled “terminal.padding”Default: 6
Space between a card’s edge and its text, in points at 100% zoom. 0 to 60.
terminal.env
Section titled “terminal.env”Default: []
Extra environment for every new card, as “KEY=value” strings, e.g. [“EDITOR=ift”, “LANG=en_US.UTF-8”]. Cards already open keep theirs.
New cards: how big they are and where they start.
cards.width
Section titled “cards.width”Default: 0
Width in 25px grid squares of canvas (not text columns), or 0 to size new cards from the window: the canvas at 100% minus a margin, at most 80 squares wide. 69 is 1725px, a full iTerm2 window. At terminal.fontSize 19 a square is about 2.6 text columns, so 50 is about 130 columns. Existing cards keep the size they have.
cards.height
Section titled “cards.height”Default: 0
Height in 25px grid squares of canvas (not text rows), or 0 to size from the window. 80 is 2000px; at terminal.fontSize 19 and lineHeight 1.2 that is about 87 text rows.
cards.shape
Section titled “cards.shape”Default: "16:9"
The shape of a card sized from the window: a ratio like “16:9” or “4:3”, or “window” for the window’s own shape. 16:9 keeps every card the same shape on every Mac and after a window resize; “window” makes one card fill the window exactly when fitted. Used only where width or height is 0.
cards.inheritDirectory
Section titled “cards.inheritDirectory”Default: true
Whether a card carved out of another one keeps its directory. That is a split (Cmd+D, Cmd+Shift+D) and a card opened onto what the active card is showing. A plain new card (Cmd+T, Cmd+Alt+T) always starts at startingDir: a new card is a new place to work.
cards.newCardInheritsDirectory
Section titled “cards.newCardInheritsDirectory”Default: false
Whether a new terminal card (Cmd+T, Cmd+Alt+T) starts in the directory of the terminal card you opened it from, instead of startingDir. Off by default. From any other kind of card, or with nothing selected, it still starts at startingDir.
cards.gap
Section titled “cards.gap”Default: 25
The space between cards, in pixels (0 to 200, 25 by default). New cards, splits, growing a card, Canvas: tidy and group frames all use it. Cards already on the canvas stay where they are; a different gap shows as cards are added or tidied.
canvas
Section titled “canvas”The canvas itself: zooming and panning.
canvas.zoomSensitivity
Section titled “canvas.zoomSensitivity”Default: 1
Multiplier on Cmd+scroll zooming. Below 1 is slower, above is faster.
canvas.momentum
Section titled “canvas.momentum”Default: true
Whether the canvas keeps gliding after you release a pan drag.
editor
Section titled “editor”Editor cards. Font and colours follow the terminal; these are the extras. The selection colours apply to terminals too, so both select alike.
editor.highlightLine
Section titled “editor.highlightLine”Default: true
A wash behind the line the cursor is on.
editor.completeWords
Section titled “editor.completeWords”Default: true
Offer words from the file and the card’s other tabs while you type in an editor (two letters open the list, Tab takes the top one, Enter only after you moved the row). Inside comments and strings of a file with a grammar, words are not collected. settings.json and files that name a JSON schema complete their own keys regardless.
editor.folderScratchTab
Section titled “editor.folderScratchTab”Default: true
An editor card opened on a folder starts with a blank, unsaved buffer in its first tab. Off: the card has no buffer, only the folder’s name over the tree, and the pane stays empty until you open a file.
editor.explorer
Section titled “editor.explorer”editor.explorer.icons
Section titled “editor.explorer.icons”Default: false
Icons in the editor’s file tree: a closed or open folder in place of the arrow, and an icon for each file’s type, as VS Code’s Material Icon Theme draws them. Off by default.
editor
Section titled “editor”Editor cards. Font and colours follow the terminal; these are the extras. The selection colours apply to terminals too, so both select alike.
editor.formatOnSave
Section titled “editor.formatOnSave”Default: false
Run the file’s formatter over an editor’s text when you save it (Cmd+S). Off by default, because it rewrites the file and runs a program. The formatter is Prettier for JavaScript, TypeScript, TSX, JSON, CSS, SCSS, HTML, markdown and YAML, rustfmt for Rust, gofmt for Go and black for Python, found in the project’s node_modules/.bin, on PATH or in the usual Homebrew and cargo folders. A formatter that is missing, fails or takes longer than eight seconds leaves your text as it is and the file is saved anyway, with a note in the status bar. Only files on this machine.
editor.lsp
Section titled “editor.lsp”editor.lsp.enabled
Section titled “editor.lsp.enabled”Default: false
Ask a language server for completions while you type in an editor. Off by default: a server is an external program (rust-analyzer, typescript-language-server, pyright, gopls) you install yourself, and rust-analyzer on a large crate holds a lot of memory. A server starts when you first type in a file of its language and stops when the last tab of that language closes; with this off nothing runs. Used for Rust, JavaScript, TypeScript, TSX, Python and Go; markdown, JSON, YAML and TOML keep their own completions. Only files on this machine.
editor
Section titled “editor”Editor cards. Font and colours follow the terminal; these are the extras. The selection colours apply to terminals too, so both select alike.
editor.selectionColor
Section titled “editor.selectionColor”Default: ""
Behind selected text, as a CSS colour. Empty is the theme’s yellow: a highlighter pen, visible on any scheme.
editor.selectionTextColor
Section titled “editor.selectionTextColor”Default: ""
Selected text itself. Empty is the theme’s background, dark on the yellow.
editor.cursorColor
Section titled “editor.cursorColor”Default: ""
The caret’s colour as a hex colour. Empty follows the theme.
editor.wrap
Section titled “editor.wrap”Default: "prose"
Long lines. “prose” wraps .md and .txt and leaves code alone; “always” and “never” do what they say.
browser
Section titled “browser”Browser cards. The page stays at its own size whatever the canvas zoom is.
browser.zoom
Section titled “browser.zoom”Default: 1
Page zoom a new browser card opens at; 1 is actual size, 0.3 to 3. The browser zoom commands change it per card while the page is focused.
browser.searchEngine
Section titled “browser.searchEngine”Default: "https://www.google.com/search?q=%s"
Where the omnibox (Cmd+L) sends a search; %s is the encoded query. A template without %s is ignored: it would drop what you typed.
browser.suggestions
Section titled “browser.suggestions”Default: false
Ask Google to complete what you type in the omnibox. OFF by default: every keystroke goes to Google while it is on. Nothing else in this app talks to the network on its own.
browser.devtools
Section titled “browser.devtools”Default: true
Let a browser card open DevTools (the palette’s Browser: open DevTools). ON by default. It opens a debugging port on a random loopback port; only our own DevTools page may connect to it, a web page cannot. A program on this Mac can still attach to the port: turn it off if that matters to you. Read at launch: restart after changing it.
browser.engines
Section titled “browser.engines”Default: []
Extra sites Tab can scope a search to, added to the nine built in (Google, GitHub, YouTube, Wikipedia, Stack Overflow, MDN, npm, crates.io, docs.rs). Each is {keyword, name, searchUrl}, where keyword is what you type and searchUrl is a template with %s. A keyword that is already built in replaces it.
join.enabled
Section titled “join.enabled”Default: true
Open the socket that ift join <host> on another Mac reaches through ssh, so it can show and drive this canvas. The socket is owner-only, like the one ift send uses, and ssh is the only way in. Read at launch.
notify.ntfy
Section titled “notify.ntfy”notify.ntfy.server
Section titled “notify.ntfy.server”Default: "https://ntfy.sh"
The ntfy server a phone push is posted to when a card needs you. Push is off until the file ntfy-topic exists in this folder with one line: your topic. The topic is a secret (anyone who knows it can read and post), so it is not a setting and must not be committed. Use 20 or more random characters.
notify
Section titled “notify”notify.waiting
Section titled “notify.waiting”Default: true
Push when a card starts waiting on you.
notify.failed
Section titled “notify.failed”Default: true
Push when a card fails.
notify.done
Section titled “notify.done”Default: true
Push when a card finishes.
notify.skipWhenFocused
Section titled “notify.skipWhenFocused”Default: true
No push while the infiniterm window is in front: you can see the card colours.
The app’s own chrome: labels, the status bar, the grid. How it LOOKS (fonts, window, background, card corners) is not set here but in a ui theme file, ui-themes/<name>.json beside this one; ui.theme picks it.
ui.theme
Section titled “ui.theme”Default: "default"
Which ui theme gives the look: the file name in the ui-themes folder, without .json. “default” is ui-themes/default.json (the built-in look if the file is gone). A name with no file keeps the look you had and shows a notice. “UI theme: switch…” in the palette previews them and writes it here.
ui.fontFamily
Section titled “ui.fontFamily”Default: ".SystemUIFont"
Font family for the app’s own chrome. .SystemUIFont, the default, is the platform’s native app UI font. A comma-separated list uses the first real name.
ui.fontSize
Section titled “ui.fontSize”Default: 13
Base chrome size in screen pixels, before the Cmd+Shift+= multiplier. Workspace tabs, card tab strips, palettes and dialogs derive their sizes from it.
ui.fontWeight
Section titled “ui.fontWeight”Default: "normal"
Normal chrome weight: “normal”, “bold”, or a number from 100 to 900.
ui.fontWeightBold
Section titled “ui.fontWeightBold”Default: "bold"
Emphasised chrome weight: “normal”, “bold”, or a number from 100 to 900.
ui.inactiveDim
Section titled “ui.inactiveDim”Default: 0.45
How much an unfocused card’s text is dimmed, 0 to 1. Painted as a scrim over the text rather than as opacity, which would blur it.
ui.unfocusedDim
Section titled “ui.unfocusedDim”Default: 0.4
How much the whole canvas is dimmed while another app is in front, 0 to 1. Says at a glance that keys are going elsewhere. 0 turns it off.
ui.windowOpacity
Section titled “ui.windowOpacity”Default: 1
How opaque the window’s own fill is, 0.1 to 1: the canvas background, title bar and status bar. Below 1 the desktop shows through; cards stay solid.
ui.windowBlur
Section titled “ui.windowBlur”Default: false
Blur what is behind the window. Only does anything while ui.windowOpacity is below 1.
ui.backgroundImage
Section titled “ui.backgroundImage”Default: []
A picture behind the canvas: the name of one that comes with the app (“dusk”, “aurora”, “ember”) or a path to your own, “” allowed. Empty for none. A list of them rotates: [“dusk”, “/Pictures/lake.jpg”]. It is drawn opaque, so ui.windowOpacity does not show the desktop through it. Only the picture on screen and the next one are kept in memory, a 4K one is about 65 MB, so a long list costs no more than a short one.
ui.backgroundImageFit
Section titled “ui.backgroundImageFit”Default: "cover"
“cover” fills the window and crops the edges; “contain” shows the whole picture; “top-left” fills like cover but pins the picture’s top-left corner to the window’s, so only the right and bottom are cropped; “actual-size” draws it at its own size from the top-left corner and never rescales it when the window is resized.
ui.backgroundImageInterval
Section titled “ui.backgroundImageInterval”Default: 300
Seconds each picture of a ui.backgroundImage list stays before the next fades in. 5 to 86400.
ui.backgroundImageFade
Section titled “ui.backgroundImageFade”Default: 2
Seconds the crossfade between two pictures takes; 0 changes at once. A fade is an animation, so it is a cut while ui.animations is off or the system reduces motion.
ui.workspaceIsolation
Section titled “ui.workspaceIsolation”Default: false
Ctrl+Tab switches between the current workspace’s cards only, and the status bar counts this workspace’s cards, not every workspace’s. The palette still lists every card, so it stays the way to jump to another workspace.
ui.windowColor
Section titled “ui.windowColor”Default: ""
A colour for the title bar and the Dock icon: a name (red, orange, amber, yellow, lime, green, emerald, teal, cyan, sky, blue, indigo, violet, purple, pink, rose, gray) or a hex code like 3b82f6. Empty for none. The palette’s “Window: change the title bar and Dock colour” sets it. A window opened by ift connect wears its host’s.
ui.cardOpacity
Section titled “ui.cardOpacity”Default: 1
How opaque a card’s background is, 0.1 to 1. Text stays solid, so it never gets blurry; below 1 the canvas, the grid and ui.backgroundImage show through. Cells a program colours itself (vim’s status line) and browser cards stay opaque.
ui.cardGradient
Section titled “ui.cardGradient”Default: []
Paint a card’s background as a gradient: two colours, [“#3a2c27”, “#1f1a18”] (#rgb, #rrggbb or #rrggbbaa; a stop’s own alpha is kept). [] keeps the flat fill. ui.cardOpacity multiplies the alpha of both stops, so the gradient stays translucent over ui.windowOpacity and ui.windowBlur. Browser cards stay flat.
ui.cardGradientAngle
Section titled “ui.cardGradientAngle”Default: 180
The gradient’s direction in degrees, 0 to 360: 0 points up, 90 right, 180 (the default) runs from the first colour at the top to the second at the bottom. Only used when ui.cardGradient is set.
ui.focusRingWidth
Section titled “ui.focusRingWidth”Default: 0
The focus ring’s width in screen pixels, 0 to 10, at every zoom. 0, the default, keeps the built-in 3, 4 or 5 pixels by zoom. The strip of canvas between the card and its ring is as wide as the ring, so a thinner ring also closes that gap.
ui.cardRadius
Section titled “ui.cardRadius”Default: 0
Round the corners of cards and group frames, in pixels at 100% zoom (0 to 40). 0, the default, keeps them square. The radius scales with the zoom like the card.
ui.cardZoom
Section titled “ui.cardZoom”Default: 1.5
The canvas scale Cmd+1 zooms to on a terminal card that is already fitted: 1.5 is 150%, with the card’s bottom at the window’s bottom, so you read the prompt and the newest lines larger. Cmd+Up and Cmd+Down pan along the card, Cmd+1 or Cmd+2 leaves, and typing returns the view to the bottom. 0 turns it off: a second Cmd+1 does nothing new. 1.1 to 4. It was called ui.readZoom, which still works.
ui.glyphBudget
Section titled “ui.glyphBudget”Default: 150000
How many terminal cells (text columns times rows, not cards.width squares) may be on screen, across every visible card, before the canvas draws all of them as bars instead of text. Default 150000, about eleven full cards. A card of cards.width 50 by cards.height 80 holds about 11000 at terminal.fontSize 19, so twelve need about 130000. A window covered edge to edge in cards reads down to about 82% zoom, and the limit grows with the window. Each cell costs at most 50 nanoseconds a frame, so 150000 is under 8 ms while the canvas moves; raise it until zooming gets slow. 1000 to 5000000.
ui.minTextPx
Section titled “ui.minTextPx”Default: 7
How many device pixels tall a font must be on screen before its text is drawn; below that every card draws bars instead. Default 7: with terminal.fontSize 19 that is 37% zoom on a 1x screen, so a canvas of 20 cards zoomed out to 34% is bars whatever ui.glyphBudget says. 4 draws the text down to about 21% (tiny, but you see its shape). A retina screen keeps a floor of 4.5 points unless this is lower. 2 to 20.
ui.textAsBars
Section titled “ui.textAsBars”Default: false
Off (the default): every card draws its text at every zoom, however small and however many cards are on screen. On: a card draws faint bars instead of text when its font is smaller than ui.minTextPx or more than ui.glyphBudget cells are on screen, which keeps the canvas fast on a slow Mac. Measured on an M4 Mac mini, 18 cards printing at once while zooming: about 45 frames a second with text, and no faster with bars.
ui.showGrid
Section titled “ui.showGrid”Default: true
Draw the canvas grid. Off leaves the canvas background plain.
ui.fitPadding
Section titled “ui.fitPadding”Default: 48
Screen pixels left around a card or cluster when it is fitted (Cmd+1, Cmd+2, Cmd+3). 0 lets a card touch the window’s edges.
ui.fitMagnify
Section titled “ui.fitMagnify”Default: false
Let a fit zoom past 100% so a card fills the window. Off: a fit never magnifies, and a card smaller than the window sits in open canvas.
ui.fitSplitSlot
Section titled “ui.fitSplitSlot”Default: true
Cmd+1 on a card that was split frames the whole slot, both halves together. Off: it fits the card itself and fills the window with it.
ui.cardLabelSize
Section titled “ui.cardLabelSize”Default: 15
Screen pixels, before the Cmd+Shift+= multiplier, at 60% zoom and closer; 1.1x below 60% and 1.45x below 25%, so a name still registers zoomed far out. Separate from the other sizes for that reason.
ui.cardLabelPosition
Section titled “ui.cardLabelPosition”Default: "top right"
The corner of a card its label sits in: “top right”, “top left”, “bottom left” or “bottom right”. An ssh chip moves to the other side of the same edge.
ui.hideLabelWhenMaximised
Section titled “ui.hideLabelWhenMaximised”Default: false
No label on a maximised card: it fills the window and the status bar names it.
ui.hideLabelWhenFitted
Section titled “ui.hideLabelWhenFitted”Default: false
No label on the card Cmd+1 fitted to the window, like ui.hideLabelWhenMaximised does for a maximised one, nor on the only card of a workspace. A ui theme key.
ui.icon
Section titled “ui.icon”Default: "default"
The picture in the Dock: “default” (four outlined cards) or “filled”. A ui theme key. The Finder and Launchpad icon stays the default: a running app cannot change it.
ui.hideBuildNumber
Section titled “ui.hideBuildNumber”Default: false
No “build N” at the right end of the status bar.
ui.hideVersion
Section titled “ui.hideVersion”Default: false
No version number (like 0.6.9) at the right end of the status bar.
ui.groupLabelSize
Section titled “ui.groupLabelSize”Default: 15
Screen pixels. A group name sits above a block of cards.
ui.statusBarSize
Section titled “ui.statusBarSize”Default: 11
Screen pixels. The status bar is always at arm’s length.
ui.panStep
Section titled “ui.panStep”Default: 120
How far one press of Cmd+Ctrl+Shift+Arrow moves the canvas, in screen pixels (20 to 1000). A held key repeats, so a smaller step is a slower pan.
ui.animations
Section titled “ui.animations”Default: true
Zooming, panning and card swaps animate rather than jumping. The system “reduce motion” setting switches them off regardless of this.
ui.showFps
Section titled “ui.showFps”Default: false
Frame counter in the status bar, shown while frames are drawn back to back (a zoom, a pan, a drag, fast output); nothing at rest, where the app draws only when something changes. Orange below 50.
ui.showWhatsNew
Section titled “ui.showWhatsNew”Default: true
Show the changelog in an overlay the first time you open a new version after an update. Escape or the X in its corner closes it. “Help: show what’s new” opens it any time.
ui.statusBarPwd
Section titled “ui.statusBarPwd”Default: false
Show the focused terminal card’s directory in the status bar at all times. The card label shows the running program instead of the directory while one runs; this keeps the path visible then too. Home is written as ~.
ui.statusBarPwdSide
Section titled “ui.statusBarPwdSide”Default: "left"
Which end of the status bar the directory goes on: “left” (after the card label) or “right”. Only used when ui.statusBarPwd is on.
ui.fullscreen
Section titled “ui.fullscreen”Default: "cover"
What the green button and Cmd+Ctrl+F do. “cover” makes the window cover the whole screen, the strip beside a MacBook’s notch included, with the menu bar and Dock hidden until the pointer reaches them. “native” is macOS’s own full screen: a Space of its own, content starting below the notch.
keyboard
Section titled “keyboard”keyboard.commandModifier
Section titled “keyboard.commandModifier”Default: "ctrl"
Linux and Windows: which key plays Cmd’s part, since they have none. “ctrl”: Ctrl, with Shift where plain Ctrl is the terminal’s (Ctrl+Shift+T a new card, Ctrl+Shift+C copy, Ctrl+1 fit a card); plain Ctrl+letter always reaches the terminal. “super” (Linux only): the Mac’s chords with Super for Cmd, Ctrl left whole for the terminal, at the cost of the Super chords your desktop takes first. Ignored on macOS.