README.md
1 <img align="right" alt="Ajv logo" width="160" src="https://ajv.js.org/img/ajv.svg"> 2 3 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 [](https://github.com/ajv-validator/ajv/actions?query=workflow%3Abuild) 12 [](https://www.npmjs.com/package/ajv) 13 [](https://www.npmjs.com/package/ajv) 14 [](https://coveralls.io/github/ajv-validator/ajv?branch=master) 15 [](https://gitter.im/ajv-validator/ajv) 16 [](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 [](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)