{"id":51327167,"url":"https://github.com/st0ff3l/fileterm","last_synced_at":"2026-07-23T17:00:32.876Z","repository":{"id":362881798,"uuid":"1239687679","full_name":"St0ff3l/fileterm","owner":"St0ff3l","description":"FileTerm (formerly TermDock): a modern desktop remote workspace for SSH, SFTP, and FTP. • FileTerm（原 TermDock）：面向 SSH、SFTP 和 FTP 的现代桌面远程工作台。","archived":false,"fork":false,"pushed_at":"2026-07-16T11:27:40.000Z","size":14101,"stargazers_count":155,"open_issues_count":6,"forks_count":22,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-07-16T13:10:03.780Z","etag":null,"topics":["desktop-application","devops-tools","electron","ftp","ftp-client","monaco-editor","react","sftp","sftp-client","ssh","ssh-client","sysadmin-tools","terminal","typescript","xterm"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/St0ff3l.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"docs/roadmap.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-15T10:40:39.000Z","updated_at":"2026-07-16T11:27:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"33cd3f11-fea2-4b87-80b2-4fb619c24714","html_url":"https://github.com/St0ff3l/fileterm","commit_stats":null,"previous_names":["st0ff3l/termdock","st0ff3l/fileterm"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/St0ff3l/fileterm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/St0ff3l%2Ffileterm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/St0ff3l%2Ffileterm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/St0ff3l%2Ffileterm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/St0ff3l%2Ffileterm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/St0ff3l","download_url":"https://codeload.github.com/St0ff3l/fileterm/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/St0ff3l%2Ffileterm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35809505,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["desktop-application","devops-tools","electron","ftp","ftp-client","monaco-editor","react","sftp","sftp-client","ssh","ssh-client","sysadmin-tools","terminal","typescript","xterm"],"created_at":"2026-07-01T19:30:40.793Z","updated_at":"2026-07-23T17:00:32.864Z","avatar_url":"https://github.com/St0ff3l.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca id=\"readme-top\"\u003e\u003c/a\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr /\u003e\n  \u003cimg alt=\"FileTerm\" src=\"https://readme-typing-svg.demolab.com?font=JetBrains+Mono\u0026weight=800\u0026size=34\u0026duration=2600\u0026pause=900\u0026color=38BDF8\u0026center=true\u0026vCenter=true\u0026width=760\u0026lines=FileTerm;SSH+%2B+SFTP+%2B+FTP+Workspace;A+Modern+Remote+Desktop+Workbench\" /\u003e\n  \u003cbr /\u003e\n  \u003cbr /\u003e\n  \u003cp\u003e\u003cstrong\u003e一个为开发者和运维场景打造的现代桌面远程工作台，正式版现已发布。\u003c/strong\u003e\u003c/p\u003e\n  \u003cp\u003eSSH 终端、SFTP 与 FTP/FTPS 文件、多标签工作区和传输任务中心，收束到一个顺手的桌面客户端里。\u003c/p\u003e\n  \u003cp\u003e\n    \u003ckbd\u003e中文\u003c/kbd\u003e\n    \u003ckbd\u003e\u003ca href=\"./README_EN.md\"\u003eEnglish\u003c/a\u003e\u003c/kbd\u003e\n  \u003c/p\u003e\n  \u003cp\u003e\n    \u003ca href=\"./LICENSE\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/license-MIT-111827?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/St0ff3l/fileterm/releases/latest\"\u003e\u003cimg alt=\"Status\" src=\"https://img.shields.io/badge/status-Official%20Release-22C55E?style=for-the-badge\"\u003e\u003c/a\u003e\n    \u003cimg alt=\"Platform\" src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Windows-6366F1?style=for-the-badge\"\u003e\n    \u003ca href=\"https://github.com/St0ff3l/fileterm/stargazers\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/St0ff3l/fileterm?style=for-the-badge\u0026logo=github\u0026label=stars\"\u003e\u003c/a\u003e\n  \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## 下载正式版\n\n前往 [GitHub Releases](https://github.com/St0ff3l/fileterm/releases/latest) 下载最新正式版：\n\n- **macOS**：提供 Apple Silicon（arm64）和 Intel（x64）安装包。\n- **Windows**：提供 x64 NSIS 安装包；已安装的正式版会在应用内下载、验签并在重启后更新。\n\nmacOS 的“检查更新”会打开对应的 GitHub Release 下载页，由用户自行下载和安装；Windows 正式安装版使用签名的应用内更新。\n\n需要从源码运行或参与开发？请继续阅读 [从源码开始](#从源码开始)。\n\n## FileTerm 是什么\n\nFileTerm 面向开发者和运维人员的日常远程工作：将远程终端、文件管理、传输任务和连接配置集中到同一个桌面工作区。\n\n- 使用 SSH 时，终端与 SFTP 文件面板自然联动。\n- 使用 FTP/FTPS 时，界面直接进入专注文件操作的工作流。\n- 多个连接以标签页并行运行，互不打断。\n- 上传、下载、进度与错误统一进入传输任务中心。\n- 连接配置、工作区状态和主题体验均为长期使用设计。\n\n\u003cp align=\"center\"\u003e\u003cimg width=\"900\" alt=\"FileTerm workspace preview\" src=\"./docs/assets/fileterm-dark-light-35deg.png\" /\u003e\u003c/p\u003e\n\n正式版聚焦最常用的 `SSH / SFTP / FTP / FTPS` 工作流：把远程终端、文件操作和传输任务做稳、做顺、做漂亮。\n\n## 核心能力\n\n| 能力              | 说明                                                                              |\n| ----------------- | --------------------------------------------------------------------------------- |\n| SSH 连接管理      | 新增、编辑、删除 SSH 配置；支持文件夹分组和 JSON 持久化。                         |\n| FTP/FTPS 连接管理 | 使用独立于 SSH 的连接模型，支持安全 FTP 传输。                                    |\n| SSH 终端          | 基于 xterm.js，支持输入输出、自适应尺寸、搜索、剪贴板互通和悬浮命令输入条。       |\n| SFTP 文件管理     | 支持远程目录浏览、读写、新建、删除、重命名和权限修改。                            |\n| FTP/FTPS 文件管理 | 提供 FTP/FTPS 会话、远程目录浏览、文件操作与可恢复传输。                          |\n| 文件编辑器        | 基于 Monaco Editor 的双栏文件树与编辑区，支持语法高亮、查找替换、编码和语言切换。 |\n| 终端目录同步      | SSH 终端当前工作目录可与文件管理器双向同步。                                      |\n| Root 权限同步     | 感知终端中的 `sudo` / `su`，让文件管理器同步对应权限上下文。                      |\n| 虚拟文件列表      | 通过虚拟滚动高效展示大型远程目录。                                                |\n| 传输任务中心      | 统一管理上传、下载、断点续传、进度、速度、取消及文件夹递归传输。                  |\n| 工作区标签        | 支持多标签并行连接、断开、重连、状态持久化和标签切换动效。                        |\n| 命令模板          | 支持快捷命令、文件夹分组、参数占位符和一键发送。                                  |\n| 主题与桌面壳      | 支持深色/浅色主题、侧栏、文件抽屉、焦点模式和独立管理窗口。                       |\n\n## 技术栈\n\n| Desktop  | Renderer     | Language          | Terminal | Editor        | Protocols                             | Tooling                |\n| -------- | ------------ | ----------------- | -------- | ------------- | ------------------------------------- | ---------------------- |\n| Tauri v2 | React + Vite | Rust + TypeScript | xterm.js | Monaco Editor | russh/russh-sftp + suppaftp + tokio-* | Cargo + npm workspaces |\n\n```txt\nrenderer UI    -\u003e React workspace, tabs, files, terminal\nTauri bridge   -\u003e typed Rust command/event boundary\nRust services  -\u003e session lifecycle, storage, update and protocol services\nprotocols      -\u003e russh SSH/SFTP, FTP/FTPS, Telnet and Serial adapters\ntheme system   -\u003e tokens -\u003e vars -\u003e skins -\u003e terminal colors\n```\n\n## 架构原则\n\n```txt\nRenderer UI\n  -\u003e Application State\n    -\u003e Tauri API bridge\n      -\u003e Rust commands/events\n        -\u003e Desktop services\n          -\u003e Session workers\n            -\u003e Protocol clients\n```\n\n- `packages/core` 是领域模型的 single source of truth。\n- Renderer 不直接访问 SSH、SFTP、FTP/FTPS protocol clients。\n- 所有系统能力必须通过 `Rust commands/events -\u003e tauri-api.ts -\u003e renderer` 暴露。\n- SSH/SFTP 与 FTP/FTPS 在 controller/protocol 层保持分离。\n- 传输进度统一进入 transfer system，不在组件中分散维护。\n\n完整架构说明见 [docs/architecture.md](./docs/architecture.md)。\n\n## 从源码开始\n\n### 环境要求\n\n- Node.js \u003e= 22.12.0\n- npm\n- Rust stable 与当前平台所需的 Tauri 系统依赖\n\nLinux（Ubuntu/Debian）还需要安装 GTK 与 WebKit 运行时：\n\n```bash\n# Ubuntu 24.04 及以上\nsudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev patchelf build-essential libssl-dev\n\n# Ubuntu 22.04 请将 4.1 替换为 4.0\n```\n\n`npm run dev` 需要本地图形会话。纯 SSH、无桌面的服务器或缺少 XWayland 的 Wayland 会话下 GTK 无法初始化；此时启动脚本会打印当前的显示环境变量与排查建议，而不是直接抛出 GTK panic。\n\n### 安装与启动\n\n```bash\nnpm install\nnpm run dev # 默认启动 Tauri/Rust 运行时\n```\n\n`dev`、`build`、`typecheck` 会自动先构建 `@fileterm/core`、`@fileterm/shared`、`@fileterm/storage`（它们的入口指向 `dist/`）。全新克隆后无需手动构建这些包。\n\n### 常用命令\n\n```bash\nnpm run dev          # Tauri/Rust\nnpm run test         # Tauri/Rust 测试\nnpm run typecheck\nnpm run build        # Tauri/Rust 生产二进制\nnpm run release:mac\nnpm run release:win\n```\n\n### 发布与更新\n\n- 推送位于 `release/*` 分支提交上的 `vX.Y.Z` tag，会运行 Tauri 专用 Release Action，发布 macOS arm64/x64 DMG 与 Windows x64 NSIS 安装包。\n- Windows Action 同时生成带签名的 NSIS 安装器、`.sig` 签名文件和 `latest.json`；已安装 Windows 客户端从该清单验签后更新。\n- 仓库需要配置 GitHub Actions Secret `TAURI_SIGNING_PRIVATE_KEY`。它是 Tauri updater 私钥内容，只能保存为 GitHub Secret，绝不能提交到仓库。\n- macOS 发行包使用 ad hoc 签名（不使用 Apple Developer 证书或公证），不使用应用内 updater：检查到新版本后跳转 GitHub Release，由用户选择下载包；首次下载运行仍可能需要在“隐私与安全性”中手动放行。\n\n## 仓库结构\n\n```txt\nfileterm/\n  apps/\n    tauri/                   # Tauri + Rust desktop app\n      src/\n        bridge/              # typed Tauri command/event API\n        renderer/            # React workspace UI\n      src-tauri/             # Rust commands, services, sessions and bundling\n  packages/\n    core/                    # domain types\n    storage/                 # repository abstractions\n    shared/                  # shared constants and utilities\n  docs/\n    architecture.md          # architecture map\n    roadmap.md               # product roadmap\n    plans/                   # active and completed execution plans\n    decisions/               # architecture decisions\n    quality/                 # quality and release checks\n  AGENTS.md                  # map for human and AI collaborators\n```\n\n## 路线图\n\n正式版后的演进重点：\n\n1. 持续提升 `SSH / SFTP / FTP / FTPS` 主链路的稳定性与可用性。\n2. 继续拆分 Tauri workspace、session service 和 renderer 的职责，进一步明确分层边界。\n3. 将领域类型继续收敛到 `packages/core`。\n4. 持续完善传输任务、错误提示、主题、终端输入、文件抽屉和桌面壳体验。\n5. 维护 macOS 与 Windows 正式版的分发和发布质量。\n\n完整计划见 [docs/roadmap.md](./docs/roadmap.md)。\n\n## 开源组件\n\n- [xterm.js](https://xtermjs.org/)：用于 SSH 终端渲染、输入输出和窗口尺寸适配。\n- [Monaco Editor](https://microsoft.github.io/monaco-editor/)：用于文件编辑、语法高亮和查找替换。\n\n## 参与贡献\n\n仓库把代码库本身作为记录系统：\n\n- [AGENTS.md](./AGENTS.md) 是协作入口地图。\n- [docs/architecture.md](./docs/architecture.md) 记录稳定的架构事实。\n- [docs/plans/active](./docs/plans/active) 存放跨层进行中的计划。\n- [docs/decisions](./docs/decisions) 记录已确认的架构选择。\n- [.agents/extensions](./.agents/extensions) 存放功能草案与扩展设计。\n\n如果计划贡献较大的功能，建议先补充一份 active plan，再开始编码。\n\n## 贡献者\n\n感谢每一位让 FileTerm 变得更好的贡献者。\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"180\"\u003e\n      \u003ca href=\"https://github.com/St0ff3l\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/St0ff3l?s=120\" width=\"72\" height=\"72\" alt=\"St0ff3l\" /\u003e\n        \u003cbr /\u003e\n        \u003csub\u003e\u003cb\u003eSt0ff3l\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e构建了 Rust/Tauri 后端核心，打通 command/event、会话控制、文件能力与工作区状态等核心链路。\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n    \u003ctd align=\"center\" width=\"180\"\u003e\n      \u003ca href=\"https://github.com/Flashhhhhhzj\"\u003e\n        \u003cimg src=\"https://avatars.githubusercontent.com/Flashhhhhhzj?s=120\" width=\"72\" height=\"72\" alt=\"Flashhhhhhzj\" /\u003e\n        \u003cbr /\u003e\n        \u003csub\u003e\u003cb\u003eFlashhhhhhzj\u003c/b\u003e\u003c/sub\u003e\n      \u003c/a\u003e\n    \u003c/td\u003e\n    \u003ctd\u003e重构并设计前端样式，统一设计语言，推动主题 token、组件皮肤和整体视觉体验成形。\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## 社区交流\n\n扫码加入 **FileTerm** 微信交流群，与开发者和其他用户交流使用体验、问题反馈与后续版本动态。\n\n也可加入 QQ 群：`534418986`。\n\n![FileTerm 微信交流群二维码](./docs/assets/fileterm-wechat-group-qr.jpg)\n\n## 支持项目\n\n如果 FileTerm 对你有帮助，欢迎到 [GitHub](https://github.com/St0ff3l/fileterm) 点亮 Star：\n\n\u003ca href=\"https://github.com/St0ff3l/fileterm/stargazers\"\u003e\u003cimg alt=\"GitHub stars\" src=\"https://img.shields.io/github/stars/St0ff3l/fileterm?style=for-the-badge\u0026logo=github\u0026label=Star%20FileTerm\"\u003e\u003c/a\u003e\n\n## 开源协议\n\nFileTerm 使用 [MIT License](./LICENSE) 开源。\n\n\u003cp align=\"right\"\u003e\u003ca href=\"#readme-top\"\u003e回到顶部\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fst0ff3l%2Ffileterm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fst0ff3l%2Ffileterm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fst0ff3l%2Ffileterm/lists"}