{
    "$schema": "http://json-schema.org/draft-07/schema#",
    "description": "Jupyter Interactive Widget State JSON schema.",
    "type": "object",
    "properties" : {
        "version_major" : {
            "description": "Format version (major)",
            "type": "number",
            "minimum": 2,
            "maximum": 2
        },
        "version_minor" : {
            "description": "Format version (minor)",
            "type": "number",
            "minimum": 0,
            "maximum": 0
        },
        "state": {
            "description": "Model State for All Widget Models - keys are model ids, values are model state",
            "type": "object",
            "additionalProperties" : {
                "type": "object",
                "properties": {
                    "model_name": {
                        "description" : "Name of the JavaScript class holding the model implementation",
                        "type": "string"
                    },
                    "model_module": {
                        "description" : "Name of the JavaScript module holding the model implementation",
                        "type": "string"
                    },
                    "model_module_version": {
                        "description" : "Semver range for the JavaScript module holding the model implementation",
                        "type": "string"
                    },
                    "state": {
                        "description" : "Serialized state of the model",
                        "type": "object"
                    },
                    "buffers": {
                        "description": "Binary buffers in the state",
                        "type": "array",
                        "items": {
                            "type": "object",
                            "properties": {
                                "path": {
                                    "description": "A path for a binary buffer value.",
                                    "type": "array",
                                    "items": {
                                        "description": "An object key or array index",
                                        "type": ["string", "number"]
                                    }
                                },
                                "data": {
                                    "description" : "A binary buffer encoded as specified in the 'encoding' property",
                                    "type": "string"
                                },
                                "encoding": {
                                    "description": "The encoding of the buffer data",
                                    "type": "string",
                                    "oneOf": [
                                        {"enum": ["hex"], "description": "Base 16 encoding, as specified in RFC 4648, section 8 (https://tools.ietf.org/html/rfc4648#section-8)"},
                                        {"enum": ["base64"], "description": "Base 64 encoding, as specified in RFC 4648, section 4 (https://tools.ietf.org/html/rfc4648#section-4)"}

                                    ]
                                }

                            },
                            "required": ["path", "data", "encoding"]
                        }
                    }
                },
                "required": [ "model_name", "model_module", "state" ]
            }
        }
    },
    "required": [ "version_major", "version_minor", "state" ]
}
