{
    "description": "This schema documents and guides creation of a config file for the osvr_server application.",
    "properties": {
        "aliases": {
            "description": "Aliases to manually add to the path tree, optionally with transforms. These take the same format as automatic aliases, so they should share a schema.",
            "title": "Aliases - TODO",
            "type": "object"
        },
        "display": {
            "title": "Display descriptor - TODO - filename, reference, or object"
        },
        "drivers": {
            "items": {
                "properties": {
                    "driver": {
                        "id": "driver",
                        "type": "string"
                    },
                    "params": {
                        "id": "params",
                        "properties": {},
                        "type": "object"
                    },
                    "plugin": {
                        "id": "plugin",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "title": "Drivers to manually instantiate",
            "type": "array"
        },
        "externalDevices": {
            "additionalProperties": {
                "description": "Describes an external device. The key associated with this object is the path it will be accessible under.",
                "properties": {
                    "descriptor": {
                        "description": "TODO - can either be an embedded descriptor object, or a reference to an external file with the descriptor.",
                        "title": "Device descriptor"
                    },
                    "deviceName": {
                        "description": "For example, Tracker0 - the part preceding @ in the full VRPN device name.",
                        "title": "Device name",
                        "type": "string"
                    },
                    "server": {
                        "description": "Server host (IP address or hostname), optionally with port if not the default 3883",
                        "title": "Device server",
                        "type": "string"
                    }
                },
                "title": "External device definition",
                "type": "object"
            },
            "description": "Contains entries defining path tree names and device descriptors for external VRPN devices",
            "title": "External devices object",
            "type": "object"
        },
        "plugins": {
            "description": "Manual-load plugins that should be loaded. Provide plugin name only, not filename.",
            "items": {
                "pattern": "^[a-zA-Z]+[a-zA-Z0-9_]*$",
                "type": "string"
            },
            "title": "Plugins to manually load",
            "type": "array"
        },
        "routes": {
            "description": "Deprecated way to specify aliases, or as they were known earlier, routes. Replaced fully by aliases.",
            "title": "DEPRECATED - Route specifications",
            "type": "array"
        },
        "server": {
            "properties": {
                "interface": {
                    "description": "Network interface (IP address) to listen on - implies a non-local-only server",
                    "type": "string"
                },
                "local": {
                    "default": "true",
                    "description": "Whether the server should be local-only or shared (open to networks)",
                    "type": "boolean"
                },
                "port": {
                    "default": 3883,
                    "description": "Port to listen on - note that a non-default port may impair the ability of client applications to contact the server!",
                    "minimum": 1,
                    "type": "integer"
                },
                "sleep": {
                    "default": 1,
                    "description": "Mainloop sleep duration, in milliseconds",
                    "minimum": 0,
                    "type": "number"
                }
            },
            "title": "Server options",
            "type": "object"
        }
    },
    "title": "OSVR Server Config",
    "type": "object"
}