{"id":47516541,"url":"https://github.com/nickprotop/ConsoleEx","last_synced_at":"2026-04-03T06:01:50.411Z","repository":{"id":277028736,"uuid":"931018515","full_name":"nickprotop/ConsoleEx","owner":"nickprotop","description":"SharpConsoleUI — A .NET 8+ console windowing system with overlapping windows, 30+ controls, embedded terminal emulator, canvas drawing, and async per-window threads.","archived":false,"fork":false,"pushed_at":"2026-04-02T22:53:53.000Z","size":65611,"stargazers_count":192,"open_issues_count":0,"forks_count":4,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-04-03T01:43:05.587Z","etag":null,"topics":["console","csharp","developer-tools","dotnet","linux","spectre-console","terminal","terminal-ui","tui","windows"],"latest_commit_sha":null,"homepage":"https://nickprotop.github.io/ConsoleEx/","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":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-02-11T15:36:40.000Z","updated_at":"2026-04-02T22:53:58.000Z","dependencies_parsed_at":"2025-02-11T19:23:30.215Z","dependency_job_id":"5d9f528a-0f65-43ff-9348-a9623c058129","html_url":"https://github.com/nickprotop/ConsoleEx","commit_stats":null,"previous_names":["nickprotop/consoleex"],"tags_count":55,"template":false,"template_full_name":null,"purl":"pkg:github/nickprotop/ConsoleEx","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2FConsoleEx","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2FConsoleEx/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2FConsoleEx/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2FConsoleEx/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nickprotop","download_url":"https://codeload.github.com/nickprotop/ConsoleEx/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nickprotop%2FConsoleEx/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31338173,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-03T04:42:29.251Z","status":"ssl_error","status_checked_at":"2026-04-03T04:42:12.667Z","response_time":107,"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":["console","csharp","developer-tools","dotnet","linux","spectre-console","terminal","terminal-ui","tui","windows"],"created_at":"2026-03-27T13:01:21.462Z","updated_at":"2026-04-03T06:01:50.401Z","avatar_url":"https://github.com/nickprotop.png","language":"C#","readme":"# SharpConsoleUI\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/images/logo.svg\" alt=\"SharpConsoleUI Logo\" width=\"400\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://www.nuget.org/packages/SharpConsoleUI\"\u003e\u003cimg src=\"https://img.shields.io/nuget/v/SharpConsoleUI.svg\" alt=\"NuGet\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.nuget.org/packages/SharpConsoleUI\"\u003e\u003cimg src=\"https://img.shields.io/nuget/dt/SharpConsoleUI.svg\" alt=\"NuGet Downloads\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/nickprotop/ConsoleEx/actions\"\u003e\u003cimg src=\"https://github.com/nickprotop/ConsoleEx/actions/workflows/build-and-publish.yml/badge.svg\" alt=\"Build\"\u003e\u003c/a\u003e\n  \u003ca href=\"LICENSE.txt\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-green\" alt=\"License\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://dotnet.microsoft.com\"\u003e\u003cimg src=\"https://img.shields.io/badge/.NET-8.0%2B-purple\" alt=\".NET\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://nickprotop.github.io/ConsoleEx/\"\u003eWebsite\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://nickprotop.github.io/ConsoleEx/docfx/_site/EXAMPLES.html\"\u003eExamples\u003c/a\u003e \u0026nbsp;·\u0026nbsp;\n  \u003ca href=\"https://nickprotop.github.io/ConsoleEx/docfx/_site/tutorials/README.html\"\u003eTutorials\u003c/a\u003e\n\u003c/p\u003e\n\nA terminal UI framework for .NET with a real compositor engine.\n\nPer-cell alpha blending. Async windows. A portal system for dropdowns and overlays.\nA plugin architecture. A video player.\n\n![SharpConsoleUI Demo](docs/images/examples/consoleex-matrix-background.gif)\n\n[![SharpConsoleUI Video Demo](https://img.youtube.com/vi/sl5C9jrJknM/maxresdefault.jpg)](https://www.youtube.com/watch?v=sl5C9jrJknM)\n\n*Watch SharpConsoleUI in action on YouTube*\n\n---\n\n## What it is\n\nSharpConsoleUI gives each window its own `CharacterBuffer`. A compositor merges\nthem — with occlusion culling, per-cell Porter-Duff alpha blending, and a\nMeasure→Arrange→Paint layout pipeline. Each window runs on its own async thread.\nGradient backgrounds propagate through every transparent control automatically.\n\nBecause rendering goes through a diff-based cell buffer rather than writing\ndirectly to stdout, the output is equally clean over a local terminal or an\nSSH connection — latency and flicker are determined by what actually changed,\nnot by a full-screen repaint.\n\nThis architecture makes things possible that other .NET terminal libraries\ndon't do: overlapping windows with drag/resize/minimize/maximize, animated\ndesktop backgrounds, a PTY-backed terminal emulator, video playback in three\nrender modes, and compositor hooks for blur, fade, and custom effects.\n\n```\n┌─────────────────────────────────────────────────────────────┐\n│  Application Layer (Your Code)                              │\n│  └── Window Builders, Event Handlers, Controls              │\n├─────────────────────────────────────────────────────────────┤\n│  Framework Layer                                            │\n│  ├── Fluent Builders, State Services, Logging, Plugins      │\n├─────────────────────────────────────────────────────────────┤\n│  Layout Layer                                               │\n│  ├── DOM Tree (LayoutNode) — Measure → Arrange → Paint      │\n├─────────────────────────────────────────────────────────────┤\n│  Rendering Layer                                            │\n│  ├── Multi-pass compositor, occlusion culling, portals      │\n├─────────────────────────────────────────────────────────────┤\n│  Buffering Layer                                            │\n│  ├── CharacterBuffer → ConsoleBuffer → adaptive diff output │\n├─────────────────────────────────────────────────────────────┤\n│  Driver Layer                                               │\n│  ├── NetConsoleDriver (production) / Headless (testing)     │\n│  └── Raw libc I/O (Unix) / Console API (Windows)            │\n└─────────────────────────────────────────────────────────────┘\n```\n\n---\n\n## Quick start\n```shell\ndotnet add package SharpConsoleUI\n```\n```csharp\nusing SharpConsoleUI;\nusing SharpConsoleUI.Builders;\nusing SharpConsoleUI.Drivers;\nusing SharpConsoleUI.Panel;\n\nvar windowSystem = new ConsoleWindowSystem(\n    new NetConsoleDriver(RenderMode.Buffer),\n    options: new ConsoleWindowSystemOptions(\n        BottomPanelConfig: panel =\u003e panel\n            .Left(Elements.StartMenu())\n            .Center(Elements.TaskBar())\n            .Right(Elements.Clock())\n    ));\n\nvar window = new WindowBuilder(windowSystem)\n    .WithTitle(\"Hello\")\n    .WithSize(60, 20)\n    .Centered()\n    .WithBackgroundGradient(\n        ColorGradient.FromColors(new Color(0, 20, 60), new Color(0, 5, 20)),\n        GradientDirection.Vertical)\n    .Build();\n\nwindow.AddControl(Controls.Markup()\n    .AddLine(\"[bold cyan]Real compositor. Full alpha blending.[/]\")\n    .AddLine(\"[#FF000080]This text has 50% alpha — composited over the gradient.[/]\")\n    .Build());\n\nwindowSystem.AddWindow(window);\nwindowSystem.Run();\n```\n\nEach window can run with its own async thread:\n\n```csharp\nvar clockWindow = new WindowBuilder(windowSystem)\n    .WithTitle(\"Digital Clock\")\n    .WithSize(40, 12)\n    .WithAsyncWindowThread(async (window, ct) =\u003e\n    {\n        while (!ct.IsCancellationRequested)\n        {\n            var time = window.FindControl\u003cMarkupControl\u003e(\"time\");\n            time?.SetContent(new List\u003cstring\u003e { $\"[bold cyan]{DateTime.Now:HH:mm:ss}[/]\" });\n            await Task.Delay(1000, ct);\n        }\n    })\n    .Build();\n```\n\n### Project templates\n\n```bash\ndotnet new install SharpConsoleUI.Templates\n\ndotnet new tui-app -n MyApp            # Starter app with list, button, notification\ndotnet new tui-dashboard -n MyDash     # Fullscreen dashboard with tabs and live metrics\ndotnet new tui-multiwindow -n MyApp    # Two windows with master-detail pattern\n\ncd MyApp \u0026\u0026 dotnet run\n```\n\n### Desktop distribution (schost)\n\nPackage your app so end users can double-click to launch — no terminal knowledge required.\n\n```bash\ndotnet tool install -g SharpConsoleUI.Host\nschost init        # Initialize terminal config\nschost run         # Launch in a configured terminal window\nschost pack --installer  # Package as portable zip + optional installer\n```\n\nSee the [schost guide](https://nickprotop.github.io/ConsoleEx/docfx/_site/SCHOST.html) for details.\n\n---\n\n## Built with SharpConsoleUI\n\n### LazyDotIDE — a .NET IDE in the terminal\n\n![LazyDotIDE with IntelliSense](docs/images/examples/lazydotide-intellisense.png)\n\nLSP-powered IntelliSense, built-in PTY terminal, git integration.\nWorks over SSH and in containers.\n[github.com/nickprotop/lazydotide](https://github.com/nickprotop/lazydotide)\n\n### ServerHub — Linux server control panel\n\n![ServerHub Dashboard](docs/images/examples/serverhub-main.png)\n\n14 monitoring widgets. Real-time CPU, memory, disk, network, Docker, systemd.\n[github.com/nickprotop/ServerHub](https://github.com/nickprotop/ServerHub)\n\n### LazyNuGet — NuGet package manager TUI\n\n![LazyNuGet](docs/images/examples/lazynuget-dashboard.png)\n\nlazygit-inspired. Browse, update, install, search NuGet.org. Cross-platform.\n[github.com/nickprotop/lazynuget](https://github.com/nickprotop/lazynuget)\n\n---\n\n## What only SharpConsoleUI does\n\n| Capability | Other .NET TUI libraries |\n|---|---|\n| Overlapping windows with drag, resize, minimize, maximize | Terminal.Gui v2 beta only |\n| Per-cell Porter-Duff RGBA alpha blending | None |\n| Gradient backgrounds propagating through controls | None |\n| PreBufferPaint / PostBufferPaint compositor hooks | None |\n| Per-window async threads | None |\n| PTY-backed terminal emulator control | None |\n| Video playback (half-block, ASCII, braille) | None |\n| Animated desktop backgrounds | None |\n| Portal system for dropdowns and overlays | None |\n| Plugin architecture (themes, controls, windows, services) | None |\n\nFull comparison with Terminal.Gui, Spectre.Console, and XenoAtom.Terminal.UI:\n[nickprotop.github.io/ConsoleEx/docfx/_site/COMPARISON.html](https://nickprotop.github.io/ConsoleEx/docfx/_site/COMPARISON.html)\n\n---\n\n## Controls\n\n30+ built-in controls including:\n\n**Input:** Button, Checkbox, Prompt, MultilineEdit (with syntax highlighting),\nSlider, RangeSlider, DatePicker, TimePicker, Dropdown, Menu, Toolbar\n\n**Display:** MarkupControl (Spectre-compatible markup everywhere), FigletControl,\nLogViewer, SpectreRenderableControl, LineGraph, SparklineControl, BarGraph\n\n**Layout:** NavigationView (WinUI-inspired, responsive), TabControl,\nHorizontalGrid, ScrollablePanel, SplitterControl, StatusBarControl\n\n**Drawing:** CanvasControl (30+ primitives), ImageControl (PNG/JPEG/WebP),\nVideoControl (FFmpeg, three render modes), TerminalControl (PTY, Linux)\n\n**Selection:** ListControl, TableControl (virtual data, 10k+ rows, sort, filter,\ninline edit), TreeControl\n\nFull reference: [nickprotop.github.io/ConsoleEx/docfx/_site/CONTROLS.html](https://nickprotop.github.io/ConsoleEx/docfx/_site/CONTROLS.html)\n\n---\n\n## Documentation\n\n| | |\n|---|---|\n| [Get Started](https://nickprotop.github.io/ConsoleEx/docfx/_site/BUILDERS.html) | Fluent builder API reference |\n| [Tutorials](https://nickprotop.github.io/ConsoleEx/docfx/_site/tutorials/README.html) | Three step-by-step tutorials |\n| [Controls](https://nickprotop.github.io/ConsoleEx/docfx/_site/CONTROLS.html) | All 30+ controls |\n| [Examples](https://nickprotop.github.io/ConsoleEx/docfx/_site/EXAMPLES.html) | 20+ runnable example projects |\n| [Compositor Effects](https://nickprotop.github.io/ConsoleEx/docfx/_site/COMPOSITOR_EFFECTS.html) | PreBufferPaint / PostBufferPaint |\n| [Video Playback](https://nickprotop.github.io/ConsoleEx/docfx/_site/VIDEO_PLAYBACK.html) | VideoControl reference |\n| [Panel System](https://nickprotop.github.io/ConsoleEx/docfx/_site/PANELS.html) | Taskbar, Start Menu, Clock |\n| [Desktop Background](https://nickprotop.github.io/ConsoleEx/docfx/_site/DESKTOP_BACKGROUND.html) | Gradients, patterns, animations |\n| [Plugins](https://nickprotop.github.io/ConsoleEx/docfx/_site/PLUGINS.html) | Extending the framework |\n| [State Services](https://nickprotop.github.io/ConsoleEx/docfx/_site/STATE-SERVICES.html) | All 11 built-in services |\n| [Themes](https://nickprotop.github.io/ConsoleEx/docfx/_site/THEMES.html) | Built-in and custom themes |\n| [Comparison](https://nickprotop.github.io/ConsoleEx/docfx/_site/COMPARISON.html) | vs Terminal.Gui, Spectre.Console |\n| [API Reference](https://nickprotop.github.io/ConsoleEx/docfx/_site/api/SharpConsoleUI.html) | Full API docs |\n\n---\n\n## License\n\nMIT — [Nikolaos Protopapas](https://github.com/nickprotop)\n\n## Acknowledgments\n\n- [Spectre.Console](https://github.com/spectreconsole/spectre.console) integration via SpectreRenderableControl\n- Unix raw I/O approach inspired by [Terminal.Gui v2](https://github.com/gui-cs/Terminal.Gui)\n\n## Development Notes\n\nSharpConsoleUI was initially developed manually with core windowing functionality and double-buffered rendering. The project evolved to include modern features (DOM-based layout system, fluent builders, plugin architecture, theme system) with AI assistance. Architectural decisions and feature design came from the project author, while AI generated code implementations based on those decisions.\n","funding_links":[],"categories":["Table of Contents"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2FConsoleEx","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnickprotop%2FConsoleEx","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnickprotop%2FConsoleEx/lists"}