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.
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 | Redoc 3 | |
|---|---|---|
| Specifications | OpenAPI 2.0, 3.0, 3.1 | Adds OpenAPI 3.2, AsyncAPI 2.x and 3.x, GraphQL SDL, and MCP via x-mcp |
| Specification detection | OpenAPI only | Automatic from the file, no setting needed |
| Theming | Nested JavaScript theme object | CSS custom properties, scoped with :root.light and :root.dark |
| Dark mode | None | Built in, follows the system preference |
| Options | 40+ | About 20 |
| Large descriptions | Entire document rendered upfront | Only what's near the viewport |
| Search | Optional, operation titles only | Always on, covers fields, parameters, and response codes |
| Linking | Scroll positions on one long page | A route per operation, tool, and schema; hash or history routing |
| Bundle | UMD, global Redoc object | ESM, import { init } from the bundle |
| Minimum versions | React 16.8, Node 6.9 | React 18.3, Node 22 |
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.
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.
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.
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.
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:
--inlineBundleembeds the JavaScript bundle directly into the output HTML so your docs work completely offline.--openapi,--asyncapi, and--graphqllet you pass configuration options for each specification type from the command line.--theme.openapiand--disableGoogleFontare 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:
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.
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.
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.
- The Cafe API demo - the same description in OpenAPI, AsyncAPI, and GraphQL.
- Redoc CE documentation - quickstart, deployment guides, and configuration.
- Migration guide from Redoc 2 - every page, API, and option change in one place.
- Redoc CE on GitHub - source, issues, and the changelog.
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.
