v3.1.0

usebruno/brunov3.1.0Feb 16, 2026by bijin-bruno

AI Summary

Major feature release with extensive new capabilities including workspace .env support, dotenv visual editor, ZIP file import, visual git diff viewer, git auto fetch, environment colors, and numerous UI/UX enhancements.

Key Highlights

  • Workspace .env file support
  • Dotenv visual editor
  • ZIP file import for collections
  • Visual git diff viewer
  • Git auto fetch
  • Environments color customization
  • Preferences as tab
  • Resizable columns in tables
  • Search functionality for environment variables
  • Asymmetric keys support
  • Transient request feature
  • OAuth2 and gRPC enhancements

New Features

  • Workspace .env file support
  • Dotenv visual editor
  • ZIP file import for collections
  • Visual git diff viewer
  • Git auto fetch
  • Environments color customization
  • Preferences as tab
  • Resizable columns in tables
  • Search functionality for environment variables
  • Asymmetric keys support
  • Transient request feature
  • Add zoom controls to key mappings
  • Apply modified dataBuffer to response
  • Default .gitignore file creation in workspace and collection
  • Improve response content type detection and SVG handling
  • Autosave missing actions in middleware
  • Show skipped requests with parsing errors in report
  • Allow collection environment and environment file to be used together in run command
  • Implement translation utilities for Bruno scripts to pm format
  • Add node-vault util functions
  • Add support for interpolation on mockDataFunctions
  • Implement isSafeMode() API
  • Enhance SaveRequestsModal to handle environment drafts
  • Add certs and proxy config for bruno-cli oauth2 requests
  • Add user-agent support in gRPC client channel options
  • Enhance OAuth2 support in snippet generation
  • JS API supports get path params
  • Status indicator for pre and post request scripts
  • bruno app instances handling updates
  • Add header validation
  • Add custom AppMenu component for windows & linux
  • Implement dynamic terminal theming based on app theme
  • Support for additional context roots in opencollection
  • Add certs and proxy config to bru.sendRequest API
  • Enhance ShareCollection component
  • Add nightly build configuration for Windows
  • Autosave for script files
  • Enhance GitHubTab and UrlTab with error handling
  • Improve secret variable masking for CLI env files
  • Enhance workspace tab management
  • MSI autoupdate config internal
  • Git option in share modal
  • Filter out transient items in collection exports and requests

Full Release Notes

# Changelog

### Features
- feat: add script to list changed packages by @sid-bruno in [#6678](https://github.com/usebruno/bruno/pull/6678)
- feat: add zoom controls to key mappings and update key display in preferences by @Pragadesh-45 in [#6765](https://github.com/usebruno/bruno/pull/6765)
- feat: apply modified dataBuffer to the response by @Pragadesh-45 in [#6023](https://github.com/usebruno/bruno/pull/6023)
- feat: add default .gitignore file creation in workspace and collection by @naman-bruno in [#6778](https://github.com/usebruno/bruno/pull/6778)
- feat: workspace .env file support by @naman-bruno in [#6777](https://github.com/usebruno/bruno/pull/6777)
- feat: Improve response content type detection and SVG handling by @abhishek-bruno in [#6741](https://github.com/usebruno/bruno/pull/6741)
- feat: autosave missing actions in middleware by @pooja-bruno in [#6781](https://github.com/usebruno/bruno/pull/6781)
- feat: show skipped requests with parsing errors in report by @sanjaikumar-bruno in [#6780](https://github.com/usebruno/bruno/pull/6780)
- feat: allow collection environment and environment file to be used together in run command by @abhishek-bruno in [#6784](https://github.com/usebruno/bruno/pull/6784)
- feat: implement translation utilities for converting Bruno scripts to pm format by @sanish-bruno in [#6761](https://github.com/usebruno/bruno/pull/6761)
- feat: add `node-vault` util functions by @lohit-bruno in [#6796](https://github.com/usebruno/bruno/pull/6796)
- feat: add support for interpolation on `mockDataFunctions` by @Pragadesh-45 in [#6393](https://github.com/usebruno/bruno/pull/6393)
- feat: Implement `isSafeMode()` API by @datag and @pooja-bruno in [#5760](https://github.com/usebruno/bruno/pull/5760)
- feat: enhance SaveRequestsModal to handle environment drafts by @naman-bruno in [#6857](https://github.com/usebruno/bruno/pull/6857)
- feat: add `certs and proxy` config for `bruno-cli` `oauth2` requests by @lohit-bruno in [#6423](https://github.com/usebruno/bruno/pull/6423)
- feat: add user-agent support in gRPC client channel options by @sanish-bruno in [#6808](https://github.com/usebruno/bruno/pull/6808)
- feat: enhance OAuth2 support in snippet generation by @stupidly-logical in [#6592](https://github.com/usebruno/bruno/pull/6592)
- feat: js api supports get path params by @Skrivoo in [#5235](https://github.com/usebruno/bruno/pull/5235)
- feat: status indicator for pre and post request scripts by @Pragadesh-45 in [#6865](https://github.com/usebruno/bruno/pull/6865)
- feat: preferences as tab by @Pragadesh-45 and @anusree-bruno in [#6786](https://github.com/usebruno/bruno/pull/6786)
- feat: `bruno app instances` handling updates by @lohit-bruno in [#6748](https://github.com/usebruno/bruno/pull/6748)
- feat: add header validation by @pooja-bruno in [#6859](https://github.com/usebruno/bruno/pull/6859)
- feat: transient request by @chirag-bruno in [#6878](https://github.com/usebruno/bruno/pull/6878)
- feat: Environments color by @MathieuDreano, @sid-bruno, and @pooja-bruno in [#6970](https://github.com/usebruno/bruno/pull/6970)
- feat: add resizable columns to table by @pooja-bruno in [#6843](https://github.com/usebruno/bruno/pull/6843)
- feat: add search functionality to environment variables by @Pragadesh-45 in [#6659](https://github.com/usebruno/bruno/pull/6659)
- feat: add custom AppMenu component for windows & linux by @naman-bruno in [#6934](https://github.com/usebruno/bruno/pull/6934)
- feat: implement dynamic terminal theming based on app theme by @chirag-bruno in [#6812](https://github.com/usebruno/bruno/pull/6812)
- feat: support for additional context roots in opencollection by @naman-bruno in [#6995](https://github.com/usebruno/bruno/pull/6995)
- feat: add `certs and proxy` config to `bru.sendRequest` API by @lohit-bruno in [#6988](https://github.com/usebruno/bruno/pull/6988)
- feat: dotenv visual editor by @naman-bruno in [#6964](https://github.com/usebruno/bruno/pull/6964)
- feat: enhance ShareCollection component by @naman-bruno in [#7016](https://github.com/usebruno/bruno/pull/7016)
- feat: add ZIP file import for collections by @naman-bruno in [#7063](https://github.com/usebruno/bruno/pull/7063)
- feat: add nightly build configuration for Windows and update build scripts by @Pragadesh44-Bruno and @sid-bruno
- feat: autosave for script files by @pooja-bruno
- feat: enhance GitHubTab and UrlTab with error handling and form submission by @abhishek-bruno
- feat: asymmetric keys by @sid-bruno
- feat: git auto fetch by @chirag-bruno
- feat: Improve secret variable masking for CLI env files by @abhishek-bruno
- feat: enhance workspace tab management by adding missing permanent tabs by @sanjaikumar-bruno 
- feat: MSI autoupdate config internal by @sid-bruno
- feat: visual git diff viewer by @naman-bruno
- feat: git option in share modal by @naman-bruno
- feat: filter out transient items in collection exports and requests by @chirag-bruno

### Fixes
- fix: Large Response Warning download button functionality by @gopu-bruno in [#6695](https://github.com/usebruno/bruno/pull/6695)
- fix: opencollection format registration on collection import by @naman-bruno in [#6735](https://github.com/usebruno/bruno/pull/6735)
- fix: update ResponseExampleUrlBar styles for better overflow handling by @abhishek-bruno in [#6535](https://github.com/usebruno/bruno/pull/6535)
- fix: seq becoming NaN when moving requests to collection root by @sanjaikumar-bruno in [#6727](https://github.com/usebruno/bruno/pull/6727)
- fix: ephemeral environment variables being saved to filesystem by @sanjaikumar-bruno in [#6723](https://github.com/usebruno/bruno/pull/6723)
- fix: Handle deleted environment variables in UI by @sanjaikumar-bruno in [#6703](https://github.com/usebruno/bruno/pull/6703)
- fix: import paths are not considered when refreshing methods within grpc by @sanish-bruno in [#6726](https://github.com/usebruno/bruno/pull/6726)
- fix: correct GitHub version badge URL in readme files by @anzz14 in [#6772](https://github.com/usebruno/bruno/pull/6772)
- fix: workspace name case mismatch by @abhishek-bruno in [#6560](https://github.com/usebruno/bruno/pull/6560)
- fix: update modal size in CreateEnvironment component from small to medium for consistency by @abhishek-bruno in [#6791](https://github.com/usebruno/bruno/pull/6791)
- fix: autosave for environment tabs and folder-level auth by @sanjaikumar-bruno in [#6510](https://github.com/usebruno/bruno/pull/6510)
- fix: move yup from peerDependencies to dependencies by @gopu-bruno in [#6794](https://github.com/usebruno/bruno/pull/6794)
- fix: handle optional clientSecret in OAuth2 authorization header by @abhishek-bruno in [#6186](https://github.com/usebruno/bruno/pull/6186)
- fix: websocket message scroll by @pooja-bruno in [#6503](https://github.com/usebruno/bruno/pull/6503)
- fix: env vars loading and switching using react-virtuoso by @shubh-bruno in [#6790](https://github.com/usebruno/bruno/pull/6790)
- fix: add compute key for virtual table by @sid-bruno in [#6807](https://github.com/usebruno/bruno/pull/6807)
- fix: response format auto-switch on content type change by @shubh-bruno in [#6773](https://github.com/usebruno/bruno/pull/6773)
- fix: rename requests double notifications by @shubh-bruno in [#6677](https://github.com/usebruno/bruno/pull/6677)
- fix: prevent URL marking within variable patterns in CodeMirror by @chirag-bruno in [#6680](https://github.com/usebruno/bruno/pull/6680)
- fix: timestamp tooltip message by @pooja-bruno in [#6688](https://github.com/usebruno/bruno/pull/6688)
- fix: resolve Load Request button error when loading large collection by @sreelakshmi-bruno in [#6809](https://github.com/usebruno/bruno/pull/6809)
- fix: basic Auth inheritance in code generation by @sanjaikumar-bruno in [#6805](https://github.com/usebruno/bruno/pull/6805)
- fix: resolve tab flickering when switching between requests by @gopu-bruno in [#6825](https://github.com/usebruno/bruno/pull/6825)
- fix: improve {{var}} detection using cursor-based brace matching by @shubh-bruno in [#6691](https://github.com/usebruno/bruno/pull/6691)
- fix: variables set via setVar should be interpolated only during runtime by @bijin-bruno in [#6823](https://github.com/usebruno/bruno/pull/6823)
- fix: cli `proxy config` updates by @lohit-bruno in [#6846](https://github.com/usebruno/bruno/pull/6846)
- fix: update clone collection location logic based on active workspace by @naman-bruno in [#6841](https://github.com/usebruno/bruno/pull/6841)
- fix: lag when moving Electron window (issue #5203) by @qweme32 in [#6771](https://github.com/usebruno/bruno/pull/6771)
- fix: prevent JS hint leak on Ctrl+Space and show allowed root hints by @Abhinandan-pixel in [#6776](https://github.com/usebruno/bruno/pull/6776)
- fix: get `certs and proxy config` based on oauth2 `token and refresh urls` instead of `resource url` by @lohit-bruno in [#6164](https://github.com/usebruno/bruno/pull/6164)
- fix: prevent response truncation in recursive collection runner by @gopu-bruno in [#6862](https://github.com/usebruno/bruno/pull/6862)
- fix: openapi query param import by @pooja-bruno in [#6241](https://github.com/usebruno/bruno/pull/6241)
- fix: autosave for global environments by @sanjaikumar-bruno in [#6872](https://github.com/usebruno/bruno/pull/6872)
- fix: Code Generation for Basic Auth by @sanjaikumar-bruno in [#6814](https://github.com/usebruno/bruno/pull/6814)
- fix(websocket): add API Key query params support and OAuth2 inheritance by @pooja-bruno in [#6271](https://github.com/usebruno/bruno/pull/6271)
- fix: update linting commands to use npx for better compatibility by @kanakkholwal in [#6840](https://github.com/usebruno/bruno/pull/6840)
- fix: disable editing runtime variable if key is same as collection by @shubh-bruno in [#6835](https://github.com/usebruno/bruno/pull/6835)
- fix: openapi spec with example values by @pooja-bruno in [#6476](https://github.com/usebruno/bruno/pull/6476)
- fix: duplicate toast when saving an example by @sanish-bruno in [#6952](https://github.com/usebruno/bruno/pull/6952)
- fix: path-param variable edit popup by @shubh-bruno in [#6955](https://github.com/usebruno/bruno/pull/6955)
- fix: ensure terminal gains focus upon opening in the console tab by @abhishek-bruno in [#6951](https://github.com/usebruno/bruno/pull/6951)
- fix: CLI Buffer handling in variable interpolation by @so-iwamoto in [#6922](https://github.com/usebruno/bruno/pull/6922)
- fix: prevent crash when reordering query params with empty name by @gopu-bruno in [#6938](https://github.com/usebruno/bruno/pull/6938)
- fix: `system proxy` resolver logic updates by @lohit-bruno in [#6273](https://github.com/usebruno/bruno/pull/6273)
- fix: async fns calls window.send after the window is destroyed by @sanish-bruno in [#6747](https://github.com/usebruno/bruno/pull/6747)
- fix: cURL auth import for digest and ntlm by @pooja-bruno in [#6292](https://github.com/usebruno/bruno/pull/6292)
- fix: refresh scopeInfo after variable save in tooltip editor by @pooja-bruno in [#6935](https://github.com/usebruno/bruno/pull/6935)
- fix: global environment flag for cli by @naman-bruno in [#6969](https://github.com/usebruno/bruno/pull/6969)
- fix: update certificate type handling in stringifyCollection function by @naman-bruno in [#6986](https://github.com/usebruno/bruno/pull/6986)
- fix: ensure app gains focus when restoring main window by @lohit-bruno in [#6984](https://github.com/usebruno/bruno/pull/6984)
- fix: cache system proxy by @lohit-bruno in [#6990](https://github.com/usebruno/bruno/pull/6990)
- fix: support multiline example names by @gopu-bruno in [#6895](https://github.com/usebruno/bruno/pull/6895)
- fix: support multiline descriptions in example blocks by @gopu-bruno in [#6879](https://github.com/usebruno/bruno/pull/6879)
- fix: restore cursor focus on save and show placeholder for empty cells by @pooja-bruno in [#6795](https://github.com/usebruno/bruno/pull/6795)
- fix: response pane actions for GQL requests by @shubh-bruno in [#6911](https://github.com/usebruno/bruno/pull/6911)
- fix: refocus search bar in code editor on Ctrl/Cmd + F by @shubh-bruno in [#6980](https://github.com/usebruno/bruno/pull/6980)
- fix: update sidebar item copy toast message by @gopu-bruno in [#7011](https://github.com/usebruno/bruno/pull/7011)
- fix: YML parsing and stringification to support post-response variables by @naman-bruno in [#7009](https://github.com/usebruno/bruno/pull/7009)
- fix: default format on import modal by @naman-bruno in [#7017](https://github.com/usebruno/bruno/pull/7017)
- fix: add missing URL helper translations for Bruno to Postman export by @pooja-bruno in [#7026](https://github.com/usebruno/bruno/pull/7026)
- fix: code editor null value crash by @pooja-bruno in [#7039](https://github.com/usebruno/bruno/pull/7039)
- fix: close saved deleting collections by @chirag-bruno in [#7048](https://github.com/usebruno/bruno/pull/7048)
- fix: improve error message formatting by @chirag-bruno in [#7059](https://github.com/usebruno/bruno/pull/7059)
- fix: handle tests while importing opencollection yml files by @naman-bruno in [#7067](https://github.com/usebruno/bruno/pull/7067)
- fix: header and var tooltip overflow by @pooja-bruno in [#7082](https://github.com/usebruno/bruno/pull/7082)
- fix: disable text-overflow ellipsis on checkbox column by @gopu-bruno in [#7080](https://github.com/usebruno/bruno/pull/7080)
- fix(`bruno-requests`): mark `node.js built-in` modules as `external` in rollup config by @lohit-bruno in [#7095](https://github.com/usebruno/bruno/pull/7095)
- fix: improve value handling in editor components by @sid-bruno in [#7098](https://github.com/usebruno/bruno/pull/7098)
- fix: improve environment variable comparison by stripping UIDs by @sid-bruno in [#7100](https://github.com/usebruno/bruno/pull/7100)
- fix: filter existing paths for apispec in workspace by @naman-bruno in [#7104](https://github.com/usebruno/bruno/pull/7104)
- fix: update codemirror bg for pastel light theme by @gopu-bruno in [#7110](https://github.com/usebruno/bruno/pull/7110)
- fix: example response statusCode not persisted in yml file by @abhishek-bruno in [#7117](https://github.com/usebruno/bruno/pull/7117)
- fix: fix save all modified requests while closing the app by @bijin-bruno in [#7118](https://github.com/usebruno/bruno/pull/7118)
- fix: enhance tag handling and validation in collection import/export by @abhishek-bruno in [#7107](https://github.com/usebruno/bruno/pull/7107)
- fix(node-vm): `scripting context` and `module resolution` by @lohit-bruno in [#7033](https://github.com/usebruno/bruno/pull/7033)
- fix: resolve 'unknown collection format' error in OpenAPI open in bruno import by @gopu-bruno
- fix: `on` instead of `once` by @sid-bruno
- fix: removed `node-vault` library, added `certs and proxy` support for `bruno-cli` `node-vault` by @lohit-bruno
- fix: remove period validation from collection item names by @naman-bruno
- fix: update collection location logic in import collection modals by @naman-bruno
- fix: Requests with prompt variables stuck in running state by @sanjaikumar-bruno
- fix: clear trial license on deactivation by @sid-bruno

### Others
- docs: Theme-dependent screenshots in README by @rreyn-bruno in [#6738](https://github.com/usebruno/bruno/pull/6738)
- Change home image in readme with v3 UI by @ganesh-bruno in [#6699](https://github.com/usebruno/bruno/pull/6699)
- improve: migration & default workspace handling by @naman-bruno in [#6707](https://github.com/usebruno/bruno/pull/6707)
- refactor: enhance GrpcRequestPane and GrpcResponsePane with ResponsiveTabs component by @abhishek-bruno in [#6649](https://github.com/usebruno/bruno/pull/6649)
- refactor: simplify HtmlPreview component by extracting render logic into a separate function by @abhishek-bruno in [#6740](https://github.com/usebruno/bruno/pull/6740)
- refactor: enhance tab management in ResponseExampleResponsePane component by @abhishek-bruno in [#6655](https://github.com/usebruno/bruno/pull/6655)
- refactor: enhance WSRequestPane and WSResponsePane with ResponsiveTabs component by @abhishek-bruno in [#6650](https://github.com/usebruno/bruno/pull/6650)
- remove allowScriptFilesystemAccess flag by @naman-bruno in [#6834](https://github.com/usebruno/bruno/pull/6834)
- chore: update qs package version to 6.14.1 by @sid-bruno in [#6849](https://github.com/usebruno/bruno/pull/6849)
- chore: update project dependencies by @sid-bruno in [#6858](https://github.com/usebruno/bruno/pull/6858)
- skip loading CA certificates when SSL verification is disabled by @sreelakshmi-bruno in [#6829](https://github.com/usebruno/bruno/pull/6829)
- Remove isLikelyText detection from detectContentTypeFromBuffer utility function by @abhishek-bruno in [#6870](https://github.com/usebruno/bruno/pull/6870)
- refactor: improve element interactions in preferences and fix playwright tests by @Pragadesh-45 in [#6894](https://github.com/usebruno/bruno/pull/6894)
- consistent string handling across parsers by @naman-bruno in [#6866](https://github.com/usebruno/bruno/pull/6866)
- chore: reduce flakiness when running parallel tests by @sid-bruno in [#6848](https://github.com/usebruno/bruno/pull/6848)
- chore: React coding standards in CODING_STANDARDS.md by @sid-bruno in [#6962](https://github.com/usebruno/bruno/pull/6962)
- docs(converters): Fix example code to await by @ToyHugs in [#6960](https://github.com/usebruno/bruno/pull/6960)
- chore: remove prettier configurations by @sid-bruno in [#6967](https://github.com/usebruno/bruno/pull/6967)
- ci: flaky test monitor by @sid-bruno in [#7007](https://github.com/usebruno/bruno/pull/7007)
- refactor: update opencollection extension for bruno by @naman-bruno in [#7013](https://github.com/usebruno/bruno/pull/7013)
- make yml default option by @naman-bruno in [#6985](https://github.com/usebruno/bruno/pull/6985)
- refactor: update input styles and modal size across components by @abhishek-bruno 
- chore: pin license server certs on setup by @sid-bruno
- chore: modal size and browse link style in export dialog by @abhishek-bruno
- Improve OpenAPI parameter handling and add tests by @abhishek-bruno 
- Enhance OpenAPI exporter and add comprehensive tests by @abhishek-bruno 
- Updated headers for preferences sections by @anusree-bruno 

## New Contributors
- @anzz14 made their first contribution in [#6772](https://github.com/usebruno/bruno/pull/6772)
- @Abhinandan-pixel made their first contribution in [#6776](https://github.com/usebruno/bruno/pull/6776)
- @kanakkholwal made their first contribution in [#6840](https://github.com/usebruno/bruno/pull/6840)
- @ToyHugs made their first contribution in [#6960](https://github.com/usebruno/bruno/pull/6960)
- @so-iwamoto made their first contribution in [#6992](https://github.com/usebruno/bruno/pull/6922)

**Full Changelog**: https://github.com/usebruno/bruno/compare/v3.0.2...v3.1.0