Skip to main content
Convert an OpenAPI specification into a Bruno collection folder you can open in the app or run with the CLI.
The CLI can do this in one command: bru import openapi --source <openapi.yaml> --output <output-folder>. See bru import. Use the script below when you want to process the collection in your own code.

Convert the specification

Install both packages:
The converter returns a JavaScript object. Bruno needs a collection folder, so the script below converts the input and writes that folder in one go. It writes OpenCollection YAML files by default. Change format to 'bru' for .bru files instead.
The script needs Node.js 18 or later.

1. Read the arguments

Import the converter, the file writers from @usebruno/filestore, and Node’s file helpers. Take the paths from the command line and print a usage line if any are missing. format is 'yml' for OpenCollection YAML or 'bru' for classic .bru files.

2. Add the helpers

safeName strips characters that are not allowed in file names. write saves a file and creates any missing parent folders.

3. Convert

openApiToBruno accepts the specification as JSON or YAML and returns the Bruno collection. Pass { groupBy: 'path' } as a second argument to group folders by path instead of tag. See the API Reference for the full signature.

4. Write the collection settings and environments

brunoConfig holds the collection settings. For .bru collections it is written to bruno.json. For yml it is embedded in opencollection.yml. The collection root holds collection-level auth, headers, and scripts. Each environment gets its own file in the environments folder.

5. Write the folders and requests

Each folder becomes a directory and each request a file. Folder-level auth, headers, and scripts go in folder.yml or folder.bru. A stack is used instead of recursion so deeply nested collections are safe.

6. Report

Print where the collection was written.

7. Run the script

Run the script with Node.js, passing the paths as arguments.
Where:
  • <openapi.yaml>: The OpenAPI specification, as JSON or YAML
  • <output-folder>: The folder to create the Bruno collection in. It is created if it does not exist
The output folder looks like this (with format set to 'bru', the files are bruno.json, collection.bru, folder.bru, and .bru requests instead):
One folder per tag, one file per operation, and an environment holding the base URL from the spec’s servers.

Full script

The complete script, ready to copy. convert.mjs is an ES module with top-level await. convert.js is the same script as CommonJS, with the steps inside an async main function.

Open the collection in the app or run it with the CLI

The spec’s servers become an environment holding the base URL. Select it in the app, or pass its name to --env. Open the folder in the app, or run it with the CLI:
  1. Click the + button in the top-left corner and select Import Collection.
  2. Choose Bruno Collection, then browse to the output folder.
  3. Click Import.
See Import Collections for more detail.