Skip to main content

Bruno Collection Importer Plugin

Switching over from Bruno? The Bruno Collection Importer plugin makes it painless — it moves your API collections straight into fully native Voiden .void request files, so you're not stuck re-typing endpoints and headers by hand.

It works with Bruno 3.0+'s whole-collection OpenCollection YAML export and with individual Bruno environment files, converting requests, folders, environments, auth, and scripts into Voiden automatically. Importing a standalone classic .bru request file on its own isn't supported — bring in the full collection export instead.


How It Works​

  1. Open a Bruno environment file or an exported OpenCollection YAML file in Voiden.
  2. Look for the Import into Voiden button in the file's tab toolbar.
  3. Click it — if you opened a whole OpenCollection export, Voiden builds a folder tree that matches your Bruno collection's structure exactly; if you opened just a single request from a directory-based OpenCollection layout, it converts that one.
  4. That's it — every request lands as its own .void file, with its endpoint, params, auth, and (where it's safe to) live scripts all included.

What gets imported​

You open in VoidenYou get
A whole OpenCollection YAML exportA folder tree matching your Bruno collection, one .void file per request
A single request from a directory-based OpenCollection layoutOne .void file
A Bruno environment file (environments/<name>.bru)A named Voiden environment — merged into your existing environments, not overwritten

A standalone classic .bru request file (outside of an OpenCollection export) can't be imported on its own.


How requests are converted​

Body types​

Bruno bodyVoiden block
JSON / XML / plain textjson_body / xml_body / text_body
Form URL-encodedurl-table
Multipart formmultipart-table — file fields become fileLink attachments when the original file still exists
Raw filerestFile placeholder
GraphQLgqlquery / gqlvariables
gRPCsocket-request, wired to the request's .proto file, method, and streaming type
WebSocketsocket-request (url + protocol)

Everything else​

  • Headers → headers-table
  • Query & path params → query-table / path-table — if a request has a query string but no explicit params:query list, the importer parses it from the URL instead
  • :param URL segments → converted to Voiden's {param} placeholder style
  • Auth — Basic, Bearer, API Key, Digest, AWS Signature v4, NTLM, OAuth1, and OAuth2 (all four grant types) all convert into a Voiden auth block

Scripts & assertions​

  • A well-formed Bruno assert{} block becomes a live assertions-table block.
  • Pre-request and post-response scripts become live pre_script/post_script blocks — but only when every line matches a pattern the importer recognizes as safe. If anything looks unfamiliar, the whole script is imported commented out instead, so you can review it before it runs.

Requirements​

The importer always needs the Voiden REST API plugin — it generates the method/URL, headers, params, and body blocks every imported request is built from.

A few other core plugins kick in automatically, only when a request actually needs them:

PluginUsed for
Voiden GraphQLGraphQL request bodies
Simple Assertionsassert{} blocks
Socket & gRPCgRPC and WebSocket requests
Advanced AuthenticationOAuth1 / OAuth2

Good to know​

  • File and folder names are sanitized for filesystem compatibility, and nested folders are supported with no depth limit.
  • Malformed field names and special characters in your Bruno collection are handled gracefully rather than failing the import.
  • A whole-collection import shows live progress and can be cancelled midway.