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 empty string",
                "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. (optional)",
                      "type":"string"
                   },
                   "filterVal":{
                     "description":"String (UEL) to filter by (optional)",
                      "type":"string"
                   }
                }
             },
             "pivotRenderer":{
               "description":"Sepcify the default renderer.",
                "type":"string",
                "enum": ["table", "heatmap", "line", "bar", "stackedbar", "radar"]
             },
             "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"
             },
             "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":"Color theme used for MIRO",
             "type":"string",
             "default":"browser",
             "enum":[
                "browser",
                "light",
                "dark"
             ]
          },
          "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 Comparison Mode",
             "type":"object",
             "additionalProperties":false,
             "properties":{
               "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
               }
             }
          },
          "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
                       },
                       "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
                        },
                        "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
                       },
                       "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
                       },
                       "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
                       },
                       "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
                       },
                       "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
                       },
                       "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",
                                "integer"
                             ],
                             "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
                                }
                              }
                           }
                        },
                        "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
                        }
                       },
                       "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":true
                   },
                   "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"
                            ]
                         },
                         "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"
                         },
                         "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":true
                         },
                         "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"
                            ]
                         },
                         "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"
                            ]
                         },
                         "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"
                            ]
                         },
                         "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":"ALabel 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"
                            ]
                         },
                         "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"
                               ]
                            }
                         },
                         "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",
                      "integer"
                   ],
                   "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": true},
             "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":true
                },
                "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
                  }
               }
             }
          },
          "remoteImport":{
            "description": "Import data from a remote service",
            "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":[
                            "customFunction",
                            "REST"
                          ]
                        },
                        "functionName":{
                          "description":"Only relevent if source==customFunction. Name of custom R function to call (required function signature: importCustom(symbolName, ...), must return data frame with correct number/type of columns).",
                          "type":"string",
                          "default": "importCustom",
                          "minLength": 1
                        },
                        "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": "Export data to a remote service",
            "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":[
                            "customFunction",
                            "REST"
                          ]
                        },
                        "functionName":{
                          "description":"Only relevent if method==customFunction. Name of custom R function to call (required function signature: exportCustom(symbolName, data, ...) ).",
                          "type":"string",
                          "default": "exportCustom",
                          "minLength": 1
                        },
                        "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"
              }
            }
          },
          "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"]
                 }
              }
            }
          }
       }
    }