Migrate from Insomnia to Bruno

Moving Insomnia collections to Bruno is mostly an export, import and verification job, with the real work in environments, scripts, authentication and Cloud Sync cleanup. This page sets out what moves cleanly, what needs rework and how to plan the cutover.

On this page

Migrate from Insomnia to Bruno: what the move involves

If a renewal, Git Sync or Cloud Sync dependence, or a data residency concern is pushing you off Insomnia, the move to Bruno starts with a file export and import, but most of the effort sits in environments, scripts, authentication and retiring Cloud Sync projects. Export each collection from Insomnia as v5 YAML, import it into Bruno, and then check every request against its original behavior. Platform or developer tooling owners usually run this work, with a security reviewer approving where credentials end up, because exported files can carry secrets. Effort scales with the number of collections and the amount of pre-request and test scripting they contain, so start with an inventory of both before you set a cutover date.

Bruno is offline-only, and its README states there are no plans to add cloud sync. Collections are saved as files in a folder on the user's filesystem, so the team's shared source of truth moves from Kong's cloud to a Git repository that your organization hosts. Access control moves with it. Repository permissions, branch protection and review rules take over the job that Insomnia account roles and project membership did, so confirm those controls with your Git host before anyone imports. Bruno's pricing page marks Git push, branch operations and remote connections in the app as paid features, while Git itself works outside the app on any edition. Decide early whether engineers commit from the terminal or whether the team needs a paid edition for in-app Git workflows. The Bruno README sets out the storage model in more detail.

Treat the retirement of Cloud Sync projects as a separate step from the import. Before anyone stops syncing in Insomnia, confirm that every request, environment and secret the team needs exists in the Bruno copy, and keep the Insomnia export as a read-only archive until the suite has run in Bruno through a full release cycle. Environment variables and authentication settings are the most common place for a request to break without an obvious error, so compare them first. Scripts need a line-by-line review, because Bruno's documented script translation covers Postman APIs, and Insomnia scripts may need manual changes. Ask your Bruno contact or check the current import behavior against a sample of your own collections before you commit to a date.

Which Insomnia capabilities map cleanly to Bruno

This table maps each part of an Insomnia workspace to its Bruno equivalent and marks whether it moves cleanly, needs rework or has no direct match. Read the rows before exporting, because Bruno is offline-only and Cloud Sync and account-based sharing become Git workflows. Confirm each import format with a test import before you retire any Cloud Sync project.

Insomnia capabilityBruno equivalentStatus and what to check
Collections and foldersCollections stored as a local folder with request filesNeeds rework: confirm folder structure and request names survive the v5 YAML or v4 JSON import
Requests and bodiesRequests saved as .bru files or OpenCollection YAMLClean for common HTTP methods: check multipart bodies and file uploads in a test import
Environments and variablesEnvironment files and collection-level variablesNeeds rework: recreate secret values locally and confirm variable names resolve after import
Auth settingsPer-request and folder-level authenticationNeeds rework: re-enter OAuth or token settings and confirm each auth mode is carried over
Pre-request and test scriptsBruno scripts with common Postman-style APIs translated on importNeeds rework: review scripts that use Insomnia-specific APIs or unsupported packages
Cloud Sync and account sharingGit repository holding the collection folderGap: no cloud sync is planned, so team sharing moves to Git branches and commits
Git Sync projectsGit in the local folder, with Git push and merge conflict tools in paid editionsNeeds rework: Git works outside the app on any edition, but push and conflict tools are paid features
CLI runsbru run command with test reportsClean for scripted runs: confirm reporting output meets your CI requirements before relying on it

What data to export and what to rebuild

Insomnia migrations split into two groups: what you export as files and what you recreate by hand in Bruno. Knowing the boundary before you start prevents lost requests and leaked credentials. The cards below cover the export paths, the items that do not travel, and the checks to run before any file leaves the app.

Insomnia v5 YAML export

Export collections, projects or all data as Insomnia v5 YAML. This is the format to start from, because it keeps request structure, folders, environments and scripts in a form you can review. Export one project first as a test, then open the result in Bruno and confirm that request counts, folder nesting and environment names match what you see in Insomnia. Note which project each file came from so you can map it to a Git repository later.

HAR export for edge cases

Use HAR export only when a request exists in Insomnia but does not appear cleanly in the YAML export, or when you need a record of recent traffic for debugging. HAR captures request and response pairs, not a reusable collection. Treat it as reference material, then rebuild the requests you need in Bruno. A HAR file often contains headers with tokens, so review it before sharing it.

OpenAPI specs through the inso CLI

If your team designed APIs in Insomnia's design tooling, use the inso CLI to export OpenAPI specifications. Bruno can create collections from OpenAPI, so the spec becomes a second source for endpoints, schemas and examples. Keep the spec in Git as the design record and treat the Bruno collection as the executable layer. Confirm with each import that paths, methods and required parameters match the spec version your consumers use.

Cloud Sync projects and account users

Cloud Sync projects live in Kong's cloud and do not become local files on their own. Before you retire them, export each project you still need, then list the people who had access so you can decide who receives the Bruno collection through Git. Insomnia account users, roles and invitations do not transfer to Bruno, because Bruno has no account-based sharing in the open-source edition. Confirm with Kong that your export covers every project you plan to keep.

Git Sync remotes and plugins

Git Sync remotes point to repositories you already control, so the collection history can usually be preserved by committing the Bruno folder to that repository or a new one. Insomnia plugins have no direct equivalent, so list every plugin in use and rebuild its behavior as Bruno scripts or documented steps. Record the remote URL, branch and any deploy keys so access can be reconfigured without guessing.

Secrets and credentials before export

Environments often hold API keys, bearer tokens and client secrets in plain text. Before any export file leaves the app or reaches a shared drive, search it for keys, tokens and passwords, and move secrets out of collection files. Re-enter them in Bruno's environment handling, keeping sensitive values out of Git. Ask your security team which storage approach they accept for the local machines that will hold these values.

How Bruno imports Insomnia data and where to check it

Treat the import as a hypothesis to test, not a finished migration. After you bring an Insomnia export into Bruno, compare the result against the source project before anyone deletes anything: count the requests in each folder, confirm the folder hierarchy matches, check that every environment has the same variable names and values, and open each request that uses authentication to confirm the auth mode, token source and inherited settings came across. Keep a short checklist per project. Any mismatch is cheaper to find now than after the Insomnia project has been retired. Confirm the exact import behavior for your Insomnia export version in your own environment, since Bruno's import documentation focuses on Postman sources, and note any requests or settings it skips.

Next, decide where the collection will live on disk. Bruno stores each collection as files in a local folder, and that folder is what your team reviews, diffs and commits to Git. Choose between the original .bru plain-text format and OpenCollection YAML, which Bruno supports from version 3.0.0 as an open alternative, and the Bruno documentation describes a migration from .bru to YAML. Pick one format for the whole team before the first commit, because mixing formats across branches makes review harder. Confirm with the Bruno documentation which format your current version writes by default and whether secrets are stored in environment files that should stay out of the repository.

Once the collection is in Git, the same files can run in continuous integration through Bruno's command-line runner, bru run, which can produce test reports. Run the collection in a pipeline against a non-production environment and compare its results with what the team saw in Insomnia, paying attention to scripts, assertions and variables that depend on the app's runtime behavior. Scripts that were written for another client may need adjustment, so confirm each one passes in your environment rather than assuming the import preserved its behavior. Record which Bruno version and CLI version you validated, because the pipeline should pin both.

The migration sequence from inventory to decommission

The sequence moves one collection at a time from Insomnia's cloud-linked projects into Bruno's Git-tracked folders, with each step ending in a check that the team can rely on before the next one starts. The result is a single repository that becomes the source of truth and an Insomnia workspace that no one needs to open.

  1. Inventory projects, environments, scripts and sync links

    Before anything is exported, list every Insomnia project and workspace your team uses, and mark which ones sync through Cloud Sync or Git Sync. For each project, note its environments, pre-request and test scripts, and the authentication method on each request, such as OAuth, API keys or bearer tokens. Confirm with the project owners which collections are still in active use, since those are the only ones worth moving. The output is a short register with one row per project and columns for sync type, environment count, script use and auth type, signed off by the team lead.

  2. Pilot one collection in Bruno

    Choose a single, low-risk collection that touches a non-production API, then export it from Insomnia as Insomnia v5 YAML and import it into Bruno. Bruno also reads older v4 JSON, so keep the export file even if your Insomnia version differs. Open the imported collection and check that each request sends correctly, that environment variables resolve, and that the Bruno test and script output matches what Insomnia showed. Note every item Bruno could not translate. The pilot is done when one engineer can run the full collection in Bruno against the test environment and the gap list is written down.

  3. Check authentication and secrets in the pilot

    Authentication is where migrations most often break, so review it separately from the request bodies. Confirm that OAuth 2 flows, API keys and inherited collection-level auth were carried over, and that no tokens or client secrets were exported in plain text that will be committed to Git. Move credentials into environment files or local secret storage that is excluded from version control. The output is a checklist confirming that each auth method in the register works in Bruno and that no secret appears in the files that will be committed.

  4. Run both clients in parallel

    For a defined period agreed by the team, keep the Insomnia project and the Bruno collection running side by side. Engineers send the same requests from each client and compare responses, status codes and test results. Record any mismatch in the gap list and fix it in Bruno before the next collection moves. Bruno's command-line runner, bru run, can execute the collection outside the app, which lets you compare results in a script rather than by hand. The parallel run is complete when the mismatch list is empty for the collections in scope and the team agrees the Bruno results are correct.

  5. Cut over to the Git repository

    Commit the Bruno collection folders to a Git repository that your organization controls, then make that repository the only source of truth. Add a short README that explains how to clone the repository, open the folder in Bruno and select the right environment. Ask the team to stop editing the Insomnia project for the migrated collections and to make all changes through commits. Bruno's Open Source edition supports clone, pull and commit in its Git UI, while push and branch operations are paid features, so agree on how changes are pushed before cutover. The output is a repository with a named owner, a branch policy and a confirmed clone on every engineer's machine.

  6. Decommission Insomnia projects and remove sync

    Once every collection in scope has cut over, export a final copy of each Insomnia project for your records, then disconnect Cloud Sync and Git Sync and remove the migrated projects from Insomnia. Check that your data retention and records policies allow the export to be stored, and that the exported files are kept in a location your security team controls. Revoke any Kong account access that is no longer needed for these projects. The step is closed when the sync connections are gone, the final exports are archived, and the register shows each project as retired.

Scripts, environments and authentication: what needs rework

Insomnia scripts are JavaScript that runs before a request and after its response. Bruno reads many common Postman script APIs during import, so simple assertions and variable updates often arrive in a usable state. The risk is in what the importer cannot translate. Scripts that depend on external libraries need manual review, because Bruno flags Postman-specific packages such as postman-collection and newman as unsupported rather than running them.

  • Check imported assertions: Run each request and confirm the test results match what the Insomnia version reported for the same response.
  • Find external imports: Search scripts for require calls and package names, then replace or rewrite each dependency with plain JavaScript or a supported helper.
  • Verify chained variables: Scripts that set a value for a later request must still set it in the same order under Bruno's execution model.
  • Review error handling: Tests that pass on empty responses can hide breakage, so add checks for status codes and payload shape.
  • Record script changes: Keep a list of every rewritten script so reviewers can compare behavior with the original.

Before sign-off, run the full collection once and compare every failing or skipped test with the Insomnia baseline.

What drives the cost and duration of the move

This table lists the factors that set how long the move takes and what it costs, split into one-time work and recurring spend. Read each row against your own Insomnia workspace to estimate scope before asking for a written quote. The main takeaway is that the number of Cloud Sync projects and the complexity of scripts and auth usually matter more than the raw collection count.

DriverWhy it changes cost or effortHow to keep it down
Collection countEach collection needs export, import, and a check that requests still send. Effort grows with the number of collections, not just their size.Retire unused collections before export and group related requests into fewer collections.
Script complexityPre-request and test scripts may use Postman-style APIs or packages that need manual rework after import. Unsupported packages are flagged, not converted.Inventory scripts first and ask the vendor or partner to scope rewrites of unsupported packages separately.
Environment countEach environment's variables, secrets, and overrides must be checked after import, since values can be lost or mapped incorrectly.Consolidate duplicate environments and remove stale variables before the export.
Authentication varietyOAuth 2, API keys, and token flows each need a test against the live service. Mixed schemes add verification time.List every auth type per collection and confirm credentials are stored outside the shared files.
Cloud Sync versus Git Sync dependenceCloud Sync projects have no file-based copy, so they must be exported before the account is closed. Git Sync projects need a repository, branch rules, and a new team workflow.Export all Cloud Sync projects and confirm the export files open before retiring them.
Team size and onboardingEach person needs Bruno installed and access to the Git repository. Training time scales with the number of users who edit collections.Pilot with one team, then document the Git workflow for the rest.
CI usagePipelines that run collections through the Bruno CLI need new runner configuration, secret injection, and report handling.Start with a single smoke collection in CI before moving the full suite.
Documentation needsMigration notes, naming conventions, and ownership records take time but are needed for audit evidence and handover.Reuse the Git README and a short runbook template instead of writing a separate document set.
Bruno edition (one-time and recurring)Open Source is listed at $0 per user per month on Bruno's pricing page. Pro is listed at $6 and Ultimate at $11 per user per month, billed annually, per the same page. Paid Git UI features and bulk Postman import sit in the paid tiers.Confirm which Git UI operations your team needs. Git still works from the command line on any edition.
Git hosting (recurring)Collections live in a Git repository, so hosting, access control, and backups of that repository are ongoing costs.Use an existing self-hosted or company Git service and confirm branch protection is available.

What usually goes wrong and how to prevent it

Most failed moves from Insomnia to Bruno come from the handoff, not the import itself. Secrets travel in export files, teammates lose access when Cloud Sync projects are removed, and the collection ends up with no clear owner. The cards below cover each risk with a check to run before the migration is called finished.

Secrets leaking into exports and Git

An Insomnia export can carry API keys, bearer tokens and passwords stored in environments or auth settings. If that file is saved to a shared drive or committed to a repository, the credentials are exposed to everyone with access and remain in Git history after deletion. Before exporting, review each environment and auth block, move live values into local or secret-scoped environment files, and confirm that .gitignore excludes them before the first commit.

Cloud Sync projects deleted too early

Cloud Sync projects live in Kong's cloud, and removing them or the account that owns them can cut off teammates who have not yet copied their work. Treat Bruno as the new source only after every member confirms that their requests, environments and examples exist in the Git repository. Keep the Insomnia projects read-only for a period you agree in writing with the team, and record who signed off on each one.

Scripts that fail silently after import

Bruno translates common Postman-style script calls during import, but custom helpers, imported packages and assertions written for Insomnia may not behave the same way. A script can produce no error and still skip a check, which makes a test suite look green. Run each request that carries a script, compare its results against the Insomnia output, and add explicit assertions so that a missing value fails the run.

Missing environment variables

Environments, base URLs and secret variables may not all arrive in the same form after conversion, and some requests reference variables that exist only on one developer's machine. The symptom is usually a request that returns 401 or resolves an unexpanded placeholder. Build a list of every variable used in the collection, check each environment in Bruno, and confirm that secret values are supplied by each user rather than stored in the shared files.

Assuming Git UI features are free

Bruno's Open Source edition covers clone, initialize, diffs, pull and commit in its Git UI, but push, branch operations, remote connections and merge conflict resolution are paid features. Git still works from the command line on any edition, so teams can keep working without a license. Decide before cutover which workflow each person will use, and budget for paid seats only if the in-app push and branching features are required, after checking the current Bruno pricing page.

No named owner for the repository

A collection stored as files has no vendor administrator to fall back on. If nobody owns the repository, branch protection, review rules, naming conventions and the shared environment templates drift quickly, and the team stops trusting the collection. Assign one maintainer and a reviewer for changes to shared requests, document who approves environment changes, and record the owner's contact and backup in the repository README.

How the move differs by team size and starting point

A single developer with a few local collections usually has the shortest path. The work is mostly an export of Insomnia v5 YAML, an import into Bruno, and a check of each request that depends on environments or scripts. Because nobody else depends on the collection, the first pass can be done in one sitting and tested against the real endpoints before anything is deleted.

  • Export first: Export each collection as Insomnia v5 YAML and keep the files in a separate folder so the originals remain available.
  • Import and compare: Import into Bruno, then open several requests and confirm URLs, headers, bodies and auth match the originals.
  • Check environments: Recreate base URLs and variables in Bruno environments, and confirm no secret was exported in plain text by mistake.
  • Review scripts: Read every pre-request and test script, since Bruno translates common Postman APIs but other logic may need hand edits.
  • Store in a folder: Move the collection into a Git repository if you want history, or keep it in a local folder if you do not.

Before you stop using Insomnia, confirm every request you rely on sends the same output in Bruno.

Questions teams ask before migrating from Insomnia to Bruno

How much effort and cost does moving from Insomnia to Bruno involve?

The main cost is staff time, not the client itself, because the Bruno Open Source edition is free to download and use. Effort depends on how many collections, environments and scripts you hold, how many scripts use Postman-specific packages, and how many people need to re-verify requests after import. Recurring cost only appears if you choose a paid edition. Ask for a written scope that lists the collections in scope, the number of users, and whether Git push and branch operations from the app are needed, since those are paid features in Bruno's pricing.

How long does an Insomnia to Bruno migration take?

The duration varies with the size of the estate and how many team members must check the results. A small set of plain requests can be moved in a short working session, while a large workspace with scripts, chained requests and several environments needs time for review and testing. Bruno's documentation covers the import path, but it does not give a timeline for your data. Confirm the duration against your own export, and plan a parallel run where both clients send the same requests until the team agrees the results match.

What does the migration require from our team?

You need someone who can export collections from Insomnia as v5 YAML, someone who can run the import and review the converted requests, and an owner for the repository that will hold the collection. Engineers should review authentication settings, environment variables and scripts, since these are the parts most likely to change during conversion. Security or compliance staff should check that exported files contain no secrets before they are stored in Git. Assign the work to named owners in the project plan before you begin.

Can our own team run this migration without outside help?

Yes, a team with API and Git experience can usually handle a small or medium collection set alone, because Bruno imports Insomnia v5 YAML and also reads older v4 JSON. Outside help becomes more useful when the estate contains many scripts, custom authentication flows, or compliance evidence requirements. DeployOpen plans and implements migrations of self-hosted platforms in your environment under a fixed scope agreed in writing, and it does not publish prices, so ask for a quote based on your written scope.

What happens to our Insomnia Cloud Sync projects?

Cloud Sync projects stay in Kong's cloud and do not move automatically, so you must export them before you change your process. Export the collections and environments you need as Insomnia v5 YAML, verify the files, and store them in a Git repository you control. After the team confirms the export is complete, you can stop using Cloud Sync for those projects. Keep a retained copy of the exports under your own retention policy, and confirm with Kong how long your account data remains available after you leave.

Does Bruno cover the way our CI pipelines run API tests?

Bruno provides a command-line tool, bru, with a bru run command that executes collections and produces test reports, so many CI pipelines can run the same collections without the desktop app. Confirm that your pipelines only use features the CLI supports, such as the scripts and assertions in your collections, and test them in a non-production pipeline first. Check the Bruno CLI documentation for the report formats and the runner options you need, and record the result in your migration plan.

What do the paid Bruno editions add, and what do they cost?

Bruno lists the Open Source edition at $0, Pro at $6 per user per month and Ultimate at $11 per user per month, both billed annually. Open Source is limited to 2 workspaces and 5 OpenAPI syncs per month. Pro and Ultimate add Git UI operations such as push, branch operations, remote connections and merge conflict resolution, while Open Source covers clone, diffs, pull and commit. Ultimate also includes bulk import of a Postman data dump. Paid editions use license keys and add SAML single sign-on and SCIM provisioning. Git still works outside the app on every edition, so ask whether your team needs those features before buying seats.

How DeployOpen works on this

DeployOpen is a Chainscore Labs company that plans, implements, documents and supports self-hosted open-source platforms inside the client's own infrastructure. For a move from Insomnia to Bruno, we start with a written scope that covers which collections, environments and authentication settings move, and where the Git repository will live.

How we scope

  • Inventory the Insomnia workspaces, Cloud Sync and Git Sync projects, and environments that need to move.
  • Agree in writing which collections move to Bruno and which stay in Insomnia for a defined period.
  • Define how Postman-specific scripts and packages are reviewed, rewritten or retired during import.
  • Confirm the Git hosting location, branch model and who reviews collection changes before go-live.

How we build

  • Export Insomnia v5 YAML, import into Bruno, and record each collection that needed manual correction.
  • Check environment variables, secrets and auth settings against the source collections, using test requests.
  • Run the Bruno CLI collections in a pipeline to confirm that requests and tests behave as expected.
  • Commit the collection folders to Git with a documented layout and contribution steps for the team.

How we hand over

  • Deliver a written runbook covering import steps, known gaps, and the Bruno edition chosen for each user.
  • Walk the team through the Git workflow, including which Git actions the Open Source edition covers.
  • Document the Cloud Sync retirement steps, including what to delete, archive or export before closing projects.
  • Provide a checklist for the team to confirm each collection before the old Insomnia projects are retired.

How we support

  • Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.
  • Ongoing support, upgrades of Bruno versions and CLI test maintenance are available as a retainer.
  • Confirm with DeployOpen the support terms, response expectations and handover owner in the written scope.
  • Request a quote based on the written scope, the number of collections and the Git setup your team needs.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.