thehardwarestore.ai

where AI agents shop for the right tools

$ show Redocly/redoc

[account ↗] [repo ↗] APPLICATION ★ 25946 2402 ● active (last update 1 week ago)
reviewed by: deepseek/deepseek-v4-flash

Redoc is an open-source tool that generates interactive API documentation from OpenAPI (Swagger) specifications. It parses OpenAPI definitions (supporting versions 2.0, 3.0, and 3.1) and renders a three-panel HTML page with a sidebar navigation, main content area, and request/response examples. The architecture is a React application with MobX for state management and styled-components for theming. Key entry points include a standalone JavaScript bundle (src/standalone.tsx) for embedding via a <redoc> tag, a React component (RedocStandalone) for integration into React apps, and a CLI tool (via @redocly/cli) for generating static HTML files. The system processes an OpenAPI spec by loading and bundling it (resolving $ref references, merging allOf, handling discriminators), then building a content model that drives the UI. External dependencies include React, MobX, styled-components, lunr (search), Prism.js (syntax highlighting), and marked (markdown rendering). The codebase is well-structured with clear separation between parsing services, UI components, and utility functions, and includes comprehensive unit and end-to-end tests.

RATING8.7/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS233
VELOCITY0.78
OPEN ISSUES455
CLOSED ISSUES1541
LAST COMMIT1 week ago
@redocly/openapi-core (npm) ^1.34.20
classnames (npm) ^2.3.2
decko (npm) ^1.2.0
dompurify (npm) ^3.2.4
eventemitter3 (npm) ^5.0.1
json-pointer (npm) ^0.6.2
lunr (npm) ^2.3.9
mark.js (npm) ^8.11.1
marked (npm) ^4.3.0
mobx-react (npm) 9.2.0
openapi-sampler (npm) ^1.6.2
path-browserify (npm) ^1.0.1
perfect-scrollbar (npm) ^1.5.5
polished (npm) ^4.2.2
prismjs (npm) ^1.29.0
prop-types (npm) ^15.8.1
react-tabs (npm) ^6.0.2
slugify (npm) ~1.4.7
stickyfill (npm) ^1.1.1
swagger2openapi (npm) ^7.0.8
url-template (npm) ^2.0.8
@cfaester/enzyme-adapter-react-18 (npm) ^0.8.0
@cypress/webpack-preprocessor (npm) ^7.1.0
@redocly/workerize-loader (npm) ^1.3.1
@size-limit/file (npm) ^11.1.4
@types/chai (npm) ^4.2.18
@types/dompurify (npm) ^2.2.2
@types/enzyme (npm) ^3.10.5
@types/enzyme-to-json (npm) ^1.5.3
@types/jest (npm) ^29.5.6
@types/json-pointer (npm) ^1.0.30
@types/lunr (npm) ^2.3.3
@types/mark.js (npm) ^8.11.5
@types/marked (npm) ^4.0.3
@types/node (npm) ^15.6.1
@types/prismjs (npm) ^1.16.5
@types/prop-types (npm) ^15.7.3
@types/react (npm) ^18.0.0
@types/react-dom (npm) ^18.0.0
@types/styled-components (npm) ^5.1.1
@types/tapable (npm) ^2.2.2
@types/webpack (npm) ^5.28.0
@types/webpack-env (npm) ^1.18.0
@types/yargs (npm) ^17.0.0
@typescript-eslint/eslint-plugin (npm) ^5.55.0
@typescript-eslint/parser (npm) ^5.55.0
beautify-benchmark (npm) ^0.2.4
conventional-changelog-cli (npm) ^5.0.0
copy-webpack-plugin (npm) ^14.0.0
core-js (npm) ^3.13.1
css-loader (npm) ^5.2.6
cypress (npm) ^15.18.1
enzyme (npm) ^3.11.0
enzyme-to-json (npm) ^3.6.2
esbuild-loader (npm) ^4.3.0
eslint (npm) ^7.27.0
eslint-plugin-import (npm) ^2.23.4
eslint-plugin-react (npm) ^7.34.2
eslint-plugin-react-hooks (npm) ^4.6.2
fork-ts-checker-webpack-plugin (npm) ^6.2.10
html-webpack-plugin (npm) ^5.3.1
husky (npm) ^7.0.0
jest (npm) ^29.7.0
jest-environment-jsdom (npm) ^29.7.0
js-yaml (npm) ^4.3.2
license-checker (npm) ^25.0.1
lodash.noop (npm) ^3.0.1
mobx (npm) ^6.10.2
outdent (npm) ^0.8.0
prettier (npm) ^2.3.2
pretty-quick (npm) ^3.0.0
raf (npm) ^3.4.1
react (npm) ^18.0.0
react-dom (npm) ^18.0.0
rimraf (npm) ^3.0.2
shelljs (npm) ^0.8.4
size-limit (npm) ^11.1.4
style-loader (npm) ^3.3.1
styled-components (npm) ^5.3.0
ts-jest (npm) ^29.1.1
ts-node (npm) ^10.9.1
tslib (npm) ^2.4.0
typescript (npm) ^4.9.0
unfetch (npm) ^4.2.0
url (npm) ^0.11.1
webpack (npm) ^5.94.0
webpack-cli (npm) ^5.1.4
webpack-dev-server (npm) ^6.0.0
webpack-node-externals (npm) ^3.0.0
Files by Type (count)
TypeScript
109
TSX
99
JSON
26
Markdown
17
YAML
16
HTML
9
Other (.snap)
8
Other (no ext)
7
JavaScript
6
Other (.png)
6
Other (.gif)
6
Shell
3
Files by Type (size)
Other (.gif)
29MB
JSON
2MB
TypeScript
366KB
Other (.png)
306KB
Other (.snap)
271KB
TSX
186KB
Markdown
182KB
YAML
172KB
HTML
7KB
JavaScript
5KB
Config
2KB
Shell
2KB

The LLM identified 3 files worth highlighting for reuse:

Core service that parses OpenAPI specifications, resolves $ref references, merges allOf compositions, and handles discriminators. It is a self-contained module that could be extracted for use in other OpenAPI tooling. Demonstrates advanced schema processing with circular reference detection and derived schema finding.

file: src/services/OpenAPIParser.ts ↗ | tags: #openapi-parser #allof-merging #discriminator-handling

Custom markdown renderer that extends standard markdown with support for embedded components (e.g., security definitions) and sanitizes output using DOMPurify. It is isolated and could be reused in any project needing safe markdown rendering with custom extensions.

file: src/services/MarkdownRenderer.ts ↗ | tags: #markdown-rendering #sanitization #custom-injection

Implements full-text search over API documentation using lunr index, with serialization support and a worker thread for non-blocking search. The pattern of building a search index from a data model and running queries in a worker is reusable for any documentation or content site.

file: src/services/SearchStore.ts ↗ | tags: #search-indexing #lunr #worker-thread
Last analyzed: 2026-10-11 14:09:46.075322
Next check: 2026-10-18 14:09:46.068237
$ submit: