{"id":47278394,"url":"https://github.com/nickprotop/lazydotide","last_synced_at":"2026-04-17T23:15:34.990Z","repository":{"id":339930360,"uuid":"1163874754","full_name":"nickprotop/lazydotide","owner":"nickprotop","description":"LazyDotIDE - A lightweight console-based .NET IDE with LSP IntelliSense, built-in terminal, and git integration. Works over SSH, in containers, anywhere you have a console.","archived":false,"fork":false,"pushed_at":"2026-03-30T16:25:24.000Z","size":5812,"stargazers_count":7,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-02T09:31:40.631Z","etag":null,"topics":["cli","console","csharp","developer-tools","dotnet","dotnet-tool","editor","ide","intellisense","lsp","terminal","tui"],"latest_commit_sha":null,"homepage":null,"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/nickprotop.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":null,"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":null,"dco":null,"cla":null}},"created_at":"2026-02-22T09:39:36.000Z","updated_at":"2026-04-02T03:50:29.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/nickprotop/lazydotide","commit_stats":null,"previous_names":["nickprotop/lazydotide"],"tags_count":16,"template":false,"template_full_name":null,"purl":"pkg:github/nickprotop/lazydotide","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazydotide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazydotide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazydotide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazydotide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickprotop","download_url":"https://codeload.github.com/nickprotop/lazydotide/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2Flazydotide/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31494177,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-06T17:22:55.647Z","status":"ssl_error","status_checked_at":"2026-04-06T17:22:54.741Z","response_time":112,"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":["cli","console","csharp","developer-tools","dotnet","dotnet-tool","editor","ide","intellisense","lsp","terminal","tui"],"created_at":"2026-03-15T20:15:02.576Z","updated_at":"2026-04-07T00:01:45.793Z","avatar_url":"https://github.com/nickprotop.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# LazyDotIDE\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\".github/logo.svg\" alt=\"LazyDotIDE Logo\" width=\"600\"\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![NuGet](https://img.shields.io/nuget/v/LazyDotIDE?logo=nuget\u0026color=004880)](https://www.nuget.org/packages/LazyDotIDE)\n[![.NET](https://img.shields.io/badge/.NET-10.0-purple.svg)](https://dotnet.microsoft.com/)\n[![Platform](https://img.shields.io/badge/Platform-Linux%20|%20macOS%20|%20Windows-orange.svg)]()\n\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n### ⭐ If you find LazyDotIDE useful, please consider giving it a star! ⭐\n\nIt helps others discover the project and motivates continued development.\n\n[![GitHub stars](https://img.shields.io/github/stars/nickprotop/lazydotide?style=for-the-badge\u0026logo=github\u0026color=yellow)](https://github.com/nickprotop/lazydotide/stargazers)\n\n\u003c/div\u003e\n\n**A console-based .NET IDE built on [SharpConsoleUI](https://github.com/nickprotop/ConsoleEx).**\n\n**Edit. Build. Ship.**\n\n![Main Editor](docs/screenshots/main-editor.png)\n\n**[View more screenshots](docs/SCREENSHOTS.md)**\n\n## Why LazyDotIDE?\n\nSometimes you just want to stay in the terminal. Install it as a dotnet tool, and you get C# IntelliSense, git, build, test, and a shell — zero config, works anywhere you have a console.\n\n## Highlights\n\n- **LSP IntelliSense** — completions, go to definition, rename, code actions, diagnostics\n- **Multi-tab editor** — syntax highlighting for C#, JSON, XML, YAML, JS/TS, Razor, and more\n- **Built-in terminal** — full PTY shell in tabs, bottom panel, or side panel\n- **Git integration** — stage, commit, push, pull, diff, blame, branch management\n- **Build \u0026 test** — one-key build/run/test with click-to-navigate errors\n- **Zero config** — just `dotnet tool install` and go\n\nFor the full feature list, see [Features](#features) below.\n\n## Quick Start\n\n```bash\ndotnet tool install --global LazyDotIDE\nlazydotide /path/to/your/project\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/nickprotop/lazydotide.git\ncd lazydotide\ndotnet run -- /path/to/your/project\n```\n\nRun without arguments to open in the current directory.\n\n## Features\n\n### Editor\n- Multi-tab editing with dirty tracking and unsaved-changes prompts\n- Syntax highlighting for 12+ languages (C#, JSON, XML, YAML, Markdown, HTML, CSS, JavaScript/TypeScript, Razor, Dockerfile, Solution files, Diff)\n- Manual syntax override via menu\n- Find and replace (`Ctrl+F` / `Ctrl+H`)\n- Word wrap modes (no wrap, word wrap, char wrap)\n- Binary file detection (shown as non-editable)\n- External file change detection with reload prompt\n\n### IntelliSense / LSP\n- Auto-completions triggered on `.`, `(`, `,`, and after typing (also `Ctrl+Space`)\n- Go to definition (`F12`), go to implementation (`Ctrl+F12`), find all references (`Shift+F12`)\n- Rename symbol across files (`Ctrl+F2`)\n- Code actions (`Ctrl+.`)\n- Format document (`Alt+Shift+F`)\n- Hover / type info (`Ctrl+K`)\n- Signature help (`F2`, auto-triggers on `(` and `,`)\n- Real-time diagnostics (errors/warnings in status bar and problems panel)\n- Document symbols in side panel (`Alt+O`)\n- Navigation history with navigate back (`Alt+Left`)\n\n### Git\n- Stage, unstage, commit, push, pull, stash (with message), stash pop\n- Branch listing, create branch, switch branch\n- Diff (working directory, staged, full)\n- Blame (per-line: SHA, author, date)\n- Repository log and per-file log with commit detail view\n- Gutter diff markers in editor (green/yellow/red for added/modified/deleted)\n- Real-time status bar (branch, ahead/behind, M/A/D counts)\n- Explorer badges per file (`M`, `A`, `D`, `U`, `R`, `!`, `I`)\n- Gitignore support (add/remove paths, dimmed display in explorer)\n- Discard changes\n- Source control side panel with interactive staged/unstaged file list\n\n### Build \u0026 Run\n- Build (`F6`), test (`F7`), clean, run (`F5`) with colorized output\n- Stop running process (`F4`)\n- Problems panel with click-to-navigate on build errors/warnings\n- Auto-detects `.csproj`, `.fsproj`, `.sln` build targets\n\n### Terminal\n- Bottom shell in output panel (`F8`)\n- Editor tab shell (via menu)\n- Side panel shell (`Shift+F8`)\n- Full PTY support for interactive programs\n- Multiple concurrent shell instances\n\n### File Explorer\n- Tree view with expand/collapse\n- Git status badges and directory change indicators\n- Gitignore dimming for ignored files\n- Context menus (new file/folder, rename, delete, git operations)\n- File watcher for automatic refresh on external changes\n\n### NuGet\n- [LazyNuGet](https://github.com/nickprotop/LazyNuGet) integration (`F9`) when installed\n- Built-in add package dialog as fallback\n\n### Workspace Persistence\nSaved to `.lazydotide.workspace` in the project root on exit, restored on startup:\n- Open files with cursor positions\n- Panel visibility and column widths\n- Split ratios and word wrap mode\n- Explorer expanded nodes and selected path\n\n### Custom Tools\nConfigure external tools in `config.json` — each tool appears in the Tools menu and command palette with options to open in a tab, bottom shell, or side panel.\n\n### Command Palette\n`Ctrl+P` opens a searchable palette of all commands, organized by category (File, Edit, Build, Run, View, Git, LSP, Terminal, NuGet, Tools, Help). Custom tools are included dynamically.\n\n---\n\n## Keyboard Shortcuts\n\n### File\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+S` | Save current file |\n| `Ctrl+W` | Close current tab |\n| `Ctrl+N` | New file |\n| `Ctrl+Shift+N` | New folder |\n| `F2` | Rename (explorer focused) |\n| `Delete` | Delete (explorer focused) |\n| `Alt+Shift+R` | Reload file from disk |\n| `Alt+F4` | Exit |\n\n### Build \u0026 Run\n\n| Key | Action |\n|-----|--------|\n| `F5` | Run project |\n| `F6` | Build |\n| `F7` | Run tests |\n| `F4` | Stop |\n\n### View\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+B` | Toggle file explorer |\n| `Ctrl+J` | Toggle output panel |\n| `Alt+;` | Toggle side panel |\n| `Ctrl+P` | Command palette |\n\n### Search\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+F` | Find / Replace |\n| `Ctrl+H` | Find / Replace |\n\n### LSP / IntelliSense\n\n| Key | Action |\n|-----|--------|\n| `Ctrl+Space` | Show completions |\n| `F12` | Go to definition |\n| `Ctrl+F12` | Go to implementation |\n| `Shift+F12` | Find all references |\n| `Ctrl+F2` | Rename symbol |\n| `Ctrl+.` | Code actions |\n| `Ctrl+K` | Hover / type info |\n| `F2` | Signature help |\n| `Alt+Shift+F` | Format document |\n| `Alt+O` | Document symbols |\n| `Alt+Left` | Navigate back |\n\n### Git\n\n| Key | Action |\n|-----|--------|\n| `Alt+G` | Source control panel |\n| `Ctrl+Enter` | Commit |\n\n### Terminal\n\n| Key | Action |\n|-----|--------|\n| `F8` | Shell in output panel |\n| `Shift+F8` | Shell in side panel |\n| `F9` | LazyNuGet (or NuGet dialog) |\n\n---\n\n## Syntax Highlighting\n\n| Language | Extensions |\n|----------|-----------|\n| C# | `.cs` |\n| JSON | `.json` |\n| XML | `.xml`, `.csproj`, `.fsproj`, `.vbproj`, `.props`, `.targets` |\n| YAML | `.yml`, `.yaml` |\n| Markdown | `.md` |\n| HTML | `.html`, `.htm` |\n| CSS | `.css` |\n| JavaScript / TypeScript | `.js`, `.jsx`, `.mjs`, `.cjs`, `.ts`, `.tsx`, `.mts`, `.cts` |\n| Razor | `.razor`, `.cshtml` |\n| Dockerfile | `Dockerfile`, `Dockerfile.*` |\n| Solution | `.sln` |\n| Diff | (used in git diff views) |\n\nSyntax can be manually overridden via the Edit menu.\n\n---\n\n## Configuration\n\nConfig file location:\n- **Linux/macOS**: `~/.config/lazydotide/config.json`\n- **Windows**: `%APPDATA%\\lazydotide\\config.json`\n\nA default config is created on first run. Edit it via **Tools \u003e Edit Config** — changes reload automatically on save.\n\n```json\n{\n  \"lsp\": null,\n  \"tools\": [\n    {\n      \"name\": \"htop\",\n      \"command\": \"htop\",\n      \"args\": null,\n      \"workingDir\": null\n    },\n    {\n      \"name\": \"Lazygit\",\n      \"command\": \"lazygit\",\n      \"args\": null,\n      \"workingDir\": null\n    },\n    {\n      \"name\": \"Git Log\",\n      \"command\": \"bash\",\n      \"args\": [\"-c\", \"git log --oneline --graph --all --color=always; exec bash\"],\n      \"workingDir\": null\n    }\n  ]\n}\n```\n\n### Custom Tools\n\nEach tool entry has:\n- `name` — display name in menus and command palette\n- `command` — executable to run\n- `args` — optional argument array\n- `workingDir` — optional working directory (null = project root)\n\n### LSP Override\n\nSet the `lsp` field to use a specific language server:\n\n```json\n{\n  \"lsp\": {\n    \"command\": \"csharp-ls\",\n    \"args\": []\n  }\n}\n```\n\n---\n\n## LSP Setup\n\nLazyDotIDE auto-detects a C# language server in this order:\n\n1. `lsp` field in `config.json`\n2. `DOTNET_IDE_LSP` environment variable\n3. `csharp-ls` in PATH\n4. OmniSharp in known locations (`~/.omnisharp/`, `/opt/omnisharp/`)\n5. `OmniSharp` in PATH\n\n**Recommended**: install [csharp-ls](https://github.com/razzmatazz/csharp-language-server):\n\n```bash\ndotnet tool install --global csharp-ls\n```\n\n---\n\n## Requirements\n\n- .NET 10.0\n- A terminal that supports ANSI escape codes\n- Optional: `xclip`, `xsel`, or `wl-copy`/`wl-paste` for clipboard support on Linux\n\n---\n\n## Status\n\nLazyDotIDE is in active early development. It works and is used daily, but expect rough edges. Contributions, feedback, and bug reports are welcome.\n\n---\n\n## Built on\n\n[**SharpConsoleUI**](https://github.com/nickprotop/ConsoleEx) — a console windowing and UI framework for .NET.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2Flazydotide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickprotop%2Flazydotide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2Flazydotide/lists"}