GitHub Explorer
📰 公众号已发布 2026-06-20

GitHub推荐:10 年 35.8K stars:开源 API 客户端「事实标准」Insomnia 怎么在 7 协议上活到今天

GitHub: https://github.com/kong/insomnia

一句话总结

开源、跨平台、可扩展的 API 工作站——在 REST/GraphQL/gRPC/WebSocket/SSE/MQTT/MCP 七种协议上同时给出真发请求、实时 timeline、单元测试、Mock 服务器和 CLI 五件套,并把同一份测试代码无缝跑在 GUI、CLI、NPM SDK 三种环境中。

值得关注的理由

  • 生态位稳固:Postman 走云账号化、Bruno 走 Git-native 极简,Insomnia 占据「协议广度 + 本地优先 + CLI 一等公民」中间地带,被 Kong 收购后 10 年长红不衰退(近 30 天仍有 106 commit,v9.3 仍在迭代)
  • MCP 第一时间原生支持:在主流 API 客户端里最早把 Anthropic MCP 作为一等协议做进桌面端,是观察「LLM 工具协议如何被开发者工具集成」的活样本
  • 架构样本价值:IDatabase IoC + Plugin in isolated BrowserWindow + SendRequestCallback 依赖反转三条工程模式,直接可迁移到任何 Electron + CLI + SaaS 三端产品

项目展示

Insomnia Screenshot Insomnia 主界面:左侧请求列表 + 中间编辑器 + 右侧响应预览

Plugins Screenshot 插件系统示意图:第三方插件在独立 BrowserWindow 沙箱中运行,通过 IPC bridge 调主进程能力

项目画像

维度数据
GitHubhttps://github.com/kong/insomnia
Star / Fork35.8K / 2.1K
代码行数372K 行(TS 27% / JS 26% / TSX 21% / JSON 18% / CSS 4%)
项目年龄123 个月(2016-03 至今)
开发阶段密集开发(近 365 天 738 commit)
贡献模式小团队主导(370 贡献者,Gregory Schier 一人 38%,前 10 人贡献 78%)
热度定位大众热门(开源 API 客户端事实标准之一)
质量评级代码[良好] 文档[良好] 测试[充分]

作者视角:为什么存在这个项目

创始人/作者背景

Gregory Schier(gschier)是 Insomnia 唯一创始人,2016 年作为独立开发者启动项目,2019 年中随公司被 Kong 收购转 Kong 员工,至今仍占仓库 38% 的 commit(2,394/6,261)。他不是研究员出身,是从自己写 API 的痛点出发——「HTTP 工具都太分散,REST 一个客户端、gRPC 一个客户端、WebSocket 又一个」——逐协议叠加功能,典型 dogfooding 驱动。

问题判断

Gregory 看到的市场缝隙很清晰:Postman 走「云优先 + 团队协作」路线,大而全但账号化压力大;命令行派的 HTTPie/curl 不支持 gRPC/WebSocket;专业 gRPC 工具(grpcurl)又和 REST 工具链割裂。Insomnia 切的是「单客户端覆盖全部协议 + 不强绑账号 + 本地优先」这条缝,2018+ 加 GraphQL、2019-2020 加 WebSocket/gRPC、2024 加 MCP,每一步都跟着 API 协议的演进走。

解法哲学

协议广度优先于单协议深度——每个协议都做了「真发请求 + 实时 timeline + 单元测试 + Mock 服务器」四件套,但不追求 Postman 那种 enterprise 级协作。对比 Postman 明确选择不做:不强制账号、不做企业级 RBAC 协作、不做云端 Mock 强绑。对比 Bruno 明确选择不做:不做 .bru 文件即数据库、不做极简 Git-native 模型——Insomnia 留的是「多入口复用同一份测试/脚本」的传统桌面工作站形态。

战略意图

被 Kong 收购后,Insomnia 在 Kong 全栈图景中变成「开发者端 → API 网关」的中段:上游是 OpenAPI 设计者、中游是 Insomnia 客户端(调试/测试/Mock)、下游是 Kong Gateway / Konnect(由 openapi-2-kong 包做转换)。商业化模式是 open-core:核心协议/客户端/SDK 全部 Apache 2.0,SaaS(Cloud Sync E2EE、Organizations、SAML/OIDC、Mock Server)是付费层。

社区对这条路的反应也写在 issue #6577 「enshittification」里——「被收购后是否会被账号化拖累」的持续担忧,说明开源 local-first 品牌资产与商业化压力之间存在持续张力。

核心价值提炼

创新之处

  1. 多协议统一 timeline + event log 抽象(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5) curl/websocket/socket-io/mcp/grpc 五种协议,各自有完全不同的字节流模型,但都被映射为 { name, value, timestamp }[] + NDJSON event log + IPC REALTIME_EVENTS_CHANNELS.NEW_EVENT 实时推送。UI 渲染层只看到一种 timeline 数据结构——这是 Insomnia 区别于 Postman(每个协议独立面板)的关键。

  2. Insomnia.send 全局 + SendRequestCallback 依赖反转(新颖度 4/5 · 实用性 5/5 · 可迁移性 5/5) insomnia-testing 把全局 insomnia.send(reqId) 设计成空方法,实际网络能力由调用方注入。这意味着同一份 .test.yaml 既能跑在 GUI(libcurl)、也能跑在 inso CLI(同一个 libcurl)、还能跑在 SDK(mock)。测试代码与网络实现完全解耦,「写一次跑三种环境」。

  3. openapi-2-kong 桥接 OpenAPI 3 ↔ Kong Gateway declarative config(新颖度 3/5 · 实用性 5/5 · 可迁移性 2/5) 把 OpenAPI 文档一键转成 Kong routes + services + plugins 声明式配置,可 apply 到 Kong Gateway / Konnect。作为 API 客户端内置 feature 少见——是「被收购后把上游产品接入下游产品」形成的独特价值。

  4. IoC 数据库抽象 + 双 runtime adapter(新颖度 2/5 · 实用性 5/5 · 可迁移性 5/5) IDatabase 接口 + NeDBDatabaseImpl(Node) + BridgeDatabaseImpl(渲染进程 IPC 桥),业务代码完全不感知运行环境。insomnia-inso CLI 不跑 Electron 也能跑同一份 models/services 代码——这是「同一业务逻辑多入口」项目的标准模板。

  5. Postman 脚本 regex 翻译器 + 已知 gap 透明声明(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5) translate-postman-script.ts 用 TransformRule[] 正则集合把 Postman pm.* 脚本翻译为 Insomnia 等价 API,每条规则上方明确注释「!Doesn’t support X / Y」列出已知边界 case。用户对迁移限制心里有数——比「声称 100% 兼容但 80% 跑不通」的迁移工具诚实得多。

  6. Sandbox = 静态 AST + 运行时 require 拦截双层(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5) 用户脚本用 acorn 静态分析 MemberExpression 链根,加黑名单(require、eval、window),运行时再用 require 拦截器兜底——避开 vm2 的逃逸 bug、避开 QuickJS 的复杂度。任何 user-script 平台都需这套静态 AST + 运行时双层防护。

可复用的模式与技巧

  1. IDatabase + 双进程注入:任何 Electron + CLI/SDK 共享业务代码的场景(关键文件 packages/insomnia-data/src/database/types.ts)
  2. Plugin in isolated BrowserWindow + IPC bridge + bridge metrics:Electron 插件化通用模式(关键文件 packages/insomnia/src/main/plugin-window.ts)
  3. Test SDK 全局 helper + SendRequestCallback 注入:测试跨 GUI/CLI/SDK 三端的依赖反转模板(关键文件 packages/insomnia-testing/src/run/insomnia.ts)
  4. 格式迁移的 regex + 已知 gap 透明声明:任何格式互转工具适用(关键文件 packages/insomnia/src/main/importers/importers/translate-postman-script.ts)
  5. 多协议统一 timeline + event log + NDJSON + IPC push:多协议客户端通用模式(关键文件 packages/insomnia/src/main/network/curl.ts)

关键设计决策

  1. libcurl 作为请求引擎(@getinsomnia/node-libcurl)

    • 问题:Node.js 内置 http 模块做不到 HTTP/3、客户端证书、AWS SigV4、cookie jar、HTTP/2 prior-knowledge;自己重写又失去 HTTP 成熟度
    • 方案:createConfiguredCurlInstance() 把 Insomnia Request 模型映射到 libcurl option,WRITEFUNCTION/DEBUGFUNCTION 回调拿到原始 byte 流 + timeline 事件
    • Trade-off:绑死 native addon(Electron 升级要 rebuild)、Linux 要装 libcurl-devel;换来全协议一致行为 + 完整 timeline
    • 可迁移性:中
  2. 插件独立 BrowserWindow + 主进程 IPC bridge

    • 问题:第三方 plugin 代码不能污染主进程,否则一个 bug 拖垮整个 app
    • 方案:plugin-window.ts 创建独立 BrowserWindow + preload,bridgeMetrics 记录每次 invoke 的 ok/error/timeout/duration
    • Trade-off:多一层 BrowserWindow 启动开销 + IPC 序列化成本 + 调试更复杂
    • 可迁移性:高
  3. Git Sync 用 isomorphic-git,跑在 Electron 渲染进程

    • 问题:Git 协作不绑 native git、跨平台、支持 GitHub/GitLab/Custom 多 provider
    • 方案:sync/git/git-vcs.ts(2169 行)做 VCS,routable-fs-client.ts 按子路径路由到不同存储后端,shallow-clone.ts 减少 clone 时间
    • Trade-off:isomorphic-git 性能比原生 git 慢,大仓库体验差
    • 可迁移性:中
  4. MCP 与 gRPC/WS/SSE 并列作为一等协议

    • 问题:Anthropic 推 MCP 后,API 客户端要原生调试 MCP server(初始化/工具调用/资源订阅/Sampling)
    • 方案:main/network/mcp.ts 把 MCP 当作「长连接多事件流」协议,和 WebSocket 一致的 timeline + event log 模型
    • Trade-off:MCP 协议仍在演进,需持续追版本
    • 可迁移性:中

竞品格局与定位

竞品对比矩阵

维度InsomniaPostmanBrunoYaakHoppscotch
协议广度7 协议(REST/GQL/gRPC/WS/SSE/MQTT/MCP)7 协议 + 企业扩展2 协议(REST/GQL)2 协议(REST/GQL)4 协议(REST/GQL/WS/SSE)
本地优先✓(可选零账号)✗(账号强绑)✓(零账号)✓(零账号)✓(Web-only)
CLIinso(成熟)✗(Newman 独立)bru CLI(轻量)✗✗
桌面应用Electron(成熟)Electron(臃肿)无Tauri(轻量)无(Web)
协议广度护城河深最深浅浅中
团队协作弱(仅 OSS 单点)强(RBAC/Monitor)弱弱中
开源协议Apache 2.0闭源MITMITMIT

差异化护城河

协议广度 + Inso CLI + Apache 2.0 + Kong 整合这条护城河深,因为:

  • Postman 不开源(被云化绑架,流失用户)
  • Bruno 不广协议(只有 REST/GraphQL,缺 gRPC/MCP/WS)
  • Yaak 不成熟(协议覆盖窄,刚起步)
  • Hoppscotch 无桌面(Web-only,无 CLI/SDK)
  • HTTPie 是 CLI 工具(不在桌面工作站赛道)

「7 协议 + 一份测试跨三端跑 + 本地优先 + Apache 2.0」四点合一,目前没有竞品能复制。

竞争风险

  • 最可能被 Bruno 蚕食「开源 + Git-native + 本地优先」细分(Bruno 在年轻开发者社区增长快)
  • 最可能被 Postman Cloud 蚕食「企业协作」细分(Postman RBAC/Monitor/团队空间成熟度碾压)
  • MCP 赛道如果有新工具(如专用 MCP Inspector)出现,Insomnia 的「一等协议」优势可能被分流

生态定位

在整个 API 开发工具生态中,Insomnia 占据「桌面工作站形态 + 协议广度 + Kong 战略前端」三位一体定位。是观察「Kong 如何把上游开发者工具接入下游网关生态」的最佳样本,也是观察「老牌 Electron 应用如何在 10 年后仍能保持密集开发节奏」的最佳样本。

套利机会分析

  • 信息差:Insomnia 在国内技术社区讨论度低于 Postman(因 Postman 中文文档多),但实际开源 + 本地优先特性对国内开发者(尤其是合规要求高的团队)反而更友好
  • 技术借鉴:
    • IDatabase IoC 模式可直接套到任何 Electron + CLI/SDK 项目
    • SendRequestCallback 依赖反转可套到任何「测试跨多 runner」场景
    • 多协议统一 timeline 是 gRPC + WebSocket + SSE 调试工具的现成模板
  • 生态位:Insomnia 填补「Postman 太重、Bruno 太轻、HTTPie 不 GUI」之间的中段空缺;填补「Kong 用户调试 API」的工具空缺;填补「MCP 调试工具」的早期空缺
  • 趋势判断:仍在增长(近 30 天 106 commit、2025-08 单月 92 commit),符合 API-first 开发范式扩张 + MCP 兴起的双重趋势;比 Postman 有后发优势(开源 + 本地优先正在回潮)

风险与不足

  • enshittification 张力:Kong 收购后向 Cloud Sync / Org / SAML 倾斜商业化,与「开源 local-first」初心冲突;issue #6577 是社区持续放哨位
  • Electron 老栈现代化债:同时存在 packages/insomnia(v9 主包,17.9K changes) + packages/insomnia-app(旧主包,9.3K) + 顶层 app/{ui,components,css,common} 三套目录——v8 → v9 是渐进而非一次性迁移,有技术债
  • 依赖刷新极频繁:Top 10 核心修改文件全是 package.json / package-lock.json,说明依赖管理是日常主要负担
  • 作者集中度仍高:Gregory Schier 一人 38% commits,Kong 工程团队核心 ~8-10 人主导,bus factor 风险未消除
  • fix:feature = 40:28:成熟期特征明显,新功能节奏比早期慢

行动建议

  • 如果你要用它:API 协议多、要在 GUI/CLI/CI 三处复用测试、要求本地优先无账号强绑、对 Kong 网关有诉求——选 Insomnia;只做 REST/GraphQL 简单调试且重视 Git-native 协作——选 Bruno;纯云端团队协作——选 Postman
  • 如果你要学它:
    • 看 packages/insomnia-data/src/database/types.ts 学 IDatabase IoC 抽象
    • 看 packages/insomnia-testing/src/run/insomnia.ts 学 SendRequestCallback 依赖反转
    • 看 packages/insomnia/src/main/plugin-window.ts 学插件 BrowserWindow + IPC bridge + bridge metrics
    • 看 packages/insomnia/src/main/network/libcurl-promise.ts 学 libcurl + Promise/事件流适配
    • 看 packages/insomnia/src/main/importers/importers/translate-postman-script.ts 学格式迁移 regex + 已知 gap 透明声明
  • 如果你要 fork 它:可以做「Rust 重写版」(解决 Electron 性能/内存问题,Yaak 已示范)、可以做「MCP-first 子集」(只保留 MCP + REST,做 AI agent 调试专用)、可以做「OpenAPI 优先」(去掉 GUI,只做 inso CLI + SDK,把 inso 做成 Postman/Newman 杀手)

知识入口

资源链接
DeepWikideepwiki.com/kong/insomnia
Zread.aizread.ai/kong/insomnia
关联论文无
在线 Demo无(纯桌面应用,GitHub Releases 下载)

相关报告