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## Default settings
  25
  26You can find the default settings for your current Zed by running {#action zed::OpenDefaultSettings} from the command palette.
  27
  28Extensions that provide language servers may also provide default settings for those language servers.
  29
  30# Settings
  31
  32## Active Pane Modifiers
  33
  34- Description: Styling settings applied to the active pane.
  35- Setting: `active_pane_modifiers`
  36- Default:
  37
  38```json
  39{
  40  "active_pane_modifiers": {
  41    "magnification": 1.0,
  42    "border_size": 0.0,
  43    "inactive_opacity": 1.0
  44  }
  45}
  46```
  47
  48### Magnification
  49
  50- Description: Scale by which to zoom the active pane. When set to `1.0`, the active pane has the same size as others, but when set to a larger value, the active pane takes up more space.
  51- Setting: `magnification`
  52- Default: `1.0`
  53
  54**Options**
  55
  56`float` values
  57
  58### Border size
  59
  60- 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.
  61- Setting: `border_size`
  62- Default: `0.0`
  63
  64**Options**
  65
  66Non-negative `float` values
  67
  68### Inactive Opacity
  69
  70- 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.
  71- Setting: `inactive_opacity`
  72- Default: `1.0`
  73
  74**Options**
  75
  76`float` values
  77
  78## Bottom Dock Layout
  79
  80- Description: Control the layout of the bottom dock, relative to the left and right docks
  81- Setting: `bottom_dock_layout`
  82- Default: `"contained"`
  83
  84**Options**
  85
  861. Contain the bottom dock, giving the full height of the window to the left and right docks
  87
  88```json
  89{
  90  "bottom_dock_layout": "contained"
  91}
  92```
  93
  942. Give the bottom dock the full width of the window, truncating the left and right docks
  95
  96```json
  97{
  98  "bottom_dock_layout": "full"
  99}
 100```
 101
 1023. Left align the bottom dock, truncating the left dock and giving the right dock the full height of the window
 103
 104```json
 105{
 106  "bottom_dock_layout": "left_aligned"
 107}
 108```
 109
 1103. Right align the bottom dock, giving the left dock the full height of the window and truncating the right dock.
 111
 112```json
 113{
 114  "bottom_dock_layout": "right_aligned"
 115}
 116```
 117
 118## Auto Install extensions
 119
 120- Description: Define extensions to be autoinstalled or never be installed.
 121- Setting: `auto_install_extension`
 122- Default: `{ "html": true }`
 123
 124**Options**
 125
 126You can find the names of your currently installed extensions by listing the subfolders under the [extension installation location](./extensions/installing-extensions#installation-location):
 127
 128On MacOS:
 129
 130```sh
 131ls ~/Library/Application\ Support/Zed/extensions/installed/
 132```
 133
 134On Linux:
 135
 136```sh
 137ls ~/.local/share/zed/extensions/installed
 138```
 139
 140Define extensions which should be installed (`true`) or never installed (`false`).
 141
 142```json
 143{
 144  "auto_install_extensions": {
 145    "html": true,
 146    "dockerfile": true,
 147    "docker-compose": false
 148  }
 149}
 150```
 151
 152## Autosave
 153
 154- Description: When to automatically save edited buffers.
 155- Setting: `autosave`
 156- Default: `off`
 157
 158**Options**
 159
 1601. To disable autosave, set it to `off`:
 161
 162```json
 163{
 164  "autosave": "off"
 165}
 166```
 167
 1682. To autosave when focus changes, use `on_focus_change`:
 169
 170```json
 171{
 172  "autosave": "on_focus_change"
 173}
 174```
 175
 1763. To autosave when the active window changes, use `on_window_change`:
 177
 178```json
 179{
 180  "autosave": "on_window_change"
 181}
 182```
 183
 1844. To autosave after an inactivity period, use `after_delay`:
 185
 186```json
 187{
 188  "autosave": {
 189    "after_delay": {
 190      "milliseconds": 1000
 191    }
 192  }
 193}
 194```
 195
 196## Restore on Startup
 197
 198- Description: Controls session restoration on startup.
 199- Setting: `restore_on_startup`
 200- Default: `last_session`
 201
 202**Options**
 203
 2041. Restore all workspaces that were open when quitting Zed:
 205
 206```json
 207{
 208  "restore_on_startup": "last_session"
 209}
 210```
 211
 2122. Restore the workspace that was closed last:
 213
 214```json
 215{
 216  "restore_on_startup": "last_workspace"
 217}
 218```
 219
 2203. Always start with an empty editor:
 221
 222```json
 223{
 224  "restore_on_startup": "none"
 225}
 226```
 227
 228## Autoscroll on Clicks
 229
 230- Description: Whether to scroll when clicking near the edge of the visible text area.
 231- Setting: `autoscroll_on_clicks`
 232- Default: `false`
 233
 234**Options**
 235
 236`boolean` values
 237
 238## Auto Update
 239
 240- Description: Whether or not to automatically check for updates.
 241- Setting: `auto_update`
 242- Default: `true`
 243
 244**Options**
 245
 246`boolean` values
 247
 248## Base Keymap
 249
 250- Description: Base key bindings scheme. Base keymaps can be overridden with user keymaps.
 251- Setting: `base_keymap`
 252- Default: `VSCode`
 253
 254**Options**
 255
 2561. VSCode
 257
 258```json
 259{
 260  "base_keymap": "VSCode"
 261}
 262```
 263
 2642. Atom
 265
 266```json
 267{
 268  "base_keymap": "Atom"
 269}
 270```
 271
 2723. JetBrains
 273
 274```json
 275{
 276  "base_keymap": "JetBrains"
 277}
 278```
 279
 2804. None
 281
 282```json
 283{
 284  "base_keymap": "None"
 285}
 286```
 287
 2885. SublimeText
 289
 290```json
 291{
 292  "base_keymap": "SublimeText"
 293}
 294```
 295
 2966. TextMate
 297
 298```json
 299{
 300  "base_keymap": "TextMate"
 301}
 302```
 303
 304## Buffer Font Family
 305
 306- Description: The name of a font to use for rendering text in the editor.
 307- Setting: `buffer_font_family`
 308- Default: `Zed Plex Mono`
 309
 310**Options**
 311
 312The name of any font family installed on the user's system
 313
 314## Buffer Font Features
 315
 316- Description: The OpenType features to enable for text in the editor.
 317- Setting: `buffer_font_features`
 318- Default: `null`
 319- Platform: macOS and Windows.
 320
 321**Options**
 322
 323Zed 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.
 324
 325For example, to disable font ligatures, add the following to your settings:
 326
 327```json
 328{
 329  "buffer_font_features": {
 330    "calt": false
 331  }
 332}
 333```
 334
 335You can also set other OpenType features, like setting `cv01` to `7`:
 336
 337```json
 338{
 339  "buffer_font_features": {
 340    "cv01": 7
 341  }
 342}
 343```
 344
 345## Buffer Font Fallbacks
 346
 347- Description: Set the buffer text's font fallbacks, this will be merged with the platform's default fallbacks.
 348- Setting: `buffer_font_fallbacks`
 349- Default: `null`
 350- Platform: macOS and Windows.
 351
 352**Options**
 353
 354For example, to use `Nerd Font` as a fallback, add the following to your settings:
 355
 356```json
 357{
 358  "buffer_font_fallbacks": ["Nerd Font"]
 359}
 360```
 361
 362## Buffer Font Size
 363
 364- Description: The default font size for text in the editor.
 365- Setting: `buffer_font_size`
 366- Default: `15`
 367
 368**Options**
 369
 370`integer` values from `6` to `100` pixels (inclusive)
 371
 372## Buffer Font Weight
 373
 374- Description: The default font weight for text in the editor.
 375- Setting: `buffer_font_weight`
 376- Default: `400`
 377
 378**Options**
 379
 380`integer` values between `100` and `900`
 381
 382## Buffer Line Height
 383
 384- Description: The default line height for text in the editor.
 385- Setting: `buffer_line_height`
 386- Default: `"comfortable"`
 387
 388**Options**
 389
 390`"standard"`, `"comfortable"` or `{ "custom": float }` (`1` is compact, `2` is loose)
 391
 392## Confirm Quit
 393
 394- Description: Whether or not to prompt the user to confirm before closing the application.
 395- Setting: `confirm_quit`
 396- Default: `false`
 397
 398**Options**
 399
 400`boolean` values
 401
 402## Centered Layout
 403
 404- Description: Configuration for the centered layout mode.
 405- Setting: `centered_layout`
 406- Default:
 407
 408```json
 409"centered_layout": {
 410  "left_padding": 0.2,
 411  "right_padding": 0.2,
 412}
 413```
 414
 415**Options**
 416
 417The `left_padding` and `right_padding` options define the relative width of the
 418left 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`.
 419
 420## Direnv Integration
 421
 422- Description: Settings for [direnv](https://direnv.net/) integration. Requires `direnv` to be installed.
 423  `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.
 424  It also allows for those environment variables to be used in tasks.
 425- Setting: `load_direnv`
 426- Default: `"direct"`
 427
 428**Options**
 429
 430There are two options to choose from:
 431
 4321. `shell_hook`: Use the shell hook to load direnv. This relies on direnv to activate upon entering the directory. Supports POSIX shells and fish.
 4332. `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.
 434
 435## Edit Predictions
 436
 437- Description: Settings for edit predictions.
 438- Setting: `edit_predictions`
 439- Default:
 440
 441```json
 442  "edit_predictions": {
 443    "disabled_globs": [
 444      "**/.env*",
 445      "**/*.pem",
 446      "**/*.key",
 447      "**/*.cert",
 448      "**/*.crt",
 449      "**/.dev.vars",
 450      "**/secrets.yml"
 451    ]
 452  }
 453```
 454
 455**Options**
 456
 457### Disabled Globs
 458
 459- 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.
 460- Setting: `disabled_globs`
 461- Default: `["**/.env*", "**/*.pem", "**/*.key", "**/*.cert", "**/*.crt", "**/.dev.vars", "**/secrets.yml"]`
 462
 463**Options**
 464
 465List of `string` values.
 466
 467## Edit Predictions Disabled in
 468
 469- Description: A list of language scopes in which edit predictions should be disabled.
 470- Setting: `edit_predictions_disabled_in`
 471- Default: `[]`
 472
 473**Options**
 474
 475List of `string` values
 476
 4771. Don't show edit predictions in comments:
 478
 479```json
 480"disabled_in": ["comment"]
 481```
 482
 4832. Don't show edit predictions in strings and comments:
 484
 485```json
 486"disabled_in": ["comment", "string"]
 487```
 488
 4893. Only in Go, don't show edit predictions in strings and comments:
 490
 491```json
 492{
 493  "languages": {
 494    "Go": {
 495      "edit_predictions_disabled_in": ["comment", "string"]
 496    }
 497  }
 498}
 499```
 500
 501## Current Line Highlight
 502
 503- Description: How to highlight the current line in the editor.
 504- Setting: `current_line_highlight`
 505- Default: `all`
 506
 507**Options**
 508
 5091. Don't highlight the current line:
 510
 511```json
 512"current_line_highlight": "none"
 513```
 514
 5152. Highlight the gutter area:
 516
 517```json
 518"current_line_highlight": "gutter"
 519```
 520
 5213. Highlight the editor area:
 522
 523```json
 524"current_line_highlight": "line"
 525```
 526
 5274. Highlight the full line:
 528
 529```json
 530"current_line_highlight": "all"
 531```
 532
 533## Selection Highlight
 534
 535- Description: Whether to highlight all occurrences of the selected text in an editor.
 536- Setting: `selection_highlight`
 537- Default: `true`
 538
 539## LSP Highlight Debounce
 540
 541- Description: The debounce delay before querying highlights from the language server based on the current cursor location.
 542- Setting: `lsp_highlight_debounce`
 543- Default: `75`
 544
 545## Cursor Blink
 546
 547- Description: Whether or not the cursor blinks.
 548- Setting: `cursor_blink`
 549- Default: `true`
 550
 551**Options**
 552
 553`boolean` values
 554
 555## Cursor Shape
 556
 557- Description: Cursor shape for the default editor.
 558- Setting: `cursor_shape`
 559- Default: `bar`
 560
 561**Options**
 562
 5631. A vertical bar:
 564
 565```json
 566"cursor_shape": "bar"
 567```
 568
 5692. A block that surrounds the following character:
 570
 571```json
 572"cursor_shape": "block"
 573```
 574
 5753. An underline / underscore that runs along the following character:
 576
 577```json
 578"cursor_shape": "underline"
 579```
 580
 5814. An box drawn around the following character:
 582
 583```json
 584"cursor_shape": "hollow"
 585```
 586
 587## Hide Mouse
 588
 589- Description: Determines when the mouse cursor should be hidden in an editor or input box.
 590- Setting: `hide_mouse`
 591- Default: `on_typing_and_movement`
 592
 593**Options**
 594
 5951. Never hide the mouse cursor:
 596
 597```json
 598"hide_mouse": "never"
 599```
 600
 6012. Hide only when typing:
 602
 603```json
 604"hide_mouse": "on_typing"
 605```
 606
 6073. Hide on both typing and cursor movement:
 608
 609```json
 610"hide_mouse": "on_typing_and_movement"
 611```
 612
 613## Snippet Sort Order
 614
 615- Description: Determines how snippets are sorted relative to other completion items.
 616- Setting: `snippet_sort_order`
 617- Default: `inline`
 618
 619**Options**
 620
 6211. Place snippets at the top of the completion list:
 622
 623```json
 624"snippet_sort_order": "top"
 625```
 626
 6272. Place snippets normally without any preference:
 628
 629```json
 630"snippet_sort_order": "inline"
 631```
 632
 6333. Place snippets at the bottom of the completion list:
 634
 635```json
 636"snippet_sort_order": "bottom"
 637```
 638
 639## Editor Scrollbar
 640
 641- Description: Whether or not to show the editor scrollbar and various elements in it.
 642- Setting: `scrollbar`
 643- Default:
 644
 645```json
 646"scrollbar": {
 647  "show": "auto",
 648  "cursors": true,
 649  "git_diff": true,
 650  "search_results": true,
 651  "selected_text": true,
 652  "selected_symbol": true,
 653  "diagnostics": "all",
 654  "axes": {
 655    "horizontal": true,
 656    "vertical": true,
 657  },
 658},
 659```
 660
 661### Show Mode
 662
 663- Description: When to show the editor scrollbar.
 664- Setting: `show`
 665- Default: `auto`
 666
 667**Options**
 668
 6691. Show the scrollbar if there's important information or follow the system's configured behavior:
 670
 671```json
 672"scrollbar": {
 673  "show": "auto"
 674}
 675```
 676
 6772. Match the system's configured behavior:
 678
 679```json
 680"scrollbar": {
 681  "show": "system"
 682}
 683```
 684
 6853. Always show the scrollbar:
 686
 687```json
 688"scrollbar": {
 689  "show": "always"
 690}
 691```
 692
 6934. Never show the scrollbar:
 694
 695```json
 696"scrollbar": {
 697  "show": "never"
 698}
 699```
 700
 701### Cursor Indicators
 702
 703- Description: Whether to show cursor positions in the scrollbar.
 704- Setting: `cursors`
 705- Default: `true`
 706
 707**Options**
 708
 709`boolean` values
 710
 711### Git Diff Indicators
 712
 713- Description: Whether to show git diff indicators in the scrollbar.
 714- Setting: `git_diff`
 715- Default: `true`
 716
 717**Options**
 718
 719`boolean` values
 720
 721### Search Results Indicators
 722
 723- Description: Whether to show buffer search results in the scrollbar.
 724- Setting: `search_results`
 725- Default: `true`
 726
 727**Options**
 728
 729`boolean` values
 730
 731### Selected Text Indicators
 732
 733- Description: Whether to show selected text occurrences in the scrollbar.
 734- Setting: `selected_text`
 735- Default: `true`
 736
 737**Options**
 738
 739`boolean` values
 740
 741### Selected Symbols Indicators
 742
 743- Description: Whether to show selected symbol occurrences in the scrollbar.
 744- Setting: `selected_symbol`
 745- Default: `true`
 746
 747**Options**
 748
 749`boolean` values
 750
 751### Diagnostics
 752
 753- Description: Which diagnostic indicators to show in the scrollbar.
 754- Setting: `diagnostics`
 755- Default: `all`
 756
 757**Options**
 758
 7591. Show all diagnostics:
 760
 761```json
 762{
 763  "diagnostics": "all"
 764}
 765```
 766
 7672. Do not show any diagnostics:
 768
 769```json
 770{
 771  "diagnostics": "none"
 772}
 773```
 774
 7753. Show only errors:
 776
 777```json
 778{
 779  "diagnostics": "error"
 780}
 781```
 782
 7834. Show only errors and warnings:
 784
 785```json
 786{
 787  "diagnostics": "warning"
 788}
 789```
 790
 7915. Show only errors, warnings, and information:
 792
 793```json
 794{
 795  "diagnostics": "information"
 796}
 797```
 798
 799### Axes
 800
 801- Description: Forcefully enable or disable the scrollbar for each axis
 802- Setting: `axes`
 803- Default:
 804
 805```json
 806"scrollbar": {
 807  "axes": {
 808    "horizontal": true,
 809    "vertical": true,
 810  },
 811}
 812```
 813
 814#### Horizontal
 815
 816- Description: When false, forcefully disables the horizontal scrollbar. Otherwise, obey other settings.
 817- Setting: `horizontal`
 818- Default: `true`
 819
 820**Options**
 821
 822`boolean` values
 823
 824#### Vertical
 825
 826- Description: When false, forcefully disables the vertical scrollbar. Otherwise, obey other settings.
 827- Setting: `vertical`
 828- Default: `true`
 829
 830**Options**
 831
 832`boolean` values
 833
 834## Editor Tab Bar
 835
 836- Description: Settings related to the editor's tab bar.
 837- Settings: `tab_bar`
 838- Default:
 839
 840```json
 841"tab_bar": {
 842  "show": true,
 843  "show_nav_history_buttons": true,
 844  "show_tab_bar_buttons": true
 845}
 846```
 847
 848### Show
 849
 850- Description: Whether or not to show the tab bar in the editor.
 851- Setting: `show`
 852- Default: `true`
 853
 854**Options**
 855
 856`boolean` values
 857
 858### Navigation History Buttons
 859
 860- Description: Whether or not to show the navigation history buttons.
 861- Setting: `show_nav_history_buttons`
 862- Default: `true`
 863
 864**Options**
 865
 866`boolean` values
 867
 868### Tab Bar Buttons
 869
 870- Description: Whether or not to show the tab bar buttons.
 871- Setting: `show_tab_bar_buttons`
 872- Default: `true`
 873
 874**Options**
 875
 876`boolean` values
 877
 878## Editor Tabs
 879
 880- Description: Configuration for the editor tabs.
 881- Setting: `tabs`
 882- Default:
 883
 884```json
 885"tabs": {
 886  "close_position": "right",
 887  "file_icons": false,
 888  "git_status": false,
 889  "activate_on_close": "history",
 890  "show_close_button": "hover",
 891  "show_diagnostics": "off"
 892},
 893```
 894
 895### Close Position
 896
 897- Description: Where to display close button within a tab.
 898- Setting: `close_position`
 899- Default: `right`
 900
 901**Options**
 902
 9031. Display the close button on the right:
 904
 905```json
 906{
 907  "close_position": "right"
 908}
 909```
 910
 9112. Display the close button on the left:
 912
 913```json
 914{
 915  "close_position": "left"
 916}
 917```
 918
 919### File Icons
 920
 921- Description: Whether to show the file icon for a tab.
 922- Setting: `file_icons`
 923- Default: `false`
 924
 925### Git Status
 926
 927- Description: Whether or not to show Git file status in tab.
 928- Setting: `git_status`
 929- Default: `false`
 930
 931### Activate on close
 932
 933- Description: What to do after closing the current tab.
 934- Setting: `activate_on_close`
 935- Default: `history`
 936
 937**Options**
 938
 9391.  Activate the tab that was open previously:
 940
 941```json
 942{
 943  "activate_on_close": "history"
 944}
 945```
 946
 9472. Activate the right neighbour tab if present:
 948
 949```json
 950{
 951  "activate_on_close": "neighbour"
 952}
 953```
 954
 9553. Activate the left neighbour tab if present:
 956
 957```json
 958{
 959  "activate_on_close": "left_neighbour"
 960}
 961```
 962
 963### Show close button
 964
 965- Description: Controls the appearance behavior of the tab's close button.
 966- Setting: `show_close_button`
 967- Default: `hover`
 968
 969**Options**
 970
 9711.  Show it just upon hovering the tab:
 972
 973```json
 974{
 975  "show_close_button": "hover"
 976}
 977```
 978
 9792. Show it persistently:
 980
 981```json
 982{
 983  "show_close_button": "always"
 984}
 985```
 986
 9873. Never show it, even if hovering it:
 988
 989```json
 990{
 991  "show_close_button": "hidden"
 992}
 993```
 994
 995### Show Diagnostics
 996
 997- 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.
 998- Setting: `show_diagnostics`
 999- Default: `off`
1000
1001**Options**
1002
10031. Do not mark any files:
1004
1005```json
1006{
1007  "show_diagnostics": "off"
1008}
1009```
1010
10112. Only mark files with errors:
1012
1013```json
1014{
1015  "show_diagnostics": "errors"
1016}
1017```
1018
10193. Mark files with errors and warnings:
1020
1021```json
1022{
1023  "show_diagnostics": "all"
1024}
1025```
1026
1027## Editor Toolbar
1028
1029- Description: Whether or not to show various elements in the editor toolbar.
1030- Setting: `toolbar`
1031- Default:
1032
1033```json
1034"toolbar": {
1035  "breadcrumbs": true,
1036  "quick_actions": true,
1037  "selections_menu": true
1038},
1039```
1040
1041**Options**
1042
1043Each option controls displaying of a particular toolbar element. If all elements are hidden, the editor toolbar is not displayed.
1044
1045## Enable Language Server
1046
1047- Description: Whether or not to use language servers to provide code intelligence.
1048- Setting: `enable_language_server`
1049- Default: `true`
1050
1051**Options**
1052
1053`boolean` values
1054
1055## Ensure Final Newline On Save
1056
1057- Description: Removes any lines containing only whitespace at the end of the file and ensures just one newline at the end.
1058- Setting: `ensure_final_newline_on_save`
1059- Default: `true`
1060
1061**Options**
1062
1063`boolean` values
1064
1065## LSP
1066
1067- Description: Configuration for language servers.
1068- Setting: `lsp`
1069- Default: `null`
1070
1071**Options**
1072
1073The following settings can be overridden for specific language servers:
1074
1075- `initialization_options`
1076- `settings`
1077
1078To override configuration for a language server, add an entry for that language server's name to the `lsp` value.
1079
1080Some 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.
1081
1082For example to pass the `check` option to `rust-analyzer`, use the following configuration:
1083
1084```json
1085"lsp": {
1086  "rust-analyzer": {
1087    "initialization_options": {
1088      "check": {
1089        "command": "clippy" // rust-analyzer.check.command (default: "check")
1090      }
1091    }
1092  }
1093}
1094```
1095
1096While other options may be changed at a runtime and should be placed under `settings`:
1097
1098```json
1099"lsp": {
1100  "yaml-language-server": {
1101    "settings": {
1102      "yaml": {
1103        "keyOrdering": true // Enforces alphabetical ordering of keys in maps
1104      }
1105    }
1106  }
1107}
1108```
1109
1110## LSP Highlight Debounce
1111
1112- Description: The debounce delay in milliseconds before querying highlights from the language server based on the current cursor location.
1113- Setting: `lsp_highlight_debounce`
1114- Default: `75`
1115
1116**Options**
1117
1118`integer` values representing milliseconds
1119
1120## Format On Save
1121
1122- Description: Whether or not to perform a buffer format before saving.
1123- Setting: `format_on_save`
1124- Default: `on`
1125
1126**Options**
1127
11281. `on`, enables format on save obeying `formatter` setting:
1129
1130```json
1131{
1132  "format_on_save": "on"
1133}
1134```
1135
11362. `off`, disables format on save:
1137
1138```json
1139{
1140  "format_on_save": "off"
1141}
1142```
1143
1144## Formatter
1145
1146- Description: How to perform a buffer format.
1147- Setting: `formatter`
1148- Default: `auto`
1149
1150**Options**
1151
11521. To use the current language server, use `"language_server"`:
1153
1154```json
1155{
1156  "formatter": "language_server"
1157}
1158```
1159
11602. 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):
1161
1162```json
1163{
1164  "formatter": {
1165    "external": {
1166      "command": "sed",
1167      "arguments": ["-e", "s/ *$//"]
1168    }
1169  }
1170}
1171```
1172
11733. 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.
1174
1175WARNING: `{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.
1176
1177```json
1178  "formatter": {
1179    "external": {
1180      "command": "prettier",
1181      "arguments": ["--stdin-filepath", "{buffer_path}"]
1182    }
1183  }
1184```
1185
11864. Or to use code actions provided by the connected language servers, use `"code_actions"`:
1187
1188```json
1189{
1190  "formatter": {
1191    "code_actions": {
1192      // Use ESLint's --fix:
1193      "source.fixAll.eslint": true,
1194      // Organize imports on save:
1195      "source.organizeImports": true
1196    }
1197  }
1198}
1199```
1200
12015. Or to use multiple formatters consecutively, use an array of formatters:
1202
1203```json
1204{
1205  "formatter": [
1206    { "language_server": { "name": "rust-analyzer" } },
1207    {
1208      "external": {
1209        "command": "sed",
1210        "arguments": ["-e", "s/ *$//"]
1211      }
1212    }
1213  ]
1214}
1215```
1216
1217Here `rust-analyzer` will be used first to format the code, followed by a call of sed.
1218If any of the formatters fails, the subsequent ones will still be executed.
1219
1220## Code Actions On Format
1221
1222- Description: The code actions to perform with the primary language server when formatting the buffer.
1223- Setting: `code_actions_on_format`
1224- Default: `{}`, except for Go it's `{ "source.organizeImports": true }`
1225
1226**Examples**
1227
1228<!--
1229TBD: Add Python Ruff source.organizeImports example
1230-->
1231
12321. Organize imports on format in TypeScript and TSX buffers:
1233
1234```json
1235{
1236  "languages": {
1237    "TypeScript": {
1238      "code_actions_on_format": {
1239        "source.organizeImports": true
1240      }
1241    },
1242    "TSX": {
1243      "code_actions_on_format": {
1244        "source.organizeImports": true
1245      }
1246    }
1247  }
1248}
1249```
1250
12512. Run ESLint `fixAll` code action when formatting:
1252
1253```json
1254{
1255  "languages": {
1256    "JavaScript": {
1257      "code_actions_on_format": {
1258        "source.fixAll.eslint": true
1259      }
1260    }
1261  }
1262}
1263```
1264
12653. Run only a single ESLint rule when using `fixAll`:
1266
1267```json
1268{
1269  "languages": {
1270    "JavaScript": {
1271      "code_actions_on_format": {
1272        "source.fixAll.eslint": true
1273      }
1274    }
1275  },
1276  "lsp": {
1277    "eslint": {
1278      "settings": {
1279        "codeActionOnSave": {
1280          "rules": ["import/order"]
1281        }
1282      }
1283    }
1284  }
1285}
1286```
1287
1288## Auto close
1289
1290- Description: Whether to automatically add matching closing characters when typing opening parenthesis, bracket, brace, single or double quote characters.
1291- Setting: `use_autoclose`
1292- Default: `true`
1293
1294**Options**
1295
1296`boolean` values
1297
1298## Always Treat Brackets As Autoclosed
1299
1300- Description: Controls how the editor handles the autoclosed characters.
1301- Setting: `always_treat_brackets_as_autoclosed`
1302- Default: `false`
1303
1304**Options**
1305
1306`boolean` values
1307
1308**Example**
1309
1310If the setting is set to `true`:
1311
13121. Enter in the editor: `)))`
13132. Move the cursor to the start: `^)))`
13143. Enter again: `)))`
1315
1316The result is still `)))` and not `))))))`, which is what it would be by default.
1317
1318## File Scan Exclusions
1319
1320- Setting: `file_scan_exclusions`
1321- 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`.
1322- Default:
1323
1324```json
1325"file_scan_exclusions": [
1326  "**/.git",
1327  "**/.svn",
1328  "**/.hg",
1329  "**/.jj",
1330  "**/CVS",
1331  "**/.DS_Store",
1332  "**/Thumbs.db",
1333  "**/.classpath",
1334  "**/.settings"
1335],
1336```
1337
1338Note, 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.
1339
1340## File Scan Inclusions
1341
1342- Setting: `file_scan_inclusions`
1343- 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.
1344- Default:
1345
1346```json
1347"file_scan_inclusions": [".env*"],
1348```
1349
1350## File Types
1351
1352- Setting: `file_types`
1353- Description: Configure how Zed selects a language for a file based on its filename or extension. Supports glob entries.
1354- Default:
1355
1356```json
1357"file_types": {
1358  "JSONC": ["**/.zed/**/*.json", "**/zed/**/*.json", "**/Zed/**/*.json", "**/.vscode/**/*.json"],
1359  "Shell Script": [".env.*"]
1360}
1361```
1362
1363**Examples**
1364
1365To interpret all `.c` files as C++, files called `MyLockFile` as TOML and files starting with `Dockerfile` as Dockerfile:
1366
1367```json
1368{
1369  "file_types": {
1370    "C++": ["c"],
1371    "TOML": ["MyLockFile"],
1372    "Dockerfile": ["Dockerfile*"]
1373  }
1374}
1375```
1376
1377## Diagnostics
1378
1379- Description: Configuration for diagnostics-related features.
1380- Setting: `diagnostics`
1381- Default:
1382
1383```json
1384{
1385  "diagnostics": {
1386    "include_warnings": true,
1387    "inline": {
1388      "enabled": false
1389    },
1390    "update_with_cursor": false,
1391    "primary_only": false,
1392    "use_rendered": false
1393  }
1394}
1395```
1396
1397### Inline Diagnostics
1398
1399- Description: Whether or not to show diagnostics information inline.
1400- Setting: `inline`
1401- Default:
1402
1403```json
1404{
1405  "diagnostics": {
1406    "inline": {
1407      "enabled": false,
1408      "update_debounce_ms": 150,
1409      "padding": 4,
1410      "min_column": 0,
1411      "max_severity": null
1412    }
1413  }
1414}
1415```
1416
1417**Options**
1418
14191. Enable inline diagnostics.
1420
1421```json
1422{
1423  "diagnostics": {
1424    "inline": {
1425      "enabled": true
1426    }
1427  }
1428}
1429```
1430
14312. Delay diagnostic updates until some time after the last diagnostic update.
1432
1433```json
1434{
1435  "diagnostics": {
1436    "inline": {
1437      "enabled": true,
1438      "update_debounce_ms": 150
1439    }
1440  }
1441}
1442```
1443
14443. Set padding between the end of the source line and the start of the diagnostic.
1445
1446```json
1447{
1448  "diagnostics": {
1449    "inline": {
1450      "enabled": true,
1451      "padding": 4
1452    }
1453  }
1454}
1455```
1456
14574. Horizontally align inline diagnostics at the given column.
1458
1459```json
1460{
1461  "diagnostics": {
1462    "inline": {
1463      "enabled": true,
1464      "min_column": 80
1465    }
1466  }
1467}
1468```
1469
14705. Show only warning and error diagnostics.
1471
1472```json
1473{
1474  "diagnostics": {
1475    "inline": {
1476      "enabled": true,
1477      "max_severity": "warning"
1478    }
1479  }
1480}
1481```
1482
1483## Git
1484
1485- Description: Configuration for git-related features.
1486- Setting: `git`
1487- Default:
1488
1489```json
1490{
1491  "git": {
1492    "git_gutter": "tracked_files",
1493    "inline_blame": {
1494      "enabled": true
1495    },
1496    "hunk_style": "staged_hollow"
1497  }
1498}
1499```
1500
1501### Git Gutter
1502
1503- Description: Whether or not to show the git gutter.
1504- Setting: `git_gutter`
1505- Default: `tracked_files`
1506
1507**Options**
1508
15091. Show git gutter in tracked files
1510
1511```json
1512{
1513  "git": {
1514    "git_gutter": "tracked_files"
1515  }
1516}
1517```
1518
15192. Hide git gutter
1520
1521```json
1522{
1523  "git": {
1524    "git_gutter": "hide"
1525  }
1526}
1527```
1528
1529### Gutter Debounce
1530
1531- Description: Sets the debounce threshold (in milliseconds) after which changes are reflected in the git gutter.
1532- Setting: `gutter_debounce`
1533- Default: `null`
1534
1535**Options**
1536
1537`integer` values representing milliseconds
1538
1539Example:
1540
1541```json
1542{
1543  "git": {
1544    "gutter_debounce": 100
1545  }
1546}
1547```
1548
1549### Inline Git Blame
1550
1551- Description: Whether or not to show git blame information inline, on the currently focused line.
1552- Setting: `inline_blame`
1553- Default:
1554
1555```json
1556{
1557  "git": {
1558    "inline_blame": {
1559      "enabled": true
1560    }
1561  }
1562}
1563```
1564
1565### Hunk Style
1566
1567- Description: What styling we should use for the diff hunks.
1568- Setting: `hunk_style`
1569- Default:
1570
1571```json
1572{
1573  "git": {
1574    "hunk_style": "staged_hollow"
1575  }
1576}
1577```
1578
1579**Options**
1580
15811. Show the staged hunks faded out and with a border:
1582
1583```json
1584{
1585  "git": {
1586    "hunk_style": "staged_hollow"
1587  }
1588}
1589```
1590
15912. Show unstaged hunks faded out and with a border:
1592
1593```json
1594{
1595  "git": {
1596    "hunk_style": "unstaged_hollow"
1597  }
1598}
1599```
1600
1601**Options**
1602
16031. Disable inline git blame:
1604
1605```json
1606{
1607  "git": {
1608    "inline_blame": {
1609      "enabled": false
1610    }
1611  }
1612}
1613```
1614
16152. Only show inline git blame after a delay (that starts after cursor stops moving):
1616
1617```json
1618{
1619  "git": {
1620    "inline_blame": {
1621      "enabled": true,
1622      "delay_ms": 500
1623    }
1624  }
1625}
1626```
1627
16283. Show a commit summary next to the commit date and author:
1629
1630```json
1631{
1632  "git": {
1633    "inline_blame": {
1634      "enabled": true,
1635      "show_commit_summary": true
1636    }
1637  }
1638}
1639```
1640
16414. Use this as the minimum column at which to display inline blame information:
1642
1643```json
1644{
1645  "git": {
1646    "inline_blame": {
1647      "enabled": true,
1648      "min_column": 80
1649    }
1650  }
1651}
1652```
1653
1654## Indent Guides
1655
1656- Description: Configuration related to indent guides. Indent guides can be configured separately for each language.
1657- Setting: `indent_guides`
1658- Default:
1659
1660```json
1661{
1662  "indent_guides": {
1663    "enabled": true,
1664    "line_width": 1,
1665    "active_line_width": 1,
1666    "coloring": "fixed",
1667    "background_coloring": "disabled"
1668  }
1669}
1670```
1671
1672**Options**
1673
16741. Disable indent guides
1675
1676```json
1677{
1678  "indent_guides": {
1679    "enabled": false
1680  }
1681}
1682```
1683
16842. Enable indent guides for a specific language.
1685
1686```json
1687{
1688  "languages": {
1689    "Python": {
1690      "indent_guides": {
1691        "enabled": true
1692      }
1693    }
1694  }
1695}
1696```
1697
16983. Enable indent aware coloring ("rainbow indentation").
1699   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.
1700
1701```json
1702{
1703  "indent_guides": {
1704    "enabled": true,
1705    "coloring": "indent_aware"
1706  }
1707}
1708```
1709
17104. Enable indent aware background coloring ("rainbow indentation").
1711   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.
1712
1713```json
1714{
1715  "indent_guides": {
1716    "enabled": true,
1717    "coloring": "indent_aware",
1718    "background_coloring": "indent_aware"
1719  }
1720}
1721```
1722
1723## Hard Tabs
1724
1725- Description: Whether to indent lines using tab characters or multiple spaces.
1726- Setting: `hard_tabs`
1727- Default: `false`
1728
1729**Options**
1730
1731`boolean` values
1732
1733## Hover Popover Enabled
1734
1735- Description: Whether or not to show the informational hover box when moving the mouse over symbols in the editor.
1736- Setting: `hover_popover_enabled`
1737- Default: `true`
1738
1739**Options**
1740
1741`boolean` values
1742
1743## Icon Theme
1744
1745- 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.
1746- Setting: `icon_theme`
1747- Default: `Zed (Default)`
1748
1749### Icon Theme Object
1750
1751- Description: Specify the icon theme using an object that includes the `mode`, `dark`, and `light`.
1752- Setting: `icon_theme`
1753- Default:
1754
1755```json
1756"icon_theme": {
1757  "mode": "system",
1758  "dark": "Zed (Default)",
1759  "light": "Zed (Default)"
1760},
1761```
1762
1763### Mode
1764
1765- Description: Specify the icon theme mode.
1766- Setting: `mode`
1767- Default: `system`
1768
1769**Options**
1770
17711. Set the icon theme to dark mode
1772
1773```json
1774{
1775  "mode": "dark"
1776}
1777```
1778
17792. Set the icon theme to light mode
1780
1781```json
1782{
1783  "mode": "light"
1784}
1785```
1786
17873. Set the icon theme to system mode
1788
1789```json
1790{
1791  "mode": "system"
1792}
1793```
1794
1795### Dark
1796
1797- Description: The name of the dark icon theme.
1798- Setting: `dark`
1799- Default: `Zed (Default)`
1800
1801**Options**
1802
1803Run the `icon theme selector: toggle` action in the command palette to see a current list of valid icon themes names.
1804
1805### Light
1806
1807- Description: The name of the light icon theme.
1808- Setting: `light`
1809- Default: `Zed (Default)`
1810
1811**Options**
1812
1813Run the `icon theme selector: toggle` action in the command palette to see a current list of valid icon themes names.
1814
1815## Inlay hints
1816
1817- Description: Configuration for displaying extra text with hints in the editor.
1818- Setting: `inlay_hints`
1819- Default:
1820
1821```json
1822"inlay_hints": {
1823  "enabled": false,
1824  "show_type_hints": true,
1825  "show_parameter_hints": true,
1826  "show_other_hints": true,
1827  "show_background": false,
1828  "edit_debounce_ms": 700,
1829  "scroll_debounce_ms": 50,
1830  "toggle_on_modifiers_press": null
1831}
1832```
1833
1834**Options**
1835
1836Inlay hints querying consists of two parts: editor (client) and LSP server.
1837With 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.
1838At 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.
1839
1840The following languages have inlay hints preconfigured by Zed:
1841
1842- [Go](https://docs.zed.dev/languages/go)
1843- [Rust](https://docs.zed.dev/languages/rust)
1844- [Svelte](https://docs.zed.dev/languages/svelte)
1845- [Typescript](https://docs.zed.dev/languages/typescript)
1846
1847Use the `lsp` section for the server configuration. Examples are provided in the corresponding language documentation.
1848
1849Hints are not instantly queried in Zed, two kinds of debounces are used, either may be set to 0 to be disabled.
1850Settings-related hint updates are not debounced.
1851
1852All possible config values for `toggle_on_modifiers_press` are:
1853
1854```json
1855"inlay_hints": {
1856  "toggle_on_modifiers_press": {
1857    "control": true,
1858    "shift": true,
1859    "alt": true,
1860    "platform": true,
1861    "function": true
1862  }
1863}
1864```
1865
1866Unspecified values have a `false` value, hints won't be toggled if all the modifiers are `false` or not all the modifiers are pressed.
1867
1868## Journal
1869
1870- Description: Configuration for the journal.
1871- Setting: `journal`
1872- Default:
1873
1874```json
1875"journal": {
1876  "path": "~",
1877  "hour_format": "hour12"
1878}
1879```
1880
1881### Path
1882
1883- Description: The path of the directory where journal entries are stored.
1884- Setting: `path`
1885- Default: `~`
1886
1887**Options**
1888
1889`string` values
1890
1891### Hour Format
1892
1893- Description: The format to use for displaying hours in the journal.
1894- Setting: `hour_format`
1895- Default: `hour12`
1896
1897**Options**
1898
18991. 12-hour format:
1900
1901```json
1902{
1903  "hour_format": "hour12"
1904}
1905```
1906
19072. 24-hour format:
1908
1909```json
1910{
1911  "hour_format": "hour24"
1912}
1913```
1914
1915## Languages
1916
1917- Description: Configuration for specific languages.
1918- Setting: `languages`
1919- Default: `null`
1920
1921**Options**
1922
1923To override settings for a language, add an entry for that languages name to the `languages` value. Example:
1924
1925```json
1926"languages": {
1927  "C": {
1928    "format_on_save": "off",
1929    "preferred_line_length": 64,
1930    "soft_wrap": "preferred_line_length"
1931  },
1932  "JSON": {
1933    "tab_size": 4
1934  }
1935}
1936```
1937
1938The following settings can be overridden for each specific language:
1939
1940- [`enable_language_server`](#enable-language-server)
1941- [`ensure_final_newline_on_save`](#ensure-final-newline-on-save)
1942- [`format_on_save`](#format-on-save)
1943- [`formatter`](#formatter)
1944- [`hard_tabs`](#hard-tabs)
1945- [`preferred_line_length`](#preferred-line-length)
1946- [`remove_trailing_whitespace_on_save`](#remove-trailing-whitespace-on-save)
1947- [`show_edit_predictions`](#show-edit-predictions)
1948- [`show_whitespaces`](#show-whitespaces)
1949- [`soft_wrap`](#soft-wrap)
1950- [`tab_size`](#tab-size)
1951- [`use_autoclose`](#use-autoclose)
1952- [`always_treat_brackets_as_autoclosed`](#always-treat-brackets-as-autoclosed)
1953
1954These values take in the same options as the root-level settings with the same name.
1955
1956## Network Proxy
1957
1958- Description: Configure a network proxy for Zed.
1959- Setting: `proxy`
1960- Default: `null`
1961
1962**Options**
1963
1964The proxy setting must contain a URL to the proxy.
1965
1966The following URI schemes are supported:
1967
1968- `http`
1969- `https`
1970- `socks4` - SOCKS4 proxy with local DNS
1971- `socks4a` - SOCKS4 proxy with remote DNS
1972- `socks5` - SOCKS5 proxy with local DNS
1973- `socks5h` - SOCKS5 proxy with remote DNS
1974
1975`http` will be used when no scheme is specified.
1976
1977By 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`.
1978
1979For example, to set an `http` proxy, add the following to your settings:
1980
1981```json
1982{
1983  "proxy": "http://127.0.0.1:10809"
1984}
1985```
1986
1987Or to set a `socks5` proxy:
1988
1989```json
1990{
1991  "proxy": "socks5h://localhost:10808"
1992}
1993```
1994
1995## Preview tabs
1996
1997- Description:
1998  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. \
1999   There are several ways to convert a preview tab into a regular tab:
2000
2001  - Double-clicking on the file
2002  - Double-clicking on the tab header
2003  - Using the `project_panel::OpenPermanent` action
2004  - Editing the file
2005  - Dragging the file to a different pane
2006
2007- Setting: `preview_tabs`
2008- Default:
2009
2010```json
2011"preview_tabs": {
2012  "enabled": true,
2013  "enable_preview_from_file_finder": false,
2014  "enable_preview_from_code_navigation": false,
2015}
2016```
2017
2018### Enable preview from file finder
2019
2020- Description: Determines whether to open files in preview mode when selected from the file finder.
2021- Setting: `enable_preview_from_file_finder`
2022- Default: `false`
2023
2024**Options**
2025
2026`boolean` values
2027
2028### Enable preview from code navigation
2029
2030- Description: Determines whether a preview tab gets replaced when code navigation is used to navigate away from the tab.
2031- Setting: `enable_preview_from_code_navigation`
2032- Default: `false`
2033
2034**Options**
2035
2036`boolean` values
2037
2038## File Finder
2039
2040### File Icons
2041
2042- Description: Whether to show file icons in the file finder.
2043- Setting: `file_icons`
2044- Default: `true`
2045
2046### Modal Max Width
2047
2048- Description: Max-width of the file finder modal. It can take one of these values: `small`, `medium`, `large`, `xlarge`, and `full`.
2049- Setting: `modal_max_width`
2050- Default: `small`
2051
2052### Skip Focus For Active In Search
2053
2054- Description: Determines whether the file finder should skip focus for the active file in search results.
2055- Setting: `skip_focus_for_active_in_search`
2056- Default: `true`
2057
2058## Preferred Line Length
2059
2060- Description: The column at which to soft-wrap lines, for buffers where soft-wrap is enabled.
2061- Setting: `preferred_line_length`
2062- Default: `80`
2063
2064**Options**
2065
2066`integer` values
2067
2068## Projects Online By Default
2069
2070- Description: Whether or not to show the online projects view by default.
2071- Setting: `projects_online_by_default`
2072- Default: `true`
2073
2074**Options**
2075
2076`boolean` values
2077
2078## Remove Trailing Whitespace On Save
2079
2080- Description: Whether or not to remove any trailing whitespace from lines of a buffer before saving it.
2081- Setting: `remove_trailing_whitespace_on_save`
2082- Default: `true`
2083
2084**Options**
2085
2086`boolean` values
2087
2088## Search
2089
2090- Description: Search options to enable by default when opening new project and buffer searches.
2091- Setting: `search`
2092- Default:
2093
2094```json
2095"search": {
2096  "whole_word": false,
2097  "case_sensitive": false,
2098  "include_ignored": false,
2099  "regex": false
2100},
2101```
2102
2103## Seed Search Query From Cursor
2104
2105- Description: When to populate a new search's query based on the text under the cursor.
2106- Setting: `seed_search_query_from_cursor`
2107- Default: `always`
2108
2109**Options**
2110
21111. `always` always populate the search query with the word under the cursor
21122. `selection` only populate the search query when there is text selected
21133. `never` never populate the search query
2114
2115## Use Smartcase Search
2116
2117- 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. \
2118  This applies to both in-file searches and project-wide searches.
2119- Setting: `use_smartcase_search`
2120- Default: `false`
2121
2122**Options**
2123
2124`boolean` values
2125
2126Examples:
2127
2128- Searching for "function" would match "function", "Function", "FUNCTION", etc.
2129- Searching for "Function" would only match "Function", not "function" or "FUNCTION"
2130
2131## Show Call Status Icon
2132
2133- Description: Whether or not to show the call status icon in the status bar.
2134- Setting: `show_call_status_icon`
2135- Default: `true`
2136
2137**Options**
2138
2139`boolean` values
2140
2141## Completions
2142
2143- Description: Controls how completions are processed for this language.
2144- Setting: `completions`
2145- Default:
2146
2147```json
2148{
2149  "completions": {
2150    "words": "fallback",
2151    "lsp": true,
2152    "lsp_fetch_timeout_ms": 0,
2153    "lsp_insert_mode": "replace_suffix"
2154  }
2155}
2156```
2157
2158### Words
2159
2160- Description: Controls how words are completed. For large documents, not all words may be fetched for completion.
2161- Setting: `words`
2162- Default: `fallback`
2163
2164**Options**
2165
21661. `enabled` - Always fetch document's words for completions along with LSP completions
21672. `fallback` - Only if LSP response errors or times out, use document's words to show completions
21683. `disabled` - Never fetch or complete document's words for completions (word-based completions can still be queried via a separate action)
2169
2170### LSP
2171
2172- Description: Whether to fetch LSP completions or not.
2173- Setting: `lsp`
2174- Default: `true`
2175
2176**Options**
2177
2178`boolean` values
2179
2180### LSP Fetch Timeout (ms)
2181
2182- Description: When fetching LSP completions, determines how long to wait for a response of a particular server. When set to 0, waits indefinitely.
2183- Setting: `lsp_fetch_timeout_ms`
2184- Default: `0`
2185
2186**Options**
2187
2188`integer` values representing milliseconds
2189
2190### LSP Insert Mode
2191
2192- Description: Controls what range to replace when accepting LSP completions.
2193- Setting: `lsp_insert_mode`
2194- Default: `replace_suffix`
2195
2196**Options**
2197
21981. `insert` - Replaces text before the cursor, using the `insert` range described in the LSP specification
21992. `replace` - Replaces text before and after the cursor, using the `replace` range described in the LSP specification
22003. `replace_subsequence` - Behaves like `"replace"` if the text that would be replaced is a subsequence of the completion text, and like `"insert"` otherwise
22014. `replace_suffix` - Behaves like `"replace"` if the text after the cursor is a suffix of the completion, and like `"insert"` otherwise
2202
2203## Show Completions On Input
2204
2205- Description: Whether or not to show completions as you type.
2206- Setting: `show_completions_on_input`
2207- Default: `true`
2208
2209**Options**
2210
2211`boolean` values
2212
2213## Show Completion Documentation
2214
2215- Description: Whether to display inline and alongside documentation for items in the completions menu.
2216- Setting: `show_completion_documentation`
2217- Default: `true`
2218
2219**Options**
2220
2221`boolean` values
2222
2223## Show Edit Predictions
2224
2225- Description: Whether to show edit predictions as you type or manually by triggering `editor::ShowEditPrediction`.
2226- Setting: `show_edit_predictions`
2227- Default: `true`
2228
2229**Options**
2230
2231`boolean` values
2232
2233## Show Whitespaces
2234
2235- Description: Whether or not to render whitespace characters in the editor.
2236- Setting: `show_whitespaces`
2237- Default: `selection`
2238
2239**Options**
2240
22411. `all`
22422. `selection`
22433. `none`
22444. `boundary`
2245
2246## Soft Wrap
2247
2248- Description: Whether or not to automatically wrap lines of text to fit editor / preferred width.
2249- Setting: `soft_wrap`
2250- Default: `none`
2251
2252**Options**
2253
22541. `none` to avoid wrapping generally, unless the line is too long
22552. `prefer_line` (deprecated, same as `none`)
22563. `editor_width` to wrap lines that overflow the editor width
22574. `preferred_line_length` to wrap lines that overflow `preferred_line_length` config value
22585. `bounded` to wrap lines at the minimum of `editor_width` and `preferred_line_length`
2259
2260## Wrap Guides (Vertical Rulers)
2261
2262- Description: Where to display vertical rulers as wrap-guides. Disable by setting `show_wrap_guides` to `false`.
2263- Setting: `wrap_guides`
2264- Default: []
2265
2266**Options**
2267
2268List of `integer` column numbers
2269
2270## Tab Size
2271
2272- Description: The number of spaces to use for each tab character.
2273- Setting: `tab_size`
2274- Default: `4`
2275
2276**Options**
2277
2278`integer` values
2279
2280## Telemetry
2281
2282- Description: Control what info is collected by Zed.
2283- Setting: `telemetry`
2284- Default:
2285
2286```json
2287"telemetry": {
2288  "diagnostics": true,
2289  "metrics": true
2290},
2291```
2292
2293**Options**
2294
2295### Diagnostics
2296
2297- Description: Setting for sending debug-related data, such as crash reports.
2298- Setting: `diagnostics`
2299- Default: `true`
2300
2301**Options**
2302
2303`boolean` values
2304
2305### Metrics
2306
2307- Description: Setting for sending anonymized usage data, such what languages you're using Zed with.
2308- Setting: `metrics`
2309- Default: `true`
2310
2311**Options**
2312
2313`boolean` values
2314
2315## Terminal
2316
2317- Description: Configuration for the terminal.
2318- Setting: `terminal`
2319- Default:
2320
2321```json
2322{
2323  "terminal": {
2324    "alternate_scroll": "off",
2325    "blinking": "terminal_controlled",
2326    "copy_on_select": false,
2327    "dock": "bottom",
2328    "default_width": 640,
2329    "default_height": 320,
2330    "detect_venv": {
2331      "on": {
2332        "directories": [".env", "env", ".venv", "venv"],
2333        "activate_script": "default"
2334      }
2335    },
2336    "env": {},
2337    "font_family": null,
2338    "font_features": null,
2339    "font_size": null,
2340    "line_height": "comfortable",
2341    "option_as_meta": false,
2342    "button": true,
2343    "shell": "system",
2344    "toolbar": {
2345      "breadcrumbs": true
2346    },
2347    "working_directory": "current_project_directory",
2348    "scrollbar": {
2349      "show": null
2350    }
2351  }
2352}
2353```
2354
2355### Terminal: Dock
2356
2357- Description: Control the position of the dock
2358- Setting: `dock`
2359- Default: `bottom`
2360
2361**Options**
2362
2363`"bottom"`, `"left"` or `"right"`
2364
2365### Terminal: Alternate Scroll
2366
2367- 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.
2368- Setting: `alternate_scroll`
2369- Default: `off`
2370
2371**Options**
2372
23731. Default alternate scroll mode to off
2374
2375```json
2376{
2377  "terminal": {
2378    "alternate_scroll": "off"
2379  }
2380}
2381```
2382
23832. Default alternate scroll mode to on
2384
2385```json
2386{
2387  "terminal": {
2388    "alternate_scroll": "on"
2389  }
2390}
2391```
2392
2393### Terminal: Blinking
2394
2395- Description: Set the cursor blinking behavior in the terminal
2396- Setting: `blinking`
2397- Default: `terminal_controlled`
2398
2399**Options**
2400
24011. Never blink the cursor, ignore the terminal mode
2402
2403```json
2404{
2405  "terminal": {
2406    "blinking": "off"
2407  }
2408}
2409```
2410
24112. Default the cursor blink to off, but allow the terminal to turn blinking on
2412
2413```json
2414{
2415  "terminal": {
2416    "blinking": "terminal_controlled"
2417  }
2418}
2419```
2420
24213. Always blink the cursor, ignore the terminal mode
2422
2423```json
2424{
2425  "terminal": {
2426    "blinking": "on"
2427  }
2428}
2429```
2430
2431### Terminal: Copy On Select
2432
2433- Description: Whether or not selecting text in the terminal will automatically copy to the system clipboard.
2434- Setting: `copy_on_select`
2435- Default: `false`
2436
2437**Options**
2438
2439`boolean` values
2440
2441**Example**
2442
2443```json
2444{
2445  "terminal": {
2446    "copy_on_select": true
2447  }
2448}
2449```
2450
2451### Terminal: Env
2452
2453- 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
2454- Setting: `env`
2455- Default: `{}`
2456
2457**Example**
2458
2459```json
2460{
2461  "terminal": {
2462    "env": {
2463      "ZED": "1",
2464      "KEY": "value1:value2"
2465    }
2466  }
2467}
2468```
2469
2470### Terminal: Font Size
2471
2472- Description: What font size to use for the terminal. When not set defaults to matching the editor's font size
2473- Setting: `font_size`
2474- Default: `null`
2475
2476**Options**
2477
2478`integer` values
2479
2480```json
2481{
2482  "terminal": {
2483    "font_size": 15
2484  }
2485}
2486```
2487
2488### Terminal: Font Family
2489
2490- Description: What font to use for the terminal. When not set, defaults to matching the editor's font.
2491- Setting: `font_family`
2492- Default: `null`
2493
2494**Options**
2495
2496The name of any font family installed on the user's system
2497
2498```json
2499{
2500  "terminal": {
2501    "font_family": "Berkeley Mono"
2502  }
2503}
2504```
2505
2506### Terminal: Font Features
2507
2508- Description: What font features to use for the terminal. When not set, defaults to matching the editor's font features.
2509- Setting: `font_features`
2510- Default: `null`
2511- Platform: macOS and Windows.
2512
2513**Options**
2514
2515See Buffer Font Features
2516
2517```json
2518{
2519  "terminal": {
2520    "font_features": {
2521      "calt": false
2522      // See Buffer Font Features for more features
2523    }
2524  }
2525}
2526```
2527
2528### Terminal: Line Height
2529
2530- Description: Set the terminal's line height.
2531- Setting: `line_height`
2532- Default: `comfortable`
2533
2534**Options**
2535
25361. Use a line height that's `comfortable` for reading, 1.618. (default)
2537
2538```json
2539{
2540  "terminal": {
2541    "line_height": "comfortable"
2542  }
2543}
2544```
2545
25462. Use a `standard` line height, 1.3. This option is useful for TUIs, particularly if they use box characters
2547
2548```json
2549{
2550  "terminal": {
2551    "line_height": "standard"
2552  }
2553}
2554```
2555
25563.  Use a custom line height.
2557
2558```json
2559{
2560  "terminal": {
2561    "line_height": {
2562      "custom": 2
2563    }
2564  }
2565}
2566```
2567
2568### Terminal: Option As Meta
2569
2570- Description: Re-interprets the option keys to act like a 'meta' key, like in Emacs.
2571- Setting: `option_as_meta`
2572- Default: `false`
2573
2574**Options**
2575
2576`boolean` values
2577
2578```json
2579{
2580  "terminal": {
2581    "option_as_meta": true
2582  }
2583}
2584```
2585
2586### Terminal: Shell
2587
2588- Description: What shell to use when launching the terminal.
2589- Setting: `shell`
2590- Default: `system`
2591
2592**Options**
2593
25941. Use the system's default terminal configuration (usually the `/etc/passwd` file).
2595
2596```json
2597{
2598  "terminal": {
2599    "shell": "system"
2600  }
2601}
2602```
2603
26042. A program to launch:
2605
2606```json
2607{
2608  "terminal": {
2609    "shell": {
2610      "program": "sh"
2611    }
2612  }
2613}
2614```
2615
26163. A program with arguments:
2617
2618```json
2619{
2620  "terminal": {
2621    "shell": {
2622      "with_arguments": {
2623        "program": "/bin/bash",
2624        "args": ["--login"]
2625      }
2626    }
2627  }
2628}
2629```
2630
2631## Terminal: Detect Virtual Environments {#terminal-detect_venv}
2632
2633- 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.
2634- Setting: `detect_venv`
2635- Default:
2636
2637```json
2638{
2639  "terminal": {
2640    "detect_venv": {
2641      "on": {
2642        // Default directories to search for virtual environments, relative
2643        // to the current working directory. We recommend overriding this
2644        // in your project's settings, rather than globally.
2645        "directories": [".env", "env", ".venv", "venv"],
2646        // Can also be `csh`, `fish`, and `nushell`
2647        "activate_script": "default"
2648      }
2649    }
2650  }
2651}
2652```
2653
2654Disable with:
2655
2656```json
2657{
2658  "terminal": {
2659    "detect_venv": "off"
2660  }
2661}
2662```
2663
2664## Terminal: Toolbar
2665
2666- Description: Whether or not to show various elements in the terminal toolbar.
2667- Setting: `toolbar`
2668- Default:
2669
2670```json
2671{
2672  "terminal": {
2673    "toolbar": {
2674      "breadcrumbs": true
2675    }
2676  }
2677}
2678```
2679
2680**Options**
2681
2682At the moment, only the `breadcrumbs` option is available, it controls displaying of the terminal title that can be changed via `PROMPT_COMMAND`.
2683
2684If the terminal title is empty, the breadcrumbs won't be shown.
2685
2686The shell running in the terminal needs to be configured to emit the title.
2687
2688Example command to set the title: `echo -e "\e]2;New Title\007";`
2689
2690### Terminal: Button
2691
2692- Description: Control to show or hide the terminal button in the status bar
2693- Setting: `button`
2694- Default: `true`
2695
2696**Options**
2697
2698`boolean` values
2699
2700```json
2701{
2702  "terminal": {
2703    "button": false
2704  }
2705}
2706```
2707
2708### Terminal: Working Directory
2709
2710- Description: What working directory to use when launching the terminal.
2711- Setting: `working_directory`
2712- Default: `"current_project_directory"`
2713
2714**Options**
2715
27161. Use the current file's project directory. Will Fallback to the first project directory strategy if unsuccessful
2717
2718```json
2719{
2720  "terminal": {
2721    "working_directory": "current_project_directory"
2722  }
2723}
2724```
2725
27262. Use the first project in this workspace's directory. Will fallback to using this platform's home directory.
2727
2728```json
2729{
2730  "terminal": {
2731    "working_directory": "first_project_directory"
2732  }
2733}
2734```
2735
27363. Always use this platform's home directory (if we can find it)
2737
2738```json
2739{
2740  "terminal": {
2741    "working_directory": "always_home"
2742  }
2743}
2744```
2745
27464. 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.
2747
2748```json
2749{
2750  "terminal": {
2751    "working_directory": {
2752      "always": {
2753        "directory": "~/zed/projects/"
2754      }
2755    }
2756  }
2757}
2758```
2759
2760## Theme
2761
2762- 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.
2763- Setting: `theme`
2764- Default: `One Dark`
2765
2766### Theme Object
2767
2768- Description: Specify the theme using an object that includes the `mode`, `dark`, and `light` themes.
2769- Setting: `theme`
2770- Default:
2771
2772```json
2773"theme": {
2774  "mode": "system",
2775  "dark": "One Dark",
2776  "light": "One Light"
2777},
2778```
2779
2780### Mode
2781
2782- Description: Specify theme mode.
2783- Setting: `mode`
2784- Default: `system`
2785
2786**Options**
2787
27881. Set the theme to dark mode
2789
2790```json
2791{
2792  "mode": "dark"
2793}
2794```
2795
27962. Set the theme to light mode
2797
2798```json
2799{
2800  "mode": "light"
2801}
2802```
2803
28043. Set the theme to system mode
2805
2806```json
2807{
2808  "mode": "system"
2809}
2810```
2811
2812### Dark
2813
2814- Description: The name of the dark Zed theme to use for the UI.
2815- Setting: `dark`
2816- Default: `One Dark`
2817
2818**Options**
2819
2820Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2821
2822### Light
2823
2824- Description: The name of the light Zed theme to use for the UI.
2825- Setting: `light`
2826- Default: `One Light`
2827
2828**Options**
2829
2830Run the `theme selector: toggle` action in the command palette to see a current list of valid themes names.
2831
2832## Vim
2833
2834- Description: Whether or not to enable vim mode (work in progress).
2835- Setting: `vim_mode`
2836- Default: `false`
2837
2838## Project Panel
2839
2840- Description: Customize project panel
2841- Setting: `project_panel`
2842- Default:
2843
2844```json
2845{
2846  "project_panel": {
2847    "button": true,
2848    "default_width": 240,
2849    "dock": "left",
2850    "entry_spacing": "comfortable",
2851    "file_icons": true,
2852    "folder_icons": true,
2853    "git_status": true,
2854    "indent_size": 20,
2855    "auto_reveal_entries": true,
2856    "auto_fold_dirs": true,
2857    "scrollbar": {
2858      "show": null
2859    },
2860    "show_diagnostics": "all",
2861    "indent_guides": {
2862      "show": "always"
2863    }
2864  }
2865}
2866```
2867
2868### Dock
2869
2870- Description: Control the position of the dock
2871- Setting: `dock`
2872- Default: `left`
2873
2874**Options**
2875
28761. Default dock position to left
2877
2878```json
2879{
2880  "dock": "left"
2881}
2882```
2883
28842. Default dock position to right
2885
2886```json
2887{
2888  "dock": "right"
2889}
2890```
2891
2892### Entry Spacing
2893
2894- Description: Spacing between worktree entries
2895- Setting: `entry_spacing`
2896- Default: `comfortable`
2897
2898**Options**
2899
29001. Comfortable entry spacing
2901
2902```json
2903{
2904  "entry_spacing": "comfortable"
2905}
2906```
2907
29082. Standard entry spacing
2909
2910```json
2911{
2912  "entry_spacing": "standard"
2913}
2914```
2915
2916### Git Status
2917
2918- Description: Indicates newly created and updated files
2919- Setting: `git_status`
2920- Default: `true`
2921
2922**Options**
2923
29241. Default enable git status
2925
2926```json
2927{
2928  "git_status": true
2929}
2930```
2931
29322. Default disable git status
2933
2934```json
2935{
2936  "git_status": false
2937}
2938```
2939
2940### Default Width
2941
2942- Description: Customize default width taken by project panel
2943- Setting: `default_width`
2944- Default: `240`
2945
2946**Options**
2947
2948`float` values
2949
2950### Auto Reveal Entries
2951
2952- Description: Whether to reveal it in the project panel automatically, when a corresponding project entry becomes active. Gitignored entries are never auto revealed.
2953- Setting: `auto_reveal_entries`
2954- Default: `true`
2955
2956**Options**
2957
29581. Enable auto reveal entries
2959
2960```json
2961{
2962  "auto_reveal_entries": true
2963}
2964```
2965
29662. Disable auto reveal entries
2967
2968```json
2969{
2970  "auto_reveal_entries": false
2971}
2972```
2973
2974### Auto Fold Dirs
2975
2976- Description: Whether to fold directories automatically when directory has only one directory inside.
2977- Setting: `auto_fold_dirs`
2978- Default: `true`
2979
2980**Options**
2981
29821. Enable auto fold dirs
2983
2984```json
2985{
2986  "auto_fold_dirs": true
2987}
2988```
2989
29902. Disable auto fold dirs
2991
2992```json
2993{
2994  "auto_fold_dirs": false
2995}
2996```
2997
2998### Indent Size
2999
3000- Description: Amount of indentation (in pixels) for nested items.
3001- Setting: `indent_size`
3002- Default: `20`
3003
3004### Indent Guides: Show
3005
3006- Description: Whether to show indent guides in the project panel.
3007- Setting: `indent_guides`
3008- Default:
3009
3010```json
3011"indent_guides": {
3012  "show": "always"
3013}
3014```
3015
3016**Options**
3017
30181. Show indent guides in the project panel
3019
3020```json
3021{
3022  "indent_guides": {
3023    "show": "always"
3024  }
3025}
3026```
3027
30282. Hide indent guides in the project panel
3029
3030```json
3031{
3032  "indent_guides": {
3033    "show": "never"
3034  }
3035}
3036```
3037
3038### Scrollbar: Show
3039
3040- 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.
3041- Setting: `scrollbar`
3042- Default:
3043
3044```json
3045"scrollbar": {
3046  "show": null
3047}
3048```
3049
3050**Options**
3051
30521. Show scrollbar in the project panel
3053
3054```json
3055{
3056  "scrollbar": {
3057    "show": "always"
3058  }
3059}
3060```
3061
30622. Hide scrollbar in the project panel
3063
3064```json
3065{
3066  "scrollbar": {
3067    "show": "never"
3068  }
3069}
3070```
3071
3072## Assistant Panel
3073
3074- Description: Customize assistant panel
3075- Setting: `assistant`
3076- Default:
3077
3078```json
3079"assistant": {
3080  "version": "2",
3081  "enabled": true,
3082  "button": true,
3083  "dock": "right",
3084  "default_width": 640,
3085  "default_height": 320,
3086  "default_model": {
3087    "provider": "zed.dev",
3088    "model": "claude-3-7-sonnet-latest"
3089  },
3090  "editor_model": {
3091    "provider": "zed.dev",
3092    "model": "claude-3-7-sonnet-latest"
3093  }
3094}
3095```
3096
3097## Outline Panel
3098
3099- Description: Customize outline Panel
3100- Setting: `outline_panel`
3101- Default:
3102
3103```json
3104"outline_panel": {
3105  "button": true,
3106  "default_width": 300,
3107  "dock": "left",
3108  "file_icons": true,
3109  "folder_icons": true,
3110  "git_status": true,
3111  "indent_size": 20,
3112  "auto_reveal_entries": true,
3113  "auto_fold_dirs": true,
3114  "indent_guides": {
3115    "show": "always"
3116  },
3117  "scrollbar": {
3118    "show": null
3119  }
3120}
3121```
3122
3123## Calls
3124
3125- Description: Customize behavior when participating in a call
3126- Setting: `calls`
3127- Default:
3128
3129```json
3130"calls": {
3131  // Join calls with the microphone live by default
3132  "mute_on_join": false,
3133  // Share your project when you are the first to join a channel
3134  "share_on_join": false
3135},
3136```
3137
3138## Unnecessary Code Fade
3139
3140- Description: How much to fade out unused code.
3141- Setting: `unnecessary_code_fade`
3142- Default: `0.3`
3143
3144**Options**
3145
3146Float values between `0.0` and `0.9`, where:
3147
3148- `0.0` means no fading (unused code looks the same as used code)
3149- `0.9` means maximum fading (unused code is very faint but still visible)
3150
3151**Example**
3152
3153```json
3154{
3155  "unnecessary_code_fade": 0.5
3156}
3157```
3158
3159## UI Font Family
3160
3161- Description: The name of the font to use for text in the UI.
3162- Setting: `ui_font_family`
3163- Default: `Zed Plex Sans`
3164
3165**Options**
3166
3167The name of any font family installed on the system.
3168
3169## UI Font Features
3170
3171- Description: The OpenType features to enable for text in the UI.
3172- Setting: `ui_font_features`
3173- Default:
3174
3175```json
3176"ui_font_features": {
3177  "calt": false
3178}
3179```
3180
3181- Platform: macOS and Windows.
3182
3183**Options**
3184
3185Zed supports all OpenType features that can be enabled or disabled for a given UI font, as well as setting values for font features.
3186
3187For example, to disable font ligatures, add the following to your settings:
3188
3189```json
3190{
3191  "ui_font_features": {
3192    "calt": false
3193  }
3194}
3195```
3196
3197You can also set other OpenType features, like setting `cv01` to `7`:
3198
3199```json
3200{
3201  "ui_font_features": {
3202    "cv01": 7
3203  }
3204}
3205```
3206
3207## UI Font Fallbacks
3208
3209- Description: The font fallbacks to use for text in the UI.
3210- Setting: `ui_font_fallbacks`
3211- Default: `null`
3212- Platform: macOS and Windows.
3213
3214**Options**
3215
3216For example, to use `Nerd Font` as a fallback, add the following to your settings:
3217
3218```json
3219{
3220  "ui_font_fallbacks": ["Nerd Font"]
3221}
3222```
3223
3224## UI Font Size
3225
3226- Description: The default font size for text in the UI.
3227- Setting: `ui_font_size`
3228- Default: `16`
3229
3230**Options**
3231
3232`integer` values from `6` to `100` pixels (inclusive)
3233
3234## UI Font Weight
3235
3236- Description: The default font weight for text in the UI.
3237- Setting: `ui_font_weight`
3238- Default: `400`
3239
3240**Options**
3241
3242`integer` values between `100` and `900`
3243
3244## An example configuration:
3245
3246```json
3247// ~/.config/zed/settings.json
3248{
3249  "theme": "cave-light",
3250  "tab_size": 2,
3251  "preferred_line_length": 80,
3252  "soft_wrap": "none",
3253
3254  "buffer_font_size": 18,
3255  "buffer_font_family": "Zed Plex Mono",
3256
3257  "autosave": "on_focus_change",
3258  "format_on_save": "off",
3259  "vim_mode": false,
3260  "projects_online_by_default": true,
3261  "terminal": {
3262    "font_family": "FiraCode Nerd Font Mono",
3263    "blinking": "off"
3264  },
3265  "languages": {
3266    "C": {
3267      "format_on_save": "language_server",
3268      "preferred_line_length": 64,
3269      "soft_wrap": "preferred_line_length"
3270    }
3271  }
3272}
3273```