<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: taku25</title>
    <description>The latest articles on DEV Community by taku25 (@taku25).</description>
    <link>https://dev.to/taku25</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3499503%2F5d838b97-000f-4bd8-8075-54e85875de00.jpeg</url>
      <title>DEV Community: taku25</title>
      <link>https://dev.to/taku25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/taku25"/>
    <language>en</language>
    <item>
      <title>UnrealDev Update: Building an Autonomous Unreal IDE in Neovim (April 21, 2026)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Tue, 21 Apr 2026 06:48:22 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdev-update-building-an-autonomous-unreal-ide-in-neovim-april-21-2026-1g0p</link>
      <guid>https://dev.to/taku25/unrealdev-update-building-an-autonomous-unreal-ide-in-neovim-april-21-2026-1g0p</guid>
      <description>&lt;p&gt;Today, we are excited to announce a major update across the entire UnrealDev toolchain (UNX, UNL, UEP, UBT, and ULG).&lt;br&gt;
  This update focuses on three core pillars: Stability, Speed, and Memory Efficiency, pushing the boundaries of what’s&lt;br&gt;
  possible in an IDE-independent Unreal Engine development environment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;UNX: Evolution of "Favorites" (Nested Folders)
The "Favorites" view in the project explorer has received a significant overhaul.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Folder Management: You can now create folders within your Favorites to organize your workspace more effectively.&lt;/li&gt;
&lt;li&gt;Nested Structures: Full support for nested folders allows you to group related files by task, feature, or module.&lt;/li&gt;
&lt;li&gt;Intuitive Navigation:

&lt;ul&gt;
&lt;li&gt;: Create a new folder.&lt;/li&gt;
&lt;li&gt;: Delete a folder or item.&lt;/li&gt;
&lt;li&gt;: Move items (triggers a folder selection picker).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;ul&gt;
&lt;li&gt;Key Benefit: Instantly access critical files even in massive projects with tens of thousands of assets.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Symbols View &amp;amp; UNL Scanner: Access Modifiers &amp;amp; Precise Implementation Jumps
Information density and navigation precision have been greatly improved by enhancing the UNL Scanner.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Access Modifier Visualization: Symbols View now clearly distinguishes between public, protected, and private
 members. Understanding class structures at a glance has never been easier.&lt;/li&gt;
&lt;li&gt;Full .cpp Scanning: We’ve expanded scanning to include .cpp files in addition to headers. This enables the scanner
 to distinguish between "Declarations" and "Implementations," allowing for pinpoint-accurate jumps to function
 definitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;UBT: Flexible Build Control&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implement cancel_build: You can now cancel an active UBT build directly from Neovim. If you start a build by
mistake or spot a bug mid-compile, you can stop it instantly without leaving your editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ULG: Persistent Build Logs&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log Persistence: Build outputs are now managed as persistent files.&lt;/li&gt;
&lt;li&gt;Mid-build Sync: Even if you open the log window halfway through a build, you can now view the entire log from the
very beginning. This is invaluable for auditing long-running build processes or catching errors that happened early
on.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UEP: New depend_files Command&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dependency-Based Navigation: Introducing a new command that extracts only the files dependent on your current
buffer (via includes, etc.) and displays them in a picker.&lt;/li&gt;
&lt;li&gt;Advanced Filtering: Supports the same scope (Game Only/Full) and recursive (deep search) flags as UEP files. It’s
the fastest way to navigate between tightly coupled headers.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;UNL: Enhanced Member Completion (Beyond compile_commands.json)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Include-Aware Completion: The completion logic now traverses the include hierarchy of your current file to
prioritize symbols that are actually accessible.&lt;/li&gt;
&lt;li&gt;Breaking Free from compile_commands.json: For several weeks, we’ve been testing a workflow completely independent
of compile_commands.json. Using only UNL’s proprietary high-speed index, we’ve achieved a seamless coding
experience with complex Unreal C++ type inference and completion that rivals (and often beats) traditional IDEs.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;With this update, Neovim has evolved from a powerful text editor into a fully autonomous IDE for Unreal Engine&lt;br&gt;
  development. &lt;/p&gt;

</description>
      <category>neovim</category>
      <category>game</category>
    </item>
    <item>
      <title>UNL.nvim Update: Shifting from LSP to DB-based Completion &amp; Preparing for UE6/Verse Unreal Engine development in Neovim.</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 06 Apr 2026 08:25:30 +0000</pubDate>
      <link>https://dev.to/taku25/unlnvim-update-shifting-from-lsp-to-db-based-completion-preparing-for-ue6verse-unreal-engine-3lf7</link>
      <guid>https://dev.to/taku25/unlnvim-update-shifting-from-lsp-to-db-based-completion-preparing-for-ue6verse-unreal-engine-3lf7</guid>
      <description>&lt;h2&gt;
  
  
  Intro
&lt;/h2&gt;

&lt;p&gt;I've been a bit quiet lately due to my day job, but I’m excited to share a long-awaited update! This release brings a fundamental architectural shift to the &lt;strong&gt;UNL.nvim&lt;/strong&gt; ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 The Big Change: Moving from LSP to DB-based Completion
&lt;/h2&gt;

&lt;p&gt;To solve performance bottlenecks and remove the strict dependency on &lt;code&gt;compile_commands.json&lt;/code&gt;, I’ve completely migrated the completion engine to a &lt;strong&gt;DB (Database) managed system&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Why?&lt;/strong&gt;: It offers much faster, more flexible completion without being tethered to a static &lt;code&gt;compile_commands.json&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Current Status&lt;/strong&gt;: While there might be some rough edges, it works perfectly for my personal daily development.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqadl46aruoxdb3o0bgve.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqadl46aruoxdb3o0bgve.gif" alt="auto complete from db" width="760" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ New Feature: Module Creation (&lt;code&gt;UDEV create_module&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;This feature was born from a community Pull Request. It significantly streamlines the process of adding new modules to your UE project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Huge thanks to &lt;a href="https://github.com/notfound4" rel="noopener noreferrer"&gt;notfound4&lt;/a&gt; for this amazing contribution!!&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔧 Bug Fixes
&lt;/h2&gt;

&lt;p&gt;Improved stability with several fixes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resolved server-side memory leaks.&lt;/li&gt;
&lt;li&gt;Fixed bugs in the File Watcher.&lt;/li&gt;
&lt;li&gt;Various minor stability improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Looking Ahead: UE6 and Verse Language Support
&lt;/h2&gt;

&lt;p&gt;With the whispers of &lt;strong&gt;Unreal Engine 6&lt;/strong&gt; growing louder, I’ve started working on &lt;a href="https://github.com/taku25/tree-sitter-verse" rel="noopener noreferrer"&gt;tree-sitter-verse&lt;/a&gt;, built from the language specs up.&lt;/p&gt;

&lt;p&gt;The migration to a DB-based system is a strategic move to eventually provide &lt;strong&gt;official Verse language support&lt;/strong&gt;. I’ll be refining the command structure and DB schema while we wait for the dawn of UE6.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>cpp</category>
      <category>verse</category>
    </item>
    <item>
      <title>[Neovim x UE] Optimization via Rust Server &amp; .uasset Binary Parsing (Weekly Update)(2026/02/16)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 16 Feb 2026 13:42:58 +0000</pubDate>
      <link>https://dev.to/taku25/neovim-x-ue-optimization-via-rust-server-uasset-binary-parsing-weekly-update20260216-1688</link>
      <guid>https://dev.to/taku25/neovim-x-ue-optimization-via-rust-server-uasset-binary-parsing-weekly-update20260216-1688</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Here is this week's update!&lt;br&gt;
Unlike previous posts, I don't have flashy screenshots of new UI features to show off today. Instead, this update focuses on significant under-the-hood optimizations and foundational improvements using Unl-server (Rust).&lt;br&gt;
Here are the main changes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Full Migration of Syntax Parsing to the Server
I have moved all syntax parsing logic—previously handled by Neovim (Lua) using Tree-sitter or Regex—entirely to the Unl-server side.

&lt;ul&gt;
&lt;li&gt;Removed Dependencies: This removes the Tree-sitter dependency from the plugin suite (except for syntax highlighting). If you primarily use LSP for syntax highlighting, you no longer need to install treesitter-unreal-cpp.&lt;/li&gt;
&lt;li&gt;Improved Accuracy: Running Tree-sitter on the server side (Rust) allows for faster and more accurate syntax analysis than ever before.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;.uasset Parsing: Moving to Binary Analysis
I have completely overhauled the method for parsing .uasset files, moving from simple string searches (using ripgrep) to direct binary parsing via Rust.

&lt;ul&gt;
&lt;li&gt;Supported Versions: UE 5.3 - 5.7&lt;/li&gt;
&lt;li&gt;Higher Precision: This significantly improves the accuracy of retrieving Children and References. Specifically, UFUNCTION references, which were previously difficult to capture, can now be retrieved reliably.
⚠️ Note:
Currently, this analysis data is not persisted to the database. Therefore, there may be a short wait time after startup while the parsing completes. Please keep this in mind.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Enhanced Picker API Extensibility
I have extended the Picker functionality to allow for more flexibility. You can now easily add custom pickers beyond the defaults provided.
By setting an arbitrary function in the picker model, you can create and integrate your own custom pickers.
For detailed specifications and usage, please refer to the README below:
&lt;a href="https://github.com/taku25/UNL.nvim#-unified-picker-api" rel="noopener noreferrer"&gt;Unified Picker API - UNL.nvim README&lt;/a&gt;
Summary: Performance Improvements
By offloading these heavy tasks to the server (Rust), the CPU load on Neovim itself has decreased, resulting in a much smoother and more comfortable editing environment.
Please update to the latest version and enjoy a lighter, faster Neovim x UE development experience!
&lt;a href="https://github.com/taku25/unrealdev.nvim" rel="noopener noreferrer"&gt;taku25/unrealdev.nvim&lt;/a&gt;
If you like this project, giving the repository a ⭐️ (Star) would mean the world to me (and make me do a little happy dance)!
Happy Neovim x UE life!!&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>Making Neovim a Lightweight Unreal Engine IDE: Implementing Blazing Fast Completion without LSP</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 09 Feb 2026 06:24:21 +0000</pubDate>
      <link>https://dev.to/taku25/making-neovim-a-lightweight-unreal-engine-ide-implementing-blazing-fast-completion-without-lsp-4b5c</link>
      <guid>https://dev.to/taku25/making-neovim-a-lightweight-unreal-engine-ide-implementing-blazing-fast-completion-without-lsp-4b5c</guid>
      <description>&lt;p&gt;Hi everyone! I’m the creator of the &lt;code&gt;UnrealDev.nvim&lt;/code&gt; suite, a project dedicated to turning Neovim into the ultimate IDE for Unreal Engine (UE) development.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  🛠 The "Why": Moving Beyond LSP
&lt;/h3&gt;

&lt;p&gt;For a long time, I relied on LSPs like &lt;code&gt;clangd&lt;/code&gt;. However, UE development—especially on Windows—poses unique challenges:&lt;/p&gt;

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

&lt;p&gt;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 &lt;strong&gt;database-driven completion engine&lt;/strong&gt; that doesn't rely on a full LSP stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 Performance Showcase
&lt;/h3&gt;

&lt;p&gt;Take a look at the custom completion in action:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vg6drv8kuhorde1ccw.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7vg6drv8kuhorde1ccw.gif" alt="complete" width="720" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is powered entirely by &lt;code&gt;unl-server&lt;/code&gt; and our custom DB. It currently supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Standard variable declarations.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;auto&lt;/code&gt; keyword type resolution.&lt;/li&gt;
&lt;li&gt;UE-specific templates like &lt;code&gt;TObjectPtr&amp;lt;T&amp;gt;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Return values of functions (e.g., Getters/Setters) — *&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ⚙️ How it works
&lt;/h3&gt;

&lt;p&gt;When completion is triggered, the current buffer and cursor position are sent to &lt;code&gt;unl-server&lt;/code&gt;. The server infers the class context and returns candidates via &lt;strong&gt;MessagePack-RPC&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I’m currently using &lt;a href="https://github.com/taku25/blink-cmp-unreal" rel="noopener noreferrer"&gt;taku25/blink-cmp-unreal&lt;/a&gt;, but since the core logic resides on the server, it can be adapted to other completion engines easily.&lt;/p&gt;

&lt;h3&gt;
  
  
  ❤️ Growing Community
&lt;/h3&gt;

&lt;p&gt;I’m thrilled to see the community growing! Huge thanks to &lt;a href="https://github.com/notfound4" rel="noopener noreferrer"&gt;notfound4&lt;/a&gt; for the amazing contributions and PRs lately.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;taku25/UnrealDev.nvim&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>gamedev</category>
      <category>rust</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Unrealdev.nvim Update: Migration to Rust Server and MessagePack-RPC for High-Performance UE Development 2026/02/02</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Tue, 03 Feb 2026 01:14:49 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdevnvim-update-migration-to-rust-server-and-messagepack-rpc-for-high-performance-ue-2eo6</link>
      <guid>https://dev.to/taku25/unrealdevnvim-update-migration-to-rust-server-and-messagepack-rpc-for-high-performance-ue-2eo6</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Hello everyone, I’m taku25, the developer of unrealdev.nvim.&lt;br&gt;
After two intense weeks of development, I’m excited to announce the largest architectural overhaul in the history of this project.&lt;br&gt;
I have introduced several breaking changes regarding cache formats in the past, but this update is a complete "heart transplant" for the plugin's core. While I apologize for the disruption, this new foundation is designed for long-term stability—I don't expect any more major architectural shifts for the foreseeable future.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Core: Moving to "unl-server" (Rust)
The biggest change is the migration of all heavy-lifting tasks—including SQLite database management and C++ parsing via tree-sitter—to a dedicated external server written in Rust, called unl-server.
Previously, UEP.nvim handled the DB directly. Now, unl.nvim acts as the primary gateway, retrieving data directly from the Rust server using MessagePack-RPC. By using a binary format instead of plain text, we’ve laid the groundwork for extremely low-latency communication.
unl.nvim, which started as a simple base library, has now truly become the "heart" of the unrealdev.nvim ecosystem.&lt;/li&gt;
&lt;li&gt;Command Changes &amp;amp; Auto-Server Start
With the shift in responsibility, server management has moved from UEP to UNL.

&lt;ul&gt;
&lt;li&gt;Command Migration:&lt;/li&gt;
&lt;li&gt;UEP refresh/start/stop → Deprecated&lt;/li&gt;
&lt;li&gt;UNL refresh/start/stop → New
To improve the developer experience (DX), I’ve implemented an Auto-Server Start feature (auto_server_start, enabled by default). When you launch Neovim or cd into a directory containing a .uproject file, the Rust server will automatically spin up in the background. No more manual setup is required.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Real-time Project Monitoring
The server does more than just fetch data; it now includes a file system watcher. It monitors your project files in real-time, ensuring that the symbol database is always up-to-date as you code. You no longer need to worry about stale indices while navigating your C++ classes.
What's Next?
While core commands have been debugged, I'm aware there are still minor bugs and areas where performance can be further optimized. Starting this week, I will focus on:

&lt;ul&gt;
&lt;li&gt;System Stability and Performance Tuning.&lt;/li&gt;
&lt;li&gt;Developing a Custom Completion Engine that leverages our internal database instead of relying solely on external LSPs.
Thank you for your continued support as we build the ultimate Unreal Engine development environment for Neovim!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>[UnrealDev.nvim] Enhanced IDE Integration &amp; Custom Actions (Weekly Update 2026/01/24)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Sat, 24 Jan 2026 05:24:54 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdevnvim-enhanced-ide-integration-custom-actions-weekly-update-20260124-45pc</link>
      <guid>https://dev.to/taku25/unrealdevnvim-enhanced-ide-integration-custom-actions-weekly-update-20260124-45pc</guid>
      <description>&lt;p&gt;Hello everyone! I am developing a suite of Neovim plugins for Unreal Engine development called &lt;a href="https://www.google.com/search?q=https://github.com/taku25/unrealdev.nvim" rel="noopener noreferrer"&gt;taku25/unrealdev.nvim&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here are the updates for this week! The main focus is on &lt;strong&gt;strengthening bi-directional integration with IDEs&lt;/strong&gt; (like Rider) and enhancing &lt;strong&gt;UNX.nvim&lt;/strong&gt; features.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. UEP.nvim: Enhanced IDE Integration
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Auto-start Neovim Server
&lt;/h3&gt;

&lt;p&gt;I've updated &lt;code&gt;UEP start&lt;/code&gt; to automatically launch the Neovim server.&lt;br&gt;
This allows you to seamlessly &lt;strong&gt;open files in your currently running Neovim instance directly from your IDE&lt;/strong&gt; (Rider, Visual Studio, etc.).&lt;/p&gt;

&lt;p&gt;You can configure the server name in the &lt;code&gt;UEP.nvim&lt;/code&gt; options:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;enable&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"UEP_nvim"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;-- You can change the name here&lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note for Windows Users:&lt;/strong&gt;&lt;br&gt;
On Windows environments, &lt;code&gt;.pipe&lt;/code&gt; is automatically appended to the specified server name. Please keep this in mind when connecting from external tools.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Setup Example: Open in Neovim from JetBrains Rider
&lt;/h3&gt;

&lt;p&gt;By adding an "External Tool" in Rider, you can jump to Neovim via the right-click menu.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Tools&lt;/strong&gt; -&amp;gt; &lt;strong&gt;External Tools&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Add a new tool with the following settings:&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Program&lt;/strong&gt;: &lt;code&gt;nvim.exe&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Arguments&lt;/strong&gt;: &lt;code&gt;--server \\.\pipe\UEP_nvim --remote-send "&amp;lt;C-\&amp;gt;&amp;lt;C-n&amp;gt;:e $FilePath$&amp;lt;CR&amp;gt;:$LineNumber$&amp;lt;CR&amp;gt;zz"&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0498z809zltgata0566.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy0498z809zltgata0566.png" alt="rider setting" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this argument do?&lt;/strong&gt;&lt;br&gt;
It sends a command to Neovim to: "Exit Insert Mode -&amp;gt; Open the file -&amp;gt; Go to the specific line -&amp;gt; Center the screen."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Insert your screenshot of Rider settings here)&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  2. UEP.nvim: Open IDE from Neovim (&lt;code&gt;open_ide&lt;/code&gt;)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvim9t2b6fyk23eev7r16.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvim9t2b6fyk23eev7r16.gif" alt="open ide" width="2172" height="824"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conversely, I added a feature to open the file you are currently editing in Neovim directly in your IDE using &lt;code&gt;UEP open_ide&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This command is fully configurable in your config. It defaults to Rider, but you can easily set it up for Visual Studio or VS Code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;ide&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;-- For Rider (Default)&lt;/span&gt;
  &lt;span class="n"&gt;open_command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"rider --line {line} \"&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;file&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 

  &lt;span class="c1"&gt;-- Example for VS Code&lt;/span&gt;
  &lt;span class="c1"&gt;-- open_command = "code -g {file}:{line}",&lt;/span&gt;

  &lt;span class="c1"&gt;-- Example for Visual Studio (Adjust the path to devenv as needed)&lt;/span&gt;
  &lt;span class="c1"&gt;-- open_command = "devenv /edit {file} /command \"Edit.GoTo {line}\"", &lt;/span&gt;
&lt;span class="p"&gt;},&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. UNX.nvim: Project Tree &amp;amp; Diff Enhancements
&lt;/h2&gt;

&lt;p&gt;I also added some convenient features to &lt;code&gt;UNX.nvim&lt;/code&gt;, which handles the UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Open in IDE from Project Tree
&lt;/h3&gt;

&lt;p&gt;You can now press &lt;code&gt;&amp;lt;C-o&amp;gt;&lt;/code&gt; on a file in the project tree to open it in your configured IDE (using the &lt;code&gt;open_ide&lt;/code&gt; setting mentioned above).&lt;/p&gt;

&lt;h3&gt;
  
  
  Diff View Support
&lt;/h3&gt;

&lt;p&gt;Pressing &lt;code&gt;D&lt;/code&gt; on the project tree now displays the standard Neovim VCS diff. This is great for quickly checking changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Custom User Functions (Keymaps)
&lt;/h3&gt;

&lt;p&gt;If the standard diff is hard to read, or if you want to run specific commands on a file, you can now define custom functions in your keymaps.&lt;/p&gt;

&lt;p&gt;Define them in your &lt;code&gt;config&lt;/code&gt; like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="n"&gt;keymaps&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="n"&gt;custom&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="c1"&gt;-- Key = Function to execute&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;leader&amp;gt;p"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="c1"&gt;-- 'node' contains file info for the current line&lt;/span&gt;
      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Selected file path: "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;
    &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

    &lt;span class="c1"&gt;-- You can also define it as a named action (for future extensions)&lt;/span&gt;
    &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;C-z&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="n"&gt;action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;notify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"Custom action for: "&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="s2"&gt;"unknown"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
      &lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="n"&gt;desc&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"My custom notification"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What's Next?
&lt;/h2&gt;

&lt;p&gt;That’s it for this week's updates.&lt;/p&gt;

&lt;p&gt;For next week and beyond, I plan to work on &lt;strong&gt;expanding the Database (DB) features&lt;/strong&gt; and implementing detailed analysis using &lt;strong&gt;Rust + Tree-sitter&lt;/strong&gt;. My goal is to create a robust completion system that understands the specific structures of Unreal Engine, without relying solely on LSP.&lt;/p&gt;

&lt;p&gt;Although it is still experimental, I have already started introducing a Rust program called &lt;code&gt;scanner&lt;/code&gt; into &lt;strong&gt;UNL.nvim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I will continue to add more features to make Unreal Engine development in Neovim the best experience possible!&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>opensource</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Bringing Neovim Closer to Rider: Auto-Generation &amp; Tree Enhancements (Weekly Update)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Sat, 17 Jan 2026 08:34:26 +0000</pubDate>
      <link>https://dev.to/taku25/bringing-neovim-closer-to-rider-auto-generation-tree-enhancements-weekly-update-1hmn</link>
      <guid>https://dev.to/taku25/bringing-neovim-closer-to-rider-auto-generation-tree-enhancements-weekly-update-1hmn</guid>
      <description>&lt;p&gt;Here are the updates for this week.&lt;br&gt;
Along with fixing some persistent database-related bugs, I've focused on implementing convenient features found in JetBrains Rider—specifically &lt;strong&gt;"Create Definition"&lt;/strong&gt; and &lt;strong&gt;"Create Implementation"&lt;/strong&gt;—into &lt;strong&gt;UCM.nvim&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neovim is getting one step closer to a full IDE experience for Unreal Engine development!&lt;/p&gt;

&lt;h3&gt;
  
  
  🚀 UCM.nvim: Seamless Definitions &amp;amp; Implementations
&lt;/h3&gt;

&lt;p&gt;I’ve automated the boilerplate code writing that usually requires manual switching between header and source files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;UCM create_impl&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
Executing this command on a function definition in a header file automatically inserts the implementation template into the corresponding source (&lt;code&gt;.cpp&lt;/code&gt;) file.&lt;br&gt;
A key feature is that if the function is marked with &lt;code&gt;override&lt;/code&gt;, it automatically generates the &lt;code&gt;Super::Function()&lt;/code&gt; call as well.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv39kpnf6c22pu4wk2zb.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyv39kpnf6c22pu4wk2zb.gif" alt="UCM impl" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;UCM create_decl&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
This performs the reverse of &lt;code&gt;create_impl&lt;/code&gt;. Executing it on a function implementation in the source file adds the definition to the header. It also supports signature updates, such as changes to arguments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d8g7oxuj1w36ozrqg1f.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2d8g7oxuj1w36ozrqg1f.gif" alt="UCM decl" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM add_struct&lt;/code&gt;&lt;/strong&gt;
While classes are typically managed as "one class per file," there are often times when you want to quickly add a struct to a header.
This command provides a wizard where you can simply select a name and parent struct to insert the appropriate &lt;code&gt;USTRUCT&lt;/code&gt; definition right at your cursor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fmebhwmueigyulmazmn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3fmebhwmueigyulmazmn.gif" alt="IUCM add" width="1216" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Refactoring New File Creation&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM new_class&lt;/code&gt;&lt;/strong&gt;: Dedicated command for creating new class files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UCM new_struct&lt;/code&gt;&lt;/strong&gt;: Dedicated command for creating new struct files.&lt;/li&gt;
&lt;li&gt;I refactored the internal logic of &lt;code&gt;UCM new&lt;/code&gt; to properly handle both classes and structs independently.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌲 UNX.nvim: Reducing File Tree Friction
&lt;/h3&gt;

&lt;p&gt;I've improved the usability of the file tree to reduce friction during navigation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tree State Persistence&lt;/strong&gt;
Unreal Engine project hierarchies tend to be very deep. Reopening folders every time I restarted Neovim was tedious, so I added the ability to save and restore the tree's open/close state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UNX focus&lt;/code&gt;&lt;/strong&gt;
I implemented a feature to focus the file tree on the currently edited file.
This is extremely useful when you want to create a new file in the same directory as the one you are currently working on—you can instantly locate your position in the tree.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🔍 UEP.nvim: Enhanced Navigation
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;UEP structs&lt;/code&gt;&lt;/strong&gt;
Implemented a feature to display a list of structs and jump directly to their definitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti3vwir6mkd5gt4ppij7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti3vwir6mkd5gt4ppij7.gif" alt="UEP struct" width="800" height="535"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;That wraps up this week's changes.&lt;br&gt;
With the addition of implementation/definition auto-generation and the struct wizard, I feel that Neovim has reached a level where it can be my &lt;strong&gt;primary battlefield&lt;/strong&gt; for editing code.&lt;/p&gt;

&lt;p&gt;Looking ahead, I'm exploring ways to integrate Neovim with IDEs like Rider.&lt;br&gt;
For example, it would be amazing to instantly open a file hitting a breakpoint in Rider directly in Neovim, or conversely, open the file being edited in Neovim inside Rider. If I can achieve this seamless interaction, I think it will create the ultimate development environment. I'm currently researching the technical feasibility of this workflow.&lt;/p&gt;

</description>
      <category>cpp</category>
      <category>gamedev</category>
      <category>showdev</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Turning Neovim into a UE5 IDE: File Watching &amp; Architecture Shifts (Weekly Update 2026-01-09)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Fri, 09 Jan 2026 04:23:51 +0000</pubDate>
      <link>https://dev.to/taku25/turning-neovim-into-a-ue5-ide-file-watching-architecture-shifts-weekly-update-2026-01-09-30od</link>
      <guid>https://dev.to/taku25/turning-neovim-into-a-ue5-ide-file-watching-architecture-shifts-weekly-update-2026-01-09-30od</guid>
      <description>&lt;p&gt;Happy New Year! 🎉 It's 2026, and I'm kicking off the year with a renewed focus: making Neovim the ultimate IDE for Unreal Engine development.&lt;/p&gt;

&lt;p&gt;Here is this week's progress report. We have some major architectural changes and new features that bring us significantly closer to that "IDE-like" experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Polishing the SQLite Migration 🧹&lt;br&gt;
Following the recent migration to SQLite, I've squashed a number of bugs that popped up. The foundation is now much more stable, ensuring a smoother experience overall.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UNX: Ditching the Cache for a Pure File Tree 🌳&lt;br&gt;
Previously, the file tree implementation was heavily tied to unl-neotree, relying on a cached tree structure. This week, I completely overhauled this.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Change: I moved away from the cache-dependent architecture to a pure file tree approach using a custom structure for UNX.&lt;/p&gt;

&lt;p&gt;The Benefit: We no longer rely on stale data. If you add or remove files externally (e.g., via Windows Explorer), the tree can now handle those changes immediately without waiting for a cache rebuild. It only displays the information strictly necessary for UE development, keeping it lightweight.&lt;/p&gt;

&lt;p&gt;New UNX Features:&lt;/p&gt;

&lt;p&gt;N Key (Create File): You can now create simple files directly in the tree!&lt;/p&gt;

&lt;p&gt;Why this matters: Previously, you could only create classes via wizards. Now, if you have a header file and just want to quickly add the corresponding .cpp source, you can simply hit N.&lt;/p&gt;

&lt;p&gt;R Key (Force Refresh): Added the ability to manually force a tree update/redraw.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;One Step Closer to an IDE: UEP start 🚀
This is the highlight of the week.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My goal is to make Neovim function as a "lightweight IDE" for UE. To achieve this, I implemented UEP start (alias: UDEV start_project), which replaces the old manual UEP refresh workflow.&lt;/p&gt;

&lt;p&gt;How it works: Instead of manually refreshing, you run UEP start. This kicks off a background process that:&lt;/p&gt;

&lt;p&gt;Watches VCS Revisions: Smartly detects git changes.&lt;/p&gt;

&lt;p&gt;Monitors Files with vim.uv: It watches the project folder for any file changes using Neovim's built-in Libuv loop.&lt;/p&gt;

&lt;p&gt;The Result: Changes are detected instantly. The cache updates file-by-file in real-time, meaning commands like UEP files reflect the current state of your project immediately. No more manual toggling!&lt;/p&gt;

&lt;p&gt;Note: If you want to stop the background monitoring, simply run UEP stop (UDEV stop_project).&lt;/p&gt;

&lt;p&gt;That's it for the first update of 2026. I'm excited to keep pushing the boundaries of what Neovim can do for Game Devs this year.&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>game</category>
    </item>
    <item>
      <title>UnrealDev.nvim Update: Switching to SQLite for Blazing Fast Performance</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Mon, 29 Dec 2025 08:54:58 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdevnvim-update-switching-to-sqlite-for-blazing-fast-performance-42jb</link>
      <guid>https://dev.to/taku25/unrealdevnvim-update-switching-to-sqlite-for-blazing-fast-performance-42jb</guid>
      <description>&lt;p&gt;Just in time for the end of the year, I've released a major update for &lt;code&gt;UnrealDev.nvim&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;Previously, &lt;code&gt;UnrealDev.nvim&lt;/code&gt; (and its core, &lt;code&gt;UEP.nvim&lt;/code&gt;) used JSON files to cache project information. However, for large Unreal Engine projects, the file I/O overhead for reading and writing massive JSON files became a noticeable bottleneck.&lt;/p&gt;

&lt;p&gt;To solve this, I have completely migrated the caching backend to &lt;strong&gt;SQLite&lt;/strong&gt;.&lt;br&gt;
This change significantly improves performance, making file navigation and project analysis faster than ever.&lt;/p&gt;
&lt;h3&gt;
  
  
  🔧 Key Changes &amp;amp; Installation
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1. New Dependency: &lt;code&gt;sqlite.lua&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;With this update, the following plugin is now required:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;a href="https://github.com/kkharji/sqlite.lua" rel="noopener noreferrer"&gt;kkharji/sqlite.lua&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;⚠️ Important Note for Windows Users:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;sqlite.lua&lt;/code&gt; requires &lt;code&gt;sqlite3.dll&lt;/code&gt; to function.&lt;br&gt;
If you install SQLite via package managers like &lt;code&gt;winget&lt;/code&gt;, it might only provide the &lt;code&gt;.exe&lt;/code&gt; without the necessary &lt;code&gt;.dll&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Download the Windows binaries (containing the DLL) directly from the &lt;a href="https://www.sqlite.org/download.html" rel="noopener noreferrer"&gt;SQLite Download Page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt; Configure the path in your &lt;code&gt;init.lua&lt;/code&gt;:
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight lua"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Example: Set path to sqlite3.dll&lt;/span&gt;
&lt;span class="n"&gt;vim&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sqlite_clib_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"C:\\Users\\username\\path\\to\\sqlite3.dll"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h4&gt;
  
  
  2. Updated &lt;code&gt;:checkhealth&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;I've updated the health check to verify the SQLite status. If everything is set up correctly, you should see something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;UnrealDev&lt;span class="p"&gt;:&lt;/span&gt;                                                                  ✅

UnrealDev Dependencies &lt;span class="p"&gt;~&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Executable &lt;span class="s1"&gt;'fd'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Found &lt;span class="p"&gt;(&lt;/span&gt;File finder&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Executable &lt;span class="s1"&gt;'rg'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; Found &lt;span class="p"&gt;(&lt;/span&gt;Ripgrep text searcher&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK UNL&lt;span class="p"&gt;.&lt;/span&gt;nvim&lt;span class="p"&gt;:&lt;/span&gt; Installed &lt;span class="p"&gt;(&lt;/span&gt;Core Library &amp;amp; Utilities&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Plugin &lt;span class="s1"&gt;'kkharji/sqlite.lua'&lt;/span&gt; found&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK Path configured&lt;span class="p"&gt;:&lt;/span&gt; C&lt;span class="p"&gt;:&lt;/span&gt;\Users\taku3\AppData\Local\Programs\sqlite\sqlite3&lt;span class="p"&gt;.&lt;/span&gt;dll
&lt;span class="p"&gt;-&lt;/span&gt; ✅ OK SQLite &lt;span class="k"&gt;is&lt;/span&gt; working correctly&lt;span class="p"&gt;!&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;In&lt;span class="p"&gt;-&lt;/span&gt;memory DB test passed&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🚀 Command Unification
&lt;/h3&gt;

&lt;p&gt;To streamline the workflow, several specific commands have been deprecated and merged into the main commands.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Deprecated:&lt;/strong&gt; &lt;code&gt;:UEP config_files&lt;/code&gt;, &lt;code&gt;:UEP program_files&lt;/code&gt;, &lt;code&gt;:UEP config_grep&lt;/code&gt;, &lt;code&gt;:UEP program_grep&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Merged into:&lt;/strong&gt; &lt;code&gt;:UEP files&lt;/code&gt;, &lt;code&gt;:UEP grep&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The command arguments have been updated to support a new &lt;strong&gt;&lt;code&gt;mode&lt;/code&gt;&lt;/strong&gt; parameter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;scope&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;deps_flag&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;grep&lt;/span&gt;  &lt;span class="p"&gt;[&lt;/span&gt;scope&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;mode&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;deps_flag&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now specify the file type using the &lt;code&gt;mode&lt;/code&gt; argument (default is &lt;code&gt;source&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight viml"&gt;&lt;code&gt;&lt;span class="c"&gt;" Find Config (.ini) files in Runtime modules&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; &lt;span class="k"&gt;runtime&lt;/span&gt; config

&lt;span class="c"&gt;" Find source files for Programs (Tools) within the Game project&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; game programs

&lt;span class="c"&gt;" Find Shader (.usf/.ush) files in the Engine&lt;/span&gt;
&lt;span class="p"&gt;:&lt;/span&gt;UEP &lt;span class="k"&gt;files&lt;/span&gt; engine shader
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This allows for flexible filtering by combining scope and mode.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: Commands like &lt;code&gt;:UEP module_files&lt;/code&gt; remain separate to keep the argument logic simple for module-specific actions.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>gamedev</category>
      <category>neovim</category>
    </item>
    <item>
      <title>UnrealDev.nvim Weekly Update: Performance Tuning &amp; The Road to SQLite 🚀(2025/12/19)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Thu, 18 Dec 2025 15:03:54 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdevnvim-weekly-update-performance-tuning-the-road-to-sqlite-20251219-17jl</link>
      <guid>https://dev.to/taku25/unrealdevnvim-weekly-update-performance-tuning-the-road-to-sqlite-20251219-17jl</guid>
      <description>&lt;p&gt;Happy Friday, developers! 👋&lt;/p&gt;

&lt;p&gt;This week has been a bit hectic with my day job, so the changelog is shorter than usual. However, I managed to squeeze in some crucial Quality of Life (QoL) improvements and bug fixes that should make your daily Unreal Engine development in Neovim smoother.&lt;/p&gt;

&lt;p&gt;More importantly, I've finally decided on the direction for the next major optimization phase. Let's dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Performance Improvements
&lt;/h2&gt;

&lt;h3&gt;
  
  
  UNX: Faster Symbols View
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Symbols View&lt;/strong&gt; in UNX (the explorer UI) previously tried to fetch and display the entire parent class inheritance tree by default. While useful, this caused noticeable lag when opening large files in Unreal Engine projects.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Change:&lt;/strong&gt; To prioritize speed, the parent class tree is now &lt;strong&gt;OFF&lt;/strong&gt; by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;New Feature:&lt;/strong&gt; You can toggle the parent class information on demand by pressing &lt;code&gt;p&lt;/code&gt; inside the Symbols View.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Note: This keybinding is configurable via &lt;code&gt;config.keymaps.action_toggle_parents&lt;/code&gt;.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, the view opens instantly, and you only pay the performance cost when you actually need that deep inheritance context.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ New Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  UNX: Quickly Favorite the Current File
&lt;/h3&gt;

&lt;p&gt;I found myself frequently wanting to add the file I'm currently editing to my Favorites list without having to search for it in the tree or picker.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;New Command:&lt;/strong&gt; Added &lt;code&gt;:UNX favorite_current&lt;/code&gt; (and &lt;code&gt;:UDEV favorite_current&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Behavior:&lt;/strong&gt; This command toggles the favorite status of your active buffer instantly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Bug Fixes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;UNX Favorites:&lt;/strong&gt; Fixed a bug where the UI wouldn't refresh immediately after adding a file to favorites. It now updates in real-time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UCM Symbols:&lt;/strong&gt; Fixed an issue where jumping to a selected symbol in the Unreal Class Manager (UCM) wasn't working correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🗺️ Roadmap: The Road to SQLite
&lt;/h2&gt;

&lt;p&gt;This is the part I'm most excited about.&lt;/p&gt;

&lt;p&gt;Unreal Engine projects are massive. Parsing thousands of header files and managing class relationships using text-based caches or large JSON files has its limits regarding startup time and memory usage.&lt;/p&gt;

&lt;p&gt;I have decided to migrate the heavy lifting of caching (files, class definitions, inheritance maps) to &lt;strong&gt;SQLite&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Progress so far:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;I've started implementing the database layer in &lt;strong&gt;UNL.nvim&lt;/strong&gt; (the core library).&lt;/li&gt;
&lt;li&gt;The goal is to have &lt;code&gt;UEP.nvim&lt;/code&gt; connect to a local SQLite database for blazing-fast lookups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once this is implemented, commands like &lt;code&gt;UEP files&lt;/code&gt;, &lt;code&gt;UEP enums&lt;/code&gt;, and generating inheritance trees should become significantly faster and more robust.&lt;/p&gt;




&lt;p&gt;That's it for this week! Although development might slow down slightly due to work, the migration to SQLite is my top priority for the next major update.&lt;/p&gt;

&lt;p&gt;As always, feedback and contributions are welcome!&lt;/p&gt;

&lt;p&gt;Happy coding! 🎮 vim&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;UnrealDev&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>gamede</category>
    </item>
    <item>
      <title>[UnrealDev.nvim] Weekly Update (Dec 12, 2025): UNX Enhancements &amp; New Project Creation</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Fri, 12 Dec 2025 14:00:21 +0000</pubDate>
      <link>https://dev.to/taku25/unrealdevnvim-weekly-update-dec-12-2025-unx-enhancements-new-project-creation-242g</link>
      <guid>https://dev.to/taku25/unrealdevnvim-weekly-update-dec-12-2025-unx-enhancements-new-project-creation-242g</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;This week, I focused mainly on enhancing &lt;code&gt;UNX.nvim&lt;/code&gt;, cleaning up commands, and adding the ability to access features directly via commands without needing to open the UI (Explorer).&lt;/p&gt;

&lt;h3&gt;
  
  
  1. UNX: Features &amp;amp; Improvements
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Pending List View &amp;amp; &lt;code&gt;UNX pending_list&lt;/code&gt; Command
&lt;/h4&gt;

&lt;p&gt;I added a feature to display a list of files currently being edited in your VCS (Version Control System). This is incredibly effective when you want quick access to the files you are currently working on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ve4zgndceh6hxn4covv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ve4zgndceh6hxn4covv.png" alt="pending list" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rhsyqcs6f4fl9jg238h.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1rhsyqcs6f4fl9jg238h.gif" alt="pending list gif" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Unpushed List View &amp;amp; &lt;code&gt;UNX unpushed_list&lt;/code&gt; Command
&lt;/h4&gt;

&lt;p&gt;This feature is currently for environments using Git (since Perforce pushes immediately upon commit).&lt;br&gt;
When you are stacking small commits for a single task, there are times when you want to see "a list of files modified in this session but not yet pushed." This list allows you to quickly access and navigate to those files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx58gd7y3w3jbua1ppr8.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftx58gd7y3w3jbua1ppr8.gif" alt="unpushed List" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Favorites List View &amp;amp; &lt;code&gt;UNX add_favorites&lt;/code&gt; / &lt;code&gt;UNX favorites_list&lt;/code&gt; Commands
&lt;/h4&gt;

&lt;p&gt;I added a bookmarking function for frequently used files and folders.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;To Add:&lt;/strong&gt; Select the target in UNX and press the &lt;code&gt;b&lt;/code&gt; (&lt;strong&gt;b&lt;/strong&gt;ookmark) key, or use the &lt;code&gt;add_favorites&lt;/code&gt; command to select files via a Picker (multiple selections supported).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;To Remove:&lt;/strong&gt; Press the &lt;code&gt;b&lt;/code&gt; key again on the target file within the UNX Favorites tree to remove it from the list.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xu3co7hp1zfxipo9jl2.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xu3co7hp1zfxipo9jl2.gif" alt="favorites" width="1218" height="814"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Folder Action: Files Picker
&lt;/h4&gt;

&lt;p&gt;Pressing the &lt;code&gt;F&lt;/code&gt; key on a folder in the UNX tree now opens a picker that allows you to search and select files contained within that folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. UCM: Symbols Command Added
&lt;/h3&gt;

&lt;p&gt;The "symbols list of the currently opened file," which was previously displayed on UNX, has been made independent as a &lt;code&gt;UCM.nvim&lt;/code&gt; command.&lt;br&gt;
Executing the &lt;code&gt;UCM symbols&lt;/code&gt; command allows you to cross-search symbols from both the Header (.h) and Source (.cpp) files via a picker and jump directly to their definitions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfh72cdrezadftrq2hpn.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfh72cdrezadftrq2hpn.gif" alt="ucm symbos" width="760" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3. UEP: Support for New Project Creation
&lt;/h3&gt;

&lt;p&gt;Previously, the plugins assumed an existing project. Now, the &lt;code&gt;new_project&lt;/code&gt; command enables the creation of new Unreal Engine projects directly from Neovim.&lt;br&gt;
To support this, &lt;code&gt;UNL&lt;/code&gt; (Unreal Launcher)'s &lt;code&gt;find_engine&lt;/code&gt; has been updated internally to search for installed Engine versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. ULG: Tabbed Log View
&lt;/h3&gt;

&lt;p&gt;Previously, &lt;code&gt;unreal log&lt;/code&gt; and &lt;code&gt;build log&lt;/code&gt; were displayed using split buffers. To align with UNX's tab support, ULG logs have also been changed to a tab format.&lt;br&gt;
You can switch the display using the &lt;code&gt;Tab&lt;/code&gt; key within the log window.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn9g7eh7bo3n280kscke.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkn9g7eh7bo3n280kscke.gif" alt="ulg log " width="1218" height="814"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Reflections: Dogfooding in Production
&lt;/h3&gt;

&lt;p&gt;I'm happy to feel that the plugins are reaching a level where they work without issues not only in personal projects but also in massive, real-world work projects.&lt;br&gt;
However, as the project scale increases, I'm starting to feel some performance weight, so I've been thinking a lot about optimization lately.&lt;/p&gt;




&lt;h3&gt;
  
  
  [Tip] For Windows Users using UBT
&lt;/h3&gt;

&lt;p&gt;Here is a note on generating &lt;code&gt;compile_commands.json&lt;/code&gt; using &lt;code&gt;UnrealBuildTool&lt;/code&gt; (UBT) with &lt;code&gt;GenerateClangDatabase&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This command has a quirk where it rewrites &lt;code&gt;.rsp&lt;/code&gt; files that shouldn't need modification. As a result, if you try to run a normal build afterwards, the timestamp update triggers a &lt;strong&gt;Full Rebuild&lt;/strong&gt; (including the Engine), causing massive wait times.&lt;/p&gt;

&lt;p&gt;To avoid this, I recommend specifying the &lt;strong&gt;GameProject's Debug configuration&lt;/strong&gt; when generating &lt;code&gt;compile_commands.json&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You likely use &lt;code&gt;DebugGame&lt;/code&gt; or &lt;code&gt;Development&lt;/code&gt; configurations for actual development (since the &lt;code&gt;Debug&lt;/code&gt; configuration makes the Engine itself too heavy), but specifying the &lt;code&gt;Debug&lt;/code&gt; configuration solely for command definition generation helps prevent accidental full rebuild accidents.&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>gamedev</category>
      <category>unrealengine</category>
    </item>
    <item>
      <title>Neovim Unreal Engine: P4 Support, Macro Wizards, and Context-Aware Docs! 🚀(2025/12/04)</title>
      <dc:creator>taku25</dc:creator>
      <pubDate>Thu, 04 Dec 2025 03:16:07 +0000</pubDate>
      <link>https://dev.to/taku25/neovim-x-unreal-engine-p4-support-macro-wizards-and-context-aware-docs-20251204-8jl</link>
      <guid>https://dev.to/taku25/neovim-x-unreal-engine-p4-support-macro-wizards-and-context-aware-docs-20251204-8jl</guid>
      <description>&lt;p&gt;I realize I'm building plugins for a "niche within a niche"—using Neovim for Unreal Engine C++ development. But honestly? It's becoming surprisingly capable.&lt;/p&gt;

&lt;p&gt;This week, I shipped some massive updates to the &lt;strong&gt;UnrealDev.nvim&lt;/strong&gt; ecosystem. From Perforce integration to a wizard for generating &lt;code&gt;UPROPERTY&lt;/code&gt; macros, here is what’s new!&lt;/p&gt;




&lt;h3&gt;
  
  
  📦 1. UnrealDev.nvim
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Health Checks for Peace of Mind&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Added &lt;code&gt;:checkhealth UnrealDev&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;I added a health check command to verify that your Unreal Engine development environment is set up correctly.&lt;/p&gt;

&lt;p&gt;Since &lt;code&gt;nvim-treesitter&lt;/code&gt; parsers don't always auto-update with plugin managers, things can sometimes get out of sync. If something feels off, just run this command to troubleshoot instantly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvb8oiqlpfd09dxsd9f9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvb8oiqlpfd09dxsd9f9.png" alt="checkhealth" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🌲 2. UNX.nvim (Explorer)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Finally... Perforce (P4) Support!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You can't talk about Unreal Engine development without mentioning Perforce. It's the industry standard, and until now, UNX only supported Git.&lt;/p&gt;

&lt;p&gt;With this update, &lt;strong&gt;P4 status is now integrated into the file tree!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Status Icons:&lt;/strong&gt; Visualizes P4 states (Add, Edit, etc.) directly in the explorer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Checkout:&lt;/strong&gt; If you try to modify a read-only file, a dialog will pop up asking if you want to check it out.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Say goodbye to those annoying "File is read-only" errors! 👋&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivte9i7u8x71zmp4ugyc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fivte9i7u8x71zmp4ugyc.png" alt="p4 checkout" width="800" height="536"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🛠️ 3. UCM.nvim (Code Actions)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Speeding up Includes &amp;amp; Macros&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  📋 &lt;code&gt;:UCM copy_include[!]&lt;/code&gt;
&lt;/h4&gt;

&lt;p&gt;Tired of manually typing relative paths for &lt;code&gt;#include&lt;/code&gt;? This command calculates the correct include path for a C++ class and copies it to your clipboard.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-Resolution:&lt;/strong&gt; Run this on &lt;code&gt;MyActor.cpp&lt;/code&gt;, and it generates &lt;code&gt;#include "Actor/MyActor.h"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UCM copy_include&lt;/code&gt;&lt;/strong&gt;: Copies the include path for the &lt;em&gt;current&lt;/em&gt; file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UCM copy_include!&lt;/code&gt;&lt;/strong&gt;: Lets you fuzzy-search for a class name and copies its include path.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  ⚡ &lt;code&gt;:UCM specifiers[!]&lt;/code&gt; (The Macro Wizard)
&lt;/h4&gt;

&lt;p&gt;Writing &lt;code&gt;UPROPERTY&lt;/code&gt;, &lt;code&gt;UFUNCTION&lt;/code&gt;, or &lt;code&gt;UCLASS&lt;/code&gt; macros by hand is tedious. This wizard handles it for you.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Normal Mode (&lt;code&gt;:UCM specifiers&lt;/code&gt;):&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1.  Select the macro type (e.g., `UPROPERTY`).
2.  Multi-select specifiers (e.g., `EditAnywhere`, `BlueprintReadWrite`).
3.  Inserts the full macro `UPROPERTY(EditAnywhere, ...)` at your cursor AND copies it to the clipboard.
4.  **Smart Cursor:** If you pick something like `Category=""`, the cursor automatically jumps between the quotes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Append Mode (&lt;code&gt;:UCM specifiers!&lt;/code&gt; with bang):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perfect for editing existing macros.&lt;/li&gt;
&lt;li&gt;It skips the wrapper and &lt;em&gt;only&lt;/em&gt; inserts the specifiers (e.g., &lt;code&gt;EditAnywhere&lt;/code&gt;) at your cursor position.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k8bxfrfyms8obibfehc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5k8bxfrfyms8obibfehc.gif" alt="specifiers_1" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu9bjcno43kxrj6p92x.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpmu9bjcno43kxrj6p92x.gif" alt="specifiers_2" width="1218" height="812"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  🔍 4. UEP.nvim (Project Provider)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Smarter Navigation &amp;amp; Docs&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  File &amp;amp; Shader Enhancements
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Config/Shaders Visibility:&lt;/strong&gt; Fixed an issue where &lt;code&gt;UEP tree&lt;/code&gt; wasn't showing Config or Shaders directories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Virtual Paths:&lt;/strong&gt; Added support for virtual include paths in &lt;code&gt;.ush&lt;/code&gt; / &lt;code&gt;.usf&lt;/code&gt; files. &lt;code&gt;open_files&lt;/code&gt; can now jump straight to them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UEP shaders[!] [Scope]&lt;/code&gt;:&lt;/strong&gt; A new command to search and open shader files quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  C# Config Navigation
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;:UEP build_cs[!]&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;!&lt;/code&gt;: Instantly opens &lt;code&gt;Build.cs&lt;/code&gt; for the current module.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;!&lt;/code&gt;: Lists &lt;em&gt;all&lt;/em&gt; &lt;code&gt;Build.cs&lt;/code&gt; files in the project to choose from.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;:UEP target_cs[!]&lt;/code&gt;&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Without &lt;code&gt;!&lt;/code&gt;: Lists project &lt;code&gt;Target.cs&lt;/code&gt; files.&lt;/li&gt;
&lt;li&gt;With &lt;code&gt;!&lt;/code&gt;: Includes Engine targets in the search.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  🌐 &lt;code&gt;:UEP web_doc[!]&lt;/code&gt; (Context-Aware Docs)
&lt;/h4&gt;

&lt;p&gt;Opens the official Unreal Engine documentation in your browser. The best part? &lt;strong&gt;It automatically detects your project's UE version&lt;/strong&gt; and opens the correct page.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Without &lt;code&gt;!&lt;/code&gt;&lt;/strong&gt;: Searches the docs for the word under your cursor.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;With &lt;code&gt;!&lt;/code&gt;&lt;/strong&gt;: Lets you select a class from your project to open its documentation.

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Note (Experimental): If the plugin can't guess the direct URL, it gracefully falls back to a site search.&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh7y7ty5b6ut35lccpiq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffh7y7ty5b6ut35lccpiq.gif" alt="web_doc" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This week was all about "Quality of Life" improvements. I focused on fixing those small frictions that made me miss my heavy IDE.&lt;/p&gt;

&lt;p&gt;Honestly, I'm finding myself opening Rider less and less these days. (Maybe I just forgot the Rider shortcuts? 🤔... nah, Neovim is just getting that good!)&lt;/p&gt;

&lt;p&gt;If you have any feature requests or ideas, let me know in the comments or issues. And if you find these plugins useful, a Star ⭐️ on &lt;strong&gt;&lt;a href="https://www.google.com/search?q=https://github.com/taku25/UnrealDev.nvim" rel="noopener noreferrer"&gt;UnrealDev.nvim&lt;/a&gt;&lt;/strong&gt; would make my day!&lt;/p&gt;

&lt;p&gt;Happy Hacking! 💻✨&lt;/p&gt;

</description>
      <category>neovim</category>
      <category>unrealengine</category>
      <category>gamedev</category>
      <category>cpp</category>
    </item>
  </channel>
</rss>
