ITADN
athrvk/vayu
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

Vayu - 集 REST/GraphQL 客户端与原生负载测试器于一体的桌面应用

像使用 Postman 一样构建请求。以每秒数万次的请求速率对同一端点进行负载测试 - 由原生 C++ 引擎驱动。完全本地化。无需账户,无云端,无配额限制。

Vayu 是一款面向 Windows、macOS 和 Linux 的免费开源桌面应用,它将 API 团队通常分开的两个工具合二为一:一个具备集合、环境和脚本功能的完整 REST + GraphQL 请求构建器,以及一个由 C++20 引擎驱动的高吞吐量负载测试器。对于来自 Postman 或 Insomnia 的用户来说,请求界面会显得熟悉 - 但在底层,原生事件循环实现了 Electron + Node.js 客户端无法达到的负载测试吞吐量,且所有字节均保留在您的机器上。

Latest Release Downloads License Platform GitHub stars GitHub issues

C++ TypeScript React Electron


实际效果

Load test dashboard 负载测试仪表盘:并发数 64 时达到 52,738 req/s,共 738,406 个请求,成功率 100%。吞吐量、延迟百分位和错误计数器从 C++ 引擎实时流式传输,同时 UI 保持响应,每次运行都保留在历史记录侧边栏中。

GraphQL request builder 支持集合、分层环境和 Postman 兼容脚本的 REST 和 GraphQL 请求构建器。


Vayu 为何存在

大多数 API 团队会并行使用两款工具。在开发阶段,使用 Postman、Bruno 或 Insomnia 来构建和发送请求。到了进行负载测试时,则使用 k6、JMeter 或 wrk。两套 UI,两种配置格式,两个需要同步端点的地方——每次想要确认变更在真实流量下是否依然有效时,都需要进行上下文切换。

Vayu 将该工作流整合到一个应用中。只需构建一次请求,让负载测试器指向同一端点,并在引擎驱动流量时观看实时仪表盘——无需第二份配置,无需独立的 CLI,也无需离开工作区。由于整个技术栈都在您的机器上运行,无需账户、无遥测数据、无云端往返,因此它也能在企业防火墙后以及 SaaS 客户端根本无法使用的隔离网络中正常工作。


性能

HTTP 核心是一个用 C++20 编写的多工作线程 libcurl 事件循环,通过本地 HTTP 边车与 Electron UI 隔离,确保渲染永远不会被请求负载阻塞。实际上,这使得单台笔记本电脑能够跑满千兆链路,同时仪表盘仍能逐帧流式传输指标——远超基于 Node.js 的 Electron 工具在同一硬件上所能达到的水平。

证明 - 与 wrkvegeta 的正面对决。 相同的模拟服务器,相同的机器,相同的会话,匹配的并发数(64),从独立引擎测量:

客户端req/s对比 wrk
Vayu56,880105%
wrk54,280100%
vegeta51,84796%

Vayu wrk 持平并略微超过 vegeta - 三者都收敛到相同的约 57k 系统吞吐量上限,且在该上限下机器仍有 79% 的空闲,因此是目标端饱和,而非客户端。完整的方法论、并发扫描、workers A/B 测试、调优说明以及单命令复现脚本见 引擎基准测试

并且来自 UI,而不仅仅是 CLI。 从应用自身的负载测试面板启动的 60 秒运行,持续达到 51,922 req/s - 3,115,391 个请求,零错误,零丢失,p50 1.20 ms / p99 1.52 ms,图表全程实时流式传输:

In-app load test sustaining 51,922 req/s over 60 seconds with 3,115,391 requests and a 0.0% error rate

与 k6、JMeter 和 Postman 集合运行器的更广泛比较正在进行中 - 请跟踪 问题看板 以了解其进展。


Vayu 与 Postman、Bruno、k6、JMeter 的对比

功能VayuBrunok6Apache JMeterPostman
执行引擎C++ (Native)Node.js / ElectronGoJava (JVM)Node.js / Electron
API 客户端 + 负载测试两者兼备,单一应用仅客户端仅负载测试仅负载测试仅客户端
负载测试吞吐量数万 RPS受 JS 运行时限制高 (Go 协程)中等 (线程密集)需使用独立工具
脚本支持QuickJS (pm.* 语法)JavaScript (ES6)JavaScript (ES6)Groovy / BeanShellJavaScript
UI原生桌面应用原生桌面应用仅 CLIJava Swing (过时)原生桌面应用
UI 响应性高 (sidecar 架构)良好N/A高负载下卡顿大型集合时变慢
内存占用低 (直接内存)低–中等低–中等高 (内存密集)高 (Electron + Chrome)
隐私 / 离线100% 本地,无需账户100% 本地本地 / 云端混合100% 本地重度依赖云端 (可选本地)
Postman 集合导入支持 (v2.0 + v2.1)支持 (通过转换器)有限支持不支持原生支持
OpenAPI 导入支持 (2.0 + 3.0)不支持不支持不支持支持
开源是 (双重许可)是 (MIT)是 (AGPL v3)是 (Apache 2.0)部分

来自 Postman、Insomnia 或 OpenAPI 规范?

迁移只需几秒。将现有导出文件拖入 Vayu,工作区即会重建为原生集合 - 文件夹、变量、认证以及请求前/后脚本均可完整迁移,此外还包括来自 Insomnia 工作区的环境,或 Postman 单独导出的环境文件。

  • Postman - Collection v2.0 和 v2.1 JSON 导出,以及环境和全局变量导出
  • Insomnia - v4 导出
  • OpenAPI / Swagger - 3.0 和 2.0 规范(JSON 或 YAML);从规范生成可直接使用的集合

功能

  • 原生负载测试 - 多工作进程 C++ 事件循环可维持数万 req/s,并通过 SSE 实时流式传输指标;无需额外工具
  • REST + GraphQL 请求构建器 - GET、POST、PUT、PATCH、DELETE 等;支持 JSON、form-data、URL-encoded、原始文本及 GraphQL 请求体
  • 集合与文件夹层级 - 支持嵌套集合,每个集合可配置变量、认证及前置/后置脚本
  • 一键导入 - 支持 Postman v2.0/v2.1、Postman 环境变量与全局变量、Insomnia v4、OpenAPI 3.0、Swagger 2.0
  • 分层环境 - 变量解析遵循 全局 → 集合链 → 当前环境 的流程,并支持在任意层级进行覆盖
  • 符合预期的认证方式 - Bearer token、Basic auth、API key(header 或 query)以及 OAuth 2.0(client credentials、password 以及带 PKCE 的交互式 authorization code);在引擎端解析并沿集合树向下继承
  • 兼容 Postman 的测试脚本 - 基于 QuickJS 引擎实现 pm.test()pm.expect()pm.environment.set()pm.response.* - 大多数 Postman 脚本可无需修改直接运行
  • 可组合脚本 - 前置/后置请求脚本沿层级向下组合(根 → 文件夹 → 请求)
  • 默认私有 - 100% 离线执行;无遥测、无账户、无云同步
  • 跨平台 - 提供 Windows (x64)、macOS (universal) 和 Linux (AppImage) 的原生安装程序

下载

Windows

使用 winget 安装:

winget install athrvk.Vayu

或直接下载安装程序:

  1. Download Vayu-x64.exe
  2. Run the installer and follow the setup wizard
  3. Launch Vayu from the Start menu

macOS

bash -c "$(curl -fsSL https://athrvk.github.io/vayu/install.sh)"

将最新版本安装到 /Applications。您只需输入一次密码。Vayu 以未签名形式分发 - 安装程序会对其进行临时签名并清除隔离属性,使其打开时不会显示“已损坏的应用”警告。

要更新,请再次运行相同的命令。 这也是 Vayu 在 macOS 上自我更新的方式 - 该应用会检查新版本并为您提供此命令,而不是自行修补,因为临时签名是 macOS 无法验证的。更新会就地替换应用,并保留您的收藏、历史记录和设置。如果 Vayu 正在运行,它会建议先退出(之后会重新打开);如果您已经使用最新版本,则不会执行任何操作。添加 --force 以强制重新安装,或设置 VAYU_ASSUME_YES=1 以跳过提示。

如果您自己的 ~/Applications 文件夹中已有 Vayu(从 .dmg 中拖出),更新将安装到该位置,而不是在 /Applications 中安装第二个副本。

要固定特定版本:

VAYU_VERSION=0.2.1 bash -c "$(curl -fsSL https://athrvk.github.io/vayu/install.sh)"

要卸载:

bash -c "$(curl -fsSL https://athrvk.github.io/vayu/install.sh)" -- --uninstall

添加 --purge 以同时删除设置和数据。或者将 Vayu.app/Applications 拖到废纸篓。

Linux

bash -c "$(curl -fsSL https://athrvk.github.io/vayu/install.sh)"

与 macOS 相同的命令。在 Linux 上,它会将 AppImage 安装到 ~/.local/share/vayu 并注册一个启动器条目,因此 Vayu 会出现在你的应用程序菜单中,而不是作为可执行文件位于 ~/Downloads 中。无需 root - 它写入的所有内容都在你的主目录下。如果 ~/.local/bin 在你的 PATH 上,你还会获得一个 vayu 命令。

重新运行以更新;添加 -- --uninstall(以及用于你的数据的 --purge)以将其移除。仅限 x86_64,与发布的构建版本一致。

或者,你可以自己从 最新 releaseVayu-<version>-x86_64.AppImage)下载 AppImage,chmod +x 它并运行它 - 它是自包含的,无论哪种方式都没有向导,也不需要 root。

如果 Vayu 无法启动,你的系统可能缺少 AppImages 所需的 FUSE 2:在 Debian/Ubuntu 上运行 sudo apt install libfuse2,或者使用 APPIMAGE_EXTRACT_AND_RUN=1 运行一次。

查看所有 releases →


架构

Vayu 作为两个协作的进程运行:一个轻量级的 Electron UI(即 Manager)和一个原生 C++ 守护进程(即 Engine),后者作为本地 sidecar 与其并列。Manager 负责工作区——包括集合、环境、请求构建器和仪表盘——而 Engine 负责底层通信:连接池、事件循环、脚本执行和指标。这种分离设计使得在引擎全速压测端点时,UI 仍能保持流畅;渲染器无需与请求负载共享线程。

┌────────────────────┐         ┌────────────────────┐
│   THE MANAGER      │  local  │    THE ENGINE      │
│  (Electron/React)  │◄───────►│      (C++)         │
│                    │ sidecar │                    │
│  • Request Builder │         │  • Event Loop      │
│  • Collections     │         │  • QuickJS Runtime │
│  • Load Dashboard  │         │  • Multi-Worker    │
└────────────────────┘         └────────────────────┘

参见 架构文档 以获取完整的进程模型和 IPC 详情。


技术栈

层级技术
UIElectron + React 19 + TypeScript 5
UI 状态Zustand
服务器状态TanStack Query
样式Tailwind CSS v4
HTTP 引擎C++20 + libcurl
脚本QuickJS (嵌入式 JS 引擎)
数据库SQLite via sqlite_orm
构建CMake + vcpkg (C++), pnpm + Vite (应用)

文档

完整文档:athrvk.github.io/vayu - 可搜索,并在每次推送到 master 时从 docs/ 构建。

文档描述
架构Sidecar 模式、进程模型、IPC
引擎 API 参考C++ 引擎的完整 HTTP API
引擎基准测试与 wrk 和 vegeta 的 RPS 正面对比 - 方法论、结果和调优
数据库模式SQLite 表定义和 JSON 结构
变量解析{{variables}} 如何在运行时解析
从源码构建先决条件、CMake 预设、所有构建命令
贡献指南开发环境设置、代码风格、PR 流程

贡献

欢迎贡献 - 从 bug 报告和功能想法到文档和代码。贡献指南 涵盖了本地开发环境搭建、代码风格、测试要求、PR 流程以及发布/版本控制工作流。


FAQ

Vayu 是免费的吗? 是的。Vayu 完全免费且开源。引擎采用 AGPL-3.0 许可;UI 采用 Apache-2.0 许可。没有付费层级,没有订阅,也没有功能限制。

Vayu 与 Bruno 或 Insomnia 有何不同? 那些是优秀的 API 客户端,但它们不进行负载测试——为此,你需要将 k6 或 JMeter 作为第二工具。Vayu 在一个应用中同时完成这两项任务:构建请求,然后使用原生 C++ 引擎对同一端点进行负载测试。

负载测试有多快? C++ 引擎在现代硬件上可维持每秒数万个请求;请参阅 Performance 部分。具体数字取决于你的机器、目标服务器和网络状况。

Vayu 可以离线使用吗? 是的。所有执行均在本地进行。Vayu 在正常使用期间从不联系外部服务器——没有遥测,没有许可证检查,没有云同步。

Vayu 需要账户吗? 不需要。下载、安装后即可立即使用,无需注册。

我可以导入我的 Postman 集合吗? 是的——支持 Postman Collection v2.0 和 v2.1 JSON 导出,包括文件夹、集合变量、身份验证设置以及请求前/后脚本。Postman 环境位于单独的导出文件中;将其放入即可作为 Vayu 环境导入。Postman 全局变量导出以相同方式导入,合并到 Vayu 的全局作用域中。Insomnia 工作区环境也可以导入。

我可以导入 OpenAPI / Swagger 规范吗? 可以。放入一个 OpenAPI 3.0 或 Swagger 2.0 文件(JSON 或 YAML),Vayu 将根据规范生成一个可直接使用的集合。

Vayu 支持哪种脚本语法? QuickJS 实现了 pm.* API(pm.test()pm.expect()pm.environment.get/set()pm.response.*),因此大多数 Postman 测试脚本无需修改即可运行。

Vayu 支持哪些平台? Windows (x64)、macOS(Apple Silicon + Intel 通用)以及 Linux (x86_64 AppImage)。


许可证

Vayu 采用双重许可:

  • 引擎 (/engine) - GNU AGPL v3: 如果您修改了引擎并将其作为网络服务提供,您必须公开您的更改。
  • UI (/app) - Apache 2.0: 宽松许可;可在任何项目中自由使用。

您可以免费将 Vayu 用于任何目的,无论是商业用途还是个人用途。