Skip to content
CAI
Software that uses CAICheck a score

usebruno/bruno

44.8

Weak · 25 September 2026

251.2k

lines of production code

JavaScript

with TypeScript

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a desktop application for API development and testing, built on Electron and React. It provides a comprehensive interface for managing collections of requests, supporting HTTP, GraphQL, gRPC, and WebSocket protocols. The application features advanced capabilities including an integrated API designer for OpenAPI specifications, AI-assisted script generation, and robust environment management with inheritance and secret handling. It also includes developer tools for debugging, performance monitoring, and Git integration, alongside a customizable UI with dark mode and extensive theming options.

How it got here

2021–2023 — Monorepo initialization and UI overhaul

142 changes.

This period established the Bruno monorepo infrastructure, including dependency hardening, CI configuration, and the release of the Bruno CLI. The frontend underwent a comprehensive redesign, migrating to Rsbuild and Tailwind CSS while introducing dark mode, a centralized Redux state management system, and a modernized request/response interface with drag-and-drop capabilities.

2024–2025 — OAuth2, gRPC, and WebSocket enhancements

205 changes.

This period focused on expanding protocol support with comprehensive OAuth2 authentication flows, a complete gRPC implementation including proto file management, and multi-message WebSocket capabilities. The work also included significant UI overhauls such as a new developer console, folder-level settings inheritance, and improved drag-and-drop interactions, alongside foundational infrastructure updates for testing and file storage.

2026 — AI integration and mock server launch

114 changes.

This period focused on integrating comprehensive AI capabilities, including a sidebar chat, inline code assistance, and local history persistence, alongside launching a new Mock Server feature for testing. The work also introduced standalone collection-level apps, a visual GraphQL query builder, and significant UI refinements such as virtualized lists and a unified design system.

Features

AWS SigV4 authentication support for collections

The Collection Settings UI now includes a dedicated form for configuring AWS Signature Version 4 (SigV4) authentication. Users can input and save their Access Key ID, Secret Access Key, Session Token, Service, Region, and Profile Name directly within the collection settings. The Secret Access Key field is masked for security and includes a warning indicator if the value is detected as sensitive.

packages/bruno-app/src/components/CollectionSettings/Auth/AwsV4Auth · high confidence

Add API Key authentication configuration for collections

Users can now configure API Key authentication at the collection level, specifying the key name, value, and whether the key should be sent in the HTTP header or as query parameters. This new component integrates with the existing theme system for consistent styling and updates the collection's authentication settings in the Redux store upon saving.

packages/bruno-app/src/components/CollectionSettings/Auth/ApiKeyAuth · high confidence

Add Akamai EdgeGrid authentication support

The EdgeGridAuth component now provides a dedicated UI for configuring Akamai EdgeGrid authentication, allowing users to input credentials such as Access Token, Client Token, and Client Secret, along with advanced options like Base URL, Nonce, Timestamp, Headers to Sign, and Max Body Size. The interface separates basic fields from advanced settings and includes tooltips for guidance, with sensitive fields flagged for security warnings.

packages/bruno-app/src/components/RequestPane/Auth/EdgeGridAuth · high confidence

Add Close All icon component

A new React component for the 'Close All' icon has been added to the application's icon library. This SVG-based component accepts configurable size, stroke width, and class name props, providing a visual asset for UI elements that trigger a 'close all' action, such as closing all open collections.

packages/bruno-app/src/components/Icons/CloseAll · high confidence

Add ColorBadge component for environment color indicators

Introduced a new ColorBadge component that renders a small, rounded circle displaying a specific color. This component is used to visually represent environment colors within the application, supporting configurable sizes and respecting the current theme context.

packages/bruno-app/src/components/ColorBadge · high confidence

Add Create Response Example modal

Users can now create new response examples via a dedicated modal dialog. This new component allows users to input a required example name and an optional description, with built-in validation that prevents submission if the name is empty and displays an error message. The modal supports pre-filling the name via initial state and resets its form fields upon closing or successful creation.

packages/bruno-app/src/components/ResponseExample/CreateExampleModal · high confidence

Add Digest Auth support for collection settings

Users can now configure HTTP Digest authentication (MD5) directly within the Collection Settings UI. This change introduces a new DigestAuth component that provides input fields for the username and password, integrates with the existing theme system for consistent styling, and includes sensitive-field detection to warn users when secrets are stored in plain text.

packages/bruno-app/src/components/CollectionSettings/Auth/DigestAuth · high confidence

Add ExampleTab component for managing example request tabs

Introduces the ExampleTab component, which renders individual tabs for saved examples within the Request interface. This component handles locating the specific example by UID, index, or name, displays an example-specific icon, and manages tab lifecycle events such as closing, right-click context menus, and double-clicking to pin the tab. It also prevents browser autoscroll on middle-mouse-button actions and ensures unsaved changes trigger a confirmation dialog before closing.

packages/bruno-app/src/components/RequestTabs/ExampleTab · high confidence

Add GraphQL schema loading and validation in Request Pane

Users can now load GraphQL schemas directly from the Request Pane via a new dropdown menu, supporting both local file uploads and remote introspection queries. The system automatically validates schemas against GraphQL spec rules (such as requiring fields in object types), caches valid schemas in local storage for faster subsequent loads, and displays toast notifications to inform users of successful loads or any validation issues encountered.

packages/bruno-app/src/components/RequestPane/GraphQLSchemaActions · high confidence

Add IconSparkles component for AI features

The IconSparkles React component has been added to the application's icon library. This new SVG-based icon, featuring a sparkle design, is intended to visually represent AI-related features within the Bruno app interface.

packages/bruno-app/src/components/Icons/IconSparkles · high confidence

Add JSONPath and XPath response filtering

Users can now filter API response data using JSONPath or XPath expressions via a new filter input in the Query Result pane. The component dynamically adjusts its placeholder text and tooltip based on the response mode (JSON or XML), providing examples like '$.store.books..author' for JSON or '/store/books//author' for XML. The filter input is collapsible, allowing users to toggle the filtering interface on and off.

packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultFilter · high confidence

Add ModeSwitch component for toggling between Rich Text and Markdown modes

A new ModeSwitch component has been introduced in the Bruno app, providing a UI toggle that allows users to switch the documentation editor between Rich Text and Markdown modes. The component renders two ghost buttons labeled 'Rich Text' and 'Markdown', with visual styling applied via a new StyledWrapper that uses theme variables for colors, borders, and hover states. This change enables users to choose their preferred editing format directly within the interface.

packages/bruno-app/src/components/ModeSwitch · high confidence

Add OAuth 1.0 authentication support

Users can now configure OAuth 1.0 authentication for requests. This change introduces a new UI component in the Request Pane that allows setting the Consumer Key, Consumer Secret, Token, and Token Secret. It supports selecting the signature method (HMAC-SHA1, HMAC-SHA256, HMAC-SHA512, RSA-SHA1, RSA-SHA256, RSA-SHA512, PLAINTEXT) and placement (Header, Query Params, Body). The interface also handles private keys, allowing users to either enter them as text or upload them via a file reference, with sensitive fields like secrets and private keys marked for security awareness.

packages/bruno-app/src/components/RequestPane/Auth/OAuth1 · high confidence

Add OAuth2 Implicit Grant authentication support

Users can now configure the OAuth2 Implicit grant type within the Request Pane. This new component provides fields for the Authorization URL, Client ID, Scope, and State, along with a Token Source selector to choose between Access Token and ID Token. It also includes a preference toggle to use the system browser for the OAuth authorization flow and integrates with the existing token viewer and action buttons.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/Implicit · high confidence

Add OpenCollectionIcon component

A new React component for the 'Open Collection' icon has been added to the application's icon library. This component renders an SVG graphic that respects the application's text color theme and supports configurable sizing, providing a visual asset for the collection opening action.

packages/bruno-app/src/components/Icons/ExampleIcon, packages/bruno-app/src/components/Icons/OpenCollectionIcon · high confidence

Add Portal component for React DOM rendering

A new Portal component has been added to the UI library, wrapping React's createPortal to render children into a specified root node (defaulting to document.body).

packages/bruno-app/src/ui/Portal · high confidence

Add SensitiveFieldWarning component with styled tooltip

A new SensitiveFieldWarning component has been introduced to display a warning icon and tooltip for sensitive fields. The component uses a styled wrapper that sets the tooltip width to 150px and colors the alert icon using the theme's danger text color, ensuring consistent visual styling for security warnings.

packages/bruno-app/src/components/SensitiveFieldWarning · high confidence

Add StatusDot component for UI state indicators

A new StatusDot component has been introduced to display small status indicators within the UI. It renders a dot icon with configurable styling, specifically supporting an 'error' type that applies red coloring, and allows for custom data-testid attributes to facilitate testing and identification in the collection, folder, request, and presets/auth tabs.

packages/bruno-app/src/components/StatusDot · high confidence

Add System Proxy settings panel with refresh and timestamp display

The Preferences UI now includes a dedicated System Proxy panel that displays the current system-level proxy configuration (http\_proxy, https\_proxy, no\_proxy, and pac\_url) sourced from the operating system. Users can manually refresh these values using a new Refresh button, and the interface shows a 'Last refreshed' timestamp to indicate when the settings were last retrieved.

packages/bruno-app/src/components/Preferences/ProxySettings/SystemProxy · high confidence

Add UI for migrating collections to YML format

A new migration section has been added to the Collection Settings Overview, allowing users to convert collections stored in the legacy BRU format to the new YML file format. This component displays a 'Convert to YML' button that triggers a modal dialog, and includes a link to documentation explaining the change. The feature is only visible for collections currently using the BRU format.

packages/bruno-app/src/components/CollectionSettings/Overview/Migration · high confidence

Add ability to copy existing environments

Users can now duplicate an existing environment within a collection. A new 'Copy Environment' modal allows users to specify a new name (defaulting to the original name with ' - Copy' appended, with a 1-50 character limit) and, upon confirmation, creates a new environment instance in the same collection via the Redux store.

packages/bruno-app/src/components/Environments/EnvironmentSettings/CopyEnvironment · high confidence

Add code font and font size preferences in Display settings

Users can now customize the code editor's font family and size via the Preferences \> Display section. The new Font component provides text and number inputs that clamp the font size between 1 and 32, automatically saving changes with a 500ms debounce to the application's Redux store.

packages/bruno-app/src/components/Preferences/Display/Font · high confidence

Add collapsible body viewer to timeline request items

The Response Pane's Timeline now includes a dedicated Body component for individual request items. This new UI element renders a collapsible section that displays the request or response body using the existing QueryResponse viewer. It intelligently hides the result type selector for request items to reduce clutter and shows a 'No Body' placeholder when no content is present, improving the readability of timeline entries.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Common/Body · high confidence

Add collection-level test script editor

A new Tests tab has been added to the Collection Settings interface, allowing users to write and save JavaScript test scripts that execute for every request within the collection. The component provides a code editor with syntax highlighting, theme support, and font preferences, while persisting scroll position across tab switches and highlighting error lines when script execution fails.

packages/bruno-app/src/components/CollectionSettings/Tests · high confidence

Add console log filter dropdown component

The Console devtools now include a new filter dropdown component that allows users to toggle individual log types (error, warn, info, log) and view their counts. The component features a trigger button displaying the active filter summary (e.g., '2/3' or 'All'), a 'Show All'/'Hide All' toggle, and a menu listing each filter type with its corresponding count. Tests verify the dropdown renders correctly, opens into a portal, and handles filter toggling logic.

packages/bruno-app/src/components/Devtools/Console/FilterDropdown · high confidence

Add copy button to response pane with format-aware copying

A new copy button component has been added to the Response Pane, allowing users to copy the API response to their clipboard. The component intelligently handles the content being copied based on the current view state: if the 'Preview' tab is active, it copies the raw data; if the 'Editor' tab is active, it formats the response according to the user's selected format setting. The button includes visual feedback, showing a checkmark for two seconds after a successful copy, and displays a toast notification to confirm the action or report an error.

packages/bruno-app/src/components/ResponsePane/ResponseCopy · high confidence

Add filled alert triangle icon component

A new React component, IconAlertTriangleFilled, has been added to the application's icon library. This component renders a filled warning/alert triangle SVG icon, accepting a configurable size prop (defaulting to 16px) and passing through additional props to the underlying SVG element, enabling its use for displaying filled alert states in the UI.

packages/bruno-app/src/components/Icons/IconAlertTriangleFilled · high confidence

Add folder-level tag inheritance to request settings

The Tags settings component in the Request Pane now supports folder-level tag inheritance. It displays tags assigned directly to the request alongside those inherited from parent folders, prevents duplicate assignments, and allows users to add or remove tags while ensuring the request tab remains permanent and the collection's tag list is updated.

packages/bruno-app/src/components/RequestPane/Settings/Tags · high confidence

Add folder-level test script editor

Users can now write and save JavaScript test scripts at the folder level, which will execute for every request sent within that folder. This new component provides a code editor with theme support, font customization, scroll persistence across tab switches, and error line highlighting, allowing users to manage shared test logic for a group of requests.

packages/bruno-app/src/components/FolderSettings/Tests · high confidence

Add gRPC communication icons

The application now includes a new set of SVG icons to visually represent gRPC communication patterns. This change adds four distinct components—Unary, Client Streaming, Server Streaming, and Bidirectional Streaming—each with specific color coding (blue, purple, green, and orange respectively) to help users quickly identify the type of gRPC interaction in the UI.

packages/bruno-app/src/components/Icons/Grpc · high confidence

Add import issues toast with GitHub reporting

Users now see a dedicated toast notification when a Postman collection import completes with errors or warnings. This toast aggregates the issues, provides a summary, and offers two actions: copying the issue details to the clipboard or opening a pre-filled GitHub issue report. It includes a checkbox to optionally include raw request data in the report (with a warning about sensitive information) and handles cases where the issue details are too long for a URL by copying them instead.

packages/bruno-app/src/components/Toast · high confidence

Add modal for editing collection version

Users can now change the version of a collection via a new modal dialog in the sidebar. The component displays the current version (or 'Not Set') and allows entering a new version string, with a preview showing the target file (bruno.json for Bru collections, opencollection.yml for YML collections) and the specific key being updated. The submission is disabled if the new version is empty, blank, or identical to the current version, and trims whitespace before saving.

packages/bruno-app/src/components/Sidebar/Collections/Collection/ChangeCollectionVersion · high confidence

Add option to preserve scripts when exporting to Postman

The Export to Postman modal now includes an advanced option that allows users to choose whether to preserve embedded scripts during the export process. This new toggle is hidden by default under the 'Show Advanced Options' dropdown in the export dialog, giving users control over script inclusion in the generated Postman collection file.

packages/bruno-app/src/components/Sidebar/Collections/Collection/ExportCollection · high confidence

Add relative time display for timeline items

A new RelativeTime component has been added to the Response Pane's Timeline Item view. This component displays timestamps as relative values (e.g., '2 seconds ago') that update every second, improving the readability of request history by showing how much time has passed since each event occurred.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Common/Time · high confidence

Add scripting and test result display for gRPC requests

Users can now write and execute scripts at four specific phases of a gRPC call (Before Call Start, Before Message Send, After Message Receive, and After Call End) using new script editor tabs in the Request pane. Additionally, the Response pane now displays the results of any tests run during these script phases, showing pass/fail status grouped by message and providing a summary label with the total count of passed or failed tests.

packages/bruno-app/src/components/RequestPane/GrpcScript, packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcTestResults, packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcTestResultsLabel · high confidence

Add standalone app creation dialog in sidebar

A new 'New App' modal dialog has been added to the sidebar, allowing users to create standalone app files within a collection or a specific folder. The dialog validates the app name (1-255 characters, valid format) and dispatches a Redux action to create the app, providing success or error feedback via toast notifications. It includes protection against duplicate submissions and renders within a Portal to ensure proper modal stacking.

packages/bruno-app/src/components/Sidebar/NewApp · high confidence

Add support for custom OAuth2 additional parameters

Users can now define and manage custom key-value parameters for OAuth2 requests. The new AdditionalParams component provides a tabbed interface (Authorization, Token, Refresh) that adapts to the selected grant type, allowing users to add, edit, and delete parameters with options to specify whether they are sent in headers or other locations. This feature enables fine-grained control over OAuth2 request payloads beyond the standard fields.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AdditionalParams · high confidence

Add toggle to switch response pane between horizontal and vertical layouts

Users can now change the orientation of the response pane from horizontal to vertical (and back) using a new toggle button. This control reads the current layout preference from Redux, updates the store via the savePreferences action when clicked, and persists the choice so the layout remains consistent across sessions.

packages/bruno-app/src/components/ResponsePane/ResponseLayoutToggle · high confidence

Add transient request creation component

Introduces the CreateTransientRequest component, which provides a UI for users to create new transient HTTP, GraphQL, gRPC, and WebSocket requests within a collection. The component respects collection presets for default request types and URLs, generates unique names for the new items, and includes error handling via toast notifications for failed creation attempts.

packages/bruno-app/src/components/CreateTransientRequest · high confidence

Add useChunkedReveal hook for rendering large lists in chunks

A new React hook, useChunkedReveal, has been introduced to handle the rendering of nodes with a large number of children. Instead of rendering all items at once, this hook implements an infinite-scroll-like pattern where children are revealed in chunks of 200. As the user scrolls and a sentinel element comes into view, the next chunk of items is rendered, improving performance for wide arrays or large datasets.

packages/bruno-app/src/hooks/useChunkedReveal · high confidence

Add useOnClickOutside React hook

A new \useOnClickOutside\ hook has been added to the application, allowing components to detect clicks occurring outside of a specified DOM element. This utility supports both mouse and touch events and includes an \enabled\ flag to conditionally activate the listener, facilitating cleaner interaction handling for dropdowns, modals, and popovers.

packages/bruno-app/src/hooks/useOnClickOutside · high confidence

Add variable data type selector with validation

A new DataTypeSelector component has been introduced to allow users to assign and switch data types (string, number, boolean, object) for variables. The component displays a visual indicator (icon or label) for the current type and provides a dropdown menu to change it. It integrates with a validation utility to check if the variable's value matches the selected type, displaying a warning icon with a tooltip if a mismatch is detected.

packages/bruno-app/src/components/DataTypeSelector · high confidence

Add workspace import via zip file

Users can now import workspaces by selecting or dragging and dropping a .zip file through a new modal dialog in the workspace sidebar. The import process requires specifying a target location, which defaults to the user's configured general default location, and validates that the selected file is a valid zip archive before dispatching the import action.

packages/bruno-app/src/components/WorkspaceSidebar/ImportWorkspace · high confidence

Add workspace renaming capability

Users can now rename existing workspaces via a dedicated modal dialog. The interface validates that the new name is between 1 and 255 characters, ensures it is unique among existing workspaces (case-insensitive), and automatically focuses the input field upon opening. Submitting the form triggers the rename action, closing the modal on success or displaying an error toast if the operation fails.

packages/bruno-app/src/components/ManageWorkspace/RenameWorkspace · high confidence

Added AWS Signature V4 authentication support

Users can now authenticate requests using AWS SigV4. This change introduces a new authentication mode in the Request Pane that allows configuration of Access Key ID, Secret Access Key, Session Token, Service, Region, and Profile Name. The Secret Access Key field is marked as sensitive to trigger privacy warnings, and the UI integrates with the existing theme system for consistent styling.

packages/bruno-app/src/components/RequestPane/Auth/AwsV4Auth · high confidence

Added Akamai EdgeGrid authentication configuration UI

The Collection Settings now includes a dedicated interface for configuring Akamai EdgeGrid authentication. Users can input basic credentials (Access Token, Client Token, Client Secret) and toggle advanced options such as Base URL, Nonce, Timestamp, Headers to Sign, and Max Body Size. The component handles sensitive field detection and persists changes to the collection's draft root request authentication settings.

packages/bruno-app/src/components/CollectionSettings/Auth/EdgeGridAuth · high confidence

Added Bearer Authentication UI component

The BearerAuth component in the Request Pane now provides a dedicated interface for entering and managing Bearer tokens. It features a styled input field that integrates with the application's theme and includes a sensitive-field warning indicator to alert users when the token is considered sensitive.

packages/bruno-app/src/components/RequestPane/Auth/BearerAuth · high confidence

Added Digest Authentication support with secure password handling

The DigestAuth component has been introduced to the Request Pane, allowing users to configure Digest authentication by entering a username and password. The implementation includes a styled wrapper for consistent UI theming and integrates with the application's sensitive field detection system to display warnings when passwords are stored in plain text. The password input is marked as a secret field, ensuring it is masked in the UI, and changes are persisted via the Redux store.

packages/bruno-app/src/components/RequestPane/Auth/DigestAuth · high confidence

Added DotIcon component for content indicators

Introduced a new DotIcon React component located in packages/bruno-app/src/components/Icons/Dot. This component renders an SVG dot with configurable width, using specific stroke and fill properties to ensure correct rendering and avoid console errors related to invalid DOM properties like stroke-width. It is designed to address UX issues where content indicators were previously displaying incorrectly or being too large.

packages/bruno-app/src/components/Icons/Dot · high confidence

Added File Alert Filled icon component

A new React component, IconFileAlertFilled, has been added to the application's icon library. This component renders a filled file icon with an alert symbol, which can be used in the UI to indicate file-related warnings or errors.

packages/bruno-app/src/components/Icons/IconFileAlertFilled · high confidence

Added IndexedDB persistence for collections

The application now supports saving and retrieving collections using the browser's IndexedDB API. A new utility module provides functions to store individual collections and fetch all stored collections, enabling offline access and persistence of user data within the desktop app environment.

packages/bruno-app/src/utils/idb · high confidence

Added Mock Servers section and FilterDropdown component

The application now includes a new 'Mock Servers' section in the sidebar, allowing users to view and create mock servers via a dedicated modal. This change also introduces a reusable, themed FilterDropdown component with keyboard accessibility and click-outside dismissal, which is likely used to enhance filtering capabilities within the new or existing UI sections.

packages/bruno-app/src/components/FilterDropdown, packages/bruno-app/src/components/Sidebar/Sections/MockServersSection · high confidence

Added NTLM authentication support for HTTP requests

Users can now configure NTLM authentication on requests by providing a username, password, and domain. The new NTLMAuth component includes a dedicated UI for these fields, with the password field marked as secret and displaying a warning if the value is detected as sensitive. Changes to any of these fields are saved immediately to the request's authentication configuration.

packages/bruno-app/src/components/RequestPane/Auth/NTLMAuth · high confidence

Added NTLM authentication support for collections

Users can now configure NTLM authentication at the collection level. This change introduces a new UI component in the Collection Settings that allows users to input and save their NTLM username, password, and domain. The interface includes a sensitive field warning for the password and integrates with the existing theme system for consistent styling.

packages/bruno-app/src/components/CollectionSettings/Auth/NTLMAuth · high confidence

Added NetworkError component for displaying network failure notifications

A new NetworkError component has been introduced in the ResponsePane to provide users with a dedicated, styled notification for network errors. This component renders a red-themed alert dialog with a 'Close' button, allowing users to dismiss the error message cleanly when a request fails.

packages/bruno-app/src/components/ResponsePane/NetworkError · high confidence

Added OpenAPI Sync icon component

A new React component for the OpenAPI Sync icon has been added to the application. This SVG-based icon, which depicts a circular arrow symbolizing synchronization, is now available for use in the UI to represent OpenAPI sync actions.

packages/bruno-app/src/components/Icons/OpenAPISync · high confidence

Added OpenAPI logo icon component

The application now includes a dedicated OpenAPI logo icon component, allowing users to visually identify OpenAPI-related resources or actions within the interface. This new SVG-based icon is available for use in the UI where OpenAPI branding is required.

packages/bruno-app/src/components/Icons/OpenAPILogo · high confidence

Added Send icon component

A new SendIcon React component has been introduced in the bruno-app package, providing a reusable SVG icon for sending actions. The component accepts color and width props to allow for customizable styling within the application's UI.

packages/bruno-app/src/components/Icons/Send · high confidence

Added StopWatch component for request timing display

A new StopWatch React component has been introduced to display the elapsed time of requests. It accepts a startTime prop and updates the displayed duration every 100 milliseconds. The component includes a brief loading state (displaying 'Loading...' for the first 250ms) to prevent flickering or showing zero time during initial render, and uses React.memo for performance optimization.

packages/bruno-app/src/components/StopWatch · high confidence

Added WebSocket response headers display component

A new UI component has been introduced to display HTTP headers received during WebSocket connections within the Response Pane. The component renders a styled table listing header names and values, supporting both object and array header formats, and includes visual styling such as striped rows and uppercase headers consistent with the application's theme.

packages/bruno-app/src/components/ResponsePane/WsResponsePane/WSResponseHeaders · high confidence

Added ability to rename collections via a modal dialog

Users can now rename existing collections through a new 'Rename Collection' modal component. This feature provides a form with validation to ensure the name is not empty, updates the collection name in the Redux store, and displays success or error toasts to confirm the action.

packages/bruno-app/src/components/Sidebar/Collections/Collection/RenameCollection · high confidence

Added bottom bar toggle icon component

A new SVG icon component, IconBottombarToggle, has been introduced to visually represent the bottom bar state. This component renders a layout icon that dynamically displays a filled bar when the bottom bar is expanded and hides it when collapsed, supporting customization of size, stroke width, and CSS classes.

packages/bruno-app/src/components/Icons/IconBottombarToggle · high confidence

Added cancelable request overlay with layout-aware styling

The ResponsePane now displays a loading overlay during active requests, allowing users to cancel the operation via a 'Cancel Request' button. This overlay includes a live request timer and adapts its vertical alignment based on the user's response pane orientation preference (centered for vertical layout, top-aligned for horizontal).

packages/bruno-app/src/components/ResponsePane/Overlay · high confidence

Added clear response button to the Response Pane

Users can now clear the displayed response for a request by clicking the new eraser icon in the Response Pane. This change introduces the ResponseClear component, which dispatches a Redux action to reset the response data to null, effectively removing the current response from the view.

packages/bruno-app/src/components/ResponsePane/ResponseClear · high confidence

Added collapsible sidebar toggle icon component

A new IconSidebarToggle React component has been introduced to support the collapsible sidebar feature. This component renders an SVG icon that visually indicates the sidebar's state: it displays a filled panel when the sidebar is expanded and switches to a simple outline when the sidebar is collapsed, allowing users to easily identify the current layout mode.

packages/bruno-app/src/components/Icons/IconSidebarToggle · high confidence

Added collection selection modal

A new modal dialog has been introduced in the sidebar's collection area, allowing users to view a list of available collections and select one. The component renders a small modal containing a scrollable list of collection names (with an icon), handles the display of an empty state when no collections exist, and triggers a callback upon selection.

packages/bruno-app/src/components/Sidebar/Collections/SelectCollection · high confidence

Added confirmation dialog for closing unsaved requests or examples

A new confirmation modal has been introduced to prompt users when they attempt to close a request or example tab that contains unsaved changes. The dialog displays the name and type of the item, offering three distinct actions: saving and closing, canceling the close operation, or discarding changes and closing without saving. This prevents accidental loss of work by ensuring users explicitly choose how to handle unsaved modifications before exiting the tab.

packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmRequestClose · high confidence

Added dark mode support and diff visualization assets

The application now includes a theming system with distinct light and dark modes, defined in the new theme configuration files (light.js, dark.js, and index.js) within the public theme directory. Additionally, static assets for the diff2Html library (diff2Html.js and diff2Html.min.css) have been added to the public static directory, enabling the rendering of code diffs with support for both light and dark visual themes.

packages/bruno-app/public · high confidence

Added deferred loading hook to prevent UI flickering

A new \useDeferredLoading\ React hook has been introduced in the \bruno-app\ package. This utility delays the display of loading states by a configurable minimum duration (defaulting to 200ms), which prevents the user interface from flickering during fast operations. The implementation includes a comprehensive test suite to verify correct behavior for initial states, delay timing, and state resets.

packages/bruno-app/src/hooks/useDeferredLoading · high confidence

Added drag-and-drop reordering for list items

The application now supports reordering rows via drag-and-drop. A new hook, useMouseRowDrag, provides the logic for this interaction, including a visual preview that follows the cursor, automatic scrolling when dragging near list edges, and the ability to detect the target row for the drop. This enables users to change the order of items (such as variables) by dragging them to a new position.

packages/bruno-app/src/hooks/useMouseRowDrag · high confidence

Added drag-to-resize hook for split panes with width persistence

A new \useDragResize\ React hook has been introduced in the Bruno app to enable users to drag-resize horizontal split panes. This hook manages the drag interaction state, clamps the pane width to configurable minimums, and commits the final width to a caller-provided setter, allowing the split pane's layout to be persisted. The implementation includes comprehensive unit tests covering mouse interactions, boundary clamping, and container resize handling.

packages/bruno-app/src/hooks/useDragResize · high confidence

Added empty-state UI for creating or opening collections

A new component has been introduced in the sidebar's collection area to handle the state where no collections are present. This UI displays a message indicating that no collections were found and provides two interactive links: one to create a new collection and another to open an existing one. Clicking the 'Open' link triggers a Redux action to set the application state for opening a collection, while the 'Create' link delegates to a provided callback.

packages/bruno-app/src/components/Sidebar/Collections/CreateOrOpenCollection · high confidence

Added error boundary with stack trace and recovery options

The application now includes an ErrorBoundary component that captures client-side errors and displays a user-friendly interface instead of crashing. When an error occurs, users can view the full stack trace and error message, choose to return to the app to continue working, or force quit the application. The force quit option also allows users to clear caches before exiting, helping to resolve potential state corruption issues.

packages/bruno-app/src/pages/ErrorBoundary · high confidence

Added prompt variables modal for user input

The RequestPane now includes a new PromptVariablesModal component that presents a dialog for collecting user-defined values. When a request requires specific inputs, this modal displays labeled text fields corresponding to each prompt, allowing users to enter values before proceeding. The modal supports multiple prompts, handles state management for the entered values, and provides standard confirmation and cancellation actions to submit or abort the input process.

packages/bruno-app/src/components/RequestPane/PromptVariables · high confidence

Added prompt variables provider for user input collection

The Bruno app now includes a PromptVariables provider that manages a modal dialog for collecting user input. This provider exposes a context-based 'prompt' function for React components and a global 'window.promptForVariables' function, allowing non-component code (such as Redux thunks) to request variable inputs from the user during request execution.

packages/bruno-app/src/providers/PromptVariables · high confidence

Added resizable column hook for grid layouts

Introduced the \useResizableColumns\ hook, which enables drag-to-resize behavior for multi-column grids. This hook manages column widths to ensure they sum to the container width (minus any reserved space) without horizontal scrolling, enforcing a minimum column width and handling edge cases like narrow containers by clipping rather than overflowing. It also preserves user-adjusted proportions when the container size changes.

packages/bruno-app/src/hooks/useResizableColumns · high confidence

Added resizable side panel hook with drag-to-resize behavior

The \useResizablePanel\ hook in \packages/bruno-app/src/hooks/useResizablePanel\ has been introduced to enable horizontal resizing of side panels via a drag handle. This hook manages mouse events to adjust panel width within configurable minimum and maximum bounds, supporting both left and right panel directions, and includes comprehensive unit tests to verify the resizing logic.

packages/bruno-app/src/hooks/useResizablePanel · high confidence

Added styled gRPC error display component

The Response Pane now includes a dedicated GrpcError component that renders gRPC server errors with a distinct visual style. This new UI element displays the error title and message in a scrollable container with a red left border, includes a close button to dismiss the error, and applies the application's theme for colors and typography.

packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcError · high confidence

Added usePrevious custom hook

A new \usePrevious\ React hook has been introduced in the \packages/bruno-app\ package. This utility allows components to access the previous value of a prop or state variable, enabling logic that depends on value changes rather than just current values.

packages/bruno-app/src/hooks/usePrevious · high confidence

The Advanced section of the Generate Documentation modal now lets you filter included requests by tags, with separate inputs for include and exclude lists that validate against existing collection tags. A toggle for including the Git repository URL is also available, but it only appears when the collection has a Git remote configured.

packages/bruno-app/src/components/Sidebar/Collections/Collection/GenerateDocumentation/Advanced · high confidence

App initialization now includes changelog notifications, OpenAPI sync polling, and telemetry

The App provider now initializes several new background capabilities alongside existing ones. On startup, the app checks for version updates and automatically opens a changelog tab if the current version is newer than the last seen one, while also cleaning up legacy v4-migration state from local storage. It enables OpenAPI sync polling that checks active workspace collections for API spec updates every five minutes. Additionally, it integrates PostHog telemetry to anonymously track OS and version usage once per day (excluding dev and test environments), and continues to handle IPC events for collection management, workspace state, and mock server status.

packages/bruno-app/src/providers/App · high confidence

App state is now automatically persisted to disk via a new snapshot middleware

The application now automatically saves UI state to disk, preserving details such as the active workspace, sidebar width and collapsed status, DevTools tab selection, and specific workspace tab types (e.g., the environments tab) when switching contexts. This new snapshot middleware debounces saves to prevent excessive disk writes and ensures that your workspace layout and collection environment selections are restored correctly upon restart, even if collections are unmounted or environments have not yet hydrated.

packages/bruno-app/src/providers/ReduxStore/middlewares/snapshot · high confidence

Assertion operator selection UI component introduced

A new React component has been added to the Request Pane's Assertions section, providing a dropdown menu for users to select assertion operators. This component exposes a comprehensive list of comparison and type-checking operators—including equality, inequality, containment, length, regex matching, boundary checks, and type validations (such as JSON, number, string, boolean, and array)—allowing users to define the specific logic for their request assertions.

packages/bruno-app/src/components/RequestPane/Assertions/AssertionOperator · high confidence

Bruno CLI initial release with Docker support and documentation generation

Bruno CLI is now available as a standalone package, allowing you to run API collections, import from OpenAPI/WSDL, and generate HTML documentation directly from the command line. The release includes official Docker images (Alpine and Debian variants) for container-native execution in CI/CD pipelines, along with a smoke-test suite to validate image integrity. Key features include support for JUnit and HTML reporters, environment variable injection, and collection-level scripting.

packages/bruno-cli · high confidence

Bruno language parser v2 introduces new .bru file format with annotations and structured blocks

The \bruno-lang\ package now includes a v2 parser that replaces the previous v1 tag-based syntax with a new structured format using dictionary blocks, text blocks, and list blocks. This new format supports annotations (decorators) for metadata, multiline text blocks using triple quotes, and explicit separation of pre-request/post-response scripts and variables. The v1 parser is retained for backward compatibility, and utilities are provided to convert between v1 and v2 formats, as well as to handle environment variables and collection-level configurations in the new syntax.

packages/bruno-lang · high confidence

Centralized HTTP request processing and API documentation generation

Bruno now consolidates HTTP request processing and API documentation generation into the shared \bruno-common\ package. This change introduces a unified HAR (HTTP Archive) generation pipeline that standardizes URL encoding, query parameter handling, and authentication header resolution for both the CLI and the App, eliminating previous discrepancies between code generation and runtime behavior. It also adds a new API documentation generator that supports filtering requests by tags, scoping environments, and securely stripping Git credentials from exported HTML files.

packages/bruno-common · high confidence

Code generation UI now supports language selection, library switching, and variable interpolation control

The Generate Code modal in the sidebar now includes a toolbar that lets users select a main programming language and switch between available libraries (e.g., different HTTP clients) for the generated snippet. A new "Interpolate Variables" checkbox allows users to toggle whether dynamic variables in the request URL are resolved before code generation; when disabled, the URL is rendered as typed, and validation adapts accordingly. The modal also correctly resolves inherited authentication settings from folders or collections and supports generating code for request examples, displaying a specific title for example-based generation.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem · high confidence

Collection-level OAuth2 authentication settings

Users can now configure OAuth2 credentials at the collection level via a new settings interface. This change introduces a dedicated UI component that supports all four OAuth2 grant types—Authorization Code, Password Credentials, Client Credentials, and Implicit—allowing users to manage authentication settings independently of individual request outputs.

packages/bruno-app/src/components/CollectionSettings/Auth/OAuth2 · high confidence

Collection-level header management with validation and bulk editing

The Collection Settings UI now includes a dedicated Headers component that allows users to define request headers applied to every request within a collection. This feature introduces row-level validation to prevent invalid header names (spaces/newlines) and values (newlines), provides autocomplete suggestions for standard HTTP header names and MIME types, and supports a bulk-edit mode for efficient mass updates. The interface also persists scroll position and column widths across sessions to maintain user context.

packages/bruno-app/src/components/CollectionSettings/Headers · high confidence

Collection-level pre-request and post-response script editing with tabbed interface

The Collection Settings now includes a dedicated Script section that allows users to write and manage pre-request and post-response scripts for the entire collection. This feature introduces a tabbed interface to switch between the two script types, with status indicators that highlight errors in either script. The component persists the scroll position and active tab state across user sessions and integrates with the global code editor preferences for font and theme, ensuring a consistent editing experience. Scripts are saved via a dedicated Save button, updating the collection's draft or root script configuration.

packages/bruno-app/src/components/CollectionSettings/Script · high confidence

Collection-level proxy configuration UI

Users can now configure proxy settings directly at the collection level via a new ProxySettings component in the Collection Settings panel. This interface allows enabling or disabling the proxy, inheriting global settings, and specifying protocol, hostname, port, authentication credentials (with password visibility toggle), and bypass rules. Changes are validated in real-time (e.g., port range 1-65535, length limits) and persisted to the collection's configuration.

packages/bruno-app/src/components/CollectionSettings/ProxySettings · high confidence

Custom filesystem naming for new folders

The New Folder modal now allows users to specify a custom name for the folder on the filesystem, distinct from the display name shown in the app. This feature is hidden by default and can be toggled via the 'Advanced Options' dropdown. When enabled, users can edit the filesystem name directly or view the auto-generated sanitized version, with validation ensuring the name is not empty and is not the reserved word 'environments' at the root level.

packages/bruno-app/src/components/Sidebar/NewFolder · high confidence

Display failed requests in collection overview with human-readable sizes

The Collection Settings Overview now includes a new 'RequestsNotLoaded' component that lists requests which failed to load (marked as partial or with an error). This section displays the relative pathname and the file size in a human-readable format (KB, MB, or GB) for each failed item. Users can click on a listed request to either focus its existing tab or open it in a new tab, improving visibility and recovery of problematic collection items.

packages/bruno-app/src/components/CollectionSettings/Overview/RequestsNotLoaded · high confidence

Display gRPC response headers and trailers in the response pane

The response pane now includes dedicated views for gRPC metadata, rendering both response headers and trailers in styled tables. These new components parse the incoming metadata arrays and display key-value pairs, providing a clear 'No metadata received' or 'No trailers received' message when the data is empty, ensuring users can inspect all gRPC response details alongside the body.

packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcResponseHeaders, packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/ResponseTrailers · high confidence

Display inherited and default headers in the request headers pane

The Request Headers component now visualizes headers inherited from the collection and parent folders, as well as Bruno's runtime default headers (such as User-Agent). Inherited headers are shown in an expandable section, with the nearest scope's value taking precedence for duplicate names, while default headers are displayed below and can be omitted per request. This allows users to see the full effective set of headers being sent without manually merging values from different scopes.

packages/bruno-app/src/components/RequestPane/RequestHeaders · high confidence

Enhanced environment and API spec export capabilities

The application now supports exporting collection and global environments as JSON files, preserving environment inheritance chains (the 'extends' field) and color metadata. Additionally, the OpenAPI spec exporter has been significantly improved to handle URL templates with variables (e.g., {{protocol}}://{{host}}), correctly mapping collection and environment base URLs to OpenAPI server entries and supporting request-level server overrides. The exporter also filters out transient items and supports GraphQL requests in Postman exports.

packages/bruno-app/src/utils/exporters · high confidence

Enhanced response content type detection and preview support

The response viewer now supports previewing PDFs, images, audio, and video files directly in the UI, in addition to existing text-based formats like HTML, JSON, XML, and JavaScript. This is achieved by introducing a new \getBinaryPreviewType\ utility and refining \getDefaultResponseFormat\ to route binary content to a base64 preview tab. The system also includes robust content detection via magic numbers for common image formats (JPEG, PNG, GIF, WebP, AVIF) and improved SVG handling, ensuring that binary responses are displayed correctly rather than as raw text.

packages/bruno-app/src/utils/response · high confidence

Environment inheritance UI and selection context

Users can now configure environments to inherit variables from other environments via a new 'InheritsFrom' dropdown component, which lists inheritable targets and displays the current inheritance relationship. This feature is supported by a new \useEnvironmentSelection\ hook and context provider that manages environment selection state within the application.

packages/bruno-app/src/components/Environments/Common/InheritsFrom, packages/bruno-app/src/hooks/useEnvironmentSelection · high confidence

Environment selection and version info added to Generate Documentation modal

The Generate Documentation modal now displays a summary card showing the collection name, version, and counts of folders, requests, and environments. It also introduces an environment selection list that allows users to choose which environments to include in the generated documentation, with a default state of no environments selected. The modal includes tests for the new CollectionVersionInfo and EnvironmentSelectionList components, verifying correct display of version strings, pluralization, and environment selection states.

packages/bruno-app/src/components/Sidebar/Collections/Collection/GenerateDocumentation · high confidence

Environment selector now includes search filtering and keyboard shortcuts

The environment list in the selector dropdown now supports filtering environments by name via a search input, displaying a 'No results found' message when the query matches nothing. Users can quickly focus the search field by pressing Backspace or any printable character, and clear the search text by pressing Escape or clicking the clear button. The component also renders a 'No Environment' option to deselect, shows color badges for each environment, and provides an empty state with Create and Import buttons when no environments exist.

packages/bruno-app/src/components/Environments/EnvironmentSelector/EnvironmentListContent · high confidence

The application now offers a significantly larger selection of visual themes, including new Gruvbox (Light/Dark with Soft, Medium, Hard variants), Cyberdream (Light/Dark), and Catppuccin (Latte, Frappé, Macchiato, Mocha) options alongside existing choices like Dracula, Nord, and VS Code. This central registry update ensures these new palettes are available for selection in the UI, allowing users to customize the application's appearance to their preferred aesthetic.

packages/bruno-app/src/themes · high confidence

Focus trapping for modal dialogs

The application now includes a \useFocusTrap\ hook that manages keyboard accessibility within modal windows. When a modal is active, the hook prevents the Tab key from moving focus to elements outside the modal, instead cycling focus between the first and last focusable elements inside the dialog. It also temporarily disables tab navigation for background elements to ensure they are skipped, and restores their original tab states when the modal closes.

packages/bruno-app/src/hooks/useFocusTrap · high confidence

Folder documentation editor with persistent scroll and save controls

The Folder Settings panel now includes a dedicated Documentation tab that allows users to view and edit folder documentation. This component integrates the shared DocsEditor to support both rich text and markdown modes, and it persists the user's scroll position across tab switches so they can resume editing where they left off. When in edit mode, a Save button is displayed to commit changes to the folder's root documentation.

packages/bruno-app/src/components/FolderSettings/Documentation · high confidence

Folder settings now support tags with inheritance

The Folder Settings pane now includes a new 'Settings' tab where users can manage folder-level tags. This feature allows tags to be assigned directly to folders and automatically inherits tags from parent folders in the collection hierarchy. The UI displays both the folder's own tags and the inherited ones, providing a unified view for organizing and filtering folder content.

packages/bruno-app/src/components/FolderSettings · high confidence

Folder-level HTTP header management with validation and bulk editing

Users can now define and manage HTTP headers at the folder level, which will be automatically included in every request within that folder. This new interface includes input validation to prevent invalid characters (such as spaces in names or newlines in values), an autocomplete feature for standard HTTP headers and MIME types, and a toggle for bulk editing mode to simplify mass updates. Changes are persisted via a dedicated save action.

packages/bruno-app/src/components/FolderSettings/Headers · high confidence

Folder-level script editing with tabbed pre/post scripts and scroll persistence

The Folder Settings panel now includes a dedicated Script section that lets you write and save pre-request and post-response scripts for all requests within a folder. These scripts are organized into two tabs (Pre Request and Post Response), with a status indicator showing errors if any nested request scripts fail. The component persists the scroll position of each editor across tab switches and saves changes via a dedicated Save button, ensuring your editing context is maintained while working with folder-level automation.

packages/bruno-app/src/components/FolderSettings/Script · high confidence

Form-URL-encoded params now support multiline values and descriptions

The Form-URL-encoded params editor in the Request Pane has been updated to allow multiline text in parameter values via the MultiLineEditor component, replacing previous single-line inputs. Additionally, a new description column has been added to each parameter row, enabling users to document their key-value pairs directly within the table. The component also supports reordering of parameters and persists scroll position and column widths across sessions.

packages/bruno-app/src/components/RequestPane/FormUrlEncodedParams · high confidence

Git remote collections now display as distinct rows with clone and management actions

The Collections sidebar now renders Git-backed collections that are not yet cloned locally as specific 'ghost' rows (GitRemoteCollectionRow). These rows display a Git badge and the collection name, and allow users to click to open a clone modal, copy the remote URL, or remove the remote via a context menu. This change integrates with the existing sidebar virtualization and multi-selection logic, ensuring these remote entries are handled consistently with local collections in the UI.

packages/bruno-app/src/components/Sidebar/Collections · high confidence

Git remote management and improved collection status handling in Workspace Overview

The CollectionsList component in the Workspace Overview now supports connecting and disconnecting Git remotes for individual collections via new ConnectGitRemote and RemoveGitRemote modals, which update the workspace.yml file without altering local files. The list also distinguishes between loaded, unloaded, and failed-to-open collections, displaying specific error messages (e.g., 'needs to be cloned first' or 'could not be opened') and preventing actions like renaming or sharing on uncloned or failed collections. A new StyledWrapper provides updated visual styling for collection cards, including remote URL indicators and status badges.

packages/bruno-app/src/components/WorkspaceHome/WorkspaceOverview/CollectionsList · high confidence

Global client certificate management in Preferences

The Client Cert Settings panel in Preferences now supports managing global client certificates. Users can add new certificates by specifying a domain and selecting either a standard certificate/key pair or a PFX file, with validation ensuring the correct files are provided for the chosen type. The interface includes a segmented control to toggle between cert types, file selection chips for easy identification, and a toggle to reveal or hide passphrases. Added certificates are immediately persisted to application preferences.

packages/bruno-app/src/components/Preferences/ClientCertSettings · high confidence

Global error and console capture for debugging

The application now automatically captures unhandled React component errors and console.error logs, forwarding them to the Redux debug logs store. This allows users to view detailed error information, including stack traces, source file locations, and serialized arguments, directly within the application's debugging interface.

packages/bruno-app/src/components/ErrorCapture · high confidence

HttpMethodSelector now supports custom HTTP methods

The HttpMethodSelector component in the Request Pane has been refactored to allow users to define and use custom HTTP methods. Instead of being limited to standard methods (GET, POST, PUT, etc.), users can now select '+ Add Custom' from the dropdown to enter a custom method name via a text input. The component handles case normalization (uppercasing), keyboard navigation (Enter to confirm, Escape to cancel), and maintains visual consistency with the existing theme and styling.

packages/bruno-app/src/components/RequestPane/QueryUrl/HttpMethodSelector · high confidence

Ignore nested folders in collections

Users can now ignore specific nested folders within a collection. A confirmation modal allows users to hide a folder and its contents from the collection by adding it to the ignore list in the configuration file (bruno.json or opencollection.yml), while simultaneously closing any open tabs associated with that folder's items.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/IgnoreCollectionItem · high confidence

Inbuilt Terminal with multi-session support and dynamic theming

The Console tab now includes an inbuilt terminal component that supports multiple concurrent sessions, allowing users to switch between and close individual terminal instances via a new sidebar list. The terminal display dynamically adapts to the application's current theme, mapping UI colors to the terminal's foreground, background, and syntax highlighting, and ensures the terminal gains focus automatically when opened.

packages/bruno-app/src/components/Devtools/Console/TerminalTab · high confidence

Initial implementation of the mock server Redux slice

This change introduces the core Redux state management for the mock server feature within the Bruno application. The new \mock-server\ slice defines the initial state structure for tracking server instances, request logs, and mock responses. It exposes a comprehensive set of async thunks to handle the full lifecycle of a mock server, including starting and stopping servers, refreshing routes, clearing logs, and syncing state with the backend via IPC. Additionally, it provides functionality to load, create, and save mock responses, establishing the foundational data flow for the mock server UI components.

packages/bruno-app/src/providers/ReduxStore/slices/mock-server · high confidence

Initial release of Bruno schema type definitions

This change introduces the \bruno-schema-types\ package, providing the foundational TypeScript interfaces for Bruno's data model. It defines the structure for collections, items (HTTP, GraphQL, gRPC, WebSocket, and App), environments (including inheritance and variable data types), authentication modes (OAuth 1.0/2.0, Akamai, etc.), and request/response bodies. This package serves as the single source of truth for the shape of Bruno collection files and environment configurations.

packages/bruno-schema-types · high confidence

Initial release of the Bruno collection schema package

The \packages/bruno-schema\ package is introduced to provide the official Yup-based validation schemas for Bruno collections, environments, and items. This change adds the core schema definitions (including support for variable data types, annotations, and request settings) along with comprehensive test coverage to ensure data integrity when saving or importing collections.

packages/bruno-schema · high confidence

Initialize Redux store with comprehensive state slices and middleware

The application now uses a centralized Redux store (via @reduxjs/toolkit) to manage state across multiple domains, including collections, tabs, notifications, global environments, logs, performance, workspaces, API specs, OpenAPI sync, mock server, chat, and collection migration. The store is configured with specific middlewares for tasks, draft detection, autosave, and snapshots, with an additional debug middleware available in development mode.

packages/bruno-app/src/providers/ReduxStore · high confidence

Inline collection creation in the sidebar

Users can now create new collections directly within the sidebar without navigating away. This change introduces the InlineCollectionCreator component, which provides an input field pre-filled with 'Untitled Collection' (Title Case), along with save and cancel buttons and an advanced options toggle. The component handles validation, displays toast notifications for errors or success, and automatically suggests unique names when creating collections in specific workspace paths.

packages/bruno-app/src/components/Sidebar/Collections/InlineCollectionCreator · high confidence

Introduce 'inherit' authentication mode with source linking

The Request Pane's Auth component now supports an 'inherit' mode, allowing requests to automatically use authentication settings defined at the collection or folder level. When this mode is active, the UI displays a read-only view of the inherited credentials and provides a clickable link to navigate directly to the source settings where the authentication is configured. This replaces the previous behavior where inheritance was not explicitly managed in the request UI, ensuring users can clearly see and access the origin of their request's auth configuration.

packages/bruno-app/src/components/RequestPane/Auth · high confidence

Introduce @usebruno/filestore package with .bru and YAML parsing support

The new @usebruno/filestore package provides a generic file storage and parsing layer for the Bruno API client, abstracting file format operations for requests, collections, folders, and environments. It currently supports Bruno's custom .bru format and includes a new default YAML format (yml) for collections. The package handles parsing and stringifying for HTTP, GraphQL, gRPC, and WebSocket requests, and includes specific fixes for status code handling in examples, OAuth2 additional parameters, and redaction of large text blocks for performance.

packages/bruno-filestore · high confidence

Introduce @usebruno/sqlite for typed, cached data access

Bruno now includes a new SQLite storage package that provides a typed, cached data layer for the Electron main process and React renderer. Users can author database migrations as TypeScript files and SQL statements using sqlc-style annotations, which are compiled into TypeScript literals at build time for type safety. The package exposes React Query hooks (useSqliteQuery, useSqliteMutation) for the renderer, enabling automatic cache invalidation across windows when mutations occur. It also includes a migration verification tool to ensure schema integrity against real data.

packages/bruno-sqlite · high confidence

Introduce AI Assist component for script and documentation generation

Adds a new AI Assist popup interface that allows users to generate tests, pre-request scripts, post-response scripts, and documentation via AI. The component provides a trigger button, a Tippy-rendered popup with suggestion chips, a text input, and a stop-generation button, integrating with the existing request and collection contexts to provide relevant prompts.

packages/bruno-app/src/components/AIAssist · high confidence

Introduce AI chat sidebar with code blocks, diff views, and popout support

The AI chat sidebar now renders assistant responses with dedicated code blocks (including copy-to-clipboard and streaming auto-scroll) and structured diff views that show additions/deletions with accept/reject actions and expandable hunks. The sidebar can be undocked into a separate popout window that mirrors the app’s styles and theme, and it supports resizing within the main UI. Context-aware prompt suggestions and placeholders are provided for app code, tests, scripts, and docs, and the prompt input automatically regains focus after a response completes.

packages/bruno-app/src/components/AiChatSidebar · high confidence

Introduce CollapsibleSection component for environment UI

A new CollapsibleSection component has been added to the Environments interface, providing a reusable UI element for grouping environment settings. This component renders a clickable header with a chevron icon that toggles the visibility of a content area, supports optional badges and action buttons, and applies specific styling for expanded and collapsed states to improve the organization of environment variables.

packages/bruno-app/src/components/Environments/CollapsibleSection · high confidence

Introduce HttpRequestPane with content indicators and AI Assist integration

The HttpRequestPane component has been introduced to manage the request configuration interface, featuring a tabbed layout for Params, Body, Headers, Auth, Vars, Script, Assert, Tests, Docs, App, and Settings. This component adds visual content indicators (counts or status dots) to tabs to show the presence of data or errors, such as script or test errors. It also integrates an AI Assist button into the tab bar for specific tabs (Docs, App, Script, Tests) and handles the conditional rendering of the App tab based on user settings.

packages/bruno-app/src/components/RequestPane/HttpRequestPane · high confidence

The ModifyCookieModal component now supports a raw-edit mode, allowing users to input or edit cookies as a raw string. When raw mode is enabled, the modal parses the string into form fields and displays validation errors (such as invalid formats or future-date requirements) directly in the UI. The modal also includes styled wrappers for consistent theming of info icons, required field indicators, error messages, and checkboxes, ensuring a cohesive user experience when adding or modifying cookies.

packages/bruno-app/src/components/Cookies/ModifyCookieModal · high confidence

Introduce ToolHint component with theme-aware styling and text-only support

A new ToolHint component has been added to the application, wrapping the react-tooltip library to provide consistent, theme-aware tooltips. The component automatically applies background and text colors from the current theme context (specifically using surface0 and text tokens) and enforces a high z-index (9999) to ensure visibility. It supports both internal anchoring (via a generated ID) and external anchoring (via anchorSelect or tooltipId), and strictly renders the provided text prop as plain text rather than HTML to prevent injection risks. Users will see tooltips that adapt to the active theme and display safely without HTML interpretation.

packages/bruno-app/src/components/ToolHint · high confidence

Introduce bruno-query package for deep object navigation and filtering

The new \packages/bruno-query\ package provides a \get\ function that enables deep navigation, filtering, and mapping of nested data structures. Users can now access nested properties using dot notation, traverse arrays with double dots (\..\), index specific items, and apply filters or mappers using either callback functions or simple object predicates (e.g., \{ id: 2, amount: 20 }\). This library is built with TypeScript, bundled via Rollup for both CommonJS and ESM outputs, and includes Jest tests to verify its query capabilities.

packages/bruno-query · high confidence

Introduce customizable keyboard shortcuts with cross-platform support

The application now supports user-defined keyboard shortcuts, allowing you to customize keybindings for actions like switching tabs, sending requests, and managing collections via the new preferences system. This change introduces a new hotkey provider that merges default bindings with user preferences, supports both Mac and Windows modifier keys (Command/Win, Ctrl, etc.), and includes helpers to format and display these shortcuts correctly across operating systems.

packages/bruno-app/src/providers/Hotkeys · high confidence

Introduce dedicated ErrorBanner component for displaying error lists

A new ErrorBanner component has been added to the application's UI library, providing a structured way to display multiple errors with distinct titles and messages. The component renders a scrollable container with a danger-themed left border, separating individual error entries with dividers, and includes a close button when an onClose handler is provided. This replaces ad-hoc error display logic with a reusable, styled component that integrates with the application's theme system.

packages/bruno-app/src/ui/ErrorBanner · high confidence

Introduce dedicated file editing mode with code editor and search capabilities

Users can now edit raw files (such as JavaScript or JSON) in a dedicated file mode, featuring a CodeMirror-based editor with syntax highlighting, linting, and a search bar that supports replace and replace-all operations with debouncing. This mode includes a save button to persist changes and handles scroll position persistence, addressing previous crashes that occurred during search operations within this view.

packages/bruno-app/src/components/FileEditor · high confidence

Introduce gRPC proto file and import path management hook

Added a new \useProtoFileManagement\ hook that centralizes the handling of gRPC protocol buffer configurations within a collection. This hook enables users to add and manage proto files and import paths, supporting both direct collection updates and draft-based configurations. It includes logic to load gRPC methods from proto files with local caching to improve performance, checks for file existence, and prevents duplicate entries for both proto files and import paths.

packages/bruno-app/src/hooks/useProtoFileManagement · high confidence

Introduce global search modal for collections and requests

Users can now use a new global search modal (triggered by Command+K) to quickly find and navigate to collections, folders, and requests across the active workspace. The search supports matching by name, URL, and file path, with results sorted by relevance and type. Selecting a result automatically expands the relevant folder structure in the sidebar and opens the item in a new tab. The modal also includes a shortcut to browse the official Bruno documentation.

packages/bruno-app/src/components/GlobalSearchModal · high confidence

Introduce new Documentation component with persistent scroll and dedicated editor

The Documentation tab now uses a new component structure that persists the user's scroll position across tabs and integrates a dedicated DocsEditor for rich text editing. This change ensures that when switching between tabs, the view returns to the previously scrolled location, and it provides a unified interface for editing collection documentation with support for both markdown and WYSIWYG modes.

packages/bruno-app/src/components/Documentation · high confidence

Introduce resizable Console panel in Devtools

A new Devtools component has been added to the application, providing a Console panel that users can interact with. The panel is resizable via a drag handle at the top, allowing users to adjust its height between a minimum of 150px and a maximum of 70% of the window height. The component integrates with the application's theme system for styling the drag handle and manages its own visibility state based on the Redux store's \isConsoleOpen\ flag.

packages/bruno-app/src/components/Devtools · high confidence

Introduce reusable ListGroup UI component

Added a new \ListGroup\ component and its styled wrapper to the UI library. This component provides a consistent, bordered list layout with support for row items containing leading icons, body content, and action buttons. It includes built-in handling for empty states (with customizable icon, title, and text) and an add button, while ensuring that action controls remain usable even when rows are disabled. This component serves as a foundational building block for list-based interfaces across the application.

packages/bruno-app/src/ui/ListGroup · high confidence

Introduce scoped persisted state hook for local storage

The application now includes a new \usePersistedState\ hook that synchronizes React component state with \localStorage\, allowing data to survive page reloads. This implementation supports a scoping mechanism via \PersistedScopeProvider\, enabling distinct persistence contexts (e.g., separating state for different tabs or editor views) to prevent key collisions. The hook automatically handles JSON serialization, default value fallbacks, and re-syncing state if the underlying storage key changes during the component's lifecycle.

packages/bruno-app/src/hooks/usePersistedState · high confidence

Introduce standalone GraphQL documentation explorer

Bruno now includes a standalone GraphQL documentation explorer module (bruno-graphql-docs) that provides a navigable interface for browsing GraphQL schema definitions. This component, forked from GraphiQL, renders schema details including root types, fields, arguments, directives, and enum values, and supports searching across the schema with debounced input. It is built as a reusable React component with TypeScript support and a dedicated Rollup build configuration.

packages/bruno-graphql-docs · high confidence

Introduce standalone collection-level apps with code/preview toggle

Users can now create and run standalone apps defined by .bru or .yml files at the collection or folder level. These apps appear as their own tab in the sidebar and provide a split view allowing users to toggle between a Code editor for writing the app logic and a Preview pane that renders the app in a sandboxed webview. The component handles environment inheritance, theme synchronization, and variable resolution specific to the collection context, enabling apps to interact with the collection's requests and state.

packages/bruno-app/src/components/CollectionApp · high confidence

Introduces autosave middleware for requests, folders, and environments

The application now automatically saves changes to requests, folders, collections, and environments (including global and collection-specific drafts) after a short delay. This middleware intercepts specific Redux actions related to editing content, headers, variables, scripts, and settings, scheduling background saves to prevent data loss. It also handles saving existing drafts on startup and provides user feedback via toast notifications if an auto-save operation fails.

packages/bruno-app/src/providers/ReduxStore/middlewares/autosave · high confidence

Introduces local chat history persistence and refined AI context/redaction logic

The AI utilities now persist conversation history locally using an IndexedDB store (bruno-ai-chats), enabling users to save, load, list, and delete chat sessions tied to specific file paths. Additionally, the AI context building logic has been updated to include request documentation and the last response in generation prompts, while variable redaction now strictly respects the 'Redact secret variable values' preference for pattern-matched secrets (in addition to explicitly flagged secrets), ensuring sensitive data is handled consistently before being sent to the AI backend.

packages/bruno-app/src/utils/ai · high confidence

Introduction of Basic Authentication UI with sensitive field protection

The Basic Auth section of the Request Pane now features a dedicated interface for entering username and password credentials. The password field is configured as a secret input, and the component includes logic to detect sensitive data, displaying a warning message if the password is identified as sensitive. The UI styling is handled by a new styled wrapper that applies theme-aware fonts and colors, ensuring consistency with the application's design system.

packages/bruno-app/src/components/RequestPane/Auth/BasicAuth · high confidence

Introduction of SingleLineEditor component with CodeMirror integration

The SingleLineEditor component has been introduced to replace standard input fields in various parts of the application. Built on CodeMirror, it provides enhanced editing capabilities including syntax highlighting for Bruno variables, autocomplete hints, and support for masking sensitive data. The component also features dark mode styling, link-awareness for clickable URLs, and specific keybindings (such as Enter to run requests). This change affects how users interact with single-line input fields, offering a richer, more consistent editing experience across the app.

packages/bruno-app/src/components/SingleLineEditor · high confidence

Introduction of a custom styled RadioButton component

A new RadioButton component has been added to the application, replacing default browser styling with a custom implementation using styled-components. This component provides a consistent visual appearance for radio inputs across the UI, featuring specific styling for checked, disabled, and hover states that aligns with the application's theme colors. It supports standard props like checked, disabled, onChange, and name, ensuring it can be used as a drop-in replacement for native radio inputs while offering enhanced visual feedback and accessibility through proper label association.

packages/bruno-app/src/components/RadioButton · high confidence

Introduction of accessible Tab component

A new reusable Tab component has been added to the application's UI library. This component renders a tab element with support for active states, optional badge counts, and full keyboard accessibility (Enter/Space activation). It implements ARIA roles and attributes to ensure screen reader compatibility, providing a consistent and accessible foundation for tabbed interfaces within the Bruno app.

packages/bruno-app/src/components/Tab · high confidence

Introduction of core UI infrastructure and global styling

This change establishes the foundational UI layer for the application by introducing a new global styles file that defines theme-aware styling for buttons, tooltips, and CodeMirror editors, alongside a reusable Spinner component for loading states. The application entry point has been updated to wrap the app in a React DnD provider to support drag-and-drop interactions and dynamically loads the diff2html library for displaying code diffs.

packages/bruno-app/src · high confidence

Introduction of the StatusBar component with theme-aware styling and interactive controls

The application now includes a new StatusBar component located at the bottom of the interface, featuring a flex-based layout that adapts to the current theme (using theme variables for background, border, and text colors). This bar provides quick access to key features: clicking the Settings icon opens the Preferences tab, the Palette icon triggers the ThemeDropdown, the GitHub icon opens the repository in an external browser, and the Search button triggers the global search via keybindings. The Dev Tools button opens the console and dynamically displays an error count badge when logs contain errors. Additionally, a Cookies button opens a modal dialog for cookie management, and the current application version is displayed on the right side.

packages/bruno-app/src/components/StatusBar · high confidence

Large Response Warning Prompt

A new warning prompt has been added to the Response Pane to alert users when a response exceeds 10 MB, which could degrade performance. The component displays the current response size alongside the supported limit and provides three actions: viewing the response content, downloading it to a file, or copying it to the clipboard.

packages/bruno-app/src/components/ResponsePane/LargeResponseWarning · high confidence

Mock Server UI components for creating, cloning, and managing responses

Added the frontend interface for the Mock Server feature, including modals to create new mock servers (with source type selection for collections or API specs), clone existing instances, and delete servers. The update introduces UI for managing individual mock responses, allowing users to define matching rules (headers, query, body), generate responses from API specs, and test them via a 'Try' button that starts the server. It also includes a list view for responses and a request pane to preview how rules match incoming requests.

packages/bruno-app/src/components/MockServer · high confidence

Mock response editor utility functions and tests

Added utility functions to convert between mock response definitions and the internal editor item structure used by Bruno's UI, including handling of request/response bodies, status codes, and rule conditions. The implementation ensures that internal editor identifiers (UIDs) for rule conditions are stripped before saving, preventing stale references, and provides corresponding unit tests to verify the round-trip conversion of mock response data.

packages/bruno-app/src/utils/mock-server/mock-responses · high confidence

Mock server response management and validation logic

This change introduces the core utility logic for managing mock responses and server instances within the Bruno app. It adds validation for mock response names (enforcing length limits, rejecting special characters and Windows reserved names) and port numbers (ensuring they are integers within the 1–65535 range). It also implements logic to sync mock responses from examples and specs, build demo requests that satisfy response rules, and handle mock server instance lifecycle events like file changes and deletions.

packages/bruno-app/src/utils/mock-server · high confidence

Multi-selection and bulk actions for sidebar collections

Users can now select multiple items in the sidebar collections tree using Ctrl/Cmd+Click for individual toggling and Shift+Click for range selection. A new bulk actions menu allows applying operations like remove or delete to the selected items at once. Selections are automatically cleared when pressing Escape. Additionally, a new error guard prevents application crashes caused by stale drag-and-drop targets during cross-folder moves.

(repo-wide) · high confidence

Multi-selection deletion for collections, requests, folders, apps, and examples

The DeleteCollectionItems modal now supports deleting multiple items at once. When a user selects several items, the modal displays a generic 'Delete Items' title and lists the counts of each type (folders, requests, apps, and response examples) in the confirmation message. Upon confirmation, the system deletes all selected items, closes any open tabs associated with the deleted folders or requests, and clears the sidebar selection. It also handles response examples by deleting them and saving the parent request, while ensuring that failures in deleting one item do not prevent the deletion of others.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/DeleteCollectionItems · high confidence

Multipart form params now support multi-file uploads with per-part content-type and drag-and-drop reordering

The MultipartFormParams component has been rewritten to allow users to attach multiple files to a single form field, displaying them as removable chips and automatically calculating the Content-Type based on file extensions. Users can now reorder form entries via drag-and-drop, persist scroll position across tabs, and benefit from improved dark-mode styling and resizable table columns. The UI also supports setting a custom Content-Type for each part and uses single-line editors for better keyboard navigation.

packages/bruno-app/src/components/RequestPane/MultipartFormParams · high confidence

New AI settings tabs for autocomplete, security, and OpenAI-compatible endpoints

The AI section in Preferences now includes three new tabs alongside Configuration. The Autocomplete tab lets you enable inline ghost-text suggestions, choose a model, and select a trigger mode (aggressive, debounced, or manual). The Security tab provides controls to redact sensitive headers, body keys, response values, and secret variables, with options to add custom redacted headers and variables. The Configuration tab has been expanded to support OpenAI-compatible endpoints, allowing you to add custom providers, manage API keys, and enable specific models for each endpoint.

packages/bruno-app/src/components/Preferences/AI · high confidence

New API Designer panel with split-pane YAML editor and Swagger preview

The ApiSpecPanel component has been replaced with a new 'API Designer' interface that provides a split-pane view for editing and previewing OpenAPI specifications. Users can now edit YAML/JSON specs in a code editor on the left and see a live Swagger UI preview on the right. The split pane is resizable via drag, with the width preference persisted in Redux. The panel includes validation for valid OpenAPI specs, displaying specific error messages for empty, invalid YAML/JSON, or non-OpenAPI content, and handles timeouts for large specs. It also supports multi-file specs by inlining referenced files for the preview while keeping the editor view accurate.

packages/bruno-app/src/components/ApiSpecPanel · high confidence

New API Key authentication component with header and query parameter placement options

The ApiKeyAuth component in the Request Pane has been introduced to allow users to configure API Key authentication. This new UI provides input fields for the Key and Value, and includes a dropdown selector to choose where the key is added: either in the HTTP Header or as a Query Parameter. If no placement is specified, it defaults to the header. The component uses the application's theme for styling and integrates with the existing Redux store to update authentication settings.

packages/bruno-app/src/components/RequestPane/Auth/ApiKeyAuth · high confidence

New API Spec management UI in the sidebar

This change introduces a dedicated API Spec section in the application sidebar, allowing users to view, open, create, and close API specifications directly from the interface. The new UI includes an ApiSpecItem component for listing specs with keyboard navigation and action menus, a CreateApiSpec modal that supports generating specs from blank templates or existing Bruno collections (including environment variable mapping), and a CloseApiSpec confirmation modal. A key behavioral fix ensures API specs are correctly matched and displayed on Windows by normalizing path separators (backslashes vs. forward slashes) when pairing workspace entries with loaded specs, preventing the list from appearing empty after workspace switches.

packages/bruno-app/src/components/Sidebar/ApiSpecs · high confidence

New Accordion component for collapsible UI sections

Added a new Accordion component to the Bruno app, allowing users to organize content into collapsible sections. The component supports a default open index, toggles visibility by clicking headers, and uses styled-components for theming. Included are unit tests verifying rendering, state management, and interaction behavior.

packages/bruno-app/src/components/Accordion · high confidence

New ActionIcon component with accessible, theme-aware styling

A new ActionIcon component has been introduced in the UI library, providing a reusable icon button that supports multiple sizes (xs through xl) and visual variants (defaulting to 'subtle'). The component is built with accessibility in mind, accepting label, title, and aria-label props to ensure proper screen reader support, and includes theme-aware styling for colors, hover states, and disabled states. It allows for custom colors, hover color overrides, and polymorphic rendering via a component prop, making it a flexible building block for interactive elements across the application.

packages/bruno-app/src/ui/ActionIcon · high confidence

New App Code Editor for Request-Level Apps

A new AppCodeEditor component has been added to the Request Pane, allowing users to write and manage HTML code for request-level apps. This editor includes a toolbar with a 'Preview' button that opens the app view in a separate tab, replacing the standard request/response panes for that specific request. The component handles code editing, saving, and previewing, integrating with the existing Redux store and theme system.

packages/bruno-app/src/components/RequestPane/AppCodeEditor · high confidence

New Authorization Code OAuth2 configuration UI

The Request Pane now includes a dedicated UI for configuring the OAuth2 Authorization Code grant type. This new component allows users to set the Callback URL, Authorization URL, Access Token URL, Client ID, Client Secret, Scope, and State parameters. It also provides a toggle to use the system browser for the OAuth flow and includes support for PKCE. The interface is styled to match the application's theme and includes warnings for sensitive fields like the Client Secret.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/AuthorizationCode · high confidence

New Beta Features preferences section with data-driven UI

A new Beta Features section has been added to the Preferences panel, allowing users to toggle experimental capabilities directly from the UI. The component is data-driven, rendering a list of features defined in a configuration array, and currently includes toggles for AI Assistant, File cache, Akamai EdgeGrid, Mock Server, and gRPC Scripting. Each feature entry displays a label, description, and optional documentation link, with the Mock Server feature specifically enabled by default. The interface uses debounced auto-save to persist changes to user preferences.

packages/bruno-app/src/components/Preferences/Beta · high confidence

New Button component with customizable styles and states

The application introduces a new Button component in the Bruno app UI library, replacing or supplementing previous implementations. This component supports multiple sizes (xs, sm, base, md, lg), visual variants (filled, outline, ghost), and colors (primary, secondary, success, warning, danger). It also allows customization of border radius (rounded), font weight, icon positioning (left/right), and includes built-in support for loading and disabled states. A Storybook story file has been added to document and visualize these options.

packages/bruno-app/src/ui/Button · high confidence

New Cache settings in Preferences

A new Cache section has been added to the Preferences UI, allowing users to manage performance-related caching. Users can now toggle a File cache (currently in Beta) to speed up workspace loading by caching opened collections, view the current cache size, and clear it if needed. Additionally, users can toggle SSL session caching to reuse TLS connections for faster handshakes, with an option to clear the SSL session cache.

packages/bruno-app/src/components/Preferences/Cache · high confidence

New Changelog Tab for Release Notes

A new Changelog tab has been added to the application, allowing users to view release notes directly within the UI. This tab renders the CHANGELOG.md file for the current version (v4.2.0) using a styled Markdown component, featuring support for badges, images, and internal navigation links that open the Preferences tab.

packages/bruno-app/src/components/ChangelogTab · high confidence

New Checkbox UI component with indeterminate state support

The Bruno app now includes a new Checkbox component in the UI library. It supports four sizes (sm, md, lg, xl), controlled state via checked and onChange props, and a tri-state indeterminate mode for scenarios like 'select all' lists. The component handles accessibility through labels and ARIA attributes, respects disabled and required states, and ensures the indeterminate visual state persists correctly across renders and user interactions.

packages/bruno-app/src/ui/Checkbox · high confidence

New Clear Timeline button in Response Pane

A new 'Clear Timeline' button has been added to the Response Pane, allowing users to remove the request history for a specific item without affecting other response data. This component integrates with the Redux store to dispatch a clearRequestTimeline action when clicked, providing a distinct way to manage timeline state separate from clearing the entire response.

packages/bruno-app/src/components/ResponsePane/ClearTimeline · high confidence

New Client Credentials OAuth2 configuration UI

The Request Pane now includes a dedicated interface for configuring the OAuth2 Client Credentials grant type. Users can set the Access Token URL, Client ID, Client Secret, and Scope, and choose whether to place credentials in the request body or the Basic Auth header. The UI also allows selecting the token source (Access Token or ID Token), specifying a Token ID, and choosing whether the token is added to headers or the URL, with support for additional parameters and sensitive field warnings.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/ClientCredentials · high confidence

New Clone Collection dialog with customizable folder names and location

Users can now clone collections via a new modal dialog that allows them to specify a custom name, choose a specific filesystem location, and define a distinct folder name for the cloned collection. The dialog automatically suggests a default location based on the active workspace (using the user's general default location for the default workspace) and pre-fills the folder name, but users can edit the folder name independently of the collection name. It includes validation for name length and filesystem compatibility, and provides a browse button to select the target directory.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CloneCollection · high confidence

New CodeMirror search and replace component with replace-all and debouncing

The \CodeMirrorSearch\ component has been introduced to provide a dedicated search and replace interface for the code editor. This update adds support for replacing single matches and replacing all occurrences at once, along with debounced search input to improve performance. The component includes a visual indicator for the current match position among total results, supports regex, case-sensitivity, and whole-word matching, and features a toggleable replace row. It also handles keyboard shortcuts for opening the search bar and replacing text, and includes a comprehensive test suite to ensure correct behavior.

packages/bruno-app/src/components/CodeMirrorSearch · high confidence

New CodeSnippet component for displaying error and warning contexts

A new CodeSnippet component has been introduced to display code lines with visual highlighting for errors and warnings. It supports both a flat list of lines and grouped 'hunks' with ellipsis separators, allowing users to see specific source context for script errors. The component distinguishes between error and warning states via a variant prop, applying distinct color coding and left-border indicators to help users quickly identify issues in their scripts.

packages/bruno-app/src/components/CodeSnippet · high confidence

New Collection Settings Overview layout

The Collection Settings page now features a dedicated Overview tab that displays the collection name alongside an Info section and a RequestsNotLoaded status indicator on the left, while the right side presents the collection's documentation via the Docs component, all within a responsive two-column grid layout.

packages/bruno-app/src/components/CollectionSettings/Overview · high confidence

New Collection Settings UI with tabbed configuration and status indicators

The Collection Settings panel has been redesigned into a tabbed interface, allowing users to configure Overview, Headers, Vars, Auth, Script, Tests, Presets, Proxy, Client Certificates, and Protobuf settings in one place. The new UI includes visual status indicators (dots or counts) on tabs that have active configurations, such as the number of enabled headers or variables, and integrates AI Assist and documentation actions directly into the tab bar for supported sections.

packages/bruno-app/src/components/CollectionSettings · high confidence

New CountBadge component and UI design system barrel

The \packages/bruno-app/src/ui\ directory now includes a new \CountBadge\ component, a pill-shaped badge supporting 'default', 'danger', and 'warning' variants in 'sm' and 'md' sizes, styled via \styled-components\. Additionally, a public entry point (\index.js\) has been created to export a set of UI primitives (including Button, Checkbox, SegmentedControl, etc.) from a single \ui\ barrel, accompanied by an \Introduction.mdx\ file documenting usage conventions and theme integration for the design system.

packages/bruno-app/src/ui · high confidence

New Debug tab and error details panel in Developer Tools

The Console panel now includes a dedicated Debug tab that lists captured errors with their message, source location, and timestamp. Selecting an error opens a resizable details panel showing full error information, stack traces, and arguments, along with a button to generate a GitHub issue report. The console also now supports improved logging display for JavaScript Set and Map objects, transforming them into readable formats within the log output.

packages/bruno-app/src/components/Devtools/Console · high confidence

New DocsEditor component with rich text and Markdown modes

The collection documentation interface now uses a new DocsEditor component that supports both WYSIWYG rich text editing and Markdown source editing. Users can toggle between these modes using a switch in the edit toolbar, with the editor defaulting to rich text mode when entering edit mode. The component integrates with the application's theme and font preferences, handles scroll persistence, and supports saving via Ctrl/Cmd+S keybindings.

packages/bruno-app/src/components/Documentation/DocsEditor · high confidence

New Golden Edition pricing modal in the sidebar

A new 'Golden Edition' modal has been added to the sidebar, allowing users to view and purchase individual ($19) or organizational ($49/user) perpetual licenses. The component displays feature lists for each tier, handles theme-based styling for light and dark modes, and tracks user interactions (modal open, buy click) via PostHog using an environment variable for the API key.

packages/bruno-app/src/components/Sidebar/GoldenEdition · high confidence

New GraphQL Variables editor with customizable font settings

A new GraphQL Variables editor component has been added to the Request Pane, allowing users to input and manage GraphQL variables as JSON. The editor integrates with the application's theme system and respects user preferences for code font family and size, ensuring a consistent and customizable coding experience within the request interface.

packages/bruno-app/src/components/RequestPane/GraphQLVariables · high confidence

New GraphQL query builder with interactive tree interface

Bruno now includes a new GraphQL query builder feature that allows users to construct queries via an interactive tree interface rather than writing raw GraphQL text. This change introduces a new \useQueryBuilder\ React hook and a \queryBuilder\ utility module that parses the GraphQL schema to expose available root types (Query, Mutation, Subscription), fields, arguments, and input objects. Users can visually select fields, toggle arguments, and manage variables, with the hook handling the synchronization between the tree state and the generated GraphQL query string and variables JSON.

packages/bruno-app/src/hooks/useQueryBuilder, packages/bruno-app/src/utils/graphql · high confidence

New HTTP status code display component in response pane

The Response Pane now uses a dedicated StatusCode component to display HTTP response status codes and phrases. This component maps numeric codes (e.g., 200, 404, 500) to their standard text descriptions (e.g., 'OK', 'Not Found', 'Internal Server Error') and applies visual styling based on the status category: success codes (2xx) are styled as 'text-ok', while client errors (4xx), server errors (5xx), and redirects (3xx) are styled as 'text-error'. It also supports a 'STREAMING' indicator for ongoing requests.

packages/bruno-app/src/components/ResponsePane/StatusCode · high confidence

New HeightBoundContainer component for constrained vertical layouts

A new HeightBoundContainer UI component has been added to the Bruno app. This component provides a flex-based layout system that constrains its children to a specific height, enabling vertical scrolling within bounded areas. It is designed to help manage space in panes like the request/response editor by ensuring content stays within defined boundaries while remaining scrollable.

packages/bruno-app/src/ui/HeightBoundContainer · high confidence

New Help tooltip component with configurable placement and icons

A new Help component has been introduced to replace the legacy InfoTip, providing a tooltip that appears on hover with configurable placement (top, bottom, left, right), custom width, and support for both default question/info icons and custom icon components. The tooltip is rendered via a portal to avoid z-index conflicts, and its styling is driven by theme tokens for background, border, and shadow.

packages/bruno-app/src/components/Help · high confidence

New JavaScript Sandbox Mode selector in Security Settings

A new dropdown selector has been added to the Security Settings component, allowing users to choose between 'Safe Mode' and 'Developer Mode' for JavaScript execution. Safe Mode, which is set as the default and recommended option, restricts JavaScript from accessing the filesystem or executing system commands. Developer Mode grants full access but includes a warning to use only with trusted collections. The selection is persisted via Redux and reflected by a toolbar icon that changes based on the active mode.

packages/bruno-app/src/components/SecuritySettings · high confidence

New Manage Workspace interface for workspace management

A new Manage Workspace screen has been added, allowing users to view a sorted list of all workspaces, open the active workspace, reveal the workspace folder in the file system, rename workspaces, and remove non-default workspaces via a confirmation modal. The interface also provides a dedicated button to create new workspaces and includes an option to open a workspace's folder in the terminal.

packages/bruno-app/src/components/ManageWorkspace · high confidence

New Markdown component for read-only documentation rendering

A new Markdown component has been added to the application, wrapping the existing RichTextEditor in a read-only mode. This component renders markdown content without allowing user edits, while still supporting double-click events and configurable options such as HTML allowance and link popover visibility. It is designed to display documentation content consistently across the UI.

packages/bruno-app/src/components/MarkDown · high confidence

New Modal and SelectionList components with standardized theming and behavior

The application introduces a new, reusable Modal component in \packages/bruno-app/src/components/Modal\ and a SelectionList component in \packages/bruno-app/src/components/SelectionList\. The Modal provides a consistent dialog experience with support for keyboard navigation (Escape to close, Enter to confirm), focus trapping, and customizable headers, footers, and sizes, all styled via the application's theme tokens. The SelectionList offers a searchable, selectable list interface with 'Select All' functionality and fuzzy search capabilities. Both components are accompanied by unit tests to verify their rendering and interaction behaviors.

packages/bruno-app/src/components/Modal · high confidence

New Network tab with sortable, resizable columns

The Devtools Console now includes a Network tab that lists HTTP requests with columns for Method, Status, Domain, Path, Time, Duration, and Size. Users can click column headers to sort the list (ascending, descending, or clear) and drag column borders to resize them; both sort preferences and column widths are persisted across sessions.

packages/bruno-app/src/components/Devtools/Console/NetworkTab · high confidence

New OAuth2 token viewer with decoded payload and expiry tracking

The OAuth2 authentication section in the Request Pane now includes a dedicated token viewer component. This new UI displays Access, Refresh, and ID tokens with a copy-to-clipboard feature, and automatically decodes JWT payloads to show their contents. It also provides a live countdown timer indicating when each token expires, helping users manage token validity without leaving the application.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/Oauth2TokenViewer · high confidence

New OpenAPI Spec tab with drag-to-resize and remote fallback

A new OpenAPI Spec tab component has been added to the application, providing a dedicated view for OpenAPI specifications. This tab supports drag-to-resize for the split pane layout, with the pane width persisted in Redux state. It automatically loads local spec files via IPC and gracefully falls back to fetching from a configured remote URL if the local file is missing, displaying a visual indicator when the content is sourced remotely. The spec content is pretty-printed for readability, and clear loading and error states are shown to the user.

packages/bruno-app/src/components/OpenAPISpecTab · high confidence

New Password Credentials OAuth2 grant type UI

The application now includes a dedicated user interface for configuring the OAuth2 Password Credentials grant type. This new component allows users to input the Access Token URL, Username, Client ID, and Client Secret, with support for marking sensitive fields like passwords and secrets. It also provides controls to specify where credentials are added (Request Body or Basic Auth Header), select the token source (Access Token or ID Token), and define how the token is placed in requests (Header or URL).

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/PasswordCredentials · high confidence

New PathDisplay component for consistent file and folder naming

A new PathDisplay component has been introduced to standardize the visual representation of file and folder names within the application. This component renders a styled wrapper that displays an icon (file or folder) alongside the base name, utilizing specific theme colors for the name container and separators. It serves as the UI building block for the recently added support for custom filenames on requests and folders, ensuring a consistent look and feel across the path display areas.

packages/bruno-app/src/components/PathDisplay · high confidence

New Performance monitoring tab in Developer Tools

A new Performance tab has been added to the Developer Tools, allowing users to monitor system resources in real-time. The component displays a dashboard with cards for CPU usage, memory consumption, process uptime, and the main process ID, with color-coded indicators for high usage. Users can switch between a cumulative view of all processes and detailed metrics for specific individual processes via a dropdown selector. The monitoring starts automatically when the tab is opened and stops when it is closed, pulling data from the application's internal system monitoring service.

packages/bruno-app/src/components/Devtools/Performance · high confidence

New Playwright test infrastructure for Electron app

This change introduces the foundational Playwright testing setup for the Bruno Electron application. It adds \playwright/electron.ts\ to launch the Electron app and capture its console output, \playwright/codegen.ts\ to enable the Playwright recorder for generating test scripts, and \playwright/index.ts\ which defines the core test fixtures. These fixtures include utilities for managing user data directories, handling graceful app closure to prevent crash reports, installing fake clipboard mocks, and supporting test tracing. This infrastructure enables reliable end-to-end testing of the desktop application.

playwright · high confidence

New Proto File Dropdown with Import Path Support

The gRPC request pane now features a dedicated ProtoFileDropdown component that allows users to select proto files and manage import paths directly from the request interface. This new UI element introduces a mode toggle between 'Proto File' and 'Reflection' modes, and when in Proto File mode, it provides tabs for managing both the selected proto file and configured import paths. Users can browse for new proto files or import directories, toggle import paths on or off, and access collection protobuf settings, with all styling integrated into the application's theme system.

packages/bruno-app/src/components/RequestPane/GrpcQueryUrl/ProtoFileDropdown · high confidence

New Protobuf collection settings UI with theme support

The Protobuf section in Collection Settings now features a dedicated UI component that manages proto files and import paths. This update introduces a styled interface using the application's theme system for consistent visual appearance, including support for displaying file lists, handling invalid file paths, and managing import directories. Users can now add, remove, and replace proto files and import paths directly within the collection settings, with visual indicators for missing files and tooltips explaining best practices for file placement.

packages/bruno-app/src/components/CollectionSettings/Protobuf · high confidence

New Redux slices for API specs, AI chat, and collection migration

The Redux store now includes dedicated slices for managing API specification files (apiSpec), the AI chat sidebar and conversation history (chat), and the in-place migration of collections to YAML format (collection-migration). The apiSpec slice tracks spec files, their content, and the active spec, while the chat slice manages AI conversation state, streaming messages, and tool activity. The collection-migration slice drives the UI modal and progress tracking for the bru-to-yml migration process, ensuring the state persists even while the collection is removed from the store during disk migration.

packages/bruno-app/src/providers/ReduxStore/slices · high confidence

New ReorderTable component for draggable row management

A new ReorderTable component has been introduced to enable users to reorder table rows via drag-and-drop interactions. This component manages the row order state using useMemo and provides visual feedback through hover states and drag handles (grip and minus icons) on the first cell of each row. It exposes an updateReorderedItem callback to notify parent components when the row sequence changes, facilitating flexible table layouts where row order is user-configurable.

packages/bruno-app/src/components/ReorderTable · high confidence

New Request Details Panel in Devtools Console

A new Request Details Panel has been added to the Devtools Console, allowing users to inspect specific request and response data via a tabbed interface. The panel displays General request information (URL, method), Request and Response Headers in structured tables, and the Request Body as formatted text. The Response tab integrates the existing QueryResponse component to render response data and buffers, while the Network tab visualizes the request timeline using the Network component. The UI is styled using the application's theme variables for consistent theming across console components.

packages/bruno-app/src/components/Devtools/Console/RequestDetailsPanel · high confidence

New Response Download component for saving response data to file

A new ResponseDownload component has been introduced in the ResponsePane to handle saving HTTP response data to a local file. This component exposes a download button (or accepts custom children) that triggers an IPC call to save the response buffer, providing user feedback via toast notifications for success or failure. It intelligently disables the download action when no response data is available or when a streaming response is currently running, ensuring users cannot initiate downloads for incomplete or active streams.

packages/bruno-app/src/components/ResponsePane/ResponseDownload · high confidence

New Response StopWatch component for streaming request timing

A new ResponseStopWatch component has been added to the ResponsePane to display the elapsed time for streaming requests. It calculates duration from a provided start timestamp, updates every 100ms, and handles edge cases such as missing timestamps or future dates by showing zero. The component is styled using the application's theme and includes tests to verify correct time derivation, persistence across remounts, and handling of invalid inputs.

packages/bruno-app/src/components/ResponsePane/ResponseStopWatch · high confidence

New Runner Timeline component displays main, OAuth2, and scripted request events

The Response Pane now includes a new Runner Timeline component that aggregates and displays execution events for a single request run. This component renders the main request/response pair alongside any OAuth2 debug entries and scripted request entries (such as pre-request scripts), sorting them chronologically. Users can now see a unified history of all steps involved in a request execution, including OAuth2 token acquisition flows and script phases, directly within the response view.

packages/bruno-app/src/components/ResponsePane/RunnerTimeline · high confidence

New Save Transient Request modal with collection and folder navigation

Users can now save unsaved transient requests through a dedicated modal that supports navigating within collections, selecting specific folders, and creating new folders or collections on the fly. The interface includes breadcrumb navigation for deep folder structures, search filtering for folders, and visual loading states while collections mount, ensuring users can precisely place their requests before saving or discarding them.

packages/bruno-app/src/components/SaveTransientRequest · high confidence

New SegmentedControl component with outlined variant and disabled states

A new SegmentedControl component has been added to the UI library, allowing users to select a single option from a list of items via a radio-group interface. This component supports an 'outlined' visual variant in addition to the default solid style, enables disabling the entire control or individual segments, and accepts an array of items for data-driven rendering. It includes comprehensive test coverage and Storybook documentation to guide usage.

packages/bruno-app/src/ui/SegmentedControl · high confidence

New SkippedPathsWarning component for import errors

A new SkippedPathsWarning component has been added to the application to handle cases where certain items (such as API requests or folders) are skipped during an import because their configuration could not be read. This component displays a warning message with a count of skipped items and provides a toggleable list to view the specific paths that were affected. It also includes a new SelectionFooter styled component, likely used to support the visual layout of this warning or related selection states.

packages/bruno-app/src/components/SelectionFooter, packages/bruno-app/src/components/SkippedPathsWarning · high confidence

New StatusBadge component for consistent status indicators

A new reusable StatusBadge component has been added to the UI library, allowing users to display status indicators with configurable themes, variants (light, filled, outline, ghost), sizes (xs, sm, md), and border radii. This component standardizes how status messages (such as errors, warnings, or success states) are visually presented across the application, replacing ad-hoc styling with a consistent, theme-aware system.

packages/bruno-app/src/ui/StatusBadge · high confidence

A new Support modal has been added to the application, providing users with direct access to the Bruno documentation, GitHub repository, issue tracker, Discord community, and Twitter account. The modal is styled to respect the current theme and includes icons for each link, improving discoverability of support resources.

packages/bruno-app/src/components/BrunoSupport · high confidence

New Test Results display in Response Pane

The Test Results tab in the Response Pane now features a dedicated UI component that organizes test outcomes into four collapsible sections: Pre-Request Tests, Post-Response Tests, Tests, and Assertions. Each section displays a summary of passed and failed counts, and individual results are shown with pass/fail icons and error messages. The component also persists the scroll position across tab switches to maintain context when navigating between responses.

packages/bruno-app/src/components/ResponsePane/TestResults · high confidence

New ToggleSelector component for request settings

A new ToggleSelector component has been added to the Request Pane settings, providing a customizable toggle switch with small, medium, and large size options. It supports labels, descriptions, disabled states, and theme-aware styling for the toggle background color, allowing consistent UI controls for settings like URL query parameter encoding.

packages/bruno-app/src/components/RequestPane/Settings/ToggleSelector · high confidence

New ToggleSwitch component with size variants and controlled state support

A new ToggleSwitch component has been added to the application, providing a customizable toggle UI that supports multiple sizes (from '2xs' to '2xl') and allows for custom active colors. The component is designed to work as a controlled component, accepting an \isOn\ prop and a \handleToggle\ callback, ensuring that state changes are managed by the parent component. It includes a new styled wrapper defining the visual layout and transitions for the switch, along with a comprehensive test suite verifying its rendering, interaction, and controlled behavior.

packages/bruno-app/src/components/ToggleSwitch · high confidence

New UI components for examples interface

Added a set of reusable UI components to support the examples feature: a styled Checkbox with theme-aware colors and disabled states, a TruncatedText component that dynamically expands/collapses long text with a toggle button, and new SVG icons (IconCheckMark, IconCaretDown, IconEdit) used within these components.

(repo-wide) · high confidence

New UI components for icons and HTTP method badges

The application now includes dedicated React components for displaying informational icons (InfoCircle, QuestionCircle) and HTTP method badges (MethodBadge). The icon components provide consistent, scalable SVG icons with pointer cursor support, while the MethodBadge component renders normalized HTTP method labels (e.g., GET, POST) with theme-aware coloring and configurable sizes (md, sm), enhancing the visual consistency of request details in the UI.

packages/bruno-app/src/components/Icons/InfoCircle, packages/bruno-app/src/components/Icons/QuestionCircle, packages/bruno-app/src/ui/MethodBadge · high confidence

New WebSocket message list component with detailed inspection capabilities

The WebSocket response pane now uses a dedicated WSMessagesList component to display incoming, outgoing, info, and error messages. This update introduces a virtualized list for better performance with large message sets, allows users to expand individual messages to view their content, and provides tabs to switch between raw hexdump and parsed JSON/RAW text views. Messages are visually distinguished by type (incoming, outgoing, info, error) with specific icons and colors, and new messages are highlighted briefly upon arrival.

packages/bruno-app/src/components/ResponsePane/WsResponsePane/WSMessagesList · high confidence

New XML response preview with tree view and error handling

The Response Pane now includes a dedicated XmlPreview component that renders XML responses as an interactive, expandable tree structure. This new feature supports syntax highlighting, clickable links within XML values, and chunked rendering for large arrays to maintain performance. It also provides robust error handling, displaying clear error banners for invalid input, malformed XML, or empty responses, ensuring users receive immediate feedback when XML cannot be parsed.

packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview/XmlPreview · high confidence

The \packages/bruno-requests\ package has been introduced to centralize HTTP request handling, featuring support for Digest, OAuth 1.0, OAuth 2.0, NTLM, and Akamai EdgeGrid authentication schemes. It includes a cookie jar wrapper for managing cookies and a build configuration (Rollup) that correctly marks Node.js built-in modules as external to ensure proper bundling.

packages/bruno-requests · high confidence

New build configuration and sample collection for the Electron app

The Bruno Electron package now includes a dedicated \electron-builder-config.js\ that defines build targets (pkg, dmg, zip for macOS; AppImage, deb, rpm for Linux; NSIS for Windows) and sets the Electron version to 37.6.1. A new \notarize.js\ script handles macOS notarization using \electron-notarize\ and the \notarytool\. Additionally, a sample collection (\resources/data/sample-collection.json\) is now bundled as an extra resource, and a \.env.sample\ file introduces the \DISABLE\_SAMPLE\_COLLECTION\_IMPORT\ environment variable to control its behavior on first launch.

packages/bruno-electron · high confidence

New cURL import utility with improved content-type and body handling

The cURL import feature in Bruno-app has been replaced with a new, dedicated parser located in \packages/bruno-app/src/utils/curl\. This new implementation introduces a \content-type.js\ module that accurately detects structured content types (JSON, XML, NDJSON, plain text) and vendor-specific variants (e.g., \+json\, \+xml\). It improves body parsing by correctly distinguishing between inline JSON data and binary file uploads (via \--data-binary\), ensuring that \--data-binary\ with inline content is treated as a JSON body rather than a file reference. The parser also handles edge cases such as headers without spaces, URLs without protocols, and repeated query keys, while preserving cookies and custom content types that were previously stripped or mishandled.

packages/bruno-app/src/utils/curl · high confidence

New collapsible UI for gRPC query results

The gRPC response pane now renders query results using a dedicated component that supports both single and multiple message responses. For single responses, the result is displayed in a read-only code editor. When multiple messages are received, they are listed in a collapsible format where users can expand individual items to view their JSON content, with the most recent message clearly marked as 'Latest'. The layout adapts to the number of responses, providing scrollable overflow for multi-response scenarios and a fixed height for single responses, while also handling error states with a dismissible error message.

packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcQueryResult · high confidence

New collection variables table with drag-and-drop, sorting, and data types

The Collection Settings now features a dedicated VarsTable component that allows users to manage collection variables with enhanced interaction capabilities. This table supports drag-and-drop reordering and alphabetical sorting of variables, persists column widths and scroll position across tabs, and includes a DataTypeSelector for request variables to specify variable types. It also introduces variable descriptions via a dedicated column and validates variable names against a strict regex pattern, ensuring only alphanumeric characters, hyphens, underscores, and dots are allowed.

packages/bruno-app/src/components/CollectionSettings/Vars/VarsTable · high confidence

New collection-level Basic Authentication settings UI

A new BasicAuth component has been added to the Collection Settings interface, allowing users to configure HTTP Basic Authentication credentials (username and password) at the collection level. The implementation includes a styled wrapper for consistent theming, integrates with the Redux store to update and save collection authentication settings, and incorporates sensitive-field detection to display warnings when passwords are entered.

packages/bruno-app/src/components/CollectionSettings/Auth, packages/bruno-app/src/components/CollectionSettings/Auth/BasicAuth · high confidence

New color picker with range slider for environment colors

Users can now select environment colors using a dedicated color picker component that includes a set of preset colors and a continuous range slider. The ColorRangePicker component renders a styled range input that displays a linear gradient of the defined color sequence, allowing users to fine-tune the hue by dragging the slider, while the ColorPicker component wraps this in a dropdown with preset options and a 'no color' toggle.

packages/bruno-app/src/components/ColorPicker, packages/bruno-app/src/components/ColorRange · high confidence

New confirmation dialog for closing workspaces

A new CloseWorkspace modal component has been added to the sidebar, allowing users to confirm the closure of a workspace. The dialog displays the workspace name and path, and prevents closing the default workspace. Upon confirmation, the workspace is closed via Redux and a success toast is shown, while errors are handled with appropriate error toasts.

packages/bruno-app/src/components/Sidebar/CloseWorkspace · high confidence

New confirmation modals for unsaved collection and folder settings changes

Added two new React components, ConfirmCollectionClose and ConfirmFolderClose, which render modal dialogs to warn users about unsaved changes when closing collection or folder settings tabs. These modals provide specific actions to either save changes and close, cancel the operation, or discard changes without saving, utilizing the application's Button and Modal UI components for consistent styling and behavior.

packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmCollectionClose, packages/bruno-app/src/components/RequestTabs/RequestTab/ConfirmFolderClose · high confidence

Users can now view, search, add, edit, and delete cookies directly within the application. This change introduces a new modal-based UI in the Cookies component that displays cookies grouped by domain, supports filtering by domain name, and provides specific actions to clear all cookies for a domain or remove individual cookies, with confirmation modals for destructive actions.

packages/bruno-app/src/components/Cookies · high confidence

New dark themes and design system documentation added

Users can now choose from several new dark themes including Catppuccin (Frappe, Macchiato, Mocha), Cyberdream, Dracula, Gruvbox, Dark Monochrome, and Dark Pastel. Additionally, a new Design System overview and Palette Viewer have been added to the application, providing visual documentation of the color tokens and theme structures.

packages/bruno-app/src/themes/dark · high confidence

New detailed gRPC timeline item view with theme-aware styling

The gRPC response timeline now displays a dedicated, expandable item component that provides granular visibility into individual gRPC events (requests, messages, metadata, status, errors, etc.). Each event type is visually distinguished by specific color-coded borders and icons that adapt to the current application theme. The view includes detailed content panels for each event, such as proxy configuration details, request headers, binary message bodies, response payloads, and status codes, allowing users to inspect the full lifecycle of a gRPC call within the timeline.

packages/bruno-app/src/components/ResponsePane/Timeline/GrpcTimelineItem · high confidence

New developer tooling and build automation scripts

The repository now includes a suite of new scripts to streamline development and distribution workflows. The \setup.js\ script automates the initial environment configuration by cleaning and reinstalling dependencies, building core packages, and bundling sandbox libraries. For daily development, \dev.js\ and \dev-hot-reload.js\ manage the rsbuild web server and Electron processes with automatic hot-reloading and port detection. Build automation is handled by \build-electron.js\ (and its shell equivalent), which prepares the web assets, fixes static paths, and triggers platform-specific Electron packaging (Windows, macOS, Linux, Snap, Debian, RPM). Additionally, \bundle-cli.js\ creates self-contained, offline-installable tarballs for the CLI, \count-locs.js\ provides code metrics, \changed-packages.js\ analyzes dependency trees for changed packages, and \pr-checkout.js\ simplifies reviewing pull requests via git worktrees.

scripts · high confidence

New environment creation modal with validation and Redux integration

A new CreateEnvironment component has been introduced to handle the creation of new environments within a collection. This modal integrates with the Redux store to dispatch the addEnvironment action upon submission, providing user feedback via toast notifications for success or failure. It includes robust client-side validation using Formik and Yup, ensuring the environment name is unique within the collection, meets length requirements (1-255 characters), and adheres to valid filename patterns. The modal also automatically focuses the input field upon opening for improved usability.

packages/bruno-app/src/components/Environments/EnvironmentSettings/CreateEnvironment · high confidence

New error modals for IPC and file save failures

The application now includes dedicated UI components for displaying specific error scenarios. A new IpcErrorModal renders IPC-related errors in a modal with scrollable, styled pre-formatted text, while a SaveFileErrorModal handles file save failures with similar styling but adjusted text wrapping. These components provide clearer, isolated feedback for these distinct failure modes rather than generic error handling.

packages/bruno-app/src/components/Errors · high confidence

New folder-level authentication mode selector component

A new AuthMode component has been introduced in the FolderSettings area to allow users to select the authentication mode for a folder. This component provides a dropdown menu supporting multiple authentication types, including AWS Sig v4, Basic, Bearer Token, Digest, NTLM, OAuth 1.0, OAuth 2.0, WSSE, API Key, and Akamai EdgeGrid (marked as Beta), as well as Inherit and No Auth options. The implementation uses a new styled wrapper that applies theme-based fonts and colors, and integrates with the Redux store to dispatch updates when the mode changes.

packages/bruno-app/src/components/FolderSettings/AuthMode · high confidence

New folder-level authentication settings UI

The Folder Settings panel now includes a dedicated Auth tab, allowing users to configure authentication directly at the folder level rather than only on individual requests. This new interface supports the same authentication modes available in the request pane—including Basic, Bearer, Digest, NTLM, OAuth 1.0, OAuth 2.0 (with grant type selection), API Key, AWS V4, WSSE, and Akamai EdgeGrid—as well as an 'inherit' mode that displays inherited credentials as read-only and links to their source. Changes made here are persisted to the folder's root request configuration.

packages/bruno-app/src/components/FolderSettings/Auth · high confidence

New gRPC Query URL component with reflection and proto file support

The gRPC request URL input area has been replaced with a new component that supports loading methods via gRPC reflection or local .proto files. Users can now select methods from a dropdown, view connection status with a visual indicator, and generate grpcurl commands. The component integrates with the application theme for consistent styling and handles streaming method types.

packages/bruno-app/src/components/RequestPane/GrpcQueryUrl · high confidence

New gRPCurl command generation modal with copy functionality

A new modal component has been added to the gRPC request interface, allowing users to generate and view the corresponding gRPCurl command. The modal displays the command in a read-only code editor and includes a copy button that places the command on the clipboard, providing visual feedback via a checkmark icon and a toast notification upon success.

packages/bruno-app/src/components/RequestPane/GrpcQueryUrl/GrpcurlModal · high confidence

New hook for component-level customizable keyboard shortcuts

A new \useKeybinding\ hook has been introduced in the Bruno app to allow individual components to bind customizable keyboard shortcuts. This hook reads merged keybindings (combining defaults and user overrides) from the Redux store and registers them using Mousetrap, enabling features like clone or rename actions to be triggered via user-configured keys directly within specific UI components.

packages/bruno-app/src/hooks/useKeybinding · high confidence

New hook for managing collection folder navigation and breadcrumbs

Added the useCollectionFolderTree hook to centralize folder tree construction and navigation state. This hook builds a hierarchical tree from collection items (excluding transient folders), manages the current folder path and selected folder state, and provides utilities for navigating into folders, going back, jumping to the root, and clicking breadcrumbs. It exposes the current folders at the active path, breadcrumb data, and helper methods to retrieve the parent or selected folder, enabling consistent folder navigation behavior across the application.

packages/bruno-app/src/hooks/useCollectionFolderTree · high confidence

New hook to detect missing file references

Added the \useMissingFileCheck\ React hook, which verifies whether specified file paths exist on disk relative to a base directory. This utility allows the application to identify missing resources (such as binary body files) and report them to callers, enabling features like warning users when referenced files are no longer present.

packages/bruno-app/src/hooks/useMissingFileCheck · high confidence

New hook to fetch collection Git remote URL

A new React hook, useCollectionGitRemoteUrl, has been added to retrieve the Git remote URL for a collection. It communicates with the main process via IPC to fetch the URL based on the collection's pathname, handling cases where no pathname is provided or the fetch fails by returning null. Tests confirm it correctly resolves the URL, handles empty results, and manages lifecycle cleanup.

packages/bruno-app/src/hooks/useCollectionGitRemoteUrl · high confidence

New importers for Bruno, OpenCollection, and Git URL utilities

The application now supports importing native Bruno collections and environments, as well as OpenCollection format files, in addition to existing Postman, Insomnia, OpenAPI, and WSDL imports. Bruno collection imports validate against the schema and hydrate sequence numbers and UIDs, while Bruno environment imports handle variable coercion, secret deduplication, and inheritance references. A new Git utility module validates repository URLs and filters out remote URLs containing GitHub tokens to prevent credential leakage.

packages/bruno-app/src/utils/importers · high confidence

New interface zoom control in Display preferences

Users can now adjust the application's interface zoom level directly from the Preferences \> Display panel. A new dropdown allows selection of zoom percentages ranging from 50% to 150%, with the change applied immediately to the Electron window and persisted in user preferences. A reset button appears when the zoom level is not at the default 100%, allowing users to quickly revert to the standard view.

packages/bruno-app/src/components/Preferences/Display/Zoom · high confidence

New light themes added: Catppuccin Latte, Cyberdream, Gruvbox, Monochrome, Pastel, and VS Code Light+

Users can now choose from six new light themes in Bruno: Catppuccin Latte, Cyberdream, Gruvbox (with soft, medium, and hard contrast variants), Light Monochrome, Light Pastel, and VS Code Light+. These themes are available in the \packages/bruno-app/src/themes/light\ directory and provide distinct visual styles for the application interface, including syntax highlighting in the code editor.

packages/bruno-app/src/themes/light · high confidence

New network activity log view in timeline

A new Network component has been added to the Timeline item view to display detailed network activity logs. This component renders a scrollable list of network events—including requests, responses, errors, TLS handshakes, and informational messages—using distinct color coding for each type to improve readability. It also handles separators between different log types and applies the application's theme for consistent styling.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Network · high confidence

New network utility layer for HTTP, gRPC, and WebSocket request handling

The \packages/bruno-app/src/utils/network\ directory now contains a dedicated network utility layer that centralizes request execution and event listening for HTTP, gRPC, and WebSocket protocols. This includes \cancelTokens.js\ for managing request cancellation outside of Redux, \index.js\ for orchestrating network calls via IPC, and dedicated event listener hooks (\grpc-event-listeners.js\, \ws-event-listeners.js\) that bridge Electron IPC events to the Redux store. This change establishes the frontend infrastructure required to support the new gRPC and WebSocket capabilities introduced in this release.

packages/bruno-app/src/utils/network · high confidence

New notification bell icon with unread count badge and modal

A new Notifications component has been added to the application, featuring a bell icon in the UI that displays a badge with the count of unread notifications. Clicking the icon opens a modal that lists notifications, supports filtering between 'All' and 'Unread' tabs, and automatically marks notifications as read when viewed. The implementation includes a custom hook for managing notification state and a styled wrapper for the trigger button.

packages/bruno-app/src/components/Notifications · high confidence

New request body mode selector with JSON/XML prettification

The request body mode selector has been replaced with a new component that groups body types into Form, Raw, and Other categories, adding support for SPARQL and File/Binary modes. For JSON and XML bodies, users can now click a 'Prettify' button to format the content, with error handling displayed via toast notifications if the format is invalid.

packages/bruno-app/src/components/RequestPane/RequestBody/RequestBodyMode · high confidence

New request creation modal with cURL import and theme-aware styling

The New Request component in the sidebar has been refactored to support creating HTTP, gRPC, and WebSocket requests, including a new feature where pasting a cURL command automatically detects and imports the request details. The UI now uses a dedicated styled wrapper that applies theme variables for inputs and borders, and includes validation for reserved filenames like 'collection' and 'folder'.

packages/bruno-app/src/components/Sidebar/NewRequest · high confidence

New request settings UI with URL encoding, redirect, and auth header controls

The Request Pane Settings component now provides a centralized interface for configuring HTTP request behavior. Users can toggle URL encoding for query parameters, control automatic redirect following (including a configurable max redirect limit), and manage whether Authorization headers are forwarded to different origins during redirects. Additionally, a timeout setting allows users to specify a custom wait time or inherit from the collection, and an 'Enable App' toggle is available for HTTP requests to show the App tab view.

packages/bruno-app/src/components/RequestPane/Settings · high confidence

New response detail view in request timeline

The Response pane within the request timeline now displays a dedicated view for individual response details, including status code, status text, duration, and size. This component renders response headers and body content, applying theme-based color coding to status codes (green for success, yellow for redirects, red for errors) and safely handling unserializable data objects.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Response · high confidence

New response format selector with preview toggle in Query Result pane

The Response Pane now includes a dedicated QueryResultTypeSelector component that allows users to switch between multiple response data formats (JSON, HTML, XML, JavaScript, raw, hex, and base64) via a dropdown menu. This selector integrates a preview mode toggle, enabling users to switch between a formatted preview and the raw editor view directly from the response header. The component uses the new MenuDropdown for improved keyboard accessibility and applies consistent theme-based styling for active states, icons, and separators.

packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultTypeSelector · high confidence

New reusable SearchInput component with clear functionality

A new SearchInput component has been introduced in the application, providing a consistent, styled text input for search operations across the UI. It features a search icon on the left, a clear (X) icon on the right that appears when text is entered, and supports custom placeholders, icons, and styling via props. This component standardizes search input behavior and appearance, likely replacing ad-hoc implementations in various parts of the app.

packages/bruno-app/src/components/SearchInput · high confidence

New reusable Select and InputWrapper UI components

Added a new \Select\ dropdown component and an \InputWrapper\ form field wrapper to the UI library. The \Select\ component supports controlled values, searchable filtering, keyboard navigation, loading states, and custom sections, while \InputWrapper\ provides a consistent structure for labels, descriptions, and error messages shared across form inputs like TextInput and MaskedInput.

packages/bruno-app/src/ui/InputWrapper, packages/bruno-app/src/ui/Select · high confidence

New reusable Tabs UI component

A new, reusable Tabs component has been added to the application, providing a structured way to manage tabbed interfaces. This component includes a context provider for state management, a list container, trigger buttons for switching tabs, and content panels that show or hide based on the active tab. The styling is handled via styled-components, featuring theme-aware colors for active and inactive states, hover effects, and a compact layout suitable for script editors.

packages/bruno-app/src/components/Tabs · high confidence

New scroll-tracking hook for consistent UI state

A new \useTrackScroll\ hook has been added to the application's hook library. This utility automatically tracks the scroll position of a specified DOM element, debouncing updates to optimize performance and restoring the previous position when the component mounts. It is designed to be composed with persistence mechanisms (like \usePersistedState\) to maintain scroll context across user interactions, such as switching tabs or navigating within documentation views.

packages/bruno-app/src/hooks/useTrackScroll · high confidence

New standalone package for converting Postman, Insomnia, OpenAPI, and WSDL to Bruno collections

The \packages/bruno-converters\ package is now available as a standalone library (\@usebruno/converters\) that allows users to programmatically convert external API formats into Bruno collections. It provides dedicated converters for Postman (v2.1), Insomnia (v4 and v5), OpenAPI (v3.0), Swagger 2.0, and WSDL files. The package includes the necessary build configuration (Rollup, Babel, Jest) and exports functions like \postmanToBruno\, \insomniaToBruno\, \openApiToBruno\, and \wsdlToBruno\ to facilitate these imports.

packages/bruno-converters · high confidence

New status code selector for response examples

The Response Example pane now includes a dedicated status input component that allows users to select or edit the HTTP status code and reason phrase for a saved response example. This new UI element renders a styled dropdown populated with standard status codes, supports custom codes, and visually indicates status categories (success, warning, error) using theme-aware colors. Changes made here are persisted to the Redux store, ensuring the example's status code and text are updated correctly.

packages/bruno-app/src/components/ResponseExample/ResponseExampleResponsePane/ResponseExampleStatusInput · high confidence

New styled search input for sidebar collections

The sidebar now features a dedicated search component for collections, allowing users to filter requests by typing into a text field. This new UI element includes a search icon, a clear button that appears when text is entered, and styling that integrates with the application's theme variables for colors and borders.

packages/bruno-app/src/components/Sidebar/Collections/CollectionSearch · high confidence

New tabbed interface for runner response details

The Runner Results view now uses a dedicated ResponsePane component with a tabbed layout, allowing users to switch between Response, Headers, Timeline, and Tests views. This change introduces a Timeline tab to visualize request/response flow and a Tests tab to display assertion results, while also adding support for displaying script error cards and handling skipped requests within the same pane.

packages/bruno-app/src/components/RunnerResults/ResponsePane · high confidence

New tabs for managing gRPC proto files and import paths

The gRPC request pane now includes dedicated tabs for browsing and selecting proto files and import paths directly from collection settings. Users can browse for specific .proto files and import directories, toggle import paths on or off, and view warnings for any paths that could not be found. The interface uses theme variables for styling and provides a unified navigation bar to switch between the two tabs, with counts indicating the number of configured items in each category.

packages/bruno-app/src/components/RequestPane/GrpcQueryUrl/Tabs · high confidence

New theme-aware settings input components

Added two new React components, InheritableSettingsInput and SettingsInput, to the settings UI. These components provide a consistent, dark-mode-compatible appearance for request settings by integrating with the application's theme provider, supporting both simple text entry and inheritable/custom value toggles.

packages/bruno-app/src/components/InheritableSettingsInput, packages/bruno-app/src/components/SettingsInput · high confidence

New useDebounce hook with immediate-value support

A new \useDebounce\ React hook has been added to the application, allowing components to delay state updates while ensuring the initial value is applied immediately. The hook accepts a delay duration and an optional \shouldSkipDebounce\ function; when this function returns true for a given value, that value is applied instantly rather than waiting for the debounce timer. This utility is now available for use in areas like sidebar search to improve responsiveness during user input.

packages/bruno-app/src/hooks/useDebounce · high confidence

New useLocalStorage React hook for persistent state

A new \useLocalStorage\ hook has been added to the application's hooks library. This utility allows components to synchronize React state with the browser's local storage, automatically persisting values under a specified key and initializing state from stored data or a provided default. It handles JSON serialization and deserialization, including error recovery if the stored value is invalid, and updates storage whenever the state changes.

packages/bruno-app/src/hooks/useLocalStorage · high confidence

New user onboarding with a 4-step welcome modal

New users now see a multi-step welcome modal on first launch that guides them through initial setup. The flow includes a product highlights overview, a theme selection step (allowing users to choose between Light, Dark, or System modes and pick specific variants), a storage configuration step to set the default filesystem directory for collections, and a final 'Get Started' step offering quick actions to create a new collection, import existing ones (supporting Postman, OpenAPI/Swagger, or Insomnia formats), open a local collection, or start a new HTTP request. Preferences chosen during this process are saved automatically upon dismissal.

packages/bruno-app/src/components/WelcomeModal · high confidence

New utility modules for environment management, response processing, and UI interactions

This change introduces several new utility modules in the application's utils directory. The \environments.js\ module provides core logic for managing environment variables, including handling script-based variable application, preserving data types and descriptions, and preventing duplicate secret names. The \responseBodyProcessor.js\ module adds logic to correctly identify and handle binary content types (like images, video, and PDFs) in response bodies. Additionally, new files \beta-features.js\, \bruno-clipboard.js\, \dragBlockedCursor.js\, \suppressTrailingClick.js\, and \terminal.js\ introduce support for beta feature toggles, a custom clipboard utility, improved drag-and-drop cursor feedback, click suppression after drag events, and terminal session management respectively.

packages/bruno-app/src/utils · high confidence

New visual editor for .env files with table and raw views

Users can now edit .env files directly within the Bruno app using a new DotEnvFileEditor component. This editor supports two modes: a table view for managing variables in a structured grid and a raw view for editing the file content as plain text. The feature includes validation for variable names, handling of special characters and quotes, and the ability to switch between views while preserving unsaved changes.

packages/bruno-app/src/components/Environments/DotEnvFileEditor · high confidence

New workspace creation modal with customizable folder naming and location selection

A new modal dialog has been added to the Workspace Sidebar to facilitate the creation of new workspaces. This feature allows users to specify a workspace name, which automatically generates a default folder name that can be customized via an edit toggle. Users can also select a specific directory location for the workspace, with a default path pulled from application preferences. The form includes validation for name uniqueness, folder name validity, and required location, providing immediate feedback on errors and a confirmation flow upon successful creation.

packages/bruno-app/src/components/WorkspaceSidebar/CreateWorkspace · high confidence

New workspace documentation editor with inline editing

The Workspace Home now includes a dedicated documentation section where users can view, add, and edit workspace documentation. This change introduces a new \WorkspaceDocs\ component that provides an empty state with suggestions for new documentation and an inline rich-text editor (\DocsEditor\) for modifying content. Users can toggle between view and edit modes, save changes to persist documentation to the workspace, and discard unsaved edits, with the editor's scroll position being preserved across sessions.

packages/bruno-app/src/components/WorkspaceHome/WorkspaceDocs · high confidence

OAuth2 Action Buttons Component Implementation

The OAuth2 action buttons component in the Request Pane has been implemented, providing users with controls to fetch access tokens, refresh existing tokens, clear cached credentials, and cancel in-progress authorization requests. The component integrates with the Redux store to manage token lifecycle events, displays loading states during operations, and handles error reporting via toast notifications and response pane updates. It also supports system browser authorization flows by checking for pending authorization requests and allowing users to cancel them.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/Oauth2ActionButtons · high confidence

OAuth2 Grant Type Selector UI and Logic

The OAuth2 authentication configuration now includes a dedicated selector for choosing the grant type (Password Credentials, Authorization Code, Implicit, or Client Credentials). When a user selects a grant type, the component updates the request's OAuth2 settings in the Redux store. If no grant type is currently set, it defaults to 'authorization\_code' and initializes standard OAuth2 fields (such as access token URL, client ID, and credentials placement) to ensure the authentication block is ready for configuration.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2/GrantTypeSelector · high confidence

Prompt to install npm packages and enable Developer Mode for imported Postman collections

When importing Postman collections that reference external npm packages, Bruno now displays a modal prompting the user to install those dependencies and, if necessary, switch the collection to Developer Mode. The new PostmanPackageReport component handles the UI for listing required packages, providing an install command, and executing the installation via IPC, while the usePostmanPackagePrompt hook manages the queue of prompts during bulk imports to ensure each collection is addressed sequentially.

packages/bruno-app/src/components/Sidebar/PostmanPackageReport, packages/bruno-app/src/hooks/usePostmanPackagePrompt · high confidence

Repository initialization with project governance, coding standards, and CI configuration

The repository has been initialized with foundational project documentation and configuration files. This includes a new \CODING\_STANDARDS.md\ defining style rules for TypeScript/JavaScript and React, a \contributing.md\ guide for local development and testing, and a \governance.md\ outlining the maintainer-led open-source model. The project now enforces consistent line endings via \.gitattributes\, specifies Node.js v22.12.0 via \.nvmrc\, and configures ESLint via \eslint.config.js\. Additionally, Playwright E2E testing is configured with \playwright.config.ts\ (supporting parallel execution and sharded CI reports) and \playwright.benchmark.config.ts\, while \.coderabbit.yaml\ sets up automated code review guidelines. The license has been updated to MIT and moved to \license.md\, and a \security.md\ provides a channel for vulnerability reporting.

(repo-wide) · high confidence

Request body editor supports SPARQL and persists scroll position

The Request Body component now supports the SPARQL query language, adding it to the list of modes (alongside JSON, XML, and text) that use the code editor with appropriate syntax highlighting. Additionally, the scroll position within the request body editor is now persisted across tab switches, ensuring users return to their previous viewing position when navigating between different request tabs.

packages/bruno-app/src/components/RequestPane/RequestBody · high confidence

Request details now display in the timeline view

The Response Pane's Timeline now includes a dedicated Request section for each item, allowing users to inspect the headers and body of the outgoing request alongside the response. This new component intelligently prioritizes headers captured directly from the timeline data (useful for scripted requests) over the initial request object, ensuring accurate visibility into what was actually sent.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Request · high confidence

Request tabs are now reorderable via drag-and-drop

Users can now rearrange the order of request tabs by dragging and dropping them within the tab bar. This change introduces a new DraggableTab component that handles the drag-and-drop interaction and dispatches a reorder action to update the tab sequence in the Redux store, replacing the previous static ordering.

packages/bruno-app/src/components/RequestTabs · high confidence

Response example top bar now supports editing and code generation

The ResponseExampleTopBar component has been rewritten to provide a dedicated interface for managing response examples. Users can now edit an example's name and description directly within the top bar, with changes persisted via Redux actions. The component also introduces a 'Generate Code' button that triggers code generation for the selected example, and includes a 'Save' action to commit edits. The UI is styled using a new StyledWrapper that respects the application theme for backgrounds, borders, and text colors.

packages/bruno-app/src/components/ResponseExample/ResponseExampleTopBar · high confidence

Response pane refactored into modular components with multi-format preview support

The Response pane's QueryResult component has been restructured into a modular architecture, introducing dedicated sub-components for filtering (QueryResultFilter) and previewing (QueryResultPreview) alongside a new styled wrapper. This change enables users to view responses in multiple formats including JSON, HTML, XML, JavaScript, and raw modes (Raw, Hex, Base64), with automatic content-type detection to select the appropriate initial view. The update also adds support for binary media previews (images, PDFs, audio, video) and includes a JSON path filter capability within the editor tab, while maintaining backward compatibility for error handling and large response warnings.

packages/bruno-app/src/components/ResponsePane/QueryResult · high confidence

The \packages/bruno-js\ package has been restructured into a modular layout, introducing dedicated classes for HTTP and gRPC scripting. This adds \bru.grpc.request\ and \bru.grpc.response\ objects to enable scripting for gRPC lifecycle hooks, alongside a new \bru.cookies\ API for direct cookie management. The HTTP scripting models have been updated with \req.headerList\ and \res.headerList\ for case-insensitive header manipulation, and \BrunoResponse\ is now callable to query body data using expressions.

packages/bruno-js · high confidence

Revamped collection runner with drag-and-drop reordering and tag-based filtering

The Run Configuration Panel has been completely rewritten to support selecting, deselecting, and reordering requests via drag-and-drop handles. It now respects folder-level tags, automatically filtering out requests that do not match the selected include/exclude tags, and prevents the execution of unsupported WebSocket and gRPC requests. The UI provides visual feedback for drag operations and selection states, ensuring a more intuitive and flexible runner experience.

packages/bruno-app/src/components/RunnerResults/RunConfigurationPanel · high confidence

Reworked main application layout with integrated AI chat and workspace management

The Bruno application page has been restructured to serve as the central layout container, introducing several key UI capabilities. The main view now includes an AppTitleBar for workspace selection and a StatusBar for console output. A new AI Chat Sidebar and Popout component have been added, allowing users to interact with AI features directly within the request pane or in a detached window. The layout also supports an ApiSpecPanel for viewing API documentation and a ManageWorkspace component for workspace configuration. Additionally, the app now detects and displays a warning banner when running under Rosetta on Apple Silicon Macs to alert users of potential performance issues.

packages/bruno-app/src/pages/Bruno · high confidence

Rich text editor extensions for documentation support

The documentation editor now includes a suite of custom TipTap extensions to enhance content editing. Code blocks support syntax highlighting via lowlight, auto-detection of languages on paste, and a language selector dropdown. Raw HTML is supported with sanitization (forbidding \<style\> tags) and preservation of inline elements like \<kbd\> and \<sup\>. Task lists feature interactive checkboxes that toggle strikethrough on content. Tables have improved keyboard navigation and alignment support. Links and images resolve relative paths (e.g., ./) against the collection directory for display while preserving the original relative paths in the markdown source. Soft breaks are normalized to prevent unintended hard breaks, and a custom gap cursor improves navigation around tables.

packages/bruno-app/src/ui/RichTextEditor/extensions · high confidence

Save HTTP responses as reusable examples

Users can now save the current HTTP response as a named example directly from the Response Pane. The new ResponseBookmark component allows saving responses (including headers, body, and status) into the request's examples list, with automatic handling of content types and binary data. The feature enforces a 5MB size limit and disables saving for streaming responses, providing clear feedback via toast notifications when a save is successful or blocked.

packages/bruno-app/src/components/ResponsePane/ResponseBookmark · high confidence

Security warnings for non-secret variables used in sensitive fields

The Environment Variables view now detects when a standard (non-secret) environment variable is referenced within sensitive authentication fields (such as OAuth client secrets, basic/digest passwords, or bearer tokens) across the collection. If such usage is detected, a warning is displayed next to the variable, advising the user to move it to the Secrets tab to improve security.

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails/EnvironmentVariables · high confidence

Share Collection dialog now offers ZIP, YAML, and Postman export formats

The Share Collection component has been replaced with a new modal that lets users choose between three export formats: Bruno Collection (ZIP), which exports the OpenCollection format as a folder structure of YAML files recommended for team collaboration; Single File (YAML), which bundles the collection into one .yml file for quick sharing; and Postman, which opens a dedicated export flow for Postman compatibility. The UI includes format selection cards with descriptions and feature lists, and the component now detects and flags collections containing gRPC or WebSocket requests as having non-exportable request types for standard formats.

packages/bruno-app/src/components/ShareCollection · high confidence

Response examples in the sidebar can now be selected and dragged together as a group, matching the behavior of regular requests. This change introduces multi-selection support and adapts the drag-and-drop logic to work within the virtualized, flat sidebar structure, allowing users to move multiple examples at once.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem · high confidence

The sidebar has been refactored to use an accordion layout where sections can be expanded or collapsed independently, with automatic space distribution and pinning behavior. A new 'API Specs' section has been added, allowing users to create and open API specifications via a context menu. The sidebar now includes a dedicated drag handle for resizing, with width state persisted to local storage. A beta feature flag controls the visibility of the Mock Servers section.

packages/bruno-app/src/components/Sidebar · high confidence

Snippet generator now supports variable interpolation and fixes URL encoding behavior

The code generation utility in the sidebar now includes a new interpolation module that resolves variables (like {{var}}) in authentication, headers, URL parameters, and request bodies (JSON, text, XML, form-encoded, and multipart) when the interpolation setting is enabled. Additionally, the snippet generator respects the 'encodeUrl' setting: when disabled, it displays the raw URL path and query string in the generated snippet instead of the encoded version, and it correctly handles literal spaces in HTTP request lines by encoding them as %20.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/utils · high confidence

Storybook workbench for Bruno UI components

A new Storybook instance has been added to the \bruno-app\ package to serve as a living documentation and isolation environment for the design-system primitives located in \src/ui\. The setup uses \storybook-react-rsbuild\ as the framework and includes a global decorator that wraps stories in both styled-components and the application's \ThemeContext\, enabling developers to preview components across all registered Bruno themes via a toolbar selector. The configuration also enables the Docs addon with a code panel, imports global styles (including Tailwind CSS) to ensure accurate rendering, and provides a README detailing conventions for writing stories, handling group components like \RadioGroup\ and \SegmentedControl\, and managing accessible names.

packages/bruno-app/storybook · high confidence

Support for TOML request files with advanced header handling

The \bruno-toml\ package now provides a complete implementation for converting between JSON and TOML formats for request files. This includes support for tags, pre-request/post-response scripts, and test scripts. A key behavioral change is the handling of HTTP headers: standard headers are stored as key-value pairs, while headers with duplicate names, reserved names (like 'disabled'), or special characters (spaces, dots, unicode) are serialized into a \bru\ field as a JSON string to preserve their structure. Additionally, disabled headers are now explicitly tracked in a \headers.disabled\ section.

packages/bruno-toml · high confidence

Support for folder-level tag inheritance in the UI

The TagList component now displays tags inherited from parent folders, allowing users to see which tags are applied at the folder level versus the current level. Inherited tags are visually distinguished with a dashed border and muted styling, and they cannot be removed directly from this view. A new toggle button lets users expand or collapse the list of inherited tags, with tooltips indicating the source folder for each inherited tag. The component also enforces validation to prevent adding tags that are already inherited from a parent folder.

packages/bruno-app/src/components/TagList · high confidence

Support for opening multiple collections from a monorepo with selection modal

The Open Collection dialog now allows users to select and open multiple collections simultaneously, a key capability for monorepo setups. Upon opening the dialog, the app scans selected directories for Bruno collections and presents them in a modal list where users can choose which ones to load. A description text clarifies that the listed items were found within the user's selection, and a warning component displays any paths that were skipped during the scan. If the selected directories contain only top-level collections with no nested items, they are opened automatically without showing the selection list.

packages/bruno-app/src/components/Sidebar/OpenCollection · high confidence

Table component now supports column resizing

The Table component in the Bruno app has been refactored to support interactive column resizing. Users can now click and drag the borders between table headers to adjust column widths, with the layout updating in real-time. This change introduces a new styled wrapper and logic to handle mouse events for resizing, replacing the previous static table implementation.

packages/bruno-app/src/components/Table · high confidence

Tag-based filtering and refined test status reporting in the Collection Runner

The Collection Runner now supports filtering requests by tags, allowing users to include or exclude specific items via a new RunnerTags component that manages include/exclude lists against available collection tags. Additionally, the runner results display more granular test status indicators, distinguishing between pre-request, post-response, assertion, and general test outcomes, while the UI includes auto-scrolling behavior for the output body and visual styling for skipped, passed, and failed requests.

packages/bruno-app/src/components/RunnerResults · high confidence

Timeline items now display request headers and support navigation to source scripts

The Response Pane's Timeline now includes a collapsible Headers tab within each request item, allowing users to inspect request headers directly alongside the response. Additionally, for scripted requests (such as pre-request scripts or tests), the timeline entry displays a source link that, when clicked, navigates the user to the corresponding script file in the editor, making it easier to debug and trace request logic.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem · high confidence

Visual GraphQL Query Builder added to Request Pane

A new visual Query Builder component has been added to the Request Pane, allowing users to construct GraphQL queries by interacting with a tree of fields, arguments, and input objects rather than writing raw text. The feature includes schema introspection and file upload options, a search filter for fields, and an error boundary to handle unexpected rendering issues gracefully.

packages/bruno-app/src/components/RequestPane/QueryBuilder · high confidence

Visual diff viewer for Git changes

A new visual diff viewer has been added to the Git integration, allowing users to see side-by-side comparisons of request changes (URL, headers, parameters, authentication, and body content) when syncing collections from Git. The viewer highlights added, deleted, and modified fields with status badges and supports collapsible sections for easier navigation. Additionally, a modal now appears if Git is not detected on the user's system, providing direct download links for Windows, macOS, and Linux.

packages/bruno-app/src/components/Git · high confidence

Warn users about unsaved changes when closing the app

When closing the Bruno desktop application, users are now presented with a confirmation dialog if there are unsaved requests, collections, folders, or environment drafts. The dialog allows users to save all pending changes before the app quits or to discard them and close immediately. This prevents accidental loss of work by intercepting the application quit flow and ensuring that draft states for requests, apps, collections, folders, and environments are either persisted or explicitly cleared.

packages/bruno-app/src/providers/App/ConfirmAppClose · high confidence

WebSocket authentication UI with inheritance support

The WebSocket request pane now features a dedicated authentication editor that supports Basic, Bearer, and API Key modes, while explicitly noting that OAuth 2 is not yet supported for WebSockets. If the inherited authentication mode is selected, the UI displays the source of the inherited credentials and restricts the available inherited modes to those supported by WebSockets (excluding OAuth 2). Unsupported modes are automatically reset to 'none' to prevent configuration errors.

packages/bruno-app/src/components/RequestPane/WSRequestPane/WSAuth · high confidence

WebSocket connection settings UI with validation and styling

The WebSocket settings pane now provides a dedicated interface for configuring connection timeout and keep-alive intervals. Users can set the timeout in milliseconds and define a keep-alive interval (where 0 disables the feature), with input validation that displays error messages for non-numeric values. The UI includes informational tooltips explaining each setting and applies specific styling for error states and tooltip formatting.

packages/bruno-app/src/components/RequestPane/WSSettingsPane · high confidence

WebSocket message editor supports multiple messages with improved scroll and layout stability

The WebSocket request body now supports multiple messages, each with its own name, content, and body mode (JSON, XML, or Text). The interface includes a sticky header for each message to keep controls visible while scrolling, and the message list preserves its scroll position and expanded state when switching tabs or selecting different messages, preventing the editor from jumping or losing context.

packages/bruno-app/src/components/RequestPane/WsBody · high confidence

WebSocket request pane now supports multiple messages with tabbed UI

The WebSocket request interface has been restructured to support sending multiple messages within a single request. The UI now uses a tabbed layout (Message, Headers, Auth, Settings, Docs) to organize request configuration. Users can add, select, and manage multiple distinct WebSocket messages, with a new 'Prettify All' action available to format JSON or XML content across all messages simultaneously. This replaces the previous single-message model, allowing for more complex interaction sequences without creating separate request items.

packages/bruno-app/src/components/RequestPane/WSRequestPane · high confidence

WebSocket requests now support configurable authentication modes

Users can now select an authentication mode (Basic Auth, Bearer Token, API Key, OAuth 2.0, Inherit, or No Auth) directly within the WebSocket request pane. This new WSAuthMode component replaces the previous implementation, providing a dropdown selector that updates the request's authentication settings via Redux, ensuring WebSocket requests can be authenticated consistently with other request types.

packages/bruno-app/src/components/RequestPane/WSRequestPane/WSAuth/WSAuthMode · high confidence

WebSocket response pane adds status code display and sort order toggle

The WebSocket response view now includes a status code indicator that displays the WebSocket close code (e.g., 1000 for normal closure) alongside its descriptive phrase, with color-coded styling for OK, pending, or error states. Additionally, a new sort order toggle button allows users to switch between displaying the latest responses first or last, persisting this preference per item.

packages/bruno-app/src/components/ResponsePane/WsResponsePane/WSResponseSortOrder, packages/bruno-app/src/components/ResponsePane/WsResponsePane/WSStatusCode · high confidence

Workspace pinning and reordering logic

Added utility functions to manage workspace display order, allowing users to pin specific workspaces to the top and reorder them via drag-and-drop. The new \sortWorkspaces\ function organizes workspaces into default, pinned, and unpinned groups based on user preferences, while \toggleWorkspacePin\ and \reorderWorkspaces\ handle the state updates for pinning and moving items within those groups.

packages/bruno-app/src/utils/workspaces · high confidence

gRPC requests now support WSSE authentication mode

The gRPC request pane's authentication mode selector has been updated to include a new 'WSSE Auth' option alongside existing modes like Basic, Bearer Token, API Key, OAuth 2.0, Inherit, and No Auth. This change allows users to configure WSSE authentication directly within the gRPC request interface, expanding the available security options for gRPC API interactions.

packages/bruno-app/src/components/RequestPane/GrpcRequestPane/GrpcAuth/GrpcAuthMode · high confidence

Architecture

Refactored CodeMirror utilities into modular, testable components

The CodeMirror utility logic in the Bruno app has been reorganized from a monolithic structure into distinct, focused modules. This change introduces dedicated files for specific capabilities: \aiGhostText.js\ for inline AI autocomplete suggestions, \addToScopeSwitcher.js\ for managing variable scope selection and creation, \brunoVarInfo.js\ for the variable info editor and tooltip, and \goToVariableDefinition.js\ for navigating to variable definitions. It also includes \autocomplete.js\ and \grpcAutocompleteHints.js\ for structured API and gRPC hinting, alongside \codeMirrorInfoFontSize.js\ for dynamic font sizing and \focusErrorLine.js\ for error highlighting. Comprehensive unit tests have been added for the autocomplete logic, variable info extraction, and navigation functions to ensure reliability.

packages/bruno-app/src/utils/codemirror · high confidence

Behavioural changes

AI Assist moved from floating overlay to Request Pane and Settings tabs

The AI Assist feature is no longer a floating overlay; it is now integrated directly into the Request Pane's tab bar and the Collection/Folder Settings tabs. This change allows users to receive AI-generated suggestions for scripts (pre-request, post-response), tests, and documentation inline within the context of the specific item or collection they are editing, with changes applied directly to the relevant Redux store slices.

packages/bruno-app/src/components/RequestPane/TabBarAiAssist, packages/bruno-app/src/components/SettingsAiAssist · high confidence

Accurate display of request headers for redirected requests

The timeline view now correctly extracts and displays only the headers sent by the final hop in a request chain. Previously, users might have seen headers from intermediate redirects or an incorrect set of headers when viewing responses to redirected requests; this change ensures that the headers shown in the UI match exactly what the server that returned the current response actually received.

packages/bruno-app/src/utils/timeline · high confidence

Add custom AppMenu component for Windows and Linux

A new AppMenu component has been introduced for the Windows and Linux desktop builds, replacing the previous platform-specific menu implementation. This component provides a unified dropdown menu interface containing File (Open Collection, Preferences, Quit), Edit (Undo, Redo, Cut, Copy, Paste, Select All), View (Developer Tools, Zoom controls, Full Screen), and Help (About, Documentation) options, with keyboard shortcuts displayed alongside each action.

packages/bruno-app/src/components/AppTitleBar/AppMenu · high confidence

Added confirmation modal for deleting collections

The application now includes a dedicated DeleteCollection component that presents a confirmation dialog before removing a collection. Users must explicitly type 'delete' into an input field to confirm the action, which permanently removes the collection files from disk. The modal displays the collection name and path, warns that the action is irreversible, and provides feedback via toast notifications upon success or failure.

packages/bruno-app/src/components/Sidebar/Collections/Collection/DeleteCollection · high confidence

Added pre-commit hook using nano-staged

A new pre-commit hook has been added to the repository, configured to run \npx nano-staged\. This change establishes an automated linting and formatting step that executes before each commit, ensuring code quality standards are enforced locally before changes are pushed.

.husky · high confidence

App entry point restructured with new provider hierarchy

The application entry point in the pages directory has been reorganized to use a new Main component that wraps the application in a specific provider chain, including SQLite, Redux, Theme, Toast, Prompt Variables, and Hotkeys providers. The root index.js now renders the Bruno component within this Main wrapper, ensuring that features like SQLite support and prompt variables are available throughout the app.

packages/bruno-app/src/pages · high confidence

App previews remain mounted in the background for faster switching

The AppPreviewKeepAlive component now keeps the last-activated app preview mounted in the DOM even after you switch to a different tab, rather than unmounting it immediately. This means that when you return to a previously viewed app or request with an enabled preview, the view is restored instantly without re-rendering. The component also ensures that global environment variables are correctly passed to these kept-alive app instances, and respects the 'app.enabled' setting and explicit 'appPreview' tab flags to control which previews are maintained.

packages/bruno-app/src/components/AppPreviewKeepAlive · high confidence

Assertion row UI with operator selection and conditional value input

The AssertionRow component now renders a selectable operator dropdown (supporting comparisons like eq, gt, contains, and unary checks like isEmpty, isArray) alongside a value input field. The UI dynamically disables the value input for unary operators, ensuring users only enter values when the selected assertion requires one.

packages/bruno-app/src/components/RequestPane/Assertions/AssertionRow · high confidence

Assertions pane now supports drag-and-drop reordering and persistent scroll

The Assertions section in the Request Pane has been refactored to use a new EditableTable component, enabling users to rearrange assertion rows via drag-and-drop. Additionally, the scroll position within the assertions list is now persisted across tab switches, ensuring users return to their previous view. The UI styling has also been updated to integrate with the application's theme system.

packages/bruno-app/src/components/RequestPane/Assertions · high confidence

Asynchronous tab opening for requests and examples

A new task middleware has been introduced to handle the asynchronous opening of request and example tabs. Instead of opening tabs immediately, the system now queues 'open request' and 'open example' tasks and waits for file I/O events (such as \collectionAddFileEvent\, \collectionLoadedFromTree\, or \collectionChangeFileEvent\) to complete. Once the collection is mounted and the file is available, the middleware automatically opens the corresponding tab and removes the task from the queue, ensuring that tabs are only opened when their underlying data is ready.

packages/bruno-app/src/providers/ReduxStore/middlewares/tasks · high confidence

Auth inheritance resolution and source tracking

Added utility functions to correctly resolve inherited authentication settings by traversing the folder hierarchy from the item up to the collection, ensuring that the nearest ancestor with a concrete auth mode (skipping 'none' or 'inherit') is applied. The new \getEffectiveAuthSource\ function identifies and returns the specific folder or collection providing the effective credentials, enabling UI components to display inherited auth fields as read-only and link back to their source. Additionally, \hasEffectiveAuth\ provides a reliable check for whether an item has active authentication after resolving inheritance chains.

packages/bruno-app/src/utils/auth · high confidence

Auth mode selector now uses a dropdown menu with updated styling

The AuthMode component in the Request Pane has been refactored to use a MenuDropdown for selecting authentication modes, replacing the previous implementation. This change introduces a styled wrapper that applies theme-based font sizes and colors, and updates the dropdown to include a tick mark for the selected item. The available authentication modes now explicitly listed in the UI are AWS Sig v4, Basic Auth, Bearer Token, Digest Auth, NTLM Auth, OAuth 1.0, OAuth 2.0, WSSE Auth, API Key, Akamai EdgeGrid (marked as Beta), Inherit, and No Auth.

packages/bruno-app/src/components/RequestPane/Auth/AuthMode · high confidence

Automatic scrolling and highlighting of focused table rows

The application now automatically scrolls virtualized tables to bring the currently focused row into view and highlights it with a flash animation. This behavior is driven by two new hooks: \useFocusTableRow\, which reads the focused row details from Redux state, and \useRevealFocusedTableRow\, which handles the scrolling logic and visual feedback. This ensures that when a user focuses on a specific item in a collection or folder list, the UI immediately adjusts to show that item.

packages/bruno-app/src/hooks/useFocusTableRow, packages/bruno-app/src/hooks/useRevealFocusedTableRow · high confidence

Body mode selector now uses MenuDropdown for improved accessibility

The BodyModeSelector component has been refactored to use the MenuDropdown component, replacing the previous implementation. This change improves keyboard accessibility and functionality for selecting request body modes (such as JSON, XML, Form, File, etc.). The component now renders a styled dropdown that groups options by category (Form, Raw, Other) and allows users to switch between body types via a more robust UI pattern.

packages/bruno-app/src/components/BodyModeSelector · high confidence

Bulk editor preserves descriptions and metadata during edits

The BulkEditor component now retains hidden metadata (such as descriptions and annotations) when users edit key-value pairs. Previously, bulk editing would strip these fields; the new implementation matches parsed parameters back to their original counterparts by name and proximity, ensuring that user-provided descriptions survive the roundtrip without requiring manual re-entry.

packages/bruno-app/src/components/BulkEditor · high confidence

Centralized request/response pane sizing and collapse logic

The application now uses a dedicated \useTabPaneBoundaries\ hook to manage the dimensions and collapsed state of the request and response panes within the editor. This change encapsulates the logic for calculating pane widths and heights (including a minimum top pane height of 380px) and handling collapse/expand actions, ensuring consistent behavior across tabs and simplifying the integration of resizable, collapsible panes in the request tab interface.

packages/bruno-app/src/hooks/useTabPaneBoundaries · high confidence

Code editor now degrades gracefully for long lines

The CodeEditor component now detects when a line exceeds the performance threshold and automatically switches to a 'degraded' mode that disables heavy features like syntax highlighting, linting, and folding to prevent freezing. A status bar appears at the bottom of the editor showing the file size, mode, and a warning that features are turned off for performance. Users can click a toggle link in the status bar to manually re-enable the full editor if desired, or disable it again if performance suffers.

packages/bruno-app/src/components/CodeEditor · high confidence

Code generation view now respects user font preferences and enforces text/plain clipboard format

The CodeView component in the sidebar's code generator has been refactored to pull font family and size settings from user preferences, allowing the generated code snippet to display with the user's chosen typography. Additionally, the copy-to-clipboard button now explicitly sets the MIME type to text/plain when copying the snippet, ensuring consistent behavior across different applications when pasting the generated code.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/GenerateCodeItem/CodeView · high confidence

Collection Presets UI now supports Default Environment selection alongside Request Type and Base URL

The Collection Settings Presets panel has been updated to allow users to configure a Default Environment for the collection. In addition to the existing controls for Default Request Type (HTTP, GraphQL, gRPC, WebSocket) and Default Base URL, users can now select a specific environment from a dropdown menu to be automatically selected when the collection is first opened. The UI uses a SegmentedControl for request types and a MenuDropdown for environment selection, with changes persisted via the Save button or autosave.

packages/bruno-app/src/components/CollectionSettings/Presets · high confidence

Collection Variables panel now persists scroll position across tabs

The Collection Settings Variables view now remembers its scroll position when users switch between tabs and return. This is achieved by persisting the scroll offset using a new hook and applying it when the VarsTable components re-render, ensuring a smoother navigation experience within the Pre Request and Post Response variable lists.

packages/bruno-app/src/components/CollectionSettings/Vars · high confidence

Collection header UI overhaul with horizontal scrolling and new action pills

The CollectionHeader component has been refactored to improve layout stability and add new user actions. The header now supports horizontal scrolling for its action bar to prevent content overlap and squeezing on smaller screens. New UI elements include a 'Migrate to YML' pill that allows users to initiate collection format migration, and controls for toggling the 'App' preview mode for HTTP requests. The workspace rename flow has also been enhanced with inline editing capabilities and auto-focus for newly created workspaces.

packages/bruno-app/src/components/RequestTabs/CollectionHeader · high confidence

Collection runner modal now shows request counts and supports delay/tag configuration

The Collection Runner modal (RunCollectionItem) now displays the number of requests that will be executed for both 'Run' (folder-level) and 'Recursive Run' (full collection) modes, updating dynamically based on tag filters and loading states. Users can configure a delay between requests in milliseconds and apply include/exclude tags to the run. The 'Run' and 'Recursive Run' buttons are disabled if no requests match the current filters, and a 'View Run' button appears if a collection run is already in progress.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RunCollectionItem · high confidence

Collection-level authentication mode selector now uses a styled dropdown menu

The Collection Settings Auth component has been refactored to use a new MenuDropdown component for selecting the authentication mode, replacing the previous implementation. This change introduces a styled wrapper that applies theme-based typography and colors to the selector, ensuring consistent UI styling. The dropdown now presents a comprehensive list of available authentication modes—including AWS Sig v4, Basic, WSSE, Bearer Token, Digest, NTLM, OAuth 1.0, OAuth 2.0, API Key, Akamai EdgeGrid (marked as Beta), and No Auth—allowing users to easily switch the collection's default authentication method via a keyboard-accessible interface.

packages/bruno-app/src/components/CollectionSettings/Auth/AuthMode · high confidence

Collections section now supports sorting, multi-selection, and keybinding-based import

The Collections section in the sidebar has been updated to allow users to sort collections alphabetically or by default order, select multiple collections for bulk actions (such as closing), and trigger collection import via a customizable keybinding. These changes enhance workflow efficiency by providing better organization and faster access to import functionality directly from the sidebar interface.

packages/bruno-app/src/components/Sidebar/Sections/CollectionsSection · high confidence

Confirmation modal for deleting response examples

A new confirmation dialog has been added for the 'Delete Example' action within the sidebar's collection items. When a user confirms deletion, the system now explicitly closes the corresponding example tab, removes the example from the collection, and saves the request state before closing the modal. This ensures the UI remains consistent by preventing orphaned tabs and ensuring the underlying data is persisted immediately upon deletion.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/ExampleItem/DeleteResponseExampleModal · high confidence

Customizable keybindings with validation and UI polish

Users can now customize application keybindings through a new Keybindings tab in Preferences. The interface allows editing shortcuts with support for ranges (e.g., 'command+bind+1 - command+bind+8') and enforces OS-specific rules, such as blocking reserved system shortcuts on macOS and Windows and requiring specific modifiers for non-function keys. The UI includes visual feedback for editing states, hover effects, and theme-aware styling.

packages/bruno-app/src/components/Preferences/Keybindings · high confidence

Delete environment confirmation modal now uses danger styling

The confirmation dialog for deleting an environment has been updated to visually emphasize the destructive action. The 'Delete' button now renders with a danger color scheme (using the \--color-background-danger\ variable and white text), making it distinct from standard actions. The modal also displays a success toast upon completion and an error toast if the deletion fails.

packages/bruno-app/src/components/Environments/EnvironmentSettings/DeleteEnvironment · high confidence

Deprecation warning UI for Presets and Post Response Vars

A new DeprecationWarning component has been added to the application, providing a styled banner that alerts users when features like Presets and Post Response Vars are deprecated and scheduled for removal in v3.0.0. This UI element displays a warning icon, the specific feature name, and links to documentation or support, ensuring users are informed about upcoming changes to these capabilities.

packages/bruno-app/src/components/DeprecationWarning · high confidence

Draft tabs become permanent upon editing

A new draft detection middleware in the Redux store now automatically converts temporary preview tabs into permanent tabs when the user makes any edits to request details, folder settings, or collection settings. This ensures that tabs opened for viewing are preserved in the UI once the user starts modifying their content, preventing accidental loss of context.

packages/bruno-app/src/providers/ReduxStore/middlewares/draft · high confidence

EditableTable component rewritten with virtualization, drag-and-drop, and resizable columns

The EditableTable component has been significantly refactored to improve performance and usability. It now uses react-virtuoso for virtualized rendering, allowing efficient handling of large datasets. New features include drag-and-drop row reordering, resizable columns with minimum width constraints, and column sorting with persistent state. The UI has been updated with a new styling wrapper, dedicated sort headers, and support for multi-line editors in description columns.

packages/bruno-app/src/components/EditableTable · high confidence

Editor UI enhancements: secret masking, view persistence, and compact variable cells

The MultiLineEditor component now supports secret masking with a toggle button (SecretEyeButton) and ensures masking marks are preserved after value updates. It also persists and restores editor view state (scroll position, folds) across sessions, with safeguards to prevent page layout shifts. Additionally, a new VarValueCell component introduces a compact mode for variable value inputs, using a ResizeObserver to switch between expanded and compact layouts based on available width, and displaying a type-selector overlay on hover or when errors are present.

packages/bruno-app/src/components/MultiLineEditor · high confidence

Enhanced Git repository cloning with branch selection and path handling

The Clone Git Repository dialog now allows users to select a specific branch when cloning, defaulting to the repository's default branch if none is chosen. The component also implements consistent path joining for collection locations and introduces a selection list interface for managing imported collection paths, improving the clarity and control of the cloning workflow.

packages/bruno-app/src/components/Sidebar/CloneGitRespository · high confidence

Enhanced URL path parameter parsing and interpolation

The URL utility module now supports OData-style path parameters, allowing variables inside parentheses (e.g., \EntitySet(:key)\) and quoted values to be correctly identified and interpolated alongside traditional colon-prefixed parameters (e.g., \:id\). It also introduces an \encodeUrl\ option for \interpolateUrlPathParams\ to control whether path values are percent-encoded, and fixes issues where embedded colons in non-parameter segments were incorrectly parsed as variables.

packages/bruno-app/src/utils/url · high confidence

Enhanced cloning dialog with custom filesystem naming and type labels

The Clone Collection Item modal now displays the specific type of the cloned item (e.g., 'Request' or 'Folder') in the title and success toast messages. Additionally, users can expand advanced options to customize the filesystem filename independently from the display name, with validation for reserved names and support for custom file extensions.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CloneCollectionItem · high confidence

Enhanced code snippet generation with OAuth2 support and shell-first language ordering

The code generator now includes dedicated logic for handling authentication headers, specifically adding support for OAuth2 access tokens retrieved from persisted credentials (with fallback to placeholders) and proper handling for API key placement in headers. Additionally, the available code generation targets are dynamically derived from the underlying library, and the 'Shell-curl' option is explicitly moved to the top of the list for easier access.

packages/bruno-app/src/utils/codegenerator · high confidence

Enhanced script error display with source context and navigation

The ScriptError component in the Response Pane now provides detailed context for script failures, including the specific file path and whether the error originated from the collection, folder, or request level. Users can now click the file path to navigate directly to the relevant settings or request editor, with the editor automatically scrolling to and highlighting the exact line that caused the error. The component also supports expanding the error card to view the full stack trace and includes a button to copy the formatted error details to the clipboard.

packages/bruno-app/src/components/ResponsePane/ScriptError · high confidence

Environment details view refactored with search, inheritance, and tabbed interface

The Environment Details component has been rewritten to support a tabbed interface for variables and secrets, inline environment renaming with validation, and a search bar to filter variables. It now displays inherited environment variables and allows users to configure environment inheritance, while also supporting color customization and copying environments via modal dialogs.

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList/EnvironmentDetails · high confidence

Environment selector now displays collection and global environments side-by-side with tabbed selection

The environment selector UI has been revamped to show both the active collection environment and the active global environment simultaneously in the toolbar, separated by a visual divider. When both are selected, they appear as distinct badges with their respective icons (database for collection, globe for global). Clicking the selector opens a dropdown with tabs to switch between viewing/managing collection environments and global environments, including a search filter for the list. The component now uses a Redux-based state for environments and includes specific styling for empty states, inactive environments, and dropdown width calculation based on environment name length.

packages/bruno-app/src/components/Environments/EnvironmentSelector · high confidence

Environment settings UI restructured with persistent selection and new deletion modal

The Environment Settings interface has been reorganized to improve usability and state management. The main settings component now persists the last viewed environment per tab using Redux tab state, preventing selection loss when navigating away and back. A new 'Delete .env File' modal has been added to safely remove environment files with a confirmation dialog. The layout uses a new styled wrapper for consistent theming and empty states, and the global environment settings now delegate to the shared WorkspaceEnvironments component.

packages/bruno-app/src/components/Environments/EnvironmentSettings · high confidence

Environment tabs now display counts for inherited variables

The environment editor's Variables and Secrets tabs now show a numeric indicator reflecting the total count of variables, including those inherited from parent environments. This change ensures users can see the full scope of their configuration at a glance, distinguishing between locally defined variables and those pulled in via inheritance, while correctly handling draft states and disabled variables.

packages/bruno-app/src/hooks/useEnvironmentTabs · high confidence

Export Environment Modal warns about missing inherited environments

The Export Environment modal now detects and displays warnings when exporting an environment that relies on inheritance (extends) from other environments that are not selected for export. If a parent environment is missing or has been deleted, the modal explicitly lists the missing or unselected inherited environment names, ensuring users are aware that the exported environment may be incomplete or broken without its dependencies.

packages/bruno-app/src/components/Environments/Common/ExportEnvironmentModal · high confidence

File body editor now supports descriptions and improved table styling

The FileBody component in the Request pane has been refactored to display uploaded files in a structured table format, introducing a new 'Description' column that allows users to add multi-line notes to each file entry. The UI now uses a dedicated styled wrapper for consistent theming, with fixed column widths for File, Content-Type, Selected status, and Description, along with visual improvements to table borders and input fields.

packages/bruno-app/src/components/RequestPane/FileBody · high confidence

File picker component now warns when selected files are missing

The FilePickerEditor component now checks if selected files still exist on disk. If a file is missing, the component displays a warning icon and highlights the selection with a warning background, and hovering over the warning shows a tooltip instructing the user to re-upload the file. This prevents silent failures when files referenced in requests or folders are deleted or moved outside the application.

packages/bruno-app/src/components/FilePickerEditor · high confidence

Folder Settings Variables panel now persists scroll position across tabs

The Folder Settings Variables component has been updated to maintain the user's scroll position when switching between tabs. This is achieved by persisting the scroll offset using a new hook and applying it when the VarsTable renders, ensuring that users do not lose their place in the list of Pre Request and Post Response variables when navigating away and back.

packages/bruno-app/src/components/FolderSettings/Vars · high confidence

Global style overhaul with Tailwind CSS and GraphiQL v2 compatibility

The application's global styles have been rewritten to integrate Tailwind CSS and ensure compatibility with the GraphiQL library upgrade (v1.5.9 to v2.4.7). This change introduces a comprehensive set of CSS custom properties for theming, including specific variables for UI elements like the sidebar, tabs, and HTTP method indicators. It also standardizes typography (switching to the Inter font family) and spacing, while applying Mac-specific scrollbar styling for a cleaner appearance. Users will see a refreshed visual design with consistent spacing and improved code editor integration.

packages/bruno-app/src/styles · high confidence

Highlight error lines in script editors

The Bruno app now automatically scrolls to and highlights the specific line causing a script error (pre-request, post-response, or test) within the CodeMirror editor. This new \useFocusErrorLine\ hook subscribes the editor to a Redux signal, ensuring that when an error occurs, the relevant line is visually emphasized with a fading red flash to help users quickly identify and fix issues.

packages/bruno-app/src/hooks/useFocusErrorLine · high confidence

Improved multi-item drag-and-drop preview in the sidebar

The sidebar now displays a more informative preview when dragging multiple collection items. Instead of showing a generic count, the drag ghost now summarizes the selection by type (e.g., "2 folders, 3 requests and 1 app"). This change also ensures that the preview correctly resolves the label and icon for individual items even when they are part of a multi-selection, providing clearer visual feedback during reordering.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CollectionItemDragPreview · high confidence

Improved task list handling and markdown serialization in the rich text editor

The rich text editor now correctly handles mixed lists containing both standard items and checkboxes by parsing them into separate structures rather than merging them into a single task list. Task list checkboxes are normalized to consistent syntax (lowercase 'x') and their checked state is preserved during markdown roundtrips. Additionally, the editor's markdown serialization has been improved to better handle multi-paragraph list items, ordered list separators, and table cell escaping, ensuring that complex content is accurately converted to and from markdown format.

packages/bruno-app/src/ui/RichTextEditor/utils · high confidence

Improved visual distinction for gRPC response status codes

The gRPC response pane now displays status codes with color-coded styling to help users quickly identify the result of a request. Successful responses (status 0) are shown in green, errors (status \> 0) in red, and pending or streaming states in a distinct color. This change introduces a new component that maps numeric gRPC status codes to their standard phrases and applies appropriate CSS classes based on the status value.

packages/bruno-app/src/components/ResponsePane/GrpcResponsePane/GrpcStatusCode · high confidence

InfoTip component now uses react-tooltip and ignores HTML props

The InfoTip component has been refactored to use the react-tooltip library instead of rendering raw HTML content. It now accepts an infotipId and standard tooltip props, while explicitly ignoring the previous html prop, meaning tooltips will no longer render arbitrary HTML but will instead use the library's standard text/children rendering.

packages/bruno-app/src/components/InfoTip · high confidence

Migrate internationalization to react-i18next

The application's internationalization system has been replaced with react-i18next. This change introduces a new initialization configuration in the i18n module and establishes the English translation resource file, enabling the app to use this library for managing UI text and translations.

packages/bruno-app/src/i18n · high confidence

Migration modal now handles unsaved drafts and provides backup options

The Migrate Collection to YAML modal has been enhanced to detect and display unsaved changes (drafts) in collections, folders, requests, and environments before starting the migration. Users are now presented with a step to review these drafts and can choose to discard them to proceed. Additionally, a new backup section allows users to export a ZIP archive of the collection as a safety measure before migration begins, with visual progress indicators and warnings for transient items.

packages/bruno-app/src/components/MigrateCollectionToYmlModal · high confidence

Migration to Rsbuild build system and remote image support

The Bruno app has replaced its previous build tooling with Rsbuild, introducing a new configuration via rsbuild.config.mjs and associated Babel, PostCSS, and Jest setup files. This migration enables a new build plugin that automatically downloads and embeds remote images referenced in Markdown documentation (such as the Changelog) as local static assets during the build process, ensuring they display correctly in the Electron client. The configuration also includes specific module resolution aliases to resolve dependency conflicts with swagger-ui-react and implements code-splitting optimizations for the CodeMirror editor library.

packages/bruno-app · high confidence

Move external collections into workspace with draft handling

Users can now move external collections into a workspace via a new confirmation flow. If the collection contains unsaved request drafts, a modal appears allowing users to save all non-transient drafts, discard all drafts (including transient ones), or save individual transient requests before the move proceeds. If no drafts exist, a simpler confirmation modal displays the source and destination paths, warning that open request tabs will close upon reload.

packages/bruno-app/src/components/Sidebar/Collections/Collection/MoveToWorkspace · high confidence

Multi-selection and draft-aware collection removal in the sidebar

Users can now select multiple items in the sidebar and use the new Bulk Actions dropdown to perform operations like deleting or collapsing/expandings selected collections, folders, and requests in one go. When removing collections, the system now detects unsaved changes (drafts) and presents a confirmation modal that allows users to save all pending changes, discard them, or save and remove simultaneously, ensuring no work is lost during bulk removal.

packages/bruno-app/src/components/Sidebar/Collections/BulkActionsDropdown, packages/bruno-app/src/components/Sidebar/Collections/Collection/RemoveCollections · high confidence

New Bearer Auth component with sensitive field warnings

The Bearer authentication settings for collections now use a dedicated component that integrates a single-line editor for the token and displays a warning if the token is detected as a sensitive field.

packages/bruno-app/src/components/CollectionSettings/Auth/BearerAuth · high confidence

New Create Collection dialog with folder name and format options

The Create Collection modal in the sidebar has been replaced with a new form that requires a collection name, a folder name, and a filesystem location. Users can now choose between 'bru' and 'yml' formats for the collection, and the folder name is automatically sanitized from the collection name but can be edited. The location field is read-only by default but allows browsing for a directory, with validation ensuring all fields are provided.

packages/bruno-app/src/components/Sidebar/CreateCollection · high confidence

New Import Collection Location modal with advanced import options

The Import Collection Location component has been replaced with a new modal that allows users to specify the destination path for imported collections and configure advanced import settings. Users can now choose grouping strategies (by tags or paths) for OpenAPI/Swagger imports, preserve Postman scripts during conversion, and enable automatic synchronization checks for OpenAPI specs imported via URL or file. The modal also provides immediate feedback on import issues, displaying a toast notification and logging warnings or errors for skipped or degraded items directly in the console.

packages/bruno-app/src/components/Sidebar/ImportCollectionLocation · high confidence

New MenuDropdown component with keyboard navigation and submenu support

The application now uses a new MenuDropdown component for dropdown menus, replacing previous implementations. This component provides improved keyboard accessibility (arrow keys, Home/End, Enter/Space) and supports nested submenus that open on hover. It also handles legacy grouped item formats and offers features like tick marks for selected items, custom headers/footers, and controlled/uncontrolled state management.

packages/bruno-app/src/ui/MenuDropdown · high confidence

New QueryResponse component with optional type selector

The QueryResponse component has been refactored to use a new StyledWrapper for consistent border styling and now accepts a hideResultTypeSelector prop. When enabled, this prop hides the response data type selector, allowing parent components to control whether users can switch between raw, preview, and other response formats.

packages/bruno-app/src/components/ResponsePane/QueryResponse · high confidence

New SegmentedControl component with solid and outlined variants

The SegmentedControl UI component has been refactored to support two visual styles: 'solid' (the default recessed track) and 'outlined' (a bordered container with internal dividers). The component now accepts an \items\ array for data-driven rendering, allowing each segment to specify its own \disabled\ state, \icon\, and \label\. It also exposes \size\ (sm, md, lg) and \fullWidth\ props to control dimensions, while maintaining native radio-button semantics for keyboard navigation and accessibility.

packages/bruno-app/src/ui/SegmentedControl/components · high confidence

New UI components for the Preferences settings layout

The Preferences settings page now uses a new set of layout components (\SettingsGroup\, \CheckboxSetting\, \SettingsField\) to structure and style general settings. These components provide a consistent visual hierarchy with grouped sections, styled checkboxes with descriptions, and fields with hints and error states, replacing the previous implementation.

packages/bruno-app/src/components/Preferences/SettingsLayout · high confidence

New bulk import collection location component with issue tracking and path handling fixes

The Sidebar now includes a new BulkImportCollectionLocation component that handles bulk and multiple file imports, featuring enhanced issue tracking and logging for import errors. The component supports grouping imported requests by tags or paths, normalizes collection names to ensure uniqueness (adding 'copy' suffixes when necessary), and uses path.join for consistent path handling across components. It also includes styling fixes for dropdown positioning and modal footer padding.

packages/bruno-app/src/components/Sidebar/BulkImportCollectionLocation · high confidence

New code editor component with theme-aware styling and keybindings

The ApiSpecPanel now uses a new CodeEditor component that integrates CodeMirror with theme-aware styling for syntax highlighting, variable validation colors, and bracket matching. It includes custom keybindings for find/replace (Cmd/Ctrl+F, Cmd/Ctrl+H), autocomplete, and folding, along with YAML linting support.

packages/bruno-app/src/components/ApiSpecPanel/FileEditor · medium confidence

New common utility library for Bruno app logic

The \packages/bruno-app/src/utils/common\ directory has been consolidated into a new, structured utility library. This change introduces dedicated modules for handling API specification variables (\apiSpec\), bulk key-value parsing (\bulkKeyValueUtils\), and CodeMirror editor modes with path parameter highlighting (\codemirror\). It also adds constants for request types, variable scopes, and authentication modes (\constants\), along with robust error handling (\error\), local storage management (\localStorage\), and IPC wrappers (\ipc\). Significant behavioral updates include improved response formatting that preserves BigInt values and handles large JSON/XML responses efficiently (\format-response\), a new masking system for sensitive data in editors (\masked-editor\), and refined file sorting logic that prioritizes sequence numbers over alphabetical order (\folders-requests-sorting\). Comprehensive test coverage has been added for all new utilities.

packages/bruno-app/src/utils/common · high confidence

New custom AppTitleBar with workspace management and platform-specific styling

The AppTitleBar component has been replaced with a new implementation that integrates workspace selection, creation, import, and pinning directly into the window title bar. This change introduces a custom title bar that respects platform conventions: it displays native window controls (minimize, maximize, close) on Windows and Linux, while hiding them on macOS in favor of traffic lights. The component now features a workspace name dropdown that allows users to switch between workspaces, pin frequently used workspaces, and access actions like creating or importing workspaces. It also handles fullscreen state synchronization via IPC, adjusting padding and layout when the window enters or exits fullscreen mode. The styling is theme-aware, using the application's sidebar and dropdown themes for consistency, and includes specific adjustments for non-macOS platforms to ensure proper alignment and spacing.

packages/bruno-app/src/components/AppTitleBar · high confidence

New dedicated preview components for JSON, HTML, text, and video responses

The response viewer now uses specialized preview components instead of a generic code editor for all content types. JSON responses are rendered as an interactive tree with clickable HTTP URLs, HTML responses are displayed in a sandboxed webview with proper base URL handling, text responses feature linkified HTTP URLs and chunked loading for large payloads, and video responses are played via a dedicated media player. The main preview component also persists scroll position across tab switches and supports PDF, audio, and image previews.

packages/bruno-app/src/components/ResponsePane/QueryResult/QueryResultPreview · high confidence

New response timeline with entry filtering and OAuth/scripted request visibility

The Response Pane now features a redesigned Timeline component that groups request events into filterable categories: Request, Pre-Request, Post-Response, and OAuth. Users can toggle these filters via chips to view specific types of activity. The timeline now correctly scopes and displays scripted requests (pre/post) and OAuth2 flows, expanding OAuth entries to show their underlying sub-calls. It also supports gRPC and WebSocket request timelines and persists scroll position across tab switches for easier navigation.

packages/bruno-app/src/components/ResponsePane/Timeline · high confidence

OAuth2 authentication UI restructured with dedicated styling and grant-type routing

The OAuth2 authentication section in the Request Pane has been refactored to improve visual consistency and component organization. A new styled wrapper standardizes the appearance of labels, input fields, and checkboxes using the application's theme variables. The main component now explicitly routes to specific sub-components for each grant type (Password, Authorization Code, Implicit, and Client Credentials), ensuring that the UI correctly displays the relevant fields for the selected authentication flow.

packages/bruno-app/src/components/RequestPane/Auth/OAuth2 · high confidence

Persist runner request and response payloads in SQLite

The application now stores the full request and response payloads from runner executions in a local SQLite database. This change introduces hooks to retrieve these persisted payloads for completed or errored items, ensuring that detailed exchange data remains available even if in-memory state is lost, and provides a mechanism to clear stored payloads for a specific collection.

packages/bruno-app/src/hooks/useClearStoredRunnerExchanges, packages/bruno-app/src/hooks/useStoredRunnerExchange · high confidence

Persist scroll position for Request Variables tabs

The Request Variables section in the Request Pane now remembers its scroll position when switching between tabs. This ensures that users do not lose their place in the list of pre-request or post-response variables when navigating away and back, improving usability for requests with many variables.

packages/bruno-app/src/components/RequestPane/Vars · high confidence

Portal component re-exported from UI library

The Portal component in the Bruno app is now a thin re-export of the implementation provided by the 'ui/Portal' module. This change centralizes the portal logic within the shared UI library, ensuring that the app uses the standardized portal behavior defined there rather than maintaining its own local implementation.

packages/bruno-app/src/components/Portal · high confidence

Preferences interface restructured into a tabbed layout

The Preferences modal has been reorganized from a linear list into a sidebar-based tabbed interface. This change introduces distinct tabs for General, Themes, Display, Proxy, Client Certificates, Keybindings, AI, Cache, Support, and Beta settings, allowing users to navigate configuration options more efficiently within the application.

packages/bruno-app/src/components/Preferences · high confidence

Query editor now supports search/replace and adapts to dark mode

The GraphQL query editor in the Request Pane now includes a search and replace bar (toggled via keyboard shortcuts) and fully adapts to the application's dark mode by switching the CodeMirror theme to Monokai and applying theme-aware colors for syntax tokens, variable validation, and bracket matching. The editor also handles invalid GraphQL schemas gracefully by catching linting errors instead of crashing, and includes tests verifying that URL link-awareness is correctly initialized without a click handler.

packages/bruno-app/src/components/RequestPane/QueryEditor · high confidence

Query parameters section redesigned with bulk editing and table enhancements

The Query Params component in the Request Pane has been refactored to use a new table-based UI with support for bulk editing, column resizing, and reordering. Users can now toggle a bulk edit mode for efficient mass updates, while individual query and path parameters are managed via an editable table that supports variable autocomplete, multi-line values, and persistent column widths. The layout also includes sticky bulk-edit bars and improved theming for better readability and dark mode support.

packages/bruno-app/src/components/RequestPane/QueryParams · high confidence

Redesign of collection row styling and interaction in the sidebar

The visual presentation and interaction model for collection rows in the sidebar have been updated. A new styled wrapper component now applies consistent sidebar row styles, including specific handling for drag-and-drop states (such as drop targets above/below and hover effects) and text truncation for collection names. The row component itself has been refactored to manage a wider range of user interactions, including multi-selection, drag-and-drop reordering, keyboard focus states, and context menu actions like renaming, cloning, sharing, and generating documentation. Additionally, the row now supports opening tabs for OpenAPI sync and collection running, and integrates with the mock server beta feature.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionRow · high confidence

Redesigned Collection Overview with Version Management and Styled Info Panel

The Collection Settings Overview now features a completely new Info component that presents collection metadata in a structured, icon-driven layout. Users can now view and edit the collection version directly from this panel, with a dedicated 'change' link that opens a modal for updating the version string. The overview also displays the collection's file path, counts for both collection-specific and global environments (with links to open their respective settings tabs), the total number of requests, and quick-access buttons to share the collection or generate documentation. The visual presentation has been updated with a new styled wrapper that applies specific color themes to icons for location, environments, requests, sharing, versioning, and documentation generation.

packages/bruno-app/src/components/CollectionSettings/Overview/Info · high confidence

Redesigned General Preferences tab with Formik validation and new settings

The General Preferences tab has been rebuilt using Formik and Yup for robust form handling and validation. This update introduces several new configuration options: users can now set a default collection location, configure custom CA certificates (with an option to keep default certificates), enable auto-save with a configurable interval, and choose to use the system browser for OAuth2 authorization. Existing settings like SSL verification, cookie storage/sending, and request timeout remain available, but are now managed through a unified, validated form interface.

packages/bruno-app/src/components/Preferences/General · high confidence

Redesigned GraphQL request pane with resizable query builder and variables editor

The GraphQL request pane has been restructured to include a dedicated Query Builder and a collapsible Variables editor, both featuring resizable panes via drag bars. Users can now toggle the query builder sidebar and adjust the height of the variables section directly within the request interface, improving workflow for complex GraphQL requests.

packages/bruno-app/src/components/RequestPane/GraphQLRequestPane · high confidence

Redesigned OpenAPI Sync tab with visual diffing and drift management

The OpenAPI Sync tab has been restructured into a multi-section interface that provides granular control over synchronization. Users can now connect to an OpenAPI specification via URL or local file, with settings to enable automatic periodic checks. The new Collection Status and Overview sections display summary cards and banners that clearly distinguish between endpoints modified in the collection, missing from the collection, or added locally, alongside pending spec updates. A new Confirm Sync modal groups changes by type for review before application. For endpoints with conflicts or differences, the tab now features an expandable visual diff viewer that highlights changes in URL, parameters, headers, authentication, and body content side-by-side, allowing users to inspect and decide whether to keep their local version or accept the incoming spec changes.

packages/bruno-app/src/components/OpenAPISyncTab · high confidence

Redesigned Support page in Preferences

The Support section within the Preferences panel has been redesigned to present help and community resources in a structured, card-based layout. The new interface groups links into 'Help' (Documentation, Report Issues) and 'Community' (GitHub, Discord, Twitter, LinkedIn) categories, featuring consistent styling, icons, and descriptions for each resource to improve discoverability and user experience.

packages/bruno-app/src/components/Preferences/Support · high confidence

Redesigned WebSocket response pane with tabbed interface

The WebSocket response view has been restructured to use a tabbed layout, allowing users to switch between 'Messages', 'Headers', and 'Timeline' views. This change introduces a new \StyledWrapper\ for consistent theming and integrates a \ResponsiveTabs\ component to manage the UI. The pane now dynamically displays message and header counts as tab indicators and includes controls for clearing responses or the timeline, improving the organization and clarity of WebSocket interaction data.

packages/bruno-app/src/components/ResponsePane/WsResponsePane · high confidence

Redesigned client certificate management UI with toggleable passphrase visibility

The Client Certificate settings panel has been rebuilt to offer a polished interface for managing collection-level client certificates. Users can now add certificates via a modal form that supports both standard (cert/key) and PFX formats, with file paths stored as relative to the collection. A new segmented control allows switching between certificate types, and passphrase inputs now feature a toggle button to show or hide the entered text. The UI also includes visual indicators for sensitive fields and animations for protocol placeholders.

packages/bruno-app/src/components/CollectionSettings/ClientCertSettings · high confidence

Redesigned dropdown component with improved styling and accessibility

The Dropdown component has been refactored to use a new \StyledWrapper\ that leverages theme variables for colors, fonts, and borders, ensuring consistent visual integration with the application's theme. The update introduces enhanced keyboard accessibility with explicit focus-visible states and outlines, alongside new visual states for active, focused, and selected items. A new \hideOnReferenceClip\ prop allows the dropdown to hide when its trigger element is obscured, and a \sameWidth\ modifier ensures the dropdown popover matches the width of its trigger element.

packages/bruno-app/src/components/Dropdown · high confidence

Redesigned environment import with conflict resolution and validation

The environment import modal has been redesigned to support a two-step workflow (upload and review) for both Bruno and Postman JSON files. Users can now drag and drop or browse for files, after which the system parses them and groups results into 'New', 'Already exists', and 'Could not be read' categories. For environments with name conflicts, users can choose to either replace the existing environment or import as a new copy, with inheritance relationships preserved during the import. Invalid files are skipped and displayed with error details, and the interface includes search filtering and selection controls to manage which environments are imported.

packages/bruno-app/src/components/Environments/Common/ImportEnvironmentModal · high confidence

Redesigned environment list with .env file support and improved UX

The environment settings interface has been completely overhauled to support a new layout featuring a dedicated sidebar for environment selection and a main content area. This update introduces native support for .env files, allowing users to create, edit, and manage multiple .env files alongside traditional environment variables. The UI now includes a search bar for filtering environments, visual color badges for environments, and confirmation dialogs to prevent accidental switching or losing unsaved changes. Additionally, the component integrates with the Redux store for state management and uses styled-components for a modern, theme-aware appearance.

packages/bruno-app/src/components/Environments/EnvironmentSettings/EnvironmentList · high confidence

Redesigned environment management with inheritance, tabs, and dot-env support

The Workspace Environments view has been completely rewritten to support a more robust environment workflow. Users can now create, copy, rename, and delete global environments via dedicated modals with validation. The interface introduces environment inheritance, allowing environments to extend variables from others, with clear warnings and UI for managing these relationships. Variables and secrets are now separated into distinct tabs within each environment, and a new dot-env file editor allows managing .env files directly. The list view includes search, scroll persistence, and confirmation dialogs for switching environments with unsaved changes.

packages/bruno-app/src/components/WorkspaceHome/WorkspaceEnvironments · high confidence

Redesigned folder variable management with drag-and-drop, sorting, and descriptions

The folder settings variables table has been replaced with a new implementation that supports drag-and-drop reordering and alphabetical sorting of variables. Users can now add descriptions to variables via a dedicated column, and the interface includes a data type selector for request variables. The table also persists column widths and scroll position across tabs, and validates variable names to ensure they contain only allowed characters.

packages/bruno-app/src/components/FolderSettings/Vars/VarsTable · high confidence

Redesigned gRPC request body editor with multi-message support

The gRPC request body interface has been completely rewritten to support sending multiple messages in client-streaming and bidi-streaming scenarios. Users can now add, delete, and individually manage multiple gRPC messages within a single request, each with its own toolbar for formatting JSON, generating sample payloads, and sending. The new UI includes persistent scroll state across tabs, improved empty states, and a dedicated footer for adding new messages, replacing the previous single-message input.

packages/bruno-app/src/components/RequestPane/GrpcBody · high confidence

Redesigned import collection modal with Git and URL tabs

The Import Collection modal has been restructured into a tabbed interface, adding dedicated tabs for importing from Git repositories and remote URLs alongside the existing file upload option. The new File tab supports drag-and-drop for multiple files (JSON, YAML, WSDL, ZIP) and automatically detects formats like Postman, Insomnia, OpenAPI, and Bruno collections. A fullscreen loading overlay with cycling status messages now appears during import processing, and the UI respects the application's theme settings for consistent styling across light and dark modes.

packages/bruno-app/src/components/Sidebar/ImportCollection · high confidence

Redesigned notifications modal with resizable sidebar and Markdown support

The notifications modal has been redesigned to feature a resizable sidebar for the notification list, allowing users to adjust the width between the list and detail panes. The detail view now renders notification content as Markdown, supporting formatted text, and includes a new tab system to filter between 'All' and 'Unread' notifications, with options to mark all as read or clear all.

packages/bruno-app/src/components/Notifications/NotificationsModal · high confidence

Redesigned proxy settings UI with PAC support and system proxy integration

The Proxy Settings panel in Preferences has been completely rewritten to support manual, PAC (Proxy Auto-Configuration), and System Proxy modes. Users can now toggle password visibility for proxy authentication, upload PAC files or specify PAC URLs, and refresh the PAC cache on demand. The interface includes validation for proxy configurations, debounced auto-saving, and distinct styling for system proxy indicators and error states.

packages/bruno-app/src/components/Preferences/ProxySettings · high confidence

Redesigned request URL input with cURL import and theme support

The Request Pane's URL input area has been refactored into a new component structure (QueryUrl) featuring a dedicated styled wrapper and integration with the SingleLineEditor. This change introduces automatic cURL command parsing for both HTTP and GraphQL requests, allowing users to paste a cURL string to automatically populate the URL, method, headers, and body. The UI now supports theme-based styling for borders and layout, includes a 'Generate Code' button to open code generation options, and implements logic to preserve cursor position when the URL is trimmed.

packages/bruno-app/src/components/RequestPane/QueryUrl · high confidence

Redesigned request variables table with validation, descriptions, and drag-and-drop

The Request Variables table in the Request Pane has been rebuilt to support variable descriptions, drag-and-drop reordering, and alphabetical sorting. It now enforces stricter variable name validation (allowing alphanumeric characters, hyphens, underscores, and dots) and provides a dedicated column for adding descriptions to each variable. The table also persists column widths and scroll position across tabs, and integrates with the new data type selector for request variables.

packages/bruno-app/src/components/RequestPane/Vars/VarsTable · high confidence

Redesigned request/response pane layout with collapsible split and improved error handling

The RequestTabPanel has been refactored to support a collapsible request/response split in both horizontal and vertical layouts, allowing users to expand or drag-resize panes via new indicator components. The panel now includes dedicated error states for missing requests, folders, and examples, providing clear messages and a 'Close Tab' button. A new error boundary catches unexpected crashes within the tab, offering recovery options. Additionally, large request loading has been improved with a dedicated UI that explains the regex-based parsing approach and allows manual retry.

packages/bruno-app/src/components/RequestTabPanel · high confidence

Redesigned response example editing with bulk headers and binary preview

The Response Example pane now features a complete rewrite of its editing interface. The response body editor has been updated to automatically detect and preview binary content (such as images and videos) using a dedicated preview component, while text bodies use a code editor with syntax highlighting based on content type. The response headers editor has been replaced with a new table-based interface that supports inline editing, drag-and-drop reordering, and a new bulk-edit mode for managing multiple headers at once. Additionally, changing the Content-Type header now automatically updates the response body type to ensure consistency.

packages/bruno-app/src/components/ResponseExample/ResponseExampleResponsePane/ResponseExampleResponseHeaders · high confidence

Redesigned theme selection interface in Preferences

The theme selection UI in the Preferences modal has been overhauled to provide a more visual and granular experience. Users can now switch between Light, Dark, and System appearance modes using icon-based buttons. Within each mode, individual theme variants are presented as selectable cards featuring a small preview of the sidebar and main content layout, allowing users to easily distinguish and choose their preferred color scheme.

packages/bruno-app/src/components/Preferences/Themes · high confidence

Redesigned workspace overview with split layout and quick actions

The Workspace Overview page has been redesigned to feature a split layout: the main panel displays workspace statistics (collection and environment counts), quick action buttons for creating, opening, and importing collections, and a list of existing collections, while the right panel displays the workspace documentation. This change introduces a new styled wrapper component to manage the layout and styling, replacing the previous implementation.

packages/bruno-app/src/components/WorkspaceHome/WorkspaceOverview · high confidence

Refactor DocsAction component styling and structure

The DocsAction component in the documentation view has been refactored to encapsulate its layout and styling within a new StyledWrapper component, ensuring consistent button alignment and padding. The component now uses a dedicated test ID (docs-edit-toggle) for the edit/preview toggle button, replacing previous class-selector-based testing approaches, which improves test reliability and maintainability.

packages/bruno-app/src/components/Documentation/DocsAction · high confidence

Refactored documentation editor and rich text editor hooks into modular subdirectories

The file structure for the documentation editor and rich text editor hooks has been reorganized to improve modularity. The \useDocsEditingState\ hook, which manages the editing state for documentation tabs via Redux, has been moved into its own \index.js\ file within the \useDocsEditingState\ directory. Similarly, rich text editor hooks have been split into dedicated subdirectories: \useLinkHandlers\ now handles link insertion and removal logic with URL safety checks, and \useToolbarOverflow\ manages the dynamic visibility of toolbar buttons based on available space and editor state. This change affects how these internal components are imported and structured but does not alter the user-facing behavior of the documentation or rich text editing features.

packages/bruno-app/src/components/Documentation/useDocsEditingState, packages/bruno-app/src/ui/RichTextEditor/hooks · high confidence

Refactored request tab UI and improved unsaved-change handling

The RequestTab component has been restructured into smaller, dedicated sub-components (CloseTabIcon, DraftTabIcon, SpecialTab, RequestTabLoading, RequestTabNotFound) to improve maintainability and visual consistency. A new DraftTabIcon now uses the theme's draftColor to clearly indicate unsaved changes. The tab logic now correctly handles special tabs (like Collection Settings, Runner, and OpenAPI Sync) with appropriate icons and labels. Additionally, the behavior for closing tabs has been refined: transient requests now show a streamlined save confirmation, and the middle-mouse-button click to close tabs is now supported without triggering browser autoscroll. A new utility (resolveNewRequestTarget) ensures that creating a new request from a tab contextually targets the correct parent folder or collection root.

packages/bruno-app/src/components/RequestTabs/RequestTab · high confidence

The rich text editor's user interface has been restructured by extracting components into a dedicated folder, introducing new \EditorLinkEditPopover\ and \EditorLinkPopover\ for improved link editing and viewing, and adding an \EditorTableMenu\ for table row/column operations. The \EditorToolbar\ now supports overflow menus for additional formatting options, and the editor content styles have been updated to include a blinking cursor animation and proper table column resize handles.

packages/bruno-app/src/ui/RichTextEditor/components · high confidence

Rename dialog now supports custom filesystem filenames and saves unsaved changes before renaming

The Rename Collection Item dialog has been enhanced to allow users to specify a custom filename for requests and folders that differs from the display name, with an optional advanced options section to toggle this visibility. Additionally, the rename operation now automatically saves any unsaved draft changes in a request before performing the rename, preventing data loss. The dialog also includes a new Info modal to display both the display name and the underlying filesystem filename for clarity.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RenameCollectionItem · high confidence

Request tabs now show a draft indicator and a hover-revealed close button

The request tab UI has been updated to visually distinguish unsaved changes and improve tab management. Tabs with unsaved edits now display a draft icon by default, which is replaced by a close icon when the user hovers over the tab (for closable tabs). Non-closable tabs with changes continue to show the draft icon even on hover. The close button itself is hidden by default and fades in on hover to reduce visual clutter, with a smooth gradient transition matching the tab's background.

packages/bruno-app/src/components/RequestTabs/RequestTab/GradientCloseButton · high confidence

Request-level apps now run in a secure context with proper variable scoping

The AppView component now supports request-level apps that execute inside an Electron webview with a secure origin (bruno-app://), enabling access to secure-context APIs like crypto.subtle that were previously unavailable. The app guest receives a bootstrapped bru.ctx API and a resolved set of variables scoped to the request, its parent folder, and the collection, while explicitly excluding OAuth2 credential secrets. An EmptyAppState component provides a labeled empty state with options to add code or learn more.

packages/bruno-app/src/components/AppView · high confidence

Response example editing is rebuilt with dedicated components and theme-aware styling

The ResponseExampleRequestPane has been refactored to use a new set of dedicated sub-components (ResponseExampleBody, ResponseExampleHeaders, ResponseExampleParams, ResponseExampleFormUrlEncodedParams, ResponseExampleMultipartFormParams, ResponseExampleFileBody, and ResponseExampleDescription) that replace the previous implementation. This change introduces consistent, theme-aware styling via new StyledWrapper files, supports editing of all request body modes (JSON, XML, text, SparQL, form-urlencoded, multipart, and file uploads) with specific editors for each, and adds features like bulk editing for headers and query/path parameters, auto-detection of content types for file uploads, and prettification for JSON and XML bodies.

packages/bruno-app/src/components/ResponseExample/ResponseExampleRequestPane · high confidence

Response example pane now supports tabbed view for headers and mock try results

The Response Example pane has been refactored to use a tabbed interface, allowing users to switch between the expected response body, response headers, and mock server try results. The component now persists the active tab state via Redux, ensuring the user's selection is remembered across interactions. Additionally, the layout includes a status code display and a layout toggle, with styling updated to reflect the current theme.

packages/bruno-app/src/components/ResponseExample/ResponseExampleResponsePane · high confidence

Response headers table now persists scroll position across tabs

The Response Headers component in the Response Pane has been refactored to use a new styled table layout and now remembers its scroll position when switching between tabs. This ensures that users do not lose their place in long response headers when navigating away and back, improving usability for large responses.

packages/bruno-app/src/components/ResponsePane/ResponseHeaders · high confidence

Response pane UI overhaul with new action menu and test status indicators

The Response pane has been restructured to improve usability and visual clarity. A new dropdown menu (ResponseActions) now groups response management options like clearing and downloading, replacing previous inline buttons. Test results are now summarized with a dedicated label (TestResultsLabel) that displays the total count or failed count directly on the Tests tab, and script errors are highlighted with a distinct icon (ScriptErrorIcon) that allows users to toggle error visibility. The layout and styling have been updated via new StyledWrapper components to support responsive tab behavior, proper overflow handling, and theme-aware colors for active states and test results.

packages/bruno-app/src/components/ResponsePane · high confidence

Response pane actions now adapt based on layout expandability

The Response Pane Actions component has been refactored to dynamically switch between a dropdown menu and a row of visible action buttons depending on whether the right side of the response pane is expandable. When the pane is not expandable, users see a 'More actions' dropdown containing Copy, Download, Clear, Change layout, and (for non-GraphQL requests) Save response. When the pane is expandable, these actions appear as direct buttons for quicker access. Additionally, GraphQL requests now correctly display a tailored set of actions (Copy, Download, Clear, Change layout) in the dropdown, excluding the Save response option due to schema validation constraints.

packages/bruno-app/src/components/ResponsePane/ResponsePaneActions · high confidence

Response pane placeholder now adapts to vertical layout and OS-specific shortcuts

The Response Pane's empty state (placeholder) has been refactored to support a vertical layout mode, adjusting the send icon size and spacing when the user switches the response pane orientation. Additionally, the placeholder now dynamically displays keyboard shortcuts for actions like 'Send Request', 'New Request', and 'Edit Environments', correctly formatting the key combinations based on the user's operating system (macOS vs. Windows) via the preferences store.

packages/bruno-app/src/components/ResponsePane/Placeholder · high confidence

Response size display now handles invalid values and formats bytes/KB

The ResponseSize component in the Response Pane now safely handles undefined, null, NaN, Infinity, and non-numeric size values by rendering nothing instead of breaking. For valid sizes, it displays the value in bytes (e.g., '500B') when under or equal to 1024 bytes, and in kilobytes (e.g., '1.46KB') when larger, with the exact byte count available via a hover tooltip.

packages/bruno-app/src/components/ResponsePane/ResponseSize · high confidence

Response time display now adapts to theme colors

The ResponseTime component in the Response Pane has been refactored to use a dedicated styled wrapper that pulls its font size and text color from the current application theme. This ensures that the displayed response duration (formatted as seconds for durations over 1000ms, or milliseconds otherwise) visually integrates with the active theme, including dark mode, rather than relying on hardcoded styles.

packages/bruno-app/src/components/ResponsePane/ResponseTime · high confidence

Responsive tabs now adapt to right-side content width and support overflow menus

The ResponsiveTabs component has been rewritten to dynamically calculate visible tabs based on available space, accounting for the width of adjacent right-side content via a provided ref. It now hides overflowing tabs into a dropdown menu (using MenuDropdown) when space is constrained, ensures the active tab remains visible, and supports an expandable right-side element with hysteresis to prevent layout flickering. Styling is now handled by a dedicated StyledWrapper with theme-aware colors and focus states.

packages/bruno-app/src/ui/ResponsiveTabs · high confidence

Restructured Display preferences into Font and Zoom sections

The Display preferences page has been reorganized to separate font and zoom settings into distinct components. Users will now see dedicated sections for adjusting font styles and interface zoom levels within the Display settings, improving the clarity and manageability of these specific UI customization options.

packages/bruno-app/src/components/Preferences/Display · high confidence

Revamped read-only Variables tab with resizable details drawer and scroll persistence

The Variables tab in the VariablesEditor component has been redesigned to present collection and environment variables in a read-only, organized layout. Variables are now grouped into collapsible sections (Runtime and Environment) and displayed in a table with sticky headers. A key addition is the VariableDetailsDrawer: clicking the expand icon on an object or array variable opens a resizable side panel that shows the full value in a read-only code editor, allowing users to inspect complex structures without leaving the list. Secret variables can be toggled between masked and revealed states directly in the row. The interface also includes row-level actions to copy values and persists the scroll position and column widths across sessions, ensuring a consistent viewing experience when switching environments or refreshing.

packages/bruno-app/src/components/VariablesEditor · high confidence

Rich text editor content styling and component structure reorganized

The RichTextEditor component has been restructured to improve maintainability and styling consistency. A new \editorContentStyles.js\ file centralizes the CSS-in-JS styles for the editor's content area, defining how headings, lists (including task lists), code blocks, blockquotes, and other elements appear in both editable and read-only modes. The main \index.js\ entry point now explicitly imports and attaches these styles, while also managing the link popover's positioning via a callback ref to ensure accurate container detection. This change consolidates visual presentation logic and refactors the component's internal structure without altering its external API.

packages/bruno-app/src/ui/RichTextEditor · high confidence

Script editing now uses tabs with scroll persistence and error indicators

The Request Pane's script editor has been restructured to use a tabbed interface, separating 'Pre Request' and 'Post Response' scripts. This change introduces several usability improvements: scroll positions for each script are now persisted across tab switches and sessions, ensuring you return to where you left off; a status dot indicator appears on the tab to show if a script has an error; and the code editor automatically scrolls to and highlights the line containing a script error. The editor also respects user preferences for code font and size.

packages/bruno-app/src/components/RequestPane/Script · high confidence

Sensitive field detection warnings for non-secret environment variables

The application now detects when sensitive information is stored in plain text or referenced via non-secret environment variables, prompting users to mark them as secrets or move them to a .env file. This new hook, useDetectSensitiveField, analyzes the active environment's variables to identify values that are either hardcoded strings or references to variables not marked as 'secret', providing specific warnings to improve security hygiene.

packages/bruno-app/src/hooks/useDetectSensitiveField · high confidence

The sidebar now uses virtualization to render only the visible collection items, significantly improving responsiveness when navigating large collections with many nested folders and requests. This change introduces a new \CollectionItemRow\ component and a \SidebarRow\ dispatcher that maps flattened row data to specific UI components (such as \CollectionRow\, \EmptyCtaRow\, and \ExampleItem\), replacing the previous flat rendering approach. The implementation includes updated styling for drag-and-drop indicators, hover states, and keyboard focus within the virtualized list.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CollectionItemRow, packages/bruno-app/src/components/Sidebar/Collections/SidebarRow · high confidence

The collection utility module has been reorganized to support a new flat-sidebar rendering model and improved collection handling. A new \flattenSidebarTree\ utility now generates a flat list of sidebar rows with ancestor-scoped IDs to prevent collisions during drag-and-drop operations, while \buildSidebarEntries\ handles platform-specific path resolution (e.g., case-insensitive matching on Windows). The \export\ module was updated to strip internal UIDs and secrets before saving, and \emptyStateRequest\ provides a unified menu for creating HTTP, GraphQL, gRPC, and WebSocket requests in empty folders. These changes are accompanied by comprehensive test coverage for the new sidebar flattening logic, search filtering, and export preparation.

packages/bruno-app/src/utils/collections · high confidence

The sidebar now displays abbreviated HTTP method names (e.g., 'GET' becomes 'GET', 'OPTIONS' becomes 'OPT') for standard requests, while GraphQL, gRPC, and WebSocket requests are shown as 'gql', 'grpc', and 'ws' respectively. Each method type is assigned a distinct color defined in the theme, providing a visual indicator of the request type directly in the collection tree.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/RequestMethod · high confidence

The SidebarSection component now automatically expands a collapsed section when its associated action buttons are clicked, improving workflow efficiency by removing the need to manually toggle the section header first. This behavior is implemented within the section's action container, which intercepts clicks to set the section's expanded state before propagating the event, ensuring the content is visible for immediate interaction.

packages/bruno-app/src/components/Sidebar/SidebarSection · high confidence

Standardized tab utility functions for request type detection and script tab selection

The application now uses a centralized utility module to manage tab-related logic, specifically introducing functions to identify HTTP, GraphQL, gRPC, and WebSocket requests, check if items are folders, determine if an item is already open in a tab, and automatically scroll to the active tab. Additionally, it provides logic to determine the active script tab based on the presence of pre-request or post-response scripts, ensuring consistent behavior across the UI when handling different request types and script configurations.

packages/bruno-app/src/utils/tabs · high confidence

Status codes in the request timeline now use theme-aware styling

The Response Pane's timeline now renders HTTP status codes using a dedicated component that respects the current UI theme. Numeric codes are color-coded (green for 2xx, amber for 3xx, red for 4xx/5xx) with a subtle background tint, while pre-send network errors (like ECONNREFUSED or ETIMEDOUT) are displayed in a muted gray to distinguish them from server errors. This ensures the status indicator remains consistent with the user's theme settings.

packages/bruno-app/src/components/ResponsePane/Timeline/TimelineItem/Common/Status · high confidence

Support drag-and-drop and alphabetical sorting for variables

Users can now sort variable lists alphabetically (A-Z or Z-A) or revert to the default order, with the chosen sort mode persisted across sessions. Additionally, when the list is in its default unsorted state, users can manually reorder variables via drag-and-drop; edits made while sorted are automatically reconciled to maintain the correct underlying order upon saving.

packages/bruno-app/src/hooks/useSortCycle, packages/bruno-app/src/hooks/useSortableEditableTableRows, packages/bruno-app/src/utils/sortableRows · high confidence

Swagger UI renderer now supports Try-it-out requests via IPC and handles local file:// reference resolution

The Swagger UI renderer in the API Spec panel now intercepts 'Try-it-out' requests through an Electron IPC bridge (\renderer:swagger-fetch\), allowing API calls to work correctly even when the app is loaded from a local \file://\ URL. This change also fixes resolver errors for internal \$ref\ schemas by faking the document base URI, and adds clear error messages for unsupported body types (like file uploads) in the Try-it-out panel, guiding users to use Bruno requests instead.

packages/bruno-app/src/components/ApiSpecPanel/Renderers · high confidence

Theme dropdown receives visual overhaul and keyboard navigation

The Theme dropdown component in the status bar has been redesigned with a new two-column layout for light and dark themes, improved active indicators, and full keyboard navigation support (arrow keys, Enter, Escape) to enhance accessibility and usability.

packages/bruno-app/src/components/StatusBar/ThemeDropdown · high confidence

Theme provider now supports system preference sync and Electron background color conversion

The ThemeProvider in the Bruno app has been refactored to automatically adapt to the operating system's color scheme when the user selects 'system' mode, listening for real-time changes via matchMedia. Additionally, the provider now ensures that theme background colors are correctly converted to hex format before being sent to the Electron main process, fixing issues where non-hex values might have caused incorrect window background colors.

packages/bruno-app/src/providers/Theme · high confidence

Toast notifications now adapt to the active theme and reduce duration during automated testing

The Toaster provider now integrates with the application's theme system, ensuring toast notifications use the correct background and text colors for both light and dark modes. Additionally, when the application is running under Playwright for automated testing, the toast duration is reduced from 2000ms to 500ms to prevent UI conflicts and speed up test execution.

packages/bruno-app/src/providers/Toaster · high confidence

Unsaved changes confirmation for environment settings

A new confirmation dialog now appears when attempting to close an environment editor with unsaved changes. The modal warns the user about pending modifications to either collection environment settings, global environment settings, or .env files, and provides three options: discard changes, cancel the close action, or save changes before closing.

packages/bruno-app/src/components/Environments/ConfirmCloseEnvironment · high confidence

Visual handling of multiple files in multipart form cells

The MultipartFileChipsCell component now renders multiple selected files as a row of chips, automatically hiding overflow files behind a '+N more' dropdown when space is limited. Users can view the full list of files via the dropdown and remove individual files using the remove button in edit mode.

packages/bruno-app/src/components/MultipartFileChipsCell · high confidence

Visual status indicators for collection items

The sidebar now displays distinct icons and colors to reflect the state of collection items: a spinning loader for items currently loading, a yellow warning triangle for partial states, and a red alert circle for errors. Additionally, items identified as 'app' type are now marked with a dedicated window icon, improving clarity on item status and type within the navigation tree.

packages/bruno-app/src/components/Sidebar/Collections/Collection/CollectionItem/CollectionItemIcon · high confidence

WSSE authentication UI now displays sensitive field warnings

The WSSE authentication form in the request pane now includes a warning indicator for the password field when the application detects it as a sensitive value. This change introduces a new component structure for WSSE auth, replacing the previous implementation with a version that integrates the SensitiveFieldWarning component and the useDetectSensitiveField hook to alert users about potential security risks associated with storing passwords in plain text within the request configuration.

packages/bruno-app/src/components/RequestPane/Auth/WsseAuth · high confidence

WSSE authentication settings now support sensitive field warnings

The WSSE authentication configuration panel in Collection Settings has been updated to include a warning indicator for the password field. When a password is entered, a SensitiveFieldWarning component is displayed to alert users that the value is being handled as sensitive data. This change improves security awareness for users configuring WSSE credentials without altering the underlying authentication logic.

packages/bruno-app/src/components/CollectionSettings/Auth/WsseAuth · high confidence

WebSocket connection management and UI updates

The WebSocket request URL component now features explicit Connect and Disconnect buttons that replace the previous single-action model, allowing users to manually control the connection lifecycle. The interface displays real-time connection status with visual indicators (pulsing or blinking animations) for connecting, connected, and disconnecting states. Additionally, the component now automatically disconnects the WebSocket when the URL is modified while connected, preventing stale connections. The UI also incorporates theme-aware styling for draft changes and improved tooltip handling.

packages/bruno-app/src/components/RequestPane/WsQueryUrl · high confidence

Workspace management logic and state handling moved to Redux

The application now manages workspaces entirely through the Redux store, introducing a dedicated \workspaces\ slice with actions for creating, removing, and switching workspaces, as well as adding or removing collections from them. This change brings support for workspace-specific environment variables (\.env\ files), scratch collections for temporary work, and tab-focus logic that automatically switches to the current workspace when an active tab belongs to a different one. The new implementation also handles workspace closure by cleaning up scratch collections and switching to the default workspace, ensuring the UI header reflects the correct workspace name.

packages/bruno-app/src/providers/ReduxStore/slices/workspaces · high confidence

gRPC method selection now supports fuzzy search and service grouping

The gRPC method dropdown in the Request Pane has been redesigned to improve usability when selecting methods. It now groups available methods by their service name, displaying a sticky header for each service. A search input is included at the top of the dropdown, utilizing fuzzy matching to filter methods as you type. Additionally, each method item displays a specific icon indicating its type (unary, client-streaming, server-streaming, or bidi-streaming) and uses the application theme for consistent styling.

packages/bruno-app/src/components/RequestPane/GrpcQueryUrl/MethodDropdown · high confidence

gRPC reflection caching and environment-aware URL resolution

The application now caches gRPC server reflection data in local storage to avoid redundant network requests, serving cached methods for the same resolved URL on subsequent calls. It also resolves environment variables within gRPC URLs before fetching reflection data, ensuring that different environments (e.g., dev vs. prod) maintain separate cache entries based on their resolved server addresses. A manual refresh option allows bypassing the cache to fetch the latest methods.

packages/bruno-app/src/hooks/useReflectionManagement · high confidence

gRPC request pane now uses a tabbed interface with dedicated sections

The gRPC request editor has been restructured to use a tabbed layout (via ResponsiveTabs) with distinct sections for Message, Metadata, Auth, Script, and Docs. This replaces the previous single-pane view, allowing users to switch between configuring request bodies, headers, authentication, and scripts more easily. The Script tab is marked as Beta, and indicators show counts for messages, metadata, and auth status.

packages/bruno-app/src/components/RequestPane/GrpcRequestPane · high confidence

gRPC requests now support inherited authentication with source visibility

The gRPC request pane now allows authentication settings to be inherited from the parent collection or folder. When the 'inherit' mode is selected, the UI displays a label linking to the source of the inherited credentials, and the inherited fields are presented in a read-only state. Additionally, the component automatically resets unsupported authentication modes to 'none' to ensure compatibility with gRPC protocols.

packages/bruno-app/src/components/RequestPane/GrpcRequestPane/GrpcAuth · high confidence

gRPC response pane now uses a tabbed interface with metadata and test results

The gRPC response view has been restructured to use a tabbed layout (via the ResponsiveTabs component), allowing users to switch between the main response data, metadata, trailers, request timeline, and test results. This change introduces specific indicators for metadata and trailer counts, integrates script error handling directly into the pane, and replaces the previous single-view layout with distinct sections for each aspect of the gRPC response.

packages/bruno-app/src/components/ResponsePane/GrpcResponsePane · high confidence

Fixes

Added warning for invalid environment inheritance chains

The application now displays a visual warning when an environment references a parent that does not exist or when a circular inheritance loop is detected. This new component highlights the specific missing parent environment name or maps out the cycle path (e.g., 'A → B → A') to help users identify and fix configuration errors in their environment setup.

packages/bruno-app/src/components/Environments/Common/EnvironmentInheritanceWarning · high confidence

Environment variables table now preserves unsaved edits during autosave and merges external changes

The Environment Variables table now prevents data loss when typing quickly by keeping your in-progress edits in the form even while an autosave is in flight, rather than blindly resetting the form to the saved state. Additionally, if variables are added externally (for example, via the 'Add to' switcher or script updates) while you are editing, those new variables are merged into the table without overwriting your current changes. This logic is implemented in the new reconciliation layer (reconcile.js and useReconcileSavedEnvironment.js) and includes a new InheritedVariableRow component to display variables inherited from other environments.

packages/bruno-app/src/components/EnvironmentVariablesTable · high confidence

Fix URL truncation in documentation by balancing parentheses

The linkify utility in the Bruno app now correctly handles URLs containing unbalanced parentheses, such as those with complex query parameters. Previously, these URLs were truncated in documentation views. This fix patches the underlying linkify library to extend matched URLs until parentheses are balanced, ensuring full links are displayed and clickable for users.

packages/bruno-app/src/utils/linkify · high confidence

Fix request tab collision with response-example tabs

The tab selectors in the Bruno app now correctly distinguish between HTTP request tabs and response-example tabs. Previously, if a response-example tab shared the same pathname as a request, the system could incorrectly identify the example as the active or present request tab. This fix ensures that request tabs are only matched by pathname if the existing tab is not a response-example, preventing UI collisions where opening a request might fail to highlight or activate the correct tab due to a lingering example tab.

packages/bruno-app/src/selectors · high confidence

Responsive filter bar in Runner Results

The Runner Results filter bar now adapts to narrow viewports by swapping a row of filter buttons for a compact dropdown menu. This behavior is driven by a new \useContainerBreakpoint\ hook that tracks container width via \ResizeObserver\ and applies CSS classes (e.g., \compact\) when the container shrinks below defined thresholds, allowing the \RunnerFilter\ component to toggle between its button and select interfaces.

packages/bruno-app/src/components/RunnerResults/RunnerFilter, packages/bruno-app/src/hooks/useContainerBreakpoint · high confidence

Secure context for app guests via webview partition

The AppWebviewPane component now renders app guests inside a \<webview\> element with a specific partition named 'bruno-app-view'. This change ensures that app guests run in a secure, isolated context, addressing security concerns related to how the webview content is handled and accessed within the application.

packages/bruno-app/src/components/AppWebviewPane · high confidence

Snapshot utility for tab and workspace state management

The snapshot utility in \packages/bruno-app/src/utils/snapshot\ now handles tab state restoration with improved type normalization and filtering. It normalizes mock server tab types (\mock-server-dashboard\, \mocker\) to \mock-server\, excludes ignored tab types like \changelog\ and \v4-migration\ from snapshots, and ensures that active tabs pointing to ignored types are cleared. The utility also supports both array-based and map-based snapshot schemas for backward compatibility, normalizes Windows-style paths, and correctly handles shared collections across multiple workspaces by preserving workspace-scoped tab snapshots.

packages/bruno-app/src/utils/snapshot · high confidence

Standardized sidebar row styling for API specs

A new shared style definition for sidebar rows has been introduced to ensure consistent visual behavior across different item types. This change aligns the styling of API spec rows with that of collection rows, applying uniform hover, focus, and selection states (such as background colors and border indicators) while managing the visibility of action buttons based on user interaction.

packages/bruno-app/src/components/Sidebar/SidebarRowStyles · high confidence

Test coverage

Added CodeMirror mock for test utilities; Added Playwright E2E tests for Apps and AI Assist placement; Added Tests script editor component; Added tests for collection export/import, drag-and-drop, folder tags, and sequencing; New Bruno testbench collection and test infrastructure; New Redux actions and tests for collection management.

Dependencies

Bruno monorepo dependency initialization and security hardening

This change initializes the Bruno monorepo's dependency manifests and lockfiles, establishing the base versions for the workspace packages (including @usebruno/app, bruno-electron, bruno-cli, and shared libraries). It pins critical runtime dependencies such as axios to 1.18.0 and form-data to 4.0.4 to address security vulnerabilities ([CVE redacted] and prototype pollution risks), and enforces specific versions for build tools like rollup (3.30.0) and electron (37.6.1) via root overrides to ensure consistent, secure builds across the project.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 33 → 45 (+12.2)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 44 → 48 (+3.7)
  • Architecture 80 (new)
  • Maturity 57 → 60 (+3.7)
  • Readiness 15 → 38 (+22.7)
  • Security 56 → 50 (-5.8)
  • Accessibility 49 (new)

Resolved (208)

  • (anonymous) (cognitive 155) (packages/bruno-electron/src/ipc/openapi-sync.js)
  • (anonymous) (cognitive 16) (packages/bruno-electron/src/utils/git.js)
  • (anonymous) (cognitive 16) (packages/bruno-electron/src/utils/git.js)
  • (anonymous) (cognitive 17) (packages/bruno-electron/src/ipc/openapi-sync.js)
  • (anonymous) (cognitive 17) (packages/bruno-electron/src/ipc/workspace.js)
  • (anonymous) (cognitive 17) (packages/bruno-js/src/utils/error-formatter.js)
  • (anonymous) (cognitive 18) (packages/bruno-tests/src/redirect/index.js)
  • (anonymous) (cognitive 19) (packages/bruno-tests/src/echo/index.js)
  • (anonymous) (cognitive 20) (packages/bruno-requests/src/grpc/grpcMessageGenerator.js)
  • (anonymous) (cognitive 22) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 26) (packages/bruno-requests/src/auth/digestauth-helper.js)
  • (anonymous) (cognitive 27) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 27) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 31) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 31) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 32) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cognitive 33) (packages/bruno-electron/src/ipc/openapi-sync.js)
  • (anonymous) (cyclomatic 16) (packages/bruno-electron/src/ipc/openapi-sync.js)
  • (anonymous) (cyclomatic 17) (packages/bruno-electron/src/ipc/collection.js)
  • (anonymous) (cyclomatic 17) (packages/bruno-electron/src/ipc/collection.js)
  • …and 188 more

New (1810)

  • (anonymous) (cognitive 16) (packages/bruno-app/src/components/RequestPane/QueryBuilder/FieldNode.js)
  • (anonymous) (cognitive 20) (packages/bruno-app/src/components/MockServer/Sidebar/MockServers/index.js)
  • (anonymous) (cognitive 23) (packages/bruno-app/src/components/AiChatSidebar/index.js)
  • (anonymous) (cognitive 26) (packages/bruno-app/src/components/EditableTable/index.js)
  • (anonymous) (cognitive 45) (packages/bruno-electron/src/index.js)
  • (anonymous) (cognitive 76) (packages/bruno-app/src/ui/MenuDropdown/index.js)
  • (anonymous) (cognitive 83) (packages/bruno-app/src/components/CodeMirrorSearch/index.js)
  • (anonymous) (cyclomatic 17) (packages/bruno-app/src/components/RequestPane/QueryBuilder/FieldNode.js)
  • (anonymous) (cyclomatic 22) (packages/bruno-app/src/components/MockServer/Sidebar/MockServers/index.js)
  • (anonymous) (cyclomatic 26) (packages/bruno-app/src/components/EditableTable/index.js)
  • (anonymous) (cyclomatic 39) (packages/bruno-electron/src/index.js)
  • (anonymous) (cyclomatic 67) (packages/bruno-app/src/ui/MenuDropdown/index.js)
  • (anonymous) (cyclomatic 84) (packages/bruno-app/src/components/CodeMirrorSearch/index.js)
  • (anonymous)::(anonymous)::(anonymous)::f (cognitive 23) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::c (cognitive 18) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::diff::h (cognitive 20) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::i (cognitive 19) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::merge (cognitive 19) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::merge (cyclomatic 18) (packages/bruno-app/public/static/diff2Html.js)
  • (anonymous)::(anonymous)::o (cognitive 47) (packages/bruno-app/public/static/diff2Html.js)
  • …and 1790 more

Changes since last survey

  • 215 commits — 96 feature/other, 119 fixes

By area

  • packages/bruno-app — 118 commits
  • packages/bruno-electron — 17 commits
  • packages/bruno-cli — 12 commits
  • (repo) — 8 commits
  • packages/bruno-converters — 8 commits
  • (root) — 7 commits
  • tests/scripting — 7 commits
  • tests/utils — 5 commits
  • packages/bruno-js — 4 commits
  • packages/bruno-sqlite — 3 commits
  • packages/bruno-common — 2 commits
  • packages/bruno-tests — 2 commits
  • tests/collection — 2 commits
  • tests/grpc — 2 commits
  • tests/response — 2 commits
  • .claude/rules — 1 commit
  • .github/ISSUE_TEMPLATE — 1 commit
  • docs/readme — 1 commit
  • packages/bruno-filestore — 1 commit
  • tests/apps — 1 commit

Notable commits

  • fix: Fix(mock-server): Fixed Delay and Duration columns overlapping in the mock server request log (#9256)
  • fix: Fix/modal overlap with text editor (#8962)
  • fix: Fix/responsiveness-fixes-runner-result (#9235)
  • fix: Fix:openapi sync update (#8979)
  • fix: Fixed folder tab helper text
  • fix: Merge branch 'main' into fix/req.onFail()_are_not_persisted_issue
  • fix: Merge pull request #8707 from sbalagan22/fix/8695-ntlm-domain-guard
  • fix: Merge pull request #8873 from sharan-bruno/fix/req.onFail()_are_not_persisted_issue
  • fix: Merge pull request #8918 from usebruno/fix/postman-env-import-missing-enabled-internal
  • fix: Merge pull request #9149 from alanansari/fix/hindi-readme-links
  • fix: Merge pull request #9176 from lokesh-bruno/bugfix/BRU-4485
  • fix: Merge pull request #9177 from sharan-bruno/fix/reverted-junit-reporters-omit-bail-skipped-request-issue
  • fix: bugfix(app): run app guests in a secure context (#8838) (#9311)
  • fix: fix (mock server): adding request log in case of express failure because of response header too (#9059)
  • fix: fix (mock server): collection/api spec now shows a default placeholder at the start (#8963)
  • fix: fix (request): Requests showing example count (#8983)
  • fix: fix (sqlite): updated the createDatabase method to handle failures (#8980)
  • fix: fix(CLI): (changes reverted) update response status to 'skipped' for omitted requests
  • fix: fix(CLI): fixed junit reporters omit iterations and requests skipped due to bail (#9080)
  • fix: fix(OpenAPI): OpenAPI spec creation not working (#9191)
  • …and 195 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

usebruno/bruno was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b8894cd0140cc830851655e09f72ba78d16043c8 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.