Zed, with your linter as a language server
ultracite init --editors zed writes .zed/settings.json, so Zed formats on save and applies safe fixes through your toolchain’s language server: Oxc’s, Biome’s, or ESLint’s with Prettier. Zed Agent reads AGENTS.md and can check its own edits against the same language servers.
Zed by Zed IndustriesChecked against Zed 1.23.2
{
"format_on_save": "on",Format on save
"formatter": "language_server",
"lsp": {
"vtsls": {
"settings": {
"javascript": {
"preferences": {
"includePackageJsonAutoImports": "on"
}
},
"typescript": {
"preferences": {
"includePackageJsonAutoImports": "on"
}
}
}
},
"oxfmt": {
"initialization_options": {
"settings": {
"configPath": null,
"flags": {},
"fmt.configPath": null,
"fmt.experimental": true,
"run": "onSave",
"typeAware": false,
"unusedDisableDirectives": false
}
}
},
"oxlint": {
"initialization_options": {
"settings": {
"disableNestedConfig": false,
"fixKind": "safe_fix",
"run": "onType",
"typeAware": null,
"unusedDisableDirectives": "deny"
}
}
}
},
"languages": {
"JavaScript": {
"code_actions_on_format": {
"source.fixAll.oxc": trueOxlint’s safe fixes
},
"formatter": {
"language_server": {
"name": "oxfmt"Oxfmt formats it
}
}
},
"TSX": {
"code_actions_on_format": {
"source.fixAll.oxc": true
},
"formatter": {
"language_server": {
"name": "oxfmt"
}
}
},
"TypeScript": {
"code_actions_on_format": {
"source.fixAll.oxc": true
},
"formatter": {
"language_server": {
"name": "oxfmt"
}
}
}
}
}init does in Zed- 1Writes
.zed/settings.jsonA new file, or merged into yours setting by setting, with your comments and other settings kept. - 2Points you to the Oxc or Biome extensionZed extensions install from its own extensions view, so
initlinks the one your toolchain needs. ESLint and Prettier are built into Zed.
- 3Trust the project from the warning icon in the title bar. Until you do, Zed skips
.zed/settings.json. - 4Install the Oxc extension from
zed: extensions, or Biome’s if you picked Biome. - 5Save a file: Oxfmt formats it and Oxlint’s safe fixes apply.
Three toolchains, one settings.json
init writes the settings for the toolchain you pick, so Zed formats with the same tool as ultracite fix and applies its fixes when you save.
Oxlint + OxfmtDefault
- Needs
- Oxc extension
- Formats with
- oxfmt language server
- On save
- source.fixAll.oxc
--linter oxlint
- Needs
- Biome extension
- Formats with
- biome language server
- On save
- source.fixAll.biomesource.organizeImports.biome
--linter biome
- Needs
- Built in
- Formats with
- Prettier
- On save
- source.fixAll.eslintsource.organizeImports.eslint
--linter eslint
Before Zed applies the settings
Zed runs your toolchain through language servers, which come from Zed extensions or ship with Zed, and it only applies .zed/settings.json in a project you trust.
- Restricted Mode
- Zed opens every new folder in Restricted Mode, which skips
.zed/settings.jsonand starts no language servers. Trust the project from the warning icon in the title bar. - Oxlint and Oxfmt
- Run through the Oxc extension (
oxc-project/oxc-zed), which needs Zed 0.205 or later and Oxlint 1.35 or later.initpoints you to it; install it fromzed: extensions. - Biome
- Runs through the Biome extension (
biomejs/biome-zed).initpoints you to it when you pick Biome. - ESLint and Prettier
- Built into Zed. Its Prettier integration uses your project’s own Prettier install, config and plugins, as
ultracite fixdoes. - TypeScript server
- Zed uses vtsls for TypeScript and JavaScript, so Ultracite sets its import preferences under
lsp.vtsls.settings. - Extension prompts
- Zed suggests extensions for the files you open (
suggest_extensions, on by default), andauto_install_extensionsinstalls the ones you list.
Zed Agent sees the lint errors you see
Zed Agent loads AGENTS.md as project instructions, and its diagnostics tool reads the errors and warnings your language servers report. So after an edit it can check the same Oxlint, Biome or ESLint results you see in the editor. External agents such as Claude and Codex run as their own processes over the Agent Client Protocol and read their own config.
- 1
~/.config/zed/AGENTS.mdPersonal instructions for every project. Project instructions win when the two conflict. - 2
.rules, .cursorrules, .windsurfrules, .clinerulesChecked first. Zed uses only the first project file it finds, so any of these hidesAGENTS.md. - 3
.github/copilot-instructions.md, AGENT.mdAlso ahead ofAGENTS.mdin Zed’s list. - 4
AGENTS.mdUltraciteWhereinitwrites Ultracite’s rules. Loaded as project instructions when no file above it exists. - 5
CLAUDE.md, GEMINI.mdRead only when none of the files above exist.
- 01Zed Agent edits a file in your project.
- 02The Oxc, Biome or ESLint language server lints the changed buffer, as it does for your own edits.
- 03The agent can call
diagnosticson that file to see what the linter reported, then fix it before moving on.
Worth knowing about Zed
Not a VS Code fork
Zed doesn’t run VS Code extensions, so it gets its own settings file. Oxlint, Oxfmt and Biome come from Zed extensions, and ESLint and Prettier ship with Zed, so the ESLint toolchain needs nothing installed.
The Ultracite skill loads as is
Zed Agent loads skills from the project’s
.agents/skills/folder, whereinitinstalls the Ultracite skill, and from~/.agents/skills/. Editing aSKILL.mdtakes effect without restarting the session.External agents keep their own setup
Claude, Codex, Gemini CLI and other agents run in Zed’s Agent Panel over the Agent Client Protocol, as separate processes. They read their own instruction files and settings rather than Zed’s, so set them up with
init --agentsas you would in a terminal.
Zed questions, answered
- Does Ultracite work with Zed?
- Yes.
npx ultracite init --editors zedwrites.zed/settings.jsonfor Oxlint and Oxfmt, Biome, or ESLint and Prettier. Install the Oxc or Biome extension from Zed’s extensions view; ESLint and Prettier are built in. - Why doesn’t Zed format on save after init?
- Zed ignores
.zed/settings.jsonand starts no language servers until you trust the project, and Oxlint and Biome need their Zed extension. Trust the folder from the warning icon in the title bar, then check the extension is installed. - Does Zed Agent read AGENTS.md?
- Yes, as project instructions, but only when no file ahead of it in Zed’s list exists:
.rules,.cursorrules,.windsurfrules,.clinerules,.github/copilot-instructions.mdorAGENT.md. Zed uses the first one it finds. - Can I use ESLint and Prettier in Zed?
- Yes.
init --linter eslint --editors zedkeeps ESLint’s fixes and import sorting as code actions and makes Prettier the formatter. Zed’s Prettier integration uses your project’s own Prettier install, config and plugins. - Does Ultracite install the Zed extension for me?
- No. Zed extensions install from its extensions view (
zed: extensions), and Ultracite doesn’t install any. Zed suggests extensions for the files you open, and itsauto_install_extensionssetting installs the ones you name.
Keep going
- EditorVS CodeMicrosoft’s code editor, with GitHub Copilot’s agent built in and extensions from the Visual Studio Marketplace.
- EditorCursorThe AI code editor built on VS Code, with an agent that edits across your codebase.
- EditorDevin DesktopCognition’s AI IDE, formerly Windsurf, built on Code OSS, with the Devin Local agent.
- DocsEditor setupEvery editor
initconfigures, and the extension each toolchain needs.
Ship less slop
One command sets up your linter, formatter, editor and agents. Works with Oxlint, Biome and ESLint.