qvacua/vimr
58.7
Adequate · 27 September 2026
17.5k
lines of production code
Swift
primary language
4
measurements over time
What this system is
VimR is a native macOS graphical user interface for Neovim, providing a modern desktop experience for the terminal-based editor. The system integrates Neovim via Unix sockets or pipes, rendering the editor's output through a high-performance, custom Swift-based drawing engine that supports ligatures and complex Unicode. It manages multiple editing sessions via a customizable tab bar and organizes auxiliary tools within a flexible workspace layout, all while handling file system events and application preferences.
How it got here
2016–2017 — VimR project initialization and modularization
12 changes.
This period marks the establishment of the VimR project, transitioning from the legacy nvox structure to a new modular architecture with distinct components like Tabs and NvimView. It involved setting up foundational build systems, CI/CD pipelines via Jenkins, and code generation scripts to integrate with Neovim. The work also included implementing core application features such as advanced connection preferences and restructuring the Xcode workspace to support the new modular design.
2018–2020 — Swift 6 migration and UI modernization
21 changes.
The project underwent a significant architectural overhaul, migrating the build system to Swift Package Manager and adopting Swift 6 compatibility with async/await patterns. This period focused on rewriting the NvimView rendering engine for improved performance and introducing modular UI components for tabs and workspace toolbars, supported by a new shared Commons library.
2022–2024 — Neovim Swift integration and tooling
6 changes.
This period focused on establishing robust Swift bindings for Neovim through the NvimApi package, which provides both async and synchronous interfaces for interacting with Neovim instances. The work also included building infrastructure for macOS binary distribution, implementing VCS-style file filtering with the Ignore package, and enhancing Xcode workspace configurations to support development and testing of these components.
Features
Add DrawerDev support app for NvimView testing
A new macOS support application named DrawerDev has been added to the NvimView/Support directory. This app provides a standalone environment for testing the NvimView component, featuring a custom NSView (MyView) that renders a grid of Unicode characters using the AttributesRunDrawer. It includes necessary project scaffolding such as an AppDelegate, MainMenu.xib interface, and Info.plist, along with Swift 6 compatibility extensions for core Cocoa types.
NvimView/Support/DrawerDev · high confidence
Add EnvVarTest demo application to CommonsSupport
The CommonsSupport project now includes a new macOS application target named EnvVarTest. This demo app serves as a concrete example of how to integrate and use the Commons framework, featuring a standard macOS UI with an AppDelegate, Assets, and a MainMenu.xib interface.
Commons/Support/CommonsSupport.xcodeproj · high confidence
Add TabsSupport macOS application project
A new macOS application project named TabsSupport has been added to the repository. This project serves as a support or demo application that links against the Tabs framework, providing a concrete host environment for the tab management capabilities defined in the Tabs module.
Tabs/Support/TabsSupport.xcodeproj · high confidence
Added DrawerPerf support app for font rendering performance testing
A new macOS support application named DrawerPerf has been added to the NvimView support directory. This tool is designed to benchmark the performance of the font rendering pipeline by loading predefined JSON datasets containing complex character grids (including Korean, Greek, and Devanagari scripts) and measuring the time required to generate font glyph runs. It utilizes the project's internal FontUtils, Typesetter, and CellAttributes logic to simulate real-world rendering loads, providing developers with timing metrics to evaluate optimization efforts.
NvimView/Support/DrawerPerf · high confidence
Added MinimalNvimViewDemo Xcode scheme
A new Xcode scheme named MinimalNvimViewDemo has been added to the NvimViewSupport project, enabling developers to build, run, test, profile, and archive the MinimalNvimViewDemo application directly from the IDE.
NvimView/Support/NvimViewSupport.xcodeproj/xcshareddata · high confidence
Added Xcode workspace configuration for Swift Package
A new \contents.xcworkspacedata\ file has been added to the \Tabs/.swiftpm/xcode/package.xcworkspace\ directory. This change enables the Swift Package Manager package to be opened and edited directly within Xcode, providing a workspace configuration that references the package itself.
Tabs/.swiftpm · high confidence
Added build scripts for Neovim binaries
New shell scripts have been added to the repository to automate the creation of Neovim binaries for macOS. The \build\_neovim.sh\ script handles building a single-architecture binary by compiling gettext and Neovim with specific CMake flags for libintl support. The \build\_neovim\_for\_dev.sh\ script provides a simplified build path for development environments. Additionally, \build\_universal\_neovim.sh\ combines separate x86\_64 and arm64 builds into a single universal binary using \lipo\, merging the executable and Treesitter parser libraries into a unified distribution package.
bin/neovim/bin · high confidence
Added macOS EnvVarTest demo application
A new macOS application named EnvVarTest has been added to the Commons/Support directory. This demo app launches, retrieves the current shell's environment variables using the Commons library's ProcessUtils, and displays the key-value pairs in a text view, serving as a practical example of how to integrate and use the Commons support utilities.
Commons/Support/EnvVarTest · high confidence
Added macOS demo app for the Tabs component
A new macOS example application (TabsSupport) has been added to demonstrate the Tabs library. The app initializes a TabBar with a default theme, configures selection and drag-reorder handlers to update the UI, and displays four sample tabs, including one with a long title, to showcase the component's layout and interaction capabilities.
Tabs/Support/TabsSupport · high confidence
Initial project structure and configuration for VimR
This change establishes the foundational repository structure for VimR, a Neovim GUI for macOS. It introduces essential configuration files including \.gitignore\ to exclude build artifacts and IDE files, \.swiftformat\ and \.swiftlint.yml\ to enforce code style and linting rules, and a \Brewfile\ specifying build dependencies like \cmake\ and \python3\. The project now includes a \Neovim\ submodule pointing to the upstream Neovim repository, alongside documentation files (\README.md\, \DEVELOP.md\) and an \appcast.xml\ for Sparkle-based auto-updates, setting the stage for building and developing the application.
(repo-wide) · high confidence
Introduce Ignore package for VCS-style file filtering
The new Ignore package provides a Swift library for parsing and applying \.gitignore\-style patterns to determine which files should be excluded. It includes a \FileLineReader\ for handling various line endings, a \Filter\ struct for matching paths against wildcards using the \WildmatchC\ library, and an \Ignore\ class that aggregates rules from \.gitignore\, \.ignore\, and global Git configuration files. The implementation supports relative and absolute patterns, directory-only exclusions, and allow-list overrides, with comprehensive tests covering line reading, pattern matching, and rule splitting logic.
Ignore · high confidence
Introduce Workspace bar UI components for tool management
Added the core UI components for the Workspace feature, including \Workspace\ (the main container managing tool placement at top, bottom, left, and right locations), \WorkspaceBar\ (handling layout and drag-and-drop interactions for tool buttons), \WorkspaceTool\ (wrapping individual tool views with toggle and inner toolbar support), \InnerToolBar\ (providing close and settings buttons for tools), and \WorkspaceToolButton\ (rendering draggable tool buttons). These files establish the visual structure and interaction model for organizing tools within the application.
Workspace · high confidence
Introduce customizable tab bar with drag-to-reorder and theming
A new tab bar component has been added to the application, providing a native macOS-style interface for managing multiple tabs. Users can now reorder tabs by dragging them within the bar, and the tab titles will automatically abbreviate paths relative to the current working directory when prefixes match. The tab bar supports full theming, allowing colors, fonts (including bold text for selected tabs), and icon dimensions to be customized via a \Theme\ struct, with specific styling applied to selected versus unselected states.
Tabs/Sources · high confidence
Minimal demo app now includes standard macOS document and menu interfaces
The MinimalNvimViewDemo now ships with a complete macOS application interface, including a MainMenu.xib with standard File, Edit, and Application menus (New, Open, Save, Quit, etc.) and a Document.xib defining the main window and its delegate connection. This provides the structural UI foundation for the demo, allowing users to interact with the application using standard macOS window and menu behaviors.
NvimView/Support/MinimalNvimViewDemo/Base.lproj · high confidence
New Advanced preferences for connection mode and interactive shell
The Preferences window now includes an Advanced pane where users can configure the Neovim connection mode (choosing between the classic stdio pipe or a Unix socket), enable interactive mode for the zsh shell, toggle the snapshot update channel, and set a custom NVIM\_APPNAME environment variable.
VimR/VimR · high confidence
New Commons library for shared utilities
A new 'Commons' library has been introduced to centralize shared code across the application. This library provides a suite of extensions for Foundation and AppKit types, including color manipulation (hex/RGB conversion, tinting), text drawing, and UI state helpers. It also includes core utilities such as a thread-safe FIFO cache, file and process management tools, a development logger with file rotation, and shell path escaping, making these capabilities available to other parts of the codebase.
Commons/Sources/Commons · high confidence
New Jenkins release job with configurable parameters and artifact retention
A new Jenkins free-style job named 'vimr\_release' has been introduced to manage application releases. This job allows users to specify the marketing version, branch, release notes, and options to create a GitHub release, upload the binary, and update the appcast. It is configured to retain only the last 10 builds and archives release artifacts, including the appcast and release notes, even if the build fails. The job also supports colorized output and requires the Job DSL and AnsiColor plugins.
ci · high confidence
New NetUtils utility for opening ephemeral network ports
A new NetUtils class has been added to the Commons module, providing a static method to open and bind to an ephemeral TCP port. This utility creates a socket, binds it to any available local port, retrieves the assigned port number, and then closes the socket, returning the port identifier for use by other components.
Commons/Sources/CommonsObjC · high confidence
New NvimApi package with async and synchronous Neovim bindings
The NvimApi package introduces Swift bindings for Neovim, providing both an async API (NvimApi) and a synchronous API (NvimApiSync) to interact with Neovim instances. The async implementation uses Swift's async/await model and supports connecting via Unix domain sockets, TCP, or standard input/output pipes. The synchronous API offers a lock-based alternative for environments where async is not preferred. Both APIs are generated from Neovim's API info (version 0.12.5) and include type-safe wrappers for Neovim methods, handling MessagePack serialization and deserialization. The package also includes a source generator script to keep the bindings up-to-date with Neovim's API changes.
NvimApi · high confidence
New build, release, and source-generation scripts for VimR
The bin directory now includes a comprehensive set of scripts to streamline the development and release process. Build automation is handled by build\_vimr.sh, build\_release.sh, and build\_jenkins.sh, which manage Xcode builds, code signing, and notarization (using notarytool). Release workflows are supported by set\_new\_versions.sh, publish\_release.sh, and set\_appcast.py for generating Sparkle appcast updates. Source generation is automated via generate\_sources.sh, which calls generate\_autocmds.py and generate\_cursor\_shape.py to create Swift files from Neovim headers. Additional utilities include build\_nightly\_jenkins.sh for nightly builds, build\_nvimserver.sh for Neovim binary preparation, sign\_vimr.sh for manual signing, and pre-commit.py for linting and formatting Swift code.
bin · high confidence
New release artifacts and generated resource templates
The resources directory now includes an appcast template (appcast\_template.xml) that specifies a minimum macOS system version of 14.8 for updates, alongside new auto-generated Swift templates for Neovim autocommands (autocmds.template.swift) and cursor shapes (cursor\_shape.template.swift). A comprehensive release-notes.md file has also been added, documenting the changelog up to version 0.66.0, including the upgrade to Neovim 0.12.5 and various dependency updates.
resources · high confidence
Architecture
Removal of the legacy Xcode project file
The \nvox.xcodeproj/project.pbxproj\ file has been deleted, indicating that the project's build configuration and source file references are no longer managed by this specific Xcode project file. This change likely reflects a migration to a different build system, a restructuring of the project layout, or the removal of an obsolete project definition in favor of other targets or configurations.
nvox.xcodeproj · high confidence
Workspace restructured to include new module projects
The Xcode workspace has been reorganized to explicitly reference several new project groups and their associated support projects. Specifically, the workspace now includes references to the Tabs, NvimView, Commons, and Ignore modules, along with their respective support Xcode projects (TabsSupport, NvimViewSupport, CommonsSupport). The main VimR application project remains included, indicating a shift towards a more modular project structure where these components are managed as distinct sub-projects within the workspace.
VimR.xcworkspace · high confidence
Behavioural changes
Added Xcode workspace shared settings
The Xcode workspace now includes shared configuration files to standardize the development environment. An IDEWorkspaceChecks.plist file has been added to suppress the 32-bit warning, and a WorkspaceSettings.xcsettings file has been introduced with an empty dictionary to define default workspace settings for all contributors.
VimR.xcworkspace/xcshareddata · high confidence
App renamed to TabsSupport with updated menu items and new view shortcuts
The application bundle and UI have been renamed from 'nvox' to 'TabsSupport', updating the main menu, window title, and 'About' panel text accordingly. The interface now includes keyboard shortcuts for 'Show Sidebar' (Cmd+S) and 'Enter Full Screen' (Cmd+F), and the 'Revert to Saved' menu item has been assigned the 'r' shortcut. Additionally, the XIB file was migrated to a newer Interface Builder format (tools version 17506) and the AppDelegate module was updated to 'TabsSupport'.
Tabs/Support/TabsSupport/Base.lproj · high confidence
Complete rewrite of the rendering engine and Neovim integration layer
The NvimView component has been completely rewritten to replace the previous implementation with a new, high-performance rendering pipeline and a modernized Neovim connection strategy. The new engine introduces a dedicated \AttributesRunDrawer\ for optimized text drawing, supporting ligatures, custom font metrics, and precise cursor shapes (block, horizontal, vertical) via a new \CellAttributes\ system. The view now communicates with Neovim using an async/await API and supports launching Neovim via Unix domain sockets (\--embed --listen\) in addition to pipes, improving stability and performance. Generated source files for Neovim API events and cursor modes are included to ensure compatibility with Neovim v0.12.5.
NvimView/Sources/NvimView · high confidence
Custom cursor styling for NvimView
The application now applies specific Vim configuration to customize the appearance of the cursor. Normal mode cursors are displayed as reversed blocks, while insert mode cursors appear as vertical lines, providing distinct visual feedback for different editing states.
NvimView/Sources/NvimView/Resources · high confidence
Minimal NvimView demo app restructured with custom tabs and async lifecycle
The MinimalNvimViewDemo application has been updated to support custom tab bars, requiring the explicit addition of the tab bar view alongside the NvimView instance in the document window layout. The app's lifecycle and document handling have been migrated to use async/await, introducing an option to control whether a new window opens on launch and ensuring that NeoVim processes are cleanly stopped without saving when the application terminates or a document closes. Additionally, the demo now defaults to using the Fira Code font with ligatures enabled.
NvimView/Support/MinimalNvimViewDemo · high confidence
New Xcode build scheme for VimR
A new Xcode scheme file (VimR.xcscheme) has been added to the project, defining the build, test, launch, profile, analyze, and archive actions. This scheme configures the VimR.app target with parallelized builds enabled and sets up the default debugging and launching behavior for development and release workflows.
VimR/VimR.xcodeproj/xcshareddata · high confidence
NvimView support project restructured with updated build settings
The NvimViewSupport.xcodeproj has been recreated to reflect recent build environment updates. The project now targets macOS 12 (Monterey) as the minimum deployment version and uses Swift tools version 5.6. It includes support for the MinimalNvimViewDemo, DrawerDev, and DrawerPerf applications, linking against the NvimView, Commons, and PureLayout frameworks. This change aligns the project configuration with the broader migration to async/await and Swift 6 compatibility efforts in the NvimView module.
NvimView/Support/NvimViewSupport.xcodeproj · medium confidence
Removal of legacy AppDelegate in nvox
The nvox application has removed its traditional AppDelegate class (AppDelegate.swift), which previously handled standard macOS application lifecycle events such as launch and termination. This change indicates a shift away from the standard Cocoa application delegate pattern, likely as part of a broader project restructuring or migration to a different application entry point or architecture.
nvox · high confidence
Updated macOS deployment target and added server entitlements
The minimum macOS deployment target for the Neovim build has been raised to version 14, as reflected in the updated buildInfo.json. Additionally, a new entitlements file (NvimServer.entitlements) has been introduced for the NvimServer component, granting permissions for Just-In-Time (JIT) compilation, unsigned executable memory, and disabling library validation, which are required for the server's runtime behavior.
bin/neovim/resources · high confidence
VimR project file restructured with new dependencies and file associations
The VimR Xcode project has been reorganized to include several new Swift Package Manager dependencies (Swifter, PureLayout, DictionaryCoding, Down, Sparkle, Nimble, Commons, MaterialIcons, Workspace, NvimView, ShortcutRecorder, EonilFSEvents, Ignore, and OrderedCollections) and to support a comprehensive set of file-type icons for the file browser. This change also introduces new project components such as the IgnoreService for VCS ignoring, a new Keys preferences pane, and a BufferList, while removing older file-monitoring implementations in favor of a custom EonilFSEvents fork to address memory leaks.
VimR/VimR.xcodeproj · high confidence
Workspace configuration restored for NvimViewSupport
The NvimViewSupport workspace has been re-added to the project structure. This involves restoring the IDE workspace checks file and updating the workspace data file to correctly reference the local project, ensuring the development environment is properly configured for building and running the NvimViewSupport component.
NvimView/Support/NvimViewSupport.xcodeproj/project.xcworkspace · medium confidence
Workspace configuration restructured
The Xcode workspace configuration has been updated to include a new workspace data file and workspace checks plist. This change reflects a restructure of the project's workspace settings, likely to support the addition of new components or to align with updated build system requirements.
VimR/VimR.xcodeproj/project.xcworkspace · medium confidence
Test coverage
Added unit tests for Commons utility functions; Added unit tests for NvimView core components; Removal of default test file.
Dependencies
Swift Package Manager migration and dependency updates
The project has migrated its build system to Swift Package Manager, introducing new packages for Commons, Ignore, NvimApi, NvimView, Tabs, and Workspace, all targeting macOS 14 and using Swift tools version 6.0. External dependencies have been updated, including Nimble to 14.0.0, SwiftLintPlugins to 0.62.2, MessagePack.swift to 5.0.0, BlueSocket to 2.1.0, material-icons to 0.2.0, and PureLayout to 3.1.9. Python requirements for build scripts have also been added.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.
Score
- CAI 35 → 59 (+24.0)
- Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 89 (-11.5)
- Architecture 99 (new)
- Maturity 38 → 49 (+10.8)
- Readiness 26 → 67 (+40.8)
- Security 29 → 77 (+48.5)
- Accessibility 58 (new)
Resolved (14)
- Dimension evaluation failed
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- High: security finding (details withheld)
- Medium: security finding (details withheld)
- Medium: security finding (details withheld)
- No automated tests
- No exposed public API
- No tests found
- Test reliability not included
New (212)
- Ambiguous connection parameters: socketPath and address are overloaded. In many networking contexts, 'address' can mean a hostname (string) or a socket path. Here, socketPath is explicit, but address is ambiguous and likely duplicates the intent of connecting to a Unix socket or TCP host without clear distinction in naming convention compared to host:port overloads.
- AppDelegate.handle (cognitive 22) (VimR/VimR/AppDelegate.swift)
- AppDelegate.handle (cyclomatic 21) (VimR/VimR/AppDelegate.swift)
- Boundary-crossing change coupling: NvimView.swift ↔ AdvancedPrefReducer.swift (NvimView/Sources/NvimView/NvimView.swift)
- Change coupling: AdvancedPrefReducer.swift ↔ MainWindow.swift (VimR/VimR/AdvancedPrefReducer.swift)
- Change coupling: DefaultShortcuts.swift ↔ ShortcutsPref.swift (VimR/VimR/DefaultShortcuts.swift)
- ClassTooLong: NvimView (NvimView/Sources/NvimView/NvimView.swift)
- Coverage not measured — Swift suite
- Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
- DraggingSingleRowStackView.reorder (cognitive 19) (Tabs/Sources/Tabs/DraggingSingleRowStackView.swift)
- Duplicate intent across synchronous/asynchronous variants: NvimApi and NvimApiSync expose identical sendRequest signatures. While one is async and one is sync, the naming does not reflect this distinction (e.g., sendRequestAsync vs sendRequestSync), which can lead to confusion about which API to use for blocking operations.
- Duplicated block (10 lines × 2) (NvimView/Sources/NvimView/NvimView+UiBridge.swift)
- Duplicated block (11 lines × 2) (NvimView/Sources/NvimView/NvimView+MenuItems.swift)
- Duplicated block (11 lines × 2) (VimR/VimR/GeneralPref.swift)
- Duplicated block (11 lines × 2) (VimR/VimR/PrefMiddleware.swift)
- Duplicated block (11 lines × 3) (VimR/VimR/AdvencedPref.swift)
- Duplicated block (12 lines × 2) (NvimApi/Sources/NvimApi/NvimApi.swift)
- Duplicated block (12 lines × 2) (VimR/VimR/AdvencedPref.swift)
- Duplicated block (12 lines × 2) (VimR/VimR/BufferList.swift)
- Duplicated block (13 lines × 2) (Workspace/Sources/Workspace/WorkspaceBar.swift)
- …and 192 more
Changes since last survey
- 11 commits — 9 feature/other, 2 fixes
By area
- (root) — 3 commits
- VimR/VimR — 2 commits
- resources/release-notes.md — 2 commits
- (repo) — 1 commit
- NvimApi/Sources — 1 commit
- NvimView/Sources — 1 commit
- bin/neovim — 1 commit
Notable commits
- fix: Bugfix MsgpackRpc error handler
- fix: Merge pull request #1170 from lukeasrodgers/bugfix-unpack-race
- change: Bump version to v0.66.0-20260827.194249
- change: Bump version to v0.66.1-20260920.105849
- change: Generate sources
- change: Update appcast
- change: Update appcast
- change: Update build info
- change: Update neovim
- change: Update release notes
- change: Update release notes
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
qvacua/vimr was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 27 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit ad069d307c57656f4225a8f4e0090e95679b0e66 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-d00c643c3f66.