{"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"migrate-to-redocly-from-spectral","__idx":0},"children":["Migrate to Redocly from Spectral"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"Link","attributes":{"href":"https://stoplight.io/open-source/spectral"},"children":["Spectral"]}," offers similar linting capabilities to Redocly CLI and the rest of the Redocly tools."," ","Redocly CLI and the rest of the Redocly toolchain cover the same linting ground as ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"https://stoplight.io/open-source/spectral"},"children":["Spectral"]},", and go further."," ","This guide compares both tools so you can decide whether switching makes sense for your team."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The first step is to ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/installation"},"children":["install Redocly CLI"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"update-command","__idx":1},"children":["Update command"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Replace ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spectral lint openapi.yaml"]}," with the equivalent ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redocly"]}," command:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"redocly lint openapi.yaml\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For more information, check out the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/commands/lint"},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["lint"]}," command documentation"]},"."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"specify-ruleset","__idx":2},"children":["Specify ruleset"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Instead of ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--ruleset"]},"/",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["-r"]},", use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--extends"]}," parameter to indicate which ruleset you are using as a basis."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Read more ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/api-standards"},"children":["about linting and rulesets"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"choose-output-format","__idx":3},"children":["Choose output format"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Similar to Spectral, Redocly offers multiple output formats using the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--format"]}," parameter."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"resolvers","__idx":4},"children":["Resolvers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If you use ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["--resolver"]}," to handle how links and remote URLs are resolved, visit the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/configuration#resolve-object"},"children":["configuration documentation"]}," to see how to handle this with Redocly."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"update-configuration","__idx":5},"children":["Update configuration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The configuration formats are a little different between the tools."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Redocly uses a configuration file called ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redocly.yaml"]},", the main controls for linting are:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Specify a ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules#rulesets"},"children":["ruleset"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Add configuration for the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules"},"children":["rules"]}," accordingly. They can be set to error, warn, or off."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Expand the collection with any ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules/configurable-rules"},"children":["configurable rules"]}," that fit your standard."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"example-redocly-configuration-file","__idx":6},"children":["Example Redocly configuration file"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Below is an example of a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["redocly.yaml"]}," configuration file, enabling the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules/minimal"},"children":["minimal ruleset"]},", disabling the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["security-defined"]}," rule, and setting up an example ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules/configurable-rules"},"children":["configurable rule"]}," to check for the word \"test\" appearing in an operation summary."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"yaml","header":{"controls":{"copy":{}}},"source":"extends:\n  - minimal\n\nrules:\n  security-defined: off\n  rule/naming:\n    subject:\n      type: Operation\n      property: summary\n    assertions:\n      notPattern: /test/\n    message: 'Operation summary must not include the word test'\n","lang":"yaml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["It is also possible to configure additional rules for specific APIs using the ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/configuration#apis-object"},"children":["APIs object"]}," to set per-API rules (or exceptions!)."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"redocly-rules-and-spectral-equivalents","__idx":7},"children":["Redocly rules and Spectral equivalents"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Included here is an attempt to map the simliar-but-not-identical naming of rules between the tools. If you spot anything that needs adding or updating, please ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"https://github.com/redocly/redocly-cli/issues"},"children":["tell us"]},"?"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Spectral rules"},"children":["Spectral rules"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Redocly rules"},"children":["Redocly rules"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["duplicated-entry-in-enum"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-contact"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-contact"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-license"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-license"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["license-url"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["info-license-url"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-$ref-siblings"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-eval-in-markdown"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-script-tags-in-markdown"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-api-servers"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-empty-servers"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-examples-value-or-externalValue"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-example-value-and-externalValue"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-operation-security-defined"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["security-defined"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-parameter-description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parameter-description"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-schema"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spec"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-server-not-example.com"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-server-example.com"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-server-trailing-slash"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-server-trailing-slash"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-unused-component"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-unused-components"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-valid-media-example"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-invalid-media-type-examples"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["oas3-valid-schema-example"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-invalid-schema-examples"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["openapi-tags"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["openapi-tags-alphabetical"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tags-alphabetical"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["openapi-tags-uniqueness"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-description"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId-unique"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId-unique"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId-valid-in-url"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-operationId-url-safe"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-parameters"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-parameters-unique"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-singular-tag"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-singular-tag"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-success-response"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-2xx-response"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-tag-defined"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-tag-defined"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-tags"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-declarations-must-exist"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-declaration-must-exist"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-keys-no-trailing-slash"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-path-trailing-slash"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-not-include-query"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-not-include-query"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-params"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-parameters-defined"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tag-description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["tag-description"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["typed-enum"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["boolean-parameter-prefixes"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-ambiguous-paths"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-enum-type-mismatch"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-http-verbs-in-paths"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-identical-paths"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-invalid-parameter-examples"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-server-variables-empty-enum"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-undefined-server-variable"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["no-unresolved-refs"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-4xx-problem-details-rfc7807"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-4xx-response"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["operation-summary"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-excludes-patterns"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["path-segment-plural"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paths-kebab-case"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["request-mime-type"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["required-string-property-missing-min-length"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["response-contains-header"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["response-contains-property"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["response-mime-type"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["scalar-property-missing-example"]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["spec-components-invalid-map-name"]}]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"configurable-and-extensible-rules","__idx":8},"children":["Configurable and extensible rules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the built-in rules don't meet your requirements, don't worry!"," ","With Redocly you can use ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/rules/configurable-rules"},"children":["configurable rules"]}," to build any rule to suit your needs."," ","Declare which elements of the OpenAPI description should comply with the rule, and then define the criteria that it should be checked against."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Build up the rulesets that work for your organization's API standards."," ","These can be:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["using existing Redocly rulesets"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["defining your own rulesets from built-in, configurable and/or custom rules"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["combining rulesets from any source"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["adding per-API additions or exceptions as required"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["using an ignore file to overlook existing/historic incompatibilities while still enforcing rules for changed elements"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For some advanced use cases, the configurable rules can't cover all possibilities."," ","If that happens, Redocly supports ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1/custom-plugins/custom-rules"},"children":["adding rules in custom plugins"]}," so that you can use JavaScript to express any specialist rules you need."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"explore-tool-functionality","__idx":9},"children":["Explore tool functionality"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Redocly CLI supports multiple Redocly products and functions, so go ahead and ",{"$$mdtype":"Tag","name":"Link","attributes":{"href":"/docs/cli/v1"},"children":["read more about Redocly CLI"]},"."]}]},"frontmatter":{},"tagList":[],"title":"Migrate to Redocly from Spectral","lastModified":"2026-09-11T13:18:16.000Z"}