<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>pb33f: enterprise grade software for hackers and engineers</title>
    <link>https://pb33f.io/</link>
    <description>Recent content on pb33f: enterprise grade software for hackers and engineers</description>
    <generator>Hugo 0.125.2</generator>
    <language>en-us</language>
    <lastBuildDate>Sun, 03 May 2026 19:20:58 -0400</lastBuildDate>
    <atom:link href="https://pb33f.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Running wiretap against multiple OpenAPI specs</title>
      <link>https://pb33f.io/wiretap/multi-spec-mode/</link>
      <pubDate>Sun, 03 May 2026 03:00:00 -0400</pubDate>
      <guid>https://pb33f.io/wiretap/multi-spec-mode/</guid>
      <description>One proxy, many contracts wiretap can load many OpenAPI specifications at the same time and route each incoming request to the contract that owns it. We call this multi-spec mode.&#xA;Real systems are rarely described by a single OpenAPI contract. Services each ship their own spec, API gateways stitch together specs from multiple backends/polyrepos, and monorepos collect dozens of contracts in one tree.&#xA;multi-spec mode lets wiretap validate traffic across all of them, without having to merge or pre-process the contracts first.</description>
    </item>
    <item>
      <title>pb33f update, april 2026</title>
      <link>https://pb33f.io/newsletters/april-2026/</link>
      <pubDate>Thu, 23 Apr 2026 04:59:17 -0500</pubDate>
      <guid>https://pb33f.io/newsletters/april-2026/</guid>
      <description>view this newsletter on the web.&#xA;A SEASON FOR HACKING Howdy, my fellow hackers,&#xA;Spring is beautiful here at the pb33f ranch at the moment. The grass is green, and the foliage is fresh and youthful.&#xA;Everything is also covered in a thick layer of yellowish-green pollen. It doesn&amp;rsquo;t help that our ranch is in a forest.&#xA;A megaton of hackery has been going on. Let me catch you up.</description>
    </item>
    <item>
      <title>Version command</title>
      <link>https://pb33f.io/openapi-changes/version/</link>
      <pubDate>Mon, 13 Apr 2026 10:45:00 -0400</pubDate>
      <guid>https://pb33f.io/openapi-changes/version/</guid>
      <description>The version command prints only the raw build version string. It is useful for install verification, scripts, and CI checks.&#xA;Examples:&#xA;openapi-changes version docker run --rm pb33f/openapi-changes version The output is intentionally minimal:&#xA;v0.2.1 </description>
    </item>
    <item>
      <title>Completion command</title>
      <link>https://pb33f.io/openapi-changes/completion/</link>
      <pubDate>Wed, 08 Apr 2026 09:00:00 -0400</pubDate>
      <guid>https://pb33f.io/openapi-changes/completion/</guid>
      <description>The completion command generates shell completion scripts for bash, zsh, fish, and powershell.&#xA;Examples:&#xA;openapi-changes completion zsh openapi-changes completion bash If you need the exact shell integration help text, run:&#xA;openapi-changes completion --help </description>
    </item>
    <item>
      <title>Markdown report command</title>
      <link>https://pb33f.io/openapi-changes/markdown-report/</link>
      <pubDate>Wed, 08 Apr 2026 09:00:00 -0400</pubDate>
      <guid>https://pb33f.io/openapi-changes/markdown-report/</guid>
      <description>Use markdown-report when you want a shareable file instead of a terminal session. It renders the semantic change report as markdown, which makes it useful for pull requests, release notes, and internal docs.&#xA;Examples:&#xA;openapi-changes markdown-report ./ sample-specs/petstorev3.json openapi-changes markdown-report HEAD~1:openapi.yaml ./openapi.yaml Useful flags Write to a specific file Use --report-file to choose the output filename.&#xA;openapi-changes markdown-report --report-file changes.md ./ sample-specs/petstorev3.json Include the raw unified diff Use --include-diff to append a collapsible unified diff of the raw spec for each commit.</description>
    </item>
    <item>
      <title>Arazzo Workflow Orchestration</title>
      <link>https://pb33f.io/libopenapi/arazzo/</link>
      <pubDate>Thu, 26 Feb 2026 10:00:00 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/arazzo/</guid>
      <description>The Arazzo Specification defines a standard way to describe sequences of API calls as workflows.&#xA;Arazzo documents reference OpenAPI specifications and describe step-by-step orchestrations on which operations to call, in what order, how to pass data between them, and what constitutes success or failure.&#xA;libopenapi provides full support for:&#xA;Parsing Arazzo 1.0.1 documents into strongly-typed Go models Validating documents against 21 structural rules with line/column error reporting Executing workflows via a pluggable engine with retry, branching, and dependency ordering Arazzo support was added in libopenapi v0.</description>
    </item>
    <item>
      <title>Applying OpenAPI Overlays</title>
      <link>https://pb33f.io/libopenapi/overlays/</link>
      <pubDate>Tue, 23 Dec 2025 10:00:00 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/overlays/</guid>
      <description>The OpenAPI Overlay Specification defines a standard way to modify OpenAPI documents without editing the original files. Overlays are useful for:&#xA;Environment-specific customization - Different server URLs for dev/staging/prod API versioning - Removing deprecated operations for newer API versions Partner customization - Tailoring documentation for specific integrations Documentation updates - Adding descriptions without modifying source specs SDK Generation - Add extensions to customize code generation Overlay support was added in libopenapi v0.</description>
    </item>
    <item>
      <title>Configuring breaking changes</title>
      <link>https://pb33f.io/openapi-changes/configuring/</link>
      <pubDate>Sat, 13 Dec 2025 10:00:00 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/configuring/</guid>
      <description>Not every change that could be breaking is breaking for your own API.&#xA;openapi-changes lets us customize which changes are flagged as breaking, so we can tailor the rules to match our API&amp;rsquo;s versioning strategy and consumer expectations.&#xA;This feature is available from v0.0.91&#xA;We have dropped all support for Swagger moving forward. It&amp;rsquo;s a commercial tool that uses a different standard to OpenAPI.&#xA;This only works with OpenAPI Documents.</description>
    </item>
    <item>
      <title>pb33f update, december 2025</title>
      <link>https://pb33f.io/newsletters/dec-2025/</link>
      <pubDate>Thu, 04 Dec 2025 05:59:17 -0500</pubDate>
      <guid>https://pb33f.io/newsletters/dec-2025/</guid>
      <description>view this newsletter on the web.&#xA;Christmas is coming, oh no. Howdy, my fellow hackers,&#xA;It&amp;rsquo;s cold outside; well, it is here in pb33f HQ in Virginia anyway. I wanted to let you know what&amp;rsquo;s been cooking down here on the ranch. I hope you&amp;rsquo;re well and having fun and staying warm.&#xA;The holiday season is upon us, get ready for chaos, and hopefully some downtime with family and loved ones.</description>
    </item>
    <item>
      <title>pb33f update, september 2025</title>
      <link>https://pb33f.io/newsletters/sept-2025/</link>
      <pubDate>Thu, 18 Sep 2025 07:59:17 -0500</pubDate>
      <guid>https://pb33f.io/newsletters/sept-2025/</guid>
      <description>view this newsletter on the web.&#xA;🏫 Back to school! Howdy, my fellow hackers,&#xA;By now, all the kids are back in school (like mine), and everyone is recovering after a fun-filled summer full of beach trips, sunshine, and conferences!&#xA;I wanted to let you know about what&amp;rsquo;s been cooking on the ranch. I hope you&amp;rsquo;re well and having fun.&#xA;vacuum gets a facelift NEW! Recently, my addiction to Claude Code took yet another dive, and after five hazy code-fueled days, I ended up rebuilding the entire terminal UI for vacuum.</description>
    </item>
    <item>
      <title>pb33f update, july 2025</title>
      <link>https://pb33f.io/newsletters/july-2025/</link>
      <pubDate>Mon, 21 Jul 2025 07:59:17 -0500</pubDate>
      <guid>https://pb33f.io/newsletters/july-2025/</guid>
      <description>🚀 Workspaces available! Howdy folks,&#xA;Hope you&amp;rsquo;re having a great summer. If you have young kids at home (like me), I&amp;rsquo;m sorry.&#xA;Over the last couple of weeks, we very quietly launched the ability to authenticate with pb33f, and over the weekend NEW! workspaces went live in the doctor.&#xA;🔐 OAuth Only We don&amp;rsquo;t want to hold your passwords, so to authenticate, you will need to use a service provider. We&amp;rsquo;re starting with GitHub, but plan on adding more soon.</description>
    </item>
    <item>
      <title>Using HAR files with wiretap</title>
      <link>https://pb33f.io/wiretap/har-files/</link>
      <pubDate>Sat, 13 Jan 2024 07:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/har-files/</guid>
      <description>use wiretap offline with HAR files HTTP Archive (HAR) files can be loaded into wiretap for review in the Monitor UI, or for validation against an OpenAPI specification.&#xA;Reviewing the HAR files By loading in a HAR file and loading the Monitor UI you can review the captured traffic. The UI will stream the traffic to you as if it were being sent live, and you can use the UI to filter the traffic, or to search for anything specific.</description>
    </item>
    <item>
      <title>Run wiretap in headless mode</title>
      <link>https://pb33f.io/wiretap/headless-mode/</link>
      <pubDate>Sat, 13 Jan 2024 07:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/headless-mode/</guid>
      <description>Avoid the Monitor UI To use wiretap as a part of a pipeline or to integrate it into your CI/CD process, you can run wiretap in headless mode.&#xA;This will run wiretap as normal, except the violations that are captured will be streamed to a file.&#xA;This is in addition to being streamed to the monitor UI.&#xA;Use the --stream-report / a flag to stream violations to a file:&#xA;wiretap --stream-report -u https://api.</description>
    </item>
    <item>
      <title>libopenapi changelog</title>
      <link>https://pb33f.io/libopenapi/changelog/</link>
      <pubDate>Wed, 10 Jan 2024 10:15:03 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/changelog/</guid>
      <description>Everything that has changed in the last 20 releases of libopenapi.&#xA;loading changelog component... view more on github &amp;gt;</description>
    </item>
    <item>
      <title>openapi-changes changelog</title>
      <link>https://pb33f.io/openapi-changes/changelog/</link>
      <pubDate>Wed, 10 Jan 2024 10:15:03 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/changelog/</guid>
      <description>Everything that has changed in the last 20 releases of openapi-changes&#xA;loading changelog component... view more on github &amp;gt;</description>
    </item>
    <item>
      <title>wiretap changelog</title>
      <link>https://pb33f.io/wiretap/changelog/</link>
      <pubDate>Wed, 10 Jan 2024 10:15:03 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/changelog/</guid>
      <description>Everything that has changed in the last 20 releases of wiretap&#xA;loading changelog component... view more on github &amp;gt;</description>
    </item>
    <item>
      <title>The rolodex of OpenAPI references</title>
      <link>https://pb33f.io/libopenapi/rolodex/</link>
      <pubDate>Mon, 20 Nov 2023 05:10:13 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/rolodex/</guid>
      <description>This documentation only applies to v0.13+ of libopenapi. In all releases before then the index and resolver architecture was significantly different and the behavior and relationship of them was also different. If you have ever used OpenAPI with golang, you&amp;rsquo;re probably aware of using $ref to reference other objects like Schemas or Parameters that we want to re-use across a specification, or across multiple specifications.&#xA;libopenapi needs a way to look up these references and resolve them.</description>
    </item>
    <item>
      <title>Generating OpenAPI mocks</title>
      <link>https://pb33f.io/libopenapi/mocks/</link>
      <pubDate>Mon, 04 Sep 2023 07:38:08 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/mocks/</guid>
      <description>A quick example Using the burger shop testing OpenAPI specification, we can generate a mock from one of the examples in Fries component schema.&#xA;import ( &amp;#34;fmt&amp;#34; &amp;#34;github.com/pb33f/libopenapi&amp;#34; &amp;#34;github.com/pb33f/libopenapi/renderer&amp;#34; &amp;#34;os&amp;#34; ) func renderFries() { // create a new JSON mock generator mg := renderer.NewMockGenerator(renderer.JSON) // tell the mock generator to pretty print the output mg.SetPretty() burgerShop, _ := os.ReadFile(&amp;#34;burgershop.openapi.yaml&amp;#34;) // create a new document from specification and build a v3 model.</description>
    </item>
    <item>
      <title>Mocking HTTP responses</title>
      <link>https://pb33f.io/wiretap/mock-responses/</link>
      <pubDate>Sat, 02 Sep 2023 14:51:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/mock-responses/</guid>
      <description>Please enter the simulation wiretap can be used as a full simulation of a real API. We call it mock mode.&#xA;To enable it, use the -x or the --mock-mode flags when running wiretap with an OpenAPI Specification.&#xA;wiretap -s giftshop-openapi.yaml -u https://api.pb33f.io -x Try before you buy mock mode simulates a real, working web API by using an OpenAPI contract to simulate the responses to API calls.&#xA;The simulation is based on the OpenAPI contract, which means the API will be contractually correct, ideal for testing and development.</description>
    </item>
    <item>
      <title>Contributing to wiretap</title>
      <link>https://pb33f.io/wiretap/contributing/</link>
      <pubDate>Tue, 08 Aug 2023 12:51:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/contributing/</guid>
      <description>wiretap is an open source project licenced under BUSL 1.1, and we welcome contributions from the community.&#xA;Guidelines There are currently very few tests in this project, so we ask that you please write tests for any new code, so we can start to build up a test suite.&#xA;How to develop locally Wiretap is written in go, it uses libopenapi as the underlying OpenAPI library and ranch as the underlying web/API framework.</description>
    </item>
    <item>
      <title>The pb33f demo giftshop API</title>
      <link>https://pb33f.io/wiretap/giftshop-api/</link>
      <pubDate>Sun, 30 Jul 2023 02:51:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/giftshop-api/</guid>
      <description>The Giftshop API In order to try out wiretap, we&amp;rsquo;ve created a small demo API that you can use to play around with. The API is a simple giftshop API that has a few sample endpoints.&#xA;The API cannot be damaged in any way, so feel free to try out any of the features of wiretap on it. No mutations will be persisted, nothing will be deleted, and no data will be lost.</description>
    </item>
    <item>
      <title>Monitoring your API</title>
      <link>https://pb33f.io/wiretap/monitor/</link>
      <pubDate>Tue, 11 Jul 2023 07:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/monitor/</guid>
      <description>A window into your API Open up your browser and point it at http://localhost:9091, (or which ever port you have configured ) and you should see the wiretap monitor.&#xA;The main components of wiretap outlined Transaction area Select a transaction from the list to view the request, response and any violations that may have been fired.&#xA;The main components of wiretap outlined indicates that a global delay was applied to the transaction.</description>
    </item>
    <item>
      <title>Configuring wiretap</title>
      <link>https://pb33f.io/wiretap/configuring/</link>
      <pubDate>Mon, 10 Jul 2023 15:51:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/configuring/</guid>
      <description>Using flags The following flags exist for configuring wiretap:&#xA;Flag Short Code Description &amp;ndash;url -u Set the redirect URL for wiretap to send traffic to [required] &amp;ndash;port -p Set port on which to listen for HTTP traffic (default is 9090) &amp;ndash;monitor-port -m Set port on which to serve the monitor UI (default is 9091) &amp;ndash;ws-port -w Set port on which to serve the monitor UI websocket (default is 9092) &amp;ndash;spec -s Set the path to the OpenAPI specification to use &amp;ndash;static -t Set the path to a directory of static files to serve &amp;ndash;static-index -i Set the index filename for static file serving (default is index.</description>
    </item>
    <item>
      <title>Get started with wiretap</title>
      <link>https://pb33f.io/wiretap/quickstart/</link>
      <pubDate>Mon, 10 Jul 2023 05:38:08 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/quickstart/</guid>
      <description>Don&amp;rsquo;t have time to read? Just want to try things out? No problem, we&amp;rsquo;ve got you covered.&#xA;1. Install wiretap brew install pb33f/taps/wiretap If you don&amp;rsquo;t/can&amp;rsquo;t use homebrew, then you can use one of the other methods of installing wiretap 2. Download OpenAPI spec We&amp;rsquo;re going to use a small example Gift Shop OpenAPI specification to demonstrate the speed and power of wiretap.&#xA;curl -o giftshop-openapi.yaml https://api.pb33f.io/wiretap/giftshop-openapi.yaml 3. Run wiretap wiretap -s giftshop-openapi.</description>
    </item>
    <item>
      <title>What is wiretap?</title>
      <link>https://pb33f.io/wiretap/about/</link>
      <pubDate>Sat, 08 Jul 2023 18:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/about/</guid>
      <description>Three goals wiretap has three main goals as a tool:&#xA;Validate API requests and responses are compliant with OpenAPI specifications. Operate as a development server for UIs to test APIs. Provide diagnostics for developers to debug API requests and responses. Why does wiretap exist? When looking for solutions to validate brownfield servers and clients were actually compliant with an OpenAPI specification, we found nothing that didn&amp;rsquo;t require infrastructure and didn&amp;rsquo;t require code changes.</description>
    </item>
    <item>
      <title>Installing wiretap</title>
      <link>https://pb33f.io/wiretap/installing/</link>
      <pubDate>Sat, 08 Jul 2023 18:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/installing/</guid>
      <description>Using homebrew The easiest way to install wiretap is to use homebrew if you&amp;rsquo;re on OSX or Linux.&#xA;We have our own tap available that gives the latest and greatest version.&#xA;brew install pb33f/taps/wiretap Using npm or yarn Building a JavaScript / TypeScript application? No problem, grab your copy of wiretap using your preference of yarn or npm.&#xA;yarn global add @pb33f/wiretap npm install -g @pb33f/wiretap Using cURL Do you want to use wiretap in a linux only or CI/CD pipeline or workflow?</description>
    </item>
    <item>
      <title>Serving static content and files with wiretap</title>
      <link>https://pb33f.io/wiretap/static-content/</link>
      <pubDate>Sat, 08 Jul 2023 18:08:04 -0500</pubDate>
      <guid>https://pb33f.io/wiretap/static-content/</guid>
      <description>When building a user interface to an API, it may mean that in order to effectively test the API, you need to serve some static content or files along with the API.&#xA;Why do I need this? If the user interface is a web application, and the web application and the API are served from the same host, then in order to effectively use wiretap, the application would need to be served by wiretap as well.</description>
    </item>
    <item>
      <title>About pb33f</title>
      <link>https://pb33f.io/company/about/</link>
      <pubDate>Sat, 27 May 2023 09:29:48 -0400</pubDate>
      <guid>https://pb33f.io/company/about/</guid>
      <description>What are we? We&amp;rsquo;re Princess Beef Heavy Industries (or as we call it &amp;lsquo;pb33f&amp;rsquo;), we build beautifully designed heavy-duty and enterprise grade software for code hackers and software engineers.&#xA;We&amp;rsquo;re highly experienced misfit engineers, who want to bring the power of big tech, to the rest of us.&#xA;When we say &amp;lsquo;we&amp;rsquo;. It&amp;rsquo;s just &amp;lsquo;me&amp;rsquo; (Quobix). Well, me and my OSS friends, sponsors and contributors.&#xA;Why do we exist? After years of suffering through the use of poorly designed, buggy and slow tools, it was time to do something about it.</description>
    </item>
    <item>
      <title>pb33f manifesto</title>
      <link>https://pb33f.io/company/manifesto/</link>
      <pubDate>Sat, 27 May 2023 09:29:48 -0400</pubDate>
      <guid>https://pb33f.io/company/manifesto/</guid>
      <description>Foundation In 2011, Marc Andreessen said, &amp;ldquo;software is eating the world.&amp;rdquo; In 2023, AWS, Netflix, Shopify, Airbnb, Hashicorp, and a thousand other examples in the market demonstrated this reality.&#xA;The value we can create through software is limitless.&#xA;To develop good software, we need good software Developers, Engineers, Coders, Hackers, Architects or what ever your preferred title is.&#xA;Generally, the tools and materials used to make a product determine the quality of the product outcome.</description>
    </item>
    <item>
      <title>Princess Beef Heavy Industries Discord</title>
      <link>https://pb33f.io/discord/</link>
      <pubDate>Sat, 27 May 2023 09:28:42 -0400</pubDate>
      <guid>https://pb33f.io/discord/</guid>
      <description>no sdsdsd</description>
    </item>
    <item>
      <title>Validating OpenAPI contacts, requests and responses</title>
      <link>https://pb33f.io/libopenapi/validation/</link>
      <pubDate>Sun, 23 Apr 2023 09:37:32 -0400</pubDate>
      <guid>https://pb33f.io/libopenapi/validation/</guid>
      <description>Get libopenapi-validator The first step to validation, is to get the libopenapi-validator module added to the project, validation does not come with libopenapi as a core module.&#xA;libopenapi-validator depends on github.com/santhosh-tekuri/jsonschema as the validation engine for schemas. This dependency is only required for validation and not for the core libopenapi library to operate.&#xA;To avoid having folks import dependencies that are only used for a certain capability, we have kept validation as an opt-in feature, if the host application requires it.</description>
    </item>
    <item>
      <title>Modifying the libopenapi data model</title>
      <link>https://pb33f.io/libopenapi/modifying/</link>
      <pubDate>Wed, 22 Mar 2023 06:20:33 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/modifying/</guid>
      <description>Until v0.7.0 the library was optimized for reading. With the introduction of v0.7.0 the porcelain layer is now Renderable. Any changes made to the high-level can now be captured when &amp;lsquo;rendering&amp;rsquo; the model to YAML or JSON.&#xA;We made a conscious choice to only build this functionality into the OpenAPI 3+ model and NOT the Swagger model. This is because We&amp;rsquo;re not actively developing the Swagger model, and we don&amp;rsquo;t want to encourage people to use it.</description>
    </item>
    <item>
      <title>openapi-changes online demo</title>
      <link>https://pb33f.io/openapi-changes/demo/</link>
      <pubDate>Fri, 03 Feb 2023 09:13:36 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/demo/</guid>
      <description></description>
    </item>
    <item>
      <title>Summary command</title>
      <link>https://pb33f.io/openapi-changes/summary/</link>
      <pubDate>Mon, 30 Jan 2023 10:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/summary/</guid>
      <description>The summary command prints a concise semantic overview of what changed. It is the quickest way to inspect a diff in the terminal or wire openapi-changes into CI.&#xA;Examples:&#xA;openapi-changes summary ./ sample-specs/petstorev3.json openapi-changes summary HEAD~1:openapi.yaml ./openapi.yaml You should see something like this:&#xA;Useful flags Markdown output Use --markdown to render the summary as markdown. This is useful in CI logs, issue comments, and release notes.&#xA;openapi-changes summary --markdown ./ sample-specs/petstorev3.</description>
    </item>
    <item>
      <title>Get started with openapi-changes</title>
      <link>https://pb33f.io/openapi-changes/quickstart/</link>
      <pubDate>Mon, 30 Jan 2023 05:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/quickstart/</guid>
      <description>If you want the fastest path from install to useful output, this page is it.&#xA;1. Install openapi-changes brew install pb33f/taps/openapi-changes If you do not use Homebrew, see the other installation options. 2. Generate an HTML report Use the OpenAPI Petstore fixture hosted on GitHub to generate the interactive report:&#xA;openapi-changes html-report https://github.com/OAI/OpenAPI-Specification/blob/main/examples/v3.0/petstore.yaml This writes report.html into your working directory.&#xA;3. Open the report open report.html 4. Explore the same data in the console openapi-changes console https://github.</description>
    </item>
    <item>
      <title>Command arguments</title>
      <link>https://pb33f.io/openapi-changes/command-arguments/</link>
      <pubDate>Mon, 30 Jan 2023 04:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/command-arguments/</guid>
      <description>openapi-changes exposes seven commands:&#xA;Console Summary Report Markdown Report HTML Report Completion Version The five comparison/reporting commands all use the same doctor-based comparison engine and accept the same input shapes. The utility commands are different:&#xA;completion generates shell completion scripts version prints the raw build version string Supported input modes Local git repository history If the OpenAPI spec lives in a local git repository, pass two arguments:&#xA;the path to the git repository the path to the OpenAPI spec inside the repository If the full path to a spec is /home/pb33f/corp-code/specs/v3/openapi.</description>
    </item>
    <item>
      <title>Console command</title>
      <link>https://pb33f.io/openapi-changes/console/</link>
      <pubDate>Mon, 30 Jan 2023 04:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/console/</guid>
      <description>The console command opens the interactive terminal UI for browsing changes across revisions.&#xA;Examples:&#xA;openapi-changes console ./ sample-specs/petstorev3.json openapi-changes console HEAD~1:openapi.yaml ./openapi.yaml You should see something like this:&#xA;Keyboard controls At any point, press Ctrl-C or q to quit. Escape steps back through the current view and returns focus to the previous panel or closes the current overlay. The console has three main panels:&#xA;commit history semantic change tree diff view The usual flow is:</description>
    </item>
    <item>
      <title>HTML report command</title>
      <link>https://pb33f.io/openapi-changes/html-report/</link>
      <pubDate>Mon, 30 Jan 2023 04:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/html-report/</guid>
      <description>The html-report command generates a self-contained interactive HTML report that works offline. It is the richest way to explore the semantic diff in a browser.&#xA;Examples:&#xA;openapi-changes html-report ./ sample-specs/petstorev3.json &amp;&amp; open report.html openapi-changes html-report HEAD~1:openapi.yaml ./openapi.yaml &amp;&amp; open report.html You should see something like this:&#xA;Useful flags Write to a different file Use --report-file to choose a different output filename.&#xA;openapi-changes html-report --report-file changes.html ./ sample-specs/petstorev3.json Exclude the explorer graph Use --no-explorer if you want a smaller output bundle and do not need the explorer graph tab.</description>
    </item>
    <item>
      <title>JSON report command</title>
      <link>https://pb33f.io/openapi-changes/report/</link>
      <pubDate>Mon, 30 Jan 2023 04:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/report/</guid>
      <description>Use report when you want a machine-readable JSON representation of the detected changes instead of a terminal or browser view.&#xA;Examples:&#xA;openapi-changes report ./ sample-specs/petstorev3.json | jq openapi-changes report HEAD~1:openapi.yaml ./openapi.yaml | jq jq is only used here to pretty-print the JSON. If you do not have it installed, remove the pipe and print the raw JSON directly. You should see something like this:&#xA;When to use report Use report when another tool needs structured JSON.</description>
    </item>
    <item>
      <title>libopenapi Frequently Asked Questions</title>
      <link>https://pb33f.io/libopenapi/faq/</link>
      <pubDate>Sun, 29 Jan 2023 10:15:03 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/faq/</guid>
      <description>In case you have any questions about libopenapi, here are some common questions and answers.&#xA;Q: Does it provide validation? Answer: Yes! We created a new module called the libopenapi-validator.&#xA;Q: Does it support relative and remote references? Answer: Yes. Both are fully configurable and can be turned on or off. Read more about configuring remote and relative references.&#xA;Q: How do you handle complex extension types? Answer: We built a function called UnpackExtensions() to handle it.</description>
    </item>
    <item>
      <title>OpenAPI change detection</title>
      <link>https://pb33f.io/libopenapi/what-changed/</link>
      <pubDate>Sun, 29 Jan 2023 08:36:26 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/what-changed/</guid>
      <description>OpenAPI change detection is a feature of libopenapi that allows you to detect changes between two OpenAPI models. It&amp;rsquo;s the core engine that powers our openapi-changes tool.&#xA;What is a change? A change in libopenapi is defined as&amp;hellip;&#xA;A property or object state was changed in one of the following ways:&#xA;Modified Added Removed A change has a binary breaking state as well. It can either be a non-breaking or a breaking change.</description>
    </item>
    <item>
      <title>Circular References in OpenAPI (v0.12)</title>
      <link>https://pb33f.io/libopenapi/circular-references/v0_12/</link>
      <pubDate>Sun, 29 Jan 2023 07:22:00 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/circular-references/v0_12/</guid>
      <description>[Version 0.12 and below only]&#xA;Since v0.13 the index and resolver architecture has changed significantly, these documents are for v0.12 and below.&#xA;View the latest documentation for circular references&#xA;Circular references are loops in a data structure or Schema that causes loops.&#xA;components: schemas: One: properties: thing: &amp;#34;$ref&amp;#34;: &amp;#34;#/components/schemas/Two&amp;#34; required: - thing Two: description: &amp;#34;test two&amp;#34; properties: testThing: &amp;#34;$ref&amp;#34;: &amp;#34;#/components/schemas/One&amp;#34; This creates a circular reference. One depends Two which depends on One One &amp;ndash;&amp;gt; Two &amp;ndash;&amp;gt; One &amp;ndash;&amp;gt;&amp;hellip; and so on.</description>
    </item>
    <item>
      <title>Resolving OpenAPI specification references (v0.12)</title>
      <link>https://pb33f.io/libopenapi/resolver/v0_12/</link>
      <pubDate>Sun, 29 Jan 2023 05:10:13 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/resolver/v0_12/</guid>
      <description>[Version 0.12 and below only]&#xA;Since v0.13 the index and resolver architecture has changed significantly, these documents are for v0.12 and below.&#xA;View the latest documentation for the resolver&#xA;If you have ever used OpenAPI with golang, you&amp;rsquo;re probably aware of using $ref to reference other objects like Schemas or Parameters that we want to re-use across a specification, or across multiple specifications.&#xA;liboenapi knows how to look up these references and resolve them.</description>
    </item>
    <item>
      <title>Look up anything in an OpenAPI specification (v0.12)</title>
      <link>https://pb33f.io/libopenapi/the-index/v0_12/</link>
      <pubDate>Sat, 28 Jan 2023 09:14:36 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/the-index/v0_12/</guid>
      <description>[Version 0.12 and below only]&#xA;Since v0.13 the index and resolver architecture has changed significantly, these documents are for v0.12 and below.&#xA;View the latest documentation for the index&#xA;When creating a model using libopenapi, under the hood, it creates an index of everything that was located in an OpenAPI specification. There is a considerable amount items it tracks:&#xA;If you&amp;rsquo;re interested in the full list of items that are tracked, look at the index docs and all of the GetXxx methods are laid out with docs (there&amp;rsquo;s no point duplicating it here)</description>
    </item>
    <item>
      <title>Bundling OpenAPI references into a single file</title>
      <link>https://pb33f.io/libopenapi/bundling/</link>
      <pubDate>Sat, 28 Jan 2023 07:59:17 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/bundling/</guid>
      <description>Lots of OpenAPI specifications are exploded out across lots of different files. This is great for maintainability, but not so great for portability.&#xA;Lots of OpenAPI tools do not support exploded / multi-file OpenAPI specifications. Loading and locating references can be tricky, particularly when they are spread across local or remote file systems, so lots of tools just give up on trying to locate references and just ask for a single monolithic file.</description>
    </item>
    <item>
      <title>Handling extensions using libopenapi</title>
      <link>https://pb33f.io/libopenapi/extensions/</link>
      <pubDate>Sat, 28 Jan 2023 07:59:17 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/extensions/</guid>
      <description>OpenAPI extensions (also known as vendor extensions) are properties with a prefix of x- that can be added to many OpenAPI objects throughout the OpenAPI specification.&#xA;Both high-level and low-level models support extensions and are available on both via the Extensions property available on all models that support it.&#xA;Extensions can be anything! This means there could be a scalar value like a string, or it could be a highly complex, deeply nested object.</description>
    </item>
    <item>
      <title>Understanding the libopenapi data model</title>
      <link>https://pb33f.io/libopenapi/model/</link>
      <pubDate>Thu, 26 Jan 2023 06:20:33 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/model/</guid>
      <description>Before getting into the code, let&amp;rsquo;s understand the key differences between OpenAPI versions 3.0 and 3.1.&#xA;Almost JSON Schema OpenAPI 3.0 is loosely based on top of JSON Schema. In the sense that the Schema used by pretty much everything in OpenAPI, is similar to JSON Schema, but isn&amp;rsquo;t actually valid.&#xA;It&amp;rsquo;s very close, but it&amp;rsquo;s not actually valid JSON Schema. There are a number of variations and mis-matches&#xA;Don&amp;rsquo;t get us wrong, it&amp;rsquo;s way better than Swagger.</description>
    </item>
    <item>
      <title>How to parse an OpenAPI 3 specification</title>
      <link>https://pb33f.io/libopenapi/openapi/</link>
      <pubDate>Thu, 26 Jan 2023 06:20:33 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/openapi/</guid>
      <description>Loading a model from a specification There are two steps to creating a model, creating a document and then building a model from that document.&#xA;Creating a new document First we need to create a reference to a Document that we create using NewDocument() and pass in a []byte slice that contains the specification.&#xA;For example:&#xA;// load an OpenAPI 3 specification from bytes petstore, _ := ioutil.ReadFile(&amp;#34;test_specs/petstorev3.json&amp;#34;) // create a new document from specification bytes document, err := libopenapi.</description>
    </item>
    <item>
      <title>Parsing Swagger Specifications</title>
      <link>https://pb33f.io/libopenapi/swagger/</link>
      <pubDate>Thu, 26 Jan 2023 06:19:25 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/swagger/</guid>
      <description>If you&amp;rsquo;re using the v2 model package in libopenapi, please note that it is no longer maintained and will be removed in a future version. DO NOT take a dependency on it. Before we jump into the code, let&amp;rsquo;s get some context around Swagger with a very short history lesson.&#xA;The API wars Swagger (Or now known affectionately as OpenAPI 2) first came onto the scene in 2012, which in tech years would make Swagger look like something built in the early 1900s.</description>
    </item>
    <item>
      <title>About libopenapi</title>
      <link>https://pb33f.io/libopenapi/about/</link>
      <pubDate>Sun, 22 Jan 2023 10:38:08 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/about/</guid>
      <description>If you&amp;rsquo;re looking for an OpenAPI library for golang, you&amp;rsquo;ve probably already discovered the excellent kin-openapi (which is great by the way).&#xA;Except, there is one problem with it, that means we can&amp;rsquo;t use it for our use-cases.&#xA;kin-openapi is lossy.&#xA;When parsing OpenAPI specifications at a low level, kin-openapi runs out of power when you need to know the original line numbers and columns and the original node data exposed.</description>
    </item>
    <item>
      <title>About openapi-changes</title>
      <link>https://pb33f.io/openapi-changes/about/</link>
      <pubDate>Sun, 22 Jan 2023 10:38:08 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/about/</guid>
      <description>openapi-changes grew out of earlier internal tooling we built to explain what changed between API revisions. That first generation was useful, but it was incomplete and too inaccurate to trust.&#xA;So we rebuilt the idea from scratch.&#xA;Why it exists Most tools in this space do one of two things well:&#xA;detect compatibility breakage show raw document diffs openapi-changes combines those concerns. It builds a semantic model of the change set, then renders that same model into multiple different views: terminal summaries, an interactive console, machine-readable JSON, markdown reports, and a self-contained HTML report.</description>
    </item>
    <item>
      <title>Installing libopenapi</title>
      <link>https://pb33f.io/libopenapi/installing/</link>
      <pubDate>Sun, 22 Jan 2023 10:38:08 -0500</pubDate>
      <guid>https://pb33f.io/libopenapi/installing/</guid>
      <description>Grab the latest release of libopenapi.&#xA;go get github.com/pb33f/libopenapi Load an OpenAPI spec into a model import ( &amp;#34;fmt&amp;#34; &amp;#34;github.com/pb33f/libopenapi&amp;#34; &amp;#34;os&amp;#34; ) func readSpec() { // load an OpenAPI 3 specification from bytes petstore, _ := os.ReadFile(&amp;#34;test_specs/petstorev3.json&amp;#34;) // create a new document from specification bytes document, err := libopenapi.NewDocument(petstore) // if anything went wrong, an error is thrown if err != nil { panic(fmt.Sprintf(&amp;#34;cannot create new document: %e&amp;#34;, err)) } // because we know this is a v3 spec, we can build a ready to go model from it.</description>
    </item>
    <item>
      <title>Installing openapi-changes</title>
      <link>https://pb33f.io/openapi-changes/installing/</link>
      <pubDate>Sat, 21 Jan 2023 16:29:04 -0500</pubDate>
      <guid>https://pb33f.io/openapi-changes/installing/</guid>
      <description>Installing with Homebrew The quickest way to install openapi-changes on macOS or Linux is Homebrew:&#xA;brew install pb33f/taps/openapi-changes Installing with npm or yarn If you prefer JavaScript package tooling, install it globally with your preferred package manager:&#xA;yarn global add @pb33f/openapi-changes npm i -g @pb33f/openapi-changes Installing with cURL For CI workflows or environments without a package manager, use the installer script:&#xA;curl -fsSL https://pb33f.io/openapi-changes/install.sh | sh Running with Docker If you do not want to install anything locally, pull the Docker image:</description>
    </item>
    <item>
      <title>Example Newsletter Template</title>
      <link>https://pb33f.io/newsletters/example/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://pb33f.io/newsletters/example/</guid>
      <description>Header Welcome to the pb33f family! We&amp;rsquo;re excited to have you on board.&#xA;A smaller header and things&#xA;you are a moron and more things. and here is a&#xA;things and stuff and stufff and junk and other things go in here, lists and boxes and all kinds. I want to make sure that this looks great! we must ensure greatness.&#xA;and the smallest! boo! NEW!&#xA;Here&amp;rsquo;s our latest feature NEW!</description>
    </item>
  </channel>
</rss>
