v4.0.0
canove/whaticket-communityv4.0.0Jul 23, 2026by vijayh-bruno
AI Summary
This major version introduces significant AI integration features, including a chat sidebar, autocomplete, and OpenAI compatibility, alongside a migration of the context API to bru.ctx, UI enhancements, and performance improvements via file caching.
Key Highlights
- AI Chat sidebar with code block and diff view components
- Migration of context API to bru.ctx
- Resizable columns in network panel
- Faster collection mount via file cache
- Variable descriptions and data types support
Breaking Changes
- Migrate ctx API to bru.ctx
New Features
- AI Chat sidebar
- AI Autocomplete
- File mode implementation
- Akamai authentication integration
- Variable descriptions
- WOOF easter egg
Full Release Notes
# Changelog ### Features - feat(app): migrate ctx API to bru.ctx by @gopu-bruno in [#8557](https://github.com/usebruno/bruno/pull/8557) - feat(overview): show human-readable size for unloaded requests by @chirag-bruno in [#8580](https://github.com/usebruno/bruno/pull/8580) - feat(description): file binary description implementation by @sid-bruno in [#8434](https://github.com/usebruno/bruno/pull/8434) - feat(ai): AI model handling with reasoning support by @naman-bruno in [#8539](https://github.com/usebruno/bruno/pull/8539) - feat: variable descriptions by @sid-bruno in [#8269](https://github.com/usebruno/bruno/pull/8269) - feat(snapshot): implement active workspace tab type tracking by @sid-bruno in [#8487](https://github.com/usebruno/bruno/pull/8487) - feat: Added the option for bruno version edit in the collection overview by @sachin-bruno in [#8424](https://github.com/usebruno/bruno/pull/8424) - feat(auth): akamai auth integration by @shubh-bruno in [#8199](https://github.com/usebruno/bruno/pull/8199) - feat(ai): add security preferences management to AI settings by @naman-bruno in [#8453](https://github.com/usebruno/bruno/pull/8453) - feat: Added collection name and minor UI changes to the generate doc modal by @sachin-bruno in [#8391](https://github.com/usebruno/bruno/pull/8391) - feat(cli): persist env, global-env, and collection var changes from scripts by @sanish-bruno in [#8387](https://github.com/usebruno/bruno/pull/8387) - feat(import): set yml as a default file format across all types of imports by @sharan-bruno in [#8363](https://github.com/usebruno/bruno/pull/8363) - feat(electron): add pkg configuration for installation location by @sid-bruno in [#8403](https://github.com/usebruno/bruno/pull/8403) - feat(variables): persist scripted variable changes by default and re-enable disabled scripting APIs by @sanish-bruno in [#8315](https://github.com/usebruno/bruno/pull/8315) - feat(ai): mode toggle UI and add AI support for folder & collection by @naman-bruno in [#8385](https://github.com/usebruno/bruno/pull/8385) - feat(environments): split variables and secrets into separate tabs by @pooja-bruno in [#8191](https://github.com/usebruno/bruno/pull/8191) - feat(ai): add AI chat sidebar with code block and diff view components by @naman-bruno in [#8358](https://github.com/usebruno/bruno/pull/8358) - feat(ai): OpenAI-compatible endpoints support by @naman-bruno in [#8365](https://github.com/usebruno/bruno/pull/8365) - feat(woof): add WOOF easter egg by @sanish-bruno in [#8301](https://github.com/usebruno/bruno/pull/8301) - feat(app): introduce app functionality by @naman-bruno in [#8338](https://github.com/usebruno/bruno/pull/8338) - feat(network-ui): added resizable columns in network panel by @sachin-thakur-bruno in [#8265](https://github.com/usebruno/bruno/pull/8265) - feat: integrate Markdown into NotificationDetail by @naman-bruno in [#8335](https://github.com/usebruno/bruno/pull/8335) - feat(ai): implement AI autocomplete by @naman-bruno in [#8300](https://github.com/usebruno/bruno/pull/8300) - feat: add cli offline bundle script by @sid-bruno in [#8192](https://github.com/usebruno/bruno/pull/8192) - feat: faster collection mount via file cache (Beta) by @chirag-bruno in [#8222](https://github.com/usebruno/bruno/pull/8222) - feat(ai-assist): add docs generation with folder and collection context by @utkarsh-bruno and @ravindra-bruno in [#8246](https://github.com/usebruno/bruno/pull/8246) - feat: Choose environments to include and show versions in the Generate Documentation modal by @sachin-bruno in [#8268](https://github.com/usebruno/bruno/pull/8268) - feat: variable `data types` support by @lohit-bruno in [#8046](https://github.com/usebruno/bruno/pull/8046) - feat: redesign notification modal by @prateek-bruno in [#8140](https://github.com/usebruno/bruno/pull/8140) - feat(websocket): show full message name in a tooltip on hover by @pooja-bruno in [#8299](https://github.com/usebruno/bruno/pull/8299) - feat(import): hide File Format option and default collections to Open… by @ravindra-bruno in [#8247](https://github.com/usebruno/bruno/pull/8247) - feat: implement file mode by @naman-bruno, @shubh-bruno, and @chirag-bruno in [#8258](https://github.com/usebruno/bruno/pull/8258) - feat(openapi-sync): preserve user-configured request values on sync by @sundram-bruno in [#8204](https://github.com/usebruno/bruno/pull/8204) - feat(app): scroll to and highlight error line on script error by @pooja-bruno in [#8183](https://github.com/usebruno/bruno/pull/8183) - feat(dev-tools-rquest-resize): dev tools details panel can be resized horizontally via a drag handle by @sachin-thakur-bruno in [#8234](https://github.com/usebruno/bruno/pull/8234) - feat(dev-tools): adds sorting on columns with verticle borders by @sachin-thakur-bruno in [#8238](https://github.com/usebruno/bruno/pull/8238) - feat(workspace): move external collections into the workspace by @gopu-bruno in [#8196](https://github.com/usebruno/bruno/pull/8196) - feat: integrate AIAssist for script editing by @naman-bruno in [#8220](https://github.com/usebruno/bruno/pull/8220) - feat(ws): multiple messages support in websockets by @pooja-bruno in [#8115](https://github.com/usebruno/bruno/pull/8115) - feat(ai): implement organization policy checks for AI features by @naman-bruno - feat: add trial upgrade dynamic url flow by @prateek-bruno - feat(telemetry): add per-generation documentation telemetry (BRU-3673) by @arpit-bruno - feat: secrets managers ui revamp by @lohit-bruno - feat(telemetry): track v2 collection mount (file cache) usage by @chirag-bruno - feat(notifications): enhance notification handling by @naman-bruno - feat(runner): revamp runner results table by @chirag-bruno - feat(mount): support js files in collection parsing and tree building by @chirag-bruno - feat(electron): add pkg configuration for installation location by @sid-bruno ### Fixes - fix(app): point generated docs to api-docs CDN path by @sundram-bruno in [#8633](https://github.com/usebruno/bruno/pull/8633) - fix(variable-tooltip): mask secret variables of non-string dataType by @pooja-bruno in [#8606](https://github.com/usebruno/bruno/pull/8606) - fix(description): bulk edit round trip looses description information by @sid-bruno in [#8595](https://github.com/usebruno/bruno/pull/8595) - fix: remove broken markdown in README_pt_br by @BraianS in [#8375](https://github.com/usebruno/bruno/pull/8375) - fix(ui): Added Horizontal Scroll On CollectionHeader to avoid overlapping and squeezing of contents by @ravindra-bruno in [#8511](https://github.com/usebruno/bruno/pull/8511) - fix(ui): websocket and grpc tooltip overflow fixed in request panel by @sachin-thakur-bruno in [#8544](https://github.com/usebruno/bruno/pull/8544) - fix: handle missing location header in redirect error response by @Pragadesh-45 in [#7725](https://github.com/usebruno/bruno/pull/7725) - fix(oauth2): prevent code injection in OAuth2 callback handling by @abhishekp-bruno and @kOaDT in [#8405](https://github.com/usebruno/bruno/pull/8405) - fix: system proxy refresh by @abhishekp-bruno and @sid-bruno in [#8535](https://github.com/usebruno/bruno/pull/8535) - fix(ui): fixed overflow size column issue on first load by @sachin-thakur-bruno in [#8525](https://github.com/usebruno/bruno/pull/8525) - fix(ToggleSwitch): correct onChange handler for response pane by @sid-bruno in [#8520](https://github.com/usebruno/bruno/pull/8520) - fix(openapi): validate API spec imports by @adwait-bruno in [#8322](https://github.com/usebruno/bruno/pull/8322) - fix(app): scope env variable/secret search per tab by @pooja-bruno in [#8491](https://github.com/usebruno/bruno/pull/8491) - fix(request-panel): changed request panel static width to percentage width of screen width by @sachin-thakur-bruno in [#8499](https://github.com/usebruno/bruno/pull/8499) - fix(snapshot): active workspace restoration from snapshot by @sid-bruno in [#8392](https://github.com/usebruno/bruno/pull/8392) - fix(variables): correct scripted-variable persistence races and cross-request propagation by @sanish-bruno in [#8406](https://github.com/usebruno/bruno/pull/8406) - fix: Draft icon indicator on Workspace Environment tab by @adwait-bruno in [#8342](https://github.com/usebruno/bruno/pull/8342) - fix(app): move env save-all icon to header actions by @pooja-bruno in [#8449](https://github.com/usebruno/bruno/pull/8449) - fix(import): linting issue in Import fails for gRPC request without URL in exported collection by @sharan-bruno in [#8462](https://github.com/usebruno/bruno/pull/8462) - fix: serialize object variable values before copying to clipboard by @adwait-bruno in [#8362](https://github.com/usebruno/bruno/pull/8362) - fix(import): Import fails for gRPC request without URL in exported collection by @sharan-bruno in [#8367](https://github.com/usebruno/bruno/pull/8367) - fix(lang): filter multipart multi file by @sid-bruno in [#8444](https://github.com/usebruno/bruno/pull/8444) - fix(workspace-watcher): use workspace-environment IPC channels so env file changes hot-reload by @sanish-bruno in [#8370](https://github.com/usebruno/bruno/pull/8370) - fix(openapi): copy cURL icon now respects the theme variables by @adwait-bruno in [#8314](https://github.com/usebruno/bruno/pull/8314) - fix: prevent redundant workspace switch toast by @DeviSriSaiCharan in [#8229](https://github.com/usebruno/bruno/pull/8229) - fix(transient): scope bruno- lookup to transient base, not full path by @chirag-bruno in [#8273](https://github.com/usebruno/bruno/pull/8273) - fix: correctly parse insomnia exported yaml by @prateek-bruno in [#7966](https://github.com/usebruno/bruno/pull/7966) - fix(import): Postman import: OAuth2 tokenPlacement not set correctly, Header Prefix field hidden and value lost by @rajashreehj-bruno in [#8197](https://github.com/usebruno/bruno/pull/8197) - fix(request-parser): preserve literal colon path segments without path param value by @utkarsh-bruno in [#8157](https://github.com/usebruno/bruno/pull/8157) - fix(ui): open response pane at a minimum height on expand by @gopu-bruno in [#8236](https://github.com/usebruno/bruno/pull/8236) - fix: Preserve folder order from seq attribute by @sachin-bruno in [#8213](https://github.com/usebruno/bruno/pull/8213) - fix(sse): sse response body is empty in res.getBody() for app and cli by @sachin-thakur-bruno in [#8212](https://github.com/usebruno/bruno/pull/8212) - fix: open panes at default size on expand from collapsed state by @gopu-bruno in [#8133](https://github.com/usebruno/bruno/pull/8133) - fix(ui): prevent empty header row from persisting state and crashing CLI by @sharan-bruno in [#8167](https://github.com/usebruno/bruno/pull/8167) - fix(cli): use path name for classname in JUnit reports instead of request URL by @sharan-bruno in [#8169](https://github.com/usebruno/bruno/pull/8169) - fix(grpc): gRPC request loses all messages except the first on save for yaml collection by @sharan-bruno in [#8203](https://github.com/usebruno/bruno/pull/8203) - fix(generate-code): generate code URL issues by @shubh-bruno in [#8136](https://github.com/usebruno/bruno/pull/8136) - fix(ui): correct “modified” indicator state across collection, folder, request, and presets/auth tabs (#3386) by @sharan-bruno in [#8027](https://github.com/usebruno/bruno/pull/8027) - fix: show correct New Request shortcut in response placeholder by @gengjiawen in [#8116](https://github.com/usebruno/bruno/pull/8116) - fix(postman-import): OAuth2 Implicit Grant Type Silently Converted to Client Credentials on Import by @rajashreehj-bruno in [#8113](https://github.com/usebruno/bruno/pull/8113) - fix(ui): use primary accent in OpenAPI Sync settings modal by @sundram-bruno in [#8161](https://github.com/usebruno/bruno/pull/8161) - fix: Remove Beta badge from openAPI sync by @sachin-bruno in [#8250](https://github.com/usebruno/bruno/pull/8250) - fix(ui): Version edit modal minor UI fixes by @sachin-bruno in [#8549](https://github.com/usebruno/bruno/pull/8549) - fix(sidebar): remove deleted JS files from the sidebar by @pooja-bruno - fix(mount): build js items as script nodes instead of request nodes by @chirag-bruno - fix: with email open upgrade url by @prateek-bruno - fix: refresh full-git when git-ui is active tab by @prateek-bruno - fix(environments): keep env row's secret flag in sync with active tab by @shubh-bruno - fix(watcher): added a value to the present param on collection addWatcher method by @utkarsh-bruno - fix(mountv2): attach git watcher after collection watcher by @chirag-bruno - fix(environments): remove draft indicator from variable & secret tabs by @pooja-bruno - fix: update tab state structure for environment tabs and enhance tests by @sid-bruno - fix: throttle git calls to an acceptable amount by @sid-bruno - fix(cli): swap persistPaths / bailAbortSignal args in runSingleRequest calls by @sanish-bruno - fix(runner): Remove iteration data from runtime variables by @rajashreehj-bruno - fix: use portal to prevent z-index issues by @prateek-bruno - fix: Added file js as well in the doc generation order by @sachin-bruno - fix(git-provider): cache settings page for revisits by @gopu-bruno - fix(ui): OpenAPI sync "Syncs Used" counter not updating after sync by @sundram-bruno - fix: style responsiveness by @Pragadesh44-Bruno - fix: update lodash version to 4.18.1 across multiple packages by @sid-bruno ### Others - test(sidebar): move sidebar locators to a dedicated file by @pooja-bruno in [#8634](https://github.com/usebruno/bruno/pull/8634) - test(folder): folder no auth test description by @pooja-bruno in [#8560](https://github.com/usebruno/bruno/pull/8560) - test: update openFolderRequest function for tests by @shubh-bruno in [#8506](https://github.com/usebruno/bruno/pull/8506) - test(e2e): update runner to run on self-hosted instances by @sid-bruno in [#8524](https://github.com/usebruno/bruno/pull/8524) - test: flaky bound action tests by @shubh-bruno in [#8071](https://github.com/usebruno/bruno/pull/8071) - test: await the websocket visibility assertion so it actually runs by @voidmatcha in [#8317](https://github.com/usebruno/bruno/pull/8317) - test: fix flaky tests by @bijin-bruno in [#8319](https://github.com/usebruno/bruno/pull/8319) - test: update timeline item locators and improve response status code assertion by @sharan-bruno in [#8202](https://github.com/usebruno/bruno/pull/8202) - test: update locators for save button in presets indicator tests by @sharan-bruno in [#8201](https://github.com/usebruno/bruno/pull/8201) - docs: update guidelines on 'Readability and Abstractions' section by @gopu-bruno in [#8623](https://github.com/usebruno/bruno/pull/8623) - test(tabs): enhance tab migration tests and add restoreTabs functionality by @utkarsh-bruno in [#8609](https://github.com/usebruno/bruno/pull/8609) - refactor: separate app items from requests in sidebar & sorting logic by @naman-bruno in [#8577](https://github.com/usebruno/bruno/pull/8577) - chore(electron): update notarization team ID and add app requirements by @sid-bruno in [#8578](https://github.com/usebruno/bruno/pull/8578) - test(auth): fix modified-indicator inherit spec test by @pooja-bruno in [#8550](https://github.com/usebruno/bruno/pull/8550) - refactor(environments): use tabState.environment.tab for env tabs by @pooja-bruno in [#8528](https://github.com/usebruno/bruno/pull/8528) - style(app): app mode toggle button styling by @naman-bruno in [#8523](https://github.com/usebruno/bruno/pull/8523) - chore: update coding conventions and best practices for this repo by @bijin-bruno in [#8482](https://github.com/usebruno/bruno/pull/8482) - CDN docs url change by @sachin-bruno in [#8466](https://github.com/usebruno/bruno/pull/8466) - chore: update lodash to version 4.18.1 across all packages by @sid-bruno in [#8455](https://github.com/usebruno/bruno/pull/8455) - chore: improve bug report issue template by @rreyn-bruno in [#8369](https://github.com/usebruno/bruno/pull/8369) - ci: use env vars instead of hard coded paths by @sid-bruno in [#8389](https://github.com/usebruno/bruno/pull/8389) - test: workspace import and validation testcase by @mohit-bruno in [#8349](https://github.com/usebruno/bruno/pull/8349) - chore: change app builder to bruno team by @sid-bruno in [#8218](https://github.com/usebruno/bruno/pull/8218) - ci: group the runner to PR by @sid-bruno in [#8343](https://github.com/usebruno/bruno/pull/8343) - test(preferences): set default preferences values by @bijin-bruno in [#8321](https://github.com/usebruno/bruno/pull/8321) - test: fix test and update default retry in local to 0 by @bijin-bruno in [#8316](https://github.com/usebruno/bruno/pull/8316) - test: run playwright e2e fully parallel by @bijin-bruno in [#8313](https://github.com/usebruno/bruno/pull/8313) - add: change log tab by @naman-bruno and @utkarsh-bruno in [#8289](https://github.com/usebruno/bruno/pull/8289) - test(core): current mount pipeline by @chirag-bruno in [#7466](https://github.com/usebruno/bruno/pull/7466) - docs: update README to include Bruno CLI and Docker usage instructions by @abhishek-bruno in [#8184](https://github.com/usebruno/bruno/pull/8184) - chore: remove deps array from playwright test by @pooja-bruno in [#8181](https://github.com/usebruno/bruno/pull/8181) - test: import buildPreferencesLocators from its source module by @lohit-bruno - test: update test for externally added remotes by @sid-bruno - test: make git tests less flaky by @prateek-bruno - test(e2e): fix git-providers tests on local and CI by @Pragadesh44-Bruno - test(cli): use bru.runner.iterationData in bail-iter fixtures by @sanish-bruno - chore: fix typo by @prateek-bruno - switch file-mode sync e2e tests to shared helpers and retrying assertions by @ravindra-bruno - Telemetry tracking for AI and app features by @naman-bruno - import-workspace-limit: unlicensed user is blocked with the by @mohit-bruno - test(cli): cover persistence for iteration-count, bail, and parallel by @sanish-bruno - Added file-mode sync e2e tests to use view-mode toggle after upstream UI sync by @ravindra-bruno - File Format toggle for Bulk collection import by @ravindra-bruno - test: fix data test it for failing tests by @bijin-bruno - perf(runner): virtualize iterations table for high iteration counts by @chirag-bruno ### New contributors * @rajashreehj-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8113 * @gengjiawen made their first contribution in https://github.com/usebruno/bruno/pull/8116 * @sachin-thakur-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8212 * @sachin-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8213 * @bhavik168 made their first contribution in https://github.com/usebruno/bruno/pull/8245 * @ravindra-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8247 * @utkarsh-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8253 * @abhisekm-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8270 * @vijayh-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8278 * @adwait-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8314 * @voidmatcha made their first contribution in https://github.com/usebruno/bruno/pull/8317 * @mohit-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8349 * @BraianS made their first contribution in https://github.com/usebruno/bruno/pull/8375 **Full Changelog:** https://github.com/usebruno/bruno/compare/v3.5.3...v4.0.0