Export a JSON Schema document to Markdown documentation.
Project description
jsonschema-markdown
Generate markdown documentation from JSON Schema files. The main goal is to generate documentation that is easy to read and understand.
Can be used as a command line tool or as a library.
Easy to use in CI/CD pipelines, as a Docker image is available.
Note: This project follows CalVer (YYYY.MM.MICRO) versioning and maintains backward compatibility whenever possible. New features and enhancements are always encouraged!
Installation
uv tool install jsonschema-markdown
Usage
To use jsonschema-markdown as a CLI, just pass the filename as an argument and redirect
the output to a file.
$ jsonschema-markdown --help
Usage: jsonschema-markdown [OPTIONS] FILENAME
Load FILENAME and output a markdown version.
Use '-' as FILENAME to read from stdin.
Options:
-t, --title TEXT Do not use the title from the schema, use
this title instead.
--footer / --no-footer Add a footer with a link to the project.
[default: footer]
--empty-columns / --no-empty-columns
Remove empty columns from the output, useful
when deprecated or examples are not used.
[default: empty-columns]
--resolve / --no-resolve [Experimental] Resolve $ref pointers.
[default: no-resolve]
--debug / --no-debug Enable debug output. [default: no-debug]
--examples-format [text|yaml|json]
Format of the examples in the output.
[default: text]
--sort-yaml-keys / --no-sort-yaml-keys
Sort keys in YAML examples. Only applies
when --examples-format is yaml. [default:
no-sort-yaml-keys]
--version Show the version and exit.
--help Show this message and exit.
# Example
$ jsonschema-markdown schema.json > schema.md
Usage with Docker
The jsonschema-markdown command is also available as a Docker image. To use it, you can mount the schema file as a volume.
cat my-schema.json | docker run --rm -i elisiariocouto/jsonschema-markdown - > schema.md
⚠️ Warning: Do not pass the -t flag.
The Docker image is available at:
Usage as a library
To use it as a library, load your JSON schema file as Python dict and pass it to generate.
The function will return a string with the markdown.
import jsonschema_markdown
with open('schema.json') as f:
schema = json.load(f)
markdown = jsonschema_markdown.generate(schema)
Features
The goal is to support the latest JSON Schema specification, 2020-12. However,
this project does not currently support all features, but it should support:
- Required fields
- String patterns
- Enumerations
- Default values
- Descriptions and titles
- Nested objects using
$defsordefinitions - Nested objects with dot notation (e.g.,
parent.child[].property) - Basic
oneOf,anyOf,allOffunctionality - Arrays
- Integers with minimum, maximum values and exclusives
- Boolean values
- Deprecated fields (using the
deprecatedoption, additionally searches for case-insensitivedeprecatedin the field description) - Supports optional YAML and JSON formatting for examples
- Configurable key ordering in YAML examples (preserves insertion order by default, optional sorting)
Caveats
- Custom definitions are expected to be in the same file as the schema that uses them,
in the
definitionsor$defsparameter at the root of the document.
Examples
Example 1 Input
Given the following JSON Schema:
{
"$id": "https://example.com/movie.schema.json",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"description": "A representation of a movie",
"type": "object",
"required": ["title", "director", "releaseDate"],
"properties": {
"title": {
"type": "string"
},
"director": {
"type": "string"
},
"releaseDate": {
"type": "string",
"format": "date"
},
"genre": {
"type": "string",
"enum": ["Action", "Comedy", "Drama", "Science Fiction"]
},
"duration": {
"type": "string"
},
"cast": {
"type": "array",
"items": {
"type": "string"
},
"additionalItems": false
}
}
}
Example 1 Output
The following markdown will be generated:
jsonschema-markdown
A representation of a movie
Type: object
| Property | Type | Required | Possible values | Deprecated | Default | Description | Examples |
|---|---|---|---|---|---|---|---|
| title | string |
✅ | string | ||||
| director | string |
✅ | string | ||||
| releaseDate | string |
✅ | Format: date |
||||
| genre | string |
Action Comedy Drama Science Fiction |
|||||
| duration | string |
string | |||||
| cast | array |
string |
Markdown generated with jsonschema-markdown.
Example 2
In tests/model.py you can see a more complex example of a model that is exported as a JSON Schema.
The output can be seen in tests/model.md.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jsonschema_markdown-2025.11.0.tar.gz.
File metadata
- Download URL: jsonschema_markdown-2025.11.0.tar.gz
- Upload date:
- Size: 11.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
162cd012f9a7bd9f39624391431ff69297347fbfd625977f271b98265c6d690e
|
|
| MD5 |
2e6fb96bc74ac81f4b49d5b8db5ad1ba
|
|
| BLAKE2b-256 |
38b8d9c1cc2aec3c0e1cc09d4e22c5af53c15c1f77b4704de992138da029c9b7
|
File details
Details for the file jsonschema_markdown-2025.11.0-py3-none-any.whl.
File metadata
- Download URL: jsonschema_markdown-2025.11.0-py3-none-any.whl
- Upload date:
- Size: 11.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.9.9 {"installer":{"name":"uv","version":"0.9.9"},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
447da2494837dcff2d46ac6d58e1ae426d4dedaec53d52b08eef96f919e42853
|
|
| MD5 |
9bcf098f5af6926025e5f91ee84c9ba7
|
|
| BLAKE2b-256 |
c043d7489b498cebda6361ee935062aeaa1eb7ae31f1b75334a35c27594463ae
|