v4.1.0
givanz/VvvebJsv4.1.0Aug 20, 2026by sid-bruno
Upgrading?
AI Summary
This release introduces a Mock Server implementation, rich text documentation editing, and enhanced Git integration. It focuses on security improvements like global client certificates and auth header leak prevention, alongside UX refinements for environments, presets, and AI features.
Key Highlights
- Mock Server implementation for local development
- Rich text documentation editor
- Enhanced Git integration with remote operations and proxy configuration
- Security updates: Global client certificates and auth header leak prevention
- Environment search filter and preset UX improvements
New Features
- Mock Server implementation
- Rich text docs editor
- CLI global env var override
- Global client certs support
- Auth header leak handling
- Environment search filter
- Preset UX updates
- Migration modal enhancements
- YML script execution flow support
- Postman import/export preserve scripts
- Snapshot sidebar state persistence
- CodeMirror search/replace
- SQLite SDK
- Binary body warning
- AI prompt focus
- GCP Secret Manager support
- Git remote/proxy modals
- License reporting
Full Release Notes
# Changelog ### Features - feat: Mock Server implementation by @utkarsh-bruno and @shubh-bruno in [#8734](https://github.com/usebruno/bruno/pull/8734) - feat(docs): Rich text docs editor by @Gopi-bruno in [#8559](https://github.com/usebruno/bruno/pull/8559) - feat(cli): add --global-env-var to override global environment variables at runtime by @abhishekp-bruno in [#8620](https://github.com/usebruno/bruno/pull/8620) - feat(client certs): add global client certs and allow disabling individual client certs. by @morsh-bruno in [#8751](https://github.com/usebruno/bruno/pull/8751) - feat(auth-headers): handling authorization header leaks to third party servers on redirect by @Gopi-bruno in [#8380](https://github.com/usebruno/bruno/pull/8380) - feat(envs): adding search filter to environment selector dropdown by @Gopi-bruno in [#8277](https://github.com/usebruno/bruno/pull/8277) - feat(environment): add default env to presets by @sachin-thakur-bruno in [#8612](https://github.com/usebruno/bruno/pull/8612) - feat: support drag-and-drop and alphabetical sorting for variables by @adwait-bruno in [#8603](https://github.com/usebruno/bruno/pull/8603) - feat: add sorting to the secrets tab as well by @adwait-bruno in [#8871](https://github.com/usebruno/bruno/pull/8871) - feat(collections): open multiple collections from a monorepo by @gopu-bruno in [#8724](https://github.com/usebruno/bruno/pull/8724) - feat(collections): add description text to open collection selection modal by @gopu-bruno in [#8793](https://github.com/usebruno/bruno/pull/8793) - feat(presets): updated presets design by @sachin-thakur-bruno in [#8828](https://github.com/usebruno/bruno/pull/8828) - feat(presets): updated dropdown with menu dropdown and label weight ux changes by @sachin-thakur-bruno in [#8841](https://github.com/usebruno/bruno/pull/8841) - feat(migrate): enhance migration modal to handle collection drafts by @naman-bruno in [#8899](https://github.com/usebruno/bruno/pull/8899) - feat: add migrate-to-YML pill to collection header by @naman-bruno in [#8882](https://github.com/usebruno/bruno/pull/8882) - feat(converters): add support for script execution flow in yml configuration by @naman-bruno in [#8745](https://github.com/usebruno/bruno/pull/8745) - feat: add preserve scripts option for Postman import/export by @gopu-bruno in [#8726](https://github.com/usebruno/bruno/pull/8726) - feat(snapshot): persisting sidebar state in the snapshot by @Gopi-bruno in [#8328](https://github.com/usebruno/bruno/pull/8328) - feat(code-mirror-search): add replace and replace-all with search position, debouncing and tests by @sachin-thakur-bruno in [#8715](https://github.com/usebruno/bruno/pull/8715) - feat(db): sqlite as a re-usable SDK for secondary queries by @chirag-bruno in [#8533](https://github.com/usebruno/bruno/pull/8533) - feat(request): warn when binary body file is missing on disk by @sanish-bruno and @rajashreehj-bruno in [#8753](https://github.com/usebruno/bruno/pull/8753) - feat(size/M): Default to no environments selected in the Generate Documentation modal by @sachin-bruno in [#8785](https://github.com/usebruno/bruno/pull/8785) - feat(ai): add focus for prompt input after AI response completion by @naman-bruno in [#8747](https://github.com/usebruno/bruno/pull/8747) - feat(secrets): add GCP Secret Manager support by @abhishekp-bruno - feat(git): implement Git remote operation modals and enhance branch selection UI by @utkarsh-bruno - feat(proxy): implement Git proxy environment configuration by @utkarsh-bruno - feat(git-providers): apply network config for git provider APIs by @gopu-bruno - feat(app/git): inform the user that edits are being made on protected branches by @sid-bruno - feat(workspace): warning about unsynced collections excluded from Fetch in Bruno embed by @ravindra-bruno - feat(license): report app version, OS, arch and telemetry id on licence calls by @hassan-bruno ### Fixes - fix(auth): stop AWS V4 auth headers from leaking on cross-origin redirects by @Gopi-bruno in [#8893](https://github.com/usebruno/bruno/pull/8893) - fix(secrets): block duplicate secret names to prevent value loss by @pooja-bruno in [#8750](https://github.com/usebruno/bruno/pull/8750) - fix(security): overflow on chip list styling by @naman-bruno in [#8748](https://github.com/usebruno/bruno/pull/8748) - fix(app): global environment variables for apps by @naman-bruno in [#8900](https://github.com/usebruno/bruno/pull/8900) - fix(app): re-add new request shortcut by @sid-bruno in [#8805](https://github.com/usebruno/bruno/pull/8805) - fix(workspace): stopped the same collection from rendering twice with conflicting status by @ravindra-bruno in [#8947](https://github.com/usebruno/bruno/pull/8947) - fix(workspace): showing only the remove option for the failed collection in workspace overview by @ravindra-bruno in [#8932](https://github.com/usebruno/bruno/pull/8932) - fix(workspace): notify about collections that fail to open in Workspa… by @ravindra-bruno in [#8719](https://github.com/usebruno/bruno/pull/8719) - fix(workspaces): switch to default workspace on close so header shows correct name by @ravindra-bruno in [#8425](https://github.com/usebruno/bruno/pull/8425) - fix(editor): fixed search and replace input border by @sachin-thakur-bruno in [#8930](https://github.com/usebruno/bruno/pull/8930) - fix(editor): tab indentation on code blocks by @sachin-thakur-bruno in [#8926](https://github.com/usebruno/bruno/pull/8926) - fix(editor): add guessed language in language dropdown picker by @sachin-thakur-bruno in [#8925](https://github.com/usebruno/bruno/pull/8925) - fix(editor): allow app keybindings if that keybindings is not present in rich text editor by @sachin-thakur-bruno in [#8894](https://github.com/usebruno/bruno/pull/8894) - fix(codemirror-search): keybinding for focusing search and replace inside the search container by @sachin-thakur-bruno in [#8895](https://github.com/usebruno/bruno/pull/8895) - fix(sidebar): prevent drag divider from disappearing on zoom-out by @gopu-bruno in [#8266](https://github.com/usebruno/bruno/pull/8266) - fix: OpenAPI Spec Viewer: throws resolver errors for `$ref` schemas by @arpit-bruno in [#8892](https://github.com/usebruno/bruno/pull/8892) - fix(openapi): strip trailing dots from operation names on import by @adwait-bruno in [#8812](https://github.com/usebruno/bruno/pull/8812) - fix: populate collection & folder docs on OpenAPI/swagger imports by @adwait-bruno in [#8803](https://github.com/usebruno/bruno/pull/8803) - fix(transient-request): unable to create transient request when preset is websocket by @chirag-bruno in [#8889](https://github.com/usebruno/bruno/pull/8889) - fix: cmd+w now works for transient tabs by @adwait-bruno in [#8429](https://github.com/usebruno/bruno/pull/8429) - fix: persist additional request values in preferences general tab save by @morsh-bruno in [#8823](https://github.com/usebruno/bruno/pull/8823) - fix(proxy): update timestamp label format by @abhishekp-bruno in [#8870](https://github.com/usebruno/bruno/pull/8870) - fix(ws): disable message queuing when in intermediate connection states by @sid-bruno in [#8879](https://github.com/usebruno/bruno/pull/8879) - fix(ws): remove auto-reconnect in websockets by @sid-bruno in [#8605](https://github.com/usebruno/bruno/pull/8605) - fix(ws): add height for ws msgs to fix search overlap by @sachin-thakur-bruno in [#8814](https://github.com/usebruno/bruno/pull/8814) - fix(mount): hydrate websocket message uids in the cached mount path by @chirag-bruno in [#8862](https://github.com/usebruno/bruno/pull/8862) - fix: change-version modal ui by @adwait-bruno in [#8735](https://github.com/usebruno/bruno/pull/8735) - fix: keep sort column header from shifting when the arrow appears by @adwait-bruno in [#8833](https://github.com/usebruno/bruno/pull/8833) - fix(generate-code): encode a literal colon in the path when url encoding is enabled by @pooja-bruno in [#8834](https://github.com/usebruno/bruno/pull/8834) - fix(generate-code): generate code for url interpolation by @pooja-bruno in [#7308](https://github.com/usebruno/bruno/pull/7308) - fix(presets): ux fixes for dropdown and icon spacing by @sachin-thakur-bruno in [#8827](https://github.com/usebruno/bruno/pull/8827) - fix: Description missing for the import export yml for the environments by @sachin-bruno in [#8822](https://github.com/usebruno/bruno/pull/8822) - fix: add dynamic font size adjustment for CodeMirror info display by @adwait-bruno in [#8817](https://github.com/usebruno/bruno/pull/8817) - fix(export/import): OpenCollection YAML drops collection and folder-level post-response variables by @sachin-bruno in [#8815](https://github.com/usebruno/bruno/pull/8815) - fix(node-vm): resolve npm modules from additionalContextRoots via native walk-up by @sanish-bruno in [#8538](https://github.com/usebruno/bruno/pull/8538) - fix(curl-import): treat inline --data-binary as body, not file by @pooja-bruno in [#8617](https://github.com/usebruno/bruno/pull/8617) - fix(dev-tools): console and network filter dropdown position to top if no space by @sachin-thakur-bruno in [#8713](https://github.com/usebruno/bruno/pull/8713) - fix(bruno-response): normalize response header name lookup to be case-insensitive by @abhishekp-bruno in [#8461](https://github.com/usebruno/bruno/pull/8461) - fix(runner): collection runner loader issue by @sharan-bruno in [#8783](https://github.com/usebruno/bruno/pull/8783) - fix: avoid network probe in PAC myIpAddress by @cyphercodes in [#8588](https://github.com/usebruno/bruno/pull/8588) - fix: url truncates in docs by @adwait-bruno in [#8468](https://github.com/usebruno/bruno/pull/8468) - fix: env configure remains visible by @adwait-bruno in [#8530](https://github.com/usebruno/bruno/pull/8530) - fix: Folder Sequencing When we try to move any folder at the bottom of the folders list by @ravindra-bruno in [#8722](https://github.com/usebruno/bruno/pull/8722) - fix(environment): auto save on env table removing some characters by @sachin-thakur-bruno in [#8732](https://github.com/usebruno/bruno/pull/8732) - fix(timeout): allow inherit request timeout for yaml requests by @shubh-bruno in [#8746](https://github.com/usebruno/bruno/pull/8746) - fix: binary body lost on importing from postman by @sanish-bruno and @rajashreehj-bruno in [#8729](https://github.com/usebruno/bruno/pull/8729) - fix(converters): add missing auth mappings on postman export, add additional parameters mapping on postman import by @morsh-bruno in [#8494](https://github.com/usebruno/bruno/pull/8494) - fix: failing test case fix by @utkarsh-bruno in [#8801](https://github.com/usebruno/bruno/pull/8801) - fix(git): fixing pac proxy and removing buildGitProxyEnv as the secondary proxy implementation by @utkarsh-bruno - fix(git): use primary color for create branch cta by @gopu-bruno - fix(git): update onClose to use handleBackToOverview by @naman-bruno - fix(proxy-util): enhance proxy environment configuration by @utkarsh-bruno - fix(GitHub): deduplicate instance URL save on OnBlur/Enter by @gopu-bruno - fix(GitHub): prevent redundant URL saves in GitHub configuration by @naman-bruno - fix: added Git submodule initialization and fetch for workspace collections by @ravindra-bruno - fix(workspace): written .gitmodules for git-synced collections so submodules resolve by @ravindra-bruno - fix(Embed): showing warning before sharing a workspace with unsynced changes by @ravindra-bruno - fix(doc-url): replaced Fetch In Bruno doc url for workspace embeding by @ravindra-bruno - fix(watcher): improve unlink logic to handle both formats by @naman-bruno - fix(external-secrets): correct external secret variables autocomplete duplicates and its variable-info scope by @lohit-bruno - fix: added a min and max height with an overflow to avoid the resizing based on the remotes fetched by @utkarsh-bruno - fix(openapi): export scheme-less request URLs as server entries by @adwait-bruno - fix(export): Postman export modal rendering in Share Collection by @gopu-bruno - fix(default-env): load env from file destructing by @sachin-thakur-bruno - fix(runner): Collection Runner - Loader still keeps running even after Cancelling the execution by @sharan-bruno - fix(UI): In Runner post execution "Run again" button is missing by @sharan-bruno - fix(collection-runner): disable runner in iterations count by @shubh-bruno ### Others - feat(tests): enhance Playwright configuration for sharded CI runs by @sid-bruno in [#8742](https://github.com/usebruno/bruno/pull/8742) - security(ipc): confine file-write handlers to known collections and api specs by @chirag-bruno in [#8274](https://github.com/usebruno/bruno/pull/8274) credits to @IamLeandrooooo for passing this on - refactor(ai): moved AI Assist from floating overlay into request pane and collection/folder settings tab bars by @ravindra-bruno in [#8693](https://github.com/usebruno/bruno/pull/8693) - refactor(ai): update API key handling in openai comp providers by @naman-bruno in [#8749](https://github.com/usebruno/bruno/pull/8749) - refactor(tests): update data type assertions to use data-selected-type attribute for consistency by @bijin-bruno in [#8731](https://github.com/usebruno/bruno/pull/8731) - yml migration rework by @naman-bruno in [#8795](https://github.com/usebruno/bruno/pull/8795) - reported how many collections failed to open on workspace load by @ravindra-bruno in [#8831](https://github.com/usebruno/bruno/pull/8831) - Added the ignore for the collection nested folders by @ravindra-bruno in [#8725](https://github.com/usebruno/bruno/pull/8725) - Added the fix for bru.runner.stopExecution() while running collection run from tests by @ravindra-bruno in [#8720](https://github.com/usebruno/bruno/pull/8720) - ci: move all linux to self hosted by @sid-bruno in [#8791](https://github.com/usebruno/bruno/pull/8791) - ci(tests-macos): disable mac runners on each PR by @sid-bruno in [#8752](https://github.com/usebruno/bruno/pull/8752) - test: fix the draft indicator tests for collection client certs by @morsh-bruno in [#8824](https://github.com/usebruno/bruno/pull/8824) - test(converters): add round trip tests for Postman <-> Bruno converters by @morsh-bruno in [#8534](https://github.com/usebruno/bruno/pull/8534) - chore: enhance claude rules & skills by @bijin-bruno in [#8829](https://github.com/usebruno/bruno/pull/8829) - chore(design-system): added segmented control component with storybook by @sachin-thakur-bruno in [#8683](https://github.com/usebruno/bruno/pull/8683) - chore: PR checklist update by @sachin-thakur-bruno in [#8806](https://github.com/usebruno/bruno/pull/8806) - chore(eslint): disable autofix for const by @sachin-thakur-bruno in [#8760](https://github.com/usebruno/bruno/pull/8760) - chore(eslint): adds eslint config warnings for unused-vars, debuggers, duplicate-imports by @sachin-thakur-bruno in [#8505](https://github.com/usebruno/bruno/pull/8505) - chore(pr-decription): updated pr description by @sachin-thakur-bruno in [#8786](https://github.com/usebruno/bruno/pull/8786) - chore(coderabbit): adds coderabbit instructions for adding new file as ts/tsx in bruno app by @sachin-thakur-bruno in [#8717](https://github.com/usebruno/bruno/pull/8717) - fix(tests): jest mock for css imports and change paste timer by @sid-bruno in [#8858](https://github.com/usebruno/bruno/pull/8858) - fix(e2e): Playwright failures from mock server and lazy mount by @sid-bruno in [#8835](https://github.com/usebruno/bruno/pull/8835) - added the validations check and added the ux for this by @ravindra-bruno - 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 - feat(telemetry): add trial flow events with classified failure reasons and trial-window boundaries for session_activity by @ankit-bruno - fix(tests): pass tmpDir to CLI run commands in integration tests by @sanish-bruno - fix(test): postman to bruno test assertion by @sachin-thakur-bruno - fix(RunnerResults): add data-testid attribute to cancel button by @sanish-bruno ### New contributors * @morsh-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8494 * @cyphercodes made their first contribution in https://github.com/usebruno/bruno/pull/8588 * @Gopi-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8328 * @arpit-bruno made their first contribution in https://github.com/usebruno/bruno/pull/8892 **Full Changelog:** https://github.com/usebruno/bruno/compare/v4.0.0...v4.1.0
Related Repositories
affaan-m/ECC★ 285,939
The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.
react/react★ 251,629
The library for web and native user interfaces.
nodejs/node★ 122,529
Node.js JavaScript runtime ✨🐢🚀✨
Leonxlnx/taste-skill★ 100,746
Agent skills that give coding agents taste: art direction, reference images and a browser check instead of generic AI pages
louislam/uptime-kuma★ 92,731
A fancy self-hosted monitoring tool