Skip to main content

@canard/schema-form-ajv8-plugin

@canard/schema-form-ajv8-plugin npm versionlicense
yarn add @canard/schema-form-ajv8-plugin

AJV 8.x validator plugin for @canard/schema-form — the recommended validator plugin. Supports JSON Schema Draft-07, Draft 2019-09, and Draft 2020-12. Three subpath exports let you pick exactly the draft you need.

Installation

yarn add @canard/schema-form-ajv8-plugin
# ajv@^8 is bundled as a direct dependency

Subpath Exports

Import pathDraft supportAJV internal import
@canard/schema-form-ajv8-pluginDraft-07 (default)ajv
@canard/schema-form-ajv8-plugin/2019Draft 2019-09ajv/dist/2019
@canard/schema-form-ajv8-plugin/2020Draft 2020-12ajv/dist/2020

Quick Setup

import { registerPlugin } from '@canard/schema-form';
import { plugin } from '@canard/schema-form-ajv8-plugin';

registerPlugin(plugin);
// Draft 2019-09
import { plugin } from '@canard/schema-form-ajv8-plugin/2019';
registerPlugin(plugin);
// Draft 2020-12
import { plugin } from '@canard/schema-form-ajv8-plugin/2020';
registerPlugin(plugin);

Default Configuration

// Internal defaults applied when no custom AJV instance is bound
// Same across all three subpath exports
{
allErrors: true, // collect all errors, not just the first
strictSchema: false, // allow extra schema properties (custom keywords, formType, etc.)
validateFormats: false, // format validation disabled for performance
}

Custom AJV Instance

import Ajv from 'ajv';
import { plugin } from '@canard/schema-form-ajv8-plugin';

const ajv = new Ajv({ allErrors: true, strictSchema: false });

plugin.validator.bind(ajv);
// Draft 2020-12 with format validation enabled
import Ajv2020 from 'ajv/dist/2020';
import addFormats from 'ajv-formats';
import { plugin } from '@canard/schema-form-ajv8-plugin/2020';

const ajv = new Ajv2020({ allErrors: true, strictSchema: false });
addFormats(ajv);
plugin.validator.bind(ajv);

Using createValidatorFactory Directly

import Ajv from 'ajv';
import { createValidatorFactory } from '@canard/schema-form-ajv8-plugin';

const ajv = new Ajv({ allErrors: true });
const validate = createValidatorFactory(ajv)(myJsonSchema);

const errors = await validate(formData); // null | ValidationError[]

Validator Plugin Comparison

Featureajv6-pluginajv7-pluginajv8-plugin
Draft-04YesNoNo
Draft-06YesNoNo
Draft-07YesYesYes
Draft 2019-09NoYesYes (/2019)
Draft 2020-12NoNoYes (/2020)
Subpath exportsNoNoYes
Path transformationJSONPath→JSONPointerNone neededNone needed
Recommended forLegacy schemasMigration pathNew projects
AI Agent Reference

AI Reference

Package: @canard/schema-form-ajv8-plugin v0.10.0 Purpose: AJV 8.x validator plugin — recommended for new projects. Supports Draft-07, 2019-09, 2020-12.

Exports (3 subpath variants, each exports the same API)

import { plugin, createValidatorFactory } from '@canard/schema-form-ajv8-plugin';       // Draft-07
import { plugin, createValidatorFactory } from '@canard/schema-form-ajv8-plugin/2019'; // Draft 2019-09
import { plugin, createValidatorFactory } from '@canard/schema-form-ajv8-plugin/2020'; // Draft 2020-12

Usage

registerPlugin(plugin);                         // use default AJV config
plugin.validator.bind(new Ajv({ ... })); // bind custom AJV instance
createValidatorFactory(ajv)(schema); // standalone usage without plugin

Default AJV config (all subpaths)

{ allErrors: true, strictSchema: false, validateFormats: false }

Draft selection guide

SubpathAJV importUse when
/ (default)ajvDraft-07 schemas (most common)
/2019ajv/dist/2019Need $recursiveRef, unevaluatedProperties
/2020ajv/dist/2020Need $dynamicRef, prefixItems