Skip to content

About

A modern, open-source & self-hosted SSH client and server manager. Local-first, zero-knowledge encryption, and seamless multi-device sync.

Resources

Contributing

Stars

66 stars

Watchers

0 watching

Forks

Repository files navigation

Termimus Logo

Termimus

The Local-First, Zero-Knowledge SSH Client & Server Management Suite
A modern, self-hosted Termius alternative for Linux, macOS, and Windows Β· v0.7.0

Version v0.7.0 Support on Ko-fi License: MIT Docker Image Platforms AES-256-GCM Argon2id Terminal Obsidian

Termimus Hosts Overview


⚑ What is Termimus?

Termimus is an open-source, desktop SSH manager and terminal suite designed for engineers, sysadmins, and DevOps teams who refuse to store production credentials in third-party proprietary clouds.

Unlike SaaS alternatives that force cloud account registration, Termimus is Local-First: your database runs 100% offline via embedded SQLite, and your private keys and passwords never leave your machine unencrypted. When you need multi-device synchronization, Termimus connects to your own Self-Hosted Go Sync Relay using end-to-end zero-knowledge encryption β€” the server is a blind relay that cannot decrypt your data.


πŸ“₯ Download

Prebuilt installers for every release are published automatically to the GitHub Releases page β€” no build tools required.

Platform Installer Notes
🐧 Linux .deb / .AppImage Debian/Ubuntu package or portable AppImage (any distro)
🍎 macOS .dmg Universal binary β€” runs natively on both Intel and Apple Silicon
πŸͺŸ Windows .msi / .exe MSI installer or NSIS setup executable

Prefer to build from source, or want to contribute? See Getting Started below.


✨ Features at a Glance

πŸ–₯️ Native Terminal Experience

  • Async Rust SSH Engine: Multi-tab terminal powered by russh and @xterm/xterm 6.
  • Split Panes & Dynamic Layouts: Split terminals in any direction with resizable dividers, tab drag-and-drop, and auto-grouping tabs (Web Server (2)).
  • Terminal Interconnection & Input Broadcast: One-click synchronized input across all split panes (SYNC toggle / Alt+B) to broadcast keystrokes and run commands simultaneously across multiple servers.
  • Session Geometry Protection: Background tabs stay mounted without collapsing to 0Γ—0 geometry, preventing remote htop, vim, and curses TUIs from corrupting due to bogus SIGWINCH events.
  • Quick Connect: Instant fuzzy-search launcher accessible anywhere with Ctrl+K.

πŸ—‚οΈ Workspaces & Multi-Server Cluster Launcher

  • Multi-Server Layout Presets: Design and save complex multi-terminal split layouts (Single, Vertical 2-way, Horizontal 2-way, 3-way, 4-way Grid, 6-way Matrix) with assigned hosts for each pane.
  • 1-Click Cluster Launcher: Atomic multi-session launcher connects to all target machines simultaneously and arranges them into their pre-configured split panes with zero layout jitter.
  • Interactive Blueprint Designer: Visual layout designer to preview blueprints, assign hosts to panes, and customize workspace tags and colors.
  • Save Active Split as Preset: Snapshot your current live split layout and open SSH sessions into a reusable workspace preset with a single click.

πŸ“‚ Dual-Pane SFTP & In-App Code Editor

  • Seamless Transfers: Dual-pane local ↔ remote browser with fast click-to-transfer navigation.
  • Direct Remote Editor: View and edit configuration files directly over SFTP with syntax highlighting and keyboard shortcut saving (Ctrl+S).

πŸ”‘ Keychain & Identity Management

  • Private Key Vault & Import: Securely store and organize SSH private keys (OpenSSH, PEM, PuTTY). Import directly from local key files or paste PEM text.
  • Instant Public Key Derivation: Automatically derive OpenSSH public key lines (ssh-ed25519, ssh-rsa, ecdsa) and SHA256 fingerprints from imported private keys to paste into remote authorized_keys.
  • Private Key Reveal & Copy: Securely inspect or copy decrypted private keys on demand when the vault is unlocked, protected with privacy blur.
  • Password Identities: Store reusable username & password combinations to assign across multiple hosts without re-typing.

🌐 Port Forwarding & SSH Tunnels

  • Multi-Type Tunnels: Support for Local (-L), Remote (-R), and Dynamic SOCKS5 (-D) port forwarding.
  • Live Status Toggles: Monitor and manage forwarding rules with real-time active indicators.

πŸ“œ Snippets & Scripts

  • Instant Script Runner: Store frequently used shell scripts, deployment commands, and system diagnostics.
  • Active Tab Injection: Send snippets straight into your running terminal session with a single click.

πŸ”’ Enterprise-Grade Local Security

  • Zero-Knowledge Vault: All passwords and keys are encrypted at rest with AES-256-GCM using keys derived via Argon2id.
  • OS Keyring Integration: Optional silent auto-unlock on launch using your desktop's secure credential store (KWallet / GNOME Secret Service on Linux, macOS Keychain, or Windows Credential Manager).
  • Configurable Auto-Lock: Automatically lock the vault and zero out memory after 15m/1h of inactivity or on window focus loss.
  • TOFU Host-Key Verification: Trust-On-First-Use host key fingerprinting with hard rejection on key mismatch across SSH, SFTP, and tunnels to shield against Man-in-the-Middle (MITM) attacks.

☁️ Self-Hosted Multi-Device Sync

  • Zero-Knowledge Relay: Self-host our ultra-lightweight Go sync server (server/) with Docker.
  • Real-Time WebSocket Sync: Connected devices receive instant push notifications when changes occur on another machine.
  • Safe Merging: Sync merges incoming updates without overwriting locally trusted server fingerprints.

πŸ›οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     Termimus (Work Laptop)      β”‚               β”‚      Termimus (Home Desktop)    β”‚
β”‚  - Tauri v2 + Rust + React 19   β”‚               β”‚  - Tauri v2 + Rust + React 19   β”‚
β”‚  - Local SQLite (termimus.db)   β”‚               β”‚  - Local SQLite (termimus.db)   β”‚
β”‚  - AES-256-GCM Encryption Key   β”‚               β”‚  - AES-256-GCM Encryption Key   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜               β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–²β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                 β”‚                                                 β”‚
                 β”‚   Push E2EE Ciphertext Bundle                   β”‚   Pull & Auto-Merge
                 β”‚   (Server cannot read payload)                  β”‚   (WebSocket Event)
                 β–Ό                                                 β”‚
      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
      β”‚             Termimus Sync Server (Go / Docker)                  β”‚
      β”‚         ghcr.io/termimus/termimus-sync:latest                   β”‚
      β”‚                                                                 β”‚
      β”‚  - Pure Go SQLite (modernc.org/sqlite, zero CGO)                β”‚
      β”‚  - Blind Relay Storage (< 20MB RAM)                             β”‚
      β”‚  - Real-time WebSocket Event Hub (`SYNC_UPDATED`)               β”‚
      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Component Versions

Component Version Package
Desktop Client (Tauri + Rust + React) v0.7.0 Releases
Self-Hosted Sync Server (Go) v0.7.0 ghcr.io/termimus/termimus-sync

πŸš€ Getting Started

1. Running Desktop App (Development)

Prerequisites

  • Rust (via rustup)
  • Bun (or Node.js 20+)
  • Linux system libraries:
    sudo apt install -y pkg-config build-essential \
      libwebkit2gtk-4.1-dev libssl-dev \
      libayatana-appindicator3-dev librsvg2-dev

Start Desktop App

# Clone the repository
git clone https://github.com/termimus/termimus-ssh.git
cd termimus-ssh

# Install frontend dependencies
bun install

# Run in Tauri dev mode
bun run tauri dev

Build Release Package (Debian, AppImage, or Binary)

bun run tauri build

Compiled bundles will be located in src-tauri/target/release/bundle/.


2. Running Self-Hosted Sync Server

The sync server is packaged as a lightweight, multi-architecture Docker container (linux/amd64 and linux/arm64).

Option A: Docker (Single Command)

docker run -d \
  --name termimus-sync \
  -p 8080:8080 \
  -v termimus_data:/data \
  -e TERMIMUS_AUTH_TOKEN="your-secure-random-token" \
  --restart unless-stopped \
  ghcr.io/termimus/termimus-sync:latest

Option B: Docker Compose

Create docker-compose.yml:

services:
  termimus-sync:
    image: ghcr.io/termimus/termimus-sync:latest
    container_name: termimus-sync
    restart: unless-stopped
    ports:
      - "8080:8080"
    volumes:
      - ./data:/data
    environment:
      - PORT=8080
      - DB_PATH=/data/sync.db
      - TERMIMUS_AUTH_TOKEN=your-secure-random-token

Run with:

docker compose up -d

Option C: Run from Source (Go)

cd server
export TERMIMUS_AUTH_TOKEN="your-secure-random-token"
export PORT="8080"
go run ./cmd/server

πŸ” Security & Cryptography Model

Termimus enforces defense-in-depth principles:

Domain Mechanism Implementation Detail
Key Derivation Argon2id 16-byte random salt, high-memory cost derivation for master password.
Data Encryption AES-256-GCM Authenticated symmetric cipher with unique 12-byte nonces generated per item via OS RNG (OsRng).
Host Key Integrity TOFU / SHA-256 Strict fingerprint validation on every connection; mismatches abort immediately to prevent MITM attacks.
Memory Hygiene Zeroization Derived keys stored in memory are zeroized on vault lock using zeroize.
OS Keyring System Keyring Derived key is securely delegated to KWallet, GNOME Secret Service, macOS Keychain, or Windows Credential Manager.
Blind Sync E2EE Envelope Server accepts only version 2 encrypted bundles; zero plaintext leakage.

πŸ“ Repository Structure

termimus/
β”œβ”€β”€ src/                          # React 19 Frontend
β”‚   β”œβ”€β”€ components/
β”‚   β”‚   β”œβ”€β”€ layout/               # Header, Sidebar, QuickConnect, ConfirmModal
β”‚   β”‚   β”œβ”€β”€ hosts/                # Host management, folder tree, latency badges
β”‚   β”‚   β”œβ”€β”€ terminal/             # Xterm.js terminal view & session tabs
β”‚   β”‚   β”œβ”€β”€ workspaces/           # Multi-server layout presets & cluster launcher
β”‚   β”‚   β”œβ”€β”€ sftp/                 # Dual-pane browser & remote code editor
β”‚   β”‚   β”œβ”€β”€ keychain/             # KeyModal, IdentityModal, public key derivation
β”‚   β”‚   β”œβ”€β”€ tunnels/              # Port forwarding manager
β”‚   β”‚   β”œβ”€β”€ snippets/             # Scripts library
β”‚   β”‚   β”œβ”€β”€ sync/                 # Self-hosted cloud sync manager
β”‚   β”‚   β”œβ”€β”€ vault/                # Backup & restore components
β”‚   β”‚   └── settings/             # Tabbed settings suite (full-width)
β”‚   β”œβ”€β”€ stores/                   # Zustand domain stores
β”‚   └── lib/                      # Tauri typed invoke wrappers
β”‚
β”œβ”€β”€ src-tauri/                    # Rust Backend (Tauri v2)
β”‚   └── src/
β”‚       β”œβ”€β”€ ssh/                  # Russh async client & TOFU verification
β”‚       β”œβ”€β”€ sftp/                 # Russh-sftp engine & local filesystem
β”‚       β”œβ”€β”€ tunnel/               # Channel direct TCP/IP forwarder
β”‚       β”œβ”€β”€ vault/                # AES-256-GCM & Argon2id encryption manager
β”‚       β”œβ”€β”€ sshkey/               # ED25519/RSA/ECDSA key generation & derivation
β”‚       β”œβ”€β”€ db/                   # SQLite schema, queries & backup engine
β”‚       └── commands/             # Tauri IPC command handlers
β”‚
β”œβ”€β”€ server/                       # Self-Hosted Sync Server (Go)
β”‚   β”œβ”€β”€ cmd/server/               # Server entrypoint
β”‚   β”œβ”€β”€ internal/                 # DB (pure Go SQLite), Hub (WebSockets), Handlers
β”‚   β”œβ”€β”€ Dockerfile                # Multi-stage minimal container
β”‚   β”œβ”€β”€ docker-compose.yml        # Production-ready compose configuration
β”‚   └── README.md                 # Server documentation
β”‚
└── .github/workflows/            # GitHub Actions CI/CD (Multi-arch GHCR build)

πŸ’– Support the Project

If you find Termimus useful and want to support its ongoing development (server infrastructure, domain, and new features), consider buying a coffee! Every contribution helps keep the project independent, local-first, and completely free.

Buy Me a Coffee at ko-fi.com


🀝 Contributing

Contributions, issues, and feature requests are welcome!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feat/amazing-feature)
  3. Commit your Changes (git commit -m 'feat: add amazing feature')
  4. Push to the Branch (git push origin feat/amazing-feature)
  5. Open a Pull Request

πŸ“„ License

Distributed under the MIT License. See LICENSE for more information.


Built with ❀️ for privacy-minded sysadmins and developers.

About

A modern, open-source & self-hosted SSH client and server manager. Local-first, zero-knowledge encryption, and seamless multi-device sync.

Resources

Contributing

Stars

66 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages