README.md
  1  <img align="right" alt="Ajv logo" width="160" src="https://ajv.js.org/img/ajv.svg">
  2  
  3  &nbsp;
  4  
  5  # Ajv JSON schema validator
  6  
  7  The fastest JSON validator for Node.js and browser.
  8  
  9  Supports JSON Schema draft-04/06/07/2019-09/2020-12 ([draft-04 support](https://ajv.js.org/json-schema.html#draft-04) requires ajv-draft-04 package) and JSON Type Definition [RFC8927](https://datatracker.ietf.org/doc/rfc8927/).
 10  
 11  [![build](https://github.com/ajv-validator/ajv/workflows/build/badge.svg)](https://github.com/ajv-validator/ajv/actions?query=workflow%3Abuild)
 12  [![npm](https://img.shields.io/npm/v/ajv.svg)](https://www.npmjs.com/package/ajv)
 13  [![npm downloads](https://img.shields.io/npm/dm/ajv.svg)](https://www.npmjs.com/package/ajv)
 14  [![Coverage Status](https://coveralls.io/repos/github/ajv-validator/ajv/badge.svg?branch=master)](https://coveralls.io/github/ajv-validator/ajv?branch=master)
 15  [![Gitter](https://img.shields.io/gitter/room/ajv-validator/ajv.svg)](https://gitter.im/ajv-validator/ajv)
 16  [![GitHub Sponsors](https://img.shields.io/badge/$-sponsors-brightgreen)](https://github.com/sponsors/epoberezkin)
 17  
 18  ## Ajv sponsors
 19  
 20  [<img src="https://ajv.js.org/img/mozilla.svg" width="45%" alt="Mozilla">](https://www.mozilla.org)<img src="https://ajv.js.org/img/gap.svg" width="9%">[<img src="https://ajv.js.org/img/reserved.svg" width="45%">](https://opencollective.com/ajv)
 21  
 22  [<img src="https://ajv.js.org/img/microsoft.png" width="31%" alt="Microsoft">](https://opensource.microsoft.com)<img src="https://ajv.js.org/img/gap.svg" width="3%">[<img src="https://ajv.js.org/img/reserved.svg" width="31%">](https://opencollective.com/ajv)<img src="https://ajv.js.org/img/gap.svg" width="3%">[<img src="https://ajv.js.org/img/reserved.svg" width="31%">](https://opencollective.com/ajv)
 23  
 24  [<img src="https://ajv.js.org/img/retool.svg" width="22.5%" alt="Retool">](https://retool.com/?utm_source=sponsor&utm_campaign=ajv)<img src="https://ajv.js.org/img/gap.svg" width="3%">[<img src="https://ajv.js.org/img/tidelift.svg" width="22.5%" alt="Tidelift">](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=enterprise)<img src="https://ajv.js.org/img/gap.svg" width="3%">[<img src="https://ajv.js.org/img/reserved.svg" width="22.5%">](https://opencollective.com/ajv)<img src="https://ajv.js.org/img/gap.svg" width="3%">[<img src="https://ajv.js.org/img/reserved.svg" width="22.5%">](https://opencollective.com/ajv)
 25  
 26  ## Contributing
 27  
 28  More than 100 people contributed to Ajv, and we would love to have you join the development. We welcome implementing new features that will benefit many users and ideas to improve our documentation.
 29  
 30  Please review [Contributing guidelines](./CONTRIBUTING.md) and [Code components](https://ajv.js.org/components.html).
 31  
 32  ## Documentation
 33  
 34  All documentation is available on the [Ajv website](https://ajv.js.org).
 35  
 36  Some useful site links:
 37  - [Getting started](https://ajv.js.org/guide/getting-started.html)
 38  - [JSON Schema vs JSON Type Definition](https://ajv.js.org/guide/schema-language.html)
 39  - [API reference](https://ajv.js.org/api.html)
 40  - [Strict mode](https://ajv.js.org/strict-mode.html)
 41  - [Standalone validation code](https://ajv.js.org/standalone.html)
 42  - [Security considerations](https://ajv.js.org/security.html)
 43  - [Command line interface](https://ajv.js.org/packages/ajv-cli.html)
 44  - [Frequently Asked Questions](https://ajv.js.org/faq.html)
 45  
 46  ## <a name="sponsors"></a>Please [sponsor Ajv development](https://github.com/sponsors/epoberezkin)
 47  
 48  Since I asked to support Ajv development 40 people and 6 organizations contributed via GitHub and OpenCollective - this support helped receiving the MOSS grant!
 49  
 50  Your continuing support is very important - the funds will be used to develop and maintain Ajv once the next major version is released.
 51  
 52  Please sponsor Ajv via:
 53  
 54  - [GitHub sponsors page](https://github.com/sponsors/epoberezkin) (GitHub will match it)
 55  - [Ajv Open Collective️](https://opencollective.com/ajv)
 56  
 57  Thank you.
 58  
 59  #### Open Collective sponsors
 60  
 61  <a href="https://opencollective.com/ajv"><img src="https://opencollective.com/ajv/individuals.svg?width=890"></a>
 62  
 63  <a href="https://opencollective.com/ajv/organization/0/website"><img src="https://opencollective.com/ajv/organization/0/avatar.svg"></a>
 64  <a href="https://opencollective.com/ajv/organization/1/website"><img src="https://opencollective.com/ajv/organization/1/avatar.svg"></a>
 65  <a href="https://opencollective.com/ajv/organization/2/website"><img src="https://opencollective.com/ajv/organization/2/avatar.svg"></a>
 66  <a href="https://opencollective.com/ajv/organization/3/website"><img src="https://opencollective.com/ajv/organization/3/avatar.svg"></a>
 67  <a href="https://opencollective.com/ajv/organization/4/website"><img src="https://opencollective.com/ajv/organization/4/avatar.svg"></a>
 68  <a href="https://opencollective.com/ajv/organization/5/website"><img src="https://opencollective.com/ajv/organization/5/avatar.svg"></a>
 69  <a href="https://opencollective.com/ajv/organization/6/website"><img src="https://opencollective.com/ajv/organization/6/avatar.svg"></a>
 70  <a href="https://opencollective.com/ajv/organization/7/website"><img src="https://opencollective.com/ajv/organization/7/avatar.svg"></a>
 71  <a href="https://opencollective.com/ajv/organization/8/website"><img src="https://opencollective.com/ajv/organization/8/avatar.svg"></a>
 72  <a href="https://opencollective.com/ajv/organization/9/website"><img src="https://opencollective.com/ajv/organization/9/avatar.svg"></a>
 73  <a href="https://opencollective.com/ajv/organization/10/website"><img src="https://opencollective.com/ajv/organization/10/avatar.svg"></a>
 74  <a href="https://opencollective.com/ajv/organization/11/website"><img src="https://opencollective.com/ajv/organization/11/avatar.svg"></a>
 75  
 76  ## Performance
 77  
 78  Ajv generates code to turn JSON Schemas into super-fast validation functions that are efficient for v8 optimization.
 79  
 80  Currently Ajv is the fastest and the most standard compliant validator according to these benchmarks:
 81  
 82  - [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark) - 50% faster than the second place
 83  - [jsck benchmark](https://github.com/pandastrike/jsck#benchmarks) - 20-190% faster
 84  - [z-schema benchmark](https://rawgit.com/zaggino/z-schema/master/benchmark/results.html)
 85  - [themis benchmark](https://cdn.rawgit.com/playlyfe/themis/master/benchmark/results.html)
 86  
 87  Performance of different validators by [json-schema-benchmark](https://github.com/ebdrup/json-schema-benchmark):
 88  
 89  [![performance](https://chart.googleapis.com/chart?chxt=x,y&cht=bhs&chco=76A4FB&chls=2.0&chbh=62,4,1&chs=600x416&chxl=-1:|ajv|@exodus&#x2F;schemasafe|is-my-json-valid|djv|@cfworker&#x2F;json-schema|jsonschema&chd=t:100,69.2,51.5,13.1,5.1,1.2)](https://github.com/ebdrup/json-schema-benchmark/blob/master/README.md#performance)
 90  
 91  ## Features
 92  
 93  - Ajv implements JSON Schema [draft-06/07/2019-09/2020-12](http://json-schema.org/) standards (draft-04 is supported in v6):
 94    - all validation keywords (see [JSON Schema validation keywords](https://ajv.js.org/json-schema.html))
 95    - [OpenAPI](https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.3.md) extensions:
 96      - NEW: keyword [discriminator](https://ajv.js.org/json-schema.html#discriminator).
 97      - keyword [nullable](https://ajv.js.org/json-schema.html#nullable).
 98    - full support of remote references (remote schemas have to be added with `addSchema` or compiled to be available)
 99    - support of recursive references between schemas
100    - correct string lengths for strings with unicode pairs
101    - JSON Schema [formats](https://ajv.js.org/guide/formats.html) (with [ajv-formats](https://github.com/ajv-validator/ajv-formats) plugin).
102    - [validates schemas against meta-schema](https://ajv.js.org/api.html#api-validateschema)
103  - NEW: supports [JSON Type Definition](https://datatracker.ietf.org/doc/rfc8927/):
104    - all keywords (see [JSON Type Definition schema forms](https://ajv.js.org/json-type-definition.html))
105    - meta-schema for JTD schemas
106    - "union" keyword and user-defined keywords (can be used inside "metadata" member of the schema)
107  - supports [browsers](https://ajv.js.org/guide/environments.html#browsers) and Node.js 10.x - current
108  - [asynchronous loading](https://ajv.js.org/guide/managing-schemas.html#asynchronous-schema-loading) of referenced schemas during compilation
109  - "All errors" validation mode with [option allErrors](https://ajv.js.org/options.html#allerrors)
110  - [error messages with parameters](https://ajv.js.org/api.html#validation-errors) describing error reasons to allow error message generation
111  - i18n error messages support with [ajv-i18n](https://github.com/ajv-validator/ajv-i18n) package
112  - [removing-additional-properties](https://ajv.js.org/guide/modifying-data.html#removing-additional-properties)
113  - [assigning defaults](https://ajv.js.org/guide/modifying-data.html#assigning-defaults) to missing properties and items
114  - [coercing data](https://ajv.js.org/guide/modifying-data.html#coercing-data-types) to the types specified in `type` keywords
115  - [user-defined keywords](https://ajv.js.org/guide/user-keywords.html)
116  - additional extension keywords with [ajv-keywords](https://github.com/ajv-validator/ajv-keywords) package
117  - [\$data reference](https://ajv.js.org/guide/combining-schemas.html#data-reference) to use values from the validated data as values for the schema keywords
118  - [asynchronous validation](https://ajv.js.org/guide/async-validation.html) of user-defined formats and keywords
119  
120  ## Install
121  
122  To install version 8:
123  
124  ```
125  npm install ajv
126  ```
127  
128  ## <a name="usage"></a>Getting started
129  
130  Try it in the Node.js REPL: https://runkit.com/npm/ajv
131  
132  In JavaScript:
133  
134  ```javascript
135  // or ESM/TypeScript import
136  import Ajv from "ajv"
137  // Node.js require:
138  const Ajv = require("ajv")
139  
140  const ajv = new Ajv() // options can be passed, e.g. {allErrors: true}
141  
142  const schema = {
143    type: "object",
144    properties: {
145      foo: {type: "integer"},
146      bar: {type: "string"}
147    },
148    required: ["foo"],
149    additionalProperties: false,
150  }
151  
152  const data = {
153    foo: 1,
154    bar: "abc"
155  }
156  
157  const validate = ajv.compile(schema)
158  const valid = validate(data)
159  if (!valid) console.log(validate.errors)
160  ```
161  
162  Learn how to use Ajv and see more examples in the [Guide: getting started](https://ajv.js.org/guide/getting-started.html)
163  
164  ## Changes history
165  
166  See [https://github.com/ajv-validator/ajv/releases](https://github.com/ajv-validator/ajv/releases)
167  
168  **Please note**: [Changes in version 8.0.0](https://github.com/ajv-validator/ajv/releases/tag/v8.0.0)
169  
170  [Version 7.0.0](https://github.com/ajv-validator/ajv/releases/tag/v7.0.0)
171  
172  [Version 6.0.0](https://github.com/ajv-validator/ajv/releases/tag/v6.0.0).
173  
174  ## Code of conduct
175  
176  Please review and follow the [Code of conduct](./CODE_OF_CONDUCT.md).
177  
178  Please report any unacceptable behaviour to ajv.validator@gmail.com - it will be reviewed by the project team.
179  
180  ## Security contact
181  
182  To report a security vulnerability, please use the
183  [Tidelift security contact](https://tidelift.com/security).
184  Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerabilities via GitHub issues.
185  
186  ## Open-source software support
187  
188  Ajv is a part of [Tidelift subscription](https://tidelift.com/subscription/pkg/npm-ajv?utm_source=npm-ajv&utm_medium=referral&utm_campaign=readme) - it provides a centralised support to open-source software users, in addition to the support provided by software maintainers.
189  
190  ## License
191  
192  [MIT](./LICENSE)