vim-quickui, a Turbo C++ style widget set for Vim
The missing UI extensions for Vim 9 (and NeoVim) !! :sunglasses:
At a glance
- What is it?
- vim-quickui is a terminal user interface widget library for Vim and NeoVim written entirely in VimScript with no external dependencies, offering a dropdown menubar, a context menu, a data-driven dialog system and a set of popups. The visual reference is the Borland and Turbo C++ IDE of the 1990s, and the author's own screenshot of that editor is in the README.
- Who is it for?
- vim-quickui fits a Vim user who wants interactive surfaces in the editor, a menu system, a prompt for structured input, or a popup for a definition, without pulling in a plugin manager stack, an embedded Python or a compiled extension.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 115 days ago.
- What is it written in?
- Mainly Vim Script, 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
Why a Turbo C++ IDE inside Vim
vim-quickui is described as a Borland and Turbo C++ inspired TUI widget library for Vim and NeoVim, offering menus, dialogs, context menus and more, all in pure VimScript with no dependencies. The repository description puts it more bluntly, the missing UI extensions for Vim 9 and NeoVim. The reference point is deliberate and the author is explicit about it, since the README carries a screenshot of a Turbo C++ style editor the author wrote for Watcom C++ back in the day, and the project is described as an attempt to bring that classic TUI experience into modern Vim. The author is Lin Wei, an open source advocate and long-time Vim user. The audience is a Vim user who wants interactive surfaces inside the editor, and the no dependency rule is a real constraint on the design rather than a slogan, since the feature list explicitly rules out a plus python requirement and claims zero overhead.
A menubar in a dozen lines of VimScript
The quick start is a menubar, and the amount of code needed to get one is the demonstration of the library. You clear the existing menus, install a menu with a list of items, and map a key to open it.
" clear all the menus
call quickui#menu#reset()
" install a 'File' menu
call quickui#menu#install('&File', [
\ [ "&Open\t(:w)", 'call feedkeys(":tabe ")'],
\ [ "&Save\t(:w)", 'write'],
\ [ "--", ],
\ [ "E&xit", 'qa' ],
\ ])
noremap <silent><space><space> :call quickui#menu#open()<cr>The structure of an item is a label and a command, with the ampersand marking a hotkey and a tab separating the label from a right-aligned annotation, and a lone dash acting as a separator. The menus display as a row of dropdowns at the top of the screen, and the README says to navigate with hjkl or the mouse and pick an item with Enter. A complete configuration example is in test/menu_example.vim. The point for an evaluator is that a menu system with hotkeys, annotations and separators is about twenty lines of configuration, which is what makes the widget set usable in a real configuration rather than a demo.
A context menu that appears where the cursor is
The context menu is the right-click style widget, and its use case is commands that are relevant to what is under the cursor. The content is the same list of label and command pairs as the menubar, with a dash as a separator, and the widget is opened with a call that takes the content and an options dictionary.
let content = [
\ ['&Help Keyword', 'echo 123' ],
\ ['&Signature', 'echo 456' ],
\ ['-'],
\ ['&Peek Definition', 'echo 789'],
\ ]
call quickui#context#open(content, {})The README describes it as ideal for presenting commands relevant to the current context, which is the part that distinguishes it from a fixed menu. A configuration that puts a peek definition or a documentation lookup in a context menu is a small amount of VimScript that a user can bind to the right mouse button and immediately have something that feels like an IDE. The API reference for it is in MANUAL.md under the context menu section, alongside the menu reference, so the two widgets share one document.
The dialog is data, and the result is a dictionary
The dialog is the most capable widget, and the README calls it the most powerful one. You declare a list of controls, each a dictionary with a type, and the widget returns all the values as a dictionary. The supported control types are label, input, radio, check, button, separator and dropdown, and navigation is with Tab and Shift-Tab or with hotkeys.
let items = [
\ {'type': 'label', 'text': 'Settings:'},
\ {'type': 'input', 'name': 'name', 'prompt': 'Name:', 'value': 'test'},
\ {'type': 'radio', 'name': 'choice', 'prompt': 'Pick:', 'items': ['A', 'B', 'C']},
\ {'type': 'check', 'name': 'flag', 'text': 'Enable Feature'},
\ {'type': 'button', 'name': 'confirm', 'items': [' &OK ', ' &Cancel ']},
\ ]
let result = quickui#dialog#open(items, {'title': 'Settings'})
echo resultThe declaration is data, which means a settings screen is a list of dictionaries rather than a pile of input() calls, and the result is a dictionary keyed by the names you gave, so the caller never has to parse prompt output. The dialog has its own guide in DIALOG.md, a tutorial on dev.to about building real dialogs in Vim with no Python and no dependencies, and a set of examples in test/test_dialog.vim.
Six more popups, and a manual for each
The rest of the widget set is catalogued in a table in the README, and the entries are more than a list of names. The Listbox is a scrollable list with search, using the slash or the question mark, and mouse wheel support, which the README points at buffer switching and function navigation. The Textbox displays arbitrary text in a popup, useful for reading help or messages without splitting the window. The Preview is a popup window near the cursor for glimpsing definitions or quickfix results. The Inputbox is a single line text input popup, the Terminal runs terminal programs in a popup window, and Confirm is a simple choice dialog. Each has its own section in MANUAL.md, which the README describes as the complete API reference for all widgets, while DIALOG.md is the in-depth guide to the dialog system. Colour schemes and border styles are configurable, with Borland, gruvbox and solarized named as the schemes, and the manual is the place to find the rest.
Installing it and the shape of the repository
There are two installation routes, one for plugin managers and one for Vim's own package system.
Plug 'skywind3000/vim-quickui'mkdir -p ~/.vim/pack/vendor/start
cd ~/.vim/pack/vendor/start
git clone https://github.com/skywind3000/vim-quickuiThe script is also published on vim.org, and the README asks readers to vote for it there as well as starring the repository. The repository layout is conventional for a Vim plugin, with autoload/ holding the functions, plugin/ the entry points, colors/ the colour schemes, lua/ for the Lua parts, test/ for the test scripts, and docs/ for the images and site material, next to MANUAL.md, DIALOG.md, an AGENTS.md and a CLAUDE.md. A related project by the same author, vim-navigator, is powered by QuickUI, which is the clearest signal of what the widget set is for, since it is a command and function navigation interface built on the listbox and the preview window.
Version rhythm and what is not documented
The release history is quick and the numbers are small, with 1.5.1 on 2026-04-30, 1.5.4 on 2026-05-02 and 1.5.6 on 2026-05-03, so several patch releases in a few days. The repository is not archived and the last push was on 2026-06-30, so the work continues, and the version range the README claims is wide, Vim 8.2 or later and NeoVim 0.4 or later, which is reassuring for anyone on an older distribution build. The licence is MIT, in the LICENSE file, which is the permissive grant expected for a Vim plugin and imposes nothing on the configuration that uses it. What the README does not cover is the failure modes, since there is no section on what happens when a widget overlaps a popup, on terminals with unusual capabilities, or on how the library behaves in a headless or remote session, and the repository holds no issue template or troubleshooting guide. For a project whose appeal is entirely visual, those are the gaps a new user will meet first, and the manual pages are where you will look for the answers.
Editorial conclusion
vim-quickui fits a Vim user who wants interactive surfaces in the editor, a menu system, a prompt for structured input, or a popup for a definition, without pulling in a plugin manager stack, an embedded Python or a compiled extension. It does not fit a user who wants a modern mouse-driven IDE interface, since the whole design is a terminal widget set in the Borland idiom, and it does not fit a team that needs a maintained plugin for the long term without checking who is going to carry it. Verify three things first: that your Vim or NeoVim version is inside the supported range, since the library asks for Vim 8.2 or later and NeoVim 0.4 or later, how the dialog widget behaves in your terminal with your colours, since the borders and colour schemes are part of the appeal, and whether the widgets you want are the ones the manual documents, because the widget set is broad but each one has its own page.
Frequently asked questions
What is vim-quickui?
It is a terminal user interface widget library for Vim and NeoVim, inspired by the Borland and Turbo C++ IDE, providing menus, dialogs, context menus and popups in pure VimScript with no external dependencies. It supports Vim 8.2 or later and NeoVim 0.4 or later.
How do I install vim-quickui?
With vim-plug, add Plug 'skywind3000/vim-quickui' to your plugin list. With Vim's built-in package manager, create the directory ~/.vim/pack/vendor/start and clone the repository into it. The script is also published on vim.org.
What widget types does the vim-quickui dialog support?
label, input, radio, check, button, separator and dropdown. The controls are declared as a list of dictionaries and quickui#dialog#open returns the values as a dictionary, and you navigate with Tab and Shift-Tab or with hotkeys.
Where is the vim-quickui documentation?
MANUAL.md is the user manual and complete API reference for all the widgets, and DIALOG.md is the in-depth guide to the dialog system. Example configurations live in the test directory, with menu_example.vim and test_dialog.vim, and there is a dev.to tutorial on building dialogs in Vim without Python.
Official sources
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.
[](https://hysenlabs.com/projects/skywind3000-vim-quickui)Was this useful?