A Windows WPF application that puts a graphical UI on top of a terminal. It runs a real
shell — locally (PowerShell, cmd, WSL) or over SSH to a Linux host — and turns common commands
into buttons. Instead of typing docker ps and reading raw text, you click Show Containers
and get a sortable grid; the command actually executes in the live terminal session, so it runs
wherever your shell currently is (including inside an interactive SSH session).
The interactive terminal and the GUI share one shell session. Open a terminal,
sshinto a remote box, then use the GUI buttons — they run on that remote box.
┌──────────────────────────────────────────────────────┐
│ UI tab Terminal tab │
│ ┌───────────────────────────┐ ┌──────────────┐ │
│ │ Docker | nginx | ... │ │ live shell │ │
│ │ [Show Containers] [Logs] │ │ (ConPTY) │ │
│ │ ┌───────── Results ─────┐ │ │ user@host:~$ │ │
│ │ │ Grid │ Text │ │ └──────────────┘ │
│ │ └───────────────────────┘ │ ▲ │
│ └─────────────┬─────────────┘ │ │
│ │ command ─────────────────┘ │
│ └─ result ◄── captured output │
└──────────────────────────────────────────────────────┘
- A single ConPTY pseudo-console hosts the shell and powers the Terminal tab (rendered with VtNetCore).
- Feature tabs send a command into that same session and capture just that command's output (using unique marker lines), then render it.
- Every feature embeds the same reusable Results control: a Grid tab (auto-columns) and an editable Text tab. A command can fill the grid, the text, or both. There are no pop-up dialogs — errors and text output go to the Text area.
| Tab | Actions |
|---|---|
| Terminal | A real interactive terminal (any shell: PowerShell, bash, ssh, wsl, …). |
| Docker | Show Containers / All Containers / Images, Stats, Networks (→ grid); Logs, Top, Inspect, Disk Usage (→ text); Start / Stop the selected container. |
| nginx | Test Config (nginx -t), Show Full Config (nginx -T), Status, Tail Error Log (→ text). |
| Basic Linux / Basic Windows / Claude Code | Placeholders for upcoming command shortcuts. |
- MVVM throughout — Views are thin; all logic lives in testable ViewModels.
- Dependency injection via Ninject; the composition
root is
App.OnStartup. - Feature folders under
Features/<Name>/— each feature owns its ViewModel, View, and models. New modules are added as new folders. - The terminal backend sits behind interfaces (
IPtyConnection,ITerminalSession,ICommandExecutor) so ViewModels can be unit-tested against fakes — no real console required.
WpfOnTopOfTerminal/
Infrastructure/ ConPTY backend, shared session, command executor
ViewModels/ MVVM base, terminal + results view models
Views/ terminal surface (custom-drawn)
Controls/ reusable Results control (grid + text)
Features/ Docker, Nginx, BasicLinux, BasicWindows, ClaudeCode
Tests/ MSTest unit tests for the ViewModels
- Windows 10 1809+ / Windows 11 (ConPTY).
- .NET 10 SDK.
- For SSH, the built-in Windows OpenSSH client (
ssh.exe) — no extra SSH library needed.
dotnet build WpfOnTopOfTerminal.csproj
dotnet run --project WpfOnTopOfTerminal.csprojdotnet testThe ViewModels (terminal capture, Docker/nginx actions, result rendering) are covered by MSTest unit tests using fake terminal/command backends.
.NET 10 · WPF · MVVM · Ninject · ConPTY · VtNetCore · MSTest
MIT — see LICENSE.txt.