Swagger Editor Documentation
This page is about the current Swagger Editor. If you’re looking for Swagger Editor Next (beta) (otherwise known as SwaggerEditor@5) docs, visit Swagger
Editor Next (beta).
The Swagger Editor is an open source editor to design, define and document HTTP (RESTful) APIs in the OpenAPI Specification. The source code for the Swagger Editor can be found in GitHub.
GitHub: https://github.com/swagger-api/swagger-editor
Only Swagger Editor Next supports OpenAPI 3.1.0. SwaggerEditor@4 will not receive OpenAPI 3.1.0 support and is considered legacy at this point. The plan is to continually migrate fully to SwaggerEditor@5 and deprecate the SwaggerEditor@4 in the future.
Using the Editor on the Web
Section titled “Using the Editor on the Web”The Editor works in any web browser, and can be hosted locally or accessed from the web.
Running locally
Section titled “Running locally”Prerequisites
Section titled “Prerequisites”- git, any version
- Node.js >=20.3.0 and npm >=9.6.7 are the minimum required versions that this repo runs on, but we always recommend using the latest version of Node.js.
$ npm i --legacy-peer-depsIf you have Node.js and npm installed, you can run npm start to spin up a static server.
Otherwise, you can open index.html directly from your filesystem in your browser.
If you’d like to make code changes to Swagger Editor, you can start up a Webpack hot-reloading dev server via npm run dev.
Browser support
Section titled “Browser support”Swagger Editor works in the latest versions of Chrome, Safari, Firefox, and Edge.
Known Issues
Section titled “Known Issues”To help with the migration, here are the currently known issues with 3.X. This list will update regularly, and will not include features that were not implemented in previous versions.
- Everything listed in Swagger UI’s Known Issues.
- The integration with the codegen is still missing.
Helpful scripts
Section titled “Helpful scripts”Any of the scripts below can be run by typing npm run <script name> in the project’s root directory.
Developing
Section titled “Developing”| Script name | Description |
|---|---|
dev | Spawn a hot-reloading dev server on port 3200. |
deps-check | Generate a size and licensing report on Swagger Editors’s dependencies. |
lint | Report ESLint style errors and warnings. |
lint-errors | Report ESLint style errors, without warnings. |
lint-fix | Attempt to fix style errors automatically. |
watch | Rebuild the core files in /dist when the source code changes. Useful for npm link. |
Building
Section titled “Building”| Script name | Description |
|---|---|
build | Build a new set of JS and CSS assets, and output them to /dist. |
build:bundle | Build swagger-editor-bundle.js only (commonJS). |
build:core | Build swagger-editor.(js|css) only (commonJS). |
build:standalone | Build swagger-editor-standalone-preset.js only (commonJS). |
build:stylesheets | Build swagger-editor.css only. |
build:es:bundle | Build swagger-editor-es-bundle.js only (es2015). |
build:es:bundle:core | Build swagger-editor-es-bundle-core.js only (es2015). |
Testing
Section titled “Testing”| Script name | Description |
|---|---|
test | Run unit tests in Node, run Cypress end-to-end tests, and run ESLint in errors-only mode. |
test:unit-mocha | Run Mocha-based unit tests in Node. |
test:unit-jest | Run Jest-based unit tests in Node. |
e2e | Run end-to-end browser tests with Cypress. |
lint | Run ESLint test |
test:artifact | Run list of bundle artifact tests in Jest |
test:artifact:umd:bundle | Run unit test that confirms swagger-editor-bundle exports as a Function |
test:artifact:es:bundle | Run unit test that confirms swagger-editor-es-bundle exports as a Function |
test:artifact:es:bundle:core | Run unit test that confirms swagger-editor-es-bundle-core exports as a Function |
Docker
Section titled “Docker”Running the image from DockerHub
Section titled “Running the image from DockerHub”There is a docker image published in docker.swagger.io registry.
To use this, run the following:
docker pull docker.swagger.io/swaggerapi/swagger-editordocker run -d -p 80:8080 docker.swagger.io/swaggerapi/swagger-editorThis will run Swagger Editor (in detached mode) on port 80 on your machine, so you can open it by navigating to http://localhost in your browser.
- You can provide a URL pointing to an API definition (may not be available if some security policies such as CSP or CORS are enforced):
docker run -d -p 80:8080 -e URL="https://petstore3.swagger.io/api/v3/openapi.json" docker.swagger.io/swaggerapi/swagger-editor- You can provide your own
jsonoryamldefinition file from your local host:
docker run -d -p 80:8080 -v $(pwd):/tmp -e SWAGGER_FILE=/tmp/swagger.json docker.swagger.io/swaggerapi/swagger-editorNote: When both URL and SWAGGER_FILE environment variables are set, URL has priority and SWAGGER_FILE is ignored.
- You can specify a different base url via
BASE_URLvariable for accessing the application - for example if you want the application to be available athttp://localhost/swagger-editor/:
docker run -d -p 80:8080 -e BASE_URL=/swagger-editor docker.swagger.io/swaggerapi/swagger-editor- You can specify a different port via
PORTvariable for accessing the application, default is8080.
docker run -d -p 80:80 -e PORT=80 docker.swagger.io/swaggerapi/swagger-editor- You can specify Google Tag Manager ID via
GTMvariable for tracking the usage of the swagger-editor.
docker run -d -p 80:8080 -e GTM=GTM-XXXXXX docker.swagger.io/swaggerapi/swagger-editorYou can also customize the different endpoints used by the Swagger Editor with the following environment variables. For instance, this can be useful if you have your own Swagger generator server:
| Environment variable | Default value |
|---|---|
URL_SWAGGER2_GENERATOR | https://generator.swagger.io/api/swagger.json |
URL_OAS3_GENERATOR | https://generator3.swagger.io/openapi.json |
URL_SWAGGER2_CONVERTER | https://converter.swagger.io/api/convert |
If you want to run the Swagger Editor locally without the Codegen features (Generate Server and Generate Client) you can set the above environment variables to null (URL_SWAGGER2_CONVERTER=null).
Building and running an image locally
Section titled “Building and running an image locally”To build and run a docker image with the code checked out on your machine, run the following from the root directory of the project:
# Install npm packages (if needed)npm install
# Build the appnpm run build
# Build an imagedocker build -t swagger-editor .
# Run the containerdocker run -d -p 80:8080 swagger-editorYou can then view the app by navigating to http://localhost in your browser.
Documentation
Section titled “Documentation”Using older version of React
Section titled “Using older version of React”[!IMPORTANT] By older versions we specifically refer to
React >=17 <18.
By default swagger-editor@4 npm package comes with latest version of React@18. It’s possible to use swagger-editor@4 npm package with older version of React.
Let’s say my application integrates with swagger-editor@4 npm package and uses React@17.0.2.
In order to inform swagger-editor@4 npm package that I require it to use my React version, I need to use npm overrides.
{ "dependencies": { "react": "=17.0.2", "react-dom": "=17.0.2" }, "overrides": { "swagger-editor": { "react": "$react", "react": "$react-dom", "react-redux": "^8" } }}[!NOTE] The React and ReactDOM override are defined as a reference to the dependency. Since react-redux@9 only supports
React >= 18, we need to use react-redux@8.
In order to inform swagger-editor@4 npm package that I require it to use my specific React version, I need to use yarn resolutions.
{ "dependencies": { "react": "17.0.2", "react-dom": "17.0.2" }, "resolutions": { "swagger-editor/react": "17.0.2", "swagger-editor/react-dom": "17.0.2", "swagger-editor/react-redux": "^8" }}[!NOTE] The React and ReactDOM resolution cannot be defined as a reference to the dependency. Unfortunately yarn does not support aliasing like
$reactor$react-domas npm does. You’ll need to specify the exact versions.
Security contact
Section titled “Security contact”Please disclose any security-related issues or vulnerabilities by emailing security@swagger.io, instead of using the public issue tracker.
Anonymized analytics
Section titled “Anonymized analytics”Swagger Editor uses Scarf to collect anonymized installation analytics. These analytics help support the maintainers of this library and ONLY run during installation. To opt out, you can set the scarfSettings.enabled field to false in your project’s package.json:
{ // ... "scarfSettings": { "enabled": false } // ...}Alternatively, you can set the environment variable SCARF_ANALYTICS to false as part of the environment that installs your npm packages, e.g., SCARF_ANALYTICS=false npm install.