Published: Aug 28, 2025 by Isaac Johnson
zed now has a preview of AI tools. I last looked at a year ago in Oct 2024 and I managed to get it working in Windows with a mix of scoop and using Nightly.
Here I’ll try their “preview” release but still mostly with Linux. Let’s dig in!
Installation
I can install from releases by just downloading
and running
I then pick my project (folder)
and start writing
However, I’m not thrilled about it not rendering the markdown images (which are there).
Though, vi mode is nice and I’m using that presently.
Let’s try and click that AI icon
Seems we need to configure an LLM provider
I’ll try installing Gemini CLI with the button
Looks like it just routes an NPM install to the shell. This particular host is lacking a few tools so let’s fix that.
with nvm installed and node sed to 20
builder@bosgamerz9:~/Downloads$ nvm install lts/iron
Downloading and installing node v20.19.4...
Downloading https://nodejs.org/dist/v20.19.4/node-v20.19.4-linux-x64.tar.xz...
######################################################################### 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v20.19.4 (npm v10.8.2)
Creating default alias: default -> lts/iron (-> v20.19.4)
builder@bosgamerz9:~/Downloads$ nvm use lts/iron
Now using node v20.19.4 (npm v10.8.2)
Now my install works
I felt a bit silly. I put in the API key for Gemini but it just sat there and I saw no save or anything. It took me a few to realize you just need to hit “enter” to save the value
I have two issues really now. The first is that the AI button still asks me to configure LLM sources. The second is that when I do click “start thread” from the settings page with Gemini CLI, I get a “you should upgrade dialogue” at the top. I don’t need that.
I like how I can see all the model choices
However, I clearly have the file in the context view but Gemini Flash’s response is to ask me to paste the markdown which seems odd
However, using the @
worked just fine
Interestingly enough, after my first usage of Gemini, the AI link in this page now works.
Here I asked for some canned Zed history
which you can see below:
Zed History
Zed is a modern code editor developed by the creators of Atom and Tree-sitter, Nathaniel Smith and Max Brunsfeld. It is written in Rust, designed for unparalleled performance and responsiveness. Initially launched for macOS, Zed has since expanded its availability to Linux (including Windows via WSL), bringing its low-latency editing experience and built-in collaborative features to a wider audience. The project’s core philosophy revolves around creating a fast, efficient, and highly productive developer environment.
continuing…
This works quite well, however, I’m missing my devcontainer support and I do not see anything in extensions
trying devcontainers
I need to set up the dev container CLI
builder@bosgamerz9:~/Downloads$ npm install -g @devcontainers/cli
added 1 package in 854ms
Then create some zed tasks
builder@bosgamerz9:~/Workspaces/jekyll-blog$ mkdir .zed
builder@bosgamerz9:~/Workspaces/jekyll-blog$ vi .zed/tasks.json
builder@bosgamerz9:~/Workspaces/jekyll-blog$ cat .zed/tasks.json
[
{
"label": "DevContainer: Up",
"command": "devcontainer up --workspace-folder ${ZED_WORKTREE_ROOT}",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always"
},
{
"label": "DevContainer: Build",
"command": "devcontainer build --workspace-folder ${ZED_WORKTREE_ROOT}",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always"
},
{
"label": "DevContainer: Exec",
"command": "devcontainer exec --workspace-folder ${ZED_WORKTREE_ROOT} ${1}",
"use_new_terminal": true,
"allow_concurrent_runs": true,
"reveal": "always"
},
{
"label": "DevContainer: Run User Commands",
"command": "devcontainer run-user-commands --workspace-folder ${ZED_WORKTREE_ROOT}",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always"
}
]
hoped it might work out of the box so I did a task spawn (ctrl shift p)
then a build
my first error was about a missing workspace root which was because my “–” turned into hyphens. I fixed that then saw lots of docker related issues. This was because my local user (builder) was added to the docker group, yes, but i never rebooted and for some reason subsequent shells just were not picking that up (tested with docker ps
as builder). Once that was sorted, then my build task started but errored on a brew install step:
I commented out the problematic line and this time it built the container without issue
I can down do a devcontainer up to start the container
but exec fails to ask me for a parameter and run user commands does nothing for me
I had an idea - the one reason I run a dev container is its setup exactly like my build environment and makes it easy to fire up Jekyll in Ruby (at least the version I have).
Let’s just add a block to fire up Jekyll
{
"label": "DevContainer: Jekyll",
"command": "devcontainer exec --workspace-folder ${ZED_WORKTREE_ROOT} bundle exec jekyll serve",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always"
},
Then fire that step off
I tried a lot of steps even including adding an iptables map to access the container running behind the scenes. I simply couldn’t access the Jekyll running
The forwardPorts should have covered this
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/docker-existing-dockerfile
{
"name": "Existing Dockerfile",
"build": {
// Sets the run context to one level up instead of the .devcontainer folder.
"context": "..",
// Update the 'dockerFile' property if you aren't using the standard 'Dockerfile' filename.
"dockerfile": "../Dockerfile"
},
// Features to add to the dev container. More info: https://containers.dev/features.
// "features": {},
// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [],
// Uncomment the next line to run commands after the container is created.
// "postCreateCommand": "cat /etc/os-release",
// Configure tool-specific properties.
// "customizations": {},
// Uncomment to connect as an existing user other than the container default. More info: https://aka.ms/dev-containers-non-root.
// "remoteUser": "devcontainer"
"postCreateCommand": "bundle install",
"forwardPorts": [4000, 35729]
}
it is clearly not picking up the forward ports as we see docker does not expose them
Pivot
Let’s just assume this devcontainer support is not the best.
I really just want to use the container and serve up my blog for local testing
I can fire up docker
$ docker run -d --name localdev -v /home/builder/Workspaces/jekyll-blog:/workspaces/jekyll-blog -p 4000:4000 -w /workspaces/jekyll-blog efe56eca99b4 /bin/bash -c "bundle install && bundle exec jekyll serve"
c6730b7ade042bddf712ed6dcf92fe8c4d5779f762f9f48e771909348b0b9ca8
The above makes a container named “localdev”, exposes port 4000 and mounts my workspace. It then will do the bundle install (which can vary) and launch jekyll
I can follow the progress
$ docker logs localdev --follow
Don't run Bundler as root. Installing your bundle as root will break this
application for all non-root users on this machine.
Fetching gem metadata from https://rubygems.org/..........
Fetching https://github.com/sdogruyol/pathutil.git
Fetching rake 12.3.3
Installing rake 12.3.3
Fetching csv 3.3.5
Fetching mercenary 0.3.6
Fetching webrick 1.9.1
Fetching sass-listen 4.0.0
Installing mercenary 0.3.6
Installing sass-listen 4.0.0
Installing csv 3.3.5
Fetching sass 3.7.4
Installing webrick 1.9.1
Installing sass 3.7.4
Fetching jekyll-sass-converter 1.5.2
Installing jekyll-sass-converter 1.5.2
Fetching jekyll 3.10.0
Installing jekyll 3.10.0
Bundle complete! 9 Gemfile dependencies, 35 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
Post-install message from sass:
Ruby Sass has reached end-of-life and should no longer be used.
* If you use Sass as a command-line tool, we recommend using Dart Sass, the new
primary implementation: https://sass-lang.com/install
* If you use Sass as a plug-in for a Ruby web framework, we recommend using the
sassc gem: https://github.com/sass/sassc-ruby#readme
* For more details, please refer to the Sass blog:
https://sass-lang.com/blog/posts/7828841
Configuration file: /workspaces/jekyll-blog/_config.yml
Source: /workspaces/jekyll-blog
Destination: /workspaces/jekyll-blog/_site
Incremental build: disabled. Enable with --incremental
Generating...
Jekyll Feed: Generating feed for posts
done in 24.985 seconds.
Auto-regeneration: enabled for '/workspaces/jekyll-blog'
LiveReload address: http://127.0.0.1:35729
Server address: http://127.0.0.1:4000/
Server running... press ctrl-c to stop.
However, even that failed me
What has me stumped is that if I go into my container, I can pull the index file without issue
root@c6730b7ade04:/workspaces/jekyll-blog# wget http://localhost:4000/
--2025-08-26 14:26:52-- http://localhost:4000/
Resolving localhost (localhost)... ::1, 127.0.0.1
Connecting to localhost (localhost)|::1|:4000... failed: Connection refused.
Connecting to localhost (localhost)|127.0.0.1|:4000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 28452 (28K) [text/html]
Saving to: 'index.html.1'
index.html.1 100%[===========================================================>] 27.79K --.-KB/s in 0s
2025-08-26 14:26:52 (242 MB/s) - 'index.html.1' saved [28452/28452]
Lastly, I had to rule out local machine. I’m using my side rig for LLM work which runs full desktop Ubuntu and has not been used it to edit the site before.
I installed the latest VS Code with the Debian package, per docs then fired it up.
It served without issue.
When I consider, at least for my use case, that the preview works better in VS Code and I can use the Continue plugin for Gemini Pro, I don’t think I would switch over
There are some things I do really like. I like the native VIM support and the fact that the LLM settings automatically pulled in and listed all the models I have locally in Ollama
Also, even though Gemini CLI is installed and configured, it just goes nowhere to click the button
WSL
I went as far as upgrading my main WSL to Ubuntu 22.04 and still zed just hangs when I try and launch it
If I set the DISPLAY and GPU values, I get a bit farther
As they don’t have a windows binary, this rather rules it out until I switch entirely to Linux.
I tried with “–foreground” to show the errors:
$ WAYLAND_DISPLAY='' ./zed-preview.app/bin/zed --foreground
2025-08-26T13:25:51-05:00 INFO [zed] ========== starting zed version 0.201.4, sha 1d96a7a ==========
2025-08-26T13:25:51-05:00 INFO [gpui::platform::linux::x11::client] x11: compositor present: true, gtk_frame_extents_supported: false
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::x11::client] Using RandR scale factor: 1
2025-08-26T13:25:52-05:00 INFO [zed] Using git binary path: None
2025-08-26T13:25:52-05:00 INFO [crashes] spawning crash handler process
2025-08-26T13:25:52-05:00 INFO [extension_host] extensions updated. loading 1, reloading 0, unloading 0
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::platform] activate is not implemented on Linux, ignoring the call
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: Google AI: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [client] DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: Vercel: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: Anthropic: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: Amazon Bedrock: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: OpenAI: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: OpenRouter: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: Mistral: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: DeepSeek: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 ERROR [language_models] Failed to authenticate provider: xAI: DBus error zbus error I/O error: No such file or directory (os error 2)
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::x11::window] Using Visual { id: 73, colormap: 0, depth: 32 }
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::x11::window] Creating colormap 6291459
2025-08-26T13:25:52-05:00 INFO [gpui::platform::blade::blade_renderer] Initializing Blade pipelines for surface SurfaceInfo { format: Bgra8UnormSrgb, alpha: Ignored }
2025-08-26T13:25:52-05:00 INFO [crashes] connected to crash handler process after 100ms
2025-08-26T13:25:52-05:00 INFO [crashes] crash handler registered
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::x11::window] x11: no compositor present, falling back to server-side window decorations
2025-08-26T13:25:52-05:00 INFO [zed::zed] Using GPU: GpuSpecs { is_software_emulated: true, device_name: "llvmpipe (LLVM 15.0.7, 256 bits)", driver_name: "llvmpipe", driver_info: "Mesa 23.2.1-1ubuntu3.1~22.04.3 (LLVM 15.0.7)" }
2025-08-26T13:25:52-05:00 INFO [gpui::platform::linux::x11::client] Refreshing every 16ms
Gemini CLI
I tried to let Gemini CLI sort it out
However, I stopped it when it looked to start making low level system changes
Zed in Windows with Scoop
I went back to my old post and used scoop to update the nightly build
This says its version 0.156.0 as “nightly”
But we can see the Ubuntu has version “0.201.4” so I’m guessing the windows scoop repo is a bit behind.
I couldn’t even really tell how old that 0.156.0 is as the history only goes back to 0.188.5 on the zed site
\wsl.localhost\Ubuntu\home\builder\Workspaces\jekyll-blog\content\images\2025\08\zed-38.png
(Though from here I would guess October of 2024)
Summary
zed is a cool editor, I’ll admit. There is lots to like. But Visual Studio Code has a rich ecosystem, code server implementation and a robust Open-Source backend that supports all Operating Systems.
The truth is I like one way of working regardless of OS and so I’ve grown to just enjoy VS Code. I like all the options of GCA, Continue, and Copilot. I really like devcontainers and hosted code servers.
So, for me anyhow, this isn’t enough to switch. But for those using Zed, I think these AI additions are nice and overall, a pretty good implementation.