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 主界面:左侧请求列表 + 中间编辑器 + 右侧响应预览
插件系统示意图:第三方插件在独立 BrowserWindow 沙箱中运行,通过 IPC bridge 调主进程能力
项目画像
| 维度 | 数据 |
|---|---|
| GitHub | https://github.com/kong/insomnia |
| Star / Fork | 35.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 品牌资产与商业化压力之间存在持续张力。
核心价值提炼
创新之处
-
多协议统一 timeline + event log 抽象(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5) curl/websocket/socket-io/mcp/grpc 五种协议,各自有完全不同的字节流模型,但都被映射为
{ name, value, timestamp }[]+ NDJSON event log + IPCREALTIME_EVENTS_CHANNELS.NEW_EVENT实时推送。UI 渲染层只看到一种 timeline 数据结构——这是 Insomnia 区别于 Postman(每个协议独立面板)的关键。 -
Insomnia.send全局 + SendRequestCallback 依赖反转(新颖度 4/5 · 实用性 5/5 · 可迁移性 5/5)insomnia-testing把全局insomnia.send(reqId)设计成空方法,实际网络能力由调用方注入。这意味着同一份.test.yaml既能跑在 GUI(libcurl)、也能跑在 inso CLI(同一个 libcurl)、还能跑在 SDK(mock)。测试代码与网络实现完全解耦,「写一次跑三种环境」。 -
openapi-2-kong桥接 OpenAPI 3 ↔ Kong Gateway declarative config(新颖度 3/5 · 实用性 5/5 · 可迁移性 2/5) 把 OpenAPI 文档一键转成 Kongroutes + services + plugins声明式配置,可 apply 到 Kong Gateway / Konnect。作为 API 客户端内置 feature 少见——是「被收购后把上游产品接入下游产品」形成的独特价值。 -
IoC 数据库抽象 + 双 runtime adapter(新颖度 2/5 · 实用性 5/5 · 可迁移性 5/5)
IDatabase接口 +NeDBDatabaseImpl(Node) +BridgeDatabaseImpl(渲染进程 IPC 桥),业务代码完全不感知运行环境。insomnia-insoCLI 不跑 Electron 也能跑同一份 models/services 代码——这是「同一业务逻辑多入口」项目的标准模板。 -
Postman 脚本 regex 翻译器 + 已知 gap 透明声明(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5)
translate-postman-script.ts用TransformRule[]正则集合把 Postmanpm.*脚本翻译为 Insomnia 等价 API,每条规则上方明确注释「!Doesn’t support X / Y」列出已知边界 case。用户对迁移限制心里有数——比「声称 100% 兼容但 80% 跑不通」的迁移工具诚实得多。 -
Sandbox = 静态 AST + 运行时 require 拦截双层(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5) 用户脚本用 acorn 静态分析
MemberExpression链根,加黑名单(require、eval、window),运行时再用 require 拦截器兜底——避开 vm2 的逃逸 bug、避开 QuickJS 的复杂度。任何 user-script 平台都需这套静态 AST + 运行时双层防护。
可复用的模式与技巧
- IDatabase + 双进程注入:任何 Electron + CLI/SDK 共享业务代码的场景(关键文件
packages/insomnia-data/src/database/types.ts) - Plugin in isolated BrowserWindow + IPC bridge + bridge metrics:Electron 插件化通用模式(关键文件
packages/insomnia/src/main/plugin-window.ts) - Test SDK 全局 helper + SendRequestCallback 注入:测试跨 GUI/CLI/SDK 三端的依赖反转模板(关键文件
packages/insomnia-testing/src/run/insomnia.ts) - 格式迁移的 regex + 已知 gap 透明声明:任何格式互转工具适用(关键文件
packages/insomnia/src/main/importers/importers/translate-postman-script.ts) - 多协议统一 timeline + event log + NDJSON + IPC push:多协议客户端通用模式(关键文件
packages/insomnia/src/main/network/curl.ts)
关键设计决策
-
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
- 可迁移性:中
-
插件独立 BrowserWindow + 主进程 IPC bridge
- 问题:第三方 plugin 代码不能污染主进程,否则一个 bug 拖垮整个 app
- 方案:
plugin-window.ts创建独立 BrowserWindow + preload,bridgeMetrics记录每次 invoke 的 ok/error/timeout/duration - Trade-off:多一层 BrowserWindow 启动开销 + IPC 序列化成本 + 调试更复杂
- 可迁移性:高
-
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 慢,大仓库体验差
- 可迁移性:中
-
MCP 与 gRPC/WS/SSE 并列作为一等协议
- 问题:Anthropic 推 MCP 后,API 客户端要原生调试 MCP server(初始化/工具调用/资源订阅/Sampling)
- 方案:
main/network/mcp.ts把 MCP 当作「长连接多事件流」协议,和 WebSocket 一致的 timeline + event log 模型 - Trade-off:MCP 协议仍在演进,需持续追版本
- 可迁移性:中
竞品格局与定位
竞品对比矩阵
| 维度 | Insomnia | Postman | Bruno | Yaak | Hoppscotch |
|---|---|---|---|---|---|
| 协议广度 | 7 协议(REST/GQL/gRPC/WS/SSE/MQTT/MCP) | 7 协议 + 企业扩展 | 2 协议(REST/GQL) | 2 协议(REST/GQL) | 4 协议(REST/GQL/WS/SSE) |
| 本地优先 | ✓(可选零账号) | ✗(账号强绑) | ✓(零账号) | ✓(零账号) | ✓(Web-only) |
| CLI | inso(成熟) | ✗(Newman 独立) | bru CLI(轻量) | ✗ | ✗ |
| 桌面应用 | Electron(成熟) | Electron(臃肿) | 无 | Tauri(轻量) | 无(Web) |
| 协议广度护城河 | 深 | 最深 | 浅 | 浅 | 中 |
| 团队协作 | 弱(仅 OSS 单点) | 强(RBAC/Monitor) | 弱 | 弱 | 中 |
| 开源协议 | Apache 2.0 | 闭源 | MIT | MIT | MIT |
差异化护城河
协议广度 + 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 中文文档多),但实际开源 + 本地优先特性对国内开发者(尤其是合规要求高的团队)反而更友好
- 技术借鉴:
IDatabaseIoC 模式可直接套到任何 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 杀手)
知识入口
| 资源 | 链接 |
|---|---|
| DeepWiki | deepwiki.com/kong/insomnia |
| Zread.ai | zread.ai/kong/insomnia |
| 关联论文 | 无 |
| 在线 Demo | 无(纯桌面应用,GitHub Releases 下载) |