The API repos we run into keep showing the same setup. The spec starts with swagger: "2.0". Swagger UI renders it in the browser at /openapi. In the Confluence wiki the same file gets called a "Swagger file" on one page and an "OpenAPI spec" on the next. Sooner or later, someone in standup asks whether Swagger is still a reasonable choice in 2026.

We see this same setup in banks, industrial groups, and government agencies — across very different tech stacks and maturity levels. The confusion holds steady, and it comes down to one concrete cause.

A specification that used to be called Swagger was renamed to OpenAPI in 2015. The tools kept the old brand. Both names have been running side by side ever since, often in the same line of code.

Google "OpenAPI vs Swagger" today and most of the results are stuck halfway between a history lesson and an unfinished version comparison.

Hinweis

Swagger is no longer a standard. It’s a toolchain (Swagger UI, Swagger Codegen, SwaggerHub). The specification that used to be called the "Swagger Specification" was renamed to the OpenAPI Specification in 2015. When somebody says "Swagger" in 2026, they usually mean the tools or the old Swagger 2.0 format.

A short history from Swagger to the OpenAPI Specification

Tony Tam published the first version of the Swagger Specification in 2011, embedded in the Wordnik backend, which at the time had far more API traffic than most dictionary platforms. The spec was designed to be pragmatic and machine-readable. It spread quickly because it solved a problem everyone had and nobody was describing in a structured way.

Swagger 2.0 appeared in 2014 and became the de facto standard for API descriptions in short order. In November 2015, SmartBear handed the specification over to the Linux Foundation. That move gave rise to the OpenAPI Initiative, an open consortium that has stewarded the standard ever since. The specification itself was renamed to the OpenAPI Specification in 2016, while the Swagger brand stayed with SmartBear and shifted to refer to the family of tools.

The OpenAPI Initiative drew in companies that, taken together, are responsible for a large share of global API traffic. Google, Microsoft, IBM, Salesforce, PayPal, and Atlassian were among the founding and early premier members; Adobe, Intuit, and Oracle joined later. That broad backing is what kept the specification from depending on a single vendor and is why later iterations have stayed vendor-neutral.

The first major release under the new name was OpenAPI 3.0.0 in July 2017. It wasn’t a small update. It was a structural rework that corrected many of the earlier design decisions. Patch versions 3.0.1, 3.0.2, and 3.0.3 followed in the years after. February 2021 brought OpenAPI 3.1.0 with full JSON Schema compatibility, webhooks, and explicit support for null values. September 2025 added OpenAPI 3.2.0 with hierarchical tags, the QUERY method, and native support for streaming APIs. The version remains backward-compatible with 3.0 and 3.1.

Today both names continue to live in parallel. The specification is called OpenAPI, the tools are called Swagger, and both often turn up in the same line of code.

What’s what today. A map of the terms

In 2026, "Swagger" usually refers to a tool, and "OpenAPI" refers to the specification that used to be called Swagger. The overview below pins the terms down.

The dual vocabulary has two roots. SmartBear still owns the Swagger brand and actively develops tools under it, primarily Swagger UI and SwaggerHub. The OpenAPI Initiative carries the standard but has no tooling portfolio of its own. On top of that, there’s the simple matter of language habit. Anyone who’s been writing Swagger files for ten years rarely switches overnight to calling them OpenAPI files.

"Swagger" in 2026OpenAPI in 2026
Swagger UI. The renderer that displays OpenAPI documents in the browser.OpenAPI Specification 3.x. The official format for API descriptions.
Swagger Codegen. Generator for client and server code, by now legacy.OpenAPI Initiative. The organization under the Linux Foundation that stewards the standard.
SwaggerHub. Commercial SaaS product from SmartBear.OpenAPI Document. The YAML or JSON file containing the API description.
Swagger 2.0. The old spec format, identical to OpenAPI 2.0.OpenAPI 3.0, 3.1, and 3.2. The current versions.

Swagger today is a brand. OpenAPI is an open standard. When somebody says "Swagger," they usually mean a tool from the SmartBear family or the old 2.0 spec format. "OpenAPI" refers to the format itself, the YAML or JSON file used to describe modern APIs.

What changed between the versions

Four version jumps matter in practice. Swagger 2.0 (2014) made the format the de facto standard. OpenAPI 3.0 (2017) cleaned it up structurally. OpenAPI 3.1 (2021) brought JSON Schema compatibility into line. OpenAPI 3.2 (2025) added hierarchical tags, the QUERY method, and streaming support. How much each jump affects you comes down to your existing tooling.

The structural rework from Swagger 2.0 to OpenAPI 3.0

The move from 2.0 to 3.0 changes the topology of the spec. Server definitions, schemas, security mechanisms, and request bodies were reorganized, not just renamed.

yaml
# Swagger 2.0
swagger: "2.0"
host: api.example.com
basePath: /v1
schemes: [https]
definitions:
  User:
    type: object
    properties:
      id:
        type: integer


# OpenAPI 3.0
openapi: "3.0.3"
servers:
  - url: https://api.example.com/v1
paths:
  /users:
    post:
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User'
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
  securitySchemes:
    # securityDefinitions moves here
    bearerAuth:
      type: http
      scheme: bearer

The important renames cluster around four spots. host, basePath, and schemes are now bundled into servers. definitions is now components.schemas. consumes and produces are no longer set globally but per operation, through requestBody and responses.content. securityDefinitions is now components.securitySchemes.

Beobachtung aus der Praxis

We’ve worked on migration projects where the structural changes weren’t the actual problem. The hurdle was almost always the tooling. Code generators that were still pinned internally to 2.0 produced subtly different SDKs after conversion. The spec was correct, the generated client compiled cleanly, and the behavior only diverged at runtime.

OpenAPI 3.1 adds JSON Schema, webhooks, and null types

3.1 is a smaller jump than the one before it, but consequential in the right places. Three changes matter.

A minimal webhook in OpenAPI 3.1 looks like this.

yaml
webhooks:
  newOrder:
    post:
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Order'
      responses:
        '200':
          description: Order acknowledged

Before 3.1, this use case had to be modeled either as a callback inside a regular operation or moved out into a separate AsyncAPI specification. Both routes still work. The webhook block is the direct alternative for pure event APIs.

Which version when

The question comes up in two situations. For new APIs, as a choice between OpenAPI 3.1 and 3.2. For existing systems, usually as a migration question from 2.0 or 3.0.

Praxis-Tipp

  • New APIs. OpenAPI 3.1 is the pragmatic default because tooling is broadly established. OpenAPI 3.2 pays off when streaming, hierarchical tags, or the QUERY method are actually needed and the tooling supports both.
  • Existing on OpenAPI 3.0. No need to upgrade. 3.0 is well established and broadly supported by tooling.
  • Existing on OpenAPI 3.1. No urgent reason to jump to 3.2, since 3.2 is backward-compatible. The jump pays off when new 3.2 features are actually needed.
  • Existing on Swagger 2.0. Plan migration in the medium term. New tools test 3.x first, and the maintenance footprint on 2.0 has been thinning out for years.

The realistic window for a 2.0 migration tends to be twelve to eighteen months in a mid-sized API landscape with twenty to fifty active APIs. The exact migration date matters less than the cutoff date after which new APIs are only created in 3.x. Without that cutoff, the existing footprint keeps quietly drifting along on 2.0, and the migration curve flattens out instead of declining.

Migrating from Swagger 2.0 to OpenAPI 3.x

A migration from Swagger 2.0 to OpenAPI 3.0 usually wraps up in a few days. The work rarely sits in the structural changes. It sits in the three or four sticking points that show up in nearly every codebase.

Five spots tend to change. The server definition moves out of host, basePath, and schemes into a servers block. Schemas move out of definitions into components.schemas. Request bodies are no longer modeled as parameters with in: body, but in requestBody with a content mapping. Responses get a content layer with media types instead of being defined globally through produces. Security mechanisms move out of securityDefinitions into components.securitySchemes.

A typical pain point shows up around file uploads. In Swagger 2.0, that’s a simple parameter. In OpenAPI 3.0, it’s a full requestBody.

yaml
# Swagger 2.0 (file upload as formData parameter)
parameters:
  - name: avatar
    in: formData
    type: file


# OpenAPI 3.0 (file upload as requestBody)
requestBody:
  content:
    multipart/form-data:
      schema:
        type: object
        properties:
          avatar:
            type: string
            format: binary
Achtung

Three difficulties repeat themselves in nearly every migration.

  • Data types. File uploads in 2.0 often ran through type: file as a parameter. That’s gone in 3.0. File uploads now go through requestBody with multipart/form-data and format: binary.
  • $ref resolution. OpenAPI 3.0 is stricter about external references. Tools that were lenient in 2.0 suddenly flag errors on circular or relative references in 3.0.
  • examples. Instead of a global example field, 3.0 has an examples block with named examples. Older tools often don’t render this block correctly, which leads to empty example sections in the generated docs.

Two tools have established themselves for the conversion itself. swagger2openapi as a CLI is the direct standard option. OpenAPI Generator can convert internally during SDK generation, which is useful when the spec primarily serves as generator input.

If you’re aiming straight for 3.1 or 3.2 in the same migration, you’ve already done the 3.0 step. The jump from 3.0 through 3.1 to 3.2 is much smaller than the jump from 2.0 to 3.0 and remains mostly schema work, since 3.1 and 3.2 are backward-compatible.

Hinweis

A full migration guide with tool comparison, automated conversion, and platform setup is coming as a separate article. See Convert Swagger 2.0 to OpenAPI 3.0.

Is Swagger still relevant in 2026?

The question comes up mostly when teams re-evaluate spec tooling or when an existing 2.0 codebase heads into a larger modernization. Four aspects show up in this discussion over and over: Swagger UI, Swagger Codegen, the Swagger 2.0 format itself, and SwaggerHub as a commercial product.

Is Swagger UI still in use?

Yes. Swagger UI is effectively the default renderer for OpenAPI documents and runs on the order of hundreds of thousands of publicly accessible repositories and API endpoints. Spring REST, FastAPI, Express, ASP.NET Core, Flask, and Quarkus ship Swagger UI integration either out of the box or as a one-line setup. Competitors like Redoc and Scalar are gaining ground primarily in branding-driven developer portals where visual presentation is itself a product feature. In day-to-day technical work, where the goal is to render a spec quickly, they don’t actually replace Swagger UI.

Is Swagger Codegen still a reasonable choice?

Conditionally. Swagger Codegen has been largely superseded by OpenAPI Generator over the past few years. OpenAPI Generator emerged in 2018 as a community fork and has been maintained considerably more actively since, with over fifty language and framework templates and several releases per year. New projects usually start directly with OpenAPI Generator. Existing setups on Swagger Codegen continue to run, but the maintenance gap widens year over year, and new language targets show up almost exclusively in the Generator fork.

Should you still use Swagger 2.0?

For new APIs, no. Swagger 2.0 hasn’t been developed since 2014. For existing systems, there’s no acute migration pressure, but a medium-term migration to 3.x should be on the roadmap. New tools, new linters, and new generator templates test 3.x first; older 2.0 paths thin out continuously. If you’re keeping 2.0 on life support, document at minimum that it’s a legacy format and that no new specs go in it. Otherwise, two years from now you’ll have a 2.0 extension nobody wants to migrate.

What about SwaggerHub?

SwaggerHub is a commercial product from SmartBear, not an open standard. It’s one option among several API platforms. Other options include api-portal.io, Stoplight, Postman, and Bump.sh. The choice depends on factors like multi-tenant isolation, governance model, CI/CD integration, hosting model (SaaS or on-premises), and commercial model. SwaggerHub sits close to the Swagger ecosystem and pays off mainly when a team already works with Swagger UI and Swagger Editor. Other platforms cover more of the full API lifecycle, from spec management through linting to consumer onboarding.

How api-portal.io handles OpenAPI and Swagger

api-portal.io supports OpenAPI 3.x and Swagger 2.0 in parallel. On import, the platform detects the format automatically and converts Swagger 2.0 to OpenAPI 3.x as needed. The API Explorer renders both formats in a unified interface, and the API Linter checks both against the same style guide.

The API Explorer shows how both spec formats are presented.