A modern, React-based OpenAPI specification viewer with support for OpenAPI 3.0, 3.1, and 3.2.
- ✅ Multi-version Support: Automatic detection and rendering of OpenAPI 3.0.x, 3.1.x, and 3.2.x specifications
- ✅ Visual Version Badges: Color-coded badges (Blue for 3.0, Purple for 3.1, Green for 3.2)
- ✅ File Upload: Drag-and-drop support for JSON and YAML files
- ✅ Search & Filter: Real-time search across endpoints with method filtering
- ✅ Schema Viewer: Interactive schema visualization with type arrays and nullable support
- ✅ Colorized Methods: Distinct colors for all HTTP methods including QUERY (3.2)
- ✅ $self Field: Base URI resolution for multi-document OADs
- ✅ Named Servers: Server identification with name field
- ✅ QUERY Method: Support for draft-ietf-httpbis-safe-method-w-body-08
- ✅ Tag Hierarchies: Organize tags with kind, parent, and summary
- ✅ Security Deprecation: Mark security schemes as deprecated
- ✅ OAuth2 Device Flow: Device authorization grant (RFC8628)
- ✅ OAuth2 Metadata: OAuth2 authorization server metadata URLs (RFC8414)
- ✅ Querystring Parameters: New parameter location for structured queries
- ✅ Mutual TLS: Explicit mutualTLS security scheme type
- ✅ Type Arrays:
["string", "null"]for nullable types - ✅ Webhooks: Event-driven API support
- ✅ JSON Schema 2020-12: Full JSON Schema compatibility
- ✅ Info Summary: Additional summary field in API info
- ✅ SPDX Identifiers: License identification with SPDX IDs
- ✅ Complete 3.0 Compatibility: Full support for OpenAPI 3.0.x specifications
- React 19.1.1 - Latest React with concurrent features
- TypeScript 5.9.3 - Strict type checking
- Vite 7.1.7 - Lightning-fast build tool with HMR
- Tailwind CSS - Utility-first styling
- pnpm - Fast, disk-efficient package manager
- Node.js 18+
- pnpm (install via
npm install -g pnpm)
pnpm installpnpm devStarts the development server on http://localhost:5173
pnpm buildCreates optimized production build in dist/
pnpm previewPreview the production build locally
pnpm lintRun ESLint to check code quality
- Start the app: Run
pnpm dev - Upload a spec: Drag-and-drop an OpenAPI JSON/YAML file or click "Choose File"
- Browse: View API info, search endpoints, and explore schemas
- Version detection: The app automatically detects 3.0, 3.1, or 3.2 and displays the appropriate badge
Try these sample specifications in public/samples/:
petstore.json- OpenAPI 3.0 examplepetstore-3.2.json- OpenAPI 3.2 example with all new features
- OpenAPI 3.2 Support Guide - Comprehensive 3.2 feature documentation
- Version Comparison - Visual guide comparing 3.0, 3.1, and 3.2
- HTTP Method Colors - Color coding reference
src/
├── components/
│ ├── api-info/ # API information display
│ ├── common/ # Reusable components (badges, search, uploader)
│ ├── endpoint-list/ # Endpoint rendering
│ └── schema-viewer/ # Schema visualization
├── context/ # React context (OpenAPI state)
├── hooks/ # Custom hooks (parser)
├── lib/ # Core libraries (validator, YAML parser)
├── types/ # TypeScript definitions
└── utils/ # Helper functions
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel (or oxc when used in rolldown-vite) for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
The React Compiler is not enabled on this template because of its impact on dev & build performances. To add it, see this documentation.
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from "eslint-plugin-react-x";
import reactDom from "eslint-plugin-react-dom";
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs["recommended-typescript"],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);