configuring-zed.md

   1# Configuring Zed
   2
   3Zed is designed to be configured: we want to fit your workflow and preferences exactly. We provide default settings that are designed to be a comfortable starting point for as many people as possible, but we hope you will enjoy tweaking it to make it feel incredible.
   4
   5In addition to the settings described here, you may also want to change your [theme](./themes.md), configure your [key bindings](./key-bindings.md), set up [tasks](./tasks.md) or install [extensions](https://github.com/zed-industries/extensions).
   6
   7## Settings files
   8
   9<!--
  10TBD: Settings files. Rewrite with "remote settings" in mind (e.g. `local settings` on the remote host).
  11Consider renaming `zed: Open Local Settings` to `zed: Open Project Settings`.
  12
  13TBD: Add settings documentation about how settings are merged as overlays. E.g. project>local>default. Note how settings that are maps are merged, but settings that are arrays are replaced and must include the defaults.
  14-->
  15
  16Your settings file can be opened with {#kb zed::OpenSettings}. By default it is located at `~/.config/zed/settings.json`, though if you have XDG_CONFIG_HOME in your environment on Linux it will be at `$XDG_CONFIG_HOME/zed/settings.json` instead.
  17
  18This configuration is merged with any local configuration inside your projects. You can open the project settings by running {#action zed::OpenProjectSettings} from the command palette. This will create a `.zed` directory containing`.zed/settings.json`.
  19
  20Although most projects will only need one settings file at the root, you can add more local settings files for subdirectories as needed. Not all settings can be set in local files, just those that impact the behavior of the editor and language tooling. For example you can set `tab_size`, `formatter` etc. but not `theme`, `vim_mode` and similar.
  21
  22The syntax for configuration files is a super-set of JSON that allows `//` comments.
  23
  24### Per-release channel overrides
  25
  26Zed reads the same `settings.json` across all release channels (Stable, Preview or Nightly). However, you can scope overrides to a specific channel by adding top-level `stable`, `preview`, `nightly` or `dev` objects. They are merged into the base configuration with settings from these keys taking precedence upon launching the specified build. For example:
  27
  28```json [settings]
  29{
  30  "theme": "sunset",
  31  "vim_mode": false,
  32  "nightly": {
  33    "theme": "cave-light",
  34    "vim_mode": true
  35  },
  36  "preview": {
  37    "theme": "zed-dark"
  38  }
  39}
  40```
  41
  42With this configuration, Stable keeps all base preferences, Preview switches to `zed-dark`, and Nightly enables Vim mode with a different theme.
  43
  44Changing settings via the UI will always apply the change across all channels.
  45
  46## Default settings
  47
  48You can find the default settings for your current Zed by running {#action zed::OpenDefaultSettings} from the command palette.
  49
  50Extensions that provide language servers may also provide default settings for those language servers.
  51
  52# Settings
  53
  54## Active Pane Modifiers
  55
  56- Description: Styling settings applied to the active pane.
  57- Setting: `active_pane_modifiers`
  58- Default:
  59
  60```json [settings]
  61{
  62  "active_pane_modifiers": {
  63    "border_size": 0.0,
  64    "inactive_opacity": 1.0
  65  }
  66}
  67```
  68
  69### Border size
  70
  71- Description: Size of the border surrounding the active pane. When set to 0, the active pane doesn't have any border. The border is drawn inset.
  72- Setting: `border_size`
  73- Default: `0.0`
  74
  75**Options**
  76
  77Non-negative `float` values
  78
  79### Inactive Opacity
  80
  81- Description: Opacity of inactive panels. When set to 1.0, the inactive panes have the same opacity as the active one. If set to 0, the inactive panes content will not be visible at all. Values are clamped to the [0.0, 1.0] range.
  82- Setting: `inactive_opacity`
  83- Default: `1.0`
  84
  85**Options**
  86
  87`float` values
  88
  89## Bottom Dock Layout
  90
  91- Description: Control the layout of the bottom dock, relative to the left and right docks.
  92- Setting: `bottom_dock_layout`
  93- Default: `"contained"`
  94
  95**Options**
  96
  971. Contain the bottom dock, giving the full height of the window to the left and right docks.
  98
  99```json [settings]
 100{
 101  "bottom_dock_layout": "contained"
 102}
 103```
 104
 1052. Give the bottom dock the full width of the window, truncating the left and right docks.
 106
 107```json [settings]
 108{
 109  "bottom_dock_layout": "full"
 110}
 111```
 112
 1133. Left align the bottom dock, truncating the left dock and giving the right dock the full height of the window.
 114
 115```json [settings]
 116{
 117  "bottom_dock_layout": "left_aligned"
 118}
 119```
 120
 1214. Right align the bottom dock, giving the left dock the full height of the window and truncating the right dock.
 122
 123```json [settings]
 124{
 125  "bottom_dock_layout": "right_aligned"
 126}
 127```
 128
 129## Agent Font Size
 130
 131- Description: The font size for text in the agent panel. Inherits the UI font size if unset.
 132- Setting: `agent_font_size`
 133- Default: `null`
 134
 135**Options**
 136
 137`integer` values from `6` to `100` pixels (inclusive)
 138
 139## Allow Rewrap
 140
 141- Description: Controls where the {#action editor::Rewrap} action is allowed in the current language scope
 142- Setting: `allow_rewrap`
 143- Default: `"in_comments"`
 144
 145**Options**
 146
 1471. Allow rewrap in comments only:
 148
 149```json [settings]
 150{
 151  "allow_rewrap": "in_comments"
 152}
 153```
 154
 1552. Allow rewrap in selections only:
 156
 157```json [settings]
 158{
 159  "allow_rewrap": "in_selections"
 160}
 161```
 162
 1633. Allow rewrap anywhere:
 164
 165```json [settings]
 166{
 167  "allow_rewrap": "anywhere"
 168}
 169```
 170
 171Note: This setting has no effect in Vim mode, as rewrap is already allowed everywhere.
 172
 173## Auto Indent
 174
 175- Description: Whether indentation should be adjusted based on the context whilst typing. This can be specified on a per-language basis.
 176- Setting: `auto_indent`
 177- Default: `true`
 178
 179**Options**
 180
 181`boolean` values
 182
 183## Auto Indent On Paste
 184
 185- Description: Whether indentation of pasted content should be adjusted based on the context
 186- Setting: `auto_indent_on_paste`
 187- Default: `true`
 188
 189**Options**
 190
 191`boolean` values
 192
 193## Auto Install extensions
 194
 195- Description: Define extensions to be autoinstalled or never be installed.
 196- Setting: `auto_install_extension`
 197- Default: `{ "html": true }`
 198
 199**Options**
 200
 201You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions.md#installation-location):
 202
 203On macOS:
 204
 205```sh
 206ls ~/Library/Application\ Support/Zed/extensions/installed/
 207```
 208
 209On Linux:
 210
 211```sh
 212ls ~/.local/share/zed/extensions/installed
 213```
 214
 215Define extensions which should be installed (`true`) or never installed (`false`).
 216
 217```json [settings]
 218{
 219  "auto_install_extensions": {
 220    "html": true,
 221    "dockerfile": true,
 222    "docker-compose": false
 223  }
 224}
 225```
 226
 227## Autosave
 228
 229- Description: When to automatically save edited buffers.
 230- Setting: `autosave`
 231- Default: `off`
 232
 233**Options**
 234
 2351. To disable autosave, set it to `off`:
 236
 237```json [settings]
 238{
 239  "autosave": "off"
 240}
 241```
 242
 2432. To autosave when focus changes, use `on_focus_change`:
 244
 245```json [settings]
 246{
 247  "autosave": "on_focus_change"
 248}
 249```
 250
 2513. To autosave when the active window changes, use `on_window_change`:
 252
 253```json [settings]
 254{
 255  "autosave": "on_window_change"
 256}
 257```
 258
 2594. To autosave after an inactivity period, use `after_delay`:
 260
 261```json [settings]
 262{
 263  "autosave": {
 264    "after_delay": {
 265      "milliseconds": 1000
 266    }
 267  }
 268}
 269```
 270
 271Note that a save will be triggered when an unsaved tab is closed, even if this is earlier than the configured inactivity period.
 272
 273## Autoscroll on Clicks
 274
 275- Description: Whether to scroll when clicking near the edge of the visible text area.
 276- Setting: `autoscroll_on_clicks`
 277- Default: `false`
 278
 279**Options**
 280
 281`boolean` values
 282
 283## Auto Signature Help
 284
 285- Description: Show method signatures in the editor, when inside parentheses
 286- Setting: `auto_signature_help`
 287- Default: `false`
 288
 289**Options**
 290
 291`boolean` values
 292
 293### Show Signature Help After Edits
 294
 295- Description: Whether to show the signature help after completion or a bracket pair inserted. If `auto_signature_help` is enabled, this setting will be treated as enabled also.
 296- Setting: `show_signature_help_after_edits`
 297- Default: `false`
 298
 299**Options**
 300
 301`boolean` values
 302
 303## Auto Update
 304
 305- Description: Whether or not to automatically check for updates.
 306- Setting: `auto_update`
 307- Default: `true`
 308
 309**Options**
 310
 311`boolean` values
 312
 313## Base Keymap
 314
 315- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 316- Setting: `base_keymap`
 317- Default: `VSCode`
 318
 319**Options**
 320
 3211. VS Code
 322
 323```json [settings]
 324{
 325  "base_keymap": "VSCode"
 326}
 327```
 328
 3292. Atom
 330
 331```json [settings]
 332{
 333  "base_keymap": "Atom"
 334}
 335```
 336
 3373. JetBrains
 338
 339```json [settings]
 340{
 341  "base_keymap": "JetBrains"
 342}
 343```
 344
 3454. None
 346
 347```json [settings]
 348{
 349  "base_keymap": "None"
 350}
 351```
 352
 3535. Sublime Text
 354
 355```json [settings]
 356{
 357  "base_keymap": "SublimeText"
 358}
 359```
 360
 3616. TextMate
 362
 363```json [settings]
 364{
 365  "base_keymap": "TextMate"
 366}
 367```
 368
 369## Buffer Font Family
 370
 371- Description: The name of a font to use for rendering text in the editor.
 372- Setting: `buffer_font_family`
 373- Default: `.ZedMono`. This currently aliases to [Lilex](https://lilex.myrt.co).
 374
 375**Options**
 376
 377The name of any font family installed on the user's system, or `".ZedMono"`.
 378
 379## Buffer Font Features
 380
 381- Description: The OpenType features to enable for text in the editor.
 382- Setting: `buffer_font_features`
 383- Default: `null`
 384- Platform: macOS and Windows.
 385
 386**Options**
 387
 388Zed supports all OpenType features that can be enabled or disabled for a given buffer or terminal font, as well as setting values for font features.
 389
 390For example, to disable font ligatures, add the following to your settings:
 391
 392```json [settings]
 393{
 394  "buffer_font_features": {
 395    "calt": false
 396  }
 397}
 398```
 399
 400You can also set other OpenType features, like setting `cv01` to `7`:
 401
 402```json [settings]
 403{
 404  "buffer_font_features": {
 405    "cv01": 7
 406  }
 407}
 408```
 409
 410## Buffer Font Fallbacks
 411
 412- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 413- Setting: `buffer_font_fallbacks`
 414- Default: `null`
 415- Platform: macOS and Windows.
 416
 417**Options**
 418
 419For example, to use `Nerd Font` as a fallback, add the following to your settings:
 420
 421```json [settings]
 422{
 423  "buffer_font_fallbacks": ["Nerd Font"]
 424}
 425```
 426
 427## Buffer Font Size
 428
 429- Description: The default font size for text in the editor.
 430- Setting: `buffer_font_size`
 431- Default: `15`
 432
 433**Options**
 434
 435A font size from `6` to `100` pixels (inclusive)
 436
 437## Buffer Font Weight
 438
 439- Description: The default font weight for text in the editor.
 440- Setting: `buffer_font_weight`
 441- Default: `400`
 442
 443**Options**
 444
 445`integer` values between `100` and `900`
 446
 447## Buffer Line Height
 448
 449- Description: The default line height for text in the editor.
 450- Setting: `buffer_line_height`
 451- Default: `"comfortable"`
 452
 453**Options**
 454
 455`"standard"`, `"comfortable"` or `{ "custom": float }` (`1` is compact, `2` is loose)
 456
 457## Centered Layout
 458
 459- Description: Configuration for the centered layout mode.
 460- Setting: `centered_layout`
 461- Default:
 462
 463```json [settings]
 464"centered_layout": {
 465  "left_padding": 0.2,
 466  "right_padding": 0.2,
 467}
 468```
 469
 470**Options**
 471
 472The `left_padding` and `right_padding` options define the relative width of the
 473left and right padding of the central pane from the workspace when the centered layout mode is activated. Valid values range is from `0` to `0.4`.
 474
 475## Close on File Delete
 476
 477- Description: Whether to automatically close editor tabs when their corresponding files are deleted from disk.
 478- Setting: `close_on_file_delete`
 479- Default: `false`
 480
 481**Options**
 482
 483`boolean` values
 484
 485When enabled, this setting will automatically close tabs for files that have been deleted from the file system. This is particularly useful for workflows involving temporary or scratch files that are frequently created and deleted. When disabled (default), deleted files remain open with a strikethrough through their tab title.
 486
 487Note: Dirty files (files with unsaved changes) will not be automatically closed even when this setting is enabled, ensuring you don't lose unsaved work.
 488
 489## Confirm Quit
 490
 491- Description: Whether or not to prompt the user to confirm before closing the application.
 492- Setting: `confirm_quit`
 493- Default: `false`
 494
 495**Options**
 496
 497`boolean` values
 498
 499## Diagnostics Max Severity
 500
 501- Description: Which level to use to filter out diagnostics displayed in the editor
 502- Setting: `diagnostics_max_severity`
 503- Default: `null`
 504
 505**Options**
 506
 5071. Allow all diagnostics (default):
 508
 509```json [settings]
 510{
 511  "diagnostics_max_severity": "all"
 512}
 513```
 514
 5152. Show only errors:
 516
 517```json [settings]
 518{
 519  "diagnostics_max_severity": "error"
 520}
 521```
 522
 5233. Show errors and warnings:
 524
 525```json [settings]
 526{
 527  "diagnostics_max_severity": "warning"
 528}
 529```
 530
 5314. Show errors, warnings, and information:
 532
 533```json [settings]
 534{
 535  "diagnostics_max_severity": "info"
 536}
 537```
 538
 5395. Show all including hints:
 540
 541```json [settings]
 542{
 543  "diagnostics_max_severity": "hint"
 544}
 545```
 546
 547## Disable AI
 548
 549- Description: Whether to disable all AI features in Zed
 550- Setting: `disable_ai`
 551- Default: `false`
 552
 553**Options**
 554
 555`boolean` values
 556
 557## Direnv Integration
 558
 559- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 560  `direnv` integration make it possible to use the environment variables set by a `direnv` configuration to detect some language servers in `$PATH` instead of installing them.
 561  It also allows for those environment variables to be used in tasks.
 562- Setting: `load_direnv`
 563- Default: `"direct"`
 564
 565**Options**
 566
 567There are two options to choose from:
 568
 5691. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 5702. `direct`: Use `direnv export json` to load direnv. This will load direnv directly without relying on the shell hook and might cause some inconsistencies. This allows direnv to work with any shell.
 571
 572## Double Click In Multibuffer
 573
 574- Description: What to do when multibuffer is double clicked in some of its excerpts (parts of singleton buffers)
 575- Setting: `double_click_in_multibuffer`
 576- Default: `"select"`
 577
 578**Options**
 579
 5801. Behave as a regular buffer and select the whole word (default):
 581
 582```json [settings]
 583{
 584  "double_click_in_multibuffer": "select"
 585}
 586```
 587
 5882. Open the excerpt clicked as a new buffer in the new tab:
 589
 590```json [settings]
 591{
 592  "double_click_in_multibuffer": "open"
 593}
 594```
 595
 596For the case of "open", regular selection behavior can be achieved by holding `alt` when double clicking.
 597
 598## Drop Target Size
 599
 600- Description: Relative size of the drop target in the editor that will open dropped file as a split pane (0-0.5). For example, 0.25 means if you drop onto the top/bottom quarter of the pane a new vertical split will be used, if you drop onto the left/right quarter of the pane a new horizontal split will be used.
 601- Setting: `drop_target_size`
 602- Default: `0.2`
 603
 604**Options**
 605
 606`float` values between `0` and `0.5`
 607
 608## Edit Predictions
 609
 610- Description: Settings for edit predictions.
 611- Setting: `edit_predictions`
 612- Default:
 613
 614```json [settings]
 615  "edit_predictions": {
 616    "disabled_globs": [
 617      "**/.env*",
 618      "**/*.pem",
 619      "**/*.key",
 620      "**/*.cert",
 621      "**/*.crt",
 622      "**/.dev.vars",
 623      "**/secrets.yml"
 624    ]
 625  }
 626```
 627
 628**Options**
 629
 630### Disabled Globs
 631
 632- Description: A list of globs for which edit predictions should be disabled for. This list adds to a pre-existing, sensible default set of globs. Any additional ones you add are combined with them.
 633- Setting: `disabled_globs`
 634- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]`
 635
 636**Options**
 637
 638List of `string` values.
 639
 640## Edit Predictions Disabled in
 641
 642- Description: A list of language scopes in which edit predictions should be disabled.
 643- Setting: `edit_predictions_disabled_in`
 644- Default: `[]`
 645
 646**Options**
 647
 648List of `string` values
 649
 6501. Don't show edit predictions in comments:
 651
 652```json [settings]
 653"disabled_in": ["comment"]
 654```
 655
 6562. Don't show edit predictions in strings and comments:
 657
 658```json [settings]
 659"disabled_in": ["comment", "string"]
 660```
 661
 6623. Only in Go, don't show edit predictions in strings and comments:
 663
 664```json [settings]
 665{
 666  "languages": {
 667    "Go": {
 668      "edit_predictions_disabled_in": ["comment", "string"]
 669    }
 670  }
 671}
 672```
 673
 674## Current Line Highlight
 675
 676- Description: How to highlight the current line in the editor.
 677- Setting: `current_line_highlight`
 678- Default: `all`
 679
 680**Options**
 681
 6821. Don't highlight the current line:
 683
 684```json [settings]
 685"current_line_highlight": "none"
 686```
 687
 6882. Highlight the gutter area:
 689
 690```json [settings]
 691"current_line_highlight": "gutter"
 692```
 693
 6943. Highlight the editor area:
 695
 696```json [settings]
 697"current_line_highlight": "line"
 698```
 699
 7004. Highlight the full line:
 701
 702```json [settings]
 703"current_line_highlight": "all"
 704```
 705
 706## Selection Highlight
 707
 708- Description: Whether to highlight all occurrences of the selected text in an editor.
 709- Setting: `selection_highlight`
 710- Default: `true`
 711
 712## Rounded Selection
 713
 714- Description: Whether the text selection should have rounded corners.
 715- Setting: `rounded_selection`
 716- Default: `true`
 717
 718## Cursor Blink
 719
 720- Description: Whether or not the cursor blinks.
 721- Setting: `cursor_blink`
 722- Default: `true`
 723
 724**Options**
 725
 726`boolean` values
 727
 728## Cursor Shape
 729
 730- Description: Cursor shape for the default editor.
 731- Setting: `cursor_shape`
 732- Default: `bar`
 733
 734**Options**
 735
 7361. A vertical bar:
 737
 738```json [settings]
 739"cursor_shape": "bar"
 740```
 741
 7422. A block that surrounds the following character:
 743
 744```json [settings]
 745"cursor_shape": "block"
 746```
 747
 7483. An underline / underscore that runs along the following character:
 749
 750```json [settings]
 751"cursor_shape": "underline"
 752```
 753
 7544. An box drawn around the following character:
 755
 756```json [settings]
 757"cursor_shape": "hollow"
 758```
 759
 760## Gutter
 761
 762- Description: Settings for the editor gutter
 763- Setting: `gutter`
 764- Default:
 765
 766```json [settings]
 767{
 768  "gutter": {
 769    "line_numbers": true,
 770    "runnables": true,
 771    "breakpoints": true,
 772    "folds": true,
 773    "min_line_number_digits": 4
 774  }
 775}
 776```
 777
 778**Options**
 779
 780- `line_numbers`: Whether to show line numbers in the gutter
 781- `runnables`: Whether to show runnable buttons in the gutter
 782- `breakpoints`: Whether to show breakpoints in the gutter
 783- `folds`: Whether to show fold buttons in the gutter
 784- `min_line_number_digits`: Minimum number of characters to reserve space for in the gutter
 785
 786## Hide Mouse
 787
 788- Description: Determines when the mouse cursor should be hidden in an editor or input box.
 789- Setting: `hide_mouse`
 790- Default: `on_typing_and_movement`
 791
 792**Options**
 793
 7941. Never hide the mouse cursor:
 795
 796```json [settings]
 797"hide_mouse": "never"
 798```
 799
 8002. Hide only when typing:
 801
 802```json [settings]
 803"hide_mouse": "on_typing"
 804```
 805
 8063. Hide on both typing and cursor movement:
 807
 808```json [settings]
 809"hide_mouse": "on_typing_and_movement"
 810```
 811
 812## Snippet Sort Order
 813
 814- Description: Determines how snippets are sorted relative to other completion items.
 815- Setting: `snippet_sort_order`
 816- Default: `inline`
 817
 818**Options**
 819
 8201. Place snippets at the top of the completion list:
 821
 822```json [settings]
 823"snippet_sort_order": "top"
 824```
 825
 8262. Place snippets normally without any preference:
 827
 828```json [settings]
 829"snippet_sort_order": "inline"
 830```
 831
 8323. Place snippets at the bottom of the completion list:
 833
 834```json [settings]
 835"snippet_sort_order": "bottom"
 836```
 837
 8384. Do not show snippets in the completion list at all:
 839
 840```json [settings]
 841"snippet_sort_order": "none"
 842```
 843
 844## Editor Scrollbar
 845
 846- Description: Whether or not to show the editor scrollbar and various elements in it.
 847- Setting: `scrollbar`
 848- Default:
 849
 850```json [settings]
 851"scrollbar": {
 852  "show": "auto",
 853  "cursors": true,
 854  "git_diff": true,
 855  "search_results": true,
 856  "selected_text": true,
 857  "selected_symbol": true,
 858  "diagnostics": "all",
 859  "axes": {
 860    "horizontal": true,
 861    "vertical": true,
 862  },
 863},
 864```
 865
 866### Show Mode
 867
 868- Description: When to show the editor scrollbar.
 869- Setting: `show`
 870- Default: `auto`
 871
 872**Options**
 873
 8741. Show the scrollbar if there's important information or follow the system's configured behavior:
 875
 876```json [settings]
 877"scrollbar": {
 878  "show": "auto"
 879}
 880```
 881
 8822. Match the system's configured behavior:
 883
 884```json [settings]
 885"scrollbar": {
 886  "show": "system"
 887}
 888```
 889
 8903. Always show the scrollbar:
 891
 892```json [settings]
 893"scrollbar": {
 894  "show": "always"
 895}
 896```
 897
 8984. Never show the scrollbar:
 899
 900```json [settings]
 901"scrollbar": {
 902  "show": "never"
 903}
 904```
 905
 906### Cursor Indicators
 907
 908- Description: Whether to show cursor positions in the scrollbar.
 909- Setting: `cursors`
 910- Default: `true`
 911
 912**Options**
 913
 914`boolean` values
 915
 916### Git Diff Indicators
 917
 918- Description: Whether to show git diff indicators in the scrollbar.
 919- Setting: `git_diff`
 920- Default: `true`
 921
 922**Options**
 923
 924`boolean` values
 925
 926### Search Results Indicators
 927
 928- Description: Whether to show buffer search results in the scrollbar.
 929- Setting: `search_results`
 930- Default: `true`
 931
 932**Options**
 933
 934`boolean` values
 935
 936### Selected Text Indicators
 937
 938- Description: Whether to show selected text occurrences in the scrollbar.
 939- Setting: `selected_text`
 940- Default: `true`
 941
 942**Options**
 943
 944`boolean` values
 945
 946### Selected Symbols Indicators
 947
 948- Description: Whether to show selected symbol occurrences in the scrollbar.
 949- Setting: `selected_symbol`
 950- Default: `true`
 951
 952**Options**
 953
 954`boolean` values
 955
 956### Diagnostics
 957
 958- Description: Which diagnostic indicators to show in the scrollbar.
 959- Setting: `diagnostics`
 960- Default: `all`
 961
 962**Options**
 963
 9641. Show all diagnostics:
 965
 966```json [settings]
 967{
 968  "show_diagnostics": "all"
 969}
 970```
 971
 9722. Do not show any diagnostics:
 973
 974```json [settings]
 975{
 976  "show_diagnostics": "off"
 977}
 978```
 979
 9803. Show only errors:
 981
 982```json [settings]
 983{
 984  "show_diagnostics": "error"
 985}
 986```
 987
 9884. Show only errors and warnings:
 989
 990```json [settings]
 991{
 992  "show_diagnostics": "warning"
 993}
 994```
 995
 9965. Show only errors, warnings, and information:
 997
 998```json [settings]
 999{
1000  "show_diagnostics": "info"
1001}
1002```
1003
1004### Axes
1005
1006- Description: Forcefully enable or disable the scrollbar for each axis
1007- Setting: `axes`
1008- Default:
1009
1010```json [settings]
1011"scrollbar": {
1012  "axes": {
1013    "horizontal": true,
1014    "vertical": true,
1015  },
1016}
1017```
1018
1019#### Horizontal
1020
1021- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
1022- Setting: `horizontal`
1023- Default: `true`
1024
1025**Options**
1026
1027`boolean` values
1028
1029#### Vertical
1030
1031- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
1032- Setting: `vertical`
1033- Default: `true`
1034
1035**Options**
1036
1037`boolean` values
1038
1039## Minimap
1040
1041- Description: Settings related to the editor's minimap, which provides an overview of your document.
1042- Setting: `minimap`
1043- Default:
1044
1045```json [settings]
1046{
1047  "minimap": {
1048    "show": "never",
1049    "thumb": "always",
1050    "thumb_border": "left_open",
1051    "current_line_highlight": null
1052  }
1053}
1054```
1055
1056### Show Mode
1057
1058- Description: When to show the minimap in the editor.
1059- Setting: `show`
1060- Default: `never`
1061
1062**Options**
1063
10641. Always show the minimap:
1065
1066```json [settings]
1067{
1068  "show": "always"
1069}
1070```
1071
10722. Show the minimap if the editor's scrollbars are visible:
1073
1074```json [settings]
1075{
1076  "show": "auto"
1077}
1078```
1079
10803. Never show the minimap:
1081
1082```json [settings]
1083{
1084  "show": "never"
1085}
1086```
1087
1088### Thumb Display
1089
1090- Description: When to show the minimap thumb (the visible editor area) in the minimap.
1091- Setting: `thumb`
1092- Default: `always`
1093
1094**Options**
1095
10961. Show the minimap thumb when hovering over the minimap:
1097
1098```json [settings]
1099{
1100  "thumb": "hover"
1101}
1102```
1103
11042. Always show the minimap thumb:
1105
1106```json [settings]
1107{
1108  "thumb": "always"
1109}
1110```
1111
1112### Thumb Border
1113
1114- Description: How the minimap thumb border should look.
1115- Setting: `thumb_border`
1116- Default: `left_open`
1117
1118**Options**
1119
11201. Display a border on all sides of the thumb:
1121
1122```json [settings]
1123{
1124  "thumb_border": "full"
1125}
1126```
1127
11282. Display a border on all sides except the left side:
1129
1130```json [settings]
1131{
1132  "thumb_border": "left_open"
1133}
1134```
1135
11363. Display a border on all sides except the right side:
1137
1138```json [settings]
1139{
1140  "thumb_border": "right_open"
1141}
1142```
1143
11444. Display a border only on the left side:
1145
1146```json [settings]
1147{
1148  "thumb_border": "left_only"
1149}
1150```
1151
11525. Display the thumb without any border:
1153
1154```json [settings]
1155{
1156  "thumb_border": "none"
1157}
1158```
1159
1160### Current Line Highlight
1161
1162- Description: How to highlight the current line in the minimap.
1163- Setting: `current_line_highlight`
1164- Default: `null`
1165
1166**Options**
1167
11681. Inherit the editor's current line highlight setting:
1169
1170```json [settings]
1171{
1172  "minimap": {
1173    "current_line_highlight": null
1174  }
1175}
1176```
1177
11782. Highlight the current line in the minimap:
1179
1180```json [settings]
1181{
1182  "minimap": {
1183    "current_line_highlight": "line"
1184  }
1185}
1186```
1187
1188or
1189
1190```json [settings]
1191{
1192  "minimap": {
1193    "current_line_highlight": "all"
1194  }
1195}
1196```
1197
11983. Do not highlight the current line in the minimap:
1199
1200```json [settings]
1201{
1202  "minimap": {
1203    "current_line_highlight": "gutter"
1204  }
1205}
1206```
1207
1208or
1209
1210```json [settings]
1211{
1212  "minimap": {
1213    "current_line_highlight": "none"
1214  }
1215}
1216```
1217
1218## Editor Tab Bar
1219
1220- Description: Settings related to the editor's tab bar.
1221- Settings: `tab_bar`
1222- Default:
1223
1224```json [settings]
1225"tab_bar": {
1226  "show": true,
1227  "show_nav_history_buttons": true,
1228  "show_tab_bar_buttons": true
1229}
1230```
1231
1232### Show
1233
1234- Description: Whether or not to show the tab bar in the editor.
1235- Setting: `show`
1236- Default: `true`
1237
1238**Options**
1239
1240`boolean` values
1241
1242### Navigation History Buttons
1243
1244- Description: Whether or not to show the navigation history buttons.
1245- Setting: `show_nav_history_buttons`
1246- Default: `true`
1247
1248**Options**
1249
1250`boolean` values
1251
1252### Tab Bar Buttons
1253
1254- Description: Whether or not to show the tab bar buttons.
1255- Setting: `show_tab_bar_buttons`
1256- Default: `true`
1257
1258**Options**
1259
1260`boolean` values
1261
1262## Editor Tabs
1263
1264- Description: Configuration for the editor tabs.
1265- Setting: `tabs`
1266- Default:
1267
1268```json [settings]
1269"tabs": {
1270  "close_position": "right",
1271  "file_icons": false,
1272  "git_status": false,
1273  "activate_on_close": "history",
1274  "show_close_button": "hover",
1275  "show_diagnostics": "off"
1276},
1277```
1278
1279### Close Position
1280
1281- Description: Where to display close button within a tab.
1282- Setting: `close_position`
1283- Default: `right`
1284
1285**Options**
1286
12871. Display the close button on the right:
1288
1289```json [settings]
1290{
1291  "close_position": "right"
1292}
1293```
1294
12952. Display the close button on the left:
1296
1297```json [settings]
1298{
1299  "close_position": "left"
1300}
1301```
1302
1303### File Icons
1304
1305- Description: Whether to show the file icon for a tab.
1306- Setting: `file_icons`
1307- Default: `false`
1308
1309### Git Status
1310
1311- Description: Whether or not to show Git file status in tab.
1312- Setting: `git_status`
1313- Default: `false`
1314
1315### Activate on close
1316
1317- Description: What to do after closing the current tab.
1318- Setting: `activate_on_close`
1319- Default: `history`
1320
1321**Options**
1322
13231.  Activate the tab that was open previously:
1324
1325```json [settings]
1326{
1327  "activate_on_close": "history"
1328}
1329```
1330
13312. Activate the right neighbour tab if present:
1332
1333```json [settings]
1334{
1335  "activate_on_close": "neighbour"
1336}
1337```
1338
13393. Activate the left neighbour tab if present:
1340
1341```json [settings]
1342{
1343  "activate_on_close": "left_neighbour"
1344}
1345```
1346
1347### Show close button
1348
1349- Description: Controls the appearance behavior of the tab's close button.
1350- Setting: `show_close_button`
1351- Default: `hover`
1352
1353**Options**
1354
13551.  Show it just upon hovering the tab:
1356
1357```json [settings]
1358{
1359  "show_close_button": "hover"
1360}
1361```
1362
13632. Show it persistently:
1364
1365```json [settings]
1366{
1367  "show_close_button": "always"
1368}
1369```
1370
13713. Never show it, even if hovering it:
1372
1373```json [settings]
1374{
1375  "show_close_button": "hidden"
1376}
1377```
1378
1379### Show Diagnostics
1380
1381- Description: Whether to show diagnostics indicators in tabs. This setting only works when file icons are active and controls which files with diagnostic issues to mark.
1382- Setting: `show_diagnostics`
1383- Default: `off`
1384
1385**Options**
1386
13871. Do not mark any files:
1388
1389```json [settings]
1390{
1391  "show_diagnostics": "off"
1392}
1393```
1394
13952. Only mark files with errors:
1396
1397```json [settings]
1398{
1399  "show_diagnostics": "errors"
1400}
1401```
1402
14033. Mark files with errors and warnings:
1404
1405```json [settings]
1406{
1407  "show_diagnostics": "all"
1408}
1409```
1410
1411### Show Inline Code Actions
1412
1413- Description: Whether to show code action button at start of buffer line.
1414- Setting: `inline_code_actions`
1415- Default: `true`
1416
1417**Options**
1418
1419`boolean` values
1420
1421### Drag And Drop Selection
1422
1423- Description: Whether to allow drag and drop text selection in buffer. `delay` is the milliseconds that must elapse before drag and drop is allowed. Otherwise, a new text selection is created.
1424- Setting: `drag_and_drop_selection`
1425- Default:
1426
1427```json [settings]
1428"drag_and_drop_selection": {
1429  "enabled": true,
1430  "delay": 300
1431}
1432```
1433
1434## Editor Toolbar
1435
1436- Description: Whether or not to show various elements in the editor toolbar.
1437- Setting: `toolbar`
1438- Default:
1439
1440```json [settings]
1441"toolbar": {
1442  "breadcrumbs": true,
1443  "quick_actions": true,
1444  "selections_menu": true,
1445  "agent_review": true,
1446  "code_actions": false
1447},
1448```
1449
1450**Options**
1451
1452Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
1453
1454## Use System Tabs
1455
1456- Description: Whether to allow windows to tab together based on the user’s tabbing preference (macOS only).
1457- Setting: `use_system_window_tabs`
1458- Default: `false`
1459
1460**Options**
1461
1462This setting enables integration with macOS’s native window tabbing feature. When set to `true`, Zed windows can be grouped together as tabs in a single macOS window, following the system-wide tabbing preferences set by the user (such as "Always", "In Full Screen", or "Never"). This setting is only available on macOS.
1463
1464## Enable Language Server
1465
1466- Description: Whether or not to use language servers to provide code intelligence.
1467- Setting: `enable_language_server`
1468- Default: `true`
1469
1470**Options**
1471
1472`boolean` values
1473
1474## Ensure Final Newline On Save
1475
1476- Description: Removes any lines containing only whitespace at the end of the file and ensures just one newline at the end.
1477- Setting: `ensure_final_newline_on_save`
1478- Default: `true`
1479
1480**Options**
1481
1482`boolean` values
1483
1484## Expand Excerpt Lines
1485
1486- Description: The default number of lines to expand excerpts in the multibuffer by
1487- Setting: `expand_excerpt_lines`
1488- Default: `5`
1489
1490**Options**
1491
1492Positive `integer` values
1493
1494## Excerpt Context Lines
1495
1496- Description: The number of lines of context to provide when showing excerpts in the multibuffer.
1497- Setting: `excerpt_context_lines`
1498- Default: `2`
1499
1500**Options**
1501
1502Positive `integer` value between 1 and 32. Values outside of this range will be clamped to this range.
1503
1504## Extend Comment On Newline
1505
1506- Description: Whether to start a new line with a comment when a previous line is a comment as well.
1507- Setting: `extend_comment_on_newline`
1508- Default: `true`
1509
1510**Options**
1511
1512`boolean` values
1513
1514## Status Bar
1515
1516- Description: Control various elements in the status bar. Note that some items in the status bar have their own settings set elsewhere.
1517- Setting: `status_bar`
1518- Default:
1519
1520```json [settings]
1521"status_bar": {
1522  "active_language_button": true,
1523  "cursor_position_button": true,
1524  "line_endings_button": false
1525},
1526```
1527
1528There is an experimental setting that completely hides the status bar. This causes major usability problems (you will be unable to use many of Zed's features), but is provided for those who value screen real-estate above all else.
1529
1530```json
1531"status_bar": {
1532  "experimental.show": false
1533}
1534```
1535
1536## LSP
1537
1538- Description: Configuration for language servers.
1539- Setting: `lsp`
1540- Default: `null`
1541
1542**Options**
1543
1544The following settings can be overridden for specific language servers:
1545
1546- `initialization_options`
1547- `settings`
1548
1549To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
1550
1551Some options are passed via `initialization_options` to the language server. These are for options which must be specified at language server startup and when changed will require restarting the language server.
1552
1553For example to pass the `check` option to `rust-analyzer`, use the following configuration:
1554
1555```json [settings]
1556"lsp": {
1557  "rust-analyzer": {
1558    "initialization_options": {
1559      "check": {
1560        "command": "clippy" // rust-analyzer.check.command (default: "check")
1561      }
1562    }
1563  }
1564}
1565```
1566
1567While other options may be changed at a runtime and should be placed under `settings`:
1568
1569```json [settings]
1570"lsp": {
1571  "yaml-language-server": {
1572    "settings": {
1573      "yaml": {
1574        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
1575      }
1576    }
1577  }
1578}
1579```
1580
1581## Global LSP Settings
1582
1583- Description: Configuration for global LSP settings that apply to all language servers
1584- Setting: `global_lsp_settings`
1585- Default:
1586
1587```json [settings]
1588{
1589  "global_lsp_settings": {
1590    "button": true
1591  }
1592}
1593```
1594
1595**Options**
1596
1597- `button`: Whether to show the LSP status button in the status bar
1598
1599## LSP Highlight Debounce
1600
1601- Description: The debounce delay in milliseconds before querying highlights from the language server based on the current cursor location.
1602- Setting: `lsp_highlight_debounce`
1603- Default: `75`
1604
1605**Options**
1606
1607`integer` values representing milliseconds
1608
1609## Features
1610
1611- Description: Features that can be globally enabled or disabled
1612- Setting: `features`
1613- Default:
1614
1615```json [settings]
1616{
1617  "features": {
1618    "edit_prediction_provider": "zed"
1619  }
1620}
1621```
1622
1623### Edit Prediction Provider
1624
1625- Description: Which edit prediction provider to use
1626- Setting: `edit_prediction_provider`
1627- Default: `"zed"`
1628
1629**Options**
1630
16311. Use Zeta as the edit prediction provider:
1632
1633```json [settings]
1634{
1635  "features": {
1636    "edit_prediction_provider": "zed"
1637  }
1638}
1639```
1640
16412. Use Copilot as the edit prediction provider:
1642
1643```json [settings]
1644{
1645  "features": {
1646    "edit_prediction_provider": "copilot"
1647  }
1648}
1649```
1650
16513. Use Supermaven as the edit prediction provider:
1652
1653```json [settings]
1654{
1655  "features": {
1656    "edit_prediction_provider": "supermaven"
1657  }
1658}
1659```
1660
16614. Turn off edit predictions across all providers
1662
1663```json [settings]
1664{
1665  "features": {
1666    "edit_prediction_provider": "none"
1667  }
1668}
1669```
1670
1671## Format On Save
1672
1673- Description: Whether or not to perform a buffer format before saving.
1674- Setting: `format_on_save`
1675- Default: `on`
1676
1677**Options**
1678
16791. `on`, enables format on save obeying `formatter` setting:
1680
1681```json [settings]
1682{
1683  "format_on_save": "on"
1684}
1685```
1686
16872. `off`, disables format on save:
1688
1689```json [settings]
1690{
1691  "format_on_save": "off"
1692}
1693```
1694
1695## Formatter
1696
1697- Description: How to perform a buffer format.
1698- Setting: `formatter`
1699- Default: `auto`
1700
1701**Options**
1702
17031. To use the current language server, use `"language_server"`:
1704
1705```json [settings]
1706{
1707  "formatter": "language_server"
1708}
1709```
1710
17112. Or to use an external command, use `"external"`. Specify the name of the formatting program to run, and an array of arguments to pass to the program. The buffer's text will be passed to the program on stdin, and the formatted output should be written to stdout. For example, the following command would strip trailing spaces using [`sed(1)`](https://linux.die.net/man/1/sed):
1712
1713```json [settings]
1714{
1715  "formatter": {
1716    "external": {
1717      "command": "sed",
1718      "arguments": ["-e", "s/ *$//"]
1719    }
1720  }
1721}
1722```
1723
17243. External formatters may optionally include a `{buffer_path}` placeholder which at runtime will include the path of the buffer being formatted. Formatters operate by receiving file content via standard input, reformatting it and then outputting it to standard output and so normally don't know the filename of what they are formatting. Tools like Prettier support receiving the file path via a command line argument which can then used to impact formatting decisions.
1725
1726WARNING: `{buffer_path}` should not be used to direct your formatter to read from a filename. Your formatter should only read from standard input and should not read or write files directly.
1727
1728```json [settings]
1729  "formatter": {
1730    "external": {
1731      "command": "prettier",
1732      "arguments": ["--stdin-filepath", "{buffer_path}"]
1733    }
1734  }
1735```
1736
17374. Or to use code actions provided by the connected language servers, use `"code_actions"`:
1738
1739```json [settings]
1740{
1741  "formatter": [
1742    // Use ESLint's --fix:
1743    { "code_action": "source.fixAll.eslint" },
1744    // Organize imports on save:
1745    { "code_action": "source.organizeImports" }
1746  ]
1747}
1748```
1749
17505. Or to use multiple formatters consecutively, use an array of formatters:
1751
1752```json [settings]
1753{
1754  "formatter": [
1755    { "language_server": { "name": "rust-analyzer" } },
1756    {
1757      "external": {
1758        "command": "sed",
1759        "arguments": ["-e", "s/ *$//"]
1760      }
1761    }
1762  ]
1763}
1764```
1765
1766Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1767If any of the formatters fails, the subsequent ones will still be executed.
1768
1769## Auto close
1770
1771- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1772- Setting: `use_autoclose`
1773- Default: `true`
1774
1775**Options**
1776
1777`boolean` values
1778
1779## Always Treat Brackets As Autoclosed
1780
1781- Description: Controls how the editor handles the autoclosed characters.
1782- Setting: `always_treat_brackets_as_autoclosed`
1783- Default: `false`
1784
1785**Options**
1786
1787`boolean` values
1788
1789**Example**
1790
1791If the setting is set to `true`:
1792
17931. Enter in the editor: `)))`
17942. Move the cursor to the start: `^)))`
17953. Enter again: `)))`
1796
1797The result is still `)))` and not `))))))`, which is what it would be by default.
1798
1799## File Scan Exclusions
1800
1801- Setting: `file_scan_exclusions`
1802- Description: Files or globs of files that will be excluded by Zed entirely. They will be skipped during file scans, file searches, and not be displayed in the project file tree. Overrides `file_scan_inclusions`.
1803- Default:
1804
1805```json [settings]
1806"file_scan_exclusions": [
1807  "**/.git",
1808  "**/.svn",
1809  "**/.hg",
1810  "**/.jj",
1811  "**/CVS",
1812  "**/.DS_Store",
1813  "**/Thumbs.db",
1814  "**/.classpath",
1815  "**/.settings"
1816],
1817```
1818
1819Note, specifying `file_scan_exclusions` in settings.json will override the defaults (shown above). If you are looking to exclude additional items you will need to include all the default values in your settings.
1820
1821## File Scan Inclusions
1822
1823- Setting: `file_scan_inclusions`
1824- Description: Files or globs of files that will be included by Zed, even when ignored by git. This is useful for files that are not tracked by git, but are still important to your project. Note that globs that are overly broad can slow down Zed's file scanning. `file_scan_exclusions` takes precedence over these inclusions.
1825- Default:
1826
1827```json [settings]
1828"file_scan_inclusions": [".env*"],
1829```
1830
1831## File Types
1832
1833- Setting: `file_types`
1834- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1835- Default:
1836
1837```json [settings]
1838"file_types": {
1839  "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json", "**/Zed/**/*.json", "**/.vscode/**/*.json"],
1840  "Shell Script": [".env.*"]
1841}
1842```
1843
1844**Examples**
1845
1846To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1847
1848```json [settings]
1849{
1850  "file_types": {
1851    "C++": ["c"],
1852    "TOML": ["MyLockFile"],
1853    "Dockerfile": ["Dockerfile*"]
1854  }
1855}
1856```
1857
1858## Diagnostics
1859
1860- Description: Configuration for diagnostics-related features.
1861- Setting: `diagnostics`
1862- Default:
1863
1864```json [settings]
1865{
1866  "diagnostics": {
1867    "include_warnings": true,
1868    "inline": {
1869      "enabled": false
1870    },
1871    "update_with_cursor": false,
1872    "primary_only": false,
1873    "use_rendered": false
1874  }
1875}
1876```
1877
1878### Inline Diagnostics
1879
1880- Description: Whether or not to show diagnostics information inline.
1881- Setting: `inline`
1882- Default:
1883
1884```json [settings]
1885{
1886  "diagnostics": {
1887    "inline": {
1888      "enabled": false,
1889      "update_debounce_ms": 150,
1890      "padding": 4,
1891      "min_column": 0,
1892      "max_severity": null
1893    }
1894  }
1895}
1896```
1897
1898**Options**
1899
19001. Enable inline diagnostics.
1901
1902```json [settings]
1903{
1904  "diagnostics": {
1905    "inline": {
1906      "enabled": true
1907    }
1908  }
1909}
1910```
1911
19122. Delay diagnostic updates until some time after the last diagnostic update.
1913
1914```json [settings]
1915{
1916  "diagnostics": {
1917    "inline": {
1918      "enabled": true,
1919      "update_debounce_ms": 150
1920    }
1921  }
1922}
1923```
1924
19253. Set padding between the end of the source line and the start of the diagnostic.
1926
1927```json [settings]
1928{
1929  "diagnostics": {
1930    "inline": {
1931      "enabled": true,
1932      "padding": 4
1933    }
1934  }
1935}
1936```
1937
19384. Horizontally align inline diagnostics at the given column.
1939
1940```json [settings]
1941{
1942  "diagnostics": {
1943    "inline": {
1944      "enabled": true,
1945      "min_column": 80
1946    }
1947  }
1948}
1949```
1950
19515. Show only warning and error diagnostics.
1952
1953```json [settings]
1954{
1955  "diagnostics": {
1956    "inline": {
1957      "enabled": true,
1958      "max_severity": "warning"
1959    }
1960  }
1961}
1962```
1963
1964## Git
1965
1966- Description: Configuration for git-related features.
1967- Setting: `git`
1968- Default:
1969
1970```json [settings]
1971{
1972  "git": {
1973    "git_gutter": "tracked_files",
1974    "inline_blame": {
1975      "enabled": true
1976    },
1977    "branch_picker": {
1978      "show_author_name": true
1979    },
1980    "hunk_style": "staged_hollow"
1981  }
1982}
1983```
1984
1985### Git Gutter
1986
1987- Description: Whether or not to show the git gutter.
1988- Setting: `git_gutter`
1989- Default: `tracked_files`
1990
1991**Options**
1992
19931. Show git gutter in tracked files
1994
1995```json [settings]
1996{
1997  "git": {
1998    "git_gutter": "tracked_files"
1999  }
2000}
2001```
2002
20032. Hide git gutter
2004
2005```json [settings]
2006{
2007  "git": {
2008    "git_gutter": "hide"
2009  }
2010}
2011```
2012
2013### Gutter Debounce
2014
2015- Description: Sets the debounce threshold (in milliseconds) after which changes are reflected in the git gutter.
2016- Setting: `gutter_debounce`
2017- Default: `null`
2018
2019**Options**
2020
2021`integer` values representing milliseconds
2022
2023Example:
2024
2025```json [settings]
2026{
2027  "git": {
2028    "gutter_debounce": 100
2029  }
2030}
2031```
2032
2033### Inline Git Blame
2034
2035- Description: Whether or not to show git blame information inline, on the currently focused line.
2036- Setting: `inline_blame`
2037- Default:
2038
2039```json [settings]
2040{
2041  "git": {
2042    "inline_blame": {
2043      "enabled": true
2044    }
2045  }
2046}
2047```
2048
2049**Options**
2050
20511. Disable inline git blame:
2052
2053```json [settings]
2054{
2055  "git": {
2056    "inline_blame": {
2057      "enabled": false
2058    }
2059  }
2060}
2061```
2062
20632. Only show inline git blame after a delay (that starts after cursor stops moving):
2064
2065```json [settings]
2066{
2067  "git": {
2068    "inline_blame": {
2069      "delay_ms": 500
2070    }
2071  }
2072}
2073```
2074
20753. Show a commit summary next to the commit date and author:
2076
2077```json [settings]
2078{
2079  "git": {
2080    "inline_blame": {
2081      "show_commit_summary": true
2082    }
2083  }
2084}
2085```
2086
20874. Use this as the minimum column at which to display inline blame information:
2088
2089```json [settings]
2090{
2091  "git": {
2092    "inline_blame": {
2093      "min_column": 80
2094    }
2095  }
2096}
2097```
2098
20995. Set the padding between the end of the line and the inline blame hint, in ems:
2100
2101```json [settings]
2102{
2103  "git": {
2104    "inline_blame": {
2105      "padding": 10
2106    }
2107  }
2108}
2109```
2110
2111### Branch Picker
2112
2113- Description: Configuration related to the branch picker.
2114- Setting: `branch_picker`
2115- Default:
2116
2117```json [settings]
2118{
2119  "git": {
2120    "branch_picker": {
2121      "show_author_name": false
2122    }
2123  }
2124}
2125```
2126
2127**Options**
2128
21291. Show the author name in the branch picker:
2130
2131```json [settings]
2132{
2133  "git": {
2134    "branch_picker": {
2135      "show_author_name": true
2136    }
2137  }
2138}
2139```
2140
2141### Hunk Style
2142
2143- Description: What styling we should use for the diff hunks.
2144- Setting: `hunk_style`
2145- Default:
2146
2147```json [settings]
2148{
2149  "git": {
2150    "hunk_style": "staged_hollow"
2151  }
2152}
2153```
2154
2155**Options**
2156
21571. Show the staged hunks faded out and with a border:
2158
2159```json [settings]
2160{
2161  "git": {
2162    "hunk_style": "staged_hollow"
2163  }
2164}
2165```
2166
21672. Show unstaged hunks faded out and with a border:
2168
2169```json [settings]
2170{
2171  "git": {
2172    "hunk_style": "unstaged_hollow"
2173  }
2174}
2175```
2176
2177## Go to Definition Fallback
2178
2179- Description: What to do when the {#action editor::GoToDefinition} action fails to find a definition
2180- Setting: `go_to_definition_fallback`
2181- Default: `"find_all_references"`
2182
2183**Options**
2184
21851. Do nothing:
2186
2187```json [settings]
2188{
2189  "go_to_definition_fallback": "none"
2190}
2191```
2192
21932. Find references for the same symbol (default):
2194
2195```json [settings]
2196{
2197  "go_to_definition_fallback": "find_all_references"
2198}
2199```
2200
2201## Hard Tabs
2202
2203- Description: Whether to indent lines using tab characters or multiple spaces.
2204- Setting: `hard_tabs`
2205- Default: `false`
2206
2207**Options**
2208
2209`boolean` values
2210
2211## Helix Mode
2212
2213- Description: Whether or not to enable Helix mode. Enabling `helix_mode` also enables `vim_mode`. See the [Helix documentation](./helix.md) for more details.
2214- Setting: `helix_mode`
2215- Default: `false`
2216
2217**Options**
2218
2219`boolean` values
2220
2221## Indent Guides
2222
2223- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
2224- Setting: `indent_guides`
2225- Default:
2226
2227```json [settings]
2228{
2229  "indent_guides": {
2230    "enabled": true,
2231    "line_width": 1,
2232    "active_line_width": 1,
2233    "coloring": "fixed",
2234    "background_coloring": "disabled"
2235  }
2236}
2237```
2238
2239**Options**
2240
22411. Disable indent guides
2242
2243```json [settings]
2244{
2245  "indent_guides": {
2246    "enabled": false
2247  }
2248}
2249```
2250
22512. Enable indent guides for a specific language.
2252
2253```json [settings]
2254{
2255  "languages": {
2256    "Python": {
2257      "indent_guides": {
2258        "enabled": true
2259      }
2260    }
2261  }
2262}
2263```
2264
22653. Enable indent aware coloring ("rainbow indentation").
2266   The colors that are used for different indentation levels are defined in the theme (theme key: `accents`). They can be customized by using theme overrides.
2267
2268```json [settings]
2269{
2270  "indent_guides": {
2271    "enabled": true,
2272    "coloring": "indent_aware"
2273  }
2274}
2275```
2276
22774. Enable indent aware background coloring ("rainbow indentation").
2278   The colors that are used for different indentation levels are defined in the theme (theme key: `accents`). They can be customized by using theme overrides.
2279
2280```json [settings]
2281{
2282  "indent_guides": {
2283    "enabled": true,
2284    "coloring": "indent_aware",
2285    "background_coloring": "indent_aware"
2286  }
2287}
2288```
2289
2290## Hover Popover Enabled
2291
2292- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
2293- Setting: `hover_popover_enabled`
2294- Default: `true`
2295
2296**Options**
2297
2298`boolean` values
2299
2300## Hover Popover Delay
2301
2302- Description: Time to wait in milliseconds before showing the informational hover box.
2303- Setting: `hover_popover_delay`
2304- Default: `300`
2305
2306**Options**
2307
2308`integer` values representing milliseconds
2309
2310## Icon Theme
2311
2312- Description: The icon theme setting can be specified in two forms - either as the name of an icon theme or as an object containing the `mode`, `dark`, and `light` icon themes for files/folders inside Zed.
2313- Setting: `icon_theme`
2314- Default: `Zed (Default)`
2315
2316### Icon Theme Object
2317
2318- Description: Specify the icon theme using an object that includes the `mode`, `dark`, and `light`.
2319- Setting: `icon_theme`
2320- Default:
2321
2322```json [settings]
2323"icon_theme": {
2324  "mode": "system",
2325  "dark": "Zed (Default)",
2326  "light": "Zed (Default)"
2327},
2328```
2329
2330### Mode
2331
2332- Description: Specify the icon theme mode.
2333- Setting: `mode`
2334- Default: `system`
2335
2336**Options**
2337
23381. Set the icon theme to dark mode
2339
2340```json [settings]
2341{
2342  "mode": "dark"
2343}
2344```
2345
23462. Set the icon theme to light mode
2347
2348```json [settings]
2349{
2350  "mode": "light"
2351}
2352```
2353
23543. Set the icon theme to system mode
2355
2356```json [settings]
2357{
2358  "mode": "system"
2359}
2360```
2361
2362### Dark
2363
2364- Description: The name of the dark icon theme.
2365- Setting: `dark`
2366- Default: `Zed (Default)`
2367
2368**Options**
2369
2370Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2371
2372### Light
2373
2374- Description: The name of the light icon theme.
2375- Setting: `light`
2376- Default: `Zed (Default)`
2377
2378**Options**
2379
2380Run the {#action icon_theme_selector::Toggle} action in the command palette to see a current list of valid icon themes names.
2381
2382## Image Viewer
2383
2384- Description: Settings for image viewer functionality
2385- Setting: `image_viewer`
2386- Default:
2387
2388```json [settings]
2389{
2390  "image_viewer": {
2391    "unit": "binary"
2392  }
2393}
2394```
2395
2396**Options**
2397
2398### Unit
2399
2400- Description: The unit for image file sizes
2401- Setting: `unit`
2402- Default: `"binary"`
2403
2404**Options**
2405
24061. Use binary units (KiB, MiB):
2407
2408```json [settings]
2409{
2410  "image_viewer": {
2411    "unit": "binary"
2412  }
2413}
2414```
2415
24162. Use decimal units (KB, MB):
2417
2418```json [settings]
2419{
2420  "image_viewer": {
2421    "unit": "decimal"
2422  }
2423}
2424```
2425
2426## Inlay hints
2427
2428- Description: Configuration for displaying extra text with hints in the editor.
2429- Setting: `inlay_hints`
2430- Default:
2431
2432```json [settings]
2433"inlay_hints": {
2434  "enabled": false,
2435  "show_type_hints": true,
2436  "show_parameter_hints": true,
2437  "show_other_hints": true,
2438  "show_background": false,
2439  "edit_debounce_ms": 700,
2440  "scroll_debounce_ms": 50,
2441  "toggle_on_modifiers_press": null
2442}
2443```
2444
2445**Options**
2446
2447Inlay hints querying consists of two parts: editor (client) and LSP server.
2448With the inlay settings above are changed to enable the hints, editor will start to query certain types of hints and react on LSP hint refresh request from the server.
2449At this point, the server may or may not return hints depending on its implementation, further configuration might be needed, refer to the corresponding LSP server documentation.
2450
2451The following languages have inlay hints preconfigured by Zed:
2452
2453- [Go](https://docs.zed.dev/languages/go)
2454- [Rust](https://docs.zed.dev/languages/rust)
2455- [Svelte](https://docs.zed.dev/languages/svelte)
2456- [TypeScript](https://docs.zed.dev/languages/typescript)
2457
2458Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
2459
2460Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
2461Settings-related hint updates are not debounced.
2462
2463All possible config values for `toggle_on_modifiers_press` are:
2464
2465```json [settings]
2466"inlay_hints": {
2467  "toggle_on_modifiers_press": {
2468    "control": true,
2469    "shift": true,
2470    "alt": true,
2471    "platform": true,
2472    "function": true
2473  }
2474}
2475```
2476
2477Unspecified values have a `false` value, hints won't be toggled if all the modifiers are `false` or not all the modifiers are pressed.
2478
2479## Journal
2480
2481- Description: Configuration for the journal.
2482- Setting: `journal`
2483- Default:
2484
2485```json [settings]
2486"journal": {
2487  "path": "~",
2488  "hour_format": "hour12"
2489}
2490```
2491
2492### Path
2493
2494- Description: The path of the directory where journal entries are stored.
2495- Setting: `path`
2496- Default: `~`
2497
2498**Options**
2499
2500`string` values
2501
2502### Hour Format
2503
2504- Description: The format to use for displaying hours in the journal.
2505- Setting: `hour_format`
2506- Default: `hour12`
2507
2508**Options**
2509
25101. 12-hour format:
2511
2512```json [settings]
2513{
2514  "hour_format": "hour12"
2515}
2516```
2517
25182. 24-hour format:
2519
2520```json [settings]
2521{
2522  "hour_format": "hour24"
2523}
2524```
2525
2526## JSX Tag Auto Close
2527
2528- Description: Whether to automatically close JSX tags
2529- Setting: `jsx_tag_auto_close`
2530- Default:
2531
2532```json [settings]
2533{
2534  "jsx_tag_auto_close": {
2535    "enabled": true
2536  }
2537}
2538```
2539
2540**Options**
2541
2542- `enabled`: Whether to enable automatic JSX tag closing
2543
2544## Languages
2545
2546- Description: Configuration for specific languages.
2547- Setting: `languages`
2548- Default: `null`
2549
2550**Options**
2551
2552To override settings for a language, add an entry for that languages name to the `languages` value. Example:
2553
2554```json [settings]
2555"languages": {
2556  "C": {
2557    "format_on_save": "off",
2558    "preferred_line_length": 64,
2559    "soft_wrap": "preferred_line_length"
2560  },
2561  "JSON": {
2562    "tab_size": 4
2563  }
2564}
2565```
2566
2567The following settings can be overridden for each specific language:
2568
2569- [`enable_language_server`](#enable-language-server)
2570- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
2571- [`format_on_save`](#format-on-save)
2572- [`formatter`](#formatter)
2573- [`hard_tabs`](#hard-tabs)
2574- [`preferred_line_length`](#preferred-line-length)
2575- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
2576- [`show_edit_predictions`](#show-edit-predictions)
2577- [`show_whitespaces`](#show-whitespaces)
2578- [`whitespace_map`](#whitespace-map)
2579- [`soft_wrap`](#soft-wrap)
2580- [`tab_size`](#tab-size)
2581- [`use_autoclose`](#use-autoclose)
2582- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
2583
2584These values take in the same options as the root-level settings with the same name.
2585
2586## Language Models
2587
2588- Description: Configuration for language model providers
2589- Setting: `language_models`
2590- Default:
2591
2592```json [settings]
2593{
2594  "language_models": {
2595    "anthropic": {
2596      "api_url": "https://api.anthropic.com"
2597    },
2598    "google": {
2599      "api_url": "https://generativelanguage.googleapis.com"
2600    },
2601    "ollama": {
2602      "api_url": "http://localhost:11434"
2603    },
2604    "openai": {
2605      "api_url": "https://api.openai.com/v1"
2606    }
2607  }
2608}
2609```
2610
2611**Options**
2612
2613Configuration for various AI model providers including API URLs and authentication settings.
2614
2615## Line Indicator Format
2616
2617- Description: Format for line indicator in the status bar
2618- Setting: `line_indicator_format`
2619- Default: `"short"`
2620
2621**Options**
2622
26231. Short format:
2624
2625```json [settings]
2626{
2627  "line_indicator_format": "short"
2628}
2629```
2630
26312. Long format:
2632
2633```json [settings]
2634{
2635  "line_indicator_format": "long"
2636}
2637```
2638
2639## Linked Edits
2640
2641- Description: Whether to perform linked edits of associated ranges, if the language server supports it. For example, when editing opening `<html>` tag, the contents of the closing `</html>` tag will be edited as well.
2642- Setting: `linked_edits`
2643- Default: `true`
2644
2645**Options**
2646
2647`boolean` values
2648
2649## LSP Document Colors
2650
2651- Description: Whether to show document color information from the language server
2652- Setting: `lsp_document_colors`
2653- Default: `true`
2654
2655**Options**
2656
2657`boolean` values
2658
2659## Max Tabs
2660
2661- Description: Maximum number of tabs to show in the tab bar
2662- Setting: `max_tabs`
2663- Default: `null`
2664
2665**Options**
2666
2667Positive `integer` values or `null` for unlimited tabs
2668
2669## Middle Click Paste (Linux only)
2670
2671- Description: Enable middle-click paste on Linux
2672- Setting: `middle_click_paste`
2673- Default: `true`
2674
2675**Options**
2676
2677`boolean` values
2678
2679## Multi Cursor Modifier
2680
2681- Description: Determines the modifier to be used to add multiple cursors with the mouse. The open hover link mouse gestures will adapt such that it do not conflict with the multicursor modifier.
2682- Setting: `multi_cursor_modifier`
2683- Default: `alt`
2684
2685**Options**
2686
26871. Maps to `Alt` on Linux and Windows and to `Option` on macOS:
2688
2689```json [settings]
2690{
2691  "multi_cursor_modifier": "alt"
2692}
2693```
2694
26952. Maps `Control` on Linux and Windows and to `Command` on macOS:
2696
2697```json [settings]
2698{
2699  "multi_cursor_modifier": "cmd_or_ctrl" // alias: "cmd", "ctrl"
2700}
2701```
2702
2703## Node
2704
2705- Description: Configuration for Node.js integration
2706- Setting: `node`
2707- Default:
2708
2709```json [settings]
2710{
2711  "node": {
2712    "ignore_system_version": false,
2713    "path": null,
2714    "npm_path": null
2715  }
2716}
2717```
2718
2719**Options**
2720
2721- `ignore_system_version`: Whether to ignore the system Node.js version
2722- `path`: Custom path to Node.js binary
2723- `npm_path`: Custom path to npm binary
2724
2725## Network Proxy
2726
2727- Description: Configure a network proxy for Zed.
2728- Setting: `proxy`
2729- Default: `null`
2730
2731**Options**
2732
2733The proxy setting must contain a URL to the proxy.
2734
2735The following URI schemes are supported:
2736
2737- `http`
2738- `https`
2739- `socks4` - SOCKS4 proxy with local DNS
2740- `socks4a` - SOCKS4 proxy with remote DNS
2741- `socks5` - SOCKS5 proxy with local DNS
2742- `socks5h` - SOCKS5 proxy with remote DNS
2743
2744`http` will be used when no scheme is specified.
2745
2746By default no proxy will be used, or Zed will attempt to retrieve proxy settings from environment variables, such as `http_proxy`, `HTTP_PROXY`, `https_proxy`, `HTTPS_PROXY`, `all_proxy`, `ALL_PROXY`, `no_proxy` and `NO_PROXY`.
2747
2748For example, to set an `http` proxy, add the following to your settings:
2749
2750```json [settings]
2751{
2752  "proxy": "http://127.0.0.1:10809"
2753}
2754```
2755
2756Or to set a `socks5` proxy:
2757
2758```json [settings]
2759{
2760  "proxy": "socks5h://localhost:10808"
2761}
2762```
2763
2764If you wish to exclude certain hosts from using the proxy, set the `NO_PROXY` environment variable. This accepts a comma-separated list of hostnames, host suffixes, IPv4/IPv6 addresses or blocks that should not use the proxy. For example if your environment included `NO_PROXY="google.com, 192.168.1.0/24"` all hosts in `192.168.1.*`, `google.com` and `*.google.com` would bypass the proxy. See [reqwest NoProxy docs](https://docs.rs/reqwest/latest/reqwest/struct.NoProxy.html#method.from_string) for more.
2765
2766## On Last Window Closed
2767
2768- Description: What to do when the last window is closed
2769- Setting: `on_last_window_closed`
2770- Default: `"platform_default"`
2771
2772**Options**
2773
27741. Use platform default behavior:
2775
2776```json [settings]
2777{
2778  "on_last_window_closed": "platform_default"
2779}
2780```
2781
27822. Always quit the application:
2783
2784```json [settings]
2785{
2786  "on_last_window_closed": "quit_app"
2787}
2788```
2789
2790## Profiles
2791
2792- Description: Configuration profiles that can be applied on top of existing settings
2793- Setting: `profiles`
2794- Default: `{}`
2795
2796**Options**
2797
2798Configuration object for defining settings profiles. Example:
2799
2800```json [settings]
2801{
2802  "profiles": {
2803    "presentation": {
2804      "buffer_font_size": 20,
2805      "ui_font_size": 18,
2806      "theme": "One Light"
2807    }
2808  }
2809}
2810```
2811
2812## Preview tabs
2813
2814- Description:
2815  Preview tabs allow you to open files in preview mode, where they close automatically when you switch to another file unless you explicitly pin them. This is useful for quickly viewing files without cluttering your workspace. Preview tabs display their file names in italics. \
2816   There are several ways to convert a preview tab into a regular tab:
2817
2818  - Double-clicking on the file
2819  - Double-clicking on the tab header
2820  - Using the {#action project_panel::OpenPermanent} action
2821  - Editing the file
2822  - Dragging the file to a different pane
2823
2824- Setting: `preview_tabs`
2825- Default:
2826
2827```json [settings]
2828"preview_tabs": {
2829  "enabled": true,
2830  "enable_preview_from_file_finder": false,
2831  "enable_preview_from_code_navigation": false,
2832}
2833```
2834
2835### Enable preview from file finder
2836
2837- Description: Determines whether to open files in preview mode when selected from the file finder.
2838- Setting: `enable_preview_from_file_finder`
2839- Default: `false`
2840
2841**Options**
2842
2843`boolean` values
2844
2845### Enable preview from code navigation
2846
2847- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
2848- Setting: `enable_preview_from_code_navigation`
2849- Default: `false`
2850
2851**Options**
2852
2853`boolean` values
2854
2855## File Finder
2856
2857### File Icons
2858
2859- Description: Whether to show file icons in the file finder.
2860- Setting: `file_icons`
2861- Default: `true`
2862
2863### Modal Max Width
2864
2865- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2866- Setting: `modal_max_width`
2867- Default: `small`
2868
2869### Skip Focus For Active In Search
2870
2871- Description: Determines whether the file finder should skip focus for the active file in search results.
2872- Setting: `skip_focus_for_active_in_search`
2873- Default: `true`
2874
2875## Pane Split Direction Horizontal
2876
2877- Description: The direction that you want to split panes horizontally
2878- Setting: `pane_split_direction_horizontal`
2879- Default: `"up"`
2880
2881**Options**
2882
28831. Split upward:
2884
2885```json [settings]
2886{
2887  "pane_split_direction_horizontal": "up"
2888}
2889```
2890
28912. Split downward:
2892
2893```json [settings]
2894{
2895  "pane_split_direction_horizontal": "down"
2896}
2897```
2898
2899## Pane Split Direction Vertical
2900
2901- Description: The direction that you want to split panes vertically
2902- Setting: `pane_split_direction_vertical`
2903- Default: `"left"`
2904
2905**Options**
2906
29071. Split to the left:
2908
2909```json [settings]
2910{
2911  "pane_split_direction_vertical": "left"
2912}
2913```
2914
29152. Split to the right:
2916
2917```json [settings]
2918{
2919  "pane_split_direction_vertical": "right"
2920}
2921```
2922
2923## Preferred Line Length
2924
2925- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2926- Setting: `preferred_line_length`
2927- Default: `80`
2928
2929**Options**
2930
2931`integer` values
2932
2933## Private Files
2934
2935- Description: Globs to match against file paths to determine if a file is private
2936- Setting: `private_files`
2937- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/secrets.yml"]`
2938
2939**Options**
2940
2941List of `string` glob patterns
2942
2943## Projects Online By Default
2944
2945- Description: Whether or not to show the online projects view by default.
2946- Setting: `projects_online_by_default`
2947- Default: `true`
2948
2949**Options**
2950
2951`boolean` values
2952
2953## Read SSH Config
2954
2955- Description: Whether to read SSH configuration files
2956- Setting: `read_ssh_config`
2957- Default: `true`
2958
2959**Options**
2960
2961`boolean` values
2962
2963## Redact Private Values
2964
2965- Description: Hide the values of variables from visual display in private files
2966- Setting: `redact_private_values`
2967- Default: `false`
2968
2969**Options**
2970
2971`boolean` values
2972
2973## Relative Line Numbers
2974
2975- Description: Whether to show relative line numbers in the gutter
2976- Setting: `relative_line_numbers`
2977- Default: `false`
2978
2979**Options**
2980
2981`boolean` values
2982
2983## Remove Trailing Whitespace On Save
2984
2985- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
2986- Setting: `remove_trailing_whitespace_on_save`
2987- Default: `true`
2988
2989**Options**
2990
2991`boolean` values
2992
2993## Resize All Panels In Dock
2994
2995- Description: Whether to resize all the panels in a dock when resizing the dock. Can be a combination of "left", "right" and "bottom".
2996- Setting: `resize_all_panels_in_dock`
2997- Default: `["left"]`
2998
2999**Options**
3000
3001List of strings containing any combination of:
3002
3003- `"left"`: Resize left dock panels together
3004- `"right"`: Resize right dock panels together
3005- `"bottom"`: Resize bottom dock panels together
3006
3007## Restore on File Reopen
3008
3009- Description: Whether to attempt to restore previous file's state when opening it again. The state is stored per pane.
3010- Setting: `restore_on_file_reopen`
3011- Default: `true`
3012
3013**Options**
3014
3015`boolean` values
3016
3017## Restore on Startup
3018
3019- Description: Controls session restoration on startup.
3020- Setting: `restore_on_startup`
3021- Default: `last_session`
3022
3023**Options**
3024
30251. Restore all workspaces that were open when quitting Zed:
3026
3027```json [settings]
3028{
3029  "restore_on_startup": "last_session"
3030}
3031```
3032
30332. Restore the workspace that was closed last:
3034
3035```json [settings]
3036{
3037  "restore_on_startup": "last_workspace"
3038}
3039```
3040
30413. Always start with an empty editor:
3042
3043```json [settings]
3044{
3045  "restore_on_startup": "none"
3046}
3047```
3048
3049## Scroll Beyond Last Line
3050
3051- Description: Whether the editor will scroll beyond the last line
3052- Setting: `scroll_beyond_last_line`
3053- Default: `"one_page"`
3054
3055**Options**
3056
30571. Scroll one page beyond the last line by one page:
3058
3059```json [settings]
3060{
3061  "scroll_beyond_last_line": "one_page"
3062}
3063```
3064
30652. The editor will scroll beyond the last line by the same amount of lines as `vertical_scroll_margin`:
3066
3067```json [settings]
3068{
3069  "scroll_beyond_last_line": "vertical_scroll_margin"
3070}
3071```
3072
30733. The editor will not scroll beyond the last line:
3074
3075```json [settings]
3076{
3077  "scroll_beyond_last_line": "off"
3078}
3079```
3080
3081**Options**
3082
3083`boolean` values
3084
3085## Scroll Sensitivity
3086
3087- Description: Scroll sensitivity multiplier. This multiplier is applied to both the horizontal and vertical delta values while scrolling.
3088- Setting: `scroll_sensitivity`
3089- Default: `1.0`
3090
3091**Options**
3092
3093Positive `float` values
3094
3095### Fast Scroll Sensitivity
3096
3097- Description: Scroll sensitivity multiplier for fast scrolling. This multiplier is applied to both the horizontal and vertical delta values while scrolling. Fast scrolling happens when a user holds the alt or option key while scrolling.
3098- Setting: `fast_scroll_sensitivity`
3099- Default: `4.0`
3100
3101**Options**
3102
3103Positive `float` values
3104
3105### Horizontal Scroll Margin
3106
3107- Description: The number of characters to keep on either side when scrolling with the mouse
3108- Setting: `horizontal_scroll_margin`
3109- Default: `5`
3110
3111**Options**
3112
3113Non-negative `integer` values
3114
3115### Vertical Scroll Margin
3116
3117- Description: The number of lines to keep above/below the cursor when scrolling with the keyboard
3118- Setting: `vertical_scroll_margin`
3119- Default: `3`
3120
3121**Options**
3122
3123Non-negative `integer` values
3124
3125## Search
3126
3127- Description: Search options to enable by default when opening new project and buffer searches.
3128- Setting: `search`
3129- Default:
3130
3131```json [settings]
3132"search": {
3133  "whole_word": false,
3134  "case_sensitive": false,
3135  "include_ignored": false,
3136  "regex": false
3137},
3138```
3139
3140## Search Wrap
3141
3142- Description: If `search_wrap` is disabled, search result do not wrap around the end of the file
3143- Setting: `search_wrap`
3144- Default: `true`
3145
3146## Seed Search Query From Cursor
3147
3148- Description: When to populate a new search's query based on the text under the cursor.
3149- Setting: `seed_search_query_from_cursor`
3150- Default: `always`
3151
3152**Options**
3153
31541. `always` always populate the search query with the word under the cursor
31552. `selection` only populate the search query when there is text selected
31563. `never` never populate the search query
3157
3158## Use Smartcase Search
3159
3160- Description: When enabled, automatically adjusts search case sensitivity based on your query. If your search query contains any uppercase letters, the search becomes case-sensitive; if it contains only lowercase letters, the search becomes case-insensitive. \
3161  This applies to both in-file searches and project-wide searches.
3162- Setting: `use_smartcase_search`
3163- Default: `false`
3164
3165**Options**
3166
3167`boolean` values
3168
3169Examples:
3170
3171- Searching for "function" would match "function", "Function", "FUNCTION", etc.
3172- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
3173
3174## Show Call Status Icon
3175
3176- Description: Whether or not to show the call status icon in the status bar.
3177- Setting: `show_call_status_icon`
3178- Default: `true`
3179
3180**Options**
3181
3182`boolean` values
3183
3184## Completions
3185
3186- Description: Controls how completions are processed for this language.
3187- Setting: `completions`
3188- Default:
3189
3190```json [settings]
3191{
3192  "completions": {
3193    "words": "fallback",
3194    "words_min_length": 3,
3195    "lsp": true,
3196    "lsp_fetch_timeout_ms": 0,
3197    "lsp_insert_mode": "replace_suffix"
3198  }
3199}
3200```
3201
3202### Words
3203
3204- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
3205- Setting: `words`
3206- Default: `fallback`
3207
3208**Options**
3209
32101. `enabled` - Always fetch document's words for completions along with LSP completions
32112. `fallback` - Only if LSP response errors or times out, use document's words to show completions
32123. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
3213
3214### Min Words Query Length
3215
3216- Description: Minimum number of characters required to automatically trigger word-based completions.
3217  Before that value, it's still possible to trigger the words-based completion manually with the corresponding editor command.
3218- Setting: `words_min_length`
3219- Default: `3`
3220
3221**Options**
3222
3223Positive integer values
3224
3225### LSP
3226
3227- Description: Whether to fetch LSP completions or not.
3228- Setting: `lsp`
3229- Default: `true`
3230
3231**Options**
3232
3233`boolean` values
3234
3235### LSP Fetch Timeout (ms)
3236
3237- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
3238- Setting: `lsp_fetch_timeout_ms`
3239- Default: `0`
3240
3241**Options**
3242
3243`integer` values representing milliseconds
3244
3245### LSP Insert Mode
3246
3247- Description: Controls what range to replace when accepting LSP completions.
3248- Setting: `lsp_insert_mode`
3249- Default: `replace_suffix`
3250
3251**Options**
3252
32531. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
32542. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
32553. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
32564. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
3257
3258## Show Completions On Input
3259
3260- Description: Whether or not to show completions as you type.
3261- Setting: `show_completions_on_input`
3262- Default: `true`
3263
3264**Options**
3265
3266`boolean` values
3267
3268## Show Completion Documentation
3269
3270- Description: Whether to display inline and alongside documentation for items in the completions menu.
3271- Setting: `show_completion_documentation`
3272- Default: `true`
3273
3274**Options**
3275
3276`boolean` values
3277
3278## Show Edit Predictions
3279
3280- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
3281- Setting: `show_edit_predictions`
3282- Default: `true`
3283
3284**Options**
3285
3286`boolean` values
3287
3288## Show Whitespaces
3289
3290- Description: Whether or not to render whitespace characters in the editor.
3291- Setting: `show_whitespaces`
3292- Default: `selection`
3293
3294**Options**
3295
32961. `all`
32972. `selection`
32983. `none`
32994. `boundary`
3300
3301## Whitespace Map
3302
3303- Description: Specify the characters used to render whitespace when show_whitespaces is enabled.
3304- Setting: `whitespace_map`
3305- Default:
3306
3307```json [settings]
3308{
3309  "whitespace_map": {
3310    "space": "•",
3311    "tab": "→"
3312  }
3313}
3314```
3315
3316## Soft Wrap
3317
3318- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
3319- Setting: `soft_wrap`
3320- Default: `none`
3321
3322**Options**
3323
33241. `none` to avoid wrapping generally, unless the line is too long
33252. `prefer_line` (deprecated, same as `none`)
33263. `editor_width` to wrap lines that overflow the editor width
33274. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
33285. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
3329
3330## Show Wrap Guides
3331
3332- Description: Whether to show wrap guides (vertical rulers) in the editor. Setting this to true will show a guide at the 'preferred_line_length' value if 'soft_wrap' is set to 'preferred_line_length', and will show any additional guides as specified by the 'wrap_guides' setting.
3333- Setting: `show_wrap_guides`
3334- Default: `true`
3335
3336**Options**
3337
3338`boolean` values
3339
3340## Use On Type Format
3341
3342- Description: Whether to use additional LSP queries to format (and amend) the code after every "trigger" symbol input, defined by LSP server capabilities
3343- Setting: `use_on_type_format`
3344- Default: `true`
3345
3346**Options**
3347
3348`boolean` values
3349
3350## Use Auto Surround
3351
3352- Description: Whether to automatically surround selected text when typing opening parenthesis, bracket, brace, single or double quote characters. For example, when you select text and type '(', Zed will surround the text with ().
3353- Setting: `use_auto_surround`
3354- Default: `true`
3355
3356**Options**
3357
3358`boolean` values
3359
3360## Use System Path Prompts
3361
3362- Description: Whether to use the system provided dialogs for Open and Save As. When set to false, Zed will use the built-in keyboard-first pickers.
3363- Setting: `use_system_path_prompts`
3364- Default: `true`
3365
3366**Options**
3367
3368`boolean` values
3369
3370## Use System Prompts
3371
3372- Description: Whether to use the system provided dialogs for prompts, such as confirmation prompts. When set to false, Zed will use its built-in prompts. Note that on Linux, this option is ignored and Zed will always use the built-in prompts.
3373- Setting: `use_system_prompts`
3374- Default: `true`
3375
3376**Options**
3377
3378`boolean` values
3379
3380## Wrap Guides (Vertical Rulers)
3381
3382- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
3383- Setting: `wrap_guides`
3384- Default: []
3385
3386**Options**
3387
3388List of `integer` column numbers
3389
3390## Tab Size
3391
3392- Description: The number of spaces to use for each tab character.
3393- Setting: `tab_size`
3394- Default: `4`
3395
3396**Options**
3397
3398`integer` values
3399
3400## Tasks
3401
3402- Description: Configuration for tasks that can be run within Zed
3403- Setting: `tasks`
3404- Default:
3405
3406```json [settings]
3407{
3408  "tasks": {
3409    "variables": {},
3410    "enabled": true,
3411    "prefer_lsp": false
3412  }
3413}
3414```
3415
3416**Options**
3417
3418- `variables`: Custom variables for task configuration
3419- `enabled`: Whether tasks are enabled
3420- `prefer_lsp`: Whether to prefer LSP-provided tasks over Zed language extension ones
3421
3422## Telemetry
3423
3424- Description: Control what info is collected by Zed.
3425- Setting: `telemetry`
3426- Default:
3427
3428```json [settings]
3429"telemetry": {
3430  "diagnostics": true,
3431  "metrics": true
3432},
3433```
3434
3435**Options**
3436
3437### Diagnostics
3438
3439- Description: Setting for sending debug-related data, such as crash reports.
3440- Setting: `diagnostics`
3441- Default: `true`
3442
3443**Options**
3444
3445`boolean` values
3446
3447### Metrics
3448
3449- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
3450- Setting: `metrics`
3451- Default: `true`
3452
3453**Options**
3454
3455`boolean` values
3456
3457## Terminal
3458
3459- Description: Configuration for the terminal.
3460- Setting: `terminal`
3461- Default:
3462
3463```json [settings]
3464{
3465  "terminal": {
3466    "alternate_scroll": "off",
3467    "blinking": "terminal_controlled",
3468    "copy_on_select": false,
3469    "keep_selection_on_copy": true,
3470    "dock": "bottom",
3471    "default_width": 640,
3472    "default_height": 320,
3473    "detect_venv": {
3474      "on": {
3475        "directories": [".env", "env", ".venv", "venv"],
3476        "activate_script": "default"
3477      }
3478    },
3479    "env": {},
3480    "font_family": null,
3481    "font_features": null,
3482    "font_size": null,
3483    "line_height": "comfortable",
3484    "minimum_contrast": 45,
3485    "option_as_meta": false,
3486    "button": true,
3487    "shell": "system",
3488    "toolbar": {
3489      "breadcrumbs": false
3490    },
3491    "working_directory": "current_project_directory",
3492    "scrollbar": {
3493      "show": null
3494    }
3495  }
3496}
3497```
3498
3499### Terminal: Dock
3500
3501- Description: Control the position of the dock
3502- Setting: `dock`
3503- Default: `bottom`
3504
3505**Options**
3506
3507`"bottom"`, `"left"` or `"right"`
3508
3509### Terminal: Alternate Scroll
3510
3511- Description: Set whether Alternate Scroll mode (DECSET code: `?1007`) is active by default. Alternate Scroll mode converts mouse scroll events into up / down key presses when in the alternate screen (e.g. when running applications like vim or less). The terminal can still set and unset this mode with ANSI escape codes.
3512- Setting: `alternate_scroll`
3513- Default: `off`
3514
3515**Options**
3516
35171. Default alternate scroll mode to off
3518
3519```json [settings]
3520{
3521  "terminal": {
3522    "alternate_scroll": "off"
3523  }
3524}
3525```
3526
35272. Default alternate scroll mode to on
3528
3529```json [settings]
3530{
3531  "terminal": {
3532    "alternate_scroll": "on"
3533  }
3534}
3535```
3536
3537### Terminal: Blinking
3538
3539- Description: Set the cursor blinking behavior in the terminal
3540- Setting: `blinking`
3541- Default: `terminal_controlled`
3542
3543**Options**
3544
35451. Never blink the cursor, ignore the terminal mode
3546
3547```json [settings]
3548{
3549  "terminal": {
3550    "blinking": "off"
3551  }
3552}
3553```
3554
35552. Default the cursor blink to off, but allow the terminal to turn blinking on
3556
3557```json [settings]
3558{
3559  "terminal": {
3560    "blinking": "terminal_controlled"
3561  }
3562}
3563```
3564
35653. Always blink the cursor, ignore the terminal mode
3566
3567```json [settings]
3568{
3569  "terminal": {
3570    "blinking": "on"
3571  }
3572}
3573```
3574
3575### Terminal: Copy On Select
3576
3577- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
3578- Setting: `copy_on_select`
3579- Default: `false`
3580
3581**Options**
3582
3583`boolean` values
3584
3585**Example**
3586
3587```json [settings]
3588{
3589  "terminal": {
3590    "copy_on_select": true
3591  }
3592}
3593```
3594
3595### Terminal: Cursor Shape
3596
3597- Description: Controls the visual shape of the cursor in the terminal. When not explicitly set, it defaults to a block shape.
3598- Setting: `cursor_shape`
3599- Default: `null` (defaults to block)
3600
3601**Options**
3602
36031. A block that surrounds the following character
3604
3605```json [settings]
3606{
3607  "terminal": {
3608    "cursor_shape": "block"
3609  }
3610}
3611```
3612
36132. A vertical bar
3614
3615```json [settings]
3616{
3617  "terminal": {
3618    "cursor_shape": "bar"
3619  }
3620}
3621```
3622
36233. An underline / underscore that runs along the following character
3624
3625```json [settings]
3626{
3627  "terminal": {
3628    "cursor_shape": "underline"
3629  }
3630}
3631```
3632
36334. A box drawn around the following character
3634
3635```json [settings]
3636{
3637  "terminal": {
3638    "cursor_shape": "hollow"
3639  }
3640}
3641```
3642
3643### Terminal: Keep Selection On Copy
3644
3645- Description: Whether or not to keep the selection in the terminal after copying text.
3646- Setting: `keep_selection_on_copy`
3647- Default: `true`
3648
3649**Options**
3650
3651`boolean` values
3652
3653**Example**
3654
3655```json [settings]
3656{
3657  "terminal": {
3658    "keep_selection_on_copy": false
3659  }
3660}
3661```
3662
3663### Terminal: Env
3664
3665- Description: Any key-value pairs added to this object will be added to the terminal's environment. Keys must be unique, use `:` to separate multiple values in a single variable
3666- Setting: `env`
3667- Default: `{}`
3668
3669**Example**
3670
3671```json [settings]
3672{
3673  "terminal": {
3674    "env": {
3675      "ZED": "1",
3676      "KEY": "value1:value2"
3677    }
3678  }
3679}
3680```
3681
3682### Terminal: Font Size
3683
3684- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
3685- Setting: `font_size`
3686- Default: `null`
3687
3688**Options**
3689
3690`integer` values
3691
3692```json [settings]
3693{
3694  "terminal": {
3695    "font_size": 15
3696  }
3697}
3698```
3699
3700### Terminal: Font Family
3701
3702- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
3703- Setting: `font_family`
3704- Default: `null`
3705
3706**Options**
3707
3708The name of any font family installed on the user's system
3709
3710```json [settings]
3711{
3712  "terminal": {
3713    "font_family": "Berkeley Mono"
3714  }
3715}
3716```
3717
3718### Terminal: Font Features
3719
3720- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
3721- Setting: `font_features`
3722- Default: `null`
3723- Platform: macOS and Windows.
3724
3725**Options**
3726
3727See Buffer Font Features
3728
3729```json [settings]
3730{
3731  "terminal": {
3732    "font_features": {
3733      "calt": false
3734      // See Buffer Font Features for more features
3735    }
3736  }
3737}
3738```
3739
3740### Terminal: Line Height
3741
3742- Description: Set the terminal's line height.
3743- Setting: `line_height`
3744- Default: `standard`
3745
3746**Options**
3747
37481. Use a line height that's `comfortable` for reading, 1.618.
3749
3750```json [settings]
3751{
3752  "terminal": {
3753    "line_height": "comfortable"
3754  }
3755}
3756```
3757
37582. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters. (default)
3759
3760```json [settings]
3761{
3762  "terminal": {
3763    "line_height": "standard"
3764  }
3765}
3766```
3767
37683.  Use a custom line height.
3769
3770```json [settings]
3771{
3772  "terminal": {
3773    "line_height": {
3774      "custom": 2
3775    }
3776  }
3777}
3778```
3779
3780### Terminal: Minimum Contrast
3781
3782- Description: Controls the minimum contrast between foreground and background colors in the terminal. Uses the APCA (Accessible Perceptual Contrast Algorithm) for color adjustments. Set this to 0 to disable this feature.
3783- Setting: `minimum_contrast`
3784- Default: `45`
3785
3786**Options**
3787
3788`integer` values from 0 to 106. Common recommended values:
3789
3790- `0`: No contrast adjustment
3791- `45`: Minimum for large fluent text (default)
3792- `60`: Minimum for other content text
3793- `75`: Minimum for body text
3794- `90`: Preferred for body text
3795
3796```json [settings]
3797{
3798  "terminal": {
3799    "minimum_contrast": 45
3800  }
3801}
3802```
3803
3804### Terminal: Option As Meta
3805
3806- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
3807- Setting: `option_as_meta`
3808- Default: `false`
3809
3810**Options**
3811
3812`boolean` values
3813
3814```json [settings]
3815{
3816  "terminal": {
3817    "option_as_meta": true
3818  }
3819}
3820```
3821
3822### Terminal: Shell
3823
3824- Description: What shell to use when launching the terminal.
3825- Setting: `shell`
3826- Default: `system`
3827
3828**Options**
3829
38301. Use the system's default terminal configuration (usually the `/etc/passwd` file).
3831
3832```json [settings]
3833{
3834  "terminal": {
3835    "shell": "system"
3836  }
3837}
3838```
3839
38402. A program to launch:
3841
3842```json [settings]
3843{
3844  "terminal": {
3845    "shell": {
3846      "program": "sh"
3847    }
3848  }
3849}
3850```
3851
38523. A program with arguments:
3853
3854```json [settings]
3855{
3856  "terminal": {
3857    "shell": {
3858      "with_arguments": {
3859        "program": "/bin/bash",
3860        "args": ["--login"]
3861      }
3862    }
3863  }
3864}
3865```
3866
3867## Terminal: Detect Virtual Environments {#terminal-detect_venv}
3868
3869- Description: Activate the [Python Virtual Environment](https://docs.python.org/3/library/venv.html), if one is found, in the terminal's working directory (as resolved by the working_directory and automatically activating the virtual environment.
3870- Setting: `detect_venv`
3871- Default:
3872
3873```json [settings]
3874{
3875  "terminal": {
3876    "detect_venv": {
3877      "on": {
3878        // Default directories to search for virtual environments, relative
3879        // to the current working directory. We recommend overriding this
3880        // in your project's settings, rather than globally.
3881        "directories": [".env", "env", ".venv", "venv"],
3882        // Can also be `csh`, `fish`, and `nushell`
3883        "activate_script": "default"
3884      }
3885    }
3886  }
3887}
3888```
3889
3890Disable with:
3891
3892```json [settings]
3893{
3894  "terminal": {
3895    "detect_venv": "off"
3896  }
3897}
3898```
3899
3900## Terminal: Toolbar
3901
3902- Description: Whether or not to show various elements in the terminal toolbar.
3903- Setting: `toolbar`
3904- Default:
3905
3906```json [settings]
3907{
3908  "terminal": {
3909    "toolbar": {
3910      "breadcrumbs": false
3911    }
3912  }
3913}
3914```
3915
3916**Options**
3917
3918At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
3919
3920If the terminal title is empty, the breadcrumbs won't be shown.
3921
3922The shell running in the terminal needs to be configured to emit the title.
3923
3924Example command to set the title: `echo -e "\e]2;New Title\007";`
3925
3926### Terminal: Button
3927
3928- Description: Control to show or hide the terminal button in the status bar
3929- Setting: `button`
3930- Default: `true`
3931
3932**Options**
3933
3934`boolean` values
3935
3936```json [settings]
3937{
3938  "terminal": {
3939    "button": false
3940  }
3941}
3942```
3943
3944### Terminal: Working Directory
3945
3946- Description: What working directory to use when launching the terminal.
3947- Setting: `working_directory`
3948- Default: `"current_project_directory"`
3949
3950**Options**
3951
39521. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
3953
3954```json [settings]
3955{
3956  "terminal": {
3957    "working_directory": "current_project_directory"
3958  }
3959}
3960```
3961
39622. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
3963
3964```json [settings]
3965{
3966  "terminal": {
3967    "working_directory": "first_project_directory"
3968  }
3969}
3970```
3971
39723. Always use this platform's home directory (if we can find it)
3973
3974```json [settings]
3975{
3976  "terminal": {
3977    "working_directory": "always_home"
3978  }
3979}
3980```
3981
39824. Always use a specific directory. This value will be shell expanded. If this path is not a valid directory the terminal will default to this platform's home directory.
3983
3984```json [settings]
3985{
3986  "terminal": {
3987    "working_directory": {
3988      "always": {
3989        "directory": "~/zed/projects/"
3990      }
3991    }
3992  }
3993}
3994```
3995
3996## REPL
3997
3998- Description: Repl settings.
3999- Setting: `repl`
4000- Default:
4001
4002```json [settings]
4003"repl": {
4004  // Maximum number of columns to keep in REPL's scrollback buffer.
4005  // Clamped with [20, 512] range.
4006  "max_columns": 128,
4007  // Maximum number of lines to keep in REPL's scrollback buffer.
4008  // Clamped with [4, 256] range.
4009  "max_lines": 32
4010},
4011```
4012
4013## Theme
4014
4015- Description: The theme setting can be specified in two forms - either as the name of a theme or as an object containing the `mode`, `dark`, and `light` themes for the Zed UI.
4016- Setting: `theme`
4017- Default: `One Dark`
4018
4019### Theme Object
4020
4021- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
4022- Setting: `theme`
4023- Default:
4024
4025```json [settings]
4026"theme": {
4027  "mode": "system",
4028  "dark": "One Dark",
4029  "light": "One Light"
4030},
4031```
4032
4033### Mode
4034
4035- Description: Specify theme mode.
4036- Setting: `mode`
4037- Default: `system`
4038
4039**Options**
4040
40411. Set the theme to dark mode
4042
4043```json [settings]
4044{
4045  "mode": "dark"
4046}
4047```
4048
40492. Set the theme to light mode
4050
4051```json [settings]
4052{
4053  "mode": "light"
4054}
4055```
4056
40573. Set the theme to system mode
4058
4059```json [settings]
4060{
4061  "mode": "system"
4062}
4063```
4064
4065### Dark
4066
4067- Description: The name of the dark Zed theme to use for the UI.
4068- Setting: `dark`
4069- Default: `One Dark`
4070
4071**Options**
4072
4073Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4074
4075### Light
4076
4077- Description: The name of the light Zed theme to use for the UI.
4078- Setting: `light`
4079- Default: `One Light`
4080
4081**Options**
4082
4083Run the {#action theme_selector::Toggle} action in the command palette to see a current list of valid themes names.
4084
4085## Title Bar
4086
4087- Description: Whether or not to show various elements in the title bar
4088- Setting: `title_bar`
4089- Default:
4090
4091```json [settings]
4092"title_bar": {
4093  "show_branch_icon": false,
4094  "show_branch_name": true,
4095  "show_project_items": true,
4096  "show_onboarding_banner": true,
4097  "show_user_picture": true,
4098  "show_sign_in": true,
4099  "show_menus": false
4100}
4101```
4102
4103**Options**
4104
4105- `show_branch_icon`: Whether to show the branch icon beside branch switcher in the titlebar
4106- `show_branch_name`: Whether to show the branch name button in the titlebar
4107- `show_project_items`: Whether to show the project host and name in the titlebar
4108- `show_onboarding_banner`: Whether to show onboarding banners in the titlebar
4109- `show_user_picture`: Whether to show user picture in the titlebar
4110- `show_sign_in`: Whether to show the sign in button in the titlebar
4111- `show_menus`: Whether to show the menus in the titlebar
4112
4113## Vim
4114
4115- Description: Whether or not to enable vim mode.
4116- Setting: `vim_mode`
4117- Default: `false`
4118
4119## When Closing With No Tabs
4120
4121- Description: Whether the window should be closed when using 'close active item' on a window with no tabs
4122- Setting: `when_closing_with_no_tabs`
4123- Default: `"platform_default"`
4124
4125**Options**
4126
41271. Use platform default behavior:
4128
4129```json [settings]
4130{
4131  "when_closing_with_no_tabs": "platform_default"
4132}
4133```
4134
41352. Always close the window:
4136
4137```json [settings]
4138{
4139  "when_closing_with_no_tabs": "close_window"
4140}
4141```
4142
41433. Never close the window:
4144
4145```json [settings]
4146{
4147  "when_closing_with_no_tabs": "keep_window_open"
4148}
4149```
4150
4151## Project Panel
4152
4153- Description: Customize project panel
4154- Setting: `project_panel`
4155- Default:
4156
4157```json [settings]
4158{
4159  "project_panel": {
4160    "button": true,
4161    "default_width": 240,
4162    "dock": "left",
4163    "entry_spacing": "comfortable",
4164    "file_icons": true,
4165    "folder_icons": true,
4166    "git_status": true,
4167    "indent_size": 20,
4168    "auto_reveal_entries": true,
4169    "auto_fold_dirs": true,
4170    "drag_and_drop": true,
4171    "scrollbar": {
4172      "show": null
4173    },
4174    "sticky_scroll": true,
4175    "show_diagnostics": "all",
4176    "indent_guides": {
4177      "show": "always"
4178    },
4179    "hide_root": false,
4180    "hide_hidden": false,
4181    "starts_open": true,
4182    "open_file_on_paste": true
4183  }
4184}
4185```
4186
4187### Dock
4188
4189- Description: Control the position of the dock
4190- Setting: `dock`
4191- Default: `left`
4192
4193**Options**
4194
41951. Default dock position to left
4196
4197```json [settings]
4198{
4199  "dock": "left"
4200}
4201```
4202
42032. Default dock position to right
4204
4205```json [settings]
4206{
4207  "dock": "right"
4208}
4209```
4210
4211### Entry Spacing
4212
4213- Description: Spacing between worktree entries
4214- Setting: `entry_spacing`
4215- Default: `comfortable`
4216
4217**Options**
4218
42191. Comfortable entry spacing
4220
4221```json [settings]
4222{
4223  "entry_spacing": "comfortable"
4224}
4225```
4226
42272. Standard entry spacing
4228
4229```json [settings]
4230{
4231  "entry_spacing": "standard"
4232}
4233```
4234
4235### Git Status
4236
4237- Description: Indicates newly created and updated files
4238- Setting: `git_status`
4239- Default: `true`
4240
4241**Options**
4242
42431. Default enable git status
4244
4245```json [settings]
4246{
4247  "git_status": true
4248}
4249```
4250
42512. Default disable git status
4252
4253```json [settings]
4254{
4255  "git_status": false
4256}
4257```
4258
4259### Default Width
4260
4261- Description: Customize default width taken by project panel
4262- Setting: `default_width`
4263- Default: `240`
4264
4265**Options**
4266
4267`float` values
4268
4269### Auto Reveal Entries
4270
4271- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
4272- Setting: `auto_reveal_entries`
4273- Default: `true`
4274
4275**Options**
4276
42771. Enable auto reveal entries
4278
4279```json [settings]
4280{
4281  "auto_reveal_entries": true
4282}
4283```
4284
42852. Disable auto reveal entries
4286
4287```json [settings]
4288{
4289  "auto_reveal_entries": false
4290}
4291```
4292
4293### Auto Fold Dirs
4294
4295- Description: Whether to fold directories automatically when directory has only one directory inside.
4296- Setting: `auto_fold_dirs`
4297- Default: `true`
4298
4299**Options**
4300
43011. Enable auto fold dirs
4302
4303```json [settings]
4304{
4305  "auto_fold_dirs": true
4306}
4307```
4308
43092. Disable auto fold dirs
4310
4311```json [settings]
4312{
4313  "auto_fold_dirs": false
4314}
4315```
4316
4317### Indent Size
4318
4319- Description: Amount of indentation (in pixels) for nested items.
4320- Setting: `indent_size`
4321- Default: `20`
4322
4323### Indent Guides: Show
4324
4325- Description: Whether to show indent guides in the project panel.
4326- Setting: `indent_guides`
4327- Default:
4328
4329```json [settings]
4330"indent_guides": {
4331  "show": "always"
4332}
4333```
4334
4335**Options**
4336
43371. Show indent guides in the project panel
4338
4339```json [settings]
4340{
4341  "indent_guides": {
4342    "show": "always"
4343  }
4344}
4345```
4346
43472. Hide indent guides in the project panel
4348
4349```json [settings]
4350{
4351  "indent_guides": {
4352    "show": "never"
4353  }
4354}
4355```
4356
4357### Scrollbar: Show
4358
4359- Description: Whether to show a scrollbar in the project panel. Possible values: null, "auto", "system", "always", "never". Inherits editor settings when absent, see its description for more details.
4360- Setting: `scrollbar`
4361- Default:
4362
4363```json [settings]
4364"scrollbar": {
4365  "show": null
4366}
4367```
4368
4369**Options**
4370
43711. Show scrollbar in the project panel
4372
4373```json [settings]
4374{
4375  "scrollbar": {
4376    "show": "always"
4377  }
4378}
4379```
4380
43812. Hide scrollbar in the project panel
4382
4383```json [settings]
4384{
4385  "scrollbar": {
4386    "show": "never"
4387  }
4388}
4389```
4390
4391## Agent
4392
4393Visit [the Configuration page](./ai/configuration.md) under the AI section to learn more about all the agent-related settings.
4394
4395## Collaboration Panel
4396
4397- Description: Customizations for the collaboration panel.
4398- Setting: `collaboration_panel`
4399- Default:
4400
4401```json [settings]
4402{
4403  "collaboration_panel": {
4404    "button": true,
4405    "dock": "left",
4406    "default_width": 240
4407  }
4408}
4409```
4410
4411**Options**
4412
4413- `button`: Whether to show the collaboration panel button in the status bar
4414- `dock`: Where to dock the collaboration panel. Can be `left` or `right`
4415- `default_width`: Default width of the collaboration panel
4416
4417## Debugger
4418
4419- Description: Configuration for debugger panel and settings
4420- Setting: `debugger`
4421- Default:
4422
4423```json [settings]
4424{
4425  "debugger": {
4426    "stepping_granularity": "line",
4427    "save_breakpoints": true,
4428    "dock": "bottom",
4429    "button": true
4430  }
4431}
4432```
4433
4434See the [debugger page](./debugger.md) for more information about debugging support within Zed.
4435
4436## Git Panel
4437
4438- Description: Setting to customize the behavior of the git panel.
4439- Setting: `git_panel`
4440- Default:
4441
4442```json [settings]
4443{
4444  "git_panel": {
4445    "button": true,
4446    "dock": "left",
4447    "default_width": 360,
4448    "status_style": "icon",
4449    "fallback_branch_name": "main",
4450    "sort_by_path": false,
4451    "collapse_untracked_diff": false,
4452    "scrollbar": {
4453      "show": null
4454    }
4455  }
4456}
4457```
4458
4459**Options**
4460
4461- `button`: Whether to show the git panel button in the status bar
4462- `dock`: Where to dock the git panel. Can be `left` or `right`
4463- `default_width`: Default width of the git panel
4464- `status_style`: How to display git status. Can be `label_color` or `icon`
4465- `fallback_branch_name`: What branch name to use if `init.defaultBranch` is not set
4466- `sort_by_path`: Whether to sort entries in the panel by path or by status (the default)
4467- `collapse_untracked_diff`: Whether to collapse untracked files in the diff panel
4468- `scrollbar`: When to show the scrollbar in the git panel
4469
4470## Outline Panel
4471
4472- Description: Customize outline Panel
4473- Setting: `outline_panel`
4474- Default:
4475
4476```json [settings]
4477"outline_panel": {
4478  "button": true,
4479  "default_width": 300,
4480  "dock": "left",
4481  "file_icons": true,
4482  "folder_icons": true,
4483  "git_status": true,
4484  "indent_size": 20,
4485  "auto_reveal_entries": true,
4486  "auto_fold_dirs": true,
4487  "indent_guides": {
4488    "show": "always"
4489  },
4490  "scrollbar": {
4491    "show": null
4492  }
4493}
4494```
4495
4496## Calls
4497
4498- Description: Customize behavior when participating in a call
4499- Setting: `calls`
4500- Default:
4501
4502```json [settings]
4503"calls": {
4504  // Join calls with the microphone live by default
4505  "mute_on_join": false,
4506  // Share your project when you are the first to join a channel
4507  "share_on_join": false
4508},
4509```
4510
4511## Unnecessary Code Fade
4512
4513- Description: How much to fade out unused code.
4514- Setting: `unnecessary_code_fade`
4515- Default: `0.3`
4516
4517**Options**
4518
4519Float values between `0.0` and `0.9`, where:
4520
4521- `0.0` means no fading (unused code looks the same as used code)
4522- `0.9` means maximum fading (unused code is very faint but still visible)
4523
4524**Example**
4525
4526```json [settings]
4527{
4528  "unnecessary_code_fade": 0.5
4529}
4530```
4531
4532## UI Font Family
4533
4534- Description: The name of the font to use for text in the UI.
4535- Setting: `ui_font_family`
4536- Default: `.ZedSans`. This currently aliases to [IBM Plex](https://www.ibm.com/plex/).
4537
4538**Options**
4539
4540The name of any font family installed on the system, `".ZedSans"` to use the Zed-provided default, or `".SystemUIFont"` to use the system's default UI font (on macOS and Windows).
4541
4542## UI Font Features
4543
4544- Description: The OpenType features to enable for text in the UI.
4545- Setting: `ui_font_features`
4546- Default:
4547
4548```json [settings]
4549"ui_font_features": {
4550  "calt": false
4551}
4552```
4553
4554- Platform: macOS and Windows.
4555
4556**Options**
4557
4558Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
4559
4560For example, to disable font ligatures, add the following to your settings:
4561
4562```json [settings]
4563{
4564  "ui_font_features": {
4565    "calt": false
4566  }
4567}
4568```
4569
4570You can also set other OpenType features, like setting `cv01` to `7`:
4571
4572```json [settings]
4573{
4574  "ui_font_features": {
4575    "cv01": 7
4576  }
4577}
4578```
4579
4580## UI Font Fallbacks
4581
4582- Description: The font fallbacks to use for text in the UI.
4583- Setting: `ui_font_fallbacks`
4584- Default: `null`
4585- Platform: macOS and Windows.
4586
4587**Options**
4588
4589For example, to use `Nerd Font` as a fallback, add the following to your settings:
4590
4591```json [settings]
4592{
4593  "ui_font_fallbacks": ["Nerd Font"]
4594}
4595```
4596
4597## UI Font Size
4598
4599- Description: The default font size for text in the UI.
4600- Setting: `ui_font_size`
4601- Default: `16`
4602
4603**Options**
4604
4605`integer` values from `6` to `100` pixels (inclusive)
4606
4607## UI Font Weight
4608
4609- Description: The default font weight for text in the UI.
4610- Setting: `ui_font_weight`
4611- Default: `400`
4612
4613**Options**
4614
4615`integer` values between `100` and `900`
4616
4617## An example configuration:
4618
4619```json [settings]
4620// ~/.config/zed/settings.json
4621{
4622  "theme": "cave-light",
4623  "tab_size": 2,
4624  "preferred_line_length": 80,
4625  "soft_wrap": "none",
4626
4627  "buffer_font_size": 18,
4628  "buffer_font_family": ".ZedMono",
4629
4630  "autosave": "on_focus_change",
4631  "format_on_save": "off",
4632  "vim_mode": false,
4633  "projects_online_by_default": true,
4634  "terminal": {
4635    "font_family": "FiraCode Nerd Font Mono",
4636    "blinking": "off"
4637  },
4638  "languages": {
4639    "C": {
4640      "format_on_save": "on",
4641      "formatter": "language_server",
4642      "preferred_line_length": 64,
4643      "soft_wrap": "preferred_line_length"
4644    }
4645  }
4646}
4647```