A tabbed and splittable SSH / Telnet / Serial terminal emulator for Windows and Linux.
lvdterm is an open-source alternative to tools like mputty, teraterm, ... : one window, tabs and split panes, saved connections organized in folders, and an SFTP file browser docked alongside your shell — built on Qt 6 and a vendored, copy of Konsole/QTermWidget's terminal-emulation core, running natively on Windows (no Cygwin, no WSL requirement, no bundled X server) and Linux.
Built by LVD Systems S.r.l. and released as part of LVD Open.
![]() |
![]() |
![]() |
![]() |
![]() |
htop rendering correctly - full-screen redraws, live-updating colored
bars, and heavy box-drawing/alignment all come from the vendored
terminal-emulation core, not anything lvdterm adds on top:
Every connection can use a Hex viewer instead of the terminal - useful for a Serial/SSH/Telnet link carrying a binary protocol rather than readable text. Each pane gets its own offset/hex/ASCII view with a "Group by" selector (Byte/Word/Dword, purely visual clustering - the underlying bytes are never reordered), and it's a per-connection setting picked in the connection editor above, so a Serial port streaming binary telemetry and one running a normal shell can sit side by side, each in the view that actually makes sense for it:
- Windows and Linux: one codebase, native on both. Windows ships as an
installer and a portable zip; Linux as an AppImage and a
.deb. - Connections: Serial (with a live COM-port picker), Telnet, Raw TCP (no Telnet protocol negotiation), SSH (password or key-based auth; a wrong password prompts again instead of failing), and local terminal tabs (cmd/PowerShell on Windows, your shell on Linux).
- Tabs and splits: any tab can be split horizontally or vertically, duplicating the current connection or starting a new one; each tab shows a colored status dot rolled up from every pane inside it. Panes can be dragged by their title strip to rearrange them (split on an edge, swap in the middle), and a pane's menu offers Split, Close, Respawn Terminal and Change Settings.
- Saved connections: a folder-organized dock of saved connections, edited in place (add/edit/duplicate/delete/rename); secrets are encrypted at rest with Windows DPAPI, or a libsecret-stored key (GNOME Keyring/KWallet) on Linux (still local-machine storage, not a secrets vault — the app tells you this up front).
- Auto-reconnect: a dropped connection retries with backoff and shows a live countdown/cancel overlay right over the affected pane.
- Session save/restore: your whole tab/split layout (including saved and ad-hoc connections alike) is restored on the next launch.
- SFTP dock: an Explorer-style details view (Name / Date modified / Type / Size) for the currently focused SSH pane's remote filesystem — drag-and-drop upload for files and whole folders (recursive), a right-click context menu (rename/delete/download), and a non-blocking toolbar for everything else. Create new files and edit remote text files in a built-in editor with syntax highlighting and find.
- Terminal niceties: auto-copy on selection, right-click to paste, a status bar context menu (Reconnect / Clear Screen / Clear Buffer) mirrored in a "Terminal" menu, Ctrl+Shift+F scrollback search (also in Hex panes), Ctrl+Shift+C/V copy/paste, a Settings > Keyboard Shortcuts page where every shortcut is rebindable and custom shortcuts can type a piece of text into the terminal, session logging to a file (with an optional per-line timestamp), and selectable keyboard-emulation profiles (Default / Linux Console / VT100) for keys that differ between them (arrows, Home/End, function keys, Backspace).
- Hex viewer: a per-connection alternative to the terminal for Serial/SSH/Telnet links carrying a binary protocol - offset/hex/ASCII columns with byte/word/dword grouping.
- Appearance: Dark/Light themes, a few built-in color schemes, and a configurable monospaced terminal font.
Feature sets shift over time (especially between free/paid tiers), so treat this as a snapshot, not gospel — corrections welcome via an issue or PR.
| lvdterm | PuTTY | mPuTTY / MTPuTTY | Tera Term | |
|---|---|---|---|---|
| License / cost | Free, open source (GPL-3.0-or-later) | Free, open source (MIT) | Free, open source (wraps putty.exe) |
Free, open source (BSD-style) |
| Protocols | SSH, Telnet, Serial, Raw TCP | SSH, Telnet, Rlogin, Serial | Whatever the wrapped PuTTY supports (SSH, Telnet, Rlogin, Serial) | SSH, Telnet, Serial |
| Tabs | ✅ | ❌ (one top-level window per session) | ✅ | ✅ |
| Split panes | ✅ | ❌ | ✅ (drag a tab to an edge) | ❌ |
| Saved connections | ✅ folder tree | ❌ flat list, stored in the registry | ✅ folder tree | Flat session list |
| Secrets at rest | Encrypted (Windows DPAPI) | Plaintext in the registry | Plaintext (delegates to PuTTY's own storage) | Plaintext |
| SFTP browser | ✅ built-in, Explorer-style, drag-and-drop | ❌ separate psftp.exe/pscp.exe CLI tools |
❌ launches external psftp/pscp |
❌ no GUI SFTP (SCP via macro only) |
| Auto-reconnect | ✅ with backoff + a live retry countdown | ❌ | ❌ | ❌ |
| Session layout save/restore | ✅ whole tab/split layout, across restarts | ❌ | Reopens saved sessions, not a live layout | ❌ |
| Local shell tab (cmd/PowerShell/WSL) | ✅ | ❌ | ❌ | ❌ |
| Macro / scripting | ❌ | ❌ (scriptable only externally via plink) |
Basic (auto-login, run commands on connect) | ✅ powerful (Tera Term Language) |
| Platform | Windows, Linux | Windows (plus community Unix/Mac ports) | Windows | Windows |
Prebuilt packages are attached to each release (not code signed):
- Windows:
lvdterm-setup-<version>.exe, built frominstaller/lvdterm.isswith Inno Setup, or the portable zip below. - Linux:
lvdterm-<version>-x86_64.AppImage(see the Linux section below) or the.deb.
Or build from source below.
A portable, extract-and-run build (no installer, no admin rights, no
registry/Start Menu changes) can be produced from a built Release preset
with installer/build-portable.bat - it
zips up the same dist\ folder the installer above packages, into
dist\lvdterm-<version>-portable.zip.
Prerequisites
- Qt 6 (developed against 6.11), with an llvm-mingw kit (clang + libc++ targeting mingw-w64) — installed via the Qt Maintenance Tool's "Additional Libraries" page.
- CMake 3.25+ and Ninja.
- The llvm-mingw toolchain itself (bundled with the Qt Tools installer alongside the llvm-mingw Qt kit above).
Configure and build
This repo's CMakePresets.json hardcodes this
project's own dev-machine paths (C:/Qt/6.11.1/llvm-mingw_64, etc.) —
edit them to match where Qt and the llvm-mingw toolchain landed on yours
before configuring, or override them via a local CMakeUserPresets.json
(already gitignored).
cmake --preset llvm-mingw-release
cmake --build --preset llvm-mingw-releaseThis produces build/llvm-mingw-release/dist/lvdterm.exe together with
the Qt runtime DLLs it needs (via windeployqt, run automatically as a
post-build step) — the dist/ folder is ready to zip up or hand to the
Inno Setup script above.
A llvm-mingw (Debug) preset is also defined, building to
build/llvm-mingw/dist/.
Linux
lvdterm also builds and runs on Linux, using the linux/linux-release
presets - no hardcoded paths to edit, since these just rely on your
distro's own Qt 6 packages:
# Debian/Ubuntu - adjust for your distro's package names
sudo apt install qt6-base-dev qt6-serialport-dev libssl-dev libsecret-1-dev cmake ninja-build
cmake --preset linux-release
cmake --build --preset linux-releaseThis produces build/linux-release/dist/lvdterm. Two packaged formats
are available, both documented in detail (including the exact commands)
in TODO.md:
- A
.deb-cd build/linux-release && cpackproduceslvdterm-<version>-Linux.deb, installing to/usr/bin/lvdtermwith proper desktop/launcher integration (reusingpackaging/linux/lvdterm.desktop) and auto-detected runtime dependencies against your distro's own packages. - An AppImage - a single, self-contained, distro-agnostic executable
(bundles its own Qt/OpenSSL/libsecret, no matching distro packages
needed), built with
linuxdeploy/linuxdeploy-plugin-qt, the closest Linux equivalent to the Windows portable zip. Build it on an old distro, not a new one - glibc compatibility is forward-only, so an AppImage built on a bleeding-edge system won't run on an older one no matter what it bundles. Seepackaging/linux/README.mdfor the exact recipe (Ubuntu 20.04 + Qt's own official binaries viaaqtinstall, verified against a real older target).
For manual desktop integration when building without either of those,
see packaging/linux/README.md.
Saved passwords/passphrases are encrypted via a libsecret-stored key
(GNOME Keyring/KWallet) instead of Windows DPAPI - see
src/core/Crypto.cpp for the full design and why.
The Linux build is newer than the Windows one; please open an issue for anything that doesn't work.
Note if building/packaging under WSL: do it from WSL's own native
filesystem (e.g. ~/), not a Windows-mounted drive (/mnt/c/, /mnt/d/,
etc.) - DrvFs can't store real Unix permission bits, so a .deb built
from a Windows-mounted path will have every file reported as
world-writable.
lvdterm vendors a stripped-down, Windows-ported copy of
Konsole/QTermWidget's
terminal-emulation core, and statically links
libssh2 (built against a vendored OpenSSL) for
SSH/SFTP. See THIRD_PARTY_LICENSES.md for the
full list and why that combination makes GPL-3.0-or-later (not plain
GPL-2.0) the correct license for the combined binary, and
third_party/qtermwidget/VENDORING.md
for exactly what was kept, dropped, or patched from upstream QTermWidget.
lvdterm is licensed under the GNU General Public License, version 3 or later.






