Skip to main content

Accessing Settings

Fresh provides multiple ways to configure settings:
Press Ctrl+, or use View → Settings… to open the visual settings editor.Settings are organized by category with search and inline documentation.

Display Settings

Control visual appearance of the editor:
config.json
{
  "editor": {
    "line_numbers": true,
    "relative_line_numbers": false,
    "line_wrap": true,
    "syntax_highlighting": true,
    "show_menu_bar": true,
    "show_tab_bar": true,
    "show_status_bar": true,
    "show_vertical_scrollbar": true,
    "show_horizontal_scrollbar": false,
    "use_terminal_bg": false,
    "cursor_style": "default",
    "rulers": [80, 120]
  }
}

Display Options

SettingTypeDefaultDescription
line_numbersbooleantrueShow line numbers in gutter
relative_line_numbersbooleanfalseShow line numbers relative to cursor
line_wrapbooleantrueWrap long lines to fit window
syntax_highlightingbooleantrueEnable syntax highlighting
show_menu_barbooleantrueShow menu bar at top
show_tab_barbooleantrueShow tab bar for open files
show_status_barbooleantrueShow status bar at bottom
show_vertical_scrollbarbooleantrueShow vertical scrollbar
show_horizontal_scrollbarbooleanfalseShow horizontal scrollbar
use_terminal_bgbooleanfalseUse terminal’s background color
cursor_stylestring"default"Cursor style (see below)
rulersnumber[][]Vertical ruler columns

Cursor Styles

Available cursor styles:
  • "default" - Terminal default
  • "blinking_block" - Blinking block (█)
  • "steady_block" - Solid block
  • "blinking_bar" - Blinking vertical bar (│)
  • "steady_bar" - Solid vertical bar
  • "blinking_underline" - Blinking underline (_)
  • "steady_underline" - Solid underline

Whitespace Indicators

Control visibility of whitespace characters:
config.json
{
  "editor": {
    "whitespace_show": true,
    "whitespace_spaces_leading": false,
    "whitespace_spaces_inner": false,
    "whitespace_spaces_trailing": false,
    "whitespace_tabs_leading": true,
    "whitespace_tabs_inner": true,
    "whitespace_tabs_trailing": true
  }
}
SettingTypeDefaultDescription
whitespace_showbooleantrueMaster toggle for whitespace indicators
whitespace_spaces_leadingbooleanfalseShow leading space indicators (·)
whitespace_spaces_innerbooleanfalseShow inner space indicators
whitespace_spaces_trailingbooleanfalseShow trailing space indicators
whitespace_tabs_leadingbooleantrueShow leading tab indicators (→)
whitespace_tabs_innerbooleantrueShow inner tab indicators
whitespace_tabs_trailingbooleantrueShow trailing tab indicators
Per-language show_whitespace_tabs setting can override tab visibility for specific languages (e.g., disable for Go).

Editing Settings

Configure editing behavior:
config.json
{
  "editor": {
    "tab_size": 4,
    "auto_indent": true,
    "auto_close": true,
    "auto_surround": true,
    "scroll_offset": 3,
    "default_line_ending": "lf",
    "trim_trailing_whitespace_on_save": false,
    "ensure_final_newline_on_save": false
  }
}
SettingTypeDefaultDescription
tab_sizenumber4Number of spaces per tab
auto_indentbooleantrueAuto-indent new lines
auto_closebooleantrueAuto-close brackets and quotes
auto_surroundbooleantrueSurround selection with matching pairs
scroll_offsetnumber3Keep N lines visible above/below cursor
default_line_endingstring"lf"Line ending for new files ("lf", "crlf", "cr")
trim_trailing_whitespace_on_savebooleanfalseRemove trailing whitespace on save
ensure_final_newline_on_savebooleanfalseEnsure file ends with newline

Bracket Matching

Configure bracket highlighting:
config.json
{
  "editor": {
    "highlight_matching_brackets": true,
    "rainbow_brackets": true
  }
}
SettingTypeDefaultDescription
highlight_matching_bracketsbooleantrueHighlight matching bracket pairs
rainbow_bracketsbooleantrueUse rainbow colors for nested brackets

Completion Settings

Configure auto-completion behavior:
config.json
{
  "editor": {
    "quick_suggestions": true,
    "quick_suggestions_delay_ms": 10,
    "suggest_on_trigger_characters": true,
    "accept_suggestion_on_enter": "on"
  }
}
SettingTypeDefaultDescription
quick_suggestionsbooleantrueShow suggestions while typing
quick_suggestions_delay_msnumber10Delay before showing suggestions (ms)
suggest_on_trigger_charactersbooleantrueShow suggestions on trigger chars (., ::)
accept_suggestion_on_enterstring"on"Enter key behavior: "on", "off", "smart"

Accept Suggestion on Enter

  • "on" - Enter always accepts completion
  • "off" - Enter inserts newline (use Tab to accept)
  • "smart" - Enter accepts only if completion differs from typed text

LSP Settings

Configure Language Server Protocol features:
config.json
{
  "editor": {
    "enable_inlay_hints": true,
    "enable_semantic_tokens_full": false
  }
}
SettingTypeDefaultDescription
enable_inlay_hintsbooleantrueShow LSP inlay hints (type hints, parameter names)
enable_semantic_tokens_fullbooleanfalseRequest full-document semantic tokens

Mouse Settings

Configure mouse behavior:
config.json
{
  "editor": {
    "mouse_hover_enabled": true,
    "mouse_hover_delay_ms": 500,
    "double_click_time_ms": 500
  }
}
SettingTypeDefaultDescription
mouse_hover_enabledbooleantrueShow LSP hover info on mouse hover
mouse_hover_delay_msnumber500Delay before showing hover info
double_click_time_msnumber500Time window for double-click detection

Auto-Save and Recovery

Configure file saving and recovery:
config.json
{
  "editor": {
    "auto_save_enabled": false,
    "auto_save_interval_secs": 30,
    "recovery_enabled": true,
    "auto_recovery_save_interval_secs": 2,
    "auto_revert_poll_interval_ms": 2000
  }
}
SettingTypeDefaultDescription
auto_save_enabledbooleanfalseEnable persistent auto-save to disk
auto_save_interval_secsnumber30Auto-save interval (seconds)
recovery_enabledbooleantrueEnable file recovery (auto-save to recovery files)
auto_recovery_save_interval_secsnumber2Recovery save interval
auto_revert_poll_interval_msnumber2000Check for external file changes interval
auto_save_enabled saves to the original file on disk. recovery_enabled saves to temporary recovery files for crash recovery.

Keyboard Enhancement

Configure advanced keyboard protocol features:
config.json
{
  "editor": {
    "keyboard_disambiguate_escape_codes": true,
    "keyboard_report_event_types": false,
    "keyboard_report_alternate_keys": true,
    "keyboard_report_all_keys_as_escape_codes": false
  }
}
SettingTypeDefaultDescription
keyboard_disambiguate_escape_codesbooleantrueUse CSI-u for unambiguous key reporting
keyboard_report_event_typesbooleanfalseReport key repeat/release events
keyboard_report_alternate_keysbooleantrueSend alternate keycodes
keyboard_report_all_keys_as_escape_codesbooleanfalseReport all keys as escape sequences
See Keyboard Configuration for details on the Kitty Keyboard Protocol.

Performance Settings

Optimize editor performance:
config.json
{
  "editor": {
    "highlight_timeout_ms": 5,
    "snapshot_interval": 100,
    "highlight_context_bytes": 10000,
    "large_file_threshold_bytes": 1048576,
    "estimated_line_length": 80,
    "read_concurrency": 64,
    "file_tree_poll_interval_ms": 3000
  }
}
SettingTypeDefaultDescription
highlight_timeout_msnumber5Max syntax highlighting time per frame (ms)
snapshot_intervalnumber100Undo snapshot interval (number of edits)
highlight_context_bytesnumber10000Context bytes for syntax highlighting
large_file_threshold_bytesnumber1048576File size threshold for large file mode (bytes)
estimated_line_lengthnumber80Average line length estimate for large files
read_concurrencynumber64Max concurrent filesystem reads
file_tree_poll_interval_msnumber3000File tree refresh interval

Large File Behavior

Files larger than large_file_threshold_bytes (1MB default) will:
  • Skip LSP features
  • Use constant-size scrollbar thumb
  • Use viewport-only parsing

File Explorer Settings

Configure the file tree sidebar:
config.json
{
  "file_explorer": {
    "respect_gitignore": true,
    "show_hidden": false,
    "show_gitignored": false,
    "custom_ignore_patterns": ["*.log", "tmp/"],
    "width": 0.3
  }
}
SettingTypeDefaultDescription
respect_gitignorebooleantrueRespect .gitignore files
show_hiddenbooleanfalseShow hidden files (starting with .)
show_gitignoredbooleanfalseShow gitignored files
custom_ignore_patternsstring[][]Custom ignore patterns (glob)
widthnumber0.3Explorer width as fraction of screen (0.0-1.0)

Clipboard Settings

Configure clipboard behavior:
config.json
{
  "clipboard": {
    "use_osc52": true,
    "use_system_clipboard": true
  }
}
SettingTypeDefaultDescription
use_osc52booleantrueUse OSC 52 escape sequences
use_system_clipboardbooleantrueUse system clipboard APIs
Disable use_osc52 if you experience clipboard hangs in certain terminals like PuTTY.

Terminal Settings

Configure integrated terminal:
config.json
{
  "terminal": {
    "jump_to_end_on_output": true
  }
}
SettingTypeDefaultDescription
jump_to_end_on_outputbooleantrueAuto-scroll to bottom on new output

Warning Notifications

Configure diagnostic warnings:
config.json
{
  "warnings": {
    "show_status_indicator": true
  }
}
SettingTypeDefaultDescription
show_status_indicatorbooleantrueShow warning/error indicators in status bar

Package Manager Settings

Configure plugin and theme installation:
config.json
{
  "packages": {
    "sources": [
      "https://github.com/sinelaw/fresh-plugins-registry"
    ]
  }
}
SettingTypeDefaultDescription
sourcesstring[]["https://github.com/sinelaw/fresh-plugins-registry"]Plugin registry URLs

Per-Language Settings

Override settings per language:
config.json
{
  "languages": {
    "rust": {
      "tab_size": 4,
      "use_tabs": false,
      "auto_indent": true,
      "show_whitespace_tabs": true,
      "formatter": {
        "command": "rustfmt",
        "args": [],
        "stdin": true,
        "timeout_ms": 10000
      },
      "format_on_save": true,
      "on_save": [
        {
          "command": "cargo",
          "args": ["clippy"],
          "timeout_ms": 5000,
          "enabled": true
        }
      ]
    },
    "go": {
      "tab_size": 8,
      "use_tabs": true,
      "show_whitespace_tabs": false
    }
  }
}

Language Configuration

SettingTypeDescription
extensionsstring[]File extensions
filenamesstring[]Exact filename matches
grammarstringTree-sitter grammar name
comment_prefixstringComment syntax
tab_sizenumberSpaces per tab (overrides global)
use_tabsbooleanInsert tab characters
auto_indentbooleanAuto-indent new lines
auto_closebooleanAuto-close brackets (overrides global)
auto_surroundbooleanAuto-surround selection (overrides global)
show_whitespace_tabsbooleanShow tab indicators
formatterobjectFormatter configuration
format_on_savebooleanAuto-format on save
on_savearrayActions to run on save

Formatter Configuration

{
  "formatter": {
    "command": "prettier",
    "args": ["--write", "$FILE"],
    "stdin": true,
    "timeout_ms": 10000
  }
}
SettingTypeDefaultDescription
commandstring-Formatter executable
argsstring[][]Arguments (use $FILE for file path)
stdinbooleantruePass buffer via stdin
timeout_msnumber10000Timeout in milliseconds

On-Save Actions

{
  "on_save": [
    {
      "command": "eslint",
      "args": ["--fix", "$FILE"],
      "stdin": false,
      "timeout_ms": 5000,
      "enabled": true
    }
  ]
}
SettingTypeDefaultDescription
commandstring-Command to run
argsstring[][]Arguments
stdinbooleanfalsePass buffer via stdin
timeout_msnumber10000Timeout
enabledbooleantrueEnable/disable action

LSP Server Configuration

Configure language servers:
config.json
{
  "lsp": {
    "rust": {
      "command": "rust-analyzer",
      "args": [],
      "enabled": true,
      "auto_start": false,
      "process_limits": {
        "max_memory_percent": 50,
        "max_cpu_percent": 90,
        "enabled": true
      },
      "initialization_options": {
        "checkOnSave": false,
        "diagnostics": {"enable": true}
      }
    }
  }
}

LSP Configuration

SettingTypeDefaultDescription
commandstring-LSP server executable
argsstring[][]Command arguments
enabledbooleantrueEnable server
auto_startbooleanfalseAuto-start when opening files
initialization_optionsobjectnullServer-specific options
process_limitsobject-Memory/CPU limits

Process Limits

{
  "process_limits": {
    "max_memory_percent": 50,
    "max_cpu_percent": 90,
    "enabled": true
  }
}
SettingTypeDefaultDescription
enabledbooleantrueEnable process limits
max_memory_percentnumber50Max memory usage (% of system)
max_cpu_percentnumber90Max CPU usage (%)

Full Example Configuration

config.example.json
{
  "theme": "high-contrast",
  "check_for_updates": true,
  "editor": {
    "tab_size": 4,
    "auto_indent": true,
    "line_numbers": true,
    "relative_line_numbers": false,
    "scroll_offset": 3,
    "syntax_highlighting": true,
    "line_wrap": true,
    "highlight_timeout_ms": 5,
    "snapshot_interval": 100,
    "large_file_threshold_bytes": 1048576,
    "estimated_line_length": 80,
    "enable_inlay_hints": true,
    "enable_semantic_tokens_full": false,
    "auto_save_enabled": false,
    "auto_save_interval_secs": 30,
    "recovery_enabled": true,
    "auto_recovery_save_interval_secs": 2,
    "highlight_context_bytes": 10000,
    "mouse_hover_enabled": true,
    "mouse_hover_delay_ms": 500,
    "double_click_time_ms": 500,
    "auto_revert_poll_interval_ms": 2000,
    "file_tree_poll_interval_ms": 3000
  },
  "file_explorer": {
    "respect_gitignore": true,
    "show_hidden": false,
    "show_gitignored": false,
    "custom_ignore_patterns": [],
    "width": 0.3
  },
  "clipboard": {
    "use_osc52": true,
    "use_system_clipboard": true
  },
  "terminal": {
    "jump_to_end_on_output": true
  },
  "keybindings": [],
  "active_keybinding_map": "default"
}

Next Steps

Keyboard Configuration

Customize keybindings and keymaps

Theme System

Built-in themes and color customization

Build docs developers (and LLMs) love