DEV Community

taku25
taku25

Posted on

UnrealDev.nvim Update (Apr 21 – May 6, 2026) + New Plugin: vscode-workspace.nvim

Introduction

Here's my bi-weekly update summary for the UnrealDev.nvim plugin suite.
This round covers performance improvements, new features, bug fixes, and the introduction of a brand-new general-purpose plugin — vscode-workspace.nvim — born from the ideas behind UnrealDev.nvim.

All plugins are available on GitHub:


🦀 UNL.nvim — Core Engine Improvements

VCS Diff-Based Incremental Refresh

This is one of the biggest improvements this cycle. Previously, :UNL refresh rescanned the entire target directory. Now it uses Git / Perforce diff information to reindex only the files that have changed.

Even in projects with tens of thousands of files, if you've only modified a few dozen, the refresh completes in seconds.

Perforce / SVN Provider Support

Added Perforce and SVN providers to the VCS history API.
All operations via UNL.vcs — including changed file retrieval and history display — now work with VCS backends beyond Git.

Completion Engine Enhancements

The custom type inference engine (independent of clangd) has been further strengthened:

// Type inference for for-range loop variables
for (auto& Item : MyArray) {
    Item.  // ← Correctly inferred as the element type of TArray
}

// Smart pointer .Get() inference
TSharedPtr<UMyClass> Ptr;
Ptr.Get()->  // ← UMyClass members are suggested

// Class-scoped using aliases
class UMyClass {
    using FMyType = TArray<int32>;
    FMyType  // ← FMyType resolved correctly
};
Enter fullscreen mode Exit fullscreen mode

Also fixed: member extraction for TArray<Class*> UPROPERTY fields, and UPROPERTY/UFUNCTION macro specifier completion bugs.

Other Changes

  • CPU / disk load reduction — optimized Watcher debounce, short-circuit redundant start calls
  • get_classes_async — coroutine-based async class fetch API
  • rescan_assets — manual asset graph rescan command
  • GetFilesInFavoritePaths — server-side RPC for filtering files in favorite paths

🔍 UEP.nvim — Search & Navigation Additions

rename_symbol

:UEP rename_symbol now allows renaming classes and symbols across header and source files in one shot.

find_usage Auto Mode Detection

:UEP find_usage now automatically detects from goto_definition context whether to search for type references or method references — no need to specify the mode manually.

find_includers — Reverse Include Lookup

:UEP find_includers returns a streaming list of all files that #include the current header. Great for understanding reverse dependencies.

copy_path (3 variants)

:UEP copy_absolute_path       " full absolute path
:UEP copy_cwd_relative_path   " relative to cwd
:UEP copy_module_path         " module-relative path
Enter fullscreen mode Exit fullscreen mode

🏗️ UBT.nvim — Better Build Experience

Build Summary Notification

A summary notification is now shown after every build:

✅ Build succeeded in 1m 23s (0 errors, 3 warnings)
Enter fullscreen mode Exit fullscreen mode

Concurrent Build Conflict Dialog

When :UBT build is triggered while a build is already running, the confirmation dialog now displays correctly.

Auto LSP Restart After gen_compile_db

After :UBT gen_compile_db updates compile_commands.json, LSP clients are restarted automatically. No more manual :LspRestart.


📊 ULG.nvim — UBA Build Trace Support

Reading UE5.7 .uba Files in Neovim

Starting with UE5.7, UnrealBuildAccelerator saves build traces in a binary .uba format. ULG.nvim can now parse and display these files via the Rust scanner.

:ULG uba   " display the latest .uba file immediately
:ULG uba!  " open a picker to select a .uba file
Enter fullscreen mode Exit fullscreen mode

Search directories:

  • {project_root}/Engine/Programs/UnrealBuildTool/ (source build / embedded engine)
  • {project_root}/Saved/Logs/
  • {engine_root}/Engine/Programs/UnrealBuildTool/ (separate engine install)
  • %LOCALAPPDATA%\UnrealBuildTool\

Quickfix Integration

:ULG quickfix populates the quickfix list with errors and warnings from log buffers.
Navigate with :cnext / :cprev while fixing issues.

Other Changes

  • Adaptive polling — polling interval auto-adjusts based on file change rate
  • :ULG save — save current log buffer content to a file

🗂️ UNX.nvim — Explorer UX Improvements

Current Buffer Highlight

The currently open file is now highlighted in the tree, so you always know where you are.

Recent Files Section

A "Recent Files" section has been added to the uproject tab.

Key Binding Additions

Key Action
? Show keymap help in a floating window
s / v Open file in horizontal / vertical split
D Show commit diff
Space Multi-select (supports favorite folder move)

Server-Side Favorites Filtering

Favorites file listing is now handled by the Rust scanner server, keeping the UI fast even with large file counts.


✏️ UCM.nvim — Async Parent Class Picker

The parent class picker in :UCM new <Name> <Parent> is now powered by coroutine-based async processing.
No more UI freezes on large projects.


🌿 tree-sitter-verse — Parser Improvements

Development continues on the Verse language parser (used in UE / UEFN):

  • _callable_expression refactor
  • Improved indent detection accuracy (65 tests passing)
  • Better highlight coverage for comments, attributes, and named nodes

The plan is to eventually integrate this into unl-scanner to provide completion, go-to-definition, and diagnostics for Verse code.


🆕 New Plugin: vscode-workspace.nvim

👉 taku25/vscode-workspace.nvim

vscode-wowrkspace

A new general-purpose workspace management plugin for Neovim — born from the ideas behind UNX.nvim, but with no dependency on Unreal Engine.

It brings VS Code's .code-workspace concept to Neovim.

Features

Multi-folder workspace explorer
Combine multiple directories into a single explorer view.

Favorites
Nested folder structure, custom icons, and persistent storage across restarts.

Recent Files
Quickly reopen recent files with :CW recent.

Multi-select + Copy / Cut / Paste
Select multiple files with Space, then use y / x / p to copy, cut, or paste.

Preview Window
Preview file contents before opening. Automatically placed on whichever side has more space.

? Keymap Help
Press ? to open a floating window showing all active keymaps, dynamically generated from your config.

Picker abstraction
Built-in support for Telescope, fzf-lua, and snacks.

Installation (lazy.nvim)

{
  "taku25/vscode-workspace.nvim",
  config = function()
    require("vscode-workspace").setup({})
  end,
}
Enter fullscreen mode Exit fullscreen mode

Closing Thoughts

UnrealDev.nvim continues to grow in a pretty niche space — UE development in Neovim. The VCS diff-based refresh and UBA build trace support added this cycle directly improve the daily development loop.

And if you're not an Unreal developer, vscode-workspace.nvim works for any project — give it a try!

Feedback and PRs are always welcome 🙌

Top comments (0)