[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"package:cask:bruno:en":3,"releases:stats:cask:bruno:en":473,"releases:cask:bruno:1:false:false:en":474,"releases-count:cask:bruno:true:en":600},{"accentColor":4,"artifacts":5,"autoUpdates":29,"categories":30,"conflictsWith":37,"dependsOn":40,"deprecated":33,"description":47,"descriptionEn":48,"developer":49,"disabled":33,"displayName":50,"downloadSha256":51,"downloadSize":52,"downloadUrl":53,"editorChoice":33,"formulaeUrl":54,"homepage":55,"iconUrl":56,"installCommand":57,"installs":58,"installs30d":59,"isFont":33,"isLibrary":33,"kegOnly":33,"kind":62,"latestRelease":63,"machineTranslated":33,"name":50,"names":81,"platforms":83,"primaryCategory":443,"rank30d":444,"releaseCount":445,"releaseStats":446,"repoUrl":452,"screenshots":453,"sourceLocale":75,"sourceUrl":461,"summary":462,"summaryTranslation":463,"supports":464,"tags":466,"tap":472,"token":82,"version":80,"versionChangedAt":67},"#F2A642",{"apps":6,"binaries":8,"entries":9,"pkgs":28},[7],"Bruno.app",[],[10,17],{"declaration":11,"phase":14,"sources":15,"target":13,"type":16},{"app":12,"target":13},[7],"\u002FApplications\u002FBruno.app","install",[7],"app",{"declaration":18,"phase":25,"sources":26,"type":27},{"zap":19},[20],{"trash":21},[22,23,24],"~\u002FLibrary\u002FApplication Support\u002Fbruno","~\u002FLibrary\u002FPreferences\u002Fcom.usebruno.app.plist","~\u002FLibrary\u002FSaved Application State\u002Fcom.usebruno.app.savedState","cleanup",[],"zap",[],true,[31],{"icon":32,"machineTranslated":33,"name":34,"slug":35,"sourceLocale":36},"lucide:code-xml",false,"Developer Tools","developer-tools","zh-CN",{"casks":38,"formulae":39},[],[],{"arch":41,"casks":44,"formulae":45,"requirements":46},[42,43],"arm64","x86_64",[],[],{},"Bruno is a local-first desktop API client for developers, QA engineers and teams that keep request collections alongside source code. Collections are ordinary files using the Bru format, so they can be reviewed and shared with Git without mandatory cloud collection synchronization.\n\n## Features\n- Build and send HTTP\u002FREST, GraphQL and gRPC requests, then inspect headers, bodies and responses.\n- Organize collections and environments, use variables, and manage request authentication.\n- Run assertions and JavaScript pre-request\u002Fpost-response scripts for repeatable tests.\n- Import existing API collections and OpenAPI definitions, and generate client code.\n- Collaborate through local files and version control; integrated Git capabilities vary by edition.\n- Use optional documentation and mock-server workflows; the separately installed Bruno CLI supports automation and CI.\n\n## Installation and use\nInstall the Mac desktop app with `brew install --cask bruno`, or download the official DMG for Apple Silicon or Intel and move Bruno to Applications. Create or open a collection directory, configure its environment and authentication, and send a request to your API. The desktop download bundles its Electron runtime; building from source and installing the separate CLI have different Node.js\u002Ftoolchain requirements.\n\nBruno stores collections locally, but requests still need access to their destination servers. Optional Git providers, license validation and other integrations may contact external services. Treat imported collections and scripts as executable material: review them before running. Version4.2.1 fixes QuickJS sandbox path\u002Fmodule-loader issues, and the project recommends upgrading.\n\n## Systems, dependencies and conflicts\nOfficial desktop builds are available for macOS, Windows and Linux, with x64 and ARM64 release artifacts. The current Homebrew record lists no extra formula dependency, explicit conflict or minimum macOS version; that absence is not a compatibility guarantee. Version4.2.1 bundles Electron37.6.1. The tagged Electron37.6.1 documentation lists macOS11 Big Sur or later and Windows10 or later, and verifies its Linux runtime on Ubuntu18.04+, Fedora32+ and Debian10+. These are runtime support baselines, not a separate guarantee that every Bruno feature works on every distribution; use the correct architecture and check the application download requirements. The official Linux DEB configuration requires GTK3, libnotify, NSS, XSS, Xtst, xdg-utils, AT-SPI, UUID, libsecret and ALSA libraries. Minimum RAM and installed disk footprint were not established in the cited sources. No official mobile desktop-client edition was established.\n\nThe official4.2.1 Apple Silicon DMG is166,655,607bytes. This is the download size, not installed storage. Different architecture and package formats have different sizes.\n\n## Accounts, fees and license\nThe free open-source edition supports local API work without a mandatory Bruno login or cloud sync. Commercial Pro and Ultimate editions provide additional team, Git, integration and support capabilities; check the official comparison for feature availability and current seat-based subscription prices. Connected providers and the APIs you test can require their own credentials or subscriptions. The public repository is MIT-licensed, attributed to Anoop M D, Anusree P S and contributors; commercial features and services have separate terms. Bruno Software Inc publishes the application.\n\nSources: [Official API client](https:\u002F\u002Fwww.usebruno.com\u002Fproduct\u002Fapi-client), [Downloads](https:\u002F\u002Fwww.usebruno.com\u002Fdownloads), [Pricing](https:\u002F\u002Fwww.usebruno.com\u002Fpricing), [Repository](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno), [Version4.2.1 build configuration](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fblob\u002Fv4.2.1\u002Fpackages\u002Fbruno-electron\u002Felectron-builder-config.js).\nRuntime source: https:\u002F\u002Fgithub.com\u002Felectron\u002Felectron\u002Fblob\u002Fv37.6.1\u002FREADME.md#platform-support","Open source IDE for exploring and testing APIs","Bruno Software Inc; Anoop M D, Anusree P S and contributors","Bruno","357eabcc8c422a5d62bd64f5c4075a74dd6b72c40135141a521d54a170b0778d",166655607,"https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Freleases\u002Fdownload\u002Fv4.2.1\u002Fbruno_4.2.1_arm64_mac.dmg","https:\u002F\u002Fformulae.brew.sh\u002Fcask\u002Fbruno","https:\u002F\u002Fwww.usebruno.com\u002F","https:\u002F\u002Fcdn.opennavo.com\u002Ficons\u002Fuploads\u002Fce3abc10a723\u002F6ae4effc8ebf-256.png","brew install --cask bruno",{"d30":59,"d365":60,"d90":61},3047,76159,13224,"cask",{"bodyMarkdown":64,"brewCommittedAt":65,"hasNotes":29,"id":66,"isLatest":29,"isPrerelease":33,"machineTranslated":33,"publishedAt":67,"sections":68,"source":74,"sourceLocale":75,"summary":76,"title":77,"translation":78,"version":80},"Official upstream release notes for Bruno 4.2.1. These cover the project and may include CLI or edition-specific changes.\n\n### Security\r\n\r\n* **security: resolve real path in QuickJS sandbox** by @prateek-bruno in [#9226](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9226) \r\nLocal 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.\r\n* **security: stop exposing `__brunoLoadLocalModule` to scripts** by @prateek-bruno in [#9277](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9277) \r\nInternal module loader is no longer accessible from user scripts, reducing the sandbox's attack surface. Credits to @wpframe for reporting this.\r\n\r\n**We recommend all users upgrade to this release.**\r\n\r\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fcompare\u002Fv4.2.0...v4.2.1\n\nSource: https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Freleases\u002Ftag\u002Fv4.2.1","2026-09-30T15:45:10Z",655,"2026-10-07T09:38:27.243348Z",[69],{"area":70,"items":71},"Highlights",[72,73],"Resolve real module paths to prevent sandbox escapes through symlinks.","Remove the internal loader from the user-script context.","editorial","en-US","Security release hardens QuickJS module path handling and removes an exposed internal loader; upstream recommends upgrading.","Bruno 4.2.1",{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},"source","4.2.1",[50,82],"bruno",[84,112,137,163,188,214,239,265,290,316,341,367,392,418],{"arch":43,"artifacts":85,"conflictsWith":100,"dependsOn":103,"downloadSha256":108,"downloadUrl":109,"macos":110,"requiresRosetta":33,"tag":111,"version":80},{"apps":86,"binaries":87,"entries":88,"pkgs":99},[7],[],[89,93],{"declaration":90,"phase":14,"sources":92,"target":13,"type":16},{"app":91,"target":13},[7],[7],{"declaration":94,"phase":25,"sources":98,"type":27},{"zap":95},[96],{"trash":97},[22,23,24],[],[],{"casks":101,"formulae":102},[],[],{"arch":104,"casks":105,"formulae":106,"requirements":107},[43],[],[],{},"4316d0f19c983e52c22e6dfd8cabe503865761f8210d9a45dba4fb3e1be7f502","https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Freleases\u002Fdownload\u002Fv4.2.1\u002Fbruno_4.2.1_x64_mac.dmg","27","golden_gate",{"arch":42,"artifacts":113,"conflictsWith":128,"dependsOn":131,"downloadSha256":51,"downloadUrl":53,"macos":110,"requiresRosetta":33,"tag":136,"version":80},{"apps":114,"binaries":115,"entries":116,"pkgs":127},[7],[],[117,121],{"declaration":118,"phase":14,"sources":120,"target":13,"type":16},{"app":119,"target":13},[7],[7],{"declaration":122,"phase":25,"sources":126,"type":27},{"zap":123},[124],{"trash":125},[22,23,24],[],[],{"casks":129,"formulae":130},[],[],{"arch":132,"casks":133,"formulae":134,"requirements":135},[42],[],[],{},"arm64_golden_gate",{"arch":43,"artifacts":138,"conflictsWith":153,"dependsOn":156,"downloadSha256":108,"downloadUrl":109,"macos":161,"requiresRosetta":33,"tag":162,"version":80},{"apps":139,"binaries":140,"entries":141,"pkgs":152},[7],[],[142,146],{"declaration":143,"phase":14,"sources":145,"target":13,"type":16},{"app":144,"target":13},[7],[7],{"declaration":147,"phase":25,"sources":151,"type":27},{"zap":148},[149],{"trash":150},[22,23,24],[],[],{"casks":154,"formulae":155},[],[],{"arch":157,"casks":158,"formulae":159,"requirements":160},[43],[],[],{},"26","tahoe",{"arch":42,"artifacts":164,"conflictsWith":179,"dependsOn":182,"downloadSha256":51,"downloadUrl":53,"macos":161,"requiresRosetta":33,"tag":187,"version":80},{"apps":165,"binaries":166,"entries":167,"pkgs":178},[7],[],[168,172],{"declaration":169,"phase":14,"sources":171,"target":13,"type":16},{"app":170,"target":13},[7],[7],{"declaration":173,"phase":25,"sources":177,"type":27},{"zap":174},[175],{"trash":176},[22,23,24],[],[],{"casks":180,"formulae":181},[],[],{"arch":183,"casks":184,"formulae":185,"requirements":186},[42],[],[],{},"arm64_tahoe",{"arch":43,"artifacts":189,"conflictsWith":204,"dependsOn":207,"downloadSha256":108,"downloadUrl":109,"macos":212,"requiresRosetta":33,"tag":213,"version":80},{"apps":190,"binaries":191,"entries":192,"pkgs":203},[7],[],[193,197],{"declaration":194,"phase":14,"sources":196,"target":13,"type":16},{"app":195,"target":13},[7],[7],{"declaration":198,"phase":25,"sources":202,"type":27},{"zap":199},[200],{"trash":201},[22,23,24],[],[],{"casks":205,"formulae":206},[],[],{"arch":208,"casks":209,"formulae":210,"requirements":211},[43],[],[],{},"15","sequoia",{"arch":42,"artifacts":215,"conflictsWith":230,"dependsOn":233,"downloadSha256":51,"downloadUrl":53,"macos":212,"requiresRosetta":33,"tag":238,"version":80},{"apps":216,"binaries":217,"entries":218,"pkgs":229},[7],[],[219,223],{"declaration":220,"phase":14,"sources":222,"target":13,"type":16},{"app":221,"target":13},[7],[7],{"declaration":224,"phase":25,"sources":228,"type":27},{"zap":225},[226],{"trash":227},[22,23,24],[],[],{"casks":231,"formulae":232},[],[],{"arch":234,"casks":235,"formulae":236,"requirements":237},[42],[],[],{},"arm64_sequoia",{"arch":43,"artifacts":240,"conflictsWith":255,"dependsOn":258,"downloadSha256":108,"downloadUrl":109,"macos":263,"requiresRosetta":33,"tag":264,"version":80},{"apps":241,"binaries":242,"entries":243,"pkgs":254},[7],[],[244,248],{"declaration":245,"phase":14,"sources":247,"target":13,"type":16},{"app":246,"target":13},[7],[7],{"declaration":249,"phase":25,"sources":253,"type":27},{"zap":250},[251],{"trash":252},[22,23,24],[],[],{"casks":256,"formulae":257},[],[],{"arch":259,"casks":260,"formulae":261,"requirements":262},[43],[],[],{},"14","sonoma",{"arch":42,"artifacts":266,"conflictsWith":281,"dependsOn":284,"downloadSha256":51,"downloadUrl":53,"macos":263,"requiresRosetta":33,"tag":289,"version":80},{"apps":267,"binaries":268,"entries":269,"pkgs":280},[7],[],[270,274],{"declaration":271,"phase":14,"sources":273,"target":13,"type":16},{"app":272,"target":13},[7],[7],{"declaration":275,"phase":25,"sources":279,"type":27},{"zap":276},[277],{"trash":278},[22,23,24],[],[],{"casks":282,"formulae":283},[],[],{"arch":285,"casks":286,"formulae":287,"requirements":288},[42],[],[],{},"arm64_sonoma",{"arch":43,"artifacts":291,"conflictsWith":306,"dependsOn":309,"downloadSha256":108,"downloadUrl":109,"macos":314,"requiresRosetta":33,"tag":315,"version":80},{"apps":292,"binaries":293,"entries":294,"pkgs":305},[7],[],[295,299],{"declaration":296,"phase":14,"sources":298,"target":13,"type":16},{"app":297,"target":13},[7],[7],{"declaration":300,"phase":25,"sources":304,"type":27},{"zap":301},[302],{"trash":303},[22,23,24],[],[],{"casks":307,"formulae":308},[],[],{"arch":310,"casks":311,"formulae":312,"requirements":313},[43],[],[],{},"13","ventura",{"arch":42,"artifacts":317,"conflictsWith":332,"dependsOn":335,"downloadSha256":51,"downloadUrl":53,"macos":314,"requiresRosetta":33,"tag":340,"version":80},{"apps":318,"binaries":319,"entries":320,"pkgs":331},[7],[],[321,325],{"declaration":322,"phase":14,"sources":324,"target":13,"type":16},{"app":323,"target":13},[7],[7],{"declaration":326,"phase":25,"sources":330,"type":27},{"zap":327},[328],{"trash":329},[22,23,24],[],[],{"casks":333,"formulae":334},[],[],{"arch":336,"casks":337,"formulae":338,"requirements":339},[42],[],[],{},"arm64_ventura",{"arch":43,"artifacts":342,"conflictsWith":357,"dependsOn":360,"downloadSha256":108,"downloadUrl":109,"macos":365,"requiresRosetta":33,"tag":366,"version":80},{"apps":343,"binaries":344,"entries":345,"pkgs":356},[7],[],[346,350],{"declaration":347,"phase":14,"sources":349,"target":13,"type":16},{"app":348,"target":13},[7],[7],{"declaration":351,"phase":25,"sources":355,"type":27},{"zap":352},[353],{"trash":354},[22,23,24],[],[],{"casks":358,"formulae":359},[],[],{"arch":361,"casks":362,"formulae":363,"requirements":364},[43],[],[],{},"12","monterey",{"arch":42,"artifacts":368,"conflictsWith":383,"dependsOn":386,"downloadSha256":51,"downloadUrl":53,"macos":365,"requiresRosetta":33,"tag":391,"version":80},{"apps":369,"binaries":370,"entries":371,"pkgs":382},[7],[],[372,376],{"declaration":373,"phase":14,"sources":375,"target":13,"type":16},{"app":374,"target":13},[7],[7],{"declaration":377,"phase":25,"sources":381,"type":27},{"zap":378},[379],{"trash":380},[22,23,24],[],[],{"casks":384,"formulae":385},[],[],{"arch":387,"casks":388,"formulae":389,"requirements":390},[42],[],[],{},"arm64_monterey",{"arch":43,"artifacts":393,"conflictsWith":408,"dependsOn":411,"downloadSha256":108,"downloadUrl":109,"macos":416,"requiresRosetta":33,"tag":417,"version":80},{"apps":394,"binaries":395,"entries":396,"pkgs":407},[7],[],[397,401],{"declaration":398,"phase":14,"sources":400,"target":13,"type":16},{"app":399,"target":13},[7],[7],{"declaration":402,"phase":25,"sources":406,"type":27},{"zap":403},[404],{"trash":405},[22,23,24],[],[],{"casks":409,"formulae":410},[],[],{"arch":412,"casks":413,"formulae":414,"requirements":415},[43],[],[],{},"11","big_sur",{"arch":42,"artifacts":419,"conflictsWith":434,"dependsOn":437,"downloadSha256":51,"downloadUrl":53,"macos":416,"requiresRosetta":33,"tag":442,"version":80},{"apps":420,"binaries":421,"entries":422,"pkgs":433},[7],[],[423,427],{"declaration":424,"phase":14,"sources":426,"target":13,"type":16},{"app":425,"target":13},[7],[7],{"declaration":428,"phase":25,"sources":432,"type":27},{"zap":429},[430],{"trash":431},[22,23,24],[],[],{"casks":435,"formulae":436},[],[],{"arch":438,"casks":439,"formulae":440,"requirements":441},[42],[],[],{},"arm64_big_sur",{"icon":32,"machineTranslated":33,"name":34,"slug":35,"sourceLocale":36},74,93,{"brewLag":447,"cadence":451,"count30d":449},{"compared":448,"earlierCount":449,"medianMinutes":450},3,1,153722867,"weekly","https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno",[454],{"caption":455,"height":456,"machineTranslated":33,"sourceLocale":75,"theme":457,"thumbUrl":458,"url":459,"width":460},"Official Mac workspace example marked v3.0.1: GitHub API request parameters and a JSON response.",835,"light","https:\u002F\u002Fcdn.opennavo.com\u002Fscreenshots\u002Fuploads\u002Fscreenshot\u002F7fc766ad8756\u002Ffc11b856c5b9-640.png","https:\u002F\u002Fcdn.opennavo.com\u002Fscreenshots\u002Fuploads\u002Fscreenshot\u002F7fc766ad8756\u002Ffc11b856c5b9-1280.png",1280,"https:\u002F\u002Fgithub.com\u002Fhomebrew\u002Fhomebrew-cask\u002Fblob\u002FHEAD\u002FCasks\u002Fb\u002Fbruno.rb","Local-first desktop API client for REST, GraphQL and gRPC testing, with file-based collections that fit Git workflows.",{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},{"arm64":29,"requiresRosetta":33,"status":465,"x86_64":29},"known",[50,467,468,469,470,471],"API","REST","GraphQL","gRPC","MIT","homebrew\u002Fcask",null,{"current":449,"records":475,"size":597,"stats":598,"total":445},[476,481,496,510,517,522,527,532,537,542,547,552,557,562,567,572,577,582,587,592],{"bodyMarkdown":64,"brewCommittedAt":65,"hasNotes":29,"id":66,"isLatest":29,"isPrerelease":33,"machineTranslated":33,"publishedAt":67,"sections":477,"source":74,"sourceLocale":75,"summary":76,"title":77,"translation":480,"version":80},[478],{"area":70,"items":479},[72,73],{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},{"bodyMarkdown":482,"brewCommittedAt":483,"hasNotes":29,"id":484,"isLatest":33,"isPrerelease":33,"machineTranslated":33,"publishedAt":485,"sections":486,"source":74,"sourceLocale":75,"summary":492,"title":493,"translation":494,"version":495},"Official upstream release notes for Bruno 4.2.0. These cover the project and may include CLI or edition-specific changes.\n\n# Changelog\r\n\r\n### Features\r\n- feat(sidebar): support multi-select for request examples by @Gopi-bruno in [#9225](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9225)\r\n- feat(environments): `collection` and `workspace` environments inheritance by @lohit-bruno in [#9136](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9136)\r\n- feat(environment): redesign multi environment modal by @sachin-thakur-bruno in [#9179](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9179)\r\n- feat(cli): Generate docs through cli by @sachin-bruno in [#9073](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9073)\r\n- feat(grpc): add scripting support by @morsh-bruno in [#9144](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9144)\r\n- feat(preferences): support page redesign by @sachin-thakur-bruno in [#9064](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9064)\r\n- feat(runtime): expose __dirname, __filename within scripting context by @sanish-bruno in [#9101](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9101)\r\n- feat(response-example): support previewing pdf images and videos for 'save responses' by @abhishekp-bruno in [#9000](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9000)\r\n- feat(checkbox): adds checkbox component in ui with story and unit tests by @sachin-thakur-bruno in [#8861](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8861)\r\n- feat(preferences): add docs URL for Mock Server by @naman-bruno in [#9142](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9142)\r\n- feat(code-editor): degraded editor and status bar by @barelyhuman and @sid-bruno in [#8867](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8867)\r\n- feat: add multi-selection state for collections (#6339) by @sid-bruno in [#8721](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8721)\r\n- feat(generate-docs): advanced filtering options in generate documentation flow by @sachin-bruno in [#9072](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9072)\r\n- feat(app): open response URLs as transient requests (#8189) by @sid-bruno in [#8850](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8850)\r\n- feat(pm-migration): handle pm.sendRequest promise chains by @abhishekp-bruno in [#8960](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8960)\r\n- feat(mock): CreateMockServerModal with source type selection and sync option by @naman-bruno in [#9110](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9110)\r\n- feat(variables): add scope-aware variable creation (#8665) by @sid-bruno and @sachin-thakur-bruno in [#8852](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8852)\r\n- feat(env): multi environment import failure if one file is invalid by @Gopi-bruno in [#9051](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9051)\r\n- feat(headers): show default headers and support omitting them per request by @pooja-bruno in [#8990](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8990)\r\n- feat(app): replaced the placeholder app with a learn-more empty state and labelled app items as App by @ravindra-bruno in [#9100](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9100)\r\n- feat(env): handle environment name conflicts during import with replace or copy by @Gopi-bruno in [#9050](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9050)\r\n- feat(query-editor): add code mirror search and replace in query editor by @sachin-thakur-bruno in [#9042](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9042)\r\n- feat(translator): add global variable translation methods for Postman to bruno conversion by @sanish-bruno in [#9098](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9098)\r\n- feat(filesystem): decouple display names from filesystem names & resolve collisions silently by @sachin-thakur-bruno in [#8714](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8714)\r\n- feat(yml-migration): strip .bru extension from runRequest calls by @naman-bruno in [#9055](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9055)\r\n- feat(app): support for app drafts in migration and save requests modal by @naman-bruno in [#9054](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9054)\r\n- feat(timeline): display headers in timeline request headers by @shubh-bruno in [#8857](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8857)\r\n- feat(variables): revamp the read-only Variables tab by @pooja-bruno in [#8784](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8784)\r\n- feat(storybook): upgrade storybook to rsbuild remove webpack as a dep by @sid-bruno in [#9062](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9062)\r\n- feat(sidebar): add support for displaying and managing file items in the collection sidebar by @Gopi-bruno\r\n- feat(collection-docs): telemetry for advanced filtering options when generating docs by @sachin-bruno\r\n- feat(git): implement Create PR functionality by @naman-bruno and @utkarsh-bruno\r\n- feat(sidebar): adds naming collisions for js files by @sachin-thakur-bruno\r\n- feat(git): allow dismissing the branch guard banner till a session by @ravindra-bruno\r\n\r\n### Fixes\r\n- fix(link-aware): revert click-to-open-request in editable fields by @shubh-bruno in [#9201](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9201)\r\n- fix(scripts): show sent headers for sendRequest & runRequest by @shubh-bruno in [#9215](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9215)\r\n- fix(nodevm): add `--experimental-cache-modules` to cache npm modules during script execution by @sid-bruno in [#9170](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9170)\r\n- fix(mock-server): clearing validation errors on modal by @utkarsh-bruno in [#9172](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9172)\r\n- fix(bruno-js): await async test() callbacks in developer mode by @shubh-bruno in [#9081](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9081)\r\n- fix(app): labelled cloned items by type in the clone modal and toast by @ravindra-bruno in [#9153](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9153)\r\n- fix(request): creating a new request from sidebar add request pre fils the preset url by @sachin-thakur-bruno in [#9150](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9150)\r\n- fix(openAPI): multifile openAPI specs can be imported by @adwait-bruno in [#8946](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8946)\r\n- fix(CLI): fixed junit reporters omit iterations and requests skipped due to bail by @sharan-bruno in [#9080](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9080)\r\n- fix(collection-settings): save presets using shortcuts by @shubh-bruno in [#9138](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9138)\r\n- fix(sqlite): write generated artifacts as TypeScript literals by @chirag-bruno in [#8951](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8951)\r\n- fix(app): added clone option for app and name collission for app while creating by @sachin-thakur-bruno in [#9133](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9133)\r\n- fix: openapi sync update by @adwait-bruno in [#8979](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8979)\r\n- fix: use NtlmClient as an adapter of axios instance by @prateek-bruno in [#9044](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9044)\r\n- fix(codemirror-search): add selected text to search input for replace shortcut by @sachin-thakur-bruno in [#9090](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9090)\r\n- fix(mock server): collection\u002Fapi spec now shows a default placeholder at the start by @utkarsh-bruno in [#8963](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8963)\r\n- fix(lang): guard ntlm domain on domainKey, not passwordKey by @sbalagan22 in [#8707](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8707)\r\n- fix(ui): prevent elapsed-time counter from resetting on tab switch by @Sudemc, @sharan-bruno in [#9089](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9089)\r\n- fix: create example modal shows status text and body type by @utkarsh-bruno in [#9082](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9082)\r\n- fix(datatype): Variable type validation flag reference mismatch issue by @sharan-bruno in [#8878](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8878)\r\n- fix: fixing duplicate variables by @utkarsh-bruno in [#9084](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9084)\r\n- fix(mock-server): restricting port numbers by showing errors by @utkarsh-bruno in [#8964](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8964)\r\n- fix(mock server): adding request log in case of express failure because of response header too by @utkarsh-bruno in [#9059](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9059)\r\n- fix(app): scoped mock server API spec options to the active workspace by @ravindra-bruno in [#9077](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9077)\r\n- fix(theme): added missing border for light and dark theme by @sachin-thakur-bruno in [#9071](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9071)\r\n- fix(scripting): preserve variables set in req.onFail by @Max-Reisinger and @sharan-bruno in [#8873](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8873)\r\n- fix(XmlPreview): improve XML parsing error handling and return structure by @abhishekp-bruno in [#8860](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8860)\r\n- fix(RequestTab): streamline transient request save confirmation logic by @sid-bruno in [#8969](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8969)\r\n- fix(test): removed the backup assertion by @chirag-bruno in [#9001](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9001)\r\n- fix: Prevent QuickJS disposal aborts in safe mode by @prateek-bruno in [#8924](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8924)\r\n- fix(grpc): reflection cache to use resolved url as key, add gRPC test server by @sanish-bruno in [#8832](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8832)\r\n- fix(converters): preserve enabled state for Env variables, collection variables for export, import by @ricciardelli and @sanish-bruno in [#8918](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8918)\r\n- fix: remove the 50 cap on maxRedirects and normalise it on every read path by @prateek-bruno in [#8855](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8855)\r\n- fix(mock-server): fix collapsed query params pane in mock response by @gopu-bruno in [#8957](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8957)\r\n- fix: use correct key for vault in telemetry by @prateek-bruno\r\n- fix(environments): environment inheritance fixes by @lohit-bruno\r\n- fix: pass secret variables to grpc scripting by @morsh-bruno\r\n- fix: removing What is a Github repo link by @utkarsh-bruno\r\n- fix(autosave): remove incomplete external secrets rows from autosave flow by @abhishekp-bruno\r\n- fix: interpolate iteration data in assertion values by @abhishekp-bruno\r\n- fix(git): stop reloading the stash list on unrelated git refreshes by @ravindra-bruno\r\n- fix(reports): generated headers in reports by @shubh-bruno\r\n- fix(git): allow longer branch names and show a clear error message by @gopu-bruno\r\n- fix(git): mapped stash apply and unmerged index errors to readable messages by @ravindra-bruno\r\n- fix(packages): re-add cross platform optional native deps by @sid-bruno\r\n\r\n### Others\r\n- fix(test): add dataTestId to delete collection item modal by @Gopi-bruno in [#9141](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9141)\r\n- fix(deps): conflicting dependencies after sec update hoisting by @sid-bruno in [#9029](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9029)\r\n- fix(unit-test): timeout for seeding 200 files on windows by @sachin-thakur-bruno in [#9099](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9099)\r\n- fix(tests): websocket messages scroll flaky tests by @sachin-thakur-bruno in [#9122](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9122)\r\n- feat(tests): add tests for app creation and management by @naman-bruno in [#9124](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9124)\r\n- fix(test): cli test cases for windows by @shubh-bruno in [#9161](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9161)\r\n- docs: project governance by @helloanoop in [#8790](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8790)\r\n- chore(standards): update coding standards for call site specific clones by @sid-bruno in [#9160](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9160)\r\n- perf(runner): remove redundant deep clones of the runner results tree by @chirag-bruno in [#9151](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9151)\r\n- test(benchmark): added benchmark test suite for collection runner by @chirag-bruno in [#9126](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9126)\r\n- chore: improve test comments by @helloanoop in [#9139](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9139)\r\n- chore(bruno-to-postman): update comments to match current apis in bruno by @sanish-bruno in [#9075](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9075)\r\n- chore(design-system): added border specific colors tokens for themes by @sachin-thakur-bruno in [#8965](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8965)\r\n- ci: enable Windows Unit Tests by @prateek-bruno in [#8673](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8673)\r\n- chore: update grpc-js library by @sid-bruno in [#9053](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9053)\r\n- chore(eslint): added hooks dependecy dev by @sachin-thakur-bruno in [#9034](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9034)\r\n- chore: update swagger-ui-react to version 5.32.14 by @sid-bruno in [#9032](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F9032)\r\n- test(cli): read the json report even if its one run or an array by @shubh-bruno in [#8988](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8988)\r\n- test(opencollection): cover multipart after yml reload by @Max-Reisinger in [#8938](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8938)\r\n- chore(deps): security cleanup by @sid-bruno in [#8956](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8956)\r\n- refactor(mock): rename validation functions and improve error handling by @naman-bruno in [#8954](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8954)\r\n- refactor(mock-server): remove updateMockDelay functionality by @naman-bruno in [#8952](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8952)\r\n- test(benchmark): add runner allocation memory benchmark by @chirag-bruno\r\n- perf(runner): remove redundant deep clones of the runner results tree by @chirag-bruno\r\n\r\n### New Contributors\r\n* @Sudemc made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8796\r\n* @sbalagan22 made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8707\r\n* @ricciardelli made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8681\r\n\r\n**Full Changelog:** https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fcompare\u002Fv4.1.0...v4.2.0\n\nSource: https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Freleases\u002Ftag\u002Fv4.2.0","2026-09-23T15:43:42Z",656,"0001-01-01T00:00:00Z",[487],{"area":70,"items":488},[489,490,491],"Inherit collection and workspace environments.","Add gRPC scripting and CLI documentation generation.","Preview PDF, image and video saved responses.","Adds environment inheritance, gRPC scripting and richer saved-response previews, with collection\u002FUI improvements and fixes.","Bruno 4.2.0",{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},"4.2.0",{"bodyMarkdown":497,"brewCommittedAt":498,"hasNotes":29,"id":499,"isLatest":33,"isPrerelease":33,"machineTranslated":33,"publishedAt":485,"sections":500,"source":74,"sourceLocale":75,"summary":506,"title":507,"translation":508,"version":509},"Official upstream release notes for Bruno 4.1.0. These cover the project and may include CLI or edition-specific changes.\n\n# Changelog\r\n\r\n### Features\r\n- feat: Mock Server implementation by @utkarsh-bruno and @shubh-bruno in [#8734](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8734)\r\n- feat(docs): Rich text docs editor by @Gopi-bruno in [#8559](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8559)\r\n- feat(cli): add --global-env-var to override global environment variables at runtime by @abhishekp-bruno in [#8620](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8620)\r\n- feat(client certs): add global client certs and allow disabling individual client certs. by @morsh-bruno in [#8751](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8751)\r\n- feat(auth-headers): handling authorization header leaks to third party servers on redirect by @Gopi-bruno in [#8380](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8380)\r\n- feat(envs): adding search filter to environment selector dropdown by @Gopi-bruno in [#8277](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8277)\r\n- feat(environment): add default env to presets by @sachin-thakur-bruno in [#8612](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8612)\r\n- feat: support drag-and-drop and alphabetical sorting for variables by @adwait-bruno in [#8603](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8603)\r\n- feat: add sorting to the secrets tab as well by @adwait-bruno in [#8871](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8871)\r\n- feat(collections): open multiple collections from a monorepo by @gopu-bruno in [#8724](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8724)\r\n- feat(collections): add description text to open collection selection modal by @gopu-bruno in [#8793](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8793)\r\n- feat(presets): updated presets design by @sachin-thakur-bruno in [#8828](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8828)\r\n- feat(presets): updated dropdown with menu dropdown and label weight ux changes by @sachin-thakur-bruno in [#8841](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8841)\r\n- feat(migrate): enhance migration modal to handle collection drafts by @naman-bruno in [#8899](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8899)\r\n- feat: add migrate-to-YML pill to collection header by @naman-bruno in [#8882](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8882)\r\n- feat(converters): add support for script execution flow in yml configuration by @naman-bruno in [#8745](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8745)\r\n- feat: add preserve scripts option for Postman import\u002Fexport by @gopu-bruno in [#8726](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8726)\r\n- feat(snapshot): persisting sidebar state in the snapshot by @Gopi-bruno in [#8328](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8328)\r\n- feat(code-mirror-search): add replace and replace-all with search position, debouncing and tests by @sachin-thakur-bruno in [#8715](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8715)\r\n- feat(db): sqlite as a re-usable SDK for secondary queries by @chirag-bruno in [#8533](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8533)\r\n- feat(request): warn when binary body file is missing on disk by @sanish-bruno and @rajashreehj-bruno in [#8753](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8753)\r\n- feat(size\u002FM): Default to no environments selected in the Generate Documentation modal by @sachin-bruno in [#8785](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8785)\r\n- feat(ai): add focus for prompt input after AI response completion by @naman-bruno in [#8747](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8747)\r\n- feat(secrets): add GCP Secret Manager support by @abhishekp-bruno\r\n- feat(git): implement Git remote operation modals and enhance branch selection UI by @utkarsh-bruno\r\n- feat(proxy): implement Git proxy environment configuration by @utkarsh-bruno\r\n- feat(git-providers): apply network config for git provider APIs by @gopu-bruno\r\n- feat(app\u002Fgit): inform the user that edits are being made on protected branches by @sid-bruno\r\n- feat(workspace): warning about unsynced collections excluded from Fetch in Bruno embed by @ravindra-bruno\r\n- feat(license): report app version, OS, arch and telemetry id on licence calls by @hassan-bruno\r\n\r\n### Fixes\r\n- fix(auth): stop AWS V4 auth headers from leaking on cross-origin redirects by @Gopi-bruno in [#8893](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8893)\r\n- fix(secrets): block duplicate secret names to prevent value loss by @pooja-bruno in [#8750](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8750)\r\n- fix(security): overflow on chip list styling by @naman-bruno in [#8748](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8748)\r\n- fix(app): global environment variables for apps by @naman-bruno in [#8900](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8900)\r\n- fix(app): re-add new request shortcut by @sid-bruno in [#8805](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8805)\r\n- fix(workspace): stopped the same collection from rendering twice with conflicting status by @ravindra-bruno in [#8947](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8947)\r\n- fix(workspace): showing only the remove option for the failed collection in workspace overview by @ravindra-bruno in [#8932](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8932)\r\n- fix(workspace): notify about collections that fail to open in Workspa… by @ravindra-bruno in [#8719](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8719)\r\n- fix(workspaces): switch to default workspace on close so header shows correct name by @ravindra-bruno in [#8425](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8425)\r\n- fix(editor): fixed search and replace input border by @sachin-thakur-bruno in [#8930](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8930)\r\n- fix(editor): tab indentation on code blocks by @sachin-thakur-bruno in [#8926](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8926)\r\n- fix(editor): add guessed language in language dropdown picker by @sachin-thakur-bruno in [#8925](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8925)\r\n- fix(editor): allow app keybindings if that keybindings is not present in rich text editor by @sachin-thakur-bruno in [#8894](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8894)\r\n- fix(codemirror-search): keybinding for focusing search and replace inside the search container by @sachin-thakur-bruno in [#8895](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8895)\r\n- fix(sidebar): prevent drag divider from disappearing on zoom-out by @gopu-bruno in [#8266](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8266)\r\n- fix: OpenAPI Spec Viewer: throws resolver errors for `$ref` schemas by @arpit-bruno in [#8892](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8892)\r\n- fix(openapi): strip trailing dots from operation names on import by @adwait-bruno in [#8812](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8812)\r\n- fix: populate collection & folder docs on OpenAPI\u002Fswagger imports by @adwait-bruno in [#8803](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8803)\r\n- fix(transient-request): unable to create transient request when preset is websocket by @chirag-bruno in [#8889](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8889)\r\n- fix: cmd+w now works for transient tabs by @adwait-bruno in [#8429](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8429)\r\n- fix: persist additional request values in preferences general tab save by @morsh-bruno in [#8823](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8823)\r\n- fix(proxy): update timestamp label format by @abhishekp-bruno in [#8870](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8870)\r\n- fix(ws): disable message queuing when in intermediate connection states by @sid-bruno in [#8879](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8879)\r\n- fix(ws): remove auto-reconnect in websockets by @sid-bruno in [#8605](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8605)\r\n- fix(ws): add height for ws msgs to fix search overlap by @sachin-thakur-bruno in [#8814](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8814)\r\n- fix(mount): hydrate websocket message uids in the cached mount path by @chirag-bruno in [#8862](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8862)\r\n- fix: change-version modal ui by @adwait-bruno in [#8735](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8735)\r\n- fix: keep sort column header from shifting when the arrow appears by @adwait-bruno in [#8833](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8833)\r\n- fix(generate-code): encode a literal colon in the path when url encoding is enabled  by @pooja-bruno in [#8834](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8834)\r\n- fix(generate-code): generate code for url interpolation by @pooja-bruno in [#7308](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F7308)\r\n- fix(presets): ux fixes for dropdown and icon spacing by @sachin-thakur-bruno in [#8827](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8827)\r\n- fix: Description missing for the import export yml for the environments by @sachin-bruno in [#8822](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8822)\r\n- fix: add dynamic font size adjustment for CodeMirror info display by @adwait-bruno in [#8817](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8817)\r\n- fix(export\u002Fimport): OpenCollection YAML drops collection and folder-level post-response variables by @sachin-bruno in [#8815](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8815)\r\n- fix(node-vm): resolve npm modules from additionalContextRoots via native walk-up by @sanish-bruno in [#8538](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8538)\r\n- fix(curl-import): treat inline --data-binary as body, not file by @pooja-bruno in [#8617](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8617)\r\n- fix(dev-tools): console and network filter dropdown position to top if no space by @sachin-thakur-bruno in [#8713](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8713)\r\n- fix(bruno-response): normalize response header name lookup to be case-insensitive by @abhishekp-bruno in [#8461](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8461)\r\n- fix(runner): collection runner loader issue by @sharan-bruno in [#8783](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8783)\r\n- fix: avoid network probe in PAC myIpAddress by @cyphercodes in [#8588](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8588)\r\n- fix: url truncates in docs by @adwait-bruno in [#8468](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8468)\r\n- fix: env configure remains visible by @adwait-bruno in [#8530](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8530)\r\n- fix: Folder Sequencing When we try to move any folder at the bottom of the folders list by @ravindra-bruno in [#8722](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8722)\r\n- fix(environment): auto save on env table removing some characters by @sachin-thakur-bruno in [#8732](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8732)\r\n- fix(timeout): allow inherit request timeout for yaml requests by @shubh-bruno in [#8746](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8746)\r\n- fix: binary body lost on importing from postman by @sanish-bruno and @rajashreehj-bruno in [#8729](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8729)\r\n- fix(converters): add missing auth mappings on postman export, add additional parameters mapping on postman import by @morsh-bruno in [#8494](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8494)\r\n- fix: failing test case fix by @utkarsh-bruno in [#8801](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8801)\r\n- fix(git): fixing pac proxy and removing buildGitProxyEnv as the secondary proxy implementation by @utkarsh-bruno\r\n- fix(git): use primary color for create branch cta by @gopu-bruno\r\n- fix(git): update onClose to use handleBackToOverview by @naman-bruno\r\n- fix(proxy-util): enhance proxy environment configuration by @utkarsh-bruno\r\n- fix(GitHub): deduplicate instance URL save on OnBlur\u002FEnter by @gopu-bruno\r\n- fix(GitHub): prevent redundant URL saves in GitHub configuration by @naman-bruno\r\n- fix: added Git submodule initialization and fetch for workspace collections by @ravindra-bruno\r\n- fix(workspace): written .gitmodules for git-synced collections so submodules resolve by @ravindra-bruno\r\n- fix(Embed): showing warning before sharing a workspace with unsynced changes by @ravindra-bruno\r\n- fix(doc-url): replaced Fetch In Bruno doc url for workspace embeding by @ravindra-bruno\r\n- fix(watcher): improve unlink logic to handle both formats by @naman-bruno\r\n- fix(external-secrets): correct external secret variables autocomplete duplicates and its variable-info scope by @lohit-bruno\r\n- fix: added a min and max height with an overflow to avoid the resizing based on the remotes fetched by @utkarsh-bruno\r\n- fix(openapi): export scheme-less request URLs as server entries by @adwait-bruno\r\n- fix(export): Postman export modal rendering in Share Collection by @gopu-bruno\r\n- fix(default-env): load env from file destructing by @sachin-thakur-bruno\r\n- fix(runner): Collection Runner - Loader still keeps running even after Cancelling the execution by @sharan-bruno\r\n- fix(UI): In Runner post execution \"Run again\" button is missing by @sharan-bruno\r\n- fix(collection-runner): disable runner in iterations count by @shubh-bruno\r\n\r\n### Others\r\n- feat(tests): enhance Playwright configuration for sharded CI runs by @sid-bruno in [#8742](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8742)\r\n- security(ipc): confine file-write handlers to known collections and api specs by @chirag-bruno in [#8274](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8274) credits to @IamLeandrooooo for passing this on\r\n- refactor(ai): moved AI Assist from floating overlay into request pane and collection\u002Ffolder settings tab bars by @ravindra-bruno in [#8693](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8693)\r\n- refactor(ai): update API key handling in openai comp providers by @naman-bruno in [#8749](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8749)\r\n- refactor(tests): update data type assertions to use data-selected-type attribute for consistency by @bijin-bruno in [#8731](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8731)\r\n- yml migration rework by @naman-bruno in [#8795](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8795)\r\n- reported how many collections failed to open on workspace load by @ravindra-bruno in [#8831](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8831)\r\n- Added the ignore for the collection nested folders by @ravindra-bruno in [#8725](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8725)\r\n- Added the fix for bru.runner.stopExecution() while running collection run from tests by @ravindra-bruno in [#8720](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8720)\r\n- ci: move all linux to self hosted by @sid-bruno in [#8791](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8791)\r\n- ci(tests-macos): disable mac runners on each PR by @sid-bruno in [#8752](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8752)\r\n- test: fix the draft indicator tests for collection client certs by @morsh-bruno in [#8824](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8824)\r\n- test(converters): add round trip tests for Postman \u003C-> Bruno converters by @morsh-bruno in [#8534](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8534)\r\n- chore: enhance claude rules & skills by @bijin-bruno in [#8829](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8829)\r\n- chore(design-system): added segmented control component with storybook by @sachin-thakur-bruno in [#8683](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8683)\r\n- chore: PR checklist update by @sachin-thakur-bruno in [#8806](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8806)\r\n- chore(eslint): disable autofix for const by @sachin-thakur-bruno in [#8760](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8760)\r\n- chore(eslint): adds eslint config warnings for unused-vars, debuggers, duplicate-imports by @sachin-thakur-bruno in [#8505](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8505)\r\n- chore(pr-decription): updated pr description by @sachin-thakur-bruno in [#8786](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8786)\r\n- chore(coderabbit): adds coderabbit instructions for adding new file as ts\u002Ftsx in bruno app by @sachin-thakur-bruno in [#8717](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8717)\r\n- fix(tests): jest mock for css imports and change paste timer by @sid-bruno in [#8858](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8858)\r\n- fix(e2e): Playwright failures from mock server and lazy mount by @sid-bruno in [#8835](https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8835)\r\n- added the validations check and added the ux for this by @ravindra-bruno\r\n- feat(telemetry): instrument app lifecycle and monetization events (app_first_launched, first_request_sent, paywall_viewed, monetization_cta_clicked, paid_state_recognized) and stamp event_version on all desktop events via shared capture by @ankit-bruno\r\n- feat(telemetry): add trial flow events with classified failure reasons and trial-window boundaries for session_activity by @ankit-bruno\r\n- fix(tests): pass tmpDir to CLI run commands in integration tests by @sanish-bruno\r\n- fix(test): postman to bruno test assertion by @sachin-thakur-bruno\r\n- fix(RunnerResults): add data-testid attribute to cancel button by @sanish-bruno\r\n\r\n### New contributors\r\n* @morsh-bruno made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8494\r\n* @cyphercodes made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8588\r\n* @Gopi-bruno made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8328\r\n* @arpit-bruno made their first contribution in https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fpull\u002F8892\r\n\r\n**Full Changelog:** https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Fcompare\u002Fv4.0.0...v4.1.0\r\n\n\nSource: https:\u002F\u002Fgithub.com\u002Fusebruno\u002Fbruno\u002Freleases\u002Ftag\u002Fv4.1.0","2026-08-20T15:51:31Z",657,[501],{"area":70,"items":502},[503,504,505],"Add mock-server implementation and rich-text docs editing.","Configure global client certificates and disable individual certificates.","Handle authorization-header leaks during third-party redirects.","Adds mock servers, rich-text documentation and certificate\u002Fenvironment controls, plus request and collection improvements.","Bruno 4.1.0",{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},"4.1.0",{"brewCommittedAt":511,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":512,"source":513,"translation":514,"version":516},"2026-07-23T18:58:47Z",[],"homebrew",{"status":515},"none","4.0.0",{"brewCommittedAt":518,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":519,"source":513,"translation":520,"version":521},"2026-07-20T13:17:38Z",[],{"status":515},"3.5.3",{"brewCommittedAt":523,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":524,"source":513,"translation":525,"version":526},"2026-07-13T16:27:02Z",[],{"status":515},"3.5.2",{"brewCommittedAt":528,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":529,"source":513,"translation":530,"version":531},"2026-07-02T10:27:31Z",[],{"status":515},"3.5.1",{"brewCommittedAt":533,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":534,"source":513,"translation":535,"version":536},"2026-06-23T16:24:43Z",[],{"status":515},"3.5.0",{"brewCommittedAt":538,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":539,"source":513,"translation":540,"version":541},"2026-05-26T19:19:03Z",[],{"status":515},"3.4.2",{"brewCommittedAt":543,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":544,"source":513,"translation":545,"version":546},"2026-05-21T10:46:53Z",[],{"status":515},"3.4.1",{"brewCommittedAt":548,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":549,"source":513,"translation":550,"version":551},"2026-05-20T19:23:15Z",[],{"status":515},"3.4.0",{"brewCommittedAt":553,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":554,"source":513,"translation":555,"version":556},"2026-04-22T21:49:50Z",[],{"status":515},"3.3.0",{"brewCommittedAt":558,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":559,"source":513,"translation":560,"version":561},"2026-04-03T15:46:21Z",[],{"status":515},"3.2.2",{"brewCommittedAt":563,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":564,"source":513,"translation":565,"version":566},"2026-03-18T21:47:47Z",[],{"status":515},"3.2.0",{"brewCommittedAt":568,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":569,"source":513,"translation":570,"version":571},"2026-02-25T01:02:43Z",[],{"status":515},"3.1.4",{"brewCommittedAt":573,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":574,"source":513,"translation":575,"version":576},"2026-02-20T15:50:56Z",[],{"status":515},"3.1.3",{"brewCommittedAt":578,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":579,"source":513,"translation":580,"version":581},"2026-02-18T15:50:04Z",[],{"status":515},"3.1.2",{"brewCommittedAt":583,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":584,"source":513,"translation":585,"version":586},"2026-02-17T12:51:19Z",[],{"status":515},"3.1.1",{"brewCommittedAt":588,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":589,"source":513,"translation":590,"version":591},"2026-02-16T18:48:58Z",[],{"status":515},"3.1.0",{"brewCommittedAt":593,"hasNotes":33,"isLatest":33,"isPrerelease":33,"sections":594,"source":513,"translation":595,"version":596},"2026-01-07T21:43:28Z",[],{"status":515},"3.0.2",20,{"brewLag":599,"cadence":451,"count30d":449},{"compared":448,"earlierCount":449,"medianMinutes":450},{"current":449,"records":601,"size":449,"stats":607,"total":445},[602],{"bodyMarkdown":64,"brewCommittedAt":65,"hasNotes":29,"id":66,"isLatest":29,"isPrerelease":33,"machineTranslated":33,"publishedAt":67,"sections":603,"source":74,"sourceLocale":75,"summary":76,"title":77,"translation":606,"version":80},[604],{"area":70,"items":605},[72,73],{"locale":75,"machineTranslated":33,"sourceLocale":75,"status":79},{"brewLag":608,"cadence":451,"count30d":449},{"compared":448,"earlierCount":449,"medianMinutes":450}]