diff --git a/api-client/overview.mdx b/api-client/overview.mdx new file mode 100644 index 00000000..172a7fa0 --- /dev/null +++ b/api-client/overview.mdx @@ -0,0 +1,63 @@ +--- +title: "API Client" +sidebarTitle: "Overview" +--- + +The Bruno API Client is the desktop app you use to build, send, and organize API requests. Collections are stored as plain text files on your filesystem, so you can version them with Git and review API changes like code. + +New to Bruno? Start with the [Bruno Starter Guide](/introduction/quick-start), or [download the app](/get-started/bruno-basics/download) if you haven't installed it yet. + +## What's in the API Client + + + + Build and send REST, GraphQL, gRPC, WebSocket, and SOAP requests. + + + Reuse values across environments, collections, folders, and requests. + + + Configure Basic, Bearer, OAuth 2.0, AWS Signature, and more. + + + Write assertions and pre-request or post-response scripts in JavaScript. + + + Keep credentials out of version control with secret variables and vaults. + + + Share collections with your team through your existing Git workflow. + + + +## The rest of Bruno + +The API Client is one of four parts of Bruno. The others read the same collection files, so work you do in one carries over to the others. + + + + Run the same collections from the command line and in CI/CD. + + + Document your APIs and generate shareable documentation. + + + Open and send requests without leaving your editor. + + diff --git a/docs.json b/docs.json index a2d0f1c8..9e0d63f4 100644 --- a/docs.json +++ b/docs.json @@ -16,7 +16,7 @@ "tag": "Latest", "groups": [ { - "group": "Getting Started", + "group": "Get Started", "icon": "rocket", "pages": [ { @@ -41,7 +41,7 @@ ] }, { - "group": "Import or Export Data", + "group": "Import & Migrate", "pages": [ "get-started/import-export-data/import-collections", "get-started/import-export-data/export-collections", @@ -50,22 +50,14 @@ "get-started/import-export-data/postman-migration", "get-started/import-export-data/script-translator" ] - }, - { - "group": "Configure", - "pages": [ - "get-started/configure/settings", - "get-started/configure/keybindings", - "get-started/configure/proxy-config", - "get-started/configure/javascript-sandbox" - ] } ] }, { - "group": "Core Features", - "icon": "zap", + "group": "API Client", + "icon": "window-maximize", "pages": [ + "api-client/overview", { "group": "Send Requests", "pages": [ @@ -116,18 +108,19 @@ "send-requests/soap/soap-request" ] }, - { - "group": "Response Data & Cookies", - "pages": [ - "send-requests/res-data-cookies/overview", - "send-requests/res-data-cookies/res-data", - "send-requests/res-data-cookies/cookies", - "send-requests/res-data-cookies/response-examples" - ] - }, + "send-requests/res-data-cookies/cookies", "send-requests/history" ] }, + { + "group": "Response Data", + "pages": [ + "send-requests/res-data-cookies/overview", + "send-requests/res-data-cookies/res-data", + "send-requests/res-data-cookies/response-examples", + "advanced-guides/visualize" + ] + }, { "group": "Variables", "pages": [ @@ -144,79 +137,28 @@ ] }, { - "group": "Git Integration & Collaboration", - "pages": [ - "git-integration/overview", - "git-integration/git-strategies", - { - "group": "Using GUI", - "pages": [ - "git-integration/using-gui/intro", - "git-integration/using-gui/provider", - "git-integration/using-gui/consumer" - ] - }, - "git-integration/using-cli", - "git-integration/gitlab", - "git-integration/bitbucket", - "git-integration/azure-devops", - "git-integration/embed-bruno-collection" - ] - }, - { - "group": "Git Providers", - "pages": [ - "git-providers/overview", - "git-providers/github" - ] - }, - { - "group": "Tests and Scripts", + "group": "Authentication", "pages": [ + "auth/overview", + "auth/basic", + "auth/bearer", + "auth/digest", + "auth/aws-signature", + "auth/ntlm", + "auth/oauth1", + "auth/akamai-edgegrid", { - "group": "Tests", - "pages": [ - "testing/tests/introduction", - "testing/tests/assertions" - ] - }, - { - "group": "Scripts", + "group": "OAuth 2.0", "pages": [ - "testing/script/getting-started", - "testing/script/javascript-reference", - "testing/script/script-flow", - "testing/script/inbuilt-libraries", - "testing/script/external-libraries", - "testing/script/js-file", - "testing/script/dynamic-variables", - "testing/script/request-chaining", - { - "group": "Request", - "pages": [ - "testing/script/request/request-object", - "testing/script/request/sync-requests" - ] - }, - { - "group": "Response", - "pages": [ - "testing/script/response/response-object", - "testing/script/response/response-query" - ] - }, - "testing/script/vars" + "auth/oauth2-2.0/overview", + "auth/oauth2-2.0/collection-level-configuration", + "auth/oauth2-2.0/authorization-code", + "auth/oauth2-2.0/client-credentials", + "auth/oauth2-2.0/password-credentials", + "auth/oauth2-2.0/system-browser" ] }, - { - "group": "Automate Tests", - "pages": [ - "testing/automate-test/overview", - "testing/automate-test/manual-test", - "testing/automate-test/automate-test", - "testing/automate-test/data-driven-testing" - ] - } + "auth/add-and-manage-certs" ] }, { @@ -237,7 +179,7 @@ "secrets-management/secret-managers/hashicorp-vault/overview", "secrets-management/secret-managers/hashicorp-vault/adding-a-secret-provider", "secrets-management/secret-managers/hashicorp-vault/configuring-and-fetching-secrets", - "secrets-management/secret-managers/hashicorp-vault/using-secrets" + "secrets-management/secret-managers/hashicorp-vault/using-secrets" ] }, { @@ -264,70 +206,76 @@ ] }, { - "group": "Authentication & Authorization", + "group": "Testing", "pages": [ - "auth/overview", - "auth/basic", - "auth/bearer", - "auth/digest", - "auth/aws-signature", - "auth/ntlm", - "auth/oauth1", - "auth/akamai-edgegrid", + "testing/tests/introduction", + "testing/tests/assertions", { - "group": "OAuth 2.0", + "group": "Automate Tests", "pages": [ - "auth/oauth2-2.0/overview", - "auth/oauth2-2.0/collection-level-configuration", - "auth/oauth2-2.0/authorization-code", - "auth/oauth2-2.0/client-credentials", - "auth/oauth2-2.0/password-credentials", - "auth/oauth2-2.0/system-browser" + "testing/automate-test/overview", + "testing/automate-test/manual-test", + "testing/automate-test/automate-test", + "testing/automate-test/data-driven-testing" ] - }, - "auth/add-and-manage-certs" + } ] }, { - "group": "Debugging", - "pages": [ - "debugging/timeline", - "debugging/dev-tools" - ] - } - ] - }, - { - "group": "API Tools", - "icon": "book-open", - "pages": [ - { - "group": "Create Documentation", + "group": "Scripting", "pages": [ - "api-docs/overview", - "api-docs/workspace-docs", - "api-docs/collection-docs", - "api-docs/folder-docs", - "api-docs/request-docs", - "api-docs/auto-generate-docs" + "testing/script/getting-started", + "testing/script/javascript-reference", + "testing/script/script-flow", + "testing/script/inbuilt-libraries", + "testing/script/external-libraries", + "testing/script/js-file", + "testing/script/dynamic-variables", + "testing/script/request-chaining", + { + "group": "Request", + "pages": [ + "testing/script/request/request-object", + "testing/script/request/sync-requests" + ] + }, + { + "group": "Response", + "pages": [ + "testing/script/response/response-object", + "testing/script/response/response-query" + ] + }, + "testing/script/vars" ] }, { - "group": "OpenAPI", + "group": "Git & Collaboration", "pages": [ - "open-api/overview", - "open-api/importOAS", - "open-api/exportOAS", - "open-api/createOAS", - "open-api/openapi-sync" + "git-integration/overview", + "git-integration/git-strategies", + { + "group": "Using GUI", + "pages": [ + "git-integration/using-gui/intro", + "git-integration/using-gui/provider", + "git-integration/using-gui/consumer" + ] + }, + "git-integration/using-cli", + { + "group": "Providers", + "pages": [ + "git-providers/overview", + "git-providers/github", + "git-integration/gitlab", + "git-integration/bitbucket", + "git-integration/azure-devops" + ] + }, + "git-integration/embed-bruno-collection" ] - } - ] - }, - { - "group": "Developer Tools", - "icon": "code", - "pages": [ + }, { "group": "AI", "tag": "Beta", @@ -366,17 +314,49 @@ ] }, { - "group": "Bruno CLI", + "group": "Settings", + "pages": [ + "get-started/configure/settings", + "get-started/configure/keybindings", + "get-started/configure/proxy-config", + "get-started/configure/javascript-sandbox" + ] + }, + { + "group": "Debugging", + "pages": [ + "debugging/timeline", + "debugging/dev-tools" + ] + } + ] + }, + { + "group": "CLI", + "icon": "terminal", + "pages": [ + "bru-cli/overview", + "bru-cli/quick-start", + "bru-cli/installation", + { + "group": "Run Collections", "pages": [ - "bru-cli/overview", - "bru-cli/quick-start", - "bru-cli/installation", - "bru-cli/commandOptions", "bru-cli/runCollection", + "bru-cli/commandOptions", "bru-cli/builtInReporters", - "bru-cli/import", + "bru-cli/import" + ] + }, + { + "group": "Configuration", + "pages": [ "bru-cli/proxyConfiguration", - "bru-cli/secret-managers", + "bru-cli/secret-managers" + ] + }, + { + "group": "CI/CD", + "pages": [ "bru-cli/docker", { "group": "GitHub Actions", @@ -388,7 +368,49 @@ }, "bru-cli/jenkins" ] + } + ] + }, + { + "group": "API Docs", + "icon": "book", + "pages": [ + "api-docs/overview", + { + "group": "Write Documentation", + "pages": [ + "api-docs/workspace-docs", + "api-docs/collection-docs", + "api-docs/folder-docs", + "api-docs/request-docs", + "api-docs/auto-generate-docs" + ] }, + { + "group": "OpenAPI", + "pages": [ + "open-api/overview", + "open-api/importOAS", + "open-api/exportOAS", + "open-api/createOAS", + "open-api/openapi-sync" + ] + } + ] + }, + { + "group": "VS Code Extension", + "icon": "code", + "pages": [ + "vs-code-extension/overview", + "vs-code-extension/install-config", + "vs-code-extension/send-req" + ] + }, + { + "group": "Reference", + "icon": "book-open", + "pages": [ { "group": "Bru Lang", "pages": [ @@ -416,30 +438,17 @@ "converters/openapi-to-bruno", "converters/wsdl-to-bruno" ] - }, - { - "group": "VS Code Extension", - "pages": [ - "vs-code-extension/overview", - "vs-code-extension/install-config", - "vs-code-extension/send-req" - ] } ] }, { - "group": "License Management", + "group": "Licensing", "icon": "key", "pages": [ "license-overview", + "license-end-users/activate-license", { - "group": "End Users", - "pages": [ - "license-end-users/activate-license" - ] - }, - { - "group": "License Administrators", + "group": "Administrators", "pages": [ "license-administrators/license-portal", "license-administrators/billing", @@ -466,13 +475,6 @@ ] } ] - }, - { - "group": "Advanced Guides", - "icon": "graduation-cap", - "pages": [ - "advanced-guides/visualize" - ] } ] }, diff --git a/introduction/getting-started.mdx b/introduction/getting-started.mdx index fdc71f01..64ae9019 100644 --- a/introduction/getting-started.mdx +++ b/introduction/getting-started.mdx @@ -1,8 +1,36 @@ --- title: "Getting Started" +description: "Bruno is a Git-friendly, offline-first API client built for developers who want fast local workflows, plain-text collections, and better collaboration through Git." --- -Bruno is a Git-friendly, offline-first API client built for developers who want fast local workflows, plain-text collections, and better collaboration through Git. +## Core products + +Four products, one plain-text collection format — anything you build in one carries over to the others. + + + + Build, send, and organize API requests in the desktop app, with + environments, authentication, tests, and scripts. + + + Run collections from the command line, generate test reports, and automate + API checks in CI/CD. + + + Document your APIs in Markdown and auto-generate shareable API + documentation. + + + Open collections, edit `.bru` files, and send requests without leaving your + editor. + + + +## Quick starts - Hands-on walkthrough: create collections, send requests, write tests, and collaborate with Git in the app. + Hands-on walkthrough: create collections, send requests, write tests, and + collaborate with Git in the app. - - Hands-on walkthrough: install Bruno CLI, run collections, generate reports, and integrate with CI/CD. + + Hands-on walkthrough: install Bruno CLI, run collections, generate reports, + and integrate with CI/CD. - - Import your Postman collections and environments into Bruno in minutes. - ---- - ## Start with a task - - Run collections from the command line and automate API workflows in CI. - - + Add pre-request and post-response scripts to customize and test requests. - + Use variables across requests, environments, and collections. + + Configure Basic, Bearer, OAuth 2.0, and other auth methods for your + requests. + ## Explore Public Collections @@ -65,7 +76,11 @@ Want to see Bruno in action? [Bruno Public Collections](https://github.com/bruno ## Why Bruno? - **[Git-friendly collaboration](/git-integration/overview)** — store collections as files and review API changes like code. -- **Offline-first by design** — work locally without requiring a cloud account.* +- **Offline-first by design** — work locally without requiring a cloud account.\* - **Plain text collections** — store requests in YAML for readable, versionable collections. -\* Bruno does not require an account to use. Your email is only used to issue a license key if you purchase a license. + + \* Bruno does not require an account to use. Your email is only used to issue + a license key if you{" "} + purchase a license. + diff --git a/send-requests/res-data-cookies/overview.mdx b/send-requests/res-data-cookies/overview.mdx index 8d9ff254..b0a6e38c 100644 --- a/send-requests/res-data-cookies/overview.mdx +++ b/send-requests/res-data-cookies/overview.mdx @@ -1,5 +1,5 @@ --- -title: "Response Data and Cookies" +title: "Response Data" sidebarTitle: "Overview" --- @@ -23,7 +23,7 @@ You can also: ## Cookies -Bruno shows the cookies associated with each request. Cookies are typically used for storing user sessions and personalized content. +Bruno shows the cookies associated with each request. Cookies are typically used for storing user sessions and personalized content. See [Cookies](/send-requests/res-data-cookies/cookies) for adding and managing them. ## Debugging diff --git a/style.css b/style.css new file mode 100644 index 00000000..e4206edc --- /dev/null +++ b/style.css @@ -0,0 +1,67 @@ +/* --------------------------------------------------------------------------- + Full-width docs shell — release Mintlify's 1472px cap + --------------------------------------------------------------------------- + Mintlify centres the whole shell — sidebar, article and table of contents — + inside a `max-w-8xl` box (`.max-w-8xl{max-width:92rem}`, i.e. 1472px at a + 16px root font size) with `mx-auto`. Past that width the box stops growing + and the remainder becomes equal dead margins on both sides, which is why the + docs look narrow on a large display. + + Why CSS and not docs.json: there is no content-width option in the schema. + The only native escape hatches are per-page frontmatter `mode: "wide"` (drops + the table of contents) and `mode: "custom"` (drops the sidebar *and* the + TOC), and either would have to be pasted into every .mdx file. + + Two divs carry the cap, and both must be released or the navbar would sit on + a different grid from the body: + 1. `
` — the navbar rail (wordmark, + search, header links). Plain utility class, specificity (0,1,0). + 2. The wrapper around #sidebar, #content-area and the TOC. Same 92rem, but + written through Mintlify's per-page `mode` peer variants + (`peer-[.is-not-custom]:peer-[.is-not-center]:max-w-8xl`), which + compiles to a ~(0,3,0) selector. + `[class*="max-w-8xl"]` matches both — the bare utility and the peer variant + share that substring — with no coupling to where either sits in the tree, so + a Mintlify DOM reshuffle cannot half-apply this. The selector is repeated for + (0,3,1) so it outranks carrier 2 on specificity alone; today that insurance + is unused, because Mintlify injects this file unlayered and last, and an + unlayered declaration already beats any @layer utilities rule. + + No media query is needed: below the width where the cap binds, `max-width` + is not the constraint and the rule changes nothing. The cap is in rem, so it + binds wherever 92rem lands for the reader's root font size, and this rule + releases it exactly there. #content-area is the single flex-grow child of + carrier 2, so it absorbs the new width; the sidebar's and TOC's own fixed + widths are untouched. + + Known tradeoffs, in the order they will be noticed: + - Line length grows with the viewport. Body copy sits near the comfortable + 45-90 character range at today's cap and goes well past it on a 2560px or + wider display. This is the real cost of the change. If long measure becomes + the complaint, the dial is a `max-width` on `#content` — but capping the + text column alone gives the page two different right edges, which reads as + a misalignment bug, so expect that tradeoff. + - Card grids are the weakest spot. Mintlify's `.columns` container query tops + out at 2 tracks, so cards inflate instead of reflowing into more columns; a + 3-card group on a very wide screen shows two huge cards and an orphan. + - Images never upscale (Mintlify computes them to `width:auto` + + `max-width:100%`), so wide screenshots render at natural width and leave a + trailing gutter rather than stretching. + - Narrow tables and short code blocks span the full column and leave a wide + trailing gutter. Offsetting win: code blocks that used to scroll + horizontally now fit. + + Maintenance couplings: + - `max-w-8xl` is a Mintlify-emitted Tailwind class, not a public API. If it + is renamed or replaced this rule silently stops matching and the layout + reverts to today's capped, centred shell — a safe failure direction, but + worth re-checking after a Mintlify bump. + - Conversely, any future Mintlify div carrying an 8xl cap is uncapped too. + There are exactly two today. No .mdx in this repo sets frontmatter `mode`, + so every page renders is-not-custom / is-not-center / is-not-wide / + is-not-frame; there is no second layout variant to check. + --------------------------------------------------------------------------- */ + +div[class*="max-w-8xl"][class*="max-w-8xl"][class*="max-w-8xl"] { + max-width: none; +}