Skip to content

Redoc CE 3.0 is available

Redoc CE 3.0 is stable and ready for production. After six weeks in preview, it's now live as latest on npm, the CDN, and Docker.

For step-by-step instructions on upgrading from Redoc 2, check the migration guide.

<script type="module" src="https://cdn.redoc.ly/redoc/v3.x/bundles/redoc.standalone.js"></script>
<redoc spec-url="https://redocly.github.io/redoc/cafe.yaml"></redoc>

The v3.x CDN path points to the latest 3.x release. To pin a specific version, swap it for v3.0.1, or pull the bundle from jsDelivr at https://cdn.jsdelivr.net/npm/redoc@3/bundles/redoc.standalone.js.

If you load Redoc from the `latest` path, read this first

The latest CDN URL and Docker image now point to Redoc 3. Because the new bundle is an ES module, pages loading the latest script with a classic <script src> tag fail to render. To stay on Redoc 2 until you're ready to migrate, pin your version to https://cdn.redoc.ly/redoc/v2.x/bundles/redoc.standalone.js for the script, or redocly/redoc:v2.5.3 for Docker.

Redoc 2 and Redoc 3, side by side

Redoc 2Redoc 3
SpecificationsOpenAPI 2.0, 3.0, 3.1Adds OpenAPI 3.2, AsyncAPI 2.x and 3.x, GraphQL SDL, and MCP via x-mcp
Specification detectionOpenAPI onlyAutomatic from the file, no setting needed
ThemingNested JavaScript theme objectCSS custom properties, scoped with :root.light and :root.dark
Dark modeNoneBuilt in, follows the system preference
Options40+About 20
Large descriptionsEntire document rendered upfrontOnly what's near the viewport
SearchOptional, operation titles onlyAlways on, covers fields, parameters, and response codes
LinkingScroll positions on one long pageA route per operation, tool, and schema; hash or history routing
BundleUMD, global Redoc objectESM, import { init } from the bundle
Minimum versionsReact 16.8, Node 6.9React 18.3, Node 22

What's new in 3.0

Any specification, one renderer

Redoc automatically detects the specification type based on the file. Documents with an asyncapi field are parsed as AsyncAPI and swagger descriptions are converted to OpenAPI 3 on load. .graphql or .gql URLs are treated as GraphQL schemas. Everything else defaults to OpenAPI. There is no manual setting to override this, and each page renders a single description. To document multiple APIs, either create a separate page for each description and link them together, or use Realm to unify them into a single developer portal.

<redoc spec-url="https://redocly.github.io/redoc/specs/cafe-asyncapi-amqp.yaml"></redoc>
<redoc spec-url="https://redocly.github.io/redoc/specs/cafe.graphql"></redoc>

Search is now always enabled and indexes the entire description, not just operation titles. The index includes schema fields, parameters, and response codes. Because the new engine handles indexing without affecting performance, the disableSearch option has been removed.

MCP servers, documented

If your API also exposes an MCP server, you can document both in one place. Add an x-mcp section to the root of your OpenAPI description. Redoc gives your server's tools, resources, and prompts their own pages. Input schemas and generated examples are grouped by tag right alongside your REST operations. It also adds connect buttons to the page header so readers can add the server to their MCP client directly from the docs.

You don't have to write the x-mcp section by hand, either: run the introspect-mcp command against a live server and it generates the description for you. All existing Redoc 2 vendor extensions continue to work as before.

Copy for LLM and Open in

Every page header includes Copy for LLM, Open in Claude, and Open in ChatGPT buttons to make it easier to use your docs with AI assistants.

Copy for LLM is always available and grabs just the relevant slice of the description for the current page, along with the API title, page title, and a link to the full file. The entire text is formatted and ready to paste into a chat. Open in Claude and Open in ChatGPT go a step further and launch a new chat with that context pre-filled in the prompt, or pass a link to the full description if the slice is too large to fit in a URL. These two actions show up automatically whenever Redoc knows the description file's URL via spec-url, specUrl, or downloadUrls.

What changed for existing pages

init is a named export

Because we changed the standalone bundle to an ES module, the global Redoc object on window is deprecated. Instead, import init directly from the bundle and pass your description to it (as a URL, a parsed JavaScript object, a JSON string, or a GraphQL SDL string), along with an options object and an optional target element:

<div id="redoc-container"></div>
<script type="module">
  import { init } from 'https://cdn.redoc.ly/redoc/v3.x/bundles/redoc.standalone.js';

  init(
    'https://redocly.github.io/redoc/cafe.yaml',
    { sortRequiredPropsFirst: true },
    document.getElementById('redoc-container'),
  );
</script>

We recommend this approach for Redoc in Vue, Angular, or any other non-React framework: wait for your component to mount, then call init on a container element. Check out the frameworks guide for ready-to-use examples in Vue, Angular, and Next.js.

Redocly CLI: build-docs renders Redoc 3

Starting with Redocly CLI 2.70.0, the build-docs command renders Redoc 3 exclusively and supports AsyncAPI and GraphQL alongside OpenAPI. It also introduces two new flags:

  • --inlineBundle embeds the JavaScript bundle directly into the output HTML so your docs work completely offline.
  • --openapi, --asyncapi, and --graphql let you pass configuration options for each specification type from the command line. --theme.openapi and --disableGoogleFont are removed: build-docs stops with an error that points to --openapi.

In redocly.yaml, options live under a top-level key matching the specification format, so a single config file can handle all three:

redocly.yaml
openapi:
  schemaDefinitionsTagName: Schemas
  sortRequiredPropsFirst: true
asyncapi:
  jsonSamplesDepth: 4
graphql:
  showBuiltInScalars: true

If you use a custom --template file that still loads the Redoc 2 <script> tag or calls the global Redoc object, update it to use <script type="module"> and import init as shown in the preceding snippet. The theme.openapi block in redocly.yaml is removed. Custom styling happens through CSS variables, which you can include via a custom HTML template.

Keep the Redoc 2 output

To stay with Redoc 2 styling, use the archived v1 line of Redocly CLI, which stays on Redoc 2:

npx @redocly/cli@v1-archive build-docs openapi.yaml

The v1 archive works indefinitely but only receives critical fixes.

What happens to Redoc 2

Redoc 2.x continues to receive security patches and critical bug fixes, though new feature development has moved exclusively to Redoc 3. If the Node 22 requirement blocks you from upgrading right away, you can stay on the 2.x release line until you're ready. In this case, make sure to pin v2.x in your CDN script tag or Docker image, since latest now points to Redoc 3.

Try it and tell us

Redoc CE 3.0 is open source under the MIT license. Because it's built from the same codebase as the engine in Redocly's hosted products, the open-source release stays in sync and won't fall behind again. We're also planning support for additional formats like OpenRPC and gRPC. Thanks to the new architecture, each additional format only requires an adapter rather than a ground-up rewrite.

If something breaks, or the upgrade trips on a case this post didn't cover, feel free to open an issue in our repo.

Latest from our blog

Code mode for MCP: up to 80% lower LLM c...

Redocly's MCP server lets AI agents combine documentation calls in a script and return only what matters. Less context to process. Lower LLM costs.

Stop reading the diff. Review the assump...

Code review is the bottleneck in most teams, and it does not have to be. Machines can read the lines. Humans need to read the premise, and they need to read it before the code exists.

Generate OpenAPI from real traffic (with...

The new generate-spec command infers an OpenAPI description from recorded HTTP traffic - with AI refinement.