Skip to content

wayyoungboy/myterm

Repository files navigation

MyTerm

A Tauri desktop SSH manager for terminal tabs, SFTP, host monitoring, and proxy workflows.

Tauri React Rust TypeScript

MyTerm showcase

MyTerm is an SSH-first desktop operations workspace inspired by XTerminal. It focuses on the daily loop of connecting to servers, opening terminal tabs, moving files, checking host state, and routing through proxies without turning the app into a cloud sync product.

Core Workflows

Workflow Status Notes
SSH connection manager Stable path Password, explicit private key path, ssh-agent, and default private keys.
Terminal tabs Stable path xterm.js terminal sessions inside a Tauri desktop shell.
SFTP from terminal Stable path File operations launch independent SSH sessions for blocking work.
Host monitoring Stable path Monitoring launched from an active terminal tab with separate SSH collection.
Outbound proxy Stable path HTTP CONNECT, SOCKS5, and ProxyJump through SSH direct-tcpip.
Extra tool views Experimental Notes, quick commands, import/export, local terminal, Telnet, RDP launcher, port forwarding.

Cloud sync is intentionally not implemented.

Stack

  • Tauri 2 + Rust
  • React 19 + TypeScript + Vite
  • Zustand for client state
  • xterm.js for terminal rendering
  • ssh2 for SSH/SFTP
  • SQLite via rusqlite

Development

Install dependencies:

npm install

Run the frontend only:

npm run dev

Run the desktop app in development mode:

npm run tauri dev

Development mode starts a local Vite server, so it occupies a localhost port. Packaged desktop builds do not need that development port.

The app does not need to listen on a public port for normal SSH terminal, SFTP, monitoring, or outbound HTTP/SOCKS5 proxy workflows. Local listening is only needed for development server mode and features that intentionally expose a listener, such as local or dynamic port forwarding.

Logs

The desktop app writes runtime logs to the Tauri app data directory as myterm.log. The log includes startup, connection CRUD, SSH connect/disconnect, SSH outbound proxy and ProxyJump setup, SFTP operations, monitor fetches, and port-forward lifecycle events with operation IDs and elapsed times.

Default level is info. Use MYTERM_LOG=debug or MYTERM_LOG=trace before launching the app when deeper troubleshooting is needed.

Logs intentionally do not record passwords, private key contents, or terminal input bytes.

Verification

Frontend build:

npm run build

Rust check:

cd src-tauri
cargo check

Rust tests:

cd src-tauri
cargo test

macOS package build:

npm run tauri -- build

In this automation environment the standard DMG bundler can fail when Finder AppleScript times out. The release binary and .app are still produced under src-tauri/target/release. A verified fallback is to clean stale rw.*.dmg files and run the generated bundle_dmg.sh with --skip-jenkins; the resulting DMG is written to src-tauri/target/release/bundle/dmg/.

Real SSH connectivity smoke test:

ssh -o BatchMode=yes -o ConnectTimeout=10 -p 17244 wayserver@103.112.184.13 'echo MYTERM_SSH_OK && uname -a && pwd'

The test server is for runtime validation only. Do not commit passwords, private keys, or generated local connection databases.

About

Tauri + React desktop SSH manager with terminal tabs, SFTP, monitoring, and proxy workflows

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors