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
- GitHub: github.com/Shougo/goda.vim
- Releases · Issues · Hacker News mentions
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.