config.json schema

    
    {
       "$schema":"http://json-schema.org/draft-07/schema#",
       "title":"Configuration file schema",
       "description":"GAMS MIRO configuration file schema",
       "type":"object",
       "definitions": {
        "miroPivotOptions":{
          "description":"MIRO pivot options",
          "type":"object",
          "additionalProperties":false,
          "properties":{
             "rows":{
                "description":"Columns in the symbol to prepopulate the rows of the pivot table.",
                "type":["array", "string", "null"],
                "minLength":1,
                "uniqueItems":true,
                "minItems":0,
                "items":{
                   "type":"string",
                   "minLength":1
                },
                "default":null
             },
             "cols":{
                "description":"Columns in the symbol to prepopulate the columns of the pivot table.",
                "type":"object",
                "additionalProperties":{
                   "type":["array", "string", "null"],
                   "uniqueItems":true
                }
             },
             "aggregations":{
                "description":"Columns in the symbol to prepopulate the aggregations of the pivot table.",
                "type":"object",
                "additionalProperties":{
                   "type":["array", "string", "null"],
                   "uniqueItems":true
                }
             },
             "aggregationFunction":{
                "description":"Function to use for aggregating data.",
                "type":"string",
                "enum": ["sum", "mean", "median", "min", "max", "count"]
             },
             "filter":{
                "description":"Columns in the symbol to prepopulate the filter of the pivot table (key) and the element to be filtered by (value).",
                "type":"object",
                "additionalProperties":{
                   "type":["array", "string"],
                   "uniqueItems":true
                }
             },
             "domainFilter":{
               "description":"Domain filter that will be displayed as tabs and filter a domain by all elements except for the filter value",
                "type":"object",
                "additionalProperties":false,
                "properties":{
                   "domains":{
                      "description":"Domains that can be filtered.",
                      "type":["array", "string"],
                      "minItems":1,
                      "uniqueItems":true,
                      "items":{
                         "type":"string"
                      }
                   },
                   "default":{
                     "description":"Domain that is filtered on startup. If you want to show all data per default, set showAll to true and default to _none. (optional)",
                      "type":"string"
                   },
                   "filterVal":{
                     "description":"String (UEL) to filter by (optional)",
                      "type":"string"
                   },
                   "showAll": {
                     "description":"Add option to show unfiltered table (default: false).",
                     "type":"boolean"
                   }
                }
             },
             "pivotRenderer":{
               "description":"Sepcify the default renderer.",
                "type":"string",
                "enum": ["table", "heatmap", "line", "bar", "stackedbar", "radar"]
             },
             "fixedColumns": {
               "description":"Enable fixed columns (default: true).",
               "type": "boolean"
             },
             "emptyUEL": {
               "description":"UEL that identifies a missing value (defaults to -, must not be empty string).",
               "type": "string",
               "minLength": 1
             },
             "enableHideEmptyCols": {
               "description":"Enable button that allows to hide empty columns.",
               "type": "boolean"
             },
             "hideEmptyCols": {
               "description":"Default value for hide empty columns checkbox (only relevant if enableHideEmptyCols is TRUE).",
               "type": "boolean"
             },
             "enablePersistentViews": {
               "description":"Enable persistent views.",
               "type": "boolean"
             },
             "hidePivotControls": {
               "description":"Show pivot presentation mode/hide pivot controls per default.",
               "type": "boolean"
             },
             "externalDefaultView": {
               "description":"Name of an external view (either global or scenario specific) to be used as default view. If this view does not exist, the default configuration for this symbol is used.",
               "type": "string",
               "minLength": 1
             },
             "customChartColors": {
               "description": "Custom color palette. Every second color is the hover color of previous one.",
               "type":"array"
             },
             "chartOptions": {
               "description":"Additional chart options",
                "type":"object",
                "additionalProperties":false,
                "properties":{
                   "title":{
                     "description":"Chart title",
                     "type": "string",
                     "minLength": 1
                   },
                   "xTitle":{
                     "description":"X-axis label",
                     "type": "string",
                     "minLength": 1
                   },
                   "yTitle":{
                     "description":"Y-axis label",
                     "type": "string",
                     "minLength": 1
                   }
                }
             }
          }
        }
       },
       "additionalProperties":false,
       "properties":{
          "language":{
             "description":"default language for MIRO",
             "type":"string",
             "default":"en",
             "enum":[
                "de",
                "en",
                "cn"
             ]
          },
          "pageTitle":{
            "description":"Name of the page (displayed in browser tab)",
            "type":"string"
          },
          "theme":{
             "description":"Theme / mode (light, dark or browser mode) used for MIRO",
             "type":"string",
             "default":"browser",
             "enum":[
                "browser",
                "light",
                "dark"
             ]
          },
          "customColorTheme": {
             "description":"Should a custom color theme be used? If true, MIRO will try to include a stylesheet named custom_theme.css from the static_ directory. Please use this feature with caution, as a new version of MIRO may be incompatible with your stylesheet and destroy the layout of your application.",
             "type":"boolean",
             "default":false
          },
          "customCss": {
            "description": "Should a custom css file be included? This file must be named custom.css and must be located in the static_ directory.",
            "type":"boolean",
            "default":false
          },
          "fileExchange":{
            "description":"Method used to exchange files with GAMS",
            "type":"string",
            "enum":[
              "csv",
              "gdx"
            ],
            "default":"gdx"
          },
          "csvDelim":{
            "description":"Column delimiter for csv files",
            "type":"string",
            "enum":[
              ",",
              ";"
            ],
            "default":","
          },
          "excelIncludeMeta":{
             "description":"Boolean which specifies whether to include a metadata sheet in the Excel file (exporting a scenario)",
             "type":"boolean",
             "default":true
          },
          "excelIncludeEmptySheets":{
             "description":"Boolean which specifies whether to include empty sheets in the Excel file",
             "type":"boolean",
             "default":true
          },
          "defaultScenName":{
            "description":"Name of the default scenario that will be loaded on startup (leave empty, if you dont want a default scenario)",
             "type":"string"
          },
          "defaultRendererOutput":{
            "description":"Name of the default renderer used for output data",
             "type":"string",
            "enum":[
                "miroPivot",
                "datatable"
             ],
             "default":"miroPivot"
          },
          "UILogo":{
             "description":"String that specifies the name of the logo to use",
             "type":"string",
             "minLength":1,
             "default":"gams_logo.png"
          },
          "autoGenInputGraphs":{
             "description":"Boolean which specifies whether to generate graphs for each input sheet automatically",
             "type":"boolean",
             "default":true
          },
          "storeLogFilesDuration":{
            "description":"duration the GAMS log and lst files are stored in the database (in days). 0 means files are not stored at all, 999 means files are stored indefinitely. This setting is ignored when attachment module is not active. Not that this is currently only supported in the base mode.",
            "type":"integer",
            "minimum":0,
            "maximum":999,
            "default": 7
          },
          "extraClArgs":{
            "description":"Specify extra command line arguments that GAMS will be called with",
            "type":["array", "string"],
            "minLength":3,
            "items":{
              "type":"string",
              "minLength":3
            }
          },
          "modelFilesToIgnore":{
            "description":"Specify files that are not necessary to run the model and shall be ignored (e.g. when uploading model to remote server)",
            "type":["array", "string"],
            "minLength":3,
            "items":{
              "type":"string",
              "minLength":3
            }
          },
          "defCompMode":{
             "description":"Specifies the default scenario comparison mode (the one that is loaded on startup).",
             "type":"string",
             "enum":[
                "split",
                "tab",
                "pivot"
             ],
             "default":"split"
          },
          "pivotCompSettings":{
            "description":"Settings related to the pivot view comparison mode",
             "type":"object",
             "additionalProperties":false,
             "properties":{
               "hidePivotControls": {
                 "description":"Enable presentation mode per default (default: false).",
                 "type": "boolean"
               },
               "fixedColumns": {
                 "description":"Enable fixed columns (default: true).",
                 "type": "boolean"
               },
               "enableHideEmptyCols":{
                "description": "Enable the switch to hide empty columns",
                "type":"boolean",
                "default":false
              },
              "emptyUEL": {
                 "description":"UEL that identifies a missing value (defaults to -, must not be empty string).",
                 "type": "string",
                 "minLength": 1
               },
               "symbolConfig": {
                 "description":"Symbol-specific settings for the pivot view comparison mode",
                 "type":"object",
                 "additionalProperties": {
                   "type":"object",
                   "description": "Symbol configuration",
                   "additionalProperties": false,
                   "properties": {
                     "externalDefaultView": {
                        "description":"Name of an external view (either global or scenario specific) to be used as default view. If this view is not available, a tabular list view is displayed.",
                        "type": "string",
                        "minLength": 1
                      }
                   }
                 }
               }
             }
          },
          "activateModules":{
             "description":"Activate/deactivate certain modules",
             "type":"object",
             "additionalProperties":false,
             "default":{"loadLocal": true, "logFile": true,
               "lstFile": true, "attachments": true, "remoteExecution": false,
               "downloadTempFiles": false
             },
             "properties":{
                "loadLocal":{
                   "description":"Activate local data upload module?",
                   "type":"boolean",
                   "default":true
                },
                "logFile":{
                   "description":"Show log file in UI?",
                   "type":"boolean",
                   "default":true
                },
                "lstFile":{
                   "description":"Show lst file in UI?",
                   "type":"boolean",
                   "default":true
                },
                "attachments":{
                   "description": "Should users be allowed to add attachments to scenarios?",
                   "type": "boolean",
                   "default":true
                },
                "remoteExecution":{
                   "description": "Should model be solved remotely (note that credentials/location need to be specified via environment variables!)?",
                   "type": "boolean",
                   "default":false
                },
                "downloadTempFiles":{
                   "description": "Should users be allowed to access the temporary directory out of MIRO?",
                   "type": "boolean",
                   "default":false
                },
                "hcube":{
                  "description": "Allow submitting Hypercube jobs (requires remote execution to be enabled)?",
                   "type": "boolean",
                   "default":false
                }
             }
          },
          "overwriteAliases":{
            "description": "Specify new aliases that will overwrite those defined in GAMS as explanatory text",
             "type": "object",
             "additionalProperties":{
               "type":"object",
               "additionalProperties":false,
               "required": ["newAlias"],
               "properties":{
                  "newAlias":{
                    "description":"Specify new alias",
                    "type":"string",
                    "minLength":1
                  }
               }
             }
          },
          "overwriteHeaderAliases":{
            "description": "Specify new header aliases that will overwrite those defined in GAMS as explanatory text",
             "type": "object",
             "additionalProperties":{
               "type":"object",
               "additionalProperties":false,
               "required": ["newHeaders"],
               "properties":{
                  "newHeaders":{
                    "description":"Specify new headers (number needs to match dimension of symbol)",
                    "type":"array",
                    "items":{
                      "type":"string",
                      "minLength": 1
                    }
                  }
               }
             }
          },
          "overwriteSheetOrder":{
            "description": "Specify new sheet order as it shall be dispayed in UI",
            "type":"object",
             "additionalProperties":false,
             "properties":{
                "input":{
                   "description":"New order of input sheets",
                   "uniqueItems":true,
                    "items":{
                      "type":"string",
                      "minLength": 1
                    }
                },
                "output":{
                   "description":"New order of output sheets",
                   "uniqueItems":true,
                    "items":{
                      "type":"string",
                      "minLength": 1
                    }
                }
             }
          },
          "aggregateWidgets":{
             "description": "Whether to aggregate all input widgets on a single tab",
             "type": "boolean",
             "default":true
          },
          "miroLogFile": {
            "description": "Enter the name of the MIRO log file.",
             "type": "string",
             "minLength":3
          },
          "hiddenOutputSymbols": {
            "description":"Specify symbol names that will not be displayed in UI but can be used in graphs etc.",
             "type":["array", "string"],
             "minLength":1,
             "uniqueItems":true,
             "items":{
               "type":"string",
               "minLength": 1
             }
          },
          "outputAttachments": {
            "description":"Specify files that should be added to the scenario as attachments after a successful GAMS run.",
            "type":"array",
            "uniqueItems":true,
            "items":{
              "type":"object",
              "description": "Scripts that will be displayed in the output section and feeded with both input and output data",
              "additionalProperties":false,
              "required": ["filename"],
              "properties":{
                "filename": {
                  "description":"Filename of the attachment including extension",
                  "type":"string",
                  "minLength":1
                },
                "execPerm": {
                  "description":"Should GAMS be allowed to read this attachment?",
                  "type":"boolean"
                },
                "throwError": {
                  "description":"Should MIRO throw an error when the file was not found after a successful GAMS run?",
                  "type":"boolean"
                }
              }
            }
          },
          "hiddenOutputScalars": {
            "description":"Specify symbol names of output scalars that will not be displayed in UI but can be used in graphs etc.",
             "type":["array", "string"],
             "minLength":1,
             "uniqueItems":true,
             "items":{
               "type":"string",
               "minLength": 1
             }
          },
          "saveTraceFile":{
             "description":"Boolean which specifies whether trace file should be saved",
             "type":"boolean",
             "default":true
          },
          "inputWidgets":{
            "description":"Format in which input or output data is to be displayed in MIRO.",
             "type":"object",
             "additionalProperties":{
                "type":"object",
                "minProperties":1,
                "oneOf":[
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "slider"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noHcube":{
                        "description":"Boolean that specifies whether element should not be used in Hypercube mode",
                        "type":"boolean"
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"Label of considered inputdata",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "min":{
                         "description":"Minimum value of inputdata",
                         "type":[
                           "number",
                           "string"
                         ]
                       },
                       "max":{
                         "description":"Maximum value of inputdata",
                         "type":[
                           "number",
                           "string"
                         ]
                       },
                       "default":{
                         "description":"Default/starting value of inputdata",
                         "type":[
                           "number",
                           "string",
                           "array"
                         ]
                       },
                       "step":{
                         "description":"Specifies the interval between each selectable value",
                         "type":[
                           "number",
                           "string"
                         ]
                       },
                       "minStep":{
                         "description":"Specifies the minimum step size that the user is allowed to specify in the Hypercube mode",
                         "type":"number",
                         "minimum": 0
                       },
                       "width":{
                         "description":"Width of the slider (optional)",
                         "type":"number"
                       },
                       "ticks":{
                         "description":"Boolean that specifies whether to hide or show tick marks (optional)",
                         "type":"boolean"
                       }
                      },
                      "required":[
                          "widgetType", "step", "min", "max"
                       ],
                      "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "dropdown"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noHcube":{
                        "description":"Boolean that specifies whether element should not be used in Hypercube mode",
                        "type":"boolean"
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                          "description":"display label for the dropdown menu",
                          "type":["string","null"],
                          "minLength":1
                        },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                        "choices":{
                          "description":"List of values to select from.",
                          "type":[
                            "array",
                            "string",
                            "number"
                          ],
                          "uniqueItems":true,
                          "minItems":1,
                          "items":{
                            "type":[
                              "string",
                              "number"
                            ]
                          }
                        },
                        "multiple":{
                          "description":"Boolean that specifies whether multiple options are allowed to be selected in dropdown menu",
                          "type":"boolean"
                        },
                        "aliases":{
                          "type":[
                            "array",
                            "string",
                            "null"
                          ],
                          "minLength":1,
                          "uniqueItems":true,
                          "minItems":1,
                          "items":{
                            "type":"string"
                          }
                        },
                        "selected":{
                          "description":"The initially selected value.",
                          "type":[
                            "string",
                            "number",
                            "null"
                          ]
                        },
                        "clearValue":{
                          "description":"Whether to communicate value as element text when writing/reading from/to GDX. This will not mess up the UEL order.",
                          "type":"boolean"
                        }
                      },
                       "required":[
                          "widgetType",
                          "choices"
                       ],
                      "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "date"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noHcube":{
                        "description":"Boolean that specifies whether element should not be used in Hypercube mode",
                        "type":"boolean"
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"display label for the date selector",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "value":{
                         "description":"initial start date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "min":{
                         "description":"minimum allowed date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "max":{
                         "description":"maximum allowed date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "format":{
                         "description":"format of the date to display in the browser.",
                         "type":"string",
                         "minLength":1,
                         "maxLength":10
                       },
                       "startview":{
                         "description":"date range shown when the input object is first clicked",
                         "type":"string",
                         "enum":[
                           "month",
                           "year",
                           "decade"
                         ]
                       },
                       "weekstart":{
                         "description":"which day is displayed to be the first of the week ",
                         "type":"integer",
                         "minimum":0,
                         "maximum":6
                       },
                       "daysofweekdisabled":{
                         "description":"disallow certain days of week to be selected",
                         "type": ["integer", "array", "null"],
                         "uniqueItems":true,
                         "minItems":1,
                         "items":{
                           "type":"integer",
                           "minimum":0,
                           "maximum":6
                         }
                       },
                       "datesdisabled":{
                         "description":"disallow certain dates to be selected",
                         "type": "array",
                         "uniqueItems":true,
                         "minItems":1,
                         "items":{
                           "type":"string",
                           "minLength":10,
                           "maxLength":10
                         }
                       },
                       "autoclose":{
                         "description":"Whether or not to close the datepicker immediately when a date is selected",
                         "type":"boolean"
                       },
                       "width":{
                         "description":"width of the input",
                         "type":[
                           "string",
                           "integer"
                         ],
                         "minLength":1
                       }
                     },
                     "required":[
                          "widgetType"
                       ],
                      "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "daterange"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noHcube":{
                        "description":"Boolean that specifies whether element should not be used in Hypercube mode",
                        "type":"boolean"
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"display label for the daterange selector",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "start":{
                         "description":"initial start date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "end":{
                         "description":"initial end date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "min":{
                         "description":"minimum allowed date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "max":{
                         "description":"maximum allowed date",
                         "type":["string","null"],
                         "minLength":10,
                         "maxLength":10
                       },
                       "format":{
                         "description":"format of the date to display in the browser.",
                         "type":"string",
                         "minLength":1,
                         "maxLength":10
                       },
                       "startview":{
                         "description":"date range shown when the input object is first clicked",
                         "type":"string",
                         "enum":[
                           "month",
                           "year",
                           "decade"
                         ]
                       },
                       "weekstart":{
                         "description":"which day is displayed to be the first of the week ",
                         "type":"integer",
                         "minimum":0,
                         "maximum":6
                       },
                       "separator":{
                         "description":"String to display between the start and end input boxes",
                         "type":"string",
                         "minLength":1
                       },
                       "width":{
                         "description":"width of the input",
                         "type":[
                           "string",
                           "integer"
                         ],
                         "minLength":1
                       },
                       "autoclose":{
                         "description":"Whether or not to close the datepicker immediately when a date is selected",
                         "type":"boolean"
                       }
                     },
                     "required":[
                        "widgetType"
                     ],
                     "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "checkbox"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noHcube":{
                        "description":"Boolean that specifies whether element should not be used in Hypercube mode",
                        "type":"boolean"
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"display label for the checkbox",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "value":{
                         "description":"default value",
                         "type": "integer",
                         "minimum":0,
                         "maximum":1
                       },
                       "max":{
                         "description":"Maximum allowed value",
                         "type":"string",
                         "minLength":3
                       },
                       "class":{
                         "description":"css class",
                         "type":"string",
                         "minLength":1
                       },
                       "width":{
                         "description":"width of the input",
                         "type":[
                           "string",
                           "integer"
                         ],
                         "minLength":1
                       }
                     },
                     "required":[
                        "widgetType"
                     ],
                     "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "textinput"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"display label for the textinput",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "value":{
                         "description":"default value",
                         "type":["string","null"]
                       },
                       "placeholder":{
                         "description":"placeholder (e.g. to give more information about what kind of value is expected from user)",
                         "type":["string","null"]
                       },
                       "width":{
                         "description":"width of the input",
                         "type":[
                           "string",
                           "integer"
                         ],
                         "minLength":1
                       },
                       "clearValue":{
                          "description":"Whether to communicate value as element text when writing/reading from/to GDX. This will not mess up the UEL order.",
                          "type":"boolean"
                       }
                     },
                     "required":[
                        "widgetType"
                     ],
                     "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "numericinput"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "label":{
                         "description":"display label for the numericinput",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "tooltip":{
                         "description":"Widget tooltip",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "value":{
                         "description":"default value",
                         "type":["number","null"]
                       },
                       "min":{
                         "description":"minimum value",
                         "type":["number","null"]
                       },
                       "max":{
                         "description":"maximum value",
                         "type":["number","null"],
                         "minLength":1
                       },
                       "decimal":{
                         "description":"Number of decimal places",
                         "type":["number","null"],
                         "minLength":1
                       },
                       "sign":{
                         "description":"currency sign",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "decimalCharacter":{
                         "description":"decimal separator to use",
                         "type":["string","null"],
                         "minLength":1
                       },
                       "digitGroupSeparator":{
                         "description":"thousand grouping separator to use",
                         "type":["string","null"]
                       }
                     },
                     "required":[
                        "widgetType"
                     ],
                     "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "table"
                         ]
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "label":{
                         "type":"string"
                       },
                       "tableType": {
                         "description":"Choose type of table",
                         "type":"string",
                         "enum":[
                           "default",
                           "bigdata",
                           "pivot"
                         ]
                       },
                       "bigData":{
                         "description":"DEPRECATED! Use tableType instead!",
                         "type":"boolean",
                         "default": false
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       },
                       "readonly":{
                            "description":"Either true or false for entire table to be readonly",
                            "type":"boolean"
                        },
                        "heatmap":{
                            "description":"Turn table into a heatmap?",
                            "type":"boolean"
                        },
                        "hideIndexCol":{
                            "description":"Hide indexing column?",
                            "type":"boolean"
                        },
                        "colWidths":{
                            "description":"Width of columns.",
                             "type":[
                                "string",
                                "number",
                                "array"
                             ],
                             "items":{
                                "type":"number",
                                "exclusiveMinimum":0
                             },
                             "exclusiveMinimum":0
                        },
                        "readonlyCols":{
                          "description":"Either true or false for certain columns of table to be readonly",
                          "type":["array", "string", "null"],
                          "minLength":1,
                          "items":{
                            "type":"string",
                            "minLength":1
                          }
                        },
                        "pivotCols":{
                          "description":"Array of columns to pivot",
                          "type":["array", "string"],
                          "minLength":1,
                          "items":{
                            "type":"string",
                            "minLength":1
                          }
                        },
                        "fixedColumnsLeft": {
                           "description": "Whether non-pivoted columns should be fixed",
                           "type": ["integer", "null"],
                           "minLength": 1,
                           "minimum": 1
                        },
                        "sortPivotCols":{
                          "description":"Whether pivoted columns should be sorted alphabetically",
                            "type":"boolean"
                        },
                        "colFormat":{
                          "description":"Column specific formatting options",
                          "type":"object",
                           "additionalProperties":{
                              "type":"object",
                              "properties":{
                                "format":{
                                  "description": "Characer specifying column format. Numeric columns are formatted using Numbro.js.",
                                  "type":"string"
                                },
                                "language":{
                                  "description": "locale passed to Numbro.js; default is 'en-US'.",
                                  "type":"string"
                                }
                              },
                              "required":[
                                "format"
                              ],
                              "additionalProperties": false
                           }
                        },
                        "dropdownCols":{
                          "description":"Columns where only certain values are allowed to be selected (only supported for default tables)",
                          "type":"object",
                           "additionalProperties":{
                              "type":"object",
                              "properties":{
                                "colType":{
                                  "description": "Column type (default is 'autocomplete')",
                                  "type":"string",
                                  "enum":["autocomplete", "dropdown"]
                                },
                                "static":{
                                  "description": "Arrays of static choices allowed for this column",
                                  "type":["array", "string"],
                                  "minLength":1,
                                  "items":{
                                    "type":"string",
                                    "minLength":1
                                  }
                                },
                                "symbol":{
                                  "description": "Symbol to fetch choices from",
                                  "type":"string",
                                  "minLength":1
                                },
                                "column":{
                                  "description": "Column (of symbol) to fetch choices from",
                                  "type":"string",
                                  "minLength":1
                                }
                              }
                           }
                        },
                        "validateCols":{
                          "description":"Column values are validated against custom user criteria (only supported for default tables)",
                          "type":"object",
                           "additionalProperties":{
                              "type":"object",
                              "properties":{
                                "min":{
                                  "description": "Minimum value allowed for this column",
                                  "type":["number"]
                                },
                                "max":{
                                  "description": "Maximum value allowed for this column",
                                  "type":["number"]
                                },
                                "choices":{
                                  "description": "Array of acceptable numeric values for this column",
                                  "type":["array", "number"],
                                  "minLength":1,
                                  "items":{
                                    "type":"number",
                                    "minLength":1
                                  }
                                },
                                "exclude":{
                                  "description": "Array of unacceptable numeric values for this column",
                                  "type":["array", "number"],
                                  "minLength":1,
                                  "items":{
                                    "type":"number",
                                    "minLength":1
                                  }
                                },
                                "allowInvalid":{
                                 "description":"Boolean that specifies whether invalid data will be accepted. Invalid data cells will be colored red.",
                                 "type":"boolean"
                                }
                              }
                           }
                        },
                        "options":{
                          "$ref": "#/definitions/miroPivotOptions"
                        }
                     },
                     "required":[
                        "widgetType"
                     ],
                     "additionalProperties": false
                   },
                   {
                     "properties":{
                       "widgetType":{
                         "description":"Style of widget",
                         "type":"string",
                         "enum":[
                           "custom"
                         ]
                       },
                       "rendererName":{
                         "description":"Custom widget (name of generator)",
                         "type":"string",
                         "minLength": 3
                       },
                       "alias":{
                         "type":"string",
                         "minLength":1
                       },
                       "height":{
                          "description":"Height of the output element.",
                          "type":"integer",
                          "minimum":0
                       },
                       "packages":{
                          "description":"Packages that need to be installed",
                          "type":["array", "string"],
                          "minLength":2,
                          "minItems":1,
                          "uniqueItems":true,
                          "items":{
                             "type":"string",
                             "minLength":2
                          }
                       },
                       "options":{
                          "description":"Additional options",
                          "type":"object"
                       },
                       "apiVersion":{
                         "description":"API version to use",
                         "type":"integer",
                         "minimum":1,
                         "maximum":2,
                         "default":1
                       },
                       "additionalData":{
                         "description":"Specify additional input symbols whose data should be handed to custom widget. Currently, only data from scalar widgets (sliders, dropdowns etc.) is supported.",
                        "type":["array", "string"],
                        "minLength":1,
                        "minItems":1,
                        "uniqueItems":true,
                        "items":{
                           "type":"string",
                           "minLength":1
                        }
                       },
                       "widgetSymbols":{
                         "description":"Specify additional symbols for which this widget is defined.",
                          "type":["array", "string"],
                          "minLength":1,
                          "minItems":1,
                          "uniqueItems":true,
                          "items":{
                             "type":"string",
                             "minLength":1
                          }
                       },
                       "noImport":{
                        "description":"Boolean that specifies whether data should not be imported from external source",
                        "type":"boolean"
                       }
                     },
                     "required":[
                        "widgetType", "rendererName"
                     ],
                     "additionalProperties": false
                   }
                ]
             }
          },
          "outputTables":{
             "description":"Table settings of an output symbol in MIRO.",
             "type":"object",
             "additionalProperties":{
                "type":"object",
                "additionalProperties": false,
                "properties":{
                  "class":{
                     "description":"css classes used for styling datatable",
                     "type":[
                        "array",
                        "string"
                     ],
                     "minItems":1,
                     "default":"display"
                   },
                   "filter":{
                      "description":"Whether and where to include column filter",
                      "type":"string",
                      "enum":[
                         "none",
                         "bottom",
                         "top"
                      ],
                      "default":"bottom"
                   },
                   "pivotCols":{
                      "description":"Array of columns to pivot",
                      "type":["array", "string"],
                      "minLength":1,
                      "items":{
                        "type":"string",
                        "minLength":1
                      }
                    },
                    "sortPivotCols":{
                      "description":"Whether pivoted columns should be sorted alphabetically",
                        "type":"boolean"
                    },
                   "rownames":{
                      "description":"Boolean that specifies whether to show row names",
                      "type":"boolean",
                      "default":false
                   },
                   "autoHideNavigation":{
                      "description":"Boolean that specifies whether to automatically hide navigation elements when number of total records is less than page size",
                      "type":"boolean",
                      "default":false
                   },
                   "extensions":{
                      "description":"For a list of supported extensions see: https://rstudio.github.io/DT/extensions.html",
                      "type":["array", "string"],
                      "uniqueItems":true,
                      "items":{
                         "type":"string",
                         "enum":[
                            "AutoFill",
                            "Buttons",
                            "ColReorder",
                            "ColVis",
                            "FixedColumns",
                            "FixedHeader",
                            "KeyTable",
                            "Responsive",
                            "RowReorder",
                            "Scroller",
                            "Select"
                         ]
                      }
                   },
                   "options":{
                      "description":"Additional options (e.g. column specific).",
                      "type":"object",
                      "default": {"pageLength": 15, "decimals": 2},
                      "properties":{
                         "dom":{
                            "description":"Defines where the table control elements appear (position) and in what order",
                            "type":"string",
                            "minLength":1
                         },
                         "buttons":{
                            "description":"Buttons or groups of buttons to insert",
                            "type":["array", "string"],
                            "uniqueItems":true,
                            "items":{
                                "type": "string",
                                "enum":["copy", "csv", "excel", "pdf", "print", "colvis"]
                            }
                         },
                         "pageLength":{
                            "description":"Number of items to display per page",
                            "type":"integer",
                            "minimum":1,
                            "default":15
                         },
                         "decimals":{
                            "description":"Integer that specifies the number of decimal places to use",
                            "type":"integer",
                            "minimum":0,
                            "default":2
                         },
                         "columnDefs":{
                            "description":"Column specific options.",
                            "type":"array",
                            "uniqueItems":true,
                            "items":{
                               "type":"object",
                               "required": ["targets"],
                               "properties":{
                                  "targets":{
                                     "anyOf":[
                                        {
                                           "description":"Column numbers to refer to.",
                                           "type":["array", "integer"],
                                           "minimum":1,
                                           "minItems":1,
                                           "items":{
                                              "type":"integer",
                                              "minimum":1
                                           }
                                        },
                                        {
                                           "description":"Use _all_ to refer to all the columns",
                                           "type":"string",
                                           "minLength":1
                                        }
                                     ]
                                  },
                                  "className":{
                                     "type":"string",
                                     "minLength":1
                                  },
                                  "visible":{
                                     "type":"boolean"
                                  },
                                  "searchable":{
                                     "type":"boolean"
                                  }
                               }
                            }
                         }
                      }
                   }
                }
             }
          },
          "dataRendering":{
            "description":"Format in which input or output data is to be displayed in MIRO.",
             "type":"object",
             "additionalProperties":{
                "type":"object",
                "minProperties":1,
                "oneOf":[
                   {
                      "properties":{
                         "outType":{
                            "description":"Style of widget (table, pivottable, graph, graph+table).",
                            "type":"string",
                            "enum":[
                               "datatable"
                            ]
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "height":{
                            "description":"Height of the output element.",
                            "type":"integer",
                            "minimum":0
                         },
                         "class":{
                           "description":"css classes used for styling datatable",
                           "type":[
                              "array",
                              "string"
                           ],
                           "minItems":1,
                           "default":"display"
                         },
                         "filter":{
                            "description":"Whether and where to include column filter",
                            "type":"string",
                            "enum":[
                               "none",
                               "bottom",
                               "top"
                            ],
                            "default":"bottom"
                         },
                         "pivotCols":{
                           "description":"Array of columns to pivot",
                           "type":["array", "string"],
                           "minLength":1,
                           "items":{
                             "type":"string",
                             "minLength":1
                           }
                         },
                         "sortPivotCols":{
                           "description":"Whether pivoted columns should be sorted alphabetically",
                             "type":"boolean"
                         },
                         "rownames":{
                            "description":"Boolean that specifies whether to show row names",
                            "type":"boolean",
                            "default":false
                         },
                         "autoHideNavigation":{
                            "description":"Boolean that specifies whether to automatically hide navigation elements when number of total records is less than page size",
                            "type":"boolean",
                            "default":false
                         },
                         "extensions":{
                            "description":"For a list of supported extensions see: https://rstudio.github.io/DT/extensions.html",
                            "type":["array", "string"],
                            "uniqueItems":true,
                            "items":{
                               "type":"string",
                               "enum":[
                                  "AutoFill",
                                  "Buttons",
                                  "ColReorder",
                                  "ColVis",
                                  "FixedColumns",
                                  "FixedHeader",
                                  "KeyTable",
                                  "Responsive",
                                  "RowReorder",
                                  "Scroller",
                                  "Select"
                               ]
                            }
                         },
                         "options":{
                            "description":"Additional options (e.g. column specific).",
                            "type":"object",
                            "default": {"pageLength": 15, "decimals": 2},
                            "properties":{
                               "dom":{
                                  "description":"Defines where the table control elements appear (position) and in what order",
                                  "type":"string",
                                  "minLength":1
                               },
                               "buttons":{
                                  "description":"Buttons or groups of buttons to insert",
                                  "type":["array", "string"],
                                  "uniqueItems":true,
                                  "items":{
                                      "type": "string",
                                      "enum":["copy", "csv", "excel", "pdf", "print", "colvis"]
                                  }
                               },
                               "pageLength":{
                                  "description":"Number of items to display per page",
                                  "type":"integer",
                                  "minimum":1,
                                  "default":15
                               },
                               "decimals":{
                                  "description":"Integer that specifies the number of decimal places to use",
                                  "type":"integer",
                                  "minimum":0,
                                  "default":2
                               },
                               "columnDefs":{
                                  "description":"Column specific options.",
                                  "type":"array",
                                  "uniqueItems":true,
                                  "items":{
                                     "type":"object",
                                     "required": ["targets"],
                                     "properties":{
                                        "targets":{
                                           "anyOf":[
                                              {
                                                 "description":"Column numbers to refer to.",
                                                 "type":["array", "integer"],
                                                 "minimum":1,
                                                 "minItems":1,
                                                 "items":{
                                                    "type":"integer",
                                                    "minimum":1
                                                 }
                                              },
                                              {
                                                 "description":"Use _all_ to refer to all the columns",
                                                 "type":"string",
                                                 "minLength":1
                                              }
                                           ]
                                        },
                                        "className":{
                                           "type":"string",
                                           "minLength":1
                                        },
                                        "visible":{
                                           "type":"boolean"
                                        },
                                        "searchable":{
                                           "type":"boolean"
                                        }
                                     }
                                  }
                               }
                            }
                         }
                      },
                      "additionalProperties":false,
                      "required":[
                         "outType"
                      ]
                   },
                   {
                      "properties":{
                         "outType":{
                            "description":"Style of widget (table, pivottable, graph, graph+table).",
                            "type":"string",
                            "enum":[
                               "valueBox"
                            ]
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "options":{
                         "oneOf":[
                            {
                               "type": "object",
                               "additionalProperties":false,
                               "properties":{
                                  "width":{
                                     "description":"Width of the output element.",
                                     "type":"integer",
                                     "minimum":0,
                                     "default":4
                                  },
                                  "color":{
                                     "type":"string",
                                     "description":"Background color of value box",
                                     "minLength":0,
                                     "default":"aqua"
                                  },
                                  "icon":{
                                     "description":"icon for value box",
                                     "type":"object",
                                     "properties":{
                                        "name":{
                                           "type":"string",
                                           "description":"Name of icon. Icons are drawn from the Font Awesome and Glyphicons libraries.",
                                           "minLength":0
                                        },
                                        "lib":{
                                           "type":"string",
                                           "description":"Name of library where icon is from.",
                                           "enum":[
                                              "glyphicon",
                                              "font-awesome"
                                           ],
                                           "default":"font-awesome"
                                        }
                                     }
                                  }
                               }
                            },
                            {
                                "type": "array",
                                "items": [
                                   {
                                     "type": "object",
                                     "properties": {
                                          "type": "object",
                                          "additionalProperties":{
                                            "type":"object",
                                            "additionalProperties":false,
                                            "properties":{
                                              "icon": {
                                                "description": "Specify the icon to use for the valuebox",
                                                "type": "object",
                                                "properties": {
                                                  "name": {
                                                    "type": "string",
                                                    "minLength": 1
                                                  },
                                                  "lib": {
                                                    "description": "Specify the library to use for the valuebox icon",
                                                    "type": "string",
                                                    "minLength": 1
                                                  }
                                                },
                                                "required": [
                                                  "name",
                                                  "lib"
                                                ]
                                              },
                                              "color": {
                                                "description": "Specify the color to use for the valuebox",
                                                "type": "string",
                                                "minLength": 1
                                              },
                                              "description": {
                                                "description": "Custom description to use for the valuebox",
                                                "type": "string",
                                                "minLength": 1
                                              },
                                              "round": {
                                                 "description": "Specify the rounding to use for the valuebox value",
                                                 "type": ["integer", "string"],
                                                 "minLength": 1,
                                                 "minimum": 0
                                              }
                                            }
                                          }
                                        },
                                        "maxProperties": 12
                                   }
                                ]
                            }
                         ]
                         }
                      },
                      "additionalProperties":false,
                      "required":[
                         "outType"
                      ]
                   },
                   {
                      "properties":{
                         "outType":{
                            "description":"Style of widget (table, pivottable, graph, graph+table).",
                            "type":"string",
                            "enum":[
                               "pivot"
                            ]
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "height":{
                            "description":"Height of the output element.",
                            "type":"integer",
                            "minimum":0
                         },
                         "pivottable":{
                            "description":"Parameters used to customize pivottable (used to render input or output data).",
                            "type":"object",
                            "properties":{
                               "rows":{
                                  "description":"Array of the names of rows in the data.frame to prepopulate the rows of the pivot table.",
                                  "type":["array", "string"],
                                  "minLength":1,
                                  "uniqueItems":true,
                                  "minItems":0,
                                  "items":{
                                     "type":"string",
                                     "minLength":1
                                  }
                               },
                               "cols":{
                                  "description":"Array of the names of columns in the data.frame to prepopulate the columns of the pivot table.",
                                  "type":["array", "string"],
                                  "minLength":1,
                                  "uniqueItems":true,
                                  "minItems":0,
                                  "items":{
                                     "type":"string",
                                     "minLength":1
                                  }
                               },
                               "aggregatorName":{
                                  "description":"Aggregator to use (see enum for list of possible aggregators)",
                                  "type":"string",
                                  "enum":[
                                     "Count",
                                     "Count Unique Values",
                                     "List Unique Values",
                                     "Sum",
                                     "Integer Sum",
                                     "Average",
                                     "Median",
                                     "Sample Variance",
                                     "Sample Standard Deviation",
                                     "Minimum",
                                     "Maximum",
                                     "First",
                                     "Last",
                                     "Sum over Sum",
                                     "80% Upper Bound",
                                     "80% Lower Bound",
                                     "Sum as Fraction of Total",
                                     "Sum as Fraction of Rows",
                                     "Sum as Fraction of Columns",
                                     "Count as Fraction of Total",
                                     "Count as Fraction of Rows",
                                     "Count as Fraction of Columns"
                                  ],
                                  "default":"Count"
                               },
                               "vals":{
                                  "description":"String or Array of Strings name(s) of the column(s) in the data.frame to use with aggregatorName. Must be additive (i.e a number).",
                                  "type":["array", "string"],
                                  "items":{
                                     "type":"string"
                                  }
                               },
                               "rendererName":{
                                  "description":"Name of the renderer selected, e.g. Table, Heatmap, Treemap etc",
                                  "type":"string",
                                  "enum":[
                                     "Table",
                                     "Table Barchart",
                                     "Heatmap",
                                     "Row Heatmap",
                                     "Col Heatmap",
                                     "Treemap",
                                     "Horizontal Bar Chart",
                                     "Horizontal Stacked Bar Chart",
                                     "Bar Chart",
                                     "Stacked Bar Chart",
                                     "Line Chart",
                                     "Area Chart",
                                     "Scatter Chart"
                                  ],
                                  "default":"Table"
                               },
                               "locale":{
                                  "description":"Localization options",
                                  "type":"string",
                                  "enum":[
                                     "cs",
                                     "da",
                                     "de",
                                     "en",
                                     "es",
                                     "fr",
                                     "it",
                                     "nl",
                                     "pl",
                                     "pt",
                                     "ru",
                                     "sq",
                                     "tr",
                                     "zh"
                                  ],
                                  "default":"en"
                               },
                               "subtotals":{
                                  "description":"Should the subtotals plugin be used?",
                                  "type":"boolean",
                                  "default":false
                               },
                               "width":{
                                  "description":"width of pivottable",
                                  "type":"integer",
                                  "minimum":1
                               },
                               "height":{
                                  "description":"height of pivottable",
                                  "type":"integer",
                                  "minimum":1
                               }
                            }
                         }
                      },
                      "additionalProperties":true,
                      "required":[
                         "outType"
                      ]
                   },
                   {
                      "properties":{
                         "outType":{
                            "description":"Style of widget (table, pivottable, graph, graph+table).",
                            "type":"string",
                            "enum":[
                               "dtGraph",
                               "graph"
                            ]
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "height":{
                            "description":"Height of the output element.",
                            "type":"integer",
                            "minimum":0
                         },
                         "graph":{
                            "type":"object",
                            "description":"Graph display options",
                            "properties":{
                               "tool":{
                                  "type":"string",
                                  "enum":[
                                     "plotly",
                                     "dygraphs",
                                     "leaflet",
                                     "timevis"
                                  ]
                               },
                               "filter":{
                                 "type":"object",
                                 "description":"Add an interactive filter above the graph to slice the data",
                                 "additionalProperties":false,
                                 "properties":{
                                    "col":{
                                      "description":"Column to filter on",
                                       "type":"string",
                                       "minLength": 1
                                    },
                                    "multiple":{
                                       "description":"Allow multiple filter options to be selected",
                                       "type":"boolean",
                                       "default":false
                                    },
                                    "date":{
                                       "description":"Column to be filtered contains date data",
                                       "type":"boolean",
                                       "default":false
                                    },
                                    "label":{
                                      "description":"A label to be displayed above filter menu",
                                       "type":"string"
                                    }
                                 },
                                 "required":[
                                   "col"
                                 ]
                               }
                            },
                            "required":[
                               "tool"
                            ]
                         }
                      },
                      "additionalProperties":false,
                      "required":[
                         "outType",
                         "graph"
                      ]
                   },
                   {
                      "properties":{
                         "outType":{
                            "description":"Style of widget (table, pivottable, graph, graph+table).",
                            "type":"string",
                            "enum":[
                               "miroPivot"
                            ]
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "height":{
                            "description":"Height of the output element.",
                            "type":"integer",
                            "minimum":0,
                            "default":null
                         },
                         "options":{
                            "$ref": "#/definitions/miroPivotOptions"
                          }
                      },
                      "additionalProperties":false,
                      "required":[
                         "outType"
                      ]
                   },
                   {
                      "properties":{
                         "outType":{
                            "description":"Custom style.",
                            "type":"string",
                            "minLength":2,
                            "not":{
                               "enum":[
                                  "valueBox",
                                  "graph",
                                  "dtGraph",
                                  "datatable",
                                  "pivot",
                                  "miroPivot"
                               ]
                            }
                         },
                         "label":{
                            "description":"A label to be displayed above renderer (markdown supported)",
                             "type":"string"
                          },
                         "height":{
                            "description":"Height of the output element.",
                            "type":"integer",
                            "minimum":0
                         },
                         "packages":{
                            "description":"Packages that need to be installed",
                            "type":["array", "string"],
                            "minLength":2,
                            "minItems":1,
                            "uniqueItems":true,
                            "items":{
                               "type":"string",
                               "minLength":2
                            }
                         },
                         "options":{
                            "description":"Additional options",
                            "type":"object"
                         },
                         "additionalData":{
                           "description":"Specify additional symbols whose data should be handed to renderer. data parameter will be a named list of dataframes with names being symbol names",
                            "type":["array", "string"],
                            "minLength":1,
                            "minItems":1,
                            "uniqueItems":true,
                            "items":{
                               "type":"string",
                               "minLength":1
                            }
                         }
                      },
                      "additionalProperties":false,
                      "required":[
                         "outType"
                      ]
                   }
                ]
             }
          },
          "roundingDecimals":{
             "description":"Number of decimal places used for rounding output values.",
             "type":"integer",
             "minimum":0,
             "maximum":6,
             "default":2
          },
          "handsontable":{
             "description":"Parameters used to customize handsontables (spreadsheet like js-editor used to modify input data).",
             "type":"object",
             "default": {"height": 700, "search": true, "highlightCol": true, "default": true, "stretchH": "none",
               "columnSorting": true, "manualColumnMove": false, "manualColumnResize": true, "colWidths": 200,
               "contextMenu": {"enabled": true, "allowRowEdit": true, "allowColEdit": true, "allowReadOnly": false,
               "allowComments": true}
             },
             "properties":{
                "height":{
                   "description":"Height of handsontable.",
                   "type":"integer",
                   "exclusiveMinimum":0,
                   "default":600
                },
                "width":{
                   "description":"Width of handsontable.",
                   "type":"integer",
                   "exclusiveMinimum":0
                },
                "readonly":{
                   "description":"Defines whether handsontable can not be modified.",
                   "type":[
                      "boolean",
                      "null"
                   ]
                },
                "search":{
                   "description":"Defines whether handsontable can be accessed via search in browser.",
                   "type":"boolean",
                   "default":true
                },
                "highlightCol":{
                   "description":"Defines whether column of current active cell is highlighted.",
                   "type":"boolean",
                   "default":true
                },
                "highlightRow":{
                   "description":"Defines whether row of current active cell is highlighted.",
                   "type":"boolean",
                   "default":true
                },
                "rowHeaderWidth":{
                   "description":"Width of the row number/row header column.",
                   "type":"integer",
                   "exclusiveMinimum":0
                },
                "stretchH":{
                   "description":"Specifies whether table is stretched to full box width.",
                   "type":"string",
                   "enum":[
                      "none",
                      "last",
                      "all"
                   ],
                   "default":"none"
                },
                "columnSorting":{
                   "description":"Defines whether columns can be sorted in ascending/descending order (by clicking on column name in header row).",
                   "type":"boolean",
                   "default":true
                },
                "manualColumnMove":{
                   "description":"Defines whether columns can be manually moved (changed position).",
                   "type":"boolean",
                   "default":false
                },
                "manualColumnResize":{
                   "description":"Defines whether columns can be manually resized.",
                   "type":"boolean",
                   "default":true
                },
                "colWidths":{
                   "description":"Width of columns.",
                   "type":[
                      "string",
                      "number"
                   ],
                   "exclusiveMinimum":0,
                   "default":200
                },
                "fixedColumnsLeft":{
                   "description":"Number of columns fixed on the left.",
                   "type":"integer",
                   "exclusiveMinimum":0
                },
                "contextMenu":{
                   "description":"Options for customizing the handsontable context menu (accessible via right mouse click)",
                   "type":"object",
                   "additionalProperties":false,
                   "properties":{
                      "enabled":{
                         "description":"Defines whether context menu is activated (using right mouse click).",
                         "type":"boolean",
                         "default":true
                      },
                      "allowRowEdit":{
                         "description":"logical enabling row editing",
                         "type":"boolean",
                         "default":true
                      },
                      "allowColEdit":{
                         "description":"logical enabling column editing. Note that Handsontable does not support column add/remove when column types are defined (i.e. useTypes == TRUE in rhandsontable).",
                         "type":"boolean",
                         "default":true
                      },
                      "allowReadOnly":{
                         "description":"logical enabling read-only toggle",
                         "type":"boolean",
                         "default":false
                      },
                      "allowComments":{
                         "description":"Enable comments in table. Will be ignored when solving the model.",
                         "type":"boolean",
                         "default":true
                      }
                   }
                }
             }
          },
          "pivottable":{
             "description":"Parameters used to customize pivottable (used to render output data).",
             "type":"object",
             "additionalProperties":false,
             "properties":{
                "bgColor":{
                   "description":"Background color (of row and column headers)",
                   "type":"string",
                   "default":"#ffffff"
                }
             }
          },
          "datatable":{
             "description":"Parameters used to customize datatable (used to render output data).",
             "type":"object",
             "default": {"class": "display", "filter": "bottom", "rownames": false, "autoHideNavigation": false},
             "additionalProperties":false,
             "properties":{
                "class":{
                   "description":"css classes used for styling datatable",
                   "type":[
                      "array",
                      "string"
                   ],
                   "minItems":1,
                   "default":"display"
                },
                "filter":{
                   "description":"Whether and where to include column filter",
                   "type":"string",
                   "enum":[
                      "none",
                      "bottom",
                      "top"
                   ],
                   "default":"bottom"
                },
                "rownames":{
                   "description":"Boolean that specifies whether to show row names",
                   "type":"boolean",
                   "default":false
                },
                "autoHideNavigation":{
                   "description":"Boolean that specifies whether to automatically hide navigation elements when number of total records is less than page size",
                   "type":"boolean",
                   "default":false
                },
                "extensions":{
                   "description":"For a list of supported extensions see: https://rstudio.github.io/DT/extensions.html",
                   "type":["array", "string"],
                   "uniqueItems":true,
                   "items":{
                      "type":"string",
                      "enum":[
                         "AutoFill",
                         "Buttons",
                         "ColReorder",
                         "ColVis",
                         "FixedColumns",
                         "FixedHeader",
                         "KeyTable",
                         "Responsive",
                         "RowReorder",
                         "Scroller",
                         "Select"
                      ]
                   }
                },
                "options":{
                   "description":"Additional options (e.g. column specific).",
                   "type":"object",
                   "default": {"pageLength": 15},
                   "properties":{
                      "dom":{
                         "description":"Defines where the table control elements appear (position) and in what order",
                         "type":"string",
                         "minLength":1
                      },
                      "buttons":{
                         "description":"Buttons or groups of buttons to insert",
                         "type":["array", "string"],
                         "uniqueItems":true,
                         "items":{
                             "type": "string",
                             "enum":["copy", "csv", "excel", "pdf", "print", "colvis"]
                         }
                      },
                      "pageLength":{
                         "description":"Number of items to display per page",
                         "type":"integer",
                         "minimum":1,
                         "default":15
                      },
                      "columnDefs":{
                         "description":"Column specific options.",
                         "type":"array",
                         "uniqueItems":true,
                         "items":{
                            "type":"object",
                            "required": ["targets"],
                            "properties":{
                               "targets":{
                                  "anyOf":[
                                     {
                                        "description":"Column numbers to refer to.",
                                        "type":["array", "integer"],
                                        "minimum":1,
                                        "minItems":1,
                                        "items":{
                                           "type":"integer",
                                           "minimum":1
                                        }
                                     },
                                     {
                                        "description":"Use _all_ to refer to all the columns",
                                        "type":"string",
                                        "minLength":1
                                     }
                                  ]
                               },
                               "className":{
                                  "type":"string",
                                  "minLength":1
                               },
                               "visible":{
                                  "type":"boolean"
                               },
                               "searchable":{
                                  "type":"boolean"
                               }
                            }
                         }
                      }
                   }
                }
             }
          },
          "inputWidgetGroups":{
             "description": "Specify input widgets that shall be aggregated to groups",
             "type": "array",
             "minItems":1,
             "items":{
               "type":"object",
               "additionalProperties":false,
               "required": ["name", "members"],
               "properties":{
                  "name":{
                    "description":"Specify the name of the group as it is displayed in the UI",
                    "type":"string",
                    "minLength":1
                  },
                  "members":{
                    "description":"Specify the group members (input widgets)",
                    "type":["array", "string"],
                    "uniqueItems":true,
                    "minItems":1,
                    "items":{
                      "type":"string",
                      "minLength":1
                    }
                  },
                  "sameTab":{
                    "description":"Gather grouped symbols on same tab",
                    "type":"boolean",
                    "default":true
                  }
               }
             }
          },
          "inputGroups":{
             "description": "Specify input tables that shall be aggregated to groups",
             "type": "array",
             "minItems":1,
             "items":{
               "type":"object",
               "additionalProperties":false,
               "required": ["name", "members"],
               "properties":{
                  "name":{
                    "description":"Specify the name of the group as it is displayed in the UI",
                    "type":"string",
                    "minLength":1
                  },
                  "members":{
                    "description":"Specify the group members (input tables)",
                    "type":["array", "string"],
                    "uniqueItems":true,
                    "minItems":2,
                    "items":{
                      "type":"string",
                      "minLength":1
                    }
                  },
                  "sameTab":{
                    "description":"Gather grouped symbols on same tab",
                    "type":"boolean",
                    "default":false
                  }
               }
             }
          },
          "outputGroups":{
             "description": "Specify output tables that shall be aggregated to groups",
             "type": "array",
             "uniqueItems":true,
             "minItems":1,
             "items":{
               "type":"object",
               "additionalProperties":false,
               "required": ["name", "members"],
               "properties":{
                  "name":{
                    "description":"Specify the name of the group as it is displayed in the UI",
                    "type":"string",
                    "minLength":1
                  },
                  "members":{
                    "description":"Specify the group members (output tables)",
                    "type":["array", "string"],
                    "uniqueItems":true,
                    "items":{
                      "type":"string",
                      "minLength":1
                    }
                  },
                  "sameTab":{
                    "description":"Gather grouped symbols on same tab",
                    "type":"boolean",
                    "default":false
                  }
               }
             }
          },
          "customDataImport": {
            "description": "Import data using a custom function",
            "type": "array",
            "items":{
              "type":"object",
              "additionalProperties":false,
              "required": ["label", "functionName"],
              "properties":{
                "label":{
                  "description":"Label that is displayed when selecting the custom importer",
                  "type":"string",
                  "minLength":1
                 },
                 "symNames":{
                   "description":"Names of the symbols to import. Defaults to all symbols (input and output) if not provided or empty.",
                   "type":["array", "string"],
                   "minLength":1,
                   "uniqueItems":true,
                   "items":{
                     "type":"string",
                     "minLength":1
                   }
                  },
                  "functionName":{
                    "description":"Name of custom R function to call (required function signature: miroimport(symNames, localFile = NULL, ...), must return named list of data frames with correct number/type of columns). The names of the list must be identical to the names provided by symNames argument.",
                    "type":"string",
                    "default": "miroimport",
                    "minLength": 1
                  },
                 "localFileInput": {
                  "description":"Enable user to provide local file.",
                  "type":"object",
                  "additionalProperties": false,
                  "required": ["label"],
                  "properties": {
                    "label": {
                      "description":"Label of the local file input.",
                      "type": "string"
                    },
                    "multiple": {
                      "description":"Whether user is allowed to upload multiple files.",
                      "type": "boolean"
                    },
                    "accept": {
                      "description":"A character vector of unique file type specifiers which gives the browser a hint as to the type of file the server expects. Many browsers use this to prevent the user from selecting an invalid file.",
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "customDataExport": {
            "description": "Export data using a custom function",
            "type": "array",
            "items":{
              "type":"object",
              "additionalProperties":false,
              "required": ["label", "functionName"],
              "properties":{
                "label":{
                  "description":"Label that is displayed when selecting the custom exporter",
                  "type":"string",
                  "minLength":1
                 },
                 "symNames":{
                   "description":"Names of the symbols to export. Defaults to all symbols (input and output) if not provided or empty.",
                   "type":["array", "string"],
                   "minLength":1,
                   "uniqueItems":true,
                   "items":{
                     "type":"string",
                     "minLength":1
                   }
                  },
                  "functionName":{
                    "description":"Name of custom R function to call (required function signature: miroexport(data, ...) where data is a named list of data frames, where the names are the names of the symbols).",
                    "type":"string",
                    "default": "miroexport",
                    "minLength": 1
                  },
                  "localFileOutput": {
                    "description":"Enable user to download file.",
                    "type":"object",
                    "additionalProperties": false,
                    "required": ["filename"],
                    "properties": {
                      "filename": {
                        "description":"Name of the file (including extension) that users web browser should default to.",
                        "type":"string",
                        "minLength":1
                      },
                      "contentType": {
                        "description":"MIME type of the file to download. Defaults to application/octet-stream if file extension is unknown.",
                        "type":"string",
                        "minLength":1
                      }
                    }
                }
              }
            }
          },
          "remoteImport":{
            "description": "DEPRECATED: Please use customDataImport instead",
            "type": "array",
            "uniqueItems":true,
            "minItems":1,
            "items":{
              "type":"object",
              "additionalProperties":false,
              "required": ["name", "templates"],
              "properties":{
                "name":{
                  "description":"Specify a name for the remote import option",
                  "type":"string",
                  "minLength":1
                 },
                 "templates":{
                   "description":"Import templates",
                   "type": "array",
                   "uniqueItems":true,
                   "minItems":1,
                   "items":{
                     "type":"object",
                     "additionalProperties":false,
                     "required": ["symNames"],
                     "properties":{
                       "symNames":{
                         "description":"Names of the symbols to import",
                         "type":["array", "string"],
                         "minLength":1,
                         "uniqueItems":true,
                         "items":{
                           "type":"string",
                           "minLength":1
                         }
                        },
                        "source":{
                          "description":"Source of the data",
                          "type":"string",
                          "default": "REST",
                          "enum":[
                            "REST"
                          ]
                        },
                        "url":{
                          "description":"URL of REST API",
                          "type":"string",
                          "minLength": 10
                        },
                        "authentication":{
                          "description":"Basic authentication credentials (note that you must make sure to use HTTPS when using this, or your credentials will be transmitted in plain text!)",
                          "type":"object",
                          "additionalProperties":false,
                          "properties":{
                             "username": {
                              "description":"Username used for authentication",
                              "type":"string",
                              "minLength":1
                            },
                            "password": {
                              "description":"Password used for authentication",
                              "type":"string",
                              "minLength":1
                            },
                            "method": {
                              "description":"Authentication method",
                              "type":"string",
                              "enum":["basic"]
                            }
                          },
                          "required": ["username", "password"]
                        },
                        "method":{
                          "description":"HTTP method (of REST request)",
                          "type":"string",
                          "default": "GET",
                          "enum":[
                            "GET",
                            "POST",
                            "PATCH",
                            "DELETE",
                            "HEAD",
                            "PUT"
                          ]
                        },
                        "httpHeaders":{
                          "description":"Additional parameters to send alongside the request in the HTTP header",
                          "type": "array",
                          "minItems":1,
                          "items":{
                            "type":"object",
                            "additionalProperties":false,
                            "required": ["key", "value"],
                            "properties":{
                               "key":{
                                 "description":"Header key",
                                 "type":"string",
                                 "minLength":1
                               },
                               "value":{
                                 "description":"Header value",
                                 "type":"string",
                                 "minLength":1
                               }
                            }
                          }
                        },
                        "httpBody":{
                          "description":"Additional parameters to send alongside the request in the HTTP body",
                          "type": "array",
                          "minItems":1,
                          "items":{
                            "type":"object",
                            "additionalProperties":false,
                            "required": ["key", "value"],
                            "properties":{
                               "key":{
                                 "description":"Body key",
                                 "type":"string",
                                 "minLength":1
                               },
                               "value":{
                                 "description":"Body value",
                                 "type":"string",
                                 "minLength":1
                               }
                            }
                          }
                        },
                        "encode":{
                          "description": "How should data in body be encoded?",
                          "type": "string",
                          "enum": [
                            "multipart",
                            "form",
                            "json",
                            "raw"
                          ],
                          "default": "json"
                        }
                     }
                   }
                 }
              }
             }
          },
          "remoteExport":{
            "description": "DEPRECATED: Please use customDataExport instead",
            "type": "array",
            "uniqueItems":true,
            "minItems":1,
            "items":{
              "type":"object",
              "additionalProperties":false,
              "required": ["name", "templates"],
              "properties":{
                "name":{
                  "description":"Specify a name for the remote export option",
                  "type":"string",
                  "minLength":1
                 },
                 "templates":{
                   "description":"Export templates",
                   "type": "array",
                   "uniqueItems":true,
                   "minItems":1,
                   "items":{
                     "type":"object",
                     "additionalProperties":false,
                     "required": ["symNames"],
                     "properties":{
                        "symNames":{
                           "description":"Names of the symbols to export",
                           "type":["array", "string"],
                           "minLength":1,
                           "uniqueItems":true,
                           "items":{
                             "type":"string",
                             "minLength":1
                           }
                        },
                        "source":{
                          "description":"Type of exporter to use",
                          "type":"string",
                          "default": "REST",
                          "enum":[
                            "REST"
                          ]
                        },
                        "url":{
                           "description":"URL of REST API",
                           "type":"string",
                           "minLength": 10
                         },
                         "authentication":{
                            "description":"Basic authentication credentials (note that you must make sure to use HTTPS when using this, or your credentials will be transmitted in plain text!)",
                            "type":"object",
                            "additionalProperties":false,
                            "properties":{
                               "username": {
                                "description":"Username used for authentication",
                                "type":"string",
                                "minLength":1
                              },
                              "password": {
                                "description":"Password used for authentication",
                                "type":"string",
                                "minLength":1
                              },
                              "method": {
                                "description":"Authentication method",
                                "type":"string",
                                "enum":["basic"]
                              }
                            },
                            "required": ["username", "password"]
                          },
                         "method":{
                           "description":"HTTP method (of REST request)",
                           "type":"string",
                           "default": "POST",
                           "enum":[
                             "GET",
                             "POST",
                             "PATCH",
                             "DELETE",
                             "HEAD",
                             "PUT"
                           ]
                         },
                         "httpHeaders":{
                           "description":"Additional parameters to send alongside the request in the HTTP header",
                           "type": "array",
                           "minItems":1,
                           "items":{
                             "type":"object",
                             "additionalProperties":false,
                             "required": ["key", "value"],
                             "properties":{
                                "key":{
                                  "description":"Header key",
                                  "type":"string",
                                  "minLength":1
                                },
                                "value":{
                                  "description":"Header value",
                                  "type":"string",
                                  "minLength":1
                                }
                             }
                           }
                         },
                         "httpBody":{
                           "description":"Additional parameters to send alongside the request in the HTTP body",
                           "type": "array",
                           "minItems":1,
                           "items":{
                             "type":"object",
                             "additionalProperties":false,
                             "required": ["key", "value"],
                             "properties":{
                                "key":{
                                  "description":"Body key",
                                  "type":"string",
                                  "minLength":1
                                },
                                "value":{
                                  "description":"Body value",
                                  "type":"string",
                                  "minLength":1
                                }
                             }
                           }
                         }
                       }
                   }
                 }
               }
            }
          },
          "symbolLinks":{
            "description": "Link output symbols to input symbols so that input data can be populated from output sheets",
            "type": "array",
            "uniqueItems":true,
            "minItems":1,
            "items":{
              "type":"object",
              "additionalProperties":false,
              "required": ["source", "target"],
              "properties":{
                "source":{
                  "description":"Source symbol",
                  "type":"string",
                  "minLength":1
                },
                "target":{
                  "description":"Target symbol",
                  "type":"string",
                  "minLength":1
                }
              }
            }
          },
          "readme":{
            "type":"object",
            "additionalProperties":false,
            "properties":{
               "tabTitle": {
                "description":"README tab title",
                "type":"string",
                "minLength":1
              },
              "filename": {
                "description":"README file name",
                "type":"string",
                "minLength":4
              },
              "enableMath": {
                "description":"Enable rendering of mathematical notation wrapped either between $ (inline) or $$ (block style)",
                "type":"boolean"
              }
            }
          },
          "customCompareModules": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "Custom scenario comparison modules",
              "additionalProperties": false,
              "properties": {
                "id": {
                  "description": "Unique identifier of analysis module (a-z0-9)",
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 20
                },
                "label": {
                  "description": "Label to identify this analysis module",
                  "type": "string",
                  "minLength": 1
                },
                "externalRendererId": {
                  "description": "If you want to use the same renderer multiple times (e.g. with different options), you can specify the id of the renderer to be used here. If provided, the output function should be named mirocompare_Output, the renderer function: renderMirocompare_.",
                  "type": "string",
                  "minLength": 2,
                  "maxLength": 20
                },
                "packages": {
                  "description":"Packages that need to be installed",
                  "type":["array", "string"],
                  "minLength":2,
                  "minItems":1,
                  "uniqueItems":true,
                  "items":{
                      "type":"string",
                      "minLength":2
                  }
                },
                "options": {
                  "description": "Additional options",
                  "type": "object"
                }
              },
              "required": ["id", "label"]
            }
          },
          "scripts":{
            "type":"object",
            "description": "Specify external scripts that will be executed and the results displayed in MIRO",
            "additionalProperties":false,
            "properties":{
               "base": {
                 "type":"array",
                 "uniqueItems":true,
                 "items":{
                    "type":"object",
                    "description": "Scripts that will be displayed in the output section and feeded with both input and output data",
                    "additionalProperties":false,
                    "properties":{
                      "tabTitle": {
                        "description":"Tab title",
                        "type":"string",
                        "minLength":2
                      },
                      "id": {
                        "description":"Unique identifier of script",
                        "type":"string",
                        "minLength":2
                      },
                      "command": {
                        "description":"Command to be executed",
                        "type":"string",
                        "minLength":1
                      },
                      "args": {
                        "description":"Additional arguments to pass to command",
                        "type": ["array", "string"],
                        "items":{
                          "type":"string",
                          "minLength":1
                        }
                      },
                      "outputFile": {
                        "description":"Output filename that shall be displayed in MIRO once script is finished. Note that the file must be located inside the scripts folder.",
                        "type":"string",
                        "minLength":3
                      },
                      "markdown": {
                        "description": "Parse output as markdown?",
                        "type": "boolean"
                      },
                      "timeout": {
                        "description":"Timeout (seconds) when process shall be interrupted. -1 for infinity.",
                        "type":"integer",
                        "minimum":-1
                      }
                    },
                    "required": ["tabTitle", "id", "command", "outputFile"]
                 }
              },
              "hcube": {
                "type":"array",
                 "uniqueItems":true,
                 "items":{
                    "type":"object",
                    "description": "Scripts for analyzing batches of scenarios.",
                    "additionalProperties":false,
                    "properties":{
                      "title": {
                        "description":"Tab title",
                        "type":"string",
                        "minLength":2
                      },
                      "id": {
                        "description":"Unique identifier of script",
                        "type":"string",
                        "minLength":2
                      },
                      "command": {
                        "description":"Command to be executed",
                        "type":"string",
                        "minLength":1
                      },
                      "args": {
                        "description":"Additional arguments to pass to command",
                        "type": ["array", "string"],
                        "items":{
                          "type":"string",
                          "minLength":1
                        }
                      },
                      "outputFile": {
                        "description":"Output filename that shall be displayed in MIRO once script is finished",
                        "type":"string",
                        "minLength":3
                      },
                      "markdown": {
                        "description": "Parse output as markdown?",
                        "type": "boolean"
                      },
                      "timeout": {
                        "description":"Timeout (seconds) when process shall be interrupted. -1 for infinity.",
                        "type":"integer",
                        "minimum":-1
                      }
                    },
                    "required": ["title", "id", "command", "outputFile"]
                 }
              }
            }
          }
       }
    }