Skip to content
tkleisasPublic

About

An IDE for Windows and Linux

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

Β 

History

267 Commits

Folders and files

Repository files navigation

NVS β€” No Vim Substitute

We're honest about it.

A cross-platform IDE built with .NET 10 and AvaloniaUI β€” proudly assembled using AI-Sloptronicβ„’ technology, where every line of code was generated with the unwavering confidence of a machine that has never once questioned whether a PatchEntryChanges type actually has a Hunks property. (It didn't.)

Build License: MIT .NET 10 Avalonia 12 Version Tests AI Slop


NVS Screenshot

What Is This?

NVS is a code editor / IDE that:

  • Does not replace Vim. We cannot stress this enough.
  • Runs on Windows, macOS, and Linux (thanks Avalonia).
  • Has language server support for 14+ languages with auto-completion and signature help.
  • Has Roslyn-powered C# intelligence: completions, hover, go-to-definition, references, rename, diagnostics, signature help, formatting β€” no external language server needed.
  • Has a built-in PTY terminal that actually works.
  • Has git integration that will absolutely let you force-push to main.
  • Has .NET solution/project loading with full build integration.
  • Has DAP-based debugging with breakpoints, call stack, and variable inspection.
  • Has a Test Explorer that discovers and runs your tests without leaving the editor.
  • Has an AI chat assistant that can read and modify your project files.
  • Has a NuGet package manager, a multi-database explorer (SQLite, PostgreSQL, SQL Server, Oracle), and a built-in HTTP API client.
  • Has Roslyn-based code metrics with gutter indicators and a dashboard panel.
  • Has Docker/Podman support: container management, Dockerfile scaffolding, and image builds.
  • Supports multi-project solutions with startup project selection.
  • Can be launched from the command line: nvs mysolution.sln or nvs ./myproject/.
  • Was built in a series of increasingly ambitious "phases" by a human and an AI who kept saying "let's continue."
  • Has 1434 tests, which is 1434 more than the AI thought were necessary before the human insisted.

What's New in 1.0.0

The first stable release. Highlights beyond the 0.x line:

  • Test Explorer β€” discover, run, and navigate tests (xUnit/NUnit/MSTest) with a results tree, per-node durations, re-run-failed, and failure details. Self-hosting aware.
  • Document symbols outline β€” live namespace β†’ type β†’ member tree of the active file (View β†’ Symbols), Roslyn for C#, LSP for everything else.
  • Rename symbol (F2) β€” solution-wide rename via Roslyn Renamer (LSP fallback) with a name prompt.
  • Command palette (Ctrl+Shift+P) β€” fuzzy access to every command in the IDE.
  • Inline AI edit (Ctrl+I) β€” describe a change over a selection, preview the diff, apply or discard. Plus AI commit messages generated from the staged diff.
  • Debugging that actually works everywhere β€” console (startup-hook attach), GUI (direct DAP launch), and web (launch profile + URL scrape) paths all verified; netcoredbg auto-downloads on first use.
  • Breakpoints persist β€” stored per workspace (.nvs/breakpoints.json), restored on open.
  • Configurable build output β€” Settings β†’ Build: Default (per-project bin), Auto (shadow when self-hosting), Custom (your directory). One resolver drives build, run, debug, and test β€” so building/debugging the solution NVS itself is running from just works.
  • Copy to Output Directory β€” Solution Explorer file context menu (Always / If newer / Never), like the Visual Studio file property.
  • Containers β€” Docker/Podman panel: containers, images, logs, Dockerfile scaffolding, image builds.
  • Faster β€” parallel test discovery (~2Γ—), frame-coalesced terminal rendering, batched build output.
  • Greener β€” 1434 tests passing on Windows and Linux, with the flaky native suites properly isolated.

Features

πŸ–ŠοΈ Editor

  • Syntax highlighting for 16 languages (C#, C/C++, TypeScript, JavaScript, Python, Rust, Go, Java, PHP, JSON, HTML, CSS, YAML, Markdown, TOML, XML)
  • Undo/Redo, Find & Replace (Ctrl+Z, Ctrl+Y, Ctrl+F)
  • Multi-tab editing with dirty indicators, line/column tracking
  • Right-click context menu (Cut, Copy, Paste, Select All, Go to Definition)
  • Dockable panels via Dock.Avalonia β€” drag, split, and rearrange
  • Bracket matching β€” highlights matching () {} [] at caret position
  • Code folding β€” brace-based folding for C-style languages, indentation-based for Python/YAML
  • Minimap β€” scaled document overview with viewport indicator, click-to-scroll
  • Split editor β€” vertical/horizontal split (Ctrl+\, context menu, View menu)
  • Multiple cursors β€” Ctrl+D for next occurrence, Ctrl+Alt+Up/Down to add cursor above/below, Escape to clear
  • Command palette β€” Ctrl+Shift+P, fuzzy search over every command in the IDE (including test runs and container scaffolding)
  • Compiled bindings for that sweet, sweet performance

🧠 Language Server Protocol (LSP) & Roslyn

  • Roslyn-powered C# language service β€” completions (including . trigger), hover tooltips, go-to-definition, find references, document symbols, rename symbol (F2) with preview prompt, diagnostics, signature help, and document formatting β€” all via in-process MSBuildWorkspace with no external server
  • Document symbols outline (View β†’ Symbols) β€” live namespace β†’ type β†’ member tree of the active file with per-kind icons, line numbers, and click/double-click navigation; Roslyn for C#, LSP for everything else
  • Full JSON-RPC 2.0 transport layer for non-C# languages
  • Auto-completion with trigger characters (., <, :) and debounced identifier completion
  • Signature help / parameter info on ( and ,
  • Go to Definition (F12)
  • Code Actions / Quick Fixes (Ctrl+.)
  • Inline diagnostics with squiggly underlines
  • Incremental document sync (textDocument/didChange)
  • Language servers that aren't installed are skipped quietly instead of failing loudly on every keystroke
  • 14 open-source language servers, installable from Settings:
Server Languages Install
csharp-ls C# dotnet tool
clangd C, C++ Manual download
typescript-language-server TypeScript, JavaScript npm
pylsp Python pip
rust-analyzer Rust Manual download
gopls Go go install
jdtls (Eclipse JDT.LS) Java Manual download
phpactor PHP composer
vscode-json-language-server JSON npm
vscode-html-language-server HTML npm
vscode-css-language-server CSS/SCSS/LESS npm
yaml-language-server YAML npm
marksman Markdown Manual download
taplo TOML cargo

πŸ“Š Code Metrics & Linting

  • Roslyn-based code metrics analysis (cyclomatic complexity, maintainability index, lines of code)
  • Code Metrics Dashboard panel with project β†’ file β†’ type β†’ method tree view
  • Severity indicators: 🟒 healthy, 🟑 moderate, πŸ”΄ complex
  • Inline gutter dots next to methods colored by complexity
  • Status bar shows current method metrics at cursor position
  • Analyze entire workspace or individual files

πŸ”€ Git Integration

  • Repository status, staging, unstaging
  • Commit with message (the AI suggested "fix stuff" for every commit message)
  • AI commit messages β€” one click generates a real message from the staged diff (infinitely better than "fix stuff")
  • Amend last commit β€” edit the most recent commit message or contents
  • Branch management (create, checkout, delete, list)
  • Commit log
  • Side-by-side diff viewer β€” click any changed file to see additions (green) and deletions (red) in a split view, supports both staged and unstaged diffs
  • Merge conflict resolution β€” 3-pane resolver with Accept Current / Accept Incoming / Accept Both per conflict block
  • Partial (hunk) staging β€” stage or unstage individual hunks via git apply --cached
  • Reset, Rebase β€” soft/mixed/hard reset, interactive rebase onto branch
  • Diff viewer with unified patch parsing β€” implemented on the third attempt after the AI hallucinated two different diff libraries that don't exist
  • Source Control sidebar panel
  • Branch picker in the status bar

πŸ’» Terminal

  • Built-in PTY terminal panel (Ctrl+`) via Porta.Pty (ConPTY on Windows, native PTY elsewhere)
  • Cross-platform shell detection (pwsh β†’ PowerShell β†’ cmd on Windows; $SHELL on Unix)
  • Multiple terminal instances β€” for when one terminal full of errors isn't enough
  • Frame-coalesced rendering β€” a flood of build output no longer floods the UI thread
  • Configurable fonts (MesloLGM Nerd Font etc.)

πŸ—οΈ Solution & Build

  • Open .sln, .slnx, and .csproj files
  • Multi-project solution support with correct tree structure
  • Solution Explorer tree with project structure and file icons
  • Startup project selection β€” toolbar dropdown or right-click β†’ "Set as Startup Project"
  • Build, Rebuild, Clean (Ctrl+Shift+B)
  • Run without debugging (Ctrl+F5) β€” GUI apps launch as detached windows, console apps run in terminal, web apps run with the selected launch profile (dotnet run --launch-profile) and auto-open a browser
  • Web application run/debug β€” launchSettings.json parsing, launch-profile selector (toolbar dropdown + Settings β†’ Web / Launch), cross-platform browser launch, and live "Now listening on:" URL scraping for the debug browser launch (with a static fallback)
  • Build Output panel with auto-scroll, MSBuild error parsing, and batched line rendering
  • Problems panel with click-to-navigate diagnostics
  • Configurable build output β€” Settings β†’ Build: Default (standard bin/), Auto (shadow directory when self-hosting), or a Custom directory; build, run, debug, and test all follow one resolver
  • Self-hosting works β€” build, run, debug, and test the very solution NVS is running from; locked binaries are redirected to a shadow output instead of failing
  • Copy to Output Directory β€” right-click a file in Solution Explorer β†’ Always / If newer / Never (writes CopyToOutputDirectory metadata to the project, like the Visual Studio file property)
  • New project / file-from-template scaffolding via dotnet new, Maven, and Composer
  • Add existing project to solution

πŸ› Debugging (DAP)

  • Debug Adapter Protocol client with Content-Length framed transport
  • netcoredbg auto-downloaded on first use (~3 MB) β€” no manual install needed. The AI tried to implement a debugger from scratch before the human said "just use netcoredbg"
  • Java debugging via java-debug (JDT.LS plugin, EPL-1.0)
  • PHP debugging via vscode-php-debug (Node.js DAP↔Xdebug bridge, MIT)
  • Start Debugging (F5), Stop (Shift+F5)
  • Step Over (F10), Step Into (F11), Step Out (Shift+F11)
  • Toggle Breakpoint (F9) with red gutter markers
  • Breakpoints persist across sessions β€” stored per workspace in .nvs/breakpoints.json
  • Call Stack panel with frame navigation
  • Variables panel with expandable tree view (lazy-loaded children)
  • Debug output streamed to Build Output panel
  • Debug toolbar with visual step controls
  • Console apps debug in the integrated terminal via a two-phase startup-hook handshake (breakpoints re-sync after module load); GUI apps debug directly

πŸ§ͺ Test Explorer

  • Auto-discovers tests in every test project on solution load β€” any VSTest-compatible framework (xUnit, NUnit, MSTest)
  • Project β†’ namespace β†’ class β†’ test tree with pass/fail/skip icons, per-node durations, and outcomes aggregated up the tree
  • Run All (Build β†’ Run All Tests or the toolbar), re-run failed, run selected scope (project, namespace, class, or a single test)
  • Results parsed from TRX: double-click a test to jump to its source line; the details pane shows the error message and stack trace for failures
  • Theory/parameterized cases tracked per case (matched by display name); projects run one-by-one and merge β€” a solution-wide dotnet test would overwrite one shared TRX file per project
  • Self-hosting aware: when NVS tests the solution it's running from, it builds to and tests from a shadow output directory (see Settings β†’ Build)
  • Parallel project discovery (~2Γ— faster on multi-project solutions)

πŸ’¬ LLM Chat Assistant

  • Built-in AI chat panel with streaming responses
  • Any OpenAI-compatible endpoint (OpenAI, OpenRouter, DeepSeek, Ollama, LM Studio)
  • Task modes: General, Coding, Debugging, Testing β€” each with tailored system prompts
  • 12 agent tools: file read/write, search, terminal commands, git status/diff, build, test, diagnostics, and editor integration
  • Chat session persistence β€” conversations saved to SQLite per workspace, survive restarts, create/switch/delete sessions via dropdown
  • Code block highlighting β€” assistant responses render code blocks with syntax highlighting, copy and apply-to-editor buttons
  • Context enrichment β€” attach files (πŸ“Ž), auto-includes open files, diagnostics, git branch/status in prompts
  • Vision/image support β€” attach images (πŸ“·) for multimodal models, base64 data URI encoding
  • Inline ghost-text completions β€” LLM-powered code suggestions appear as dimmed text after cursor, accept with Tab, dismiss with Escape
  • Inline AI edit (Ctrl+I) β€” select code, describe the change in one line, preview the proposed diff, apply or discard
  • Configurable model, temperature, max iterations, and prompt templates
  • Yes, we built an AI-powered IDE using AI. It's slop all the way down.

πŸ“¦ NuGet Package Manager

  • Browse, search, and install packages from nuget.org
  • View installed packages per project
  • Check for and apply updates
  • Uninstall and restore packages
  • Project selector for multi-project solutions

πŸ—„οΈ Database Explorer

  • Embeds the SQLiteExplorer component as a document tab (View β†’ Database Explorer, or the Database menu) β€” it lives next to your code, not in a cramped bottom panel
  • Multi-engine: SQLite (.db/.sqlite/.sqlite3 files), PostgreSQL, SQL Server, and Oracle via connection dialogs
  • Browse tables, views, and schemas in the object tree
  • Run SQL in query tabs; results render in a high-performance virtualized data grid
  • AI integration: ask questions in natural language, SQL completion at the caret, explain/optimize queries, analyze results β€” all powered by the NVS LLM settings (no separate configuration)
  • Excel reports: build report queries in a wizard (by hand or AI-generated), save them per-workspace (.nvs/reports.json), and regenerate formatted .xlsx output anytime (ClosedXML)
  • The Database top menu surfaces all explorer commands natively (connections, query tabs, AI, reports)
  • Caused a docking crash that took longer to fix than the entire feature took to build. Classic.

🌐 API Client

  • Embeds the ApiClient component as a document tab (View β†’ API Client, or the API Client menu) β€” a Postman/Bruno-style HTTP client, fully offline, no account required
  • File-based collections (one plain-text file per request, git-friendly); imports Bruno collections
  • Full request editor (method, URL, params, headers, body, auth) with status/timing/size on the response
  • Response viewer with syntax highlighting and a virtualized tabular view for large JSON arrays; request history with replay
  • Environments and {{variable}} substitution, keeping secrets out of version control
  • Code generation (C#-first: HttpClient, Refit, RestSharp; JSON β†’ records) and pre/post-request JavaScript scripting (Jint) with req/res/bru/crypto and test/expect
  • AI integration: build requests from natural-language descriptions, analyze responses, and generate post-response test scripts β€” powered by the NVS LLM settings

🐳 Containers (Docker / Podman)

  • Engine auto-detection (docker or podman CLI) with live container and image lists
  • Start / stop / remove containers, view logs, run images
  • Dockerfile scaffolding β€” generate a ready-to-build Dockerfile per project (or all projects at once), plus docker-compose file creation
  • Image builds straight from the panel; scaffold and build are also reachable from the command palette
  • View β†’ Containers

❓ Help System

  • Welcome tab with getting started links and feature overview
  • Searchable help panel (F1) with 15 built-in topics
  • Keyboard shortcuts reference
  • Contextual tooltips on all toolbar buttons
  • The help content was written by the AI, so it sounds very confident about features that were definitely not tested on macOS

βš™οΈ Settings

  • 7-section settings UI (General, Editor, Terminal, Language Servers, LLM, Web / Launch, Build)
  • 4 built-in themes: NVS Dark (default), NVS Light, Monokai, Solarized Dark
  • Live theme switching with no restart required
  • LLM configuration: endpoint, API key, model, temperature, streaming, prompt templates
  • Language server discovery, status, and one-click install
  • Window state persistence (size, position, maximized)
  • Settings persisted to %APPDATA%/NVS/settings.json

⚠️ Prerequisite Warnings

  • Automatic detection of missing SDKs/runtimes when opening a workspace
  • Scans workspace files to detect languages in use
  • Checks PATH for required binaries (dotnet, java, node, python, php, go, rustc, gcc)
  • Shows dismissible info bars with install hints

πŸ“ Explorer

  • File tree with type-specific icons (🟒 C# Β· πŸ”΅ C++ Β· 🟑 JS Β· πŸ”· TS Β· 🐍 Python Β· πŸ¦€ Rust Β· and more)
  • Compact indentation with expand/collapse state
  • Double-click to open files
  • Right-click context menu: New File, New Folder, Delete, Set as Startup Project

πŸ–₯️ Command Line

  • Open a solution: nvs path/to/solution.sln
  • Open a folder: nvs path/to/project/
  • Open a file: nvs path/to/file.cs
  • CLI argument takes precedence over session restore

πŸ€– UI Automation (embedded TCP server)

For UI testing, screenshots and scripting, NVS can start a loopback-only JSON-lines automation server:

nvs --automation-port 5050
# or: set NVS_AUTOMATION_PORT=5050

Commands: ping, state (workspace/dock state), tree (visual-tree dump, optionally scoped to one control with --control), screenshot (whole window or a control by name/automation id), command (invoke any MainViewModel command by name), menu (invoke a menu item by header path), open-solution, open-file, activate (open a panel/document), set-text.

python tools/automation_client.py screenshot --path shot.png --control DatabaseTreeView
python tools/automation_client.py tree --control SymbolsPanel --max-depth 30
python tools/automation_client.py command --name ShowDatabaseExplorer
python tools/automation_client.py menu --path "Database/Ask AI..."

The server binds to 127.0.0.1 only and is never started unless requested. Protocol: one JSON request per line β†’ one JSON response per line β€” see tools/automation_client.py for the shape.

Architecture

NVS (UI)  β†’  NVS.Services / NVS.Infrastructure  β†’  NVS.Core
                                                      NVS.Plugins
Project Role
NVS.Core Interfaces and models only. No implementations. The Switzerland of the codebase.
NVS.Services All the actual work: Editor, FileSystem, Workspace, Language, LSP, Git, Terminal, Settings, Solution, Build, Debug, Testing, LLM, NuGet, Code Metrics. The load-bearing wall of this house of cards.
NVS.Infrastructure DI registration, Serilog logging config.
NVS.Plugins Plugin loading via AssemblyLoadContext. Currently quiet. Suspiciously quiet.
NVS The Avalonia UI app β€” ViewModels, Views, Behaviors, and the DI composition root.

Getting Started

Prerequisites

  • .NET 10 SDK
  • Git (for version stamping)
  • A willingness to use an IDE built by a machine that once tried to using LibGit2Sharp.Hunks with zero remorse

Build & Run

# Build
dotnet build NVS.slnx

# Run
dotnet run --project src/NVS

# Open a solution directly
dotnet run --project src/NVS -- path/to/solution.sln

# Run tests (1415 of them)
dotnet test NVS.slnx

There is no separate lint command. Code style is enforced at build time via TreatWarningsAsErrors, EnforceCodeStyleInBuild, and the .NET analyzers β€” plus a theme-color lint test that keeps hardcoded hex colors out of the views. If it builds, it's "lint-passing." If it doesn't build, well, that's a different kind of feedback.

Run a Single Test

dotnet test NVS.slnx --filter "FullyQualifiedName~GitServiceParsePatchTests.ParsePatch_MixedChanges"

Downloads

Self-contained builds (no .NET runtime needed) are published on each tagged release:

Platform Archive
Windows x64 nvs-win-x64.zip
Linux x64 nvs-linux-x64.tar.gz
macOS x64 nvs-osx-x64.tar.gz
macOS ARM64 nvs-osx-arm64.tar.gz

See Releases for downloads.

To create a release, tag a commit and push:

git tag v0.5.0
git push origin v0.5.0

Tech Stack

Component Technology
UI Framework AvaloniaUI 12.0
Text Editor AvaloniaEdit 12.0
Docking Dock.Avalonia 12.0
Terminal Porta.Pty (ConPTY/native PTY)
Database Explorer SQLiteExplorer (embedded, multi-engine)
API Client ApiClient (embedded)
MVVM CommunityToolkit.Mvvm 8.4
Git LibGit2Sharp 0.31
Code Metrics Microsoft.CodeAnalysis (Roslyn)
C# Language Service Microsoft.CodeAnalysis (Roslyn MSBuildWorkspace)
Test Runner dotnet test + TRX parsing (xUnit, NUnit, MSTest)
Debugging netcoredbg (MIT, auto-downloaded)
Java Debug java-debug (EPL-1.0, JDT.LS plugin)
PHP Debug vscode-php-debug (MIT, Node.js)
Logging Serilog 4.2
Runtime .NET 10 (preview)
Theme Fluent Dark/Light + 4 built-in themes (NVS Dark, NVS Light, Monokai, Solarized Dark)
Testing xUnit + FluentAssertions + NSubstitute

Testing

1434 tests across 4 test projects. Every single one demanded by the human, who apparently doesn't trust code written by a language model. Can't imagine why.

  • NVS.Core.Tests β€” Core model tests
  • NVS.Plugins.Tests β€” Plugin system tests
  • NVS.Services.Tests β€” EditorService, LanguageService, LSP, Git, Terminal, Registry, Solution, Build, DAP, Debug, Breakpoints, LLM Agent Tools, Inline Completions, Chat Sessions, NuGet, Code Metrics, Test Explorer (discovery/TRX parsing, self-host detection)
  • NVS.Tests β€” ViewModel tests (Editor, Document, Settings, MainViewModel, Build/Run, LLM Chat, NuGet, Help, Welcome, Test Explorer, Symbols outline, Terminal, Build Output, Automation server) and the theme-color lint guard

Test naming convention: MethodName_Scenario_ExpectedOutcome

[Fact]
public void ParsePatch_MixedChanges_ParsesAllLineTypes()
{
    // ...
}

Versioning

  • Version lives in Directory.Build.props
  • Informational version appends the short git commit hash (e.g., 0.4.4+a3f72b1)
  • Patch bumps on each commit, minor bumps on feature completion
  • Viewable in Help β†’ About

License

MIT β€” see LICENSE for details.


NVS: Because the world needed another text editor, and we were too far in to stop.
Built with ❀️ and approximately 47 "retry" commands.

About

An IDE for Windows and Linux

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages