https://github.com/sourcemeta/jsonschema
The CLI for working with JSON Schema. Covers formatting, linting, testing, bundling, and more for both local development and CI/CD pipelines
https://github.com/sourcemeta/jsonschema
asyncapi cpp json json-schema json-schemas jsonschema openapi schema schemas schemastore tooling tools
Last synced: about 1 month ago
JSON representation
The CLI for working with JSON Schema. Covers formatting, linting, testing, bundling, and more for both local development and CI/CD pipelines
- Host: GitHub
- URL: https://github.com/sourcemeta/jsonschema
- Owner: sourcemeta
- License: agpl-3.0
- Created: 2024-05-18T18:43:27.000Z (about 1 year ago)
- Default Branch: main
- Last Pushed: 2025-04-10T20:02:17.000Z (about 1 month ago)
- Last Synced: 2025-04-10T20:41:07.163Z (about 1 month ago)
- Topics: asyncapi, cpp, json, json-schema, json-schemas, jsonschema, openapi, schema, schemas, schemastore, tooling, tools
- Language: Shell
- Homepage:
- Size: 6.2 MB
- Stars: 107
- Watchers: 1
- Forks: 19
- Open Issues: 25
-
Metadata Files:
- Readme: README.markdown
- Contributing: CONTRIBUTING.markdown
- License: LICENSE
Awesome Lists containing this project
- jimsghstars - sourcemeta/jsonschema - The CLI for working with JSON Schema. Covers formatting, linting, testing, bundling, and more for both local development and CI/CD pipelines (Shell)
README

[](https://github.com/sourcemeta/jsonschema/releases)
[](https://www.npmjs.com/package/@sourcemeta/jsonschema)
[](https://www.npmjs.com/package/@sourcemeta/jsonschema)
[](https://github.com/sourcemeta/jsonschema/actions)
[](https://github.com/sourcemeta/jsonschema/graphs/contributors/)
[](https://github.com/sourcemeta/jsonschema/blob/main/.pre-commit-hooks.yaml)The command-line tool for working with [JSON Schema](https://json-schema.org),
the world most popular schema language. It is a comprehensive solution for
maintaining **repositories of schemas** and ensuring their quality, both during
local development and when running on CI/CD pipelines. For example:- Ensure your schemas are valid
- Unit test your schemas against valid and invalid instances
- Enforce consistent indentation and keyword ordering in your schema files
- Detect and fix common JSON Schema anti-patterns
- Inline external references for conveniently distributing your schemas[**Check out the documentation to learn more**](#usage)
***
> [!TIP]
> Do you want to level up your JSON Schema skills? Check out
> [learnjsonschema.com](https://www.learnjsonschema.com), our growing JSON
> Schema documentation website, and our O'Reilly book [Unifying Business, Data,
> and Code: Designing Data Products with JSON
> Schema](https://www.oreilly.com/library/view/unifying-business-data/9781098144999/).Version support
---------------We aim to fully support _every_ version of JSON Schema and combinations between them.
| Dialect | Support |
|---------------------|-------------------------------------------------------|
| JSON Schema 2020-12 | **Full** |
| JSON Schema 2019-09 | **Full** |
| JSON Schema Draft 7 | **Full** |
| JSON Schema Draft 6 | **Full** |
| JSON Schema Draft 4 | **Full** |
| JSON Schema Draft 3 | Partial (except `validate`, `test`, and `metaschema`) |
| JSON Schema Draft 2 | Partial (except `validate`, `test`, and `metaschema`) |
| JSON Schema Draft 1 | Partial (except `validate`, `test`, and `metaschema`) |
| JSON Schema Draft 0 | Partial (except `validate`, `test`, and `metaschema`) |What our users are saying
-------------------------> Amazing product. Very useful for formatting and bundling my schemas, plus it
> surfaced various referencing issues. 10 out of 10, co-founder of the
[KrakenD](https://www.krakend.io) API Gateway.Usage
-----The functionality provided by the JSON Schema CLI is divided into commands. The
following pages describe each command in detail. Additionally, running the JSON
Schema CLI without passing a command will print convenient reference
documentation:- [`jsonschema version`](./docs/version.markdown)
- [`jsonschema validate`](./docs/validate.markdown)
- [`jsonschema metaschema`](./docs/metaschema.markdown) (ensure a schema is valid)
- [`jsonschema test`](./docs/test.markdown) (write unit tests for your schemas)
- [`jsonschema fmt`](./docs/format.markdown)
- [`jsonschema lint`](./docs/lint.markdown)
- [`jsonschema bundle`](./docs/bundle.markdown) (for inlining remote references in a schema)
- [`jsonschema inspect`](./docs/inspect.markdown) (for debugging references)
- [`jsonschema encode`](./docs/encode.markdown) (for binary compression)
- [`jsonschema decode`](./docs/decode.markdown)Note that YAML is supported in most commands!
We also support a growing amount of [`pre-commit`](https://pre-commit.com)
hooks. Take a look at the
[`.pre-commit-hooks.yaml`](https://github.com/sourcemeta/jsonschema/blob/main/.pre-commit-hooks.yaml)
configuration file for what's available right now. Keep in mind that to use the
`pre-commit` hooks, you need to install the CLI first.***
If you are looking for more of a tutorial and overview of what the CLI is
capable of, take a look at the [Applying software engineering practices to JSON
Schemas](https://www.youtube.com/watch?v=wJ7bK22n3IU) talk from the 2024 [JSON
Schema Conference](https://conference.json-schema.org). It covers advise on
ontology design, linting, unit testing, CI/CD integration, and more:[](https://www.youtube.com/watch?v=wJ7bK22n3IU)
Installation
------------The JSON Schema CLI is written using C++ and [CMake](https://cmake.org/), and
supports macOS, Windows, and GNU/Linux.### From Homebrew
```sh
brew install sourcemeta/apps/jsonschema
```### From GitHub Actions
```yaml
- uses: sourcemeta/[email protected]
```Where `X.Y.Z` is replaced with the desired version. For example:
```yaml
- uses: sourcemeta/[email protected]
# Then use as usual
- run: jsonschema fmt path/to/schemas --check
```### From NPM
```sh
npm install --global @sourcemeta/jsonschema
```### From GitHub Releases
We publish precompiled binaries for every supported platform to [GitHub
Releases](https://github.com/sourcemeta/jsonschema/releases), including a
[continuous](https://github.com/sourcemeta/jsonschema/releases/tag/continuous)
that is updated on every commit from the main branch.For convenience, we also provide a POSIX shell script capable of installing the
latest pre-built binaries, which you can run as follows:```sh
/bin/sh -c "$(curl -fsSL https://raw.githubusercontent.com/sourcemeta/jsonschema/main/install -H "Cache-Control: no-cache, no-store, must-revalidate")"
```### From Dockerfile
Starting from v7.2.1, we publish a Docker image to GitHub Packages (`amd64` and
`arm64`), which you can use as follows:```sh
docker run --interactive --volume "$PWD:/workspace" \
ghcr.io/sourcemeta/jsonschema:vX.Y.Z lint --verbose myschema.json
```Replace `vX.Y.Z` with your desired version. You can mount any directory as `/workspace`.
> [!WARNING]
> Make sure to NOT allocate a pseudo-TTY when running the CLI through Docker
> (i.e. the `--tty`/`-t` option) as it might result in line ending
> incompatibilities between the container and host, which will affect
> formatting. Plus a TTY is not required for running a tool like the JSON
> Schema CLI.### Building from source
```sh
git clone https://github.com/sourcemeta/jsonschema
cd jsonschema
cmake -S . -B ./build -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build ./build --config Release --parallel 4
cmake --install ./build --prefix \
--config Release --verbose --component sourcemeta_jsonschema
```Where `` can be any destination prefix of your choosing, such as `/opt`
or `/usr/local`.