* fix(collection-watcher): guard against events firing after collection deletion When deleting an OpenAPI-synced collection, saveBrunoConfig() writes to bruno.json which creates buffered chokidar events (80ms stabilityThreshold). If the collection directory is removed before those events fire, getCollectionFormat() throws "No collection configuration found" for each .bru file in the collection. Add fs.existsSync(collectionPath) guards in the change, unlink, and unlinkDir handlers to bail out early when the collection root no longer exists. * fix(workspaces): ensure collection watcher stops before deletion Added logic to remove the collection from the watcher when deleting files, preventing chokidar from firing events on a directory that is being removed. This change enhances stability during collection deletions by ensuring the watcher is properly managed. * refactor(workspaces): remove redundant collection watcher logic during deletion Eliminated the logic for stopping the collection watcher before deletion, streamlining the action for removing collections from workspaces. This change simplifies the code and maintains functionality without unnecessary complexity. * test(collection): add integration test for collection deletion functionality Introduced a new test suite to verify the deletion of collections from the workspace overview. The test ensures that collections are properly removed from both the UI and the file system, confirming the absence of any uncaught errors during the deletion process. This addition enhances the test coverage for collection management features. * feat(collection): implement deleteCollectionFromOverview utility function Added a new utility function to delete a collection directly from the workspace overview page. This function encapsulates the steps required to navigate the UI, confirm deletion, and ensure the collection is removed from both the interface and the file system. Updated the corresponding test to utilize this new function, enhancing code reusability and test clarity. * fix(collection-watcher): add guards for collection path existence and error handling Enhanced the unlink and unlinkDir functions to check for the existence of the collection path before proceeding. Added error handling for the getCollectionFormat function to prevent crashes when the collection format cannot be retrieved. These changes improve stability and robustness during collection deletion operations.
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
- 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
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.



