Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
506 commits
Select commit Hold shift + click to select a range
1992f9e
fix(ws): keep body-mode dropdown above collapsed sticky headers (#8622)
pooja-bruno Jul 15, 2026
f436300
fix(app): point generated docs to api-docs CDN path (#8633)
sundram-bruno Jul 15, 2026
3dff751
test(sidebar): move sidebar locators to a dedicated file (#8634)
pooja-bruno Jul 15, 2026
52d22d6
fix(ai): align AI buttons to primary color and refine copy (#8627)
gopu-bruno Jul 15, 2026
4b48264
Merge branch 'main' into fix/curl-import-data-binary-inline-body
pooja-bruno Jul 16, 2026
814e4a1
improve: test file arrangement
pooja-bruno Jul 16, 2026
2a74115
fix(new-app): prevented validation error on blur and dialog layout sh…
ravindra-bruno Jul 16, 2026
5a49a08
add: unit test
pooja-bruno Jul 16, 2026
0d59235
Merge branch 'main' into fix/curl-import-data-binary-inline-body
pooja-bruno Jul 16, 2026
ddf3f85
feat(proxy-settings): show "last refreshed" timestamp on System Proxy…
abhishekp-bruno Jul 16, 2026
6d3ca5d
refactor: improve Wysiwyg editor toolbar interactions, add delete tab…
Gopi-bruno Jul 16, 2026
4308cbb
refactor: update documentation code block background theme colors
Gopi-bruno Jul 16, 2026
23ad926
reconciled autocomplete suggestions against typed prefix to stop dupe…
ravindra-bruno Jul 16, 2026
e3568ad
fix(ws): keep selection on current message when deleting another (#8643)
pooja-bruno Jul 16, 2026
b3b6493
Generate documentation modal text and style changes (#8644)
sachin-bruno Jul 16, 2026
ab8e95d
fix(ui): visual improvements for tables in FileBody and EnvironmentVa…
sid-bruno Jul 16, 2026
227138b
chore(claude): add .claude config into the repo (#8648)
bijin-bruno Jul 16, 2026
1c32bfe
fix(app): resolve collection level variables in bru.ctx and add app l…
gopu-bruno Jul 17, 2026
b4eafb1
refactor(app): integrate Portal component and enhance form submission…
naman-bruno Jul 17, 2026
7ef252f
chore(mount): route request entries through buildRequestNode in build…
chirag-bruno Jul 17, 2026
3875dd6
Update CODEOWNERS (#8666)
sid-bruno Jul 20, 2026
191df35
refactor: replace DocsLinkModal with contextual DocsLinkPopover and u…
Gopi-bruno Jul 20, 2026
7518aad
test(environments): env tab eye icon (#8655)
shubh-bruno Jul 20, 2026
c2db42b
Merge branch 'main' into feat/wysiwyg-docs-editor-v2
Gopi-bruno Jul 20, 2026
29cded8
fix(interpolation): add interpolation for akamai-auth (#8631)
shubh-bruno Jul 20, 2026
cdea85f
fix: show correct New Request shortcut in response placeholder (#8116)
gengjiawen Jul 20, 2026
4650540
refactor: redesign documentation editor table styles, update mode swi…
Gopi-bruno Jul 20, 2026
4e26266
fix(ai): respected the redact-secret-variables toggle for name-patter…
ravindra-bruno Jul 20, 2026
af92b9b
fix(app): chevron positioning and selector width (#8669)
sid-bruno Jul 20, 2026
716eec3
refactor: extract richtext editor test utility and modularize test su…
Gopi-bruno Jul 20, 2026
f106ac2
fix(ai): improve script types and clarify res restrictions in pre scr…
naman-bruno Jul 20, 2026
552b2ef
Update beta features section in preferences (#8642)
anusree-bruno Jul 20, 2026
ba4828f
Refine bug report issue template UI
Rohan-Bruno Jul 20, 2026
a7a809c
Rename config.yaml to config.yml
Rohan-Bruno Jul 20, 2026
183d3bb
Update FeatureRequest.yaml
Rohan-Bruno Jul 20, 2026
e1b574e
chore(ui-component)/added radio group component with storybook and up…
sachin-thakur-bruno Jul 20, 2026
9024251
added storybook docs
sachin-thakur-bruno Jul 20, 2026
194efc7
added tests for radio group
sachin-thakur-bruno Jul 20, 2026
ef19c69
fix(environments): keep secret values on the secret row when a variab…
pooja-bruno Jul 20, 2026
68105da
fix(mount): redact large text blocks so big .bru files parse fast (#8…
chirag-bruno Jul 20, 2026
4c4966e
added stories for ui components
sachin-thakur-bruno Jul 20, 2026
631116c
feat(mount): follow symlinks when walking collections (#8649)
chirag-bruno Jul 20, 2026
54cd4ef
removed preset component
sachin-thakur-bruno Jul 20, 2026
6c1f0cf
fix(size/S):Minor bug fix in the version edit popup for the new versi…
sachin-bruno Jul 20, 2026
b4e3ad8
added segment group component with stories and tests
sachin-thakur-bruno Jul 21, 2026
729a9e2
revert presets to not use segment group
sachin-thakur-bruno Jul 21, 2026
775318f
added theme selector
sachin-thakur-bruno Jul 21, 2026
3c48b03
added readme for storybook
sachin-thakur-bruno Jul 21, 2026
8ed8b1b
feat(ai): implement immediate security settings save (#8685)
naman-bruno Jul 21, 2026
378d18e
refactor: migrate editor components to RichTextEditor, and adjust Mod…
Gopi-bruno Jul 21, 2026
fa7b41e
refactor: rename Docs-prefixed editor extensions to Editor
Gopi-bruno Jul 21, 2026
832a77d
refactor: rename Wysiwyg references to Rich Text
Gopi-bruno Jul 21, 2026
beadf31
enabled code in storybook and updated Radio and Segmented control API…
sachin-thakur-bruno Jul 21, 2026
c6662ec
refactor: remove code-block test file
Gopi-bruno Jul 21, 2026
0b0eedf
removed box shadow
sachin-thakur-bruno Jul 21, 2026
5cee700
refactor: rename docs CSS classes to editor prefix for consistency
Gopi-bruno Jul 21, 2026
ef8992d
fix(snapshot): environment loss of some workspaces (#8686)
sid-bruno Jul 21, 2026
ffff86a
added a box shadow on active item
sachin-thakur-bruno Jul 21, 2026
f0ac58a
updated shadow to lighter version
sachin-thakur-bruno Jul 21, 2026
175c1b7
improved readme file
sachin-thakur-bruno Jul 21, 2026
eb78de2
added test and stories for toggle switch
sachin-thakur-bruno Jul 21, 2026
54d9513
added post css loader so Storybook can compile the app's Tailwind CSS
sachin-thakur-bruno Jul 21, 2026
c4c2a79
added dropdown stories and test
sachin-thakur-bruno Jul 21, 2026
b9119dd
Merge pull request #8684 from Rohan-Bruno/Rohan-Bruno-improve-issue-t…
rreyn-bruno Jul 21, 2026
bd801e7
feat(ai): enhance app handling in AiChatSidebar (#8697)
naman-bruno Jul 21, 2026
6ef7f4f
fix: size of cancel button (#8692)
shubh-bruno Jul 21, 2026
3ca1a9e
task (migration) : hiding migration options and the respective test (…
utkarsh-bruno Jul 21, 2026
9040397
fix(ui): SensitiveFieldWarning tooltip position (#8698)
shubh-bruno Jul 21, 2026
8a10f26
feat(ai): add request handling to ai chatbar (#8700)
naman-bruno Jul 21, 2026
c068afb
Added changelog for v4 (#8677)
anusree-bruno Jul 21, 2026
fb62f1f
fix(keybindings): new request in active tab based on active collectio…
shubh-bruno Jul 21, 2026
bf40778
Added beta flag for AI (#8706)
anusree-bruno Jul 21, 2026
eaf62ee
chore(coderabbit)/adds coderabbit instructions for adding new file as…
sachin-thakur-bruno Jul 22, 2026
6de25f7
fix(devtools): prevent console panel from bleeding over modals (#8716)
gopu-bruno Jul 22, 2026
948a34a
feat(web-buidler): remote artifact builder plugin (#8718)
sid-bruno Jul 22, 2026
9e9f8a9
fix(settings): Enable App toggle for GQL requests (#8723)
naman-bruno Jul 22, 2026
59dfa97
fix(converters): add missing auth mappings on postman export, add add…
morsh-bruno Jul 22, 2026
c8bbe00
added stories and tests for Help component
sachin-thakur-bruno Jul 22, 2026
493aea8
fix(mountv2): give duplicate-named env variables distinct uids (#8730)
chirag-bruno Jul 22, 2026
100571b
refactor(tests): update data type assertions to use data-selected-typ…
bijin-bruno Jul 22, 2026
c37d649
added stories and tests for accordian
sachin-thakur-bruno Jul 22, 2026
4f02e61
fix(secrets): environment table (#8733)
shubh-bruno Jul 22, 2026
6bac369
added introduction md file
sachin-thakur-bruno Jul 23, 2026
ff8e988
test(converters): add round trip tests for Postman <-> Bruno converte…
morsh-bruno Jul 23, 2026
a8a7c91
added outlined version for segmented control
sachin-thakur-bruno Jul 23, 2026
92fdbf0
updated icons
sachin-thakur-bruno Jul 23, 2026
d2298f7
Merge remote-tracking branch 'upstream/main' into chore/radio-group-s…
sachin-thakur-bruno Jul 23, 2026
d69a500
removed dropdown
sachin-thakur-bruno Jul 23, 2026
00d0750
chore(eslint): adds eslint config warnings for unused-vars, debuggers…
sachin-thakur-bruno Jul 23, 2026
d57f859
feat(tests): enhance Playwright configuration for sharded CI runs (#8…
sid-bruno Jul 23, 2026
14660fc
refactor(ui): extract richtext editor utilities to utils folder
Gopi-bruno Jul 23, 2026
0c2aa81
refactor(ui): move useLinkHandlers to utils folder
Gopi-bruno Jul 23, 2026
c4f96b9
refactor(ui): extract richtext editor components to components folder
Gopi-bruno Jul 23, 2026
08a2d86
refactor(ui): refactor RichTextEditor toolbar state into custom hooks
Gopi-bruno Jul 23, 2026
9b5ea6e
test(e2e): fix richtext editor locators and handle new button components
Gopi-bruno Jul 23, 2026
6f1170b
fix(tests-macos): update branch filters for workflow triggers to supp…
sid-bruno Jul 23, 2026
fc4bec0
fix: encode url for url without protocol (#8756)
shubh-bruno Jul 23, 2026
a723cd5
fix(cookies): toggle raw mode state in ModifyCookieModal (#8755)
naman-bruno Jul 23, 2026
3acd311
refactor: reorganize RichTextEditor hooks
Gopi-bruno Jul 24, 2026
88f8e23
feat(ai): add focus for prompt input after AI response completion (#8…
naman-bruno Jul 24, 2026
12516c1
fix(security): overflow on chip list styling (#8748)
naman-bruno Jul 24, 2026
8496be1
feat(converters): add support for script execution flow in yml config…
naman-bruno Jul 24, 2026
0541098
chore: remove accidentally added non-bruno-app files
Gopi-bruno Jul 24, 2026
3c5b568
feat(collections): open multiple collections from a monorepo (#8724)
gopu-bruno Jul 24, 2026
1c49123
fix(workspaces): switch to default workspace on close so header shows…
ravindra-bruno Jul 24, 2026
c70c5fe
refactor(ai): update API key handling in openai comp providers (#8749)
naman-bruno Jul 24, 2026
b4b4841
refactor: simplify rich text editor link management with unified Tool…
Gopi-bruno Jul 24, 2026
e1816a7
Merge branch 'main' into chore/radio-group-storybook
sachin-thakur-bruno Jul 27, 2026
384889a
chore(pr-decription)/updated pr description (#8786)
sachin-thakur-bruno Jul 27, 2026
bddb3e7
Merge remote-tracking branch 'upstream/main' into chore/radio-group-s…
sachin-thakur-bruno Jul 27, 2026
ac793ba
removed unused stories
sachin-thakur-bruno Jul 27, 2026
0efc5b2
removed radio group
sachin-thakur-bruno Jul 27, 2026
190bdec
chore(eslint)/disable autofix for const (#8760)
sachin-thakur-bruno Jul 27, 2026
57b77e6
updated segment control design
sachin-thakur-bruno Jul 27, 2026
37c34ef
Merge branch 'chore/radio-group-storybook' of github.com:sachin-thaku…
sachin-thakur-bruno Jul 27, 2026
63554ac
fix: decouple task lists from mixed-content lists and improve markdow…
Gopi-bruno Jul 27, 2026
9c06eb7
Fix: binary body lost on importing from postman (#8729)
sanish-bruno Jul 27, 2026
229d1bd
style: update documentation edit toggle button size to sm
Gopi-bruno Jul 27, 2026
ffd3f78
updated outlined styles
sachin-thakur-bruno Jul 27, 2026
864db57
style: update inline code and block styling with transparent backgrou…
Gopi-bruno Jul 27, 2026
1b8d134
fix(timeout): allow inherit request timeout for yaml requests (#8746)
shubh-bruno Jul 27, 2026
39031b5
style: update code and block border radius to use base theme radius
Gopi-bruno Jul 27, 2026
3dcdbbe
fix(environment): auto save on env table removing some characters (#8…
sachin-thakur-bruno Jul 28, 2026
f3d991a
feat(code-mirror-search): add replace and replace-all with search pos…
sachin-thakur-bruno Jul 28, 2026
d6e4907
feat(environment): add default env to presets (#8612)
sachin-thakur-bruno Jul 28, 2026
85faf8c
fix: Folder Sequencing When we try to move any folder at the bottom o…
ravindra-bruno Jul 28, 2026
2ed213a
Merge branch 'main' into fix/curl-import-data-binary-inline-body
pooja-bruno Jul 28, 2026
f8a28dd
Added the fix for bru.runner.stopExecution() while running collection…
ravindra-bruno Jul 28, 2026
305b6cd
fix
pooja-bruno Jul 28, 2026
f9051fc
feat(collections): add description text to open collection selection …
gopu-bruno Jul 28, 2026
b4ffa6c
Merge branch 'main' into fix/curl-import-data-binary-inline-body
sachin-thakur-bruno Jul 28, 2026
8d18664
Merge branch 'main' into chore/radio-group-storybook
sachin-thakur-bruno Jul 28, 2026
ea60a77
fix(ws): remove auto-reconnect in websockets (#8605)
sid-bruno Jul 28, 2026
ebd64e4
feat: add preserve scripts option for Postman import/export (#8726)
gopu-bruno Jul 28, 2026
9a9551b
Added the ignore for the collection nested folders (#8725)
ravindra-bruno Jul 28, 2026
216958a
fix:env configure remains visible (#8530)
adwait-bruno Jul 28, 2026
7552e57
fix:url truncates in docs (#8468)
adwait-bruno Jul 28, 2026
ba9d758
Keep the default selected as none in the environments (#8785)
sachin-bruno Jul 28, 2026
2a60fee
feat(request): warn when binary body file is missing on disk (#8753)
sanish-bruno Jul 28, 2026
84199ce
updated test ids
sachin-thakur-bruno Jul 28, 2026
3df4129
Merge branch 'chore/radio-group-storybook' of github.com:sachin-thaku…
sachin-thakur-bruno Jul 28, 2026
4ee230e
added dev tag so stories shows in docs only
sachin-thakur-bruno Jul 28, 2026
53559ea
added disabled
sachin-thakur-bruno Jul 28, 2026
df91de9
fix: failing test case fix (#8801)
utkarsh-bruno Jul 28, 2026
9a2e504
feat(db): sqlite as a re-usable SDK for secondary queries (#8533)
chirag-bruno Jul 29, 2026
e9ee1c8
chore: PR checklist update (#8806)
sachin-thakur-bruno Jul 29, 2026
ab0c8f8
Merge branch 'main' into chore/radio-group-storybook
sachin-thakur-bruno Jul 29, 2026
59f62db
fix: avoid network probe in PAC myIpAddress (#8588)
cyphercodes Jul 29, 2026
7213200
Merge branch 'main' into fix/curl-import-data-binary-inline-body
pooja-bruno Jul 29, 2026
a59bc3e
fix
pooja-bruno Jul 29, 2026
85ac90a
Fix/collection runner loader issue (#8783)
sharan-bruno Jul 29, 2026
dcb4115
Merge branch 'main' into fix/curl-import-data-binary-inline-body
pooja-bruno Jul 29, 2026
416eade
updated bg of segment control
sachin-thakur-bruno Jul 29, 2026
86fb388
Merge branch 'chore/radio-group-storybook' of github.com:sachin-thaku…
sachin-thakur-bruno Jul 29, 2026
e3e14e6
Merge remote-tracking branch 'upstream/main' into chore/radio-group-s…
sachin-thakur-bruno Jul 29, 2026
2873292
added disabled color
sachin-thakur-bruno Jul 29, 2026
097118e
fix(bruno-response): normalize response header name lookup to be case…
abhishekp-bruno Jul 29, 2026
32a9114
fix(dev-tools): console and network filter dropdown position to top i…
sachin-thakur-bruno Jul 29, 2026
2f550fe
fix(ws-replace)/add height for ws msgs to fix search overlap
sachin-thakur-bruno Jul 29, 2026
97efc86
Merge pull request #8617 from pooja-bruno/fix/curl-import-data-binary…
sachin-thakur-bruno Jul 29, 2026
6ecf393
fixed the accordion's isSearchOpen goes stale on collapse
sachin-thakur-bruno Jul 29, 2026
d421964
fix(workspace): notify about collections that fail to open in Workspa…
ravindra-bruno Jul 29, 2026
a76b3f6
feat(snapshot):persisting sidebar state in the snapshot (#8328)
Gopi-bruno Jul 29, 2026
0ec03f9
chore: new folder shortcut (#8805)
sid-bruno Jul 29, 2026
8235073
refactor(ai): moved AI Assist from floating overlay into request pane…
ravindra-bruno Jul 29, 2026
7a75119
feat(auth-headers):handling authorization header leaks to third party…
Gopi-bruno Jul 29, 2026
d8be756
updated discable dtext opacity
sachin-thakur-bruno Jul 29, 2026
7be4a66
fix(node-vm): resolve npm modules from additionalContextRoots via nat…
sanish-bruno Jul 29, 2026
7c9b5c0
feat(cli): add --global-env-var to override global environment variab…
abhishekp-bruno Jul 29, 2026
5458203
Merge pull request #8814 from sachin-thakur-bruno/fix/search-replace-…
sachin-thakur-bruno Jul 29, 2026
5333e2c
feat: add markdown mode to documentation editor and upgrade rich text…
Gopi-bruno Jul 29, 2026
24ecfd3
Fix: added actions for post reposne vars in yml (#8815)
sachin-bruno Jul 29, 2026
7b3316d
Merge pull request #8683 from sachin-thakur-bruno/chore/radio-group-s…
sachin-thakur-bruno Jul 29, 2026
983d7a8
feat: introduce DocsEditor component and useDocsEditingState hook to …
Gopi-bruno Jul 29, 2026
3d21155
Merge branch 'main' into feat/wysiwyg-docs-editor-v2
Gopi-bruno Jul 29, 2026
3ae834f
fix: add dynamic font size adjustment for CodeMirror info display (#8…
adwait-bruno Jul 29, 2026
a3c7f4f
test: implement comprehensive E2E test suite and resolve rich text ed…
Gopi-bruno Jul 29, 2026
7daf519
feat(envs): adding search filter to environment selector dropdown (#8…
Gopi-bruno Jul 29, 2026
583bb4d
feat(client certs): add global client certs and allow disabling indiv…
morsh-bruno Jul 30, 2026
32ed871
feat(presets)/updated the requests to use segmented control (#8816)
sachin-thakur-bruno Jul 30, 2026
e74ee9b
yml migration rework (#8795)
naman-bruno Jul 30, 2026
993ba7e
feat: extend markdown linkify support for relative assets in rich tex…
Gopi-bruno Jul 30, 2026
987b6da
feat: add color-scheme support for task list items in editor styles
Gopi-bruno Jul 30, 2026
4ca2f19
refactor: updating file/folder structure for docs editor files
Gopi-bruno Jul 30, 2026
e572d2f
refactor: encapsulate DocsAction styling in a new StyledWrapper compo…
Gopi-bruno Jul 30, 2026
5a9a45c
refactor: update richtext editor tests to import utilities from actio…
Gopi-bruno Jul 30, 2026
aae25fd
fix:cmd+w now works for transient tabs (#8429)
adwait-bruno Jul 30, 2026
f4b1d35
Fix: Description missing for the import export yml for the environmen…
sachin-bruno Jul 30, 2026
c6c7b7f
security(ipc): confine renderer file writes to known collections (#8274)
chirag-bruno Jul 30, 2026
7cff8d7
fix(openapi):strip trailing dots from operation names on import (#8812)
adwait-bruno Jul 30, 2026
660a53a
feat(rich-text-editor)/scroll persist
sachin-thakur-bruno Jul 30, 2026
24c464c
fix:populate collection & folder docs on OpenAPI/swagger imports (#8803)
adwait-bruno Jul 30, 2026
af93f18
fix(generate-code): generate code for url interpolation (#7308)
pooja-bruno Jul 30, 2026
3be79ff
fix(presets)/ux fixes for dropdown and icon spacing (#8827)
sachin-thakur-bruno Jul 30, 2026
8644efe
fix(secrets): block duplicate secret names to prevent value loss (#8750)
pooja-bruno Jul 30, 2026
60ea587
refactor: migrate documentation edit toggle to use test ID instead of…
Gopi-bruno Jul 30, 2026
44d74d1
refactor: migrate collection and folder documentation edit toggle to …
Gopi-bruno Jul 30, 2026
2fddb57
chore: enhance claude rules & skills
bijin-bruno Jul 30, 2026
97c9413
feat: support drag-and-drop and alphabetical sorting for variables (#…
adwait-bruno Jul 30, 2026
7b32a3c
Merge pull request #8829 from usebruno/feat/update-claude-rules
sachin-thakur-bruno Jul 30, 2026
d90c600
test: update doc toggle locators to use test-ids
Gopi-bruno Jul 30, 2026
ebb40f0
Mock Server Implementation (#8734)
utkarsh-bruno Jul 30, 2026
d7adda4
Merge pull request #8559 from Gopi-bruno/feat/wysiwyg-docs-editor-v2
sachin-thakur-bruno Jul 30, 2026
b48b613
reported how many collections failed to open on workspace load (#8831)
ravindra-bruno Jul 30, 2026
a9bb3a2
test: fix the draft indicator tests for collection client certs (#8824)
morsh-bruno Jul 31, 2026
1610aeb
fix(generate-code): encode a literal colon in the path when the toggl…
pooja-bruno Jul 31, 2026
616f10b
fix(e2e): Playwright failures from mock server and lazy mount (#8835)
sid-bruno Jul 31, 2026
2b2512e
feat(presets)/updated presets design (#8828)
sachin-thakur-bruno Jul 31, 2026
65c268f
ci: move all linux to self hosted (#8791)
sid-bruno Aug 3, 2026
2b439dd
feat(docs): syntax highlighting for code blocks in rich text docs (#8…
Gopi-bruno Aug 3, 2026
384f326
feat(presets)/updated dropdown with menu dropdown and label weight ux…
sachin-thakur-bruno Aug 3, 2026
51d609a
feat(tests): enhance CodeEditor and EditorCodeBlock tests with additi…
sid-bruno Aug 3, 2026
6090912
fix:sorting now works for secrets tab (#8871)
adwait-bruno Aug 4, 2026
3547145
fix(mount): hydrate websocket message uids in the cached mount path (…
chirag-bruno Aug 4, 2026
22032ba
fix:keep sort column header from shifting when the arrow appears (#8833)
adwait-bruno Aug 4, 2026
2d5a2f4
fix:change-version modal ui (#8735)
adwait-bruno Aug 4, 2026
4b31a25
feat: add migrate-to-YML pill to collection header (#8882)
naman-bruno Aug 5, 2026
9daddd0
fix(mock-server): bring the UI in line with the rest of Bruno (#8880)
naman-bruno Aug 5, 2026
a473e7d
fix(ws): disable message queuing when in intermediate connection stat…
sid-bruno Aug 5, 2026
52d315d
fix(proxy): update timestamp label format (#8870)
abhishekp-bruno Aug 5, 2026
1c2ec7c
fix: persist additional request values in preferences general tab sav…
morsh-bruno Aug 6, 2026
9d70e0b
fix (transient-request): unable to create transient request when pres…
chirag-bruno Aug 6, 2026
7c3c4ff
fixes: OpenAPI Spec Viewer: throws resolver errors for `$ref` schemas…
arpit-bruno Aug 7, 2026
7b14eed
fix(app): global environment variables for apps (#8900)
naman-bruno Aug 7, 2026
3cfd287
feat(mock-server): enhance MockResponseRequestPane with method select…
utkarsh-bruno Aug 7, 2026
b18ec65
fix(auth): stop AWS V4 auth headers from leaking on cross-origin redi…
Gopi-bruno Aug 7, 2026
a5b27e0
fix(editor): allow app keybindings if that keybindings is not present…
sachin-thakur-bruno Aug 7, 2026
3bae088
fix(mock-server): improve mock response name validation (#8908)
naman-bruno Aug 9, 2026
1d0fbb3
feat(migrate): enhance migration modal to handle collection drafts (#…
naman-bruno Aug 9, 2026
b287347
fix(codemirror-search)/keybinding for focusing search and replace ins…
sachin-thakur-bruno Aug 10, 2026
1c32e48
fix(sidebar): prevent drag divider from disappearing on zoom-out (#8266)
gopu-bruno Aug 10, 2026
d55eef9
refactor: remove AI documentation assistant and related context paylo…
Gopi-bruno Aug 10, 2026
5e528fa
fix(editor)/add guessed language in language dropdown picket (#8925)
sachin-thakur-bruno Aug 10, 2026
23aa48d
fix(editor): tab indentation on code blocks (#8926)
sachin-thakur-bruno Aug 10, 2026
0589460
chore: merge upstream usebruno/bruno main into RestWolf
AustralianRaven Aug 11, 2026
bebc70d
fix(git): use removePath for failed-clone cleanup
AustralianRaven Aug 11, 2026
45cab90
chore: restore upstream code the fork had stripped
AustralianRaven Aug 11, 2026
25d9536
chore: restore remaining upstream code stripped by the fork
AustralianRaven Aug 11, 2026
2bfc8b3
feat(git): add Git UI tab and branch chip
AustralianRaven Aug 11, 2026
7b574a4
fix(theme): move accent colour into the Appearance dropdown
AustralianRaven Aug 11, 2026
decbb82
fix(theme): keep the accent picker inside the Appearance menu
AustralianRaven Aug 11, 2026
fc1e720
chore: remove screenshot committed by mistake
AustralianRaven Aug 11, 2026
ad32f62
fix(git): pass remote and branch to push and pull
AustralianRaven Aug 11, 2026
96e5278
feat(git): sync button and visible feedback for git operations
AustralianRaven Aug 11, 2026
6e34c72
feat(secrets): secret managers with ordered vault tiers
AustralianRaven Aug 18, 2026
5242ca9
fix(secrets): make the vault panel reachable in global environments
AustralianRaven Aug 18, 2026
0345f08
feat(secrets): pin each vault secret to a provider
AustralianRaven Aug 18, 2026
c6d11a6
style(secrets): fix operator indentation in the resolver
AustralianRaven Aug 18, 2026
11fd412
feat(secrets): clear all vault secrets from an environment
AustralianRaven Aug 18, 2026
8d10220
chore(release): bump RestWolf to 4.0.0
AustralianRaven Aug 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .claude/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
settings.local.json
scheduled_tasks.lock
*.lock
77 changes: 77 additions & 0 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# Project Guide

Bruno fork — open-source API client (Electron + React + Redux).

Bruno is an API **client**, not a server: it sends requests and handles responses (auth, params, headers, bodies, environments, cookies). Judge every behavior and edge case by "what should a *client* do here?" — surface malformed or hostile responses clearly and stay robust; don't enforce server-side correctness.

## Quick Commands

```bash
npm run dev # Run electron + react concurrently
npm run dev:watch # Same, with hot-reload of the electron main process
npm run storybook # Component dev (bruno-app)
npm run lint:fix # ESLint fix
npm test --workspaces # Unit tests (Jest) across all packages
```

Full script list: root `package.json`. Setup: `nvm use && npm i --legacy-peer-deps && npm run setup` (Node **v22.12.0**, see `.nvmrc`).

### Running a single test

```bash
# Single unit test (Jest) — scope to the workspace, pass a path/pattern after --
npm test --workspace=packages/bruno-app -- path/to/file.spec.js
npm test --workspace=packages/bruno-requests -- -t "test name pattern"

# Single e2e test (Playwright) — a project flag is REQUIRED (config has no default)
npx playwright test tests/collection/create-collection.spec.ts --project=default
npx playwright test --project=default -g "test name pattern"
```

Prefer the smallest scope — one workspace, one spec — over `--workspaces` or the full e2e run.

### Building shared packages

`npm run dev` does **not** rebuild the shared packages (bruno-common, bruno-requests,
bruno-filestore, bruno-converters, bruno-query, bruno-schema-types, bruno-graphql-docs).
After editing one, rebuild it or run its watcher, or the app won't pick up changes:

```bash
npm run build:bruno-common # also :bruno-requests, :bruno-filestore, etc.
npm run watch:common # also watch:requests, watch:converters
```

## Key Architecture

- **Main process entry**: `packages/bruno-electron/src/index.js`
- **Renderer + Redux store**: `packages/bruno-app/src/providers/ReduxStore/`
- Packages live under `packages/`, with top-level `tests/` and `playwright/`.

## Testing

- **Unit**: Jest, config per-package (`packages/*/jest.config.js`); bruno-app uses jsdom + `jest.setup.js`.
- **E2E**: Playwright — fixtures, helpers, isolation rules, and pitfalls live in
`.claude/rules/testing.md`; use the `write-e2e-test` skill when adding specs.

## Coding Standards

Full list: `CODING_STANDARDS.md`. Mechanical style (indent, quotes, semicolons, no trailing
commas, arrow-param parens) is ESLint-enforced — run `npm run lint:fix`, don't hand-police it.
Non-obvious project rules worth holding:

- React: avoid `useEffect` (prefer derived state / custom hooks); import hooks by name, never `React.useX`; a component is controlled XOR uncontrolled; Tailwind for layout, styled-components `theme` for colors.
- Every component owns a directory — `<ComponentName>/index.js(x)`, never `<ComponentName>.js(x)`.
- Extract for readability or clear reuse; avoid only indirection that adds no payoff. Add `data-testid` attributes for Playwright selectors.

## Detailed rules & references

Path-scoped rules in `.claude/rules/` auto-attach when you touch matching files:
`architecture.md` (`@usebruno/*` dependency boundaries, manifests), `bruno-app-layout.md` (bruno-app
module layout), `electron-ipc.md` (IPC handlers + startup), `redux-store.md` (slices/middleware),
`testing.md` (e2e patterns & gotchas), `cross-platform.md` (Windows file/process/path pitfalls),
`dsl-changes.md` (on-disk `.bru`/`.yml` format & backward compat), `conventions.md` (readability,
reuse, replacement & pre-submit hygiene).

Read on demand (not auto-loaded): `.claude/reference/architecture.md` — the monorepo map, request
pipeline, sandbox, core types, and dependency versions. Consult it before cross-package or
architectural work.
141 changes: 141 additions & 0 deletions .claude/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
# Claude Config

The [Claude Code](https://docs.claude.com/en/docs/claude-code) configuration for
[Bruno](https://github.com/usebruno/bruno) — the project context, architecture notes, coding
rules, and review/test skills the team has tuned while working on Bruno. Claude picks it up
automatically when you launch from the project root.

<!-- This README is a human maintainer guide. It is NOT a memory file and is never imported into
Claude's always-loaded context — keep contributor/ownership guidance here, not in CLAUDE.md. -->

## What's inside

| Path | What it is | Loads |
|------|------------|-------|
| `CLAUDE.md` | Project overview — commands, key architecture, coding standards, index of rules/references. | Every session (auto). |
| `rules/*.md` | Path-scoped engineering guidance: `architecture` (`@usebruno/*` dependency boundaries + manifests), `bruno-app-layout` (component directories, `src/ui` vs `src/components`), `redux-store`, `electron-ipc`, `dsl-changes` (on-disk `.bru`/`.yml` format), `cross-platform`, `testing`, `conventions` (readability, reuse, replacement hygiene, comment/diff hygiene). | When Claude touches files matching each rule's `paths:`. |
| `reference/architecture.md` | The monorepo map — request pipeline, sandbox, file formats, core types, dependency versions. Too big to auto-load. | On demand only (Claude reads it when a task needs it). |
| `skills/code-review/` | `/code-review` — reviews the current branch/PR via focused lenses in parallel; takes base pointers from `.coderabbit.yaml`. | On invocation / when relevant. |
| `skills/write-e2e-test/` | `/write-e2e-test` — writes a Playwright E2E test following Bruno's fixtures and conventions. | On invocation / when relevant. |
| `settings.json` | Shared project settings, checked in for the team. Denies `Read` on `**/dist/**` so Claude works from `src/`, not generated bundles. | At startup, from the launch directory. |
| `settings.local.json` | Your machine-specific overrides. Gitignored — never committed. | At startup, if present. |

## Requirements

- [Claude Code](https://docs.claude.com/en/docs/claude-code) installed (`npm i -g @anthropic-ai/claude-code`).
- A local checkout of Bruno (or a Bruno fork).

## Install

Start Claude Code (`claude`) from the Bruno root and everything loads on its own:

- **`.claude/CLAUDE.md`** loads every session — it is a first-class project-instruction location,
so **no root `CLAUDE.md` and no `@` import are needed**; keeping all shared guidance under
`.claude/` leaves the Claude config self-contained in one folder.
- **Path-scoped rules** attach automatically when Claude reads a matching file (e.g. `dsl-changes`
kicks in on `bruno-filestore`). Launching from a package subdirectory still loads this root
`.claude/` (rules + `CLAUDE.md`) from the ancestor directory.
- **`reference/architecture.md`** is *not* auto-loaded; Claude reads it on demand.
- **Skills** are discovered from `.claude/skills/` — type `/code-review` or `/write-e2e-test`.

## Everyday use

```bash
/code-review # review the current branch against main before pushing
/write-e2e-test # scaffold a Playwright spec under tests/
```

Otherwise just work normally — Claude consults the rules on demand. Machine-specific overrides go
in `.claude/settings.local.json` (already gitignored), not in `settings.json`.

---

## Maintaining this config

This section is for whoever edits the config. The goal is **high instruction adherence at the
lowest always-loaded cost**: put each instruction in the mechanism that loads it exactly when it's
needed, and no sooner.

It operationalizes the Claude Code docs — read them before making structural changes:
[Write an effective CLAUDE.md](https://code.claude.com/docs/en/best-practices#write-an-effective-claude-md)
(the *"would removing this cause a mistake?"* test below is from it),
[Memory](https://code.claude.com/docs/en/memory) (CLAUDE.md loading + `.claude/rules/`),
[Large codebases](https://code.claude.com/docs/en/large-codebases) (monorepo scoping), and
[Skills](https://code.claude.com/docs/en/skills).

### Where does a new instruction go?

| Mechanism | Lives in | Loads | Use it for |
|---|---|---|---|
| Project instructions | `.claude/CLAUDE.md` | Every session (full file) | Facts true in nearly every session and not inferable from code: orientation, non-obvious setup, global invariants, pointers to everything else. |
| Path-scoped rule | `.claude/rules/<topic>.md` with `paths:` | When Claude reads a file matching `paths:` | A coding constraint or convention specific to one area (a package, `tests/`, DSL files). One topic per file. |
| On-demand reference | `.claude/reference/<topic>.md` | Only when Claude `Read`s it | Long maps / reference material too big to auto-load. Point to it from CLAUDE.md or a rule. |
| Skill | `.claude/skills/<name>/SKILL.md` (+ support files) | On `/invoke` or when the model judges the description relevant | A reusable multi-step *procedure* or workflow (review, scaffold a test). Not a fact. |
| Settings / hooks | `.claude/settings.json` | Startup (from launch dir) / deterministic lifecycle events | Shared permissions/env; deterministic enforcement that must happen every time regardless of the model. Advisory guidance is **not** a hook. |

**Why no nested per-package `CLAUDE.md`?** Central path-scoped rules keep all conventions in one
maintained place under `.claude/` and attach exactly where they're needed (see the Claude Code
"large codebases" guide) — simpler than scattering `CLAUDE.md` files across package directories.

### Budgets

- `CLAUDE.md`: target **≤ 120 lines**, hard cap 200. For every line ask *"would removing this cause
Claude to make a recurring project-specific mistake?"* If not, cut or relocate it.
- Rules: one coherent topic each; keep concise. If a rule grows a long reference tail (maps, tables,
worked examples), move that tail to `reference/` and leave the invariants in the rule.
- Skills: keep `SKILL.md` focused (aim < 150 lines); push long checklists/examples to support files.
Descriptions **< ~200 chars**, leading with words a triggering request would contain.
- Prefer a small, distinct skill catalog — names + descriptions cost discovery context even though
bodies load lazily.

### Add / retire a rule or skill

- **Add a rule**: create a flat `rules/<topic>.md` with accurate `paths:` frontmatter (globs against
real repo paths). Record only non-obvious conventions or constraints static tooling (ESLint, TS)
doesn't already enforce. Only split a topic into a subfolder once it has several rules.
- **Add a skill**: unique stable directory name; description states *what* + *when*; set
`disable-model-invocation: true` for side-effectful workflows (publish/commit/release). Verify it
passes the reuse / project-specific / non-trivial-procedure tests before adding.
- **Retire**: delete the file and remove any pointer to it from `CLAUDE.md` and other rules/skills.

### Keep it consistent

- **Detect duplication/conflicts**: `grep -rn "<claim>" .claude` before writing a fact; if two files
state the same thing, keep it in one and point to it. Watch for the same fact drifting across
`CLAUDE.md`, a rule, a skill, and `CODING_STANDARDS.md` / `.coderabbit.yaml`.
- **Verify against real code.** Every rule/example must reflect the actual repo — grep the source,
don't assume. Rules are the source of truth; reviewer lenses and CLAUDE.md are thin pointers.
- **Don't hardcode volatile catalogs** (slice lists, handler names, dep versions that drift).
Describe the category and tell Claude where to read the current set.
- Imports (`@path`) improve organization but **do not reduce startup context** — the imported file
still loads in full. To keep something out of context, use a rule (`paths:`), a `reference/` doc,
or a skill instead.
- Team-wide requirements belong in these committed files, **not** only in Claude's auto memory
(`~/.claude/projects/.../memory/`), which is machine-local and unshared.
- **`Read`-deny rules are for build output, not dependencies.** `settings.json` denies
`Read(./**/dist/**)` so Claude edits `src/`, never the generated bundles the app consumes.
`node_modules/` is deliberately *not* denied — `.gitignore` already keeps it (and `dist/`) out of
search, and reading a dependency's source or `@types` is legitimate maintenance. Don't add deny
rules for gitignored paths just to keep them out of search; that's already handled. Note
`settings.json` loads only from the launch directory, so this deny applies on a root launch, not
when starting inside a package.

### Validate a change

- `git diff --check` (whitespace); confirm `settings.json` still parses as JSON.
- Check every rule has `paths:` (an accidental unscoped rule loads in *every* session):
`grep -L "paths:" .claude/rules/*.md` should print nothing.
- Confirm cross-references resolve (no pointer to a moved/renamed file):
`grep -rn "\.md" .claude CLAUDE.md`.
- **Loading**: run `/memory` in a session to list what actually loaded; open a file in a package to
confirm the right rule attaches. Use the `InstructionsLoaded` hook only temporarily if you need to
debug lazy loading — don't commit a diagnostic hook.
- **Skill triggering**: from the repo root, phrase a request the skill should catch ("review my
changes", "add an e2e test for X") and confirm it's offered; phrase a near-miss ("explain how
requests are persisted") and confirm it is *not* auto-invoked.

### When to revisit

Review this config after: Claude repeats the same project-specific mistake, a major repo
restructuring (packages moved/renamed, build tooling changed), or a major Claude Code release that
changes loading/skill behavior. Treat config edits like code — review them in PRs.
Loading
Loading