A modern desktop remote workspace for developers and operations teams. The official release is now available.
SSH terminals, SFTP and FTP files, workspace tabs, and transfer tasks in one focused desktop client.
中文 English
Download the latest release from GitHub Releases:
- macOS: packages for Apple Silicon (arm64) and Intel (x64).
- Windows: x64 NSIS installer and portable
.exe; installed production builds download, verify, and install updates after restart. - Linux: x64
.debpackages and.AppImagebinaries.
An .AppImage is executable. If it does not start when double-clicked, run chmod +x FileTerm-*-linux-x86_64.AppImage and then execute the file from a terminal.
On first launch, FileTerm uses Chinese for Chinese system locales and English for all other locales. You can change the language in Settings; a saved choice takes precedence on later launches.
macOS and Linux update checks open the matching GitHub Release page for a user-selected download. Signed in-app updates are used by installed Windows releases.
Want to run from source or contribute? Continue to Getting Started from Source.
FileTerm is built for daily remote work by developers and operations teams. It brings remote terminals, file management, transfer tasks, and connection profiles into one desktop workspace.
- SSH sessions pair terminal work naturally with SFTP file panels.
- FTP/FTPS sessions use a focused file-only workflow.
- Multiple connections run side by side in tabs without interrupting each other.
- Uploads, downloads, progress, and errors are managed in one transfer center.
- Connection profiles, workspace state, and themes are designed for long-term daily use.
The official release focuses on the most frequent SSH / SFTP / FTP / FTPS workflows: reliable remote terminals, file operations, and transfers.
| Capability | Description |
|---|---|
| SSH profile management | Create, edit, delete, and group SSH profiles with JSON persistence. |
| FTP/FTPS profile management | Uses a connection model kept separate from SSH and supports secure FTP transfers. |
| SSH terminal | Powered by xterm.js with input/output, resize, search, clipboard support, and a floating command bar. |
| SFTP file management | Browse remote directories; read, write, create, delete, rename, and change permissions. |
| FTP/FTPS file management | FTP/FTPS sessions with remote browsing, file operations, and resumable transfers. |
| File editor | A Monaco Editor-based two-pane file tree and editor with syntax highlighting, find/replace, encoding, and language controls. |
| Terminal directory sync | Keeps the active SSH working directory and file manager in sync. |
| Root privilege sync | Detects sudo / su in the terminal and synchronizes the file-manager permission context. |
| Virtualized file list | Uses virtual scrolling for efficient browsing of large remote directories. |
| Transfer center | Centralized uploads, downloads, resume support, progress, speed, cancellation, and recursive folder transfers. |
| Workspace tabs | Parallel connections, disconnect/reconnect, persisted state, and animated tab transitions. |
| Command templates | Grouped quick commands, parameter placeholders, and one-click sending. |
| Theme system | Dark and light themes through tokens, CSS variables, and component skins. |
| Remote status monitoring | Connection status and system-resource summaries. |
| Theme and desktop shell | Dark and light themes, sidebars, file drawer, focus mode, and dedicated management windows. |
| Desktop | Renderer | Language | Terminal | Editor | Protocols | Tooling |
|---|---|---|---|---|---|---|
| Tauri v2 | React + Vite | Rust + TypeScript | xterm.js | Monaco Editor | russh/russh-sftp + suppaftp + tokio-* | Cargo + npm workspaces |
renderer UI -> React workspace, tabs, files, terminal
Tauri bridge -> typed Rust command/event boundary
Rust services -> session lifecycle, storage, update and protocol services
protocols -> russh SSH/SFTP, FTP/FTPS, Telnet and Serial adapters
theme system -> tokens -> vars -> skins -> terminal colorsRenderer UI
-> Application State
-> Tauri API bridge
-> Rust commands/events
-> Desktop services
-> Session workers
-> Protocol clientspackages/coreis the single source of truth for domain models.- The renderer never accesses SSH, SFTP, or FTP/FTPS protocol clients directly.
- All system capabilities are exposed through
Rust commands/events -> tauri-api.ts -> renderer. - SSH/SFTP and FTP/FTPS remain separate at controller and protocol layers.
- Transfer progress enters one transfer system instead of being maintained separately by components.
See docs/architecture.md for the complete architecture map.
- Node.js >= 22.12.0
- npm
- Rust stable, plus the Tauri system dependencies for your platform
On Linux (Ubuntu/Debian) you also need the GTK and WebKit runtimes:
# Ubuntu 24.04 and newer
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf build-essential libssl-dev
# On Ubuntu 22.04, replace 4.1 with 4.0npm run dev requires a local graphical session. GTK cannot initialize over plain SSH, on a headless server, or in a Wayland session without XWayland. In those cases the launcher prints the current display environment and troubleshooting hints instead of a bare GTK panic.
npm install
npm run devdev, build, and typecheck build @fileterm/core, @fileterm/shared, and @fileterm/storage first, since their entry points resolve to dist/. No manual build step is needed after a fresh clone.
npm run dev
npm run test
npm run typecheck
npm run build
npm run release:mac
npm run release:win
npm run release:linux- A
vX.Y.Ztag on arelease/*commit runs the Tauri-only Release Action and publishes macOS arm64/x64 DMGs, the Windows x64 NSIS installer, and Linux x64.deb/.AppImagepackages. - The Windows job also publishes the signed NSIS installer, its
.sigsignature, andlatest.json; installed Windows clients verify that manifest before updating. - Configure the repository Actions Secret
TAURI_SIGNING_PRIVATE_KEYwith the Tauri updater private-key contents. Never commit that private key. - macOS release bundles use ad-hoc signing (without an Apple Developer certificate or notarization) and deliberately keep the GitHub Release download flow rather than using the in-app updater. First-run users may still need to whitelist the app in Privacy & Security.
fileterm/
apps/
tauri/ # Tauri + Rust desktop app
src/
bridge/ # typed Tauri command/event API
renderer/ # React workspace UI
src-tauri/ # Rust commands, services, sessions, and bundling
packages/
core/ # domain types
storage/ # repository abstractions
shared/ # shared constants and utilities
docs/
architecture.md # architecture map
roadmap.md # product roadmap
plans/ # active and completed execution plans
decisions/ # architecture decisions
quality/ # quality and release checks
AGENTS.md # map for human and AI collaboratorsPost-release priorities:
- Keep improving the stability and usability of the
SSH / SFTP / FTP / FTPScore workflows. - Keep refining the Tauri workspace, session service, and renderer boundaries.
- Continue consolidating domain types in
packages/core. - Improve transfer tasks, errors, themes, terminal input, file drawers, and the desktop shell.
- Maintain release quality and distribution for macOS, Windows, and Linux.
See docs/roadmap.md for the full plan.
- xterm.js for SSH terminal rendering, input/output, and resize handling.
- Monaco Editor for file editing, syntax highlighting, and search/replace.
- Bundled fonts and icon fonts: see THIRD_PARTY_NOTICES.md for their licenses and sources.
This repository treats the codebase as its record system:
- AGENTS.md is the entry map for collaboration.
- docs/architecture.md records stable architecture facts.
- docs/plans/active contains active cross-layer plans.
- docs/decisions records confirmed architecture decisions.
- .agents/extensions contains feature drafts and extension designs.
For a substantial feature, please add or update an active plan before writing code.
Thank you to everyone who makes FileTerm better.
|
St0ff3l |
Built the Rust/Tauri backend core, including the command/event boundary, session control, file capabilities, and workspace state. |
|
Flashhhhhhzj |
Redesigned and modernized the frontend styling, unified the design language, and shaped theme tokens, component skins, and the visual experience. |
Scan the QR code to join the FileTerm WeChat community for usage discussions, feedback, and product updates.
You can also join the QQ group: 534418986.
If FileTerm helps you, please consider starring the project on GitHub:
FileTerm source code is open-sourced under the MIT License. Bundled fonts and icon fonts remain under their respective licenses; see THIRD_PARTY_NOTICES.md.

