{"id":28293,"date":"2024-06-18T15:41:41","date_gmt":"2024-06-18T13:41:41","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=28293"},"modified":"2024-06-18T15:42:09","modified_gmt":"2024-06-18T13:42:09","slug":"bruno-vs-postman-the-final-battle","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/","title":{"rendered":"Bruno vs Postman: The Final Battle"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\" id=\"h-bruno-vs-postman\"><strong>Bruno vs Postman<\/strong><\/h2>\n\n\n\n<p>Bruno is an open-source API Client that has been gaining traction, challenging the highly popular Postman. This project aims to <strong>grow with community support<\/strong>, without third-party company involvement (except as sponsors) and has a strong desire to remain independent. They intend to maintain their identity, accepting external help without allowing any interference in project management.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-why-choose-bruno\"><strong>Why Choose Bruno<\/strong><\/h2>\n\n\n\n<p>For many, Postman is synonymous with reliability and familiarity. Despite some minor limitations (like only being able to modify requests through its interface), <strong>it has always met my needs<\/strong>. My collections have been there for ages, and the thought of reorganizing them elsewhere always gave me chills.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Everything was perfect until I needed to share my requests seriously with the team for effective collaboration. With the subscription costs and the frequent changes required for shared management of calls, my doubts grew daily.<\/p>\n<\/blockquote>\n\n\n\n<p>Then Bruno arrived (the name reminds me of a movie). Its simple architecture immediately caught my attention, prompting me to import some of my Postman collections.<\/p>\n\n\n\n<p>In this post, I will summarize the points of contact (or friction) between the two competitors, <strong>analyzing them from both perspectives to declare the possible winner<\/strong> of this challenge. Let&#8217;s begin!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-configuration-storage\"><strong>Configuration Storage<\/strong><\/h2>\n\n\n\n<p>While Postman saves collection and request configurations in its cloud, Bruno stores them on the local machine&#8217;s filesystem in &#8220;bru&#8221; files. This may seem trivial, but it significantly impacts collaboration, usability, and privacy.<\/p>\n\n\n\n<p>In terms of usability, besides Bruno&#8217;s UI, we can directly modify the configuration files (the &#8220;.bru&#8221; files), which are simple text files. <strong>A great editor for editing Bru files is Visual Studio Code,<\/strong> with a &#8220;Bruno&#8221; extension for syntax highlighting.<\/p>\n\n\n\n<p>Bruno doesn\u2019t have its own cloud (and according to their Manifest, likely never will), meaning the persistence of configurations is entirely user-managed. Therefore, with configuration files residing only on our machines, privacy is guaranteed. Sharing them is solely up to us.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-collaboration\"><strong>Collaboration<\/strong><\/h2>\n\n\n\n<p>Contrary to Postman, which stores our configurations in its cloud, Bruno\u2019s request (and collection) definitions are local, represented by text files in Bru format. While in Postman, you can back up collections by exporting them; in Bruno, you can easily transform your filesystem structure into a Git (or SVN, or Mercurial) repository and push it to BitBucket, <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-life\/github-project\/\" class=\"ek-link\">GitHub<\/a>, or GitLab.<\/p>\n\n\n\n<p>This implements team-level sharing! <strong>Postman requires purchasing licenses for teams larger than three users<\/strong> (with not-so-popular prices), while Bruno offers this capability for free, with no limits on what or with whom you share requests. Isn\u2019t that wonderful?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-online-vs-offline\"><strong>Online vs Offline<\/strong><\/h2>\n\n\n\n<p>I must admit, I never noticed this detail because I am always connected. However, it turns out Postman works only in online mode. It doesn&#8217;t start if it cannot contact its servers. Bruno, on the other hand, has no connection requirement since everything it needs resides on the local filesystem. This means you can make calls to your local environment even if you are isolated from the rest of the world.<\/p>\n\n\n\n<p><strong>Using External Libraries<\/strong><\/p>\n\n\n\n<p>Using external libraries is standard for a developer and makes sense in this context. Both Postman and Bruno offer preloaded libraries covering most needs, such as:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Postman<\/th><th>Library<\/th><th>Bruno<\/th><\/tr><\/thead><tbody><tr><td>\u2713<\/td><td>ajv<\/td><td>\u2713<\/td><\/tr><tr><td><\/td><td>axios<\/td><td>\u2713<\/td><\/tr><tr><td><\/td><td>node-fetch<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>atob<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>btoa<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>chai<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>lodash<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>moment<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>uuid<\/td><td>\u2713<\/td><\/tr><tr><td><\/td><td>nanoid<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>crypto-js<\/td><td>\u2713<\/td><\/tr><tr><td>\u2713<\/td><td>cheerio<\/td><td><\/td><\/tr><tr><td>\u2713<\/td><td>csv-parse<\/td><td><\/td><\/tr><tr><td>\u2713<\/td><td>tv4<\/td><td><\/td><\/tr><tr><td>\u2713<\/td><td>xml2js<\/td><td><\/td><\/tr><tr><td>\u2713<\/td><td>postman-collection<\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Postman isn&#8217;t designed to easily integrate external libraries into its ecosystem. The alternatives are either downloading the library via script from a CDN and evaluating the returned string or placing the library&#8217;s source code in a variable at the collection (or environment) level and invoking an anonymous function to access its methods. This process is somewhat complex.<\/p>\n\n\n\n<p>In Bruno, things are much simpler: create a package.json file with the libraries you want to include and put it in your project&#8217;s root directory. Then, install the dependencies with <code>npm install<\/code>. The libraries are now available for use throughout your collection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-scripting\"><strong>Scripting<\/strong><\/h2>\n\n\n\n<p>Both Bruno and Postman allow customizing calls at different events:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pre-Request<\/li>\n\n\n\n<li>Post-Response<\/li>\n<\/ul>\n\n\n\n<p>These events can be personalized at the individual request level or at the collection level, impacting all underlying requests. Scripting is necessary for various reasons, from pre-filling request\/collection variables to handling JWT for authentication.<\/p>\n\n\n\n<p>In scripting, Bruno provides three key variables:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>req<\/code> \u2013 Represents the request.<\/li>\n\n\n\n<li><code>res<\/code> \u2013 Represents the response.<\/li>\n\n\n\n<li><code>bru<\/code> \u2013 Provides methods to interact with Bruno and its ecosystem.<\/li>\n<\/ul>\n\n\n\n<p>In the &#8220;Pre Request&#8221; section, you can force request characteristics, set collection or environment-level variables, or even set the request method or URL. <strong>Bruno allows hiding secret values in an <code>.env<\/code> file saved in your working directory<\/strong>. This file should be excluded from source control via <code>.gitignore<\/code>. For collaborators, create an <code>.env.example<\/code> with fake values to guide them in creating their <code>.env<\/code> files.<\/p>\n\n\n\n<p>You can extract values from secrets, generate random data using external libraries, and set values returned from other services. For example, extract a secret value from the current environment file and place it in both a Header (X-Secret) and a variable.<\/p>\n\n\n\n<p>You can also define variables without scripting by using the declarative UI. These defined variables can be used in the request body, leveraging Bruno&#8217;s templating syntax. After executing the request, verify parameters in the &#8220;Timeline&#8221; tab of the UI.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-declarative-asserts\"><strong>Declarative Asserts<\/strong><\/h2>\n\n\n\n<p>This feature immediately caught my attention as it simplified implementing basic tests while allowing complex logic via scripting. After each request, you can set tests to verify correct functionality based on your assumptions.<\/p>\n\n\n\n<p>While in Postman, you write code for tests, Bruno offers a declarative way to define these tests, lightening your workload for simpler, more straightforward tests.<\/p>\n\n\n\n<p>For example, test a call to <code>api.chucknorris.io<\/code>, which typically responds with a JSON like this:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Ensure the <code>value<\/code> field is a string.<\/li>\n\n\n\n<li>Ensure the <code>id<\/code> field matches a specific Regular Expression.<\/li>\n\n\n\n<li>Verify the response status is 200 (OK).<\/li>\n\n\n\n<li>Ensure <code>updated_at<\/code> is a date\/time.<\/li>\n<\/ol>\n\n\n\n<p>In Postman, you\u2019d write code for these tests, which can also be done in Bruno with some syntax differences. However, Bruno allows declaring these tests in the &#8220;Assert&#8221; panel of your request. This simplicity means I can check the <code>updated_at<\/code> field validity using just a Regular Expression without using the moment library.<\/p>\n\n\n\n<p>Behind the scenes, these asserts translate to a few lines in the Bru file.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-executing-collections\"><strong>Executing Collections<\/strong><\/h2>\n\n\n\n<p>During feature development, testing specific APIs is normal. At the end of the work, you typically run most (or all) requests in a collection to ensure no regressions. Here, Postman shows one of its most hated limits: the maximum number of monthly collection runs, which are:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>25 for Free\/Basic plans<\/li>\n\n\n\n<li>250 for Professional plan<\/li>\n\n\n\n<li>Unlimited for Enterprise plan<\/li>\n<\/ul>\n\n\n\n<p>Bruno imposes no such limits, allowing unlimited runs. Simply select &#8220;Run&#8221; from the collection\u2019s dropdown menu to see the call results. Alternatively, Bruno offers a CLI runner (<code>bru<\/code>) installable via npm. Run it with <code>npm install -g @usebruno\/cli<\/code>. Then, navigate to your collection&#8217;s main directory and use commands like:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>bru run<\/code> to execute all requests in the current collection.<\/li>\n\n\n\n<li><code>bru run request.bru<\/code> to execute a specific request.<\/li>\n\n\n\n<li><code>bru run &lt;folder><\/code> to execute all requests in a specific directory.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-licensing-models\"><strong>Licensing Models<\/strong><\/h2>\n\n\n\n<p>Software licenses are often a sore point for companies, seen as a cost without tangible benefits except enriching the producer. Bruno\u2019s &#8220;Golden Edition&#8221; offers additional features over the Community version, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bru File Explorer for directly modifying a request\u2019s Bru file rather than managing additional JS scripts.<\/li>\n\n\n\n<li>Visual Git for visually managing source control interactions.<\/li>\n\n\n\n<li>Developer Tools for managing JSON structures and JWTs.<\/li>\n<\/ul>\n\n\n\n<p>For Bruno, &#8220;License&#8221; primarily means &#8220;development support&#8221;. Postman\u2019s licensing complexity matches its extensive offering: four plans (Free, Basic, Professional, and Enterprise) with increasing monthly prices per user. The most critical limit in the Free version is a team size of up to three users. To add even one more member, you must upgrade to at least the Basic version, incurring a significant cost.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-what-s-missing-in-bruno\"><strong>What&#8217;s Missing in Bruno?<\/strong><\/h2>\n\n\n\n<p>While Bruno\u2019s first commit was in December 2021, Postman has been around since 2012, giving it nine more years to evolve and improve, becoming the industry standard. Bruno still lacks many features to be on par with Postman, such as:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Flows \u2013 Visual editor for API call flows.<\/li>\n\n\n\n<li>Postbot \u2013 AI for generating API calls, documentation, and tests.<\/li>\n\n\n\n<li>Mock Servers \u2013 Simulate APIs by returning predefined fake data.<\/li>\n<\/ul>\n\n\n\n<p>Despite these gaps, Bruno effectively supports daily development work. Bruno\u2019s community is growing, promising a bright future filled with new ideas, features, and fixes, benefiting the product.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusions\"><strong>Conclusions<\/strong><\/h2>\n\n\n\n<p>I\u2019ve never believed in &#8220;perfect&#8221; software. Instead, I firmly believe in what best suits our needs. Without claiming to have the ultimate truth or needing to sell anything to anyone (which, as a technician, I can&#8217;t do),<strong> I recommend giving Bruno a chance. <\/strong>I\u2019m sure you\u2019ll like it and maybe find it\u2019s just what you need.<\/p>\n\n\n\n<p>I\u2019m genuinely curious to hear your feedback: have you tried it? Did it solve any problems for you? What do you think doesn\u2019t work or needs improvement?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bruno vs Postman Bruno is an open-source API Client that has been gaining traction, challenging the highly popular Postman. This project aims to grow with community support, without third-party company involvement (except as sponsors) and has a strong desire to remain independent. They intend to maintain their identity, accepting external help without allowing any interference&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/\">Read more<\/a><\/p>\n","protected":false},"author":261,"featured_media":28089,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[36],"tags":[],"collections":[12267],"class_list":{"0":"post-28293","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-backend","8":"collections-bruno","9":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Bruno vs Postman: The Final Battle - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bruno vs Postman: The Final Battle\" \/>\n<meta property=\"og:description\" content=\"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-18T13:41:41+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-18T13:42:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1368\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Fabio Grande\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fabio Grande\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/\"},\"author\":{\"name\":\"Fabio Grande\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/d47d145dba7746776b7d736aecffdd44\"},\"headline\":\"Bruno vs Postman: The Final Battle\",\"datePublished\":\"2024-06-18T13:41:41+00:00\",\"dateModified\":\"2024-06-18T13:42:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/\"},\"wordCount\":1462,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg\",\"articleSection\":[\"Backend\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/\",\"name\":\"Bruno vs Postman: The Final Battle - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg\",\"datePublished\":\"2024-06-18T13:41:41+00:00\",\"dateModified\":\"2024-06-18T13:42:09+00:00\",\"description\":\"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg\",\"width\":1368,\"height\":768,\"caption\":\"Bruno vs postman\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/bruno-vs-postman-the-final-battle\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Backend\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/backend\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Bruno vs Postman: The Final Battle\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/d47d145dba7746776b7d736aecffdd44\",\"name\":\"Fabio Grande\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/fabio-grande-profile-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/fabio-grande-profile-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2024\\\/06\\\/fabio-grande-profile-100x100.jpg\",\"caption\":\"Fabio Grande\"},\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/fabio-grande\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Bruno vs Postman: The Final Battle - Codemotion Magazine","description":"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/","og_locale":"en_US","og_type":"article","og_title":"Bruno vs Postman: The Final Battle","og_description":"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.","og_url":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-06-18T13:41:41+00:00","article_modified_time":"2024-06-18T13:42:09+00:00","og_image":[{"width":1368,"height":768,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg","type":"image\/jpeg"}],"author":"Fabio Grande","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Fabio Grande","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/"},"author":{"name":"Fabio Grande","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/d47d145dba7746776b7d736aecffdd44"},"headline":"Bruno vs Postman: The Final Battle","datePublished":"2024-06-18T13:41:41+00:00","dateModified":"2024-06-18T13:42:09+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/"},"wordCount":1462,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg","articleSection":["Backend"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/","url":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/","name":"Bruno vs Postman: The Final Battle - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg","datePublished":"2024-06-18T13:41:41+00:00","dateModified":"2024-06-18T13:42:09+00:00","description":"Discover how Bruno, an open-source, community-driven client, compares to Postman, highlighting differences in local management, usability, collaboration, and scripting.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg","width":1368,"height":768,"caption":"Bruno vs postman"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/backend\/bruno-vs-postman-the-final-battle\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Backend","item":"https:\/\/www.codemotion.com\/magazine\/backend\/"},{"@type":"ListItem","position":3,"name":"Bruno vs Postman: The Final Battle"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/d47d145dba7746776b7d736aecffdd44","name":"Fabio Grande","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/fabio-grande-profile-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/fabio-grande-profile-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/fabio-grande-profile-100x100.jpg","caption":"Fabio Grande"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/fabio-grande\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-600x400.jpg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-600x600.jpg","author_info":{"display_name":"Fabio Grande","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/fabio-grande\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg",1368,768,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-150x150.jpg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-300x168.jpg",300,168,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-768x431.jpg",768,431,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-1024x575.jpg",1024,575,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg",1368,768,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2.jpg",1368,768,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-100x100.jpg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-180x128.jpg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-896x504.jpg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-400x225.jpg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-600x400.jpg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/06\/Default_an_happy_golden_retriever_floating_in_space_with_an_as_2-600x600.jpg",600,600,true]},"uagb_author_info":{"display_name":"Fabio Grande","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/fabio-grande\/"},"uagb_comment_info":0,"uagb_excerpt":"Bruno vs Postman Bruno is an open-source API Client that has been gaining traction, challenging the highly popular Postman. This project aims to grow with community support, without third-party company involvement (except as sponsors) and has a strong desire to remain independent. They intend to maintain their identity, accepting external help without allowing any interference&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/261"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=28293"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28293\/revisions"}],"predecessor-version":[{"id":28299,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/28293\/revisions\/28299"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/28089"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=28293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=28293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=28293"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=28293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}