# What changed in json-schema-typed

> 28 changes in json-schema-typed 9 from its official release notes, upgrade guides and advisories: 6 breaking, 12 new APIs and options. Each one cited. Sources checked 2026-10-17. HTML: https://unstale.sh/npm/json-schema-typed/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## json-schema-typed 9

### Breaking changes

- In 2019-09 and 2020-12, reading `schema.contentEncoding` yields `string` instead of the closed RFC 2045 union; draft-07 retains the union. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Deno publishing is retired; Deno users can consume the npm package directly with `npm:json-schema-typed`. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- No longer includes plain `string` or its method types; the unconstrained `JSONSchema` still accepts arbitrary strings for `type`. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- In 2020-12, `prefixItems` must be an array of schemas; a bare schema is no longer accepted. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- In-place applicators, `contains`, and `contentSchema` no longer inherit the parent schema's `type`; nested schemas may declare any type. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- In 2019-09 and 2020-12, `$vocabulary` is typed as `Record<string, boolean>` instead of `Record<string, string>`, matching the meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)

### New APIs and options

- Adds `ContentEncoding.Base16` for 2019-09 and 2020-12. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `ContentEncoding.Base32` for 2019-09 and 2020-12. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `ContentEncoding.Base32Hex` for 2019-09 and 2020-12. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `ContentEncoding.Base64URL` for 2019-09 and 2020-12. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds the canonical import path for the 2019-09 module; the draft-prefixed path remains an alias re-exporting the same module. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds the canonical import path for the 2020-12 module; the draft-prefixed path remains an alias re-exporting the same module. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds a moving alias for the newest in-progress specification, currently the same module as v1. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds the unreleased JSON Schema v1 working specification module, which may change until the specification's first release; the main export remains on 2020-12. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Takes a third type parameter, `Sub`, for the type of nested schemas. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Exports the type utility used to build `JSONSchema.String`, `JSONSchema.Object`, and related types. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Exports the type utility used to build `JSONSchema.String`, `JSONSchema.Object`, and related types. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Exports keyword names grouped by the `type` they apply to from every module. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)

### Behavior and default changes

- In draft-07, `format` is permitted on every type, not only strings. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)

### Fixes and other changes

- Changes the package license from BSD-2-Clause to BSD-3-Clause, adding the standard non-endorsement clause. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `default: false` to match the meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- In v1, `$dynamicRef` is typed as a plain anchor name rather than a URI reference, matching the v1 meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- For union `Value` types, `type` is constrained to the corresponding schema type names, including the list form. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `minimum: 0` to match the meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `minimum: 0` to match the meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds the deprecated `$recursiveAnchor` keyword to draft 2020-12 because its meta-schema still lists it. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds `default: false` to match the meta-schema. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
- Adds the deprecated `$recursiveRef` keyword to draft 2020-12 because its meta-schema still lists it. (9.0.0) — [release notes](https://github.com/RemyRylan/json-schema-typed/releases/tag/v9.0.0)
