1# How to Migrate from RustRover to Zed
2
3This guide covers how to set up Zed if you're coming from RustRover, including keybindings, settings, and the differences you should expect as a Rust developer.
4
5## Install Zed
6
7Zed is available on macOS, Windows, and Linux.
8
9For macOS, you can download it from zed.dev/download, or install via Homebrew:
10
11```sh
12brew install --cask zed
13```
14
15For Windows, download the installer from zed.dev/download, or install via winget:
16
17```sh
18winget install Zed.Zed
19```
20
21For most Linux users, the easiest way to install Zed is through our installation script:
22
23```sh
24curl -f https://zed.dev/install.sh | sh
25```
26
27After installation, you can launch Zed from your Applications folder (macOS), Start menu (Windows), or directly from the terminal using:
28`zed .`
29This opens the current directory in Zed.
30
31## Set Up the JetBrains Keymap
32
33If you're coming from RustRover, the fastest way to feel at home is to use the JetBrains keymap. During onboarding, you can select it as your base keymap. If you missed that step, you can change it anytime:
34
351. Open Settings with `Cmd+,` (macOS) or `Ctrl+,` (Linux/Windows)
362. Search for `Base Keymap`
373. Select `JetBrains`
38
39Or add this directly to your `settings.json`:
40
41```json
42{
43 "base_keymap": "JetBrains"
44}
45```
46
47This maps familiar shortcuts like `Shift Shift` for Search Everywhere, `Cmd+O` for Go to Class, and `Cmd+Shift+A` for Find Action.
48
49## Set Up Editor Preferences
50
51You can configure settings manually in the Settings Editor.
52
53To edit your settings:
54
551. `Cmd+,` to open the Settings Editor.
562. Run `zed: open settings` in the Command Palette.
57
58Settings RustRover users typically configure first:
59
60| Zed Setting | What it does |
61| ----------------------- | ------------------------------------------------------------------------------- |
62| `format_on_save` | Auto-format when saving. Set to `"on"` to enable (uses rustfmt by default). |
63| `soft_wrap` | Wrap long lines. Options: `"none"`, `"editor_width"`, `"preferred_line_length"` |
64| `preferred_line_length` | Column width for wrapping and rulers. Rust convention is 100. |
65| `inlay_hints` | Show type hints, parameter names, and chaining hints inline. |
66| `relative_line_numbers` | Useful if you're coming from IdeaVim. |
67
68Zed also supports per-project settings. Create a `.zed/settings.json` file in your project root to override global settings for that project, similar to how you might use `.idea` folders in RustRover.
69
70> **Tip:** If you're joining an existing project, check `format_on_save` before making your first commit. Otherwise you might accidentally reformat an entire file when you only meant to change one line.
71
72## Open or Create a Project
73
74After setup, press `Cmd+Shift+O` (with JetBrains keymap) to open a folder. This becomes your workspace in Zed. Unlike RustRover, there's no project configuration wizard, no toolchain selection dialog, and no Cargo project setup screen.
75
76To start a new project, use Cargo from the terminal:
77
78```sh
79cargo new my_project
80cd my_project
81zed .
82```
83
84Or for a library:
85
86```sh
87cargo new --lib my_library
88```
89
90You can also launch Zed from the terminal inside any existing Cargo project with:
91`zed .`
92
93Once inside a project:
94
95- Use `Cmd+Shift+O` or `Cmd+E` to jump between files quickly (like RustRover's "Recent Files")
96- Use `Cmd+Shift+A` or `Shift Shift` to open the Command Palette (like RustRover's "Search Everywhere")
97- Use `Cmd+O` to search for symbols (like RustRover's "Go to Symbol")
98
99Open buffers appear as tabs across the top. The sidebar shows your file tree and Git status. Toggle it with `Cmd+1` (just like RustRover's Project tool window).
100
101## Differences in Keybindings
102
103If you chose the JetBrains keymap during onboarding, most of your shortcuts should already feel familiar. Here's a quick reference for how Zed compares to RustRover.
104
105### Common Shared Keybindings
106
107| Action | Shortcut |
108| ----------------------------- | ----------------------- |
109| Search Everywhere | `Shift Shift` |
110| Find Action / Command Palette | `Cmd + Shift + A` |
111| Go to File | `Cmd + Shift + O` |
112| Go to Symbol | `Cmd + O` |
113| Recent Files | `Cmd + E` |
114| Go to Definition | `Cmd + B` |
115| Find Usages | `Alt + F7` |
116| Rename Symbol | `Shift + F6` |
117| Reformat Code | `Cmd + Alt + L` |
118| Toggle Project Panel | `Cmd + 1` |
119| Toggle Terminal | `Alt + F12` |
120| Duplicate Line | `Cmd + D` |
121| Delete Line | `Cmd + Backspace` |
122| Move Line Up/Down | `Shift + Alt + Up/Down` |
123| Expand/Shrink Selection | `Alt + Up/Down` |
124| Comment Line | `Cmd + /` |
125| Go Back / Forward | `Cmd + [` / `Cmd + ]` |
126| Toggle Breakpoint | `Ctrl + F8` |
127
128### Different Keybindings (RustRover → Zed)
129
130| Action | RustRover | Zed (JetBrains keymap) |
131| ---------------------- | ----------- | ------------------------ |
132| File Structure | `Cmd + F12` | `Cmd + F12` (outline) |
133| Navigate to Next Error | `F2` | `F2` |
134| Run | `Ctrl + R` | `Ctrl + Alt + R` (tasks) |
135| Debug | `Ctrl + D` | `Alt + Shift + F9` |
136| Stop | `Cmd + F2` | `Ctrl + F2` |
137| Expand Macro | `Alt+Enter` | `Cmd + Shift + M` |
138
139### Unique to Zed
140
141| Action | Shortcut | Notes |
142| ----------------- | -------------------------- | ------------------------------ |
143| Toggle Right Dock | `Cmd + R` | Assistant panel, notifications |
144| Split Panes | `Cmd + K`, then arrow keys | Create splits in any direction |
145
146### How to Customize Keybindings
147
148- Open the Command Palette (`Cmd+Shift+A` or `Shift Shift`)
149- Run `Zed: Open Keymap Editor`
150
151This opens a list of all available bindings. You can override individual shortcuts or remove conflicts.
152
153Zed also supports key sequences (multi-key shortcuts).
154
155## Differences in User Interfaces
156
157### No Indexing
158
159RustRover indexes your project when you first open it to build a model of your codebase. This process runs whenever you open a project or when dependencies change via Cargo.
160
161Zed skips the indexing step. You open a folder and start working right away. Since both editors rely on rust-analyzer for Rust intelligence, the analysis still happens—but in Zed it runs in the background without blocking the UI or showing modal progress dialogs.
162
163**How to adapt:**
164
165- Use `Cmd+O` to search symbols across your crate (rust-analyzer handles this)
166- Jump to files by name with `Cmd+Shift+O`
167- `Cmd+Shift+F` gives you fast text search across the entire project
168- For linting and deeper checks, run `cargo clippy` in the terminal
169
170### rust-analyzer: Shared Foundation, Different Integration
171
172Here's what makes the RustRover-to-Zed transition unique: **both editors use rust-analyzer** for Rust language intelligence. This means the core code analysis—completions, go-to-definition, find references, type inference—is fundamentally the same.
173
174RustRover integrates rust-analyzer into its JetBrains platform, adding a GUI layer, additional refactorings, and its own indexing on top. Zed uses rust-analyzer more directly through the Language Server Protocol (LSP).
175
176What this means for you:
177
178- **Completions** — Same quality, powered by rust-analyzer
179- **Type inference** — Identical, it's the same engine
180- **Go to definition / Find usages** — Works the same way
181- **Macro expansion** — Available in both (use `Cmd+Shift+M` in Zed)
182- **Inlay hints** — Both support type hints, parameter hints, and chaining hints
183
184Where you might notice differences:
185
186- Some refactorings available in RustRover may not have rust-analyzer equivalents
187- RustRover's GUI for configuring rust-analyzer is replaced by JSON configuration in Zed
188- RustRover-specific inspections (beyond Clippy) won't exist in Zed
189
190**How to adapt:**
191
192- Use `Alt+Enter` for available code actions—rust-analyzer provides many
193- Configure rust-analyzer settings in `.zed/settings.json` for project-specific needs
194- Run `cargo clippy` for linting (it integrates with rust-analyzer diagnostics)
195
196### No Project Model
197
198RustRover manages projects through `.idea` folders containing XML configuration files, toolchain assignments, and run configurations. The Cargo tool window provides a visual interface for your project structure, targets, and dependencies.
199
200Zed keeps it simpler: a project is a folder with a `Cargo.toml`. No project wizard, no toolchain dialogs, no visual Cargo management layer.
201
202In practice:
203
204- Run configurations don't carry over. Your `.idea/` setup stays behind—define the commands you need in `tasks.json` instead.
205- Toolchains are managed externally via `rustup`.
206- Dependencies live in `Cargo.toml`. Edit the file directly; rust-analyzer provides completions for crate names and versions.
207
208**How to adapt:**
209
210- Create a `.zed/settings.json` in your project root for project-specific settings
211- Define common commands in `tasks.json` (open via Command Palette: `zed: open tasks`):
212
213```json
214[
215 {
216 "label": "cargo run",
217 "command": "cargo run"
218 },
219 {
220 "label": "cargo build",
221 "command": "cargo build"
222 },
223 {
224 "label": "cargo test",
225 "command": "cargo test"
226 },
227 {
228 "label": "cargo clippy",
229 "command": "cargo clippy"
230 },
231 {
232 "label": "cargo run --release",
233 "command": "cargo run --release"
234 }
235]
236```
237
238- Use `Ctrl+Alt+R` to run tasks quickly
239- Lean on your terminal (`Alt+F12`) for anything tasks don't cover
240
241### No Cargo Integration UI
242
243RustRover's Cargo tool window provides visual access to your project's targets, dependencies, and common Cargo commands. You can run builds, tests, and benchmarks with a click.
244
245Zed doesn't have a Cargo GUI. You work with Cargo through:
246
247- **Terminal** — Run any Cargo command directly
248- **Tasks** — Define shortcuts for common commands
249- **Gutter icons** — Run tests and binaries with clickable icons
250
251**How to adapt:**
252
253- Get comfortable with Cargo CLI commands: `cargo build`, `cargo run`, `cargo test`, `cargo clippy`, `cargo doc`
254- Use tasks for commands you run frequently
255- For dependency management, edit `Cargo.toml` directly (rust-analyzer provides completions for crate names and versions)
256
257### Tool Windows vs. Docks
258
259RustRover organizes auxiliary views into numbered tool windows (Project = 1, Cargo = Alt+1, Terminal = Alt+F12, etc.). Zed uses a similar concept called "docks":
260
261| RustRover Tool Window | Zed Equivalent | Shortcut (JetBrains keymap) |
262| --------------------- | -------------- | --------------------------- |
263| Project (1) | Project Panel | `Cmd + 1` |
264| Git (9 or Cmd+0) | Git Panel | `Cmd + 0` |
265| Terminal (Alt+F12) | Terminal Panel | `Alt + F12` |
266| Structure (7) | Outline Panel | `Cmd + 7` |
267| Problems (6) | Diagnostics | `Cmd + 6` |
268| Debug (5) | Debug Panel | `Cmd + 5` |
269
270Zed has three dock positions: left, bottom, and right. Panels can be moved between docks by dragging or through settings.
271
272Note that there's no dedicated Cargo tool window in Zed. Use the terminal or define tasks for your common Cargo commands.
273
274### Debugging
275
276Both RustRover and Zed offer integrated debugging for Rust, but using different backends:
277
278- RustRover uses its own debugger integration
279- Zed uses **CodeLLDB** (the same debug adapter popular in VS Code)
280
281To debug Rust code in Zed:
282
283- Set breakpoints with `Ctrl+F8`
284- Start debugging with `Alt+Shift+F9` or press `F4` and select a debug target
285- Step through code with `F7` (step into), `F8` (step over), `Shift+F8` (step out)
286- Continue execution with `F9`
287
288Zed can automatically detect debuggable targets in your Cargo project. Press `F4` to see available options.
289
290For more control, create a `.zed/debug.json` file:
291
292```json
293[
294 {
295 "label": "Debug Binary",
296 "adapter": "CodeLLDB",
297 "request": "launch",
298 "program": "${workspaceFolder}/target/debug/my_project"
299 },
300 {
301 "label": "Debug Tests",
302 "adapter": "CodeLLDB",
303 "request": "launch",
304 "cargo": {
305 "args": ["test", "--no-run"],
306 "filter": {
307 "kind": "test"
308 }
309 }
310 },
311 {
312 "label": "Debug with Arguments",
313 "adapter": "CodeLLDB",
314 "request": "launch",
315 "program": "${workspaceFolder}/target/debug/my_project",
316 "args": ["--config", "dev.toml"]
317 }
318]
319```
320
321> **Note:** Some users have reported that RustRover's debugger can have issues with variable inspection and breakpoints in certain scenarios. CodeLLDB in Zed provides a solid alternative, though debugging Rust can be challenging in any editor due to optimizations and macro-generated code.
322
323### Running Tests
324
325RustRover has a dedicated test runner with a visual interface showing pass/fail status for each test. Zed provides test running through:
326
327- **Gutter icons** — Click the play button next to `#[test]` functions or test modules
328- **Tasks** — Define `cargo test` commands in `tasks.json`
329- **Terminal** — Run `cargo test` directly
330
331The test output appears in the terminal panel. For more detailed output, use:
332
333- `cargo test -- --nocapture` to see println! output
334- `cargo test -- --test-threads=1` for sequential test execution
335- `cargo test specific_test_name` to run a single test
336
337### Extensions vs. Plugins
338
339RustRover has a plugin ecosystem, though it's more limited than other JetBrains IDEs since Rust support is built-in.
340
341Zed's extension ecosystem is smaller and more focused:
342
343- Language support and syntax highlighting
344- Themes
345- Slash commands for AI
346- Context servers
347
348Several features that might require plugins in other editors are built into Zed:
349
350- Real-time collaboration with voice chat
351- AI coding assistance
352- Built-in terminal
353- Task runner
354- rust-analyzer integration
355- rustfmt formatting
356
357### What's Not in Zed
358
359To set expectations clearly, here's what RustRover offers that Zed doesn't have:
360
361- **Cargo.toml GUI editor** — Edit the file directly (rust-analyzer helps with completions)
362- **Visual dependency management** — Use `cargo add`, `cargo remove`, or edit `Cargo.toml`
363- **Profiler integration** — Use `cargo flamegraph`, `perf`, or external profiling tools
364- **Database tools** — Use DataGrip, DBeaver, or TablePlus
365- **HTTP Client** — Use tools like `curl`, `httpie`, or Postman
366- **Coverage visualization** — Use `cargo tarpaulin` or `cargo llvm-cov` externally
367
368## A Note on Licensing and Telemetry
369
370If you're moving from RustRover partly due to licensing concerns or telemetry policies, you should know:
371
372- **Zed is open source** (MIT licensed for the editor, AGPL for collaboration services)
373- **Telemetry is optional** and can be disabled during onboarding or in settings
374- **No license tiers**: All features are available to everyone
375
376## Collaboration in Zed vs. RustRover
377
378RustRover offers Code With Me as a separate feature for collaboration. Zed has collaboration built into the core experience.
379
380- Open the Collab Panel in the left dock
381- Create a channel and [invite your collaborators](https://zed.dev/docs/collaboration#inviting-a-collaborator) to join
382- [Share your screen or your codebase](https://zed.dev/docs/collaboration#share-a-project) directly
383
384Once connected, you'll see each other's cursors, selections, and edits in real time. Voice chat is included. There's no need for separate tools or third-party logins.
385
386## Using AI in Zed
387
388If you're used to AI assistants in RustRover (like JetBrains AI Assistant), Zed offers similar capabilities with more flexibility.
389
390### Configuring GitHub Copilot
391
3921. Open Settings with `Cmd+,` (macOS) or `Ctrl+,` (Linux/Windows)
3932. Navigate to **AI → Edit Predictions**
3943. Click **Configure** next to "Configure Providers"
3954. Under **GitHub Copilot**, click **Sign in to GitHub**
396
397Once signed in, just start typing. Zed will offer suggestions inline for you to accept.
398
399### Additional AI Options
400
401To use other AI models in Zed, you have several options:
402
403- Use Zed's hosted models, with higher rate limits. Requires [authentication](https://zed.dev/docs/accounts.html) and subscription to [Zed Pro](https://zed.dev/docs/ai/subscription.html).
404- Bring your own [API keys](https://zed.dev/docs/ai/llm-providers.html), no authentication needed
405- Use [external agents like Claude Code](https://zed.dev/docs/ai/external-agents.html)
406
407## Advanced Config and Productivity Tweaks
408
409Zed exposes advanced settings for power users who want to fine-tune their environment.
410
411Here are a few useful tweaks for Rust developers:
412
413**Format on Save (uses rustfmt by default):**
414
415```json
416"format_on_save": "on"
417```
418
419**Configure inlay hints for Rust:**
420
421```json
422{
423 "inlay_hints": {
424 "enabled": true,
425 "show_type_hints": true,
426 "show_parameter_hints": true,
427 "show_other_hints": true
428 }
429}
430```
431
432**Configure rust-analyzer settings:**
433
434```json
435{
436 "lsp": {
437 "rust-analyzer": {
438 "initialization_options": {
439 "checkOnSave": {
440 "command": "clippy"
441 },
442 "cargo": {
443 "allFeatures": true
444 },
445 "procMacro": {
446 "enable": true
447 }
448 }
449 }
450 }
451}
452```
453
454**Use a separate target directory for rust-analyzer (faster builds):**
455
456```json
457{
458 "lsp": {
459 "rust-analyzer": {
460 "initialization_options": {
461 "rust-analyzer.cargo.targetDir": true
462 }
463 }
464 }
465}
466```
467
468This tells rust-analyzer to use `target/rust-analyzer` instead of `target`, so IDE analysis doesn't conflict with your manual `cargo build` commands.
469
470**Enable direnv support (useful for Rust projects using direnv):**
471
472```json
473"load_direnv": "shell_hook"
474```
475
476**Configure linked projects for workspaces:**
477
478If you work with multiple Cargo projects that aren't in a workspace, you can tell rust-analyzer about them:
479
480```json
481{
482 "lsp": {
483 "rust-analyzer": {
484 "initialization_options": {
485 "linkedProjects": [
486 "./project-a/Cargo.toml",
487 "./project-b/Cargo.toml"
488 ]
489 }
490 }
491 }
492}
493```
494
495## Next Steps
496
497Now that you're set up, here are some resources to help you get the most out of Zed:
498
499- [Configuring Zed](../configuring-zed.md) — Customize settings, themes, and editor behavior
500- [Key Bindings](../key-bindings.md) — Learn how to customize and extend your keymap
501- [Tasks](../tasks.md) — Set up build and run commands for your projects
502- [AI Features](../ai/overview.md) — Explore Zed's AI capabilities beyond code completion
503- [Collaboration](../collaboration/overview.md) — Share your projects and code together in real time
504- [Rust in Zed](../languages/rust.md) — Rust-specific setup and configuration