📈 GH Trending Explorer 🎲 Surprise me

← all repos

Shougo / goda.vim

git clone https://github.com/Shougo/goda.vim.git

Go based dark powered framework for Vim/Neovim

—
stars, 24h
+28
stars, 7 days · #1,397
+28
stars, 30 days · #9,287
28
★ total · +28% this week
0
forks · 0 open issues

Star history starts 2026-10-20; the chart appears after the second daily snapshot.

LanguageGo
LicenseMIT
Created2026-10-13 (7d ago)
Last pushtoday
Watchers0
OwnerUser

Links

README excerpt
# goda.vim
**Go based dark powered framework for Vim/Neovim.** (Pronounced "Godda".)
A successor in spirit to denops.vim
that does not depend on Deno. A plugin is a Go program; the editor starts it and
talks to it. The same binary serves **Vim and Neovim**.
goda.vim itself knows nothing about completion or any other feature: it moves
messages between the editor and plugins, and lets a plugin call back into the
editor. Plugins built on it, such as goda-cmp.vim,
define their own extension kinds (sources, filters, UIs) as plain Go packages
that are linked into the binary at build time.
> Status: early. The API may still change; see Status.
## Naming
| what | example | notes |
|---|---|---|
| framework | `goda.vim` | this repository |
| a Vim plugin built on goda | `goda-cmp.vim` | has `.vim` |
| an extension | `goda-cmp-source-file` | a Go module, no `.vim` |
Do not name a plugin binary `goda`: `go install github.com/loov/goda@latest`
(an unrelated tool) installs that name.
## Try it
This builds and calls a plugin of ten lines. You need Go 1.26 or newer and
Vim 9.1 or newer (with `+job` and `+channel`) or Neovim.
 [code] 
Save this as `main.go`:
 [code] 
Build it:
 [code] 
(While the code is on the `wip` branch, use `go get github.com/Shougo/goda.vim@wip`.)
Then, in Vim or Neovim (adjust the paths):
 [code] 
If something goes wrong, `echo goda#log()` shows what the binary wrote to
stderr.
Without an editor, the development transport answers one JSON request per
line. Calls into the editor (like `getcwd` above) fail in this mode, but
everything else can be exercised:
 [code] 
## Documentation
`:help goda` (doc/goda.txt): the Vim script functions and
variables, writing a plugin (the `sdk` interfaces, `sdk.Closer`), and versions
and the handshake.
## How it works
 [code] 
Extensions are not loaded at run time; they are Go packages imported by the
plugin's own `main`, so versions are pinned by `go.mod` and the compiler checks
the whole program. Building needs Go; running does not. Pure Go, no cgo.
| directory | |
|---|---|
| `autoload/goda.vim` | the Vim script side, for both editors |
| `sdk/` | the contract plugins are written against |
| `host/` | `host.Main` and the transports `nvim/`, `vim/`, `jsonl/` |
| `internal/` | the msgpack codec and JSON helpers |
## Tests
 [code] 
The Vim transport is tested against a real Vim; the Neovim transport only
against a fake editor written from the msgpack-rpc specification.
## AI-assisted, not AI-dependent
AI is used as a tool to speed up development, but goda.vim and the plugins in
this project are not built on the assumption that AI exists.
## Status
Checked: `go vet`, `go test` (and `-race`), the Vim transport and the Vim
script against Vim 9.1 on Linux, several binaries at once, the handshake.
Not checked by the automated tests: Neovim against a real Neovim (a fake editor
only), Vim 9.2, Windows.
## License
MIT, see LICENSE.