Skip to content

Import / Export ​

Otty can read configs from other terminals (Ghostty, Kitty, Alacritty) and write your current Otty config back out in any of those formats — useful when you're trying Otty alongside an existing setup, or when you want to share a configuration with someone who hasn't switched.

The same machinery is reachable two ways:

  • Settings → Advanced → Config File has Import / Export rows with a source picker (Ghostty / Kitty / Alacritty).
  • CLI: otty import <source> [path] and otty export <source> [-o path].

settings import / export

All conversions go through Otty's classification engine. Every line in the source file lands in one of four buckets:

BucketWhat it means
SupportedOtty has the same key; the value is written as-is (or value-translated).
ConflictSame key in Otty, but your current value is different. You decide per-row: keep current or overwrite.
SimilarOtty has a close analog (e.g. window-padding-x ≈ ui-padding). Not auto-imported — the dialog shows a note so you can decide manually.
Source-onlyThe source terminal has the concept, Otty does not. The dialog lists each key with a docs link so you can browse Otty's surface for an alternative.

On the export side, every Otty key that the target terminal does not support is collected into a "dropped" list — same display treatment, with docs links to the Otty key.

Supported sources ​

Each terminal below has a per-key support table. It's collapsed by default — expand it to see exactly which keys import automatically, which map to a different Otty key, and which Otty settings have no counterpart in that terminal.

Ghostty ​

Default path: ~/.config/ghostty/config (with macOS Application Support fallback: ~/Library/Application Support/com.mitchellh.ghostty/config).

Both use a line-based key = value format, so a Ghostty config parses directly into Otty — but the two terminals don't share every key. Most of Ghostty's appearance and behavior keys map straight through; a handful translate to a different Otty key, and Otty's app-specific settings (agents, autocomplete, notifications, …) have no Ghostty equivalent.

Config key support — Ghostty · click to expand the full key list

Imported automatically — written straight into your Otty config (value-translated where noted). A ✓ means the key name and behavior are identical.

GhosttyOttyNotes
font-family✓
font-family-bold✓
font-family-italic✓
font-family-bold-italic✓
font-size✓
font-thicken✓
adjust-cell-height✓
command✓
env✓
working-directory✓
term✓
scrollback-limit✓
foreground✓
background✓
selection-foreground✓
selection-background✓
minimum-contrast✓
cursor-style✓
cursor-color✓
cursor-text✓
cursor-opacity✓
mouse-hide-while-typing✓
mouse-scroll-multiplier✓
focus-follows-mouse✓
macos-option-as-alt✓
clipboard-read✓
clipboard-write✓
clipboard-trim-trailing-spaces✓
copy-on-select✓
clipboard-paste-protection✓
theme✓
background-opacity✓
keybind✓
kitty-keyboard✓
palette✓
link-previews✓
unfocused-split-opacity✓

Similar — Otty has a close-but-not-identical knob, so these are shown as a note for you to apply manually (never auto-written).

GhosttyOtty (closest)Notes
mouse-shift-capturemouse-shift-to-selectpolarity flipped: ghostty true = capture forwarded → Otty false (no local select)
window-padding-xui-paddingOtty unifies horizontal/vertical padding under the active theme's [container].padding
window-padding-yui-paddingOtty unifies horizontal/vertical padding under the active theme's [container].padding
window-padding-balanceui-paddingOtty's padding is theme-driven; no per-axis balance knob
window-decorationauto-hide-tab-barOtty has no full chrome-off mode; closest is hiding the tab bar
background-blur-radiusbackground-opacityOtty uses material blur via theme [window].material (glass/vibrancy); no numeric radius
link-urllink-open-withOtty configures the URL handler choice, not regex match
confirm-close-surfaceconfirm-close-tabOtty's analog applies per tab, not per surface
quit-after-last-window-closed-delayquit-after-last-window-closedOtty quits immediately when enabled; no grace period
shell-integrationshell-integrationghostty's value is an injection-mode enum (none / detect / zsh / bash / fish); Otty's is a simple on/off toggle — set it manually (none → off, any other value → on)
shell-integration-featuresshell-integrationOtty has no per-feature list (ghostty's cursor / sudo / title / ssh-*); its shell integration is a single on/off switch, with remote sessions covered by ssh-integration

No Ghostty equivalent — Otty-only settings; dropped (with a docs link) when you export to Ghostty.

Otty key
font-family-fallbackfont-family-fallback-bold
font-family-fallback-italicfont-family-fallback-bold-italic
font-blendingfont-smooth
font-antialiasedtext-bold
text-italictext-underline
text-blinkfont-ligatures
ligaturesfont-ligatures-alphabet
arrow-box-drawing-joinlive-resize-sigwinch-delay-ms
shellwindow-working-directory
tab-working-directorysplit-working-directory
enquiry-responseosc-color-report-format
title-reportvt-kam-allowed
scrollback-linessession-log-size-mb
session-log-modesession-restore-banner
session-restore-multiplayersession-restore-processes
session-restore-process-allowlistfreeze-inactive-tab
agent-command
window-sizewindow-width-px
window-height-pxwindow-cols
window-rowsbold-color
faint-opacitycursor-style-blink
cursor-animationmouse-reporting
right-click-actionmouse-shift-to-select
cursor-click-to-movelink-open-with
file-open-withfolder-open-with
link-schemeslink-scheme-allowlist
scroll-to-bottomclipboard-paste-bracketed-safe
selection-clear-on-typingselection-clear-on-copy
theme-darkauto-theme-dark-mode
sidebar-visiblesidebar-width
details-panel-widthwindow-layout
auto-hide-tab-barauto-hide-tabs-panel
shift-arrow-selectssh-integration
omit-otty-prefixcli-allow-overwrite
open-with-appdefault-git-client
progress-bar-commandsvt-keypad-app-allowed
widen-ambiguouslogin-greeting
window-opacitydock-icon-animate-progress
dock-icon-error-badgeui-panel-background
ui-panel-surfaceui-panel-border
ui-border-subtleui-text-primary
ui-text-secondaryui-text-tertiary
ui-hoverui-active
ui-accentui-font-family
ui-font-sizelanguage
on-launchquit-after-last-window-closed
confirm-close-tabconfirm-close-window
new-tab-positionautocomplete-shortcut
autocomplete-show-candidatesautocomplete-inline-suggestion
autocomplete-on-device-learningautocomplete-history-ignore
autocomplete-description-languageprivilege-sound-on-error
privilege-sound-shellprivilege-notification-on-finish
privilege-notification-on-errorprivilege-notification-on-watch-finish
privilege-notification-shellnotification-foreground
privilege-badge-exit-statusprivilege-badge-activity
privilege-badge-agent-processingprivilege-badge-agent-task-complete
privilege-badge-agent-awaiting-inputprivilege-notify-agent-task-complete
privilege-notify-agent-awaiting-inputprivilege-caffeinate-agent-processing
privilege-resume-agent-sessionprivilege-mouse-shell
privilege-title-shellprivilege-clipboard-shell
ipc-allow-send-keys
ipc-allow-sensitive-sessionsauto-secure-input
secure-input-indicationquick-terminal-persist-session
quick-terminal-cwdrecipe-replay-saved
recipe-replay-fileopen-quickly-folders-limit
frecency-auto-recordzoxide-enabled
zoxide-local-patheditor-line-wrap
editor-tab-sizeeditor-visible-whitespace
editor-show-line-numberseditor-default-to-preview-readonly
editor-scroll-past-endterminal-scroll-past-end
terminal-scroll-past-first-lineterminal-scroll-past-end-sticky
terminal-scroll-smoothselection-backspace-deletes
terminal-scrollbar-hide-on-auto-scroll

Kitty ​

Default path: ~/.config/kitty/kitty.conf.

Kitty uses key value (space-separated, no =) with _ in key names. The adapter converts each key mechanically — font_family → font-family — and value-translates where the two terminals disagree (e.g. cursor_shape beam → cursor-style = bar). Keybinds (map …) are reported as similar so you can review them.

Config key support — Kitty · click to expand the full key list

Imported automatically — written straight into your Otty config (value-translated where noted). A ✓ means the key name and behavior are identical.

KittyOttyNotes
background_opacity✓
focus_follows_mouse✓
mouse_hide_waitmouse-hide-while-typingseconds value → boolean
scrollback_lines✓
cursor_shapecursor-styleshape names differ (beam→bar)
cursorcursor-color
cursor_text_colorcursor-text
selection_foreground✓
selection_background✓
foreground✓
background✓
font_family✓
bold_fontfont-family-bold
italic_fontfont-family-italic
bold_italic_fontfont-family-bold-italic
font_size✓
term✓
shellcommand
editorcommand
copy_on_select✓
strip_trailing_spacesclipboard-trim-trailing-spaces
color0 … color15palette→ palette = N=#hex

Similar — Otty has a close-but-not-identical knob, so these are shown as a note for you to apply manually (never auto-written).

KittyOtty (closest)Notes
window_padding_widthui-paddingOtty's padding is theme-driven ([container].padding); kitty's single number maps to all four sides
active_tab_backgroundui-activeOtty derives tab background from the active theme; closest knob is the chrome ui-active color
inactive_tab_backgroundui-panel-backgroundSame — chrome color, not per-tab
tab_bar_edgeauto-hide-tab-barOtty toggles the tab bar's presence rather than its edge
tab_bar_stylewindow-layoutOtty controls tab placement via window-layout (sidebar / top / bottom)
hide_window_decorationsauto-hide-tab-barOtty has no full chrome-off mode; hiding the tab bar gets you the most chrome-free view
scrollback_pagersession-log-modeOtty has its own scrollback pager and session-log redaction; kitty's external pager has no direct equivalent
shell_integrationshell-integrationkitty's value is a feature list (enabled / no-cursor / no-title / disabled); Otty's is a simple on/off toggle — set it manually (disabled → off, else on)
background_blurbackground-opacityOtty uses theme-driven material blur; kitty's blur radius doesn't translate
includethemeOtty does not chase include directives. To bring in kitty themes, set theme = ... after import
mapkeybindKitty keybinds parsed individually — see the keybind rows in the supported list
cursor_blink_intervalcursor-style-blinkOtty toggles cursor blink, no per-interval timing
cursor_stop_blinking_aftercursor-style-blinkSame — boolean, not timeout
inactive_text_alphaunfocused-split-opacitykitty fades only the text of unfocused splits; Otty fades the whole pane (text + background)

No Kitty equivalent — Otty-only settings; dropped (with a docs link) when you export to Kitty.

Otty key
font-family-fallbackfont-family-fallback-bold
font-family-fallback-italicfont-family-fallback-bold-italic
font-blendingfont-smooth
font-antialiasedtext-bold
text-italictext-underline
text-blinkfont-ligatures
ligaturesfont-ligatures-alphabet
font-thickenarrow-box-drawing-join
live-resize-sigwinch-delay-msadjust-cell-height
shellenv
working-directorywindow-working-directory
tab-working-directorysplit-working-directory
enquiry-responseosc-color-report-format
title-reportvt-kam-allowed
scrollback-limitsession-log-size-mb
session-log-modesession-restore-banner
session-restore-multiplayersession-restore-processes
session-restore-process-allowlistfreeze-inactive-tab
agent-command
window-sizewindow-width-px
window-height-pxwindow-cols
window-rowsbold-color
faint-opacityminimum-contrast
palettecursor-style-blink
cursor-opacitycursor-animation
mouse-reportingmouse-scroll-multiplier
macos-option-as-altright-click-action
mouse-shift-to-selectcursor-click-to-move
link-open-withfile-open-with
folder-open-withlink-schemes
link-scheme-allowlistlink-previews
scroll-to-bottomclipboard-read
clipboard-writeclipboard-paste-protection
clipboard-paste-bracketed-safeselection-clear-on-typing
selection-clear-on-copytheme
theme-darkauto-theme-dark-mode
sidebar-visiblesidebar-width
details-panel-widthwindow-layout
auto-hide-tab-barauto-hide-tabs-panel
shift-arrow-selectssh-integration
omit-otty-prefixcli-allow-overwrite
open-with-appdefault-git-client
progress-bar-commandskitty-keyboard
vt-keypad-app-allowedwiden-ambiguous
login-greetingwindow-opacity
dock-icon-animate-progressdock-icon-error-badge
ui-panel-backgroundui-panel-surface
ui-panel-borderui-border-subtle
ui-text-primaryui-text-secondary
ui-text-tertiaryui-hover
ui-activeui-accent
ui-font-familyui-font-size
languageon-launch
quit-after-last-window-closedconfirm-close-tab
confirm-close-windownew-tab-position
autocomplete-shortcutautocomplete-show-candidates
autocomplete-inline-suggestionautocomplete-on-device-learning
autocomplete-history-ignoreautocomplete-description-language
privilege-sound-on-errorprivilege-sound-shell
privilege-notification-on-finishprivilege-notification-on-error
privilege-notification-on-watch-finishprivilege-notification-shell
notification-foregroundprivilege-badge-exit-status
privilege-badge-activityprivilege-badge-agent-processing
privilege-badge-agent-task-completeprivilege-badge-agent-awaiting-input
privilege-notify-agent-task-completeprivilege-notify-agent-awaiting-input
privilege-caffeinate-agent-processingprivilege-resume-agent-session
privilege-mouse-shellprivilege-title-shell
privilege-clipboard-shell
ipc-allow-send-keysipc-allow-sensitive-sessions
auto-secure-inputsecure-input-indication
quick-terminal-persist-sessionquick-terminal-cwd
recipe-replay-savedrecipe-replay-file
open-quickly-folders-limitfrecency-auto-record
zoxide-enabledzoxide-local-path
editor-line-wrapeditor-tab-size
editor-visible-whitespaceeditor-show-line-numbers
editor-default-to-preview-readonlyeditor-scroll-past-end
terminal-scroll-past-endterminal-scroll-past-first-line
terminal-scroll-past-end-stickyterminal-scroll-smooth
selection-backspace-deletesterminal-scrollbar-hide-on-auto-scroll

Alacritty ​

Default path: ~/.config/alacritty/alacritty.toml (TOML, not YAML — older Alacritty versions used YAML; those files are not parsed).

The TOML adapter flattens nested sections into dotted paths ([font.normal]family → font.normal.family) and walks the same translation tables. Color sections ([colors.normal] / [colors.bright]) lower into Otty's palette, and [[keyboard.bindings]] arrays are reported as similar.

Config key support — Alacritty · click to expand the full key list

Imported automatically — written straight into your Otty config (value-translated where noted). A ✓ means the key name and behavior are identical.

AlacrittyOttyNotes
font.sizefont-size
font.normal.familyfont-family
font.bold.familyfont-family-bold
font.italic.familyfont-family-italic
font.bold_italic.familyfont-family-bold-italic
window.opacitybackground-opacity
window.startup_modewindow-sizeMaximized→frame, Fullscreen→remember
window.dynamic_titletitle-report
scrolling.historyscrollback-lines
cursor.style.shapecursor-styleshape names differ (Beam→bar)
cursor.style.blinkingcursor-style-blink
cursor.thicknesscursor-opacityapproximate
colors.primary.foregroundforeground
colors.primary.backgroundbackground
colors.selection.foregroundselection-foreground
colors.selection.backgroundselection-background
colors.cursor.cursorcursor-color
colors.cursor.textcursor-text
selection.save_to_clipboardcopy-on-select
mouse.hide_when_typingmouse-hide-while-typing
env.TERMterm
terminal.shell.programcommand
colors.normal.* / colors.bright.*palette16 ANSI colors → palette = N=#hex

Similar — Otty has a close-but-not-identical knob, so these are shown as a note for you to apply manually (never auto-written).

AlacrittyOtty (closest)Notes
window.padding.xui-paddingOtty unifies padding under the active theme's [container].padding; no separate x/y
window.padding.yui-paddingOtty unifies padding under the active theme's [container].padding; no separate x/y
window.dimensions.columnswindow-colsUse window-size = grid for cell-based startup sizing in Otty
window.dimensions.lineswindow-rowsUse window-size = grid for cell-based startup sizing in Otty
window.decorationsauto-hide-tab-barOtty has no full chrome-off mode; closest is hiding the tab bar
font.builtin_box_drawingarrow-box-drawing-joinOtty always renders box-drawing glyphs; closest analog is the arrow-join knob
keyboard.bindingskeybindAlacritty keybinds parsed individually; see the keybind entries
hints.enabledlink-open-withAlacritty hint mode and Otty's hint-mode have different surfaces; nearest knob is URL handler choice
mouse.bindingsright-click-actionOtty's mouse-button bindings are scoped to right-click action

No Alacritty equivalent — Otty-only settings; dropped (with a docs link) when you export to Alacritty.

Otty key
font-family-fallbackfont-family-fallback-bold
font-family-fallback-italicfont-family-fallback-bold-italic
font-blendingfont-smooth
font-antialiasedtext-bold
text-italictext-underline
text-blinkfont-ligatures
ligaturesfont-ligatures-alphabet
font-thickenarrow-box-drawing-join
live-resize-sigwinch-delay-msadjust-cell-height
shellenv
working-directorywindow-working-directory
tab-working-directorysplit-working-directory
enquiry-responseosc-color-report-format
title-reportvt-kam-allowed
scrollback-limitsession-log-size-mb
session-log-modesession-restore-banner
session-restore-multiplayersession-restore-processes
session-restore-process-allowlistfreeze-inactive-tab
agent-command
window-sizewindow-width-px
window-height-pxwindow-cols
window-rowsbold-color
faint-opacityminimum-contrast
palettecursor-opacity
cursor-animationmouse-reporting
mouse-hide-while-typingmouse-scroll-multiplier
focus-follows-mousemacos-option-as-alt
right-click-actionmouse-shift-to-select
cursor-click-to-movelink-open-with
file-open-withfolder-open-with
link-schemeslink-scheme-allowlist
link-previewsscroll-to-bottom
clipboard-readclipboard-write
clipboard-trim-trailing-spacescopy-on-select
clipboard-paste-protectionclipboard-paste-bracketed-safe
selection-clear-on-typingselection-clear-on-copy
themetheme-dark
auto-theme-dark-modesidebar-visible
sidebar-widthdetails-panel-width
window-layoutauto-hide-tab-bar
auto-hide-tabs-panelshift-arrow-select
shell-integrationssh-integration
omit-otty-prefixcli-allow-overwrite
open-with-appdefault-git-client
progress-bar-commandskitty-keyboard
vt-keypad-app-allowedwiden-ambiguous
login-greetingwindow-opacity
dock-icon-animate-progressdock-icon-error-badge
ui-panel-backgroundui-panel-surface
ui-panel-borderui-border-subtle
ui-text-primaryui-text-secondary
ui-text-tertiaryui-hover
ui-activeui-accent
ui-font-familyui-font-size
languageon-launch
quit-after-last-window-closedconfirm-close-tab
confirm-close-windownew-tab-position
autocomplete-shortcutautocomplete-show-candidates
autocomplete-inline-suggestionautocomplete-on-device-learning
autocomplete-history-ignoreautocomplete-description-language
privilege-sound-on-errorprivilege-sound-shell
privilege-notification-on-finishprivilege-notification-on-error
privilege-notification-on-watch-finishprivilege-notification-shell
notification-foregroundprivilege-badge-exit-status
privilege-badge-activityprivilege-badge-agent-processing
privilege-badge-agent-task-completeprivilege-badge-agent-awaiting-input
privilege-notify-agent-task-completeprivilege-notify-agent-awaiting-input
privilege-caffeinate-agent-processingprivilege-resume-agent-session
privilege-mouse-shellprivilege-title-shell
privilege-clipboard-shell
ipc-allow-send-keysipc-allow-sensitive-sessions
auto-secure-inputsecure-input-indication
quick-terminal-persist-sessionquick-terminal-cwd
recipe-replay-savedrecipe-replay-file
open-quickly-folders-limitfrecency-auto-record
zoxide-enabledzoxide-local-path
editor-line-wrapeditor-tab-size
editor-visible-whitespaceeditor-show-line-numbers
editor-default-to-preview-readonlyeditor-scroll-past-end
terminal-scroll-past-endterminal-scroll-past-first-line
terminal-scroll-past-end-stickyterminal-scroll-smooth
keybindselection-backspace-deletes
unfocused-split-opacityterminal-scrollbar-hide-on-auto-scroll

CLI usage ​

sh
# Preview what would change — no write happens.
otty import ghostty
otty import kitty
otty import alacritty ~/some/other/alacritty.toml

# Apply with explicit conflict resolution.
otty import ghostty --overwrite   # take ghostty's value on every conflict
otty import kitty --keep          # apply only non-conflicting keys

# JSON output — same report, pipeable.
otty --json import ghostty

# Export.
otty export ghostty > ghostty-config
otty export kitty -o ~/.config/kitty/kitty.conf
otty export alacritty -o ~/.config/alacritty/alacritty.toml

The exported file is a complete drop-in for the target terminal — your current Otty values fill every key the target supports, every other key goes into the dropped list (printed to stderr in text mode, returned in JSON otherwise).

GUI flow ​

  1. Open Settings → Advanced.
  2. Under Config File you'll see two rows:
    • Import from another terminal — [Source ▾] [Import...]
    • Export to another terminal — [Source ▾] [Export...]
  3. Pick the source. The Import picker opens with the default path pre-selected; you can browse to another file before confirming.
  4. The summary dialog shows the four buckets above. Conflict rows have a per-row dropdown (Overwrite / Keep current) plus bulk "Overwrite all" and "Keep all" buttons. Tap Apply Import to write.
  5. Every key carries a docs link to its configuration reference so you can read what a setting does without leaving the dialog.

See also ​

Otty