godotdev.nvim is a batteries-included Neovim plugin for Godot 4.x game development. It allows you to use Neovim as a fully featured external editor for Godot, with minimal setup.
This plugin provides:
- LSP support for GDScript and Godot shaders (
.gdshader
files) - Debugging via
nvim-dap
for GDScript - Treesitter syntax highlighting for Godot shader files
- Automatic formatting of
.gd
files usinggdformat
- Optional C# support including LSP, debugging, and tooling
- Built-in health checks to verify environment, dependencies, and editor integration
While it is possible to configure Neovim manually for Godot development, this plugin simplifies setup and ensures a consistent, cross-platform workflow. It automatically configures LSP, debugging, keymaps, formatting, and environment checks, so you can focus on writing game code rather than troubleshooting editor setup.
godotdev.nvim provides a complete Neovim environment for Godot 4.x development, with minimal setup. Key features include:
- Full GDScript language support (Go to definition, references, hover, rename, code actions, etc.)
.gdshader
syntax highlighting and language features via Treesitter- Optional C# LSP support (
csharp-ls
or OmniSharp) for Godot projects with C# scripts
- Debug GDScript directly from Neovim using
nvim-dap
- Keymaps for standard debugging actions:
- Continue/Start:
F5
- Step over:
F10
- Step into:
F11
- Step out:
F12
- Toggle breakpoints:
<leader>db
/<leader>dB
- Continue/Start:
- Optional C# debugging via
netcoredbg
- Automatic
.gd
file formatting usinggdtoolkit
- Reloads buffer after formatting for immediate feedback
- Recommended
.editorconfig
included for consistent indentation (4 spaces per indent)
:checkhealth godotdev
validates:- Required dependencies:
nvim-lspconfig
,nvim-dap
,nvim-dap-ui
,nvim-treesitter
- Godot editor LSP and debug servers
- Optional C# tooling:
dotnet
,csharp-ls
/OmniSharp,netcoredbg
- Formatter:
gdformat
(with installation instructions)
- Required dependencies:
- Detects common issues like mixed indentation in GDScript/C# files
- Commands to start or reconnect to Godot’s editor LSP:
:GodotStartEditorServer
:GodotReconnectLSP
- Automatic LSP attachment for Godot filetypes (
.gd
,.gdshader
,.gdresource
, optional.cs
) - Works cross-platform (macOS, Linux, Windows) with TCP or named pipes
- LSP:
gd
,gD
,gr
,K
,<leader>rn
,<leader>ca
,<leader>f
, etc. - DAP:
F5
,F10
,F11
,F12
,<leader>db
,<leader>dB
- DAP UI:
<leader>du
(toggle),<leader>dr
(REPL)
- Enable by setting
csharp = true
inrequire("godotdev").setup()
- Health checks and DAP integration included
- Supports cross-platform debugging and LSP integration
- Neovim 0.11+
- Godot 4.x+ with TCP LSP enabled
nvim-lspconfig
nvim-dap
andnvim-dap-ui
for debuggingnvim-treesitter
- Windows users must have
ncat
in PATH - Optional C# support requires:
- .NET SDK (dotnet)
- C# LSP server (csharp-ls recommended or omnisharp)
- netcoredbg debugger
{
'Mathijs-Bakker/godotdev.nvim',
dependencies = { 'nvim-lspconfig', 'nvim-dap', 'nvim-dap-ui', 'nvim-treesitter' },
}
- Open your Godot project in Neovim
- Start Godot editor with TCP LSP enabled (Editor Settings → Network → Enable TCP LSP server)
- Open a
.gd
or.gdshader
file - LSP will automatically attach
- Use
<leader>rn
to rename,gd
to go to definition,gr
for references, etc. - Start debugging with DAP (Launch scene configuration)
- Optional: Enable C# support by setting
csharp = true
in the plugin setup - Run
:checkhealth godotdev
at any time to verify plugin, LSP, debug server, and C# dependencies
require("godotdev").setup({
editor_host = "127.0.0.1", -- Godot editor host
editor_port = 6005, -- Godot LSP port
debug_port = 6006, -- Godot debugger port
csharp = true, -- Enable C# Installation Support
autostart_editor_server = true, -- Enable auto start Nvim server
})
Below are the recommended settings for configuring the Godot editor for optimal integration with Neovim as your external editor. To access these settings, make sure that the Advanced Settings switch is enabled at the top of the Editor Settings dialog.
-
Editor Settings > Text Editor > Behavior > Auto Reload Scripts on External Change
-
Editor Settings > Interface > Editor > Save on Focus Loss
-
Editor Settings > Interface > Editor > Import Resources When Unfocused
When you click on a gdscript in Godot's FileSystem dock it doesn't open automatically in Neovim. A workaround is to to create a small script which launches the file in Neovim.
Complete instructions here
- Set Neovim to listen on a TCP port
--listen works with host:port on Windows.
nvim --listen 127.0.0.1:6666
- Tell Godot to connect to that port
In Godot, configure your external editor or plugin to connect to
127.0.0.1:6666
. Make sure the TCP port you choose is free and consistent between Neovim and Godot.
You can manually start the Neovim editor server used by Godot:
:GodotStartEditorServer
Or automatically on plugin setup:
require("godotdev").setup({
autostart_editor_server = true,
})
This ensures Godot can communicate with Neovim as an external editor.
If the LSP disconnects or you opened a script before Neovim, run:
:GodotReconnectLSP
Reconnects all Godot buffers to the LSP.
gd
→ Go to definitiongD
→ Go to declarationgy
→ Type definitiongi
→ Go to implementationgr
→ List referencesK
→ Hover<C-k>
→ Signature help<leader>rn
→ Rename symbol<leader>ca
→ Code action<leader>f
→ Format buffergl
→ Show diagnostics[d
/]d
→ Previous/next diagnostic
F5
-> Continue/StartF10
-> Step overF11
-> Step intoF12
-> Step out<leader>db
-> Toggle Breakpoint<leader>dB
-> Conditional breakpoint
<leader>du
-> , Toggle UI<leader>dr
-> , Open REPL
- Enable by setting
csharp = true
inrequire("godotdev").setup()
- Health checks via
:checkhealth godotdev
will verify:- .NET SDK (
dotnet
) - C# LSP server (
csharp-ls
oromnisharp
) - Debugger (
netcoredbg
)
- .NET SDK (
Godot expects spaces, 4 per indent (for both GDScript and C#).
This plugin automatically sets buffer options for .gd
files.
Additionally, .gd
files are autoformatted on save with gdtoolkit
:
:w
Make sure gdformat
is installed and in your PATH. If not, you will see a warning notification.
For more info on indentation: :help godotdev-indent