# TinyGo in Zed

> Source: <https://blog.oxplot.com/tinygo-in-zed/>
> Published: 2026-08-16 12:55:06+00:00

# TinyGo in Zed

I’ve moved my embedded Go work to
[Zed](https://zed.dev/). It is super
fast, pleasant and increasingly secure by default. For me it beats the shit out
of messy VS Code: fewer layers, less interface debris and no feeling that my
text editor is a browser wearing a tool belt.

Zed is a native Rust application with a purpose-built, GPU-accelerated UI
designed to render at
[120
frames per second](https://zed.dev/blog/videogame). Unfamiliar worktrees also open in
[Restricted Mode](https://zed.dev/docs/worktree-trust), so project settings cannot start language
or MCP servers until I explicitly trust the worktree. Speed without careless
defaults. Rather nice.

## The TinyGo-shaped hole

Zed’s native Go support uses `gopls`

, but TinyGo targets have their
own `GOROOT`

, architecture and build tags. Without those values,
`gopls`

cannot properly understand packages such as
`machine`

or names such as `machine.LED`

.

So I wrote
[ tinygo-zed](https://github.com/oxplot/tinygo-zed) to turn that procedure into one
command. Install it alongside TinyGo, then run it from the project directory:

```
go install github.com/oxplot/tinygo-zed@latest
tinygo-zed init
```

Choose a target when prompted. The utility reads its actual metadata from
TinyGo, writes the corresponding `gopls`

settings and adds custom Zed
tasks for building, testing, size and allocation reports, and flashing. Open
the directory in Zed, click
**Restricted Mode** in the title bar and trust the worktree.
Hover, completion, navigation and diagnostics should now understand the
selected board, as in the screenshot above.

If the board changes, use `tinygo-zed target`

. After upgrading
TinyGo, run `tinygo-zed sync`

. That’s the whole trick: keep Zed’s
native Go tooling and point it at the right reality.
