CLI 需单独通过 npm 全局安装 @usebruno/cli,与桌面 IDE 分开;用 Docker 跑集合需把当前目录挂载到 /bruno 再执行 run;Apt 安装需先导入 GPG 密钥并添加源,步骤较多。

bruno
usebrunoMIT活跃维护轻量级开源 API 调试 IDE,支持 REST、GraphQL 和 OpenAPI,用 Git 管理接口集合,可替代 Postman/Insomnia。
Opensource IDE For Exploring and Testing API's (lightweight alternative to Postman/Insomnia)
brew install bruno
npm install -g @usebruno/cliREADME 未说明硬件要求;为桌面应用,提供 Mac、Windows、Linux 二进制包及包管理器安装,CLI 需 Node.js 或改用 Docker 镜像。
离线优先的 API 调试 IDE,把请求集合以纯文本存本地并用 Git 协作
轻量级开源 API 调试 IDE,支持 REST、GraphQL 和 OpenAPI,用 Git 管理接口集合,可替代 Postman/Insomnia。
核心能力
- 用纯文本 Bru 标记语言把请求集合存进文件系统
- 支持 Git 等任意版本控制系统协作管理集合
- 完全离线运行,不做云同步以保护数据隐私
- 提供 CLI 在命令行跑集合,适配 CI/CD 自动化测试
- 提供官方 Docker 镜像,无需装 Node.js 即可跑集合
容易踩的坑
- v4.3.0最新正式版2026-10-22 · 2026-10-22 12:11 UTC
Changelog
Features
- feat(converter): enhance OAuth2 token handling in processAuth function by @sanish-bruno in #9454
- feat(runner): store runner payloads in the file store by @chirag-bruno in #9408
- feat(sqlite-file): add a file store to the SQLite SDK by @chirag-bruno in #9405
- feat(openapi): revamp Create OpenAPI spec Modal by @adwait-bruno in #9302
- feat: show keyboard shortcut hints in menus by @lohit-bruno in #9426
- feat: add unresolved variables info card by @prateek-bruno in #9401
- feat(benchmark): utils to measure over checkpoints, spans, and also drain them by @sid-bruno in #9292
- feat(response-examples): implement "Try" functionality for response examples by @abhishekp-bruno in #9342
- feat: open sidebar openapi specs as workspace tabs by @sachin-bruno in #9291
- feat(sidebar): adds debounce on sidebar search by @sachin-thakur-bruno in #9045
- feat(bruno-sqlite): move cache collection fetch to bruno-sqlite by @shubh-bruno in #9195
- feat(preferences): design update for general settings page by @sachin-thakur-bruno in #9056
- feat: force close db by @sid-bruno in #9335
- feat(wsdl): resolve schemaLocation references to external XSD files by @gopu-bruno in #9327
- feat(tags): add folder-level tags with inheritance by @morsh-bruno in #9253
- feat(theme): add Dracula dark theme by @Ayce45 and @lohit-bruno in #7815
- feat(theme): add gruvbox dark/light (+variants) by @taylrfnt in #8153
- feat(ui): Add Cyberdream light and dark themes by @byt3m4st3r in #8877
- feat(sidebar): virtualize sidebar nested items by @sachin-thakur-bruno in #9190
- feat(scripts): enhanced pre-request scripts handling with environment variable interpolation and added tests by @sharan-bruno in #9164
- feat(CLI): added interpolation for digest auth credentials and corresponding tests by @sharan-bruno in #9156
- feat(headers): show collection and folder headers in the inherited accordian by @pooja-bruno and @sachin-thakur-bruno in #9129
- feat(sidebar): optimize multi-select drag state logic by @Gopi-bruno in #9202
- feat(runner): build run reports from the stored file payloads by @chirag-bruno
- feat(secret-manager): fetch external secrets just in time by @prateek-bruno
- feat(ai): show hint for org disabled providers by @gopu-bruno
- feat(UI): Improve visibility of long variable values in the variables table by @sharan-bruno
- feat(git): fix BranchSelector to support remote branches and improve branch handling by @naman-bruno
- feat(secret-manager): move external secret values from disk to in-memory storage by @prateek-bruno
- feat(license): mask license key in license settings by @Gopi-bruno
- feat(git): add branch selection to workspace clone dialog by @gopu-bruno
Fixes
- fix(flatpak): fix git not found issue in flatpak package by @Pragadesh-45 and @sid-bruno in flathub#129
- v4.2.12026-09-30 · 2026-09-30 13:52 UTC
查看更新说明
Security
- security: resolve real path in QuickJS sandbox by @prateek-bruno in #9226 Local module paths are now resolved to their real path in the QuickJS runtime, preventing scripts from reaching files outside the intended location (e.g. via symlinks or path tricks). Credits to @wpframe for reporting this.
- security: stop exposing
__brunoLoadLocalModuleto scripts by @prateek-bruno in #9277 Internal module loader is no longer accessible from user scripts, reducing the sandbox's attack surface. Credits to @wpframe for reporting this.
We recommend all users upgrade to this release.
Full Changelog: https://github.com/usebruno/bruno/compare/v4.2.0...v4.2.1
- v4.2.02026-09-23 · 2026-09-23 14:25 UTC
查看更新说明
Changelog
Features
- feat(sidebar): support multi-select for request examples by @Gopi-bruno in #9225
- feat(environments):
collectionandworkspaceenvironments inheritance by @lohit-bruno in #9136 - feat(environment): redesign multi environment modal by @sachin-thakur-bruno in #9179
- feat(cli): Generate docs through cli by @sachin-bruno in #9073
- feat(grpc): add scripting support by @morsh-bruno in #9144
- feat(preferences): support page redesign by @sachin-thakur-bruno in #9064
- feat(runtime): expose __dirname, __filename within scripting context by @sanish-bruno in #9101
- feat(response-example): support previewing pdf images and videos for 'save responses' by @abhishekp-bruno in #9000
- feat(checkbox): adds checkbox component in ui with story and unit tests by @sachin-thakur-bruno in #8861
- feat(preferences): add docs URL for Mock Server by @naman-bruno in #9142
- feat(code-editor): degraded editor and status bar by @barelyhuman and @sid-bruno in #8867
- feat: add multi-selection state for collections (#6339) by @sid-bruno in #8721
- feat(generate-docs): advanced filtering options in generate documentation flow by @sachin-bruno in #9072
- feat(app): open response URLs as transient requests (#8189) by @sid-bruno in #8850
- feat(pm-migration): handle pm.sendRequest promise chains by @abhishekp-bruno in #8960
- feat(mock): CreateMockServerModal with source type selection and sync option by @naman-bruno in #9110
- feat(variables): add scope-aware variable creation (#8665) by @sid-bruno and @sachin-thakur-bruno in #8852
- feat(env): multi environment import failure if one file is invalid by @Gopi-bruno in #9051
- feat(headers): show default headers and support omitting them per request by @pooja-bruno in #8990
- feat(app): replaced the placeholder app with a learn-more empty state and labelled app items as App by @ravindra-bruno in #9100
- feat(env): handle environment name conflicts during import with replace or copy by @Gopi-bruno in #9050
- feat(query-editor): add code mirror search and replace in query editor by @sachin-thakur-bruno in #9042
- feat(translator): add global variable translation methods for Postman to bruno conversion by @sanish-bruno in #9098
- feat(filesystem): decouple display names from filesystem names & resolve collisions silently by @sachin-thakur-bruno in #8714
- feat(yml-migration): strip .bru extension from runRequest calls by @naman-bruno in #9055
- feat(app): support for app drafts in migration and save requests modal by @naman-bruno in #9054
- feat(timeline): display headers in timeline request headers by @shubh-bruno in #8857
- feat(variables): revamp the read-only Variables tab by @pooja-bruno in [#8784](h
- v4.1.02026-08-20 · 2026-08-20 14:09 UTC
查看更新说明
Changelog
Features
- feat: Mock Server implementation by @utkarsh-bruno and @shubh-bruno in #8734
- feat(docs): Rich text docs editor by @Gopi-bruno in #8559
- feat(cli): add --global-env-var to override global environment variables at runtime by @abhishekp-bruno in #8620
- feat(client certs): add global client certs and allow disabling individual client certs. by @morsh-bruno in #8751
- feat(auth-headers): handling authorization header leaks to third party servers on redirect by @Gopi-bruno in #8380
- feat(envs): adding search filter to environment selector dropdown by @Gopi-bruno in #8277
- feat(environment): add default env to presets by @sachin-thakur-bruno in #8612
- feat: support drag-and-drop and alphabetical sorting for variables by @adwait-bruno in #8603
- feat: add sorting to the secrets tab as well by @adwait-bruno in #8871
- feat(collections): open multiple collections from a monorepo by @gopu-bruno in #8724
- feat(collections): add description text to open collection selection modal by @gopu-bruno in #8793
- feat(presets): updated presets design by @sachin-thakur-bruno in #8828
- feat(presets): updated dropdown with menu dropdown and label weight ux changes by @sachin-thakur-bruno in #8841
- feat(migrate): enhance migration modal to handle collection drafts by @naman-bruno in #8899
- feat: add migrate-to-YML pill to collection header by @naman-bruno in #8882
- feat(converters): add support for script execution flow in yml configuration by @naman-bruno in #8745
- feat: add preserve scripts option for Postman import/export by @gopu-bruno in #8726
- feat(snapshot): persisting sidebar state in the snapshot by @Gopi-bruno in #8328
- feat(code-mirror-search): add replace and replace-all with search position, debouncing and tests by @sachin-thakur-bruno in #8715
- feat(db): sqlite as a re-usable SDK for secondary queries by @chirag-bruno in #8533
- feat(request): warn when binary body file is missing on disk by @sanish-bruno and @rajashreehj-bruno in #8753
- feat(size/M): Default to no environments selected in the Generate Documentation modal by @sachin-bruno in #8785
- feat(ai): add focus for prompt input after AI response completion by @naman-bruno in #8747
- feat(secrets): add GCP Secret Manager support by @abhishekp-bruno
- feat(git): implement Git remote operation modals and enhance branch selection UI by @utkarsh-bruno
- feat(proxy): implement Git proxy environment configuration by @utkarsh-bruno
- feat(git-providers): apply network config for git provider APIs by @gopu-bruno
- feat(app/git): inform the user that edits are being made on protected branches by @sid-bruno
- feat(workspace): warning about unsynced collections excluded from Fetch in Bruno embed by @ravindra-bruno
- feat(license): report app version, OS, arch and telemetry id on licence calls by @hassan-bruno
Fixes
- fix(auth): stop AWS V4 auth hea
- v4.0.02026-07-23 · 2026-07-23 17:26 UTC
查看更新说明
Changelog
Features
- feat(app): migrate ctx API to bru.ctx by @gopu-bruno in #8557
- feat(overview): show human-readable size for unloaded requests by @chirag-bruno in #8580
- feat(description): file binary description implementation by @sid-bruno in #8434
- feat(ai): AI model handling with reasoning support by @naman-bruno in #8539
- feat: variable descriptions by @sid-bruno in #8269
- feat(snapshot): implement active workspace tab type tracking by @sid-bruno in #8487
- feat: Added the option for bruno version edit in the collection overview by @sachin-bruno in #8424
- feat(auth): akamai auth integration by @shubh-bruno in #8199
- feat(ai): add security preferences management to AI settings by @naman-bruno in #8453
- feat: Added collection name and minor UI changes to the generate doc modal by @sachin-bruno in #8391
- feat(cli): persist env, global-env, and collection var changes from scripts by @sanish-bruno in #8387
- feat(import): set yml as a default file format across all types of imports by @sharan-bruno in #8363
- feat(electron): add pkg configuration for installation location by @sid-bruno in #8403
- feat(variables): persist scripted variable changes by default and re-enable disabled scripting APIs by @sanish-bruno in #8315
- feat(ai): mode toggle UI and add AI support for folder & collection by @naman-bruno in #8385
- feat(environments): split variables and secrets into separate tabs by @pooja-bruno in #8191
- feat(ai): add AI chat sidebar with code block and diff view components by @naman-bruno in #8358
- feat(ai): OpenAI-compatible endpoints support by @naman-bruno in #8365
- feat(woof): add WOOF easter egg by @sanish-bruno in #8301
- feat(app): introduce app functionality by @naman-bruno in #8338
- feat(network-ui): added resizable columns in network panel by @sachin-thakur-bruno in #8265
- feat: integrate Markdown into NotificationDetail by @naman-bruno in #8335
- feat(ai): implement AI autocomplete by @naman-bruno in #8300
- feat: add cli offline bundle script by @sid-bruno in #8192
- feat: faster collection mount via file cache (Beta) by @chirag-bruno in #8222
- feat(ai-assist): add docs generation with folder and collection context by @utkarsh-bruno and @ravindra-bruno in #8246
- feat: Choose environments to include and show versions in the Generate Documentation modal by @sachin-bruno in #8268
- feat: variable
data typessupport by @lohit-bruno in #8046 - feat: redesign notification modal by @prateek-bruno in #8140
- feat(websocket): show full message name in a tooltip on hover by @pooja-bruno in [#8299](https://github.com/usebruno/
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Bruno - Opensource IDE for exploring and testing APIs.
English | Українська | Русский | Türkçe | Deutsch | Français | Português (BR) | 한국어 | বাংলা | Español | Italiano | Română | Polski | 简体中文 | 正體中文 | العربية | 日本語 | ქართული | Nederlands | فارسی | हिन्दी
Bruno is a new and innovative API client, aimed at revolutionizing the status quo represented by Postman and similar tools out there.
Bruno stores your collections directly in a folder on your filesystem. We use a plain text markup language, Bru, to save information about API requests.
You can use Git or any version control of your choice to collaborate over your API collections.
Bruno is offline-only. There are no plans to add cloud-sync to Bruno, ever. We value your data privacy and believe it should stay on your device. Read our long-term vision here
📢 Watch our recent talk at India FOSS 3.0 Conference here
Commercial Versions ✨
Majority of our features are free and open source. We strive to strike a harmonious balance between open-source principles and sustainability
You can explore our paid versions to see if there are additional features that you or your team may find useful!
Table of Contents
- Installation
- Bruno CLI
- Run with Docker
- Features
- Important Links 📌
- Showcase 🎥
- Share Testimonials 📣
- Publishing to New Package Managers
- Stay in touch 🌐
- Trademark
- Contribute 👩💻🧑💻
- Authors
- License 📄
Installation
Bruno is available as binary download on our website for Mac, Windows and Linux.
You can also install Bruno via package managers like Homebrew, Chocolatey, Scoop, Snap, Flatpak and Apt.
# On Mac via Homebrew
brew install bruno
# On Windows via Chocolatey
choco install bruno
# On Windows via Scoop
scoop bucket add extras
scoop install bruno
# On Windows via winget
winget install Bruno.Bruno
# On Linux via Snap
snap install bruno
# On Linux via Flatpak
flatpak install com.usebruno.Bruno
# On Arch Linux via AUR
yay -S bruno
# On Linux via Apt
sudo mkdir -p /etc/apt/keyrings
sudo apt update && sudo apt install gpg curl
curl -fsSL "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x9FA6017ECABE0266" \
| gpg --dearmor \
| sudo tee /etc/apt/keyrings/bruno.gpg > /dev/null
sudo chmod 644 /etc/apt/keyrings/bruno.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/bruno.gpg] http://debian.usebruno.com/ bruno stable" \
| sudo tee /etc/apt/sources.list.d/bruno.list
sudo apt update && sudo apt install bruno
Bruno CLI
The Bruno CLI lets you run your API collections from the command line, which is ideal for automated testing and CI/CD pipelines. Install it from npm using the package manager of your choice:
npm install -g @usebruno/cli
Navigate to the directory containing your collection and run it:
# Run every request in the collection
bru run
# Run a single request
bru run request.bru
# Run a folder against a specific environment
bru run folder --env Local
For the full command reference, see the Bruno CLI documentation.
Run with Docker
Official Docker images for the Bruno CLI let you run API collections in CI/CD pipelines and locally without installing Node.js or npm on the host. Images are published to both Docker Hub and the GitHub Container Registry on every CLI release, with alpine and debian variants for linux/amd64 and linux/arm64.
# Pull from Docker Hub
docker pull usebruno/cli:latest
# Or pull from the GitHub Container Registry
docker pull ghcr.io/usebruno/cli:latest
# Run a collection by mounting the current directory
docker run -v $(pwd):/bruno usebruno/cli run
For variants, tag matrix, environment files, and CI examples (GitHub Actions, GitLab CI, Jenkins), see the full Bruno CLI Docker documentation.
Features
Run across multiple platforms 🖥️
Collaborate via Git 👩💻🧑💻
Or any version control system of your choice
Important Links 📌
Showcase 🎥
Share Testimonials 📣
If Bruno has helped you at work and your teams, please don't forget to share your testimonials on our GitHub discussion
Publishing to New Package Managers
Please see here for more information.
Stay in touch 🌐
𝕏 (Twitter) Website Discord LinkedIn
Trademark
Name
Bruno is a trademark held by Anoop M D
Logo
The logo is sourced from OpenMoji. License: CC BY-SA 4.0
Contribute 👩💻🧑💻
I am happy that you are looking to improve bruno. Please check out the contributing guide
Even if you are not able to make contributions via code, please don't hesitate to file bugs and feature requests that needs to be implemented to solve your use case.