Basic Collection Execution
To run an entire collection, navigate to your collection directory and use therun command:
copy
Running a Folder within a Collection
You can run all the requests within a specific folder by specifying the folder name:copy
copy
Running a Collection with a CSV File
If you need to run a collection using data from a CSV file, specify the path to the file with the--csv-file-path option:
copy
Running a Collection with a JSON File
To run a collection using data from a JSON file, provide the file path using the--json-file-path option:
copy
Running a Collection Multiple Times
You can run a collection multiple times in a single command using the--iteration-count flag:
copy
Running a Collection with Environments
You can run a collection using environment variables from either a.bru file or a .json file. This allows you to attach environments via the CLI from anywhere in the filesystem.
Using Environment Files
To run a collection with an environment file, use the--env-file option:
copy
copy
The environment file should be in Bruno’s
.bru format. Make sure the file
contains valid environment variables and their values.Using JSON Environment Files
Bruno CLI now supports JSON environment files, which is particularly useful for global environments created in the Bruno app. This bridges the gap between UI-only global environments and CLI-based workflows. To use a JSON environment file:copy
JSON Environment File Format
The JSON environment file should follow Bruno’s environment schema:copy
Using Environments Names
If you need to use a specific environment, you can pass it with the--env option:
copy
Using Global/Workspace-Level Environments
Bruno CLI now supports referencing global/workspace-level environments when running a collection. This feature allows you to use environment variables defined at the workspace level rather than at the collection level.Using Global Environments
Use the--global-env flag to reference a global/workspace-level environment:
copy
Specifying Workspace Path
When your collection is not located at the workspace root, use the--workspace-path flag to specify the workspace path:
copy
Combined Usage
You can combine global environments with collection-level environments:copy
Passing Environment Variables
Variables marked as secrets in the Bruno app are not persisted to disk for the
CLI. Pass them at runtime with
--env-var (collection) or --global-env-var
(global).--env-var to override collection-level environment variables:
copy
copy
--env-var flag adds or overrides a single collection environment variable. Collection-level --env-var behavior is unchanged.
Passing Global Environment Variables
Use--global-env-var to override variables in the active global environment. This is required when scripts call bru.getGlobalEnvVar() or when you need to inject global secret values in CI/CD.
--global-env-var requires --global-env:
copy
copy
- Overrides are merged into
globalEnvironmentVariablesbefore requests start. bru.getGlobalEnvVar('apiKey')returns the overridden value in scripts.{{apiKey}}interpolation also resolves to the overridden value.- Overrides are not written back to the global environment file on disk.
Filtering Requests with Tags
Bruno CLI supports filtering requests by tags, allowing you to run only specific subsets of your collection based on tag criteria.Include Tags
Run only requests that have at least one matching tag.copy
Exclude Tags
Skip requests that have ANY of the specified tags:copy
Combined Filtering
You can combine include and exclude filters:copy
Parallel Execution and Progress Tracking
Bruno CLI supports running requests in parallel and displaying real-time progress during collection execution.Parallel Execution
By default, Bruno CLI runs requests sequentially. You can enable parallel execution using the--parallel flag:
copy
Reduce CLI memory use on large runs
If you are seeing unbounded RSS (Resident Set Size) growth or OOM (Out of Memory) kills, you can use the--experimental-cache-modules flag to attempt to reduce the memory usage. It will share evaluated script modules across requests in a bru run.
If you are not seeing unbounded RSS growth or OOM kills, leave the default as-is.
--experimental-cache-modules
Pass this flag on bru run when it runs out of memory:
copy
- Shares
globalThisacross script VMs so module identity stays consistent. - Caches each evaluated module instead of rebuilding the module graph from scratch on every script.
--cache-modules once the default CLI run is confirmed to stay unchanged with this caching on.
CI example
Generate API Documentation
Bruno CLI can generate the same standalone HTML API documentation as Collection → Generate Documentation in the desktop app. This lets teams keep generated docs in Git, review changes alongside the collection, and regenerate or deploy the artifact from release and CI pipelines. Run the command from the collection root:copy
Choose the output file
Use--output or -o to write the HTML file somewhere other than the current directory:
copy
copy
Select environments
Use--all-envs to embed every environment in the collection:
copy
--envs to embed only selected collection environments. Separate names with commas and quote the value when an environment name contains a space:
copy
--exclude-envs to leave environments out. Combine it with --all-envs to start from the full set, or with --envs to start from a named list:
copy
--exclude-envs takes precedence. If the same environment name appears in both --envs and --exclude-envs, that environment is left out.
The command exits with an error if a requested environment does not exist.
Filter requests by tags
Use--tags to include requests carrying any matching tag:
copy
--exclude-tags to remove requests carrying any matching tag:
copy
--exclude-tags takes precedence, the same way --exclude-envs does. If the same tag name appears in both --tags and --exclude-tags, requests with that tag are left out:
copy
Include or omit the Git repository link
For Git backed collections, the repository URL (gitCollectionUrl) is embedded by default, so readers can clone the collection from the generated documentation through Open in Bruno. You can make the default explicit with --git-link:
copy
--no-git-link to leave the repository URL out. Readers still get the full documentation, but without the clone link. This matters most when the repository is private and the documentation is published somewhere public, where a URL to a repo most readers cannot access is not useful:
copy
CI example
This command embeds every environment exceptLocal, drops requests tagged WIP or Internal, leaves the repository URL out, and writes the file to a build directory you can publish or commit:
copy
The CLI and desktop app use the same HTML generation and filtering
implementation. For the same collection and options, they produce the same
documentation.