A cozy nest for your SSH sessions.
A modern, native session manager for Windows 11.
Tabs, a tree of saved hosts, a real terminal — no putty.exe in sight.
PuTTY-style session managers on Windows still feel like 2008. TermNest is the small thing I wanted: a clean side-rail of saved hosts, tabs that actually look like Windows 11 tabs, and a real terminal — built on xterm.js inside WebView2, with SSH.NET doing the protocol work under the hood.
No embedded putty.exe. No MFC bridges. No MDI tab juggling. Just a
small WinUI 3 desktop app that does one thing well.
- 🪟 Native WinUI 3 — Mica, Fluent buttons, system theme, Light by default with automatic dark switching.
- 🌳 Tree of sessions — group hosts in folders, search, create empty folders before you fill them.
- 🪶 xterm.js terminal — proper ANSI / 256-color rendering, real copy & paste, clean fonts.
- 🔐 OpenSSH transport —
ssh.exeruns inside a ConPTY tab, so auth (password / key / agent) and host-key prompts work exactly like in any other terminal, with~/.ssh/known_hostsdoing the pinning. - 🖱️ One-click row actions — single-click on a session copies the host to your clipboard. Hover reveals connect, open in WinSCP, edit. The row never opens a dialog by accident.
↔️ Resizable side rail — grab the divider, drag, drop. Width persists immediately, not just on close.- ⚙️ Settings in a dialog — gear button in the footer opens a centred Settings dialog (PuTTY path, WinSCP path, terminal font size). No noisy inline panels.
- 💾 Layout memory — window placement, side-rail width, expanded folders, and font size all survive a restart.
- 📥 Import from SuperPuTTY — point at an existing
sessions.xmland TermNest absorbs the lot. - ⏳ Quiet status footer — every transient message lands bottom-left and auto-clears after 5 s of silence so the UI never gets noisy.
The pre-built MSIX is sideload-signed with a self-issued certificate.
You trust the cert in LocalMachine\TrustedPeople once; after that,
upgrades run unattended.
- Grab the latest
TermNest.App_*.cerandTermNest.App_*.msixfrom Releases. - One-time: trust the signing cert in an Admin PowerShell:
Import-Certificate -FilePath "$HOME\Downloads\TermNest.App_<version>_x64.cer" ` -CertStoreLocation "Cert:\LocalMachine\TrustedPeople"
- Double-click the
.msixto install. Find TermNest in the Start menu when it's done.
Future updates: just download the new .msix and double-click — the
trusted cert stays.
Get-AppxPackage *TermNest* | Remove-AppxPackagePrerequisites
- Windows 11
- .NET 10 SDK
- Windows App SDK 1.8 (pulled in via NuGet)
- PowerShell 7+
Local build & install
git clone https://github.com/shroomlife/termnest.git
cd termnest
# Debug build (run from VS / dotnet)
dotnet build -p:Platform=x64
# Release MSIX (signed, dropped in dist/)
scripts\build-msix.ps1
scripts\install-msix.ps1The build script generates a self-signed code-signing certificate the
first time it runs (under Cert:\CurrentUser\My, subject
CN=ShroomlifeDev) and reuses it for every subsequent build. The
matching public .cer lands next to the .msix in dist/.
Releases are cut by pushing a v* git tag. The
release workflow does the rest: it
imports the signing cert from SIGNING_CERTIFICATE_BASE64 /
SIGNING_CERTIFICATE_PASSWORD repo secrets, builds the signed MSIX,
and creates a GitHub release with the .msix and .cer attached plus
auto-generated release notes.
# Bump version in src/TermNest.App/Package.appxmanifest first
# (Identity Version="1.0.0.X" — patch field bumps every release).
git tag v1.0.0.3
git push origin v1.0.0.3The CI run produces the same artefacts as scripts\build-msix.ps1 does
locally — the workflow is just the same dotnet build with a PFX-based
cert instead of the dev cert in CurrentUser\My.
Sessions, layout settings and trusted SSH host keys live in the standard
MSIX-isolated LocalState folder, no manual maintenance needed:
%LocalAppData%\Packages\dev.shroomlife.TermNest_<id>\LocalState\
├── sessions.json ← saved sessions + empty folders
├── known_hosts.json ← accepted SSH host-key fingerprints
├── layouts/
│ └── default.json ← side-rail width, window placement, …
├── active-layout ← marker for the active layout
└── debug.log ← crash + diagnostic sink
sessions.json and known_hosts.json are human-readable JSON. Atomic
writes mean crashes never leave a corrupt file behind. Passwords are
never persisted — they're runtime-only and supplied via the password
prompt on connect.
src/
TermNest.App/ WinUI 3 desktop app (UI, MSIX manifest, WebView2 host)
TermNest.Core/ Session model, SSH transport, layout & known-hosts persistence
scripts/
build-msix.ps1 Build + sign the MSIX, drop it under dist/
install-msix.ps1 Trust the cert + Add-AppxPackage
generate-app-icons.ps1 Regenerate the MSIX logo set from one source
.github/
workflows/release.yml Tag-triggered MSIX build + GitHub release
docs/ Internal notes (release checklist, etc.)
Core is a plain class library — no UI dependencies — so the session,
layout and transport code stays testable without standing up a WinUI
host.
The 1.0 cut focuses on the SSH happy path. Tracked for later:
- App-level SSH path (SSH.NET transport, in-app fingerprint prompt
via
KnownHostsStore) — wiring is in place, currently dormant whilessh.execarries the connects. - Re-introducing a focused ad-hoc Quick-Connect dialog
- Detachable docks / multi-window
- SFTP browser tab
- Saved scripts (re-run a command on connect)
- Session export to
sessions.json/sessions.xml - ARM64 native build
- Themed terminal palettes (Solarized, Tokyo Night, …)
Open an issue if you want to argue for a different priority order.
PRs welcome. Keep changes tightly scoped: one feature or fix per PR, a clear why in the description, and a screenshot or short clip when the change is visual.
If you spot a security issue, please email robin@shroomlife.de directly instead of opening a public issue.
- WebView2 — for embedding a real browser without the pain.
- xterm.js — for being the terminal everyone secretly uses.
- SSH.NET — for a managed SSH stack that just works.
- Microsoft.WindowsAppSDK — for letting WinUI ship outside the Store.
- The Iconify project — for the inline action icons used throughout the UI.
MIT — do whatever, just keep the copyright notice.
Made with 🍄 by shroomlife in Germany.