Open-source project
igorlfs/nvim-dap-view avatar
igorlfs/nvim-dap-view

nvim-dap-view: the panel layer that turns nvim-dap into a debugging UI

Visualize debugging sessions in neovim

1,039 stars38 forksLuaGPL-3.0

At a glance

What is it?
nvim-dap-view is a Lua plugin that provides the views for nvim-dap, the neovim implementation of the Debug Adapter Protocol, covering watches, the call stack, breakpoints, scopes, a REPL, inline virtual text and hover. It requires neovim 0.11 or newer and installs through the new vim.pack package manager.
Who is it for?
nvim-dap-view fits a neovim user who has already got nvim-dap working and wants a proper debugging interface rather than the bare adapter output, with watches, a call stack browser, breakpoint management and a REPL in one window. It does not fit a user who has not chosen a debug adapter yet, because this plugin renders sessions rather than creating them.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly Lua, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

A UI layer over nvim-dap, and what that division means

nvim-dap-view is a UI for nvim-dap. That single sentence is the whole architecture, and the footnote at the bottom of the README explains what sits underneath.

The footnote describes nvim-dap as the quasi canonical neovim implementation of DAP, the Debug Adapter Protocol, the protocol that enhances text editors with IDE-like debugging capabilities.

That protocol is the key to the design. A debug adapter is a separate process that speaks a standard protocol, and the editor is responsible for the user interface around it: which variables to show, what the call stack looks like, where the breakpoints are. nvim-dap handles the adapter side, and nvim-dap-view handles the interface side.

The practical consequence is that nvim-dap-view is not a debugger and cannot debug on its own. It has no notion of what language your code is, no compiler, and no adapter to talk to. It renders what an adapter reports, which means the breadth of what you can inspect depends entirely on the adapter in use. A C adapter and a Python adapter report different things, and the views reflect whichever adapter is driving the session.

The feature list is a list of views, and each one corresponds to a piece of data the protocol can carry. Watch expressions, navigating in the call stack, manipulating breakpoints, inspecting and modifying variables in scope, a REPL, inline virtual text variables, and hover.

One of those entries is worth a second look, because it is the only one that goes beyond display. Inspect and modify variables in scope means the panels are not read only. A view that can write a value back into the program's memory during a paused session is a debugger feature, not a viewer feature.

Installing through vim.pack, pinned to the 1.x line

The installation instruction is short, and it is in Lua rather than in a shell command, because the plugin is installed by neovim's own package manager rather than by a plugin manager.

lua
vim.pack.add({
 { src = "https://github.com/igorlfs/nvim-dap-view", version = vim.version.range("1.*")  },
})

There is a warning above it that is worth repeating, because it is a hard requirement rather than a recommendation. The plugin requires neovim 0.11 or later.

The version range in the snippet is the second detail that matters. vim.version.range("1.*") asks the package manager for the newest release in the 1 series, so you get a tagged release rather than the tip of the main branch. That is a sensible default for a plugin that talks to a live debugger session, and it means the install is reproducible in a way that tracking a branch is not.

For a reader on an older neovim, or on a plugin manager setup, this is where the friction is. vim.pack belongs to neovim itself, so if your configuration is built around lazy.nvim or packer.nvim you will need a different installation route, and the project does not document one in the README. The full documentation on the website covers the options, commands, tips and tricks, and there is a built in help document as well, reachable with :help dap-view.txt.

The repository layout backs this up. The root holds lua/ for the plugin code, plugin/ for the files neovim loads at startup, doc/ for the vim help file, docs/ for the website sources, a .stylua.toml for the Lua formatter configuration, a .editorconfig, a CHANGELOG.md and a LICENSE.

A window you open when you want it, and close when you are done

The getting started section describes a deliberate rhythm rather than a permanent panel.

You start a regular debugging session, using whatever adapter nvim-dap is configured with. When you want it, you use :DapViewOpen to start the plugin. You switch to another section using the letter outlined in the winbar, for example B for Breakpoints. And you explore what each section can do with g? to inspect the keymaps.

Once you are done debugging, you close the plugin with :DapViewClose, and then terminate your session as usual.

That order is the point. The view is opened on demand and closed again, which means the debugging UI does not permanently occupy buffer space in a session where you are mostly writing code. The winbar with the section letters is how the sections are discovered, and g? for the keymaps is the neovim convention for showing what a buffer can do, so the plugin is following the editor's own idiom rather than inventing a menu.

The design also implies that the sections are independent. Watches, the call stack, breakpoints, scopes and the REPL are separate views over one session, and the letter key moves between them. A session with no breakpoints does not need a breakpoints view, and a session where you are chasing one value does not need the whole set open at once.

The REPL deserves a note of its own. A read evaluate print loop inside the editor is a different thing from a language REPL in a terminal, because it runs in the debuggee's context with the program's variables in scope. It is the feature that makes the plugin more than a display layer.

Inline virtual text and hover, where the UI leaks into the code

Two of the features work differently from the panels, and they are the reason the plugin is more than a sidebar.

Inline virtual text variables means the value of a variable appears next to the line of code that declares it, in the buffer you are editing, rather than in a separate window. The screenshot in the README shows it as text rendered beside the source line.

Hover gives you the value under the cursor on demand.

Both of these are the difference between a debugger that makes you leave your code and one that annotates it. When you are stepping through a function and watching a counter change, a side panel forces your eye to travel; inline text keeps the value in the same screen region as the code that produces it.

There is a cost to that choice, and it is the same cost every annotation tool carries. Inline values are only meaningful when the program is paused at a breakpoint, and when the session is running the display has to be either cleared or left showing a stale value. The plugin has to decide when to update, and that decision is a source of the kind of subtle confusion that comes from looking at a number that is not current.

The same applies to hover, more mildly, since a hover is a momentary interaction rather than a persistent annotation.

The screenshots and the logo are hosted on an image board rather than in the repository, which tells you the visual material is not versioned with the code. For a project with a CHANGELOG and tagged releases, that is a small inconsistency in how the documentation is presented.

A plugin with a sponsor link, issue templates and a documented complaint path

The contributing section is short but it is unusually complete about the three ways a user can get in touch, and each has a distinct template.

If you have questions, the project asks you to create a discussion, with a link to a new discussion chooser. If something is not working, you create a bug report, with a template file named bug_report.yml. If you have an idea, you file a feature request with a feature_request.yml template, and you can go ahead and implement it yourself with a pull request, with a compare link provided.

Structured issue templates matter more in a plugin than they do in an application, because a debugging plugin has a large configuration surface. The problem might be an adapter misconfiguration, a neovim version, or a view layout, and a template that asks the right questions saves the round trip. The templates being YAML files in the repository means the questions are versioned and reviewable.

There is also a sponsor link for anyone with some spare money, which is a small signal that this is a maintained individual project rather than a company owned one.

On maintenance, the facts are modest but positive. The repository is not archived, the last push was on 2026-10-16, and the release list shows v1.2.1 on 2026-08-07, v1.2.0 on 2026-06-06 and v1.1.1 on 2026-04-12. That is roughly one release every two months, with a minor version bump carrying new features and a patch following it, which is a normal cadence for a neovim plugin that has to track both nvim-dap and neovim itself.

The GPL-3.0 licence is the one term with a practical consequence for anyone embedding this in a larger configuration that they distribute, and it is published as a LICENSE file at the repository root.

Editorial conclusion

nvim-dap-view fits a neovim user who has already got nvim-dap working and wants a proper debugging interface rather than the bare adapter output, with watches, a call stack browser, breakpoint management and a REPL in one window. It does not fit a user who has not chosen a debug adapter yet, because this plugin renders sessions rather than creating them. Check three things before you adopt it. Check your neovim version, because the plugin requires 0.11 or newer and the install snippet pins the package to the 1.* version range. Check how you install plugins, since the documented path uses vim.pack, the package manager that arrived with recent neovim releases, and a lazy.nvim or packer setup needs a different route. And check which sections you actually need, because the UI is built from independent views that you open and close on demand rather than one fixed panel. The last push was on 2026-10-16, the newest release is v1.2.1 from 2026-08-07, and the license is GPL-3.0.

Frequently asked questions

What does nvim-dap-view require to install?

It requires neovim 0.11 or newer, and it is installed with the vim.pack package manager using vim.pack.add with a src of the GitHub repository and a version range of vim.version.range("1.*").

What is the difference between nvim-dap and nvim-dap-view?

nvim-dap is the neovim implementation of the Debug Adapter Protocol, the protocol that gives text editors IDE-like debugging, while nvim-dap-view is the UI layer that renders those sessions, with watches, call stack, breakpoints, scopes, a REPL, inline variables and hover.

How do I open and close the nvim-dap-view panels?

Use :DapViewOpen to start the plugin once a debugging session is running, switch sections with the letter outlined in the winbar such as B for Breakpoints, inspect the keymaps with g?, and close the plugin with :DapViewClose when you are done.

Can nvim-dap-view change variables while debugging?

Yes. The features list includes inspecting and modifying variables in scope, and inline virtual text variables renders values next to the line of code that declares them, plus a hover view for values under the cursor.

What license is nvim-dap-view released under?

GPL-3.0, published as a LICENSE file at the root of the repository. The newest listed release is v1.2.1 from 2026-08-07, and the last push was on 2026-10-16.

Official sources

  1. igorlfs/nvim-dap-view on GitHub
  2. License: GPL-3.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/igorlfs-nvim-dap-view.svg)](https://hysenlabs.com/projects/igorlfs-nvim-dap-view)

Was this useful?