Hoppscotch Desktop 深度解析:基于 Tauri V2 的跨平台桌面端安装、自托管连接与本地构建实战
【免费下载链接】hoppscotchOpen-Source API Development Ecosystem • https://hoppscotch.io • Offline, On-Prem & Cloud • Web, Desktop & CLI • Open-Source Alternative to Postman, Insomnia项目地址: https://gitcode.com/GitHub_Trending/ho/hoppscotch
本篇指南围绕 Hoppscotch Desktop(位于packages/hoppscotch-desktop)展开,覆盖桌面端的应用安装(官方包与 Homebrew)、Hoppscotch Cloud 与自托管实例两种接入方式、WHITELISTED_ORIGINS与 3200 端口等关键配置,以及如何用仓库自带的webapp-bundler将 selfhost 前端打包进桌面壳、本地构建并自托管的完整流程。读完后,你将能够在内网环境把桌面端对接到自己的 Hoppscotch 实例,并理解其底层由 Rust + Tauri 实现的目录结构、本地回环服务器与 deep link 认证机制。
一、Hoppscotch Desktop 是什么
Hoppscotch Desktop 是 Hoppscotch(开源 API 开发生态,可视为 Postman/Insomnia 的开源替代品)的跨平台桌面应用,基于Tauri V2构建。README 标注其当前处于ALPHA阶段,版本号为 26.6.0(见 tauri.conf.json 与 Cargo.toml)。
从 package.json 的依赖看,前端部分由 Vue 3 + TypeScript 组成,并复用了 workspace 内的@hoppscotch/common与@hoppscotch/kernel两个包;Rust 侧则通过tauri-plugin-appload和tauri-plugin-relay(见 Cargo.toml,仓库内亦有 vendored 版本 plugin-workspace/tauri-plugin-appload 与 plugin-workspace/tauri-plugin-relay)分别承担“加载本地打包的 Web 应用”与“网络请求代理转发”的职责——这正是桌面端能够连接 Cloud 和自托管实例的关键。
二、安装方式
方式一:下载官方安装包
- 从 Hoppscotch 官网下载页获取最新版 Hoppscotch Desktop App;
- 打开下载的文件;
- 按照屏幕提示完成安装;
- 启动应用。
方式二:使用 Homebrew(macOS / Linux)
brew install --cask hoppscotch应用标识为io.hoppscotch.desktop(见 path.rs 中的APP_ID常量,与tauri.conf.json的identifier保持一致),这也是本地配置目录、日志目录命名的依据。
三、两种接入方式:Cloud 与 Self-Hosted
桌面端的核心价值在于:同一个客户端既可以使用 Hoppscotch Cloud,也可以连接你自己部署的 Community/Enterprise 自托管实例。
3.1 Hoppscotch Cloud(个人版)
- 打开 Hoppscotch Desktop App;
- 点击左上角的 Hoppscotch logo;
- 点击“HOPPSCOTCH CLOUD”;
- 使用 Hoppscotch Cloud 账号登录,即可访问你的 workspace 与集合。
从源码结构看,Cloud 登录走的是浏览器回跳流程:Rust 侧在 lib.rs 的setup_server中,用random_port在15000–25000 端口区间内挑选一个可用端口,启动一个只监听127.0.0.1的 axum 回环服务器(见 server.rs)。该服务器暴露/device-token端点,用户浏览器完成登录并被重定向回来后,access_token/refresh_token以查询参数形式送达该端点,随后通过 Tauri 事件hopp_auth://token注入前端(见 server.rs)。配套的单元测试 server.rs 覆盖了refresh_token可选(如 device code 流程不返回该字段)等边界情况。前端通过hopp_auth_port命令(lib.rs)获取该端口以拼接回跳地址。
3.2 自托管实例(Community / Enterprise 版)
前提配置(重要):为了让桌面端被你的自托管实例认可,需要在.env中把部署域名对应的“桌面伪装 origin”加入WHITELISTED_ORIGINS:
- macOS / Linux:
app://hoppscotch_mydomain_com - Windows:
http://app.hoppscotch_mydomain_com
以允许连接https://hoppscotch.mydomain.com为例:
WHITELISTED_ORIGINS=...existing_origins,app://hoppscotch_mydomain_com,http://app.hoppscotch_mydomain_com注意域名编码规则:
app://前缀后跟的是把.和-替换为_的域名形式。path.rs 的注释还指出这种编码是有损的(test-org与test_org会映射到同一 bundle 名),因此桌面端在配置目录下维护registry.json注册表,把 webview 的app://主机名映射回原始服务器 URL。
连接步骤:
- 打开 Hoppscotch Desktop App;
- 点击左上角的 Hoppscotch logo;
- 点击“Add an instance”;
- 输入你的自托管实例 URL;
- 点击“Connect”。
Docker 部署注意:桌面端会请求前端容器内置的一个 3200 端口的服务。因此启动容器时需同时暴露 3000 与 3200:
docker run -p 3000:3000 -p 3200:3200 hoppscotch/hoppscotch-frontend容器就绪后,可填入[your-ip]:3200;如果使用子路径(subpath)部署,则直接填写实例的 base address 即可。
四、本地构建与自托管桌面端
README 提供了将 selfhost 前端“烘焙”进桌面壳的完整构建链,适合在内网 on-prem 环境分发。步骤如下([path-to-dist-directory]指向第 1 步pnpm generate生成的dist目录):
1. 生成 selfhost web 应用
cd ../hoppscotch-selfhost-web pnpm install pnpm generate2. 构建webapp-bundler
cd crates/webapp-bundler cargo build --release3. 打包 web 应用为 bundle
cd target/release ./webapp-bundler --input [path-to-dist-directory] --output [path-to-hoppscotch-desktop]/bundle.zip --manifest [path-to-hoppscotch-desktop]/manifest.json4. 启动开发服务器
cd hoppscotch-desktop pnpm tauri dev或进行生产构建:
cd src-tauri pnpm tauri dev4.1 webapp-bundler 的参数与产物
webapp-bundler位于 crates/webapp-bundler/src/main.rs,它本质上是 selfhost-web 的webapp-server打包部分的 CLI 化实现。参数如下:
| 参数 | 说明 |
|---|---|
-i, --input | 待打包的目录(必须存在,指向 selfhost-web 的dist) |
-o, --output | 输出的 bundle 文件路径(ZIP 格式) |
-m, --manifest | 可选,manifest JSON 的保存路径 |
-v, --version | 可选,自定义 bundle 版本;缺省时读取环境变量WEBAPP_BUNDLE_VERSION,再缺省使用工具自身的CARGO_PKG_VERSION |
从实现看(main.rs),它会用walkdir+rayon并行遍历输入目录,对每个文件计算BLAKE3 哈希、大小与 MIME 类型,以0o644权限写入 ZIP;manifest 则包含文件清单、版本号与创建时间(created_at)。该 manifest 供 appload 插件在运行时校验/解压 bundle 使用。
4.2 一键脚本与 portable 特性
package.json 中提供了与上述步骤等价的自动化脚本,无需手工串接:
"prepare-web": "(cd ../hoppscotch-selfhost-web && pnpm install && pnpm generate) && (cd crates/webapp-bundler && cargo build --release && cd target/release && ./webapp-bundler --input ../../../../../hoppscotch-selfhost-web/dist --output ../../../../bundle.zip --manifest ../../../../manifest.json)", "dev:full": "pnpm tauri dev", "build:full": "pnpm tauri build", "dev:portable": "pnpm tauri dev -- --no-default-features --features portable", "build:portable": "pnpm tauri build -- --no-default-features --features portable"注意 portable 变体通过 Cargo featureportable切换(Cargo.toml)。从 path.rs 可以确认其语义差异:
- Standard 模式:配置目录遵循平台惯例(macOS 为
~/Library/Application Support/io.hoppscotch.desktop,Windows/Linux 为dirs::config_dir()/io.hoppscotch.desktop); - Portable 模式:所有数据(
hoppscotch-desktop-data、logs、hopp_bundle.zip、hopp_manifest.json)都落在当前工作目录,适合无安装权限的场景。
main.rs启动时会打印PORTABLE/STANDARD模式,并在日志目录不可用时降级为“无日志启动”(main.rs)。
五、运行时架构要点(源码佐证)
理解以下几处实现,有助于排查自托管连接问题:
- 插件装配:lib.rs 中依次注册
window-state(记住窗口位置/尺寸,但排除main登录窗)、process、http、opener、updater、store、deep-link、dialog、shell、fs、appload、relay等插件。appload负责按 registry 从 bundle 加载对应实例的前端,relay负责代理前端发出的网络请求。 - Deep Link 认证:
tauri.conf.json注册了io.hoppscotch.desktop深链 scheme(tauri.conf.json),Rust 侧收到 URL 后发出scheme-request-received事件转发给前端(lib.rs)。 - Linux 剪贴板:
lib.rs中在 Linux 上专门构建原生 Edit 菜单(Undo/Redo/Cut/Copy/Paste/Select All),因为 webkit2gtk 依赖原生菜单项才能识别 Ctrl+C/V/X 快捷键(lib.rs)。 - 自动更新:updater 插件默认启用,端点为
https://releases.hoppscotch.com/hoppscotch-selfhost-desktop.json,并配置了 minisign 公钥做签名校验(tauri.conf.json);updater.rs提供check_for_updates、download_and_install_update、get_download_progress等命令(lib.rs)。自托管场景可自行调整该端点。 - 数据安全:应用启动时会执行版本变更备份检查(
backup.rs的perform_version_check_and_backup),配置目录下的数据按latest/backup组织(path.rs)。
六、最低系统要求
| 平台 | 系统要求 | 架构 |
|---|---|---|
| Windows | Windows 10 1803+ 或 Windows 11 | x64 |
| macOS | macOS 10.15 (Catalina) 或更新 | Intel x64 / Apple Silicon (ARM64) |
| Linux | 推荐 Ubuntu 24.04 或类似发行版;最低要求 GLIBC 2.38+ | x64 |
为什么推荐 Ubuntu 24.04 级别的发行版?其自带的 webkit2gtk 2.44.0-2 版本在 WebKit、UI 库、Mesa 驱动与 Wayland 显示之间的交互上足够稳定。
Wayland 显示异常的处理:Wayland 下 WebKit 与底层图形驱动交互可能出现显示异常,可尝试以下环境变量:
WEBKIT_DISABLE_COMPOSITING_MODE=1 hoppscotch # 或 WEBKIT_DISABLE_DMABUF_RENDERER=1 hoppscotch # 或两者同时设置其他注意事项:
- 旧发行版:AppImage 依赖 GLIBC 2.38+,旧系统会出现
GLIBC_2.38 not found之类的版本错误; - Tauri v2 依赖
libwebkit2gtk-4.1,该库默认仅在 Ubuntu 22.04+ 的软件源中可用; - 从源码构建请遵循仓库的构建流程(README 中的 Sources 一节给出了官方 build workflow 的参照)。
七、小结
Hoppscotch Desktop 以 Tauri V2 为壳,把 Hoppscotch 完整 Web 前端以 bundle 形式内置到本地(appload 插件 + webapp-bundler 产出的bundle.zip+ manifest),并通过 relay 插件代理网络通信,从而同时支持 Cloud 登录与自托管实例接入。对接自托管实例时的三个关键动作是:为部署域名配置WHITELISTED_ORIGINS(区分app://与 Windows 的http://app.两种 origin 形式)、Docker 部署时暴露 3200 端口、需要内网分发时按第四节流程本地构建。相关实现可继续深入阅读 src-tauri/src/lib.rs、src-tauri/src/server.rs 与 src-tauri/src/path.rs。
【免费下载链接】hoppscotchOpen-Source API Development Ecosystem • https://hoppscotch.io • Offline, On-Prem & Cloud • Web, Desktop & CLI • Open-Source Alternative to Postman, Insomnia项目地址: https://gitcode.com/GitHub_Trending/ho/hoppscotch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考