Java | Zed Code Editor Documentation
Description: Learn how to use and customize Zed, the fast, collaborative code editor. Official docs on features, configuration, AI tools, and workflows.

# Java

Java language support in Zed is provided by:

- Zed Java: zed-extensions/java
- Tree-sitter: tree-sitter/tree-sitter-java
- Language Server: eclipse-jdtls/eclipse.jdt.ls

## Install OpenJDK

You will need to install a Java runtime (OpenJDK).

- MacOS: `brew install openjdk`
- Ubuntu: `sudo add-apt-repository ppa:openjdk-23 && sudo apt-get install openjdk-23`
- Windows: `choco install openjdk`
- Arch Linux: `sudo pacman -S jre-openjdk-headless`

Or manually download and install OpenJDK 23.

## Extension Install

You can install either by opening `zed: extensions`(`cmd-shift-x|ctrl-shift-x`) and searching for `java`.

## Settings / Initialization Options

The extension will automatically download the language server, see: Manual JDTLS Install below if you'd prefer to manage that yourself.

For available `initialization_options` please see the Initialize Request section of the Eclipse.jdt.ls Wiki.

You can add these customizations to your Zed Settings by launching `zed: open settings`(`cmd-,|ctrl-,`) or by using a `.zed/setting.json` inside your project.

### Zed Java Settings

    {
      "lsp": {
        "jdtls": {
          "initialization_options": {}
        }
      }
    }

## Example Configs

### JDTLS Binary

By default, zed will look in your `PATH` for a `jdtls` binary, if you wish to specify an explicit binary you can do so via settings:

      "lsp": {
        "jdtls": {
          "binary": {
            "path": "/path/to/java/bin/jdtls",
            // "arguments": [],
            // "env": {},
            "ignore_system_version": true
          }
        }
      }

### Zed Java Initialization Options

There are also many more options you can pass directly to the language server, for example:

    {
      "lsp": {
        "jdtls": {
          "initialization_options": {
            "bundles": [],
            "workspaceFolders": ["file:///home/snjeza/Project"],
            "settings": {
              "java": {
                "home": "/usr/local/jdk-9.0.1",
                "errors": {
                  "incompleteClasspath": {
                    "severity": "warning"
                  }
                },
                "configuration": {
                  "updateBuildConfiguration": "interactive",
                  "maven": {
                    "userSettings": null
                  }
                },
                "trace": {
                  "server": "verbose"
                },
                "import": {
                  "gradle": {
                    "enabled": true
                  },
                  "maven": {
                    "enabled": true
                  },
                  "exclusions": [
                    "**/node_modules/**",
                    "**/.metadata/**",
                    "**/archetype-resources/**",
                    "**/META-INF/maven/**",
                    "/**/test/**"
                  ]
                },
                "jdt": {
                  "ls": {
                    "lombokSupport": {
                      "enabled": false // Set this to true to enable lombok support
                    }
                  }
                },
                "referencesCodeLens": {
                  "enabled": false
                },
                "signatureHelp": {
                  "enabled": false
                },
                "implementationsCodeLens": {
                  "enabled": false
                },
                "format": {
                  "enabled": true
                },
                "saveActions": {
                  "organizeImports": false
                },
                "contentProvider": {
                  "preferred": null
                },
                "autobuild": {
                  "enabled": false
                },
                "completion": {
                  "favoriteStaticMembers": [
                    "org.junit.Assert.*",
                    "org.junit.Assume.*",
                    "org.junit.jupiter.api.Assertions.*",
                    "org.junit.jupiter.api.Assumptions.*",
                    "org.junit.jupiter.api.DynamicContainer.*",
                    "org.junit.jupiter.api.DynamicTest.*"
                  ],
                  "importOrder": ["java", "javax", "com", "org"]
                }
              }
            }
          }
        }
      }
    }

## Manual JDTLS Install

If you prefer, you can install JDTLS yourself and the extension can be configured to use that instead.

- MacOS: `brew install jdtls`
- Arch: `jdtls` from AUR

Or manually download install:

- JDTLS Milestone Builds (updated every two weeks)
- JDTLS Snapshot Builds (frequent updates)

## See also

- Zed Java Repo
- Zed Java Issues