Zed Improved. Aiming to improve upon Zed and make a truly delightful code editor.
https://zed.dev
![]() There is a drawback to how we currently write our migrations: For example: 1. Suppose we change one of our actions from a string to an array and rename it, then roll out the preview build: Before: `"ctrl-x": "editor::GoToPrevHunk"` Latest: `"ctrl-x": ["editor::GoToPreviousHunk", { "center_cursor": true }]` To handle this, we wrote migration `A` to convert the string to an array. 2. Now, suppose we decide to change it back to a string: - User who hasn't migrated yet on Preview: `"ctrl-x": "editor::GoToPrevHunk"` - User who has migrated on Preview: `"ctrl-x": ["editor::GoToPreviousHunk", { "center_cursor": true }]` - Latest: `"ctrl-x": "editor::GoToPreviousHunk"` To handle this, we would need to remove migration `A` and add two more migrations: - **Migration B**: `"ctrl-x": "editor::GoToPrevHunk"` -> `"ctrl-x": "editor::GoToPreviousHunk"` - **Migration C**: `"ctrl-x": ["editor::GoToPreviousHunk", { "center_cursor": true }]` -> `"ctrl-x": "editor::GoToPreviousHunk"` Nice. But over time, this keeps increasing, making it impossible to track outdated versions and handle all cases. Missing a case means users stuck on `"ctrl-x": "editor::GoToPrevHunk"` will remain there and won't be automatically migrated to the latest state. --- To fix this, we introduce versioned migrations. Instead of removing migration `A`, we simply write a new migration that takes the user to the latest version—i.e., in this case, migration `C`. - A user who hasn't migrated before will go through both migrations `A` and `C` in order. - A user who has already migrated will only go through `C`, since `A` wouldn't change anything for them. With incremental migrations, we only need to write migrations on top of the latest state (big win!), as know internally they all would be on latest state. You *must not* modify previous migrations. Always create new ones instead. This also serves as base for only prompting user to migrate, when feature reaches stable. That way, preview and stable keymap and settings are in sync. cc: @mgsloan @ConradIrwin @probably-neb Release Notes: - N/A |
||
---|---|---|
.cargo | ||
.cloudflare | ||
.config | ||
.github | ||
.zed | ||
assets | ||
crates | ||
docs | ||
extensions | ||
legal | ||
nix | ||
script | ||
tooling/xtask | ||
.git-blame-ignore-revs | ||
.gitattributes | ||
.gitignore | ||
.mailmap | ||
Cargo.lock | ||
Cargo.toml | ||
clippy.toml | ||
CODE_OF_CONDUCT.md | ||
compose.yml | ||
CONTRIBUTING.md | ||
Cross.toml | ||
debug.plist | ||
default.nix | ||
docker-compose.sql | ||
Dockerfile-collab | ||
Dockerfile-collab.dockerignore | ||
Dockerfile-cross | ||
Dockerfile-cross.dockerignore | ||
Dockerfile-distros | ||
Dockerfile-distros.dockerignore | ||
flake.lock | ||
flake.nix | ||
LICENSE-AGPL | ||
LICENSE-APACHE | ||
LICENSE-GPL | ||
livekit.yaml | ||
Procfile | ||
Procfile.postgrest | ||
README.md | ||
renovate.json | ||
rust-toolchain.toml | ||
shell.nix | ||
typos.toml |
Zed
Welcome to Zed, a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Installation
On macOS and Linux you can download Zed directly or install Zed via your local package manager.
Other platforms are not yet available:
- Windows (tracking issue)
- Web (tracking issue)
Developing Zed
- Building Zed for macOS
- Building Zed for Linux
- Building Zed for Windows
- Running Collaboration Locally
Contributing
See CONTRIBUTING.md for ways you can contribute to Zed.
Also... we're hiring! Check out our jobs page for open roles.
Licensing
License information for third party dependencies must be correctly provided for CI to pass.
We use cargo-about
to automatically comply with open source licenses. If CI is failing, check the following:
- Is it showing a
no license specified
error for a crate you've created? If so, addpublish = false
under[package]
in your crate's Cargo.toml. - Is the error
failed to satisfy license requirements
for a dependency? If so, first determine what license the project has and whether this system is sufficient to comply with this license's requirements. If you're unsure, ask a lawyer. Once you've verified that this system is acceptable add the license's SPDX identifier to theaccepted
array inscript/licenses/zed-licenses.toml
. - Is
cargo-about
unable to find the license for a dependency? If so, add a clarification field at the end ofscript/licenses/zed-licenses.toml
, as specified in the cargo-about book.