news 2026/9/4 13:26:48

Hoppscotch Desktop 深度解析:基于 Tauri V2 的跨平台桌面端安装、自托管连接与本地构建实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Hoppscotch Desktop 深度解析:基于 Tauri V2 的跨平台桌面端安装、自托管连接与本地构建实战

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-apploadtauri-plugin-relay(见 Cargo.toml,仓库内亦有 vendored 版本 plugin-workspace/tauri-plugin-appload 与 plugin-workspace/tauri-plugin-relay)分别承担“加载本地打包的 Web 应用”与“网络请求代理转发”的职责——这正是桌面端能够连接 Cloud 和自托管实例的关键。

二、安装方式

方式一:下载官方安装包

  1. 从 Hoppscotch 官网下载页获取最新版 Hoppscotch Desktop App;
  2. 打开下载的文件;
  3. 按照屏幕提示完成安装;
  4. 启动应用。

方式二:使用 Homebrew(macOS / Linux)

brew install --cask hoppscotch

应用标识为io.hoppscotch.desktop(见 path.rs 中的APP_ID常量,与tauri.conf.jsonidentifier保持一致),这也是本地配置目录、日志目录命名的依据。

三、两种接入方式:Cloud 与 Self-Hosted

桌面端的核心价值在于:同一个客户端既可以使用 Hoppscotch Cloud,也可以连接你自己部署的 Community/Enterprise 自托管实例。

3.1 Hoppscotch Cloud(个人版)

  1. 打开 Hoppscotch Desktop App;
  2. 点击左上角的 Hoppscotch logo;
  3. 点击“HOPPSCOTCH CLOUD”
  4. 使用 Hoppscotch Cloud 账号登录,即可访问你的 workspace 与集合。

从源码结构看,Cloud 登录走的是浏览器回跳流程:Rust 侧在 lib.rs 的setup_server中,用random_port15000–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-orgtest_org会映射到同一 bundle 名),因此桌面端在配置目录下维护registry.json注册表,把 webview 的app://主机名映射回原始服务器 URL。

连接步骤

  1. 打开 Hoppscotch Desktop App;
  2. 点击左上角的 Hoppscotch logo;
  3. 点击“Add an instance”
  4. 输入你的自托管实例 URL;
  5. 点击“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 generate

2. 构建webapp-bundler

cd crates/webapp-bundler cargo build --release

3. 打包 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.json

4. 启动开发服务器

cd hoppscotch-desktop pnpm tauri dev

或进行生产构建:

cd src-tauri pnpm tauri dev

4.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-datalogshopp_bundle.ziphopp_manifest.json)都落在当前工作目录,适合无安装权限的场景。

main.rs启动时会打印PORTABLE/STANDARD模式,并在日志目录不可用时降级为“无日志启动”(main.rs)。

五、运行时架构要点(源码佐证)

理解以下几处实现,有助于排查自托管连接问题:

  1. 插件装配:lib.rs 中依次注册window-state(记住窗口位置/尺寸,但排除main登录窗)、processhttpopenerupdaterstoredeep-linkdialogshellfsapploadrelay等插件。appload负责按 registry 从 bundle 加载对应实例的前端,relay负责代理前端发出的网络请求。
  2. Deep Link 认证tauri.conf.json注册了io.hoppscotch.desktop深链 scheme(tauri.conf.json),Rust 侧收到 URL 后发出scheme-request-received事件转发给前端(lib.rs)。
  3. Linux 剪贴板lib.rs中在 Linux 上专门构建原生 Edit 菜单(Undo/Redo/Cut/Copy/Paste/Select All),因为 webkit2gtk 依赖原生菜单项才能识别 Ctrl+C/V/X 快捷键(lib.rs)。
  4. 自动更新:updater 插件默认启用,端点为https://releases.hoppscotch.com/hoppscotch-selfhost-desktop.json,并配置了 minisign 公钥做签名校验(tauri.conf.json);updater.rs提供check_for_updatesdownload_and_install_updateget_download_progress等命令(lib.rs)。自托管场景可自行调整该端点。
  5. 数据安全:应用启动时会执行版本变更备份检查(backup.rsperform_version_check_and_backup),配置目录下的数据按latest/backup组织(path.rs)。

六、最低系统要求

平台系统要求架构
WindowsWindows 10 1803+ 或 Windows 11x64
macOSmacOS 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 13:23:30

基于PyTorch与PyQt5的舌苔识别系统:从模型训练到桌面应用部署全流程

简介:本资源是一套面向高校人工智能与医学信息工程方向本科生的毕业设计级舌苔智能识别系统,聚焦中医舌诊数字化这一典型医学图像分析场景,解决舌象特征自动提取与病理状态判别问题。压缩包共131个文件,约105.67MB,涵盖…

作者头像 李华
网站建设 2026/9/4 13:23:12

如何清理 macOS 菜单栏:图标管理器 Ice 完整教程

如何清理 macOS 菜单栏:图标管理器 Ice 完整教程 【免费下载链接】Ice Powerful menu bar manager for macOS 项目地址: https://gitcode.com/GitHub_Trending/ice/Ice Mac 的菜单栏会随软件增多越来越拥挤,找图标靠眼力。Ice 是一款 macOS 菜单栏…

作者头像 李华
网站建设 2026/9/4 13:21:14

基于YOLO与OCR的游戏弹窗智能识别与自动化处理实践

简介:本资源是一套面向机器学习初学者与游戏自动化实践者的TensorFlow实战项目,聚焦《梦幻西游》客户端中三类高频弹窗交互场景的AI识别与决策:战斗弹窗(识别朝向正面角色)、成语弹窗(定位并匹配四字成语中…

作者头像 李华
网站建设 2026/9/4 13:21:04

AI 劳动力编排质量闸门工具:从输入校验到离线报告的完整实现

项目编号:20260904-004。本文代码、测试、文档、示例数据和效果图均为独立编写,不包含热点产品或开源项目源码、品牌素材与官方截图。 问题与目标 围绕“登记角色、任务、工具权限、交接协议、成本、执行证据和停止条件”,按必填证据、阈值、…

作者头像 李华
网站建设 2026/9/4 13:19:52

PVE射击游戏AI同步方案全解析

引言 在多人PVE(Player vs Environment)射击游戏中,AI敌人的同步是一个既基础又复杂的技术难题。玩家们需要看到一致的AI行为——同一个敌人在所有玩家屏幕上的位置、动作、血量、死亡时机都应保持协调。然而,网络延迟、带宽限制、性能开销等因素使得"完美同步"…

作者头像 李华