Skip to main content
Bruno is a fast, Git-friendly desktop application for exploring and testing APIs. Unlike cloud-based API clients, Bruno stores your collections directly on your filesystem, making it perfect for version control and team collaboration.

Key Features

Git-Friendly

Collections are stored as plain text files in your filesystem, making them easy to version control with Git.

Offline-First

No cloud sync required. Your data stays on your machine. Work anywhere, even without internet.

Multiple Protocols

Support for REST, GraphQL, gRPC, and WebSocket requests in a single application.

Scripting & Testing

Powerful JavaScript-based pre-request scripts, post-response scripts, and test assertions.

Technology Stack

Bruno is built using modern web technologies:
  • Framework: Electron (desktop) + React (UI)
  • State Management: Redux
  • Styling: Tailwind CSS
  • Code Editor: CodeMirror
  • HTTP Client: Axios
  • Icons: Tabler Icons
  • File Watching: Chokidar

Application Structure

The Bruno desktop app consists of several key areas: The left sidebar displays your collections, folders, and requests in a tree structure:
1

Collections

Top-level containers for related API requests. Each collection maps to a folder on your filesystem.
2

Folders

Organize requests within collections. Folders can be nested and support inheritance of auth, headers, and scripts.
3

Requests

Individual API requests (HTTP, GraphQL, gRPC, WebSocket). Click to open in a new tab.

Request Pane

The main area where you configure your API requests:
  • Query URL: Enter the endpoint URL with variable interpolation support
  • Tabs: Params, Body, Headers, Auth, Vars, Script, Assert, Tests, Docs, Settings
  • Method Selector: GET, POST, PUT, PATCH, DELETE, etc.

Response Pane

Displays the response from your API:
  • Response body (formatted JSON, XML, HTML, or raw text)
  • Headers
  • Timeline and performance metrics
  • Test results
  • Console output from scripts

Status Bar

Shows collection information, environment selection, and shortcuts to preferences.

File Format

Bruno uses a custom .bru file format that’s human-readable and Git-friendly:
meta {
  name: Get Users
  type: http
  seq: 1
}

get {
  url: {{api_url}}/users
  body: none
  auth: bearer
}

auth:bearer {
  token: {{access_token}}
}

assert {
  res.status: eq 200
  res.body.users: isDefined
}

script:pre-request {
  // Set dynamic timestamp
  bru.setVar('timestamp', Date.now());
}

tests {
  test("Users array should not be empty", function() {
    expect(res.body.users).to.be.an('array');
    expect(res.body.users.length).to.be.greaterThan(0);
  });
}

Collections vs Workspaces

A collection is a folder on your filesystem containing .bru files and a bruno.json configuration file. Collections are self-contained and can be shared via Git.
A workspace is a way to organize multiple collections in Bruno. You can have multiple workspaces (e.g., “Work”, “Personal”) and switch between them.

Keyboard Shortcuts

  • Cmd/Ctrl + Enter: Send request
  • Cmd/Ctrl + S: Save request
  • Cmd/Ctrl + T: New request tab
  • Cmd/Ctrl + W: Close current tab

Next Steps

Creating Requests

Learn how to create and configure API requests

Request Types

Explore REST, GraphQL, gRPC, and WebSocket support

Authentication

Configure authentication for your requests

Scripts & Tests

Add automation with pre-request and post-response scripts
Bruno’s desktop app is completely offline and privacy-focused. Your data never leaves your machine unless you explicitly share it.

Build docs developers (and LLMs) love