Skip to content
lvdsystemsPublic

Repository files navigation

lvdterm icon

lvdterm

A tabbed and splittable SSH / Telnet / Serial terminal emulator for Windows and Linux.

Download latest release:
Latest release

License: GPL-3.0-or-later Platform: Windows | Linux C++20 Qt 6

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.

Screenshots

Main window SFTP dock
Split view Settings
Connection editor: Serial and SSH

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:

htop running over SSH, alongside the SFTP dock

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:

Two Hex viewer panes side by side, one grouped by byte and one by word

Features

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

How it compares

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

Installing

Prebuilt packages are attached to each release (not code signed):

  • Windows: lvdterm-setup-<version>.exe, built from installer/lvdterm.iss with 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.

Building from source

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-release

This 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-release

This 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 && cpack produces lvdterm-<version>-Linux.deb, installing to /usr/bin/lvdterm with proper desktop/launcher integration (reusing packaging/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. See packaging/linux/README.md for the exact recipe (Ubuntu 20.04 + Qt's own official binaries via aqtinstall, 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.

Third-party components

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.

License

lvdterm is licensed under the GNU General Public License, version 3 or later.

Links

Releases

Packages

Contributors

Languages