Local-first cross-platform SSH workspace
Native shells, remote hosts, contextual files, snippets, and integrated editing — in one frame.
Language: 🇬🇧 English | 🇷🇺 Русский • Docs: 🇬🇧 Documentation | 🇷🇺 Документация
Grab the latest installer for your platform. Builds are published by GitHub Actions with SHA-256 checksums-*.txt files — verify before installing.
| Platform | Download | Notes |
|---|---|---|
| 🍎 macOS (Apple Silicon) | M1/M2/M3 and newer | |
| 🍎 macOS (Intel) | Intel Macs | |
| 🪟 Windows (x64) | or NSIS .exe | |
| 🐧 Linux (x64) | or .deb |
Looking for a specific build, checksums, or older versions? See all GitHub Releases or the download site (auto-detects your OS).
👉 The GIF is a quick taste — see the full gallery for the editor, SSH picker, and themes in full resolution.
Termif is a local-first desktop SSH workspace for operators and developers who move constantly between local and remote environments. The application combines low-latency local PTY sessions, SSH session orchestration, contextual file navigation, snippets, and editing in one frame. Instead of treating terminal, files, and editor as disconnected utilities, Termif keeps those surfaces synchronized around the active tab context and connection state.
The product now targets Windows, macOS, and Linux from the same codebase. Platform differences are isolated to shell/profile resolution, keyboard conventions, window controls, filesystem roots, and release packaging, while terminal, SSH, editor, and workspace behavior remain shared.
Termif is built for daily SSH-heavy work where the useful context should stay on your machine. Hosts, settings, snippets, and restored UI state are local by default. Remote connections are explicit, host-key trust is visible, and detached SSH tabs reconnect only when you ask them to.
It is not positioned as just another terminal skin. Termif is a focused workspace for moving between a shell, remote files, quick commands, and release checks without scattering that work across separate apps.
- Start from a local shell tab.
- Open an SSH picker tab or import hosts from
~/.ssh/config. - Connect to a host, browse the active local or remote path, and preview or edit files.
- Run saved snippets into the active terminal.
- Reconnect detached SSH tabs explicitly after restart or network failure.
Termif fits developers, solo operators, homelab owners, and small infrastructure teams who want a native desktop workspace for many machines. It is especially useful when you want local settings and files, predictable cross-platform shortcuts, and release artifacts you can verify before installing.
Download installers only from the Termif site or GitHub Releases. Release assets include checksums-*.txt files when CI publishes bundles. Compare the SHA-256 hash of the downloaded installer with the matching checksum before installing.
Stable updater manifests are signed separately through Tauri updater signing secrets. Windows/macOS code signing and notarization are still hardening roadmap items, not completed guarantees.
Termif ships a custom app shell with premium tab behaviors, including rename, color tagging, duplication, fast close, and keyboard-driven switching with MRU or positional mode. The top-level command palette orchestrates workspace actions without forcing users through deep menu trees. A native-feeling title bar, custom window controls, and layout docking keep interaction density high without losing clarity.
Local sessions run through portable PTY integration and stream output to xterm.js in real time. SSH sessions are provisioned through a host picker that merges imported ~/.ssh/config hosts and managed hosts, supports grouping, allows alias overrides, and can persist quick-connect definitions. When remote sessions degrade, the UI surfaces explicit disconnect reasons and uses reconnect flows instead of silent failure.
The sidebar is contextual. For local tabs, it operates on local filesystem paths. For SSH tabs, it resolves the remote path via the active session and performs remote listing, read, and write operations. The editor layer supports preview and edit modes, tracks dirty state, opens in docked mode or separate windows, and keeps remote versus local provenance visible per file tab.
Snippets provide lightweight command storage in the sidebar with collapsible text sections and one-click execution into the active terminal. They are intentionally local to the client environment.
The status bar supplies SSH runtime telemetry with CPU, RAM, disk, user counts, and server clock snapshots, while local clock and visibility controls remain configurable from settings.
Termif is built as a Tauri v2 desktop shell with a React + TypeScript frontend and a Rust backend.
The frontend handles interaction surfaces, state projection, and keyboard orchestration. A centralized Zustand store coordinates tabs, host state, file context, editor workspace, and UI overlays. xterm.js handles rendering, and terminal output is delivered through Tauri channels rather than polling.
The backend owns session lifecycle, SSH transport, filesystem operations, settings, host persistence, and monitoring loops. Local shell sessions are spawned through portable-pty. SSH execution, shell channels, and remote command capture run through russh. Persistence is file-based JSON in the Tauri app data directory with atomic temp-file replacement for writes.
For architectural deep dive, read ARCHITECTURE.md.
Termif persists operational state in JSON artifacts that are explicitly scoped by concern: settings.json for runtime preferences, hosts.json for managed hosts/groups/import overrides, and ui_state.json for tab presentation metadata and active tab restoration. Snippets and bounded per-tab terminal logs are currently persisted in frontend localStorage and bound to the client environment.
On startup, Termif attempts to recover saved tab metadata and reconstruct local or SSH-picker tabs. Local shells start as fresh processes while their previous visible scrollback can be replayed from the saved tab log. SSH tabs restore as detached tabs that can reconnect explicitly. If restoration is missing or invalid, the product falls back to creating a default local tab to preserve a bootable workspace.
Detailed model and compatibility rules are documented in docs/persistence-model.md and docs/settings-model.md.
Release packaging targets Windows MSI/NSIS installers, macOS DMG/App bundles, and Linux DEB/AppImage packages. GitHub Actions validates and builds on Windows, macOS, and Ubuntu, then publishes platform artifacts with SHA-256 checksum files.
Local shell defaults follow the host platform: PowerShell on Windows, zsh on macOS, and bash on Linux. App shortcuts use Ctrl on Windows/Linux and Command on macOS, while terminal control sequences such as Ctrl+C remain available to the running shell. SSH host import/export resolves the user's platform home directory and uses the standard ~/.ssh/config location on every OS.
| Platform | Architectures | Installers | Default shell |
|---|---|---|---|
| 🍎 macOS | Apple Silicon (arm64), Intel (x64) | DMG, App | zsh |
| 🪟 Windows | x64 | MSI, NSIS (.exe) | PowerShell |
| 🐧 Linux | x64 | AppImage, DEB | bash |
Termif surfaces concrete failures rather than generic UI states. If a session id is stale, backend calls return session not found. If SSH authentication fails, the UI receives an explicit password/key rejected message. Remote list/read/write commands propagate stderr payloads when available. Unsupported operations, such as invoking remote-only behavior on local sessions, return deterministic unsupported operation errors. Missing ~/.ssh/config files are handled as an empty import set instead of a fatal condition.
ARCHITECTURE.md describes runtime boundaries and execution paths.
ROADMAP.md tracks product direction and delivery themes.
CONTRIBUTING.md defines repository standards and review contract.
docs/settings-model.md, docs/persistence-model.md, docs/plugin-system-proposal.md, and docs/ci-release-plan.md cover subsystem specifications.
Contributions are welcome. Start with CONTRIBUTING.md, and please follow the Code of Conduct. Use the issue templates to file bugs or feature requests.
Found a security issue? Report it privately via a GitHub Security Advisory — see SECURITY.md. Never open a public issue for vulnerabilities.
SSH host picker![]() |
Integrated editor![]() |
Workspace with background image![]() |
Workspace![]() |
Focused (sidebar hidden)![]() |
Windows![]() |
flowchart TD
subgraph Frontend["Frontend — React + TypeScript"]
UI["App shell · tabs · palette · settings"]
Store["Zustand store"]
Term["xterm.js terminal"]
end
subgraph Backend["Backend — Rust"]
Sessions["Session lifecycle"]
PTY["Local PTY (portable-pty)"]
SSH["SSH transport (russh)"]
FS["Filesystem ops"]
Persist["JSON persistence (atomic writes)"]
end
UI --> Store
Store -->|Tauri IPC| Sessions
Term -->|Tauri channels| Sessions
Sessions --> PTY
Sessions --> SSH
Sessions --> FS
Sessions --> Persist
SSH -->|"~/.ssh/config · known_hosts"| Host[(Remote hosts)]
See ARCHITECTURE.md for the full runtime breakdown.
Termif is available under the MIT license. You can use, modify, distribute, sublicense, and sell software built from this codebase, including commercial use, as long as the license notice is preserved.
Full legal text: LICENSE.
If Termif is useful to you, a ⭐ helps others find it.






