DEV Community

taku25
taku25

Posted on

Neovim x Unreal Engine: Zero-Config Debugging & A Dedicated Explorer πŸš€

Intro

Here is this week's update on my plugin suite for Unreal Engine development in Neovim.

My stance hasn't changed: "For heavy-duty debugging, full IDEs like Visual Studio or Rider are still king."
However, there are so many times when I just want to check a variable quickly or identify a crash location without leaving my terminal. I wanted to be able to do "light debugging" right inside Neovim.

So, this week, I released a debugging plugin to grant that wish, along with a specialized file explorer dedicated to the Unreal Engine project structure.

  1. UDB.nvim: A zero-config debugger bridge (no launch.json needed!).
  2. UNX.nvim: A lightweight logical file viewer & symbol tree specialized for UE projects.

With these additions, I feel like Neovim has finally become a true "IDE for Unreal Engine."


✨ UDB (Unreal Debugger Bridge)

UDB.nvim is, as the name suggests, a bridge connecting Neovim (nvim-dap) and the Unreal Engine debugging environment.

Its biggest feature is "Almost Zero-Config."
Usually, setting up a debugger requires writing a complex launch.json. UDB automates this by leveraging my other plugins:

  • It uses UEP.nvim to parse the .uproject.
  • It uses UBT.nvim to locate the build configuration and the UnrealEditor binary position.

All you basically need to do is tell UDB which DAP adapter type to use.
(Note: It defaults to codelldb).

Configuration Example

Here is a standard setup using codelldb:

-- Example setup for nvim-dap and codelldb
local dap = require("dap")
dap.adapters.codelldb = {
  type = 'server',
  port = "${port}",
  executable = {
    -- Specify the path installed via Mason or your package manager
    command = vim.fn.stdpath("data") .. "/mason/bin/codelldb.cmd",
    args = {"--port", "${port}"},
    detached = false,
  }
}
Enter fullscreen mode Exit fullscreen mode

If you want to use your own custom DAP adapter, just change the adapter_type in the UDB setup:

require("UDB").setup({
  debugger = {
    adapter_type = "codelldb", -- Default DAP adapter
  },
})
Enter fullscreen mode Exit fullscreen mode

What can it do?

  • Debug Immediately: Just run :UDB run_debug. It identifies the correct binary, attaches the debugger via the DAP adapter, and launches.
  • Flexible Target Switching: Whether you want to "Launch the Editor to debug Blueprints" or "Launch as a Standalone Game," you can select it via a picker using :UDB run_debug!.
  • Seamless Build Integration: If you have [UBT.nvim] and [UEP.nvim] installed, UDB automatically reads your current build config (e.g., DebugGame / Development Editor). It remembers the last configuration built by UBT, so if you run UBT debug! to switch targets, UDB run_debug will immediately launch that exact configuration.

Installation

You need nvim-dap and an adapter like codelldb.

{
  "taku25/UDB.nvim",
  dependencies = { 
      "mfussenegger/nvim-dap", 
      "taku25/UEP.nvim",
      "taku25/UBT.nvim",
      { "taku25/UNL.nvim", lazy=false } 
  },
}
Enter fullscreen mode Exit fullscreen mode

πŸš€ UNX (Unreal Neovim eXplorer): Breaking Free from Physical Folders

Next up is the specialized explorer, UNX.nvim.
Previously, I extended neo-tree.nvim to handle UE projects, but I wanted to see information more specific to UE development and didn't want to force users to install a specific general-purpose filer just for UEP. So, I built this as a completely standalone plugin.

Feature: The "Logical View"

Unlike generic file explorers, UNX visualizes the tree based on the mental model of Unreal Engine C++ development.

  • Logical View: You don't need to dig through deep physical file layers (Source/ProjectName/...). It displays the tree in a logical module structure: "Game", "Plugins", and "Engine".
  • Symbol View: It automatically displays classes, functions, and properties contained in the selected C++ file in the bottom side panel. You can grasp the structure without even opening the header file.
  • Git/VCS Integration: Asynchronously fetches status and highlights modified files with icons.
  • Class Creation (UCM Integration): You can manage C++ classes directly from the tree using simple hotkeys:
    • a: Add Class
    • d: Delete
    • r: Rename
    • A: Make Directory
    • m: Switch Mode

Installation

{
  "taku25/UNX.nvim",
  dependencies = {
    "taku25/UCM.nvim",
    { "taku25/UNL.nvim", lazy = false }
  },
  opts = {},
}
Enter fullscreen mode Exit fullscreen mode

Summary: A Complete Dev Cycle in Neovim

By combining the two plugins introduced today with my existing suite, the workflow is now effectively complete entirely within Neovim:

  1. UEP (Project): Parses project information.
  2. UNX (Explorer): Logical view for file management.
  3. UCM (Class Manager): Create and delete C++ classes.
  4. UBT (Build Tool): Executes builds.
  5. UDB (Debugger): Runs debugging and verification.
  6. ULG (Log): Checks logs.

You can handle these easily by using the all-in-one suite UnrealDev.nvim.

Looking back to when I first started making UBT.nvim, it feels like I've come a long way. If you are interested in developing Unreal Engine projects with Neovim, please give it a try!

GitHub Repositories

Top comments (0)