Skip to content

shroomlife/termnest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🪺 TermNest

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.

License: MIT Platform Built with WinUI 3 .NET 10 Release


Why TermNest?

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.


Highlights

  • 🪟 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 transportssh.exe runs inside a ConPTY tab, so auth (password / key / agent) and host-key prompts work exactly like in any other terminal, with ~/.ssh/known_hosts doing 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.xml and 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.

Install

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.

From a GitHub Release (recommended)

  1. Grab the latest TermNest.App_*.cer and TermNest.App_*.msix from Releases.
  2. One-time: trust the signing cert in an Admin PowerShell:
    Import-Certificate -FilePath "$HOME\Downloads\TermNest.App_<version>_x64.cer" `
                       -CertStoreLocation "Cert:\LocalMachine\TrustedPeople"
  3. Double-click the .msix to 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.

Uninstall

Get-AppxPackage *TermNest* | Remove-AppxPackage

Build from source

Prerequisites

  • 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.ps1

The 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/.


Releasing

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.3

The 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.


Where TermNest stores your data

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.


Project layout

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.


Roadmap

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 while ssh.exe carries 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.


Contributing

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.


Credits

  • 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.

License

MIT — do whatever, just keep the copyright notice.

Made with 🍄 by shroomlife in Germany.

About

A modern, native SSH session manager for Windows 11 — WinUI 3 + xterm.js + SSH.NET

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages