DEV Community

taku25
taku25

Posted on

Making Neovim a Lightweight Unreal Engine IDE: Implementing Blazing Fast Completion without LSP

Hi everyone! I’m the creator of the UnrealDev.nvim suite, a project dedicated to turning Neovim into the ultimate IDE for Unreal Engine (UE) development.

After migrating our core logic to the Rust-based "unl-server", I've shifted focus to a major milestone: Improving the built-in completion engine.

🛠 The "Why": Moving Beyond LSP

For a long time, I relied on LSPs like clangd. However, UE development—especially on Windows—poses unique challenges:

  • LSP Overhead: Waiting for indexers and compilation in massive UE projects can be frustratingly slow.
  • The "Clang Database" Headache: Generating and maintaining .compile_commands.json or .rsp files often conflicts with standard UBT (Unreal Build Tool) workflows.

I love Neovim for its speed. It felt wrong that "heavy" IDEs like Rider were sometimes more responsive than my Neovim setup. So, I decided to build a database-driven completion engine that doesn't rely on a full LSP stack.

🚀 Performance Showcase

Take a look at the custom completion in action:

complete

This is powered entirely by unl-server and our custom DB. It currently supports:

  • Standard variable declarations.
  • auto keyword type resolution.
  • UE-specific templates like TObjectPtr<T>.
  • *Return values of functions (e.g., Getters/Setters) — *

⚙️ How it works

When completion is triggered, the current buffer and cursor position are sent to unl-server. The server infers the class context and returns candidates via MessagePack-RPC.

I’m currently using taku25/blink-cmp-unreal, but since the core logic resides on the server, it can be adapted to other completion engines easily.

❤️ Growing Community

I’m thrilled to see the community growing! Huge thanks to notfound4 for the amazing contributions and PRs lately.

Your stars and contributions keep this project moving forward. Let’s make Neovim the best place to build Unreal Engine games!

Top comments (0)