Thank you for helping us make Zed better!
All activity in Zed forums is subject to our Code of Conduct. Additionally, contributors must sign our Contributor License Agreement before their contributions can be merged.
Zed is a large project with a number of priorities. We spend most of our time working on what we believe the product needs, but we also love working with the community to improve the product in ways we haven't thought of (or had time to get to yet!)
In particular we love PRs that are:
If you're looking for concrete ideas:
Thinking about proposing or building a larger feature? Don't start with a PR, start with reading the Zed Feature Process for how we think about feature design — what context to provide, what integration points to consider, and how to put together a strong proposal. The right place for the proposals is GitHub discussions (not GitHub issues).
The Zed culture values working code and synchronous conversations over long discussion threads.
The best way to get us to take a look at a proposed change (excluding new features) is to send a pull request. We will get back to you (though this sometimes takes longer than we'd like, sorry). Pinging the maintainers by their username or writing them emails spends their time but does not bump the priority of a particular PR.
If you need more feedback from us: the best way is to be responsive to GitHub comments, or to offer up time to pair with us.
If you need help deciding how to fix a bug, or finish implementing a feature that we've agreed we want, please open a PR early so we can discuss how to make the change with code in hand.
Although we will take a look, we tend to only merge about half the PRs that are submitted. If you'd like your PR to have the best chance of being merged:
A note on open pull requests: currently we cap them at three per author.
We're lucky to get a lot of contributions, and the pattern we've seen is that landing
your first PR dramatically improves the odds for every PR after it. A stack of
simultaneous PRs, by contrast, tends to just sit and rot against a moving main
branch. It's better to start with one, see it through, then bring on the next.
It also keeps things sane when the contributions are coming in faster than we can
review them, including the occasional automated burst.
Although there are few hard and fast rules, typically we don't merge:
.unwrap()s, fixing typos is great; making code "more readable" — maybe not so much.We welcome the use of LLMs for coding, but we hold a high bar for all contributions, and we expect a human in the loop who genuinely understands the work an LLM produces on their behalf. For that reason, we don't accept contributions from autonomous agents. Pull requests that appear to violate this may be closed, sometimes without notice.
Don't rely on LLMs to write the whole thing for you when communicating with the maintainers (meaning replies to comments, PR descriptions, and alike). The readers are humans, and we'd like to hear from you, not from a model (we have models at home). If you're a non-native English speaker using an LLM to thoroughly edit or translate your messages to the maintainers, we'd encourage you to put the machine translation in a quote block and include the original text in your native language after it.
If you think it's helpful/necessary to share context from a chat with an LLM, please put the relevant part of it in a quote block (e.g., using >), disclose it as AI-generated, and add your own commentary explaining why it's relevant and what you take from it.
This policy was adapted from ripgrep's AI policy.
When your changes affect UI, consult this checklist:
Accessibility / Ergonomics
Responsiveness
Platform Consistency
Performance
Consistency
Internationalization & Text
User Paths & Edge Cases
Discoverability & Learning
We suggest you keep the Zed glossary at your side when starting out. It lists and explains some of the structures and terms you will see throughout the codebase.
Zed is made up of several smaller crates - let's go over those you're most likely to interact with:
gpui is a GPU-accelerated UI framework which provides all of the building blocks for Zed. We recommend familiarizing yourself with the root level GPUI documentation.editor contains the core Editor type that drives both the code editor and all various input fields within Zed. It also handles a display layer for LSP features such as Inlay Hints or code completions.project manages files and navigation within the filetree. It is also Zed's side of communication with LSP.workspace handles local state serialization and groups projects together.vim is a thin implementation of Vim workflow over editor.lsp handles communication with external LSP server.language drives editor's understanding of language - from providing a list of symbols to the syntax map.collab is the collaboration server itself, driving the collaboration features such as project sharing.rpc defines messages to be exchanged with collaboration server.theme defines the theme system and provides a default theme.ui is a collection of UI components and common patterns used throughout Zed.cli is the CLI crate which invokes the Zed binary.zed is where all things come together, and the main entry point for Zed.Check our notes for packaging Zed.