Skip to main content

jsonsubschema

CI

jsonsubschema checks if one JSON schema is a subschema (subtype) of another.

For any two JSON schemas s1 and s2, s1 <: s2 (reads s1 is subschema/subtype of s2) if every JSON document instance that validates against s1 also validates against s2.

jsonsubschema is very useful in analysing schema evolution and ensuring that newer schema versions are backward compatible. jsonsubschema also enables static type checking on different components of a system that uses JSON schema to describe data interfaces among the system's different components.

The details of JSON subschema are covered in our ISSTA 2021 paper, which received a Distinguished Artifact Award:

@InProceedings{issta21JSONsubschema,
  author    = {Habib, Andrew and Shinnar, Avraham and Hirzel, Martin and Pradel, Michael},
  title     = {Finding Data Compatibility Bugs with JSON Subschema Checking},
  booktitle = {The ACM SIGSOFT International Symposium on Software Testing and Analysis (ISSTA)},
  year      = {2021},
  pages     = {620--632},
  url       = {https://doi.org/10.1145/3460319.3464796},
}

I) Obtaining the tool

Requirements

  • Python 3.8 or higher
  • Other python dependencies will be installed during the installation process

You can either install jsonsubschema from PyPI or from the source code on GitHub.

A) Install from PyPI

Execute the following:

pip install jsonsubschema

B) Install from GitHub source code

Execute the following:

git clone https://github.com/IBM/jsonsubschema.git
cd jsonsubschema
pip install .

For development installation (editable mode):

pip install -e .

II) Running subschema

JSON subschema provides two usage interfaces:

A) CLI interface

  1. Create two JSON schema examples by executing the following:
echo '{"type": ["null", "string"]}' > s1.json
echo '{"type": ["string", "null"], "not": {"enum": [""]}}' > s2.json
  1. Invoke the CLI by executing:
python -m jsonsubschema.cli s2.json s1.json

B) python API

from jsonsubschema import isSubschema

def main():
	s1 = {'type': "integer"}
	s2 = {'type': ["integer", "string"]}
	
	print(f'LHS <: RHS {isSubschema(s1, s2)}')

if __name__ == "__main__":
	main()

License

jsonsubschema is distributed under the terms of the Apache 2.0 License, see LICENSE.txt.

Contributions

json-subschema is still at an early phase of development and we welcome contributions. Contributors are expected to submit a 'Developer's Certificate of Origin', which can be found in DCO1.1.txt.

Metadata

Release files for jsonsubschema 0.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jsonsubschema 0.0.8
File Size Uploaded
jsonsubschema-0.0.8.tar.gz 44.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jsonsubschema 0.0.8
File Interpreter ABI Platform
jsonsubschema-0.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 73.1 kB

Release files / jsonsubschema-0.0.8.tar.gz

Download URL jsonsubschema-0.0.8.tar.gz
Size 44.5 kB
Tags Source
SHA-256 checksum
How to use checksums
39846ece264fe62aae5dd86e71bef8899a5d0869b8be03ab582066acbee7f9d9
BLAKE2b-256 checksum
How to use checksums
6bb20e2b7fca010d39789e0394170e0ef814ff29fcdc1639ee0db595f3b3ba94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.

Transparency log

Release files / jsonsubschema-0.0.8-py3-none-any.whl

Download URL jsonsubschema-0.0.8-py3-none-any.whl
Size 28.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4ab42ad1de7795f5b2abe9842cc797a135a18b24d9ff6b09e4d7ad4a8d2ea4a5
BLAKE2b-256 checksum
How to use checksums
2ae3c4721c54f2f28b4b263a007dafe5916ed352af28f44bbd7dcdf676c9b31a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 12, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.0.8 This release

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

0.0.4

2 release files

0.0.3

3 release files

0.0.2

3 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page