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-xui-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).

Otty's config file uses the same key = value line format as Ghostty, so the file parses directly — 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

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
unfocused-split-opacityfaint-opacityOtty dims unfocused splits via the same faint multiplier
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
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
show-auto-approveauto-approve-enabled
hide-auto-approve-pillipc-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

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_familyfont-family — and value-translates where the two terminals disagree (e.g. cursor_shape beamcursor-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 (beambar)
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 … color15palettepalette = 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

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
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-shellshow-auto-approve
auto-approve-enabledhide-auto-approve-pill
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-deletes

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]familyfont.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-sizeMaximizedframe, Fullscreenremember
window.dynamic_titletitle-report
scrolling.historyscrollback-lines
cursor.style.shapecursor-styleshape names differ (Beambar)
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
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-shellshow-auto-approve
auto-approve-enabledhide-auto-approve-pill
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

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