> For the complete documentation index, see [llms.txt](https://help.bioinsight.illumina.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://help.bioinsight.illumina.com/connected-analytics/project-web-ui/p-flow/pipelines-new-view/json-based-input-forms/inputform-json.md).

# inputForm.json

## inputForm.json

The JSON schema allowing you to define the input parameters. See the [JSON Schema](/connected-analytics/project-web-ui/p-flow/pipelines-new-view/json-based-input-forms/inputform-json/inputform.json-syntax.md) page for syntax details.

{% hint style="info" %}
The inputForm.json file has a size limit of 10 MB and a maximum of 200 fields.
{% endhint %}

## Field types <a href="#pipelineinputforms-parametertypes" id="pipelineinputforms-parametertypes"></a>

<table><thead><tr><th width="165.84075927734375">Type</th><th>Usage</th></tr></thead><tbody><tr><td>checkbox</td><td>A <strong>true/false</strong> checkbox that supports the option of being required, for example when you want the checkbox checked to accept the terms of use. This is done by setting minValues is to 1. (corresponds to the booleanType in xml).</td></tr><tr><td>data</td><td>Data such as <strong>files</strong>. The optional <em>nameFilter</em> is a data filename filter pattern for parts of the expected filename.</td></tr><tr><td>disclosureSection</td><td>The disclosure section is an <strong>expandable section</strong> containing <strong>fields</strong> which can be used to hide seldom used options in the input form. The fields in this section are <strong>always validated</strong>, even if it is collapsed.<br>Supported attributes are <em>id</em>, <em>type</em>, <em>label</em>, <em>helpText</em>, <em>tooltipText</em>, <em>value</em>, <em>hidden and</em> <em>updateRenderOnChange</em></td></tr><tr><td>featureSection</td><td>Feature sections are preceded by a checkbox. When the checkbox is <strong>checked</strong>, the section expands to show the <strong>fields</strong> inside the section and their <strong>content is validated</strong>. When the checkbox is <strong>unchecked</strong>, the section collapses and the <strong>fields inside the section are not validated</strong>. This type is best suited for toggling a feature or step in a pipeline on or off. FeatureSections can contain disclosureSections.<br>Supported attributes are <em>id</em>, <em>type</em>, <em>label</em>, <em>helpText</em>, <em>tooltipText</em>, <em>value</em>, <em>hidden</em>, <em>updateRenderOnChange</em> and <em>disabled</em>.</td></tr><tr><td>fieldgroup</td><td>Can contain parameters or other groups. Useful for <strong>building complex data structures</strong>. Can have repeating sets of parameters, for instance when a father/mother/child choice needs to be linked to each file input. So if you want to have the same elements multiple times in your form, combine them into a fieldgroup.<br>Fieldgroups do not support the emptyValuesAllowed attribute.</td></tr><tr><td>integer</td><td>Corresponds to java <strong>Integer</strong>. Supports min and max values.</td></tr><tr><td>number</td><td>The value is of <strong>Number</strong> type in javascript and <strong>Double</strong> type in java. (corresponds to doubleType in xml).</td></tr><tr><td>radio</td><td>A radio button group to <strong>select one from a list of choices</strong>. The values to choose from must be unique.</td></tr><tr><td>section</td><td>For <strong>splitting up fields</strong>, to give structure to the form. Rendered as subtitles. No values are to be assigned to these fields.</td></tr><tr><td>select</td><td>A <strong>dropdown</strong> selection to select one from a list of choices. This can be used for both single-level lists and tree-based lists. A choice entry set to <em>disabled</em> can be helpful to build the hierarchy tree without being selectable.</td></tr><tr><td>text</td><td>To <strong>display informational messages</strong>. No values are to be assigned to these fields.</td></tr><tr><td>textbox</td><td>Corresponds to <strong>stringType</strong> in xml. Supports regex and length limitations.</td></tr></tbody></table>

## Field Parameter Attributes <a href="#pipelineinputforms-parameterattributes" id="pipelineinputforms-parameterattributes"></a>

These attributes can be used to configure the fields.

<table><thead><tr><th width="217.51953125">Attribute</th><th>Purpose</th></tr></thead><tbody><tr><td>choices</td><td><p>A <strong>list of choices</strong> with for each a <em>value</em>, <em>text</em> (is label), <em>selected</em> (only 1 true supported), disabled.</p><p><em>parent</em> can be used to build hierarchical choice trees.</p><p><em>availableWhen</em> can be used for conditional presence of the choice based on values of other fields.</p><p>Parent and value must be unique, you cannot use the same value for both.</p></td></tr><tr><td>dataFilter</td><td>For defining the filtering when type is 'data'. Use <strong>nameFilter</strong> for matching the name of the file, <strong>dataFormat</strong> for file format and <strong>dataType</strong> for selecting between files and directories. (<em>To see the data formats, open the file details in Platform Core and look at the Format on the data details. You can expand the dropdown list to see the syntax.)</em> The <strong>dataType="file"</strong> also accepts S3 and HTTP(S) URLs.</td></tr><tr><td>disabled</td><td>Shows the parameter but makes editing it impossible. The value can still be altered by onRender.js.</td></tr><tr><td>dropValueWhenDisabled</td><td>When this is present and true and the field has <em>disabled</em> being true, then the value will be omitted during the submit handling (on the onSubmit result).</td></tr><tr><td>emptyValuesAllowed</td><td>When maxValues is 1 or not set and emptyValuesAllowed is true, the values may contain null entries. Default is false.</td></tr><tr><td>fields</td><td>The list of sub fields for type fieldgroup.</td></tr><tr><td>helpText</td><td>A helper text about the parameter. Will be displayed in smaller font with the parameter.</td></tr><tr><td>hidden</td><td>Makes this parameter hidden. Can be made visible later in onRender.js or can be used to set hardcoded values of which the user should be aware.</td></tr><tr><td>label</td><td>The display label for this parameter. Optional but recommended, id will be used if missing.</td></tr><tr><td>max</td><td><p>Maximal allowed value for '<strong>integer</strong>' and '<strong>number</strong>' type.</p><ul><li>for 'integer' type fields the minimal and maximal values are -100000000000000000 and 100000000000000000.</li><li>for 'number' type fields the max precision is 15 significant digits and the exponent needs to be between -300 and +300.</li></ul></td></tr><tr><td>min</td><td><p>Minimal allowed value for '<strong>integer</strong>' and '<strong>number</strong>' type.</p><ul><li>for 'integer' type fields the minimal and maximal values are -100000000000000000 and 100000000000000000.</li><li>for 'number' type fields the max precision is 15 significant digits and the exponent needs to be between -300 and +300.</li></ul></td></tr><tr><td>maxValues</td><td>The maximal amount of values that need to be present. Default when not set is 1.</td></tr><tr><td>minValues</td><td>The minimal amount of values that needs to be present. Default when not set is 0. Set to >=1 to make the field required.</td></tr><tr><td>minMaxValuesMessage</td><td>The error message displayed when minValues or maxValues is not adhered to. When not set, a default message is generated.</td></tr><tr><td>maxLength</td><td>Only applied on type="textbox". Value is a positive integer.</td></tr><tr><td>minLength</td><td>Only applied on type="textbox". Value is a positive integer.</td></tr><tr><td>placeHolderText</td><td>An optional short hint ( a word or short phrase) to aid the user when the field has no value.</td></tr><tr><td>regex</td><td>The regex pattern the value must adhere to. Only applied on type="textbox".</td></tr><tr><td>regexErrorMessage</td><td>The optional error message when the value does not adhere to the "regex". A default message will be used if this parameter is not present. It is highly recommended to set this as the default message will show the regex which is typically very technical.</td></tr><tr><td>tooltipText</td><td>An optional HTML markdown-formatted text describing detail what the user is expected to enter in the field. This text is displayed when selecting the (i) icon next to the field and is avaialble for every field type.</td></tr><tr><td>updateRenderOnChange</td><td>When true, the onRender javascript function is triggered each time the user changes the value of this field. Default is false.</td></tr><tr><td>value</td><td>The value of the parameter. Can be considered default value. Can be an array for multi-value fields. For number-type values the exponent needs to be between -300 and +300 and max precision is 15. For integer-type values the value needs to between -100000000000000000 and 100000000000000000"</td></tr></tbody></table>

## Examples

### disclosureSection vs featureSection

**Disclosure** **sections** **always** have their fields **validated** while **feature sections** only have their fields **validated when the checkbox is checked** and thus their contents are expanded.

Use disclosure sections to hide complexity, but still take the values of that section into account. Use feature sections to enable or disable parts of your pipeline.

The following code is an example `inputForm.json` with both collapsible section types.

<pre class="language-json" data-overflow="wrap" data-expandable="true"><code class="lang-json">{
  "fields": [
        {
        "id":"MyFeatureSection",
<strong>        "type": "featureSection",
</strong>        "label": "My featureSection Settings",
        "tooltipText":"My tooltip text",
        "fields": [
            {
            "id": "email_feature",
            "type": "textbox",
            "label": "email",
            "helpText": "This is where you enter the destination email adress",
            "value": ""
             },
            {
            "id": "plaintext_email_feature",
            "type": "checkbox",
            "label": "plaintext_email",
            "helpText": "Send plain-text email instead of HTML.",
            "value": false
            }
            ]
        },
        {
        "id":"disclosure",
<strong>        "type": "disclosureSection",
</strong>        "label": "My DisclosureSection",
        "fields": [
            {
            "id": "email_disclosure",
            "type": "textbox",
            "label": "email",
            "helpText": "This is where you enter the originating email adress",
            "value": ""
            },
            {
            "id": "plaintext_email_disclosure",
            "type": "checkbox",
            "label": "plaintext_email",
            "helpText": "Send plain-text email instead of HTML.",
            "value": false
            }
            ]
        }
    ]
}
</code></pre>

<figure><img src="https://3193631692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWUqIqZhOK_i4HqCUpT%2Fuploads%2Fgit-blob-9ef21116e556bd4dae783f288e0a65fc1eca7bfc%2Fimage%20(7)%20(2).png?alt=media" alt="" width="354"><figcaption></figcaption></figure>

### Tooltip vs Placeholder example

The tooltip text is only displayed when you hover over the (i) symbol next to the field and can be used for extensive explanations with formatting. The placeholder text is limited in size and only shown when no value has been entered in the field.

{% code overflow="wrap" expandable="true" %}

```json
{  
"id":"markup",
"type":"textbox",
"label":"markup field",
"tooltipText":"<font color='#FF0000' size='48'><b>Formatted</b></font><br><font color='green' size='24'><b>text</font>",
"placeHolderText":"Enter the information for this field"
}
```

{% endcode %}

<figure><img src="https://3193631692-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-MWUqIqZhOK_i4HqCUpT%2Fuploads%2Fgit-blob-b0ebf042c007a4cd0515e305dcbbaa8845992931%2Fimage%20(154).png?alt=media" alt=""><figcaption></figcaption></figure>

<details>

<summary>Tree structure example</summary>

"choices" can be used for a single list or for a tree-structured list. See below for an example for how to set up a tree structure.

```json
{
  "fields": [
    {
      "id": "myTreeList",
      "type": "select",
      "label": "Selection Tree Example",
      "choices": [
        {
          "text": "trunk",
          "value": "treetrunk"
        },
        {
          "text": "branch",
          "value": "treebranch",
          "parent":"treetrunk"
        },
        {
          "text": "leaf",
          "value": "treeleaf",
          "parent":"treebranch"
        },
        {
          "text": "bird",
          "value": "happybird",
          "parent":"treebranch"
        },
        {
          "text": "cat",
          "value": "cat",
          "parent": "treetrunk",
          "disabled": true
        }
      ],
      "minValues": 1,
      "maxValues": 3,
      "helpText": "This is a tree example"
    }
  ]
}
```

</details>

## Experimental Features

<table><thead><tr><th width="267">Feature</th><th></th></tr></thead><tbody><tr><td>Streamable inputs</td><td>Adding <code>"streamable":true</code> to an input field of type "<strong>data</strong>" makes it a streamable input.</td></tr></tbody></table>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://help.bioinsight.illumina.com/connected-analytics/project-web-ui/p-flow/pipelines-new-view/json-based-input-forms/inputform-json.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
