Code at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.
Find a file
2022-07-15 17:15:32 -07:00
.github Use rustup directly on CI instead of actions-rs/toolchain 2022-07-13 10:37:43 -07:00
.vscode Hit the local server when debugging 2021-08-24 17:11:40 -06:00
assets Merge branch 'main' into keybindings-grind 2022-07-15 11:24:16 -07:00
crates Allow the web client to specify activity bucket durations 2022-07-15 16:46:44 -07:00
docs Start work on RpcClient 2021-06-11 14:47:13 -07:00
plugins Fix association of 'json' lsp language id with JSON language 2022-07-12 15:43:59 -07:00
script Merge pull request #1252 from zed-industries/plugin 2022-07-12 11:04:20 +02:00
styles Merge pull request #1356 from zed-industries/differentiate-same-tab-titles 2022-07-15 08:30:22 +02:00
.dockerignore Include contents of the zed-server repo 2021-07-12 14:14:39 -06:00
.gitignore Ignore dump.rdb files 2022-07-15 12:09:37 +02:00
Cargo.lock Added some simple tests for the new keybindings 2022-07-15 10:36:37 -07:00
Cargo.toml Merge pull request #1252 from zed-industries/plugin 2022-07-12 11:04:20 +02:00
Dockerfile Update rust in collab Dockerfiles 2022-07-15 17:15:32 -07:00
Dockerfile.migrator Update rust in collab Dockerfiles 2022-07-15 17:15:32 -07:00
Procfile Add instructions to install redis and include it in Procfile 2022-07-15 10:41:07 +02:00
README.md Add instructions to install redis and include it in Procfile 2022-07-15 10:41:07 +02:00

Zed

CI

Welcome to Zed, a lightning-fast, collaborative code editor that makes your dreams come true.

Development tips

Testing against locally-running servers

Make sure you have zed.dev cloned as a sibling to this repo.

cd ..
git clone https://github.com/zed-industries/zed.dev

Make sure your local database is created, migrated, and seeded with initial data. Install Postgres, then from the zed repository root, run:

script/sqlx database create
script/sqlx migrate run
script/seed-db

Install Redis:

brew install redis

Run the web frontend and the collaboration server.

brew install foreman
foreman start

If you want to run Zed pointed at the local servers, you can run:

script/zed_with_local_servers
# or...
script/zed_with_local_servers --release

Dump element JSON

If you trigger cmd-alt-i, Zed will copy a JSON representation of the current window contents to the clipboard. You can paste this in a tool like DJSON to navigate the state of on-screen elements in a structured way.

Wasm Plugins

Zed has a Wasm-based plugin runtime which it currently uses to embed plugins. To compile Zed, you'll need to have the wasm32-wasi toolchain installed on your system. To install this toolchain, run:

rustup target add wasm32-wasi

Plugins can be found in the plugins folder in the root. For more information about how plugins work, check the Plugin Guide in crates/plugin_runtime/README.md.

Roadmap

We will organize our efforts around the following major milestones. We'll create tracking issues for each of these milestones to detail the individual tasks that comprise them.

Minimal text editor

Tracking issue

Ship a minimal text editor to investors and other insiders. It should be extremely fast and stable, but all it can do is open, edit, and save text files, making it potentially useful for basic editing but not for real coding.

Establish basic infrastructure for building the app bundle and uploading an artifact. Once this is released, we should regularly distribute updates as features land.

Collaborative code editor for internal use

Tracking issue

Turn the minimal text editor into a collaborative code editor. This will include the minimal features that the Zed team needs to collaborate in Zed to build Zed without net loss in developer productivity. This includes productivity-critical features such as:

  • Syntax highlighting and syntax-aware editing and navigation
  • The ability to see and edit non-local working copies of a repository
  • Language server support for Rust code navigation, refactoring, diagnostics, etc.
  • Project browsing and project-wide search and replace

We want to tackle collaboration fairly early so that the rest of the design of the product can flow around that assumption. We could probably produce a single-player code editor more quickly, but at the risk of having collaboration feel more "bolted on" when we eventually add it.

Private alpha for Rust teams on macOS

The "minimal" milestones were about getting Zed to a point where the Zed team could use Zed productively to build Zed. What features are required for someone outside the company to use Zed to productively work on another project that is also written in Rust?

This includes infrastructure like auto-updates, error reporting, and metrics collection. It also includes some amount of polish to make the tool more discoverable for someone that didn't write it, such as a UI for updating settings and key bindings. We may also need to enhance the server to support user authentication and related concerns.

The initial target audience is like us. A small team working in Rust that's potentially interested in collaborating. As the alpha proceeds, we can work with teams of different sizes.

Private beta for Rust teams on macOS

Once we're getting sufficiently positive feedback from our initial alpha users, we widen the audience by letting people share invites. Now may be a good time to get Zed running on the web, so that it's extremely easy for a Zed user to share a link and be collaborating in seconds. Once someone is using Zed on the Web, we'll let them register for the private beta and download the native binary if they're on macOS.

Expand to other languages

Depending on how the Rust beta is going, focus hard on dominating another niche language such as Elixr or getting a foothold within a niche of a larger language, such as React/Typescript. Alternatively, go wide at this point and add decent support several widely-used languages such as Python, Ruby, Typescript, etc. This would entail taking 1-2 weeks per language and making sure we ship a solid experience based on a publicly-available language server. Each language has slightly different development practices, so we need to make sure Zed's UX meshes well with those practices.

Future directions

Each of these sections could probably broken into multiple milestones, but this part of the roadmap is too far in the future to go into that level of detail at this point.

Expand to other platforms

Support Linux and Windows. We'll probably want to hire at least one person that prefers to work on each respective platform and have them spearhead the effort to port Zed to that platform. Once they've done so, they can join the general development effort while ensuring the user experience stays good on that platform.

Expand on collaboration

To start with, we'll focus on synchronous collaboration because that's where we're most differentiated, but there's no reason we have to limit ourselves to that. How can our tool facilitate collaboration generally, whether it's sync or async? What would it take for a team to go 100% Zed and collaborate fully within the tool? If we haven't added it already, basic Git support would be nice.