{"id":45400354,"url":"https://github.com/ckob/lazydotnet","last_synced_at":"2026-04-01T19:59:29.507Z","repository":{"id":337891747,"uuid":"1134542474","full_name":"ckob/lazydotnet","owner":"ckob","description":"A TUI for managing dotnet solutions and projects","archived":false,"fork":false,"pushed_at":"2026-03-20T18:17:05.000Z","size":57126,"stargazers_count":105,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-03-21T08:21:18.778Z","etag":null,"topics":["csharp","dotnet","tui"],"latest_commit_sha":null,"homepage":"https://www.nuget.org/packages/lazydotnet","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ckob.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-01-14T21:29:58.000Z","updated_at":"2026-03-21T08:15:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ckob/lazydotnet","commit_stats":null,"previous_names":["ckob/lazydotnet"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/ckob/lazydotnet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckob%2Flazydotnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckob%2Flazydotnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckob%2Flazydotnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckob%2Flazydotnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ckob","download_url":"https://codeload.github.com/ckob/lazydotnet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ckob%2Flazydotnet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31291333,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T13:12:26.723Z","status":"ssl_error","status_checked_at":"2026-04-01T13:12:25.102Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csharp","dotnet","tui"],"created_at":"2026-02-21T20:06:21.851Z","updated_at":"2026-04-01T19:59:29.499Z","avatar_url":"https://github.com/ckob.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lazydotnet\n\nA terminal-based UI for managing .NET solutions and projects, inspired by [lazygit](https://github.com/jesseduffield/lazygit).\n\nlazydotnet provides an interactive, keyboard-driven interface for common .NET development tasks. Navigate your solution structure, build and run projects, manage NuGet packages, and run tests—all without leaving your terminal.\n\n![Test Details](docs/assets/tests.png)\n\nhttps://github.com/user-attachments/assets/758228fc-582a-4820-9672-97bda2050562\n\n**Important:** This project does **not** include LSP (Language Server Protocol) functionality or debugging capabilities. It focuses on solution/project management and execution tasks.\n\n## Requirements\n\n- [.NET 10 runtime](https://dotnet.microsoft.com/download/dotnet/10.0) or later\n\n## Installation\n\n```bash\ndotnet tool install --global lazydotnet\n```\n\nTo update to the latest version:\n\n```bash\ndotnet tool update --global lazydotnet\n```\n\n### Optional Dependencies\n\nFor the NuGet package update features (checking for outdated packages and updating all packages), install [dotnet-outdated](https://github.com/dotnet-outdated/dotnet-outdated):\n\n```bash\ndotnet tool install --global dotnet-outdated-tool\n```\n\n## Usage\n\n```bash\n# Open current directory (auto-detects solution)\nlazydotnet\n\n# Open specific solution\nlazydotnet MySolution.sln\n\n# Open specific project\nlazydotnet --project MyProject.csproj\n\n# Open specific directory\nlazydotnet /path/to/project\n\n# Open with explicit solution file\nlazydotnet -s MySolution.sln\n```\n\n## Features\n\n### Solution Explorer\n\n- **Hierarchical tree view** of your solution structure\n- Navigate projects and nodes with vim-style keybindings (`j`/`k`) or arrow keys\n- Expand/collapse nodes and project groups\n- Visual indicators for running projects with `[green](R)[/]` marker\n- Supports `.sln`, `.slnx`, `.slnf`, and `.csproj` files\n\n### Project Management\n\n- **Build** individual projects or the entire solution (`b` / `B`)\n- **Run** projects with live log streaming (`r`)\n- **Stop** running project (`s`)\n- **Edit** project files in the editor (`e`)\n\n### Project References Tab\n\n![Project References Tab](docs/assets/references.png)\n\n- View all project references for the selected project\n- **Add** new project references from a picker dialog (`a`)\n- **Remove** existing references with confirmation (`d`)\n- Jump to referenced projects in the explorer (`Enter`)\n- Open referenced projects in your editor (`e`)\n\n### NuGet Packages Tab\n\n![NuGet Packages Tab](docs/assets/nugets.png)\n\n- View all NuGet packages with current and latest versions\n- **Color-coded version indicators:**\n  - Green: Patch update available (safe)\n  - Yellow: Minor update available (non-breaking)\n  - Red: Major update available (potentially breaking)\n- **Add** new packages via search dialog (`a`)\n- **Update** individual packages to latest version (`u`)\n- **Update all** outdated packages with strategy selection (`U`)\n  - Patch (Safe): Bug fixes only\n  - Minor (Non-breaking): New features\n  - Major (Breaking): Upgrade everything\n- **Remove** packages (`d`)\n- **Version picker** with available versions (`Enter`)\n\n### Tests Tab\n\n![Test Details](docs/assets/test-detail.png)\n\n- **Automatic test discovery** for all test providers (xUnit, NUnit, MSTest, etc.)\n- **Dual protocol support**: VSTest (legacy) and Microsoft Testing Platform (MTP)\n- Hierarchical test tree view (namespaces → classes → methods)\n- **Run** individual tests, test classes, or entire namespaces (`r`)\n- **Filter tests** by status (`f`): All, Running, Failed, or Passed\n- **View test details** including error messages, stack traces, and output (`Enter`)\n- Navigate to test source code (`e`)\n\n### Execution Tab\n\n![Execution Tab](docs/assets/execution.png)\n\n- **Live log streaming** from running projects\n- Auto-scroll to latest output (can be paused)\n- Navigate log history with `j`/`k` or arrow keys\n- **Run** the current project (`r`)\n- **Stop** the running project (`s`)\n- **Clear** execution logs (`c`)\n- Resume auto-scroll with `Esc`\n\n### Workspace Management\n\n![Workspace Selector](docs/assets/workspace-selector.png)\n\n- Switch between different solutions in the same directory\n- Solution picker dialog for directories with multiple `.sln` files\n- Support for solution filters (`.slnf`) and XML-based solutions (`.slnx`)\n\n### Editor Integration\n\n- Automatic in-editor detection: (Zed, VS Code, Cursor, etc)\n- Open project files, test files\n- Line number navigation for test failures\n\n### Global Features\n\n![Keybindings Help](docs/assets/keybindings.png)\n\n- **Panel navigation:** `Tab` / `Shift+Tab` or number keys `0-3`\n- **Reload** current project/solution data (`Ctrl+R`)\n- **Keybindings help** (`?`) showing context-sensitive shortcuts\n- **Build solution** (`Shift+B`)\n- **Stop all running projects** (`Shift+S`)\n\n### Search\n\nSearch is available in some panels.\n\n| Key     | Action                                  |\n| ------- | --------------------------------------- |\n| `/`     | Start search (when on searchable panel) |\n| `Enter` | Execute search and show matches         |\n| `n`     | Next match                              |\n| `N`     | Previous match                          |\n| `Esc`   | Exit search mode                        |\n\n- Search is **per-panel**: switching panels preserves each panel's search state\n- Matches are **highlighted**\n\n## Keybindings\n\n### Global\n\n| Key         | Action                                                      |\n| ----------- | ----------------------------------------------------------- |\n| `q`         | Quit                                                        |\n| `?`         | Show keybindings help                                       |\n| `Tab`       | Next panel                                                  |\n| `Shift+Tab` | Previous panel                                              |\n| `0-3`       | Switch to panel (0=Details, 1=Workspace, 2=Explorer, 3=Log) |\n| `B`         | Build solution                                              |\n| `S`         | Stop all running projects                                   |\n| `Ctrl+R`    | Reload                                                      |\n\n### Explorer Panel\n\n| Key               | Action                    |\n| ----------------- | ------------------------- |\n| `j` / `↓`         | Move down                 |\n| `k` / `↑`         | Move up                   |\n| `Ctrl+D` / `PgDn` | Page down                 |\n| `Ctrl+U` / `PgUp` | Page up                   |\n| `h` / `←`         | Collapse node             |\n| `l` / `→`         | Expand node               |\n| `Enter` / `Space` | Toggle expand/collapse    |\n| `e`               | Edit in editor            |\n| `b`               | Build selected project(s) |\n| `r`               | Run selected project(s)   |\n| `s`               | Stop selected project     |\n\n### Details Panel (Tabs)\n\n| Key | Action       |\n| --- | ------------ |\n| `[` | Previous tab |\n| `]` | Next tab     |\n\n#### Project References Tab\n\n| Key       | Action                    |\n| --------- | ------------------------- |\n| `j` / `k` | Navigate references       |\n| `a`       | Add reference             |\n| `d`       | Remove selected reference |\n| `e`       | Edit referenced project   |\n| `Enter`   | Select in explorer        |\n\n#### NuGet Tab\n\n| Key       | Action                       |\n| --------- | ---------------------------- |\n| `j` / `k` | Navigate packages            |\n| `a`       | Add package                  |\n| `u`       | Update selected package      |\n| `U`       | Update all outdated packages |\n| `d`       | Remove selected package      |\n| `Enter`   | Open version picker          |\n\n#### Tests Tab\n\n| Key       | Action                                         |\n| --------- | ---------------------------------------------- |\n| `j` / `k` | Navigate tests                                 |\n| `h` / `l` | Collapse/expand                                |\n| `Space`   | Toggle expand/collapse                         |\n| `f`       | Cycle filter (All → Running → Failed → Passed) |\n| `r`       | Run selected test(s)                           |\n| `e`       | Edit test file                                 |\n| `Enter`   | View test details                              |\n\n#### Execution Tab\n\n| Key       | Action             |\n| --------- | ------------------ |\n| `j` / `k` | Navigate log lines |\n| `r`       | Run project        |\n| `s`       | Stop project       |\n| `c`       | Clear logs         |\n| `Esc`     | Resume auto-scroll |\n\n#### Log Panel\n\n| Key               | Action                             |\n| ----------------- | ---------------------------------- |\n| `j` / `k`         | Navigate log lines                 |\n| `Ctrl+D` / `PgDn` | Page down                          |\n| `Ctrl+U` / `PgUp` | Page up                            |\n| `v`               | Toggle visual selection            |\n| `y`               | Yank (copy) selection to clipboard |\n| `Esc`             | Resume auto-scroll                 |\n\n## Configuration examples\n\n### Zed Integration\n\n\u003e lazydotnet is not a replacement for the [Zed c#](https://zed.dev/extensions/csharp) extension. It can complement it.\n\nAdd this task to your `.zed/tasks.json`:\n\n```json\n[\n  {\n    \"label\": \"lazydotnet\",\n    \"command\": \"lazydotnet\",\n    \"use_new_terminal\": false,\n    \"allow_concurrent_runs\": false,\n    \"reveal\": \"always\",\n    \"reveal_target\": \"center\",\n    \"hide\": \"always\",\n    \"shell\": {\n      \"program\": \"sh\"\n    }\n  }\n]\n```\n\nThen add a keybinding to your `.zed/keymap.json`. For example:\n\n```json\n[\n  {\n    \"context\": \"Workspace\",\n    \"bindings\": {\n      \"cmd-shift-d\": [\n        \"task::Spawn\",\n        {\n          \"task_name\": \"lazydotnet\",\n          \"reveal_target\": \"center\"\n        }\n      ]\n    }\n  }\n]\n```\n\nNow you can launch lazydotnet with `Cmd+Shift+D` from Zed.\n\n\u003e For Vim mode users, you can use a more specific context like `\"context\": \"Editor \u0026\u0026 VimControl \u0026\u0026 !VimWaiting \u0026\u0026 !menu\"` and bind to `space . .` or any key combination you prefer.\n\n## Acknowledgments\n\n- This project is based on the idea of [lazygit](https://github.com/jesseduffield/lazygit).\n- Special thanks to [easy-dotnet](https://github.com/GustavEikaas/easy-dotnet.nvim) for the inspiration.\n- Built with [Spectre.Console](https://spectreconsole.net/) for beautiful terminal UI.\n\n## Alternatives\n\n- **[easy-dotnet.nvim](https://github.com/GustavEikaas/easy-dotnet.nvim)** - A Neovim plugin for .NET development.\n- **[DotRush](https://github.com/JaneySprings/DotRush)** - A VS Code extension alternative to C# Dev Kit that works in all VS Code forks.\n\n## License\n\nMIT License - See [LICENSE](LICENSE) for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckob%2Flazydotnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fckob%2Flazydotnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fckob%2Flazydotnet/lists"}