CLICLItypeA command you run, rather than a dependency you import.See every one →What this type is →independently maintainedindependently maintainedoriginPublished by one person or a small company outside SAP. Says nothing about quality; the readings say that.See every one →

sapbruno

A terminal UI that runs Bruno collections against a CAP service, fetching an OAuth2 client_credentials token before each run so collections that fail with 401 under bru run work in CI.

Collections that authenticate fine in the Bruno desktop app return 401 under bru run, which breaks them in CI. This fetches the token before each run, writes it into the per-environment .bru file, and adds a local mode using basic auth against a CAP server running on a laptop.

Facts

Latestv0.1.1ReleasedLast pushLicenceMIT

Where it sits

Lives in
Provides
TestingCAPTestingcapabilityProving the service still does what it did — against the model and the handlers, without a deployed system and without a database somebody has to keep clean.
Flavors
Node.jsJavafrom its runtime
Optional
SAP Authorization and Trust Management serviceSAP Authorization and Trust Management serviceartifactfetching an OAuth2 client_credentials token from xsuaa before a runauthentication

Who is behind it

Đông TrầnĐông TrầnPersonMaintains this
In the atlas: maintains 18, contributes to 18
@dongitran
maintainer

What it declares

Every artifact

Type
CLI
Origin
Independently maintained
Runtime
build time

As a CLI

Distributed through
npm

Connections2

Install

npm add sapbruno

Derived from the package name. No recipe recorded; the README has the configuration.

Where sapbruno runsYour SAP BTP subaccountBy its type: a CLI is run from a terminalcallsdocumentedmay needif the SAP BTP / xsuaacredential provider isconfiguredYour terminal, actorYour terminalsapbruno, modulesapbrunoSAP Authorization and Trust Management service, service instanceSAP Authorizationand TrustManagement service
SAPnot SAP's, or the project's ownstated in the documentunder a condition

README

quoted from dongitran/SAP-Bruno under MIT, read
dongitran/SAP-Bruno/README.mdOn GitHub

sapbruno

Interactive TUI runner for Bruno collections with OAuth2 client_credentials auto-fetch and pluggable credential providers.

Why

Bruno's GUI handles OAuth2 nicely, but the CLI does not yet trigger OAuth flows — meaning collections that work in the desktop app fail with 401 when run from bru run (which breaks CI pipelines). sapbruno:

  1. Fetches OAuth2 tokens just-in-time before each bru run
  2. Writes them into the per-environment .bru env file
  3. Wraps everything in a keyboard-driven TUI so you can pick env → service → suite → file without leaving the terminal
  4. Supports a separate "local" mock-user mode (basic auth) for working against a locally running CAP server

It works with any Bruno collection — there is no hardcoded folder convention or auth scheme. SAP BTP / xsuaa is just one supported credential provider, configurable via plugins.

Install

pnpm add -D sapbruno @usebruno/cli
# or
npm i -D sapbruno @usebruno/cli

Quick start

  1. Drop a sapbruno.config.json next to your collections/ folder. See examples/sapbruno.config.json.
  2. Run npx sapbruno.
  3. Pick an environment, group, service, and suite. The OAuth token (if needed) is fetched automatically before bru run is invoked.

Configuration

Minimal config — runs against dev with credentials from environment variables:

{
  "collections": "./collections",
  "environments": {
    "dev": {
      "auth": { "type": "oauth2-client-credentials" },
      "credentialProvider": {
        "type": "env",
        "tokenUrl": "DEV_TOKEN_URL",
        "clientId": "DEV_CLIENT_ID",
        "clientSecret": "DEV_CLIENT_SECRET"
      }
    }
  }
}
Auth types
auth.typeBehavior
oauth2-client-credentialsFetch a bearer token via client_credentials grant before each run.
basicInject Basic auth from a local user file (multi-user picker).
noneRun requests with whatever auth the .bru files already define.
Built-in credential providers
credentialProvider.typeSource of client_id / client_secret / token_url
envProcess environment variables (field names configurable).
fileA local JSON file mapping prefix → credentials. Useful for downloaded service keys.
manualPrompts interactively. Good for one-off/dev usage.

Third-party providers (e.g. SAP CF/BTP) can be published as separate npm packages — see the CredentialProvider interface.

Variable naming convention

For each service, sapbruno writes these vars into the env .bru file:

{prefix}_oauth_token_url
{prefix}_oauth_client_id
{prefix}_oauth_client_secret
{prefix}_auth_header           # ← Bearer <token>  or  Basic <base64>

Reference {{<prefix>_auth_header}} in your Bruno requests' Authorization header.

The prefix is auto-derived: {group}_{service_folder} (lowercased, dashes → underscores). Configure prefixStrip to chop a shared prefix off every service folder.

CLI

sapbruno                         # interactive TUI (default)
sapbruno run                     # alias for default
sapbruno token --env dev --prefix <prefix>   # fetch token only (planned)

Roadmap

  • token subcommand
  • Authorization Code grant (browser + PKCE)
  • @sapbruno/cf-btp provider package — pulls xsuaa creds from cf curl /v3/apps/{guid}/env
  • Headless --non-interactive mode for CI

License

MIT

MIT, read

History

Latest

v0.1.1

  1. v0.1.0

On npm
0downloads per week, npm
Weekly downloads for sapbruno26 complete calendar weeks from 2026-04-27 to 2026-10-25; the latest total is 0.27 Apr – 3 May: 64 May – 10 May: 1611 May – 17 May: 818 May – 24 May: 1025 May – 31 May: 61 Jun – 7 Jun: 128 Jun – 14 Jun: 515 Jun – 21 Jun: 2522 Jun – 28 Jun: 1729 Jun – 5 Jul: 186 Jul – 12 Jul: 1413 Jul – 19 Jul: 1220 Jul – 26 Jul: 1627 Jul – 2 Aug: 53 Aug – 9 Aug: 2110 Aug – 16 Aug: 617 Aug – 23 Aug: 724 Aug – 30 Aug: 531 Aug – 6 Sept: 77 Sept – 13 Sept: 414 Sept – 20 Sept: 1021 Sept – 27 Sept: 1628 Sept – 4 Oct: 65 Oct – 11 Oct: 312 Oct – 18 Oct: 6619 Oct – 25 Oct: 0
Testing
  1. com.sap.cds:cds-services-bomMaven bill of materials pinning CAP Java module versionsfrom CAP
  2. @cap-js/cds-testTest support for CAP Node.js: server start, HTTP client, assertionsfrom CAP
  3. cds-cucumberGherkin scenarios driving a running CAP servicefrom CAP
  4. cds-launchpad-pluginSandbox launchpad for all SAPUI5 apps in a CAP workspacefrom CAP
  5. enforce-export-coverageStatic check that each exported TypeScript function has a testfrom General
  6. @sap-ux/fe-mockserver-plugin-cdsFiori Elements mock server plugin taking a CDS file as metadatafrom CAP
  7. @saptools/brunoRunner for Bruno collections against XSUAA-protected CF appsfrom BTP/BAIP

Details

Sources4
npm registrydiscovered here, keywords:cdschecked
npm registry, sapbrunoversion, releases, installschecked
github.com/git+https://github.com/dongitran/SAP-Bruno.gittree, pushes, contributors, CIchecked
README.mdquoted, and what the entry declareschecked

Sources are graph entities: the same page may back several entries, and an unreachable source flags every row that rests on it.

Compatibility and provenance
runtimesbuild-time
latestv0.1.1
first release
releases and cadence2
discovered vianpm registry · keywords:cds
first seen in the atlas
ecosystem and domaincap, developer-experience
History in the atlas1
  1. First seen.
For your agent
Ref
artifact:dongitran-sapbruno
JSON
/artifacts/dongitran-sapbruno.json
MCP
Connecting an agent