Skip to content
Keboola Docs

Configuration Schema

The default input for a component configuration is a JSON text area.

Generic configuration screenshot

If you define a JSON schema, we are able to display a nice form and let the user to fill the JSON using a set of defined inputs.

Configuration schema

Using the configuration schema also allows us to validate the user input on frontend.

JSON schemas are well documented on the json-schema.org website.

We use RJSF (React JSON Schema Form) for rendering schemas into forms. The schema supports standard JSON Schema properties as well as custom extensions documented in UI Element Examples and Sync Action Examples.

The following format values are supported in property definitions. The Type column shows the underlying JSON Schema type; italicized entries are descriptive notes, not literal type values.

FormatTypeDescription
passwordstringMasked password input with show/hide toggle
textareastringMulti-line text area
editorstring/objectCodeMirror code editor (JSON, SQL, Python, etc.)
datestringDate picker input
checkboxbooleanCheckbox toggle
radiostringRadio button group (requires enum)
trimstringStandard text input with automatic whitespace trimming
grid / grid-strictobjectResponsive grid layout for grouped fields
tabs / tabs-top / categoriesobjectTabbed layout for grouped fields
tablearrayEditable table for arrays of objects
infoany JSON Schema typeStatic informational alert (uses title as message; Keboola UI extension)
ssh-editorobjectSSH key/form editor
sync-actionKeboola UI button widgetAction button triggering a sync action (not a JSON Schema type)
test-connectionKeboola UI button widgetConnection test button (not a JSON Schema type)

The following options keys can be used in property definitions:

OptionDescription
options.asyncDynamic option loading via sync actions. See Sync Action Examples.
options.dependenciesConditional field visibility based on other field values. See Dynamic Options.
options.tagsEnable tag-style input for multi-select arrays
options.creatableAllow user-created values in select dropdowns
options.tooltipHelp text displayed as a tooltip icon next to the field label. Supports Markdown syntax.
options.documentationDocumentation link rendered as a book icon next to the field label. Value: { "link": "https://...", "tooltip": "optional hover text" }
options.enum_titlesDisplay labels for enum values
options.hiddenHide the field from the UI
options.collapsedStart object sections in collapsed state
options.disable_collapsePrevent collapsing of object sections
options.enabledSet to false to disable a field
options.grid_columnsNumber of grid columns (1–12) in grid/grid-strict layouts
options.grid_breakForce a new row in grid layouts
options.editorCodeMirror editor options: mode, lineNumbers, lint, input_height
options.input_heightHeight for textarea fields (e.g., "100px")
options.inputAttributesHTML input attributes (e.g., placeholder)
options.only_keysSSH editor variant showing only key fields
options.disable_array_addDisable adding items to arrays
options.disable_array_deleteDisable removing items from arrays
options.disable_array_reorderDisable reordering items in arrays

When building or iterating on a configuration schema, you need a way to see how your JSON schema renders as a form. The recommended approach is to use the live schema editor built into the Keboola UI.

Section titled “Live Schema Editor in Keboola UI (Recommended)”

The Keboola UI includes a built-in live schema editor that lets you edit a JSON schema and immediately see the rendered form side by side. This is the fastest way to iterate on your schema during development.

  1. Open any component configuration page in the Keboola UI (e.g., https://connection.keboola.com/admin/projects/<project-id>/components/<component-id>/<config-id>).
  2. Press Ctrl+D (or Alt+D / Option+D on Mac) while on the configuration page.
  3. Use the arrow button in the panel toolbar to move the editor to the left or right side of the screen.
  4. Click the checkmark button to apply the schema override for the current browser session.
  5. Press Ctrl+D again (or click the close button) to hide the editor.

This editor uses the same RJSF rendering library as the production UI, so what you see in the editor is exactly what end users will see. The override is local to your browser session — it does not change the schema registered in the Developer Portal.

You can also use the build-component-ui skill from the Keboola AI Kit to generate or refine configuration schemas using AI. The skill is an expert agent specialized in:

  • Designing configSchema.json and configRowSchema.json structures
  • Using options.dependencies for conditional field visibility
  • Choosing the right UI elements and formats
  • Setting up sync actions for dynamic dropdowns and test connection buttons

To use it, install the Keboola AI Kit as a Claude Code plugin and invoke the @build-component-ui agent. Describe your component’s configuration needs and it will produce a complete schema following Keboola conventions and best practices.

Let’s assume your component accepts the following configuration:

{
"username": "foo",
"#password": "baz",
"dateFrom": "yesterday",
"dateTo": "today"
}

This looks like an appropriate form:

Configuration form

The form above can be created using this JSON Schema:

{
"title": "Parameters",
"type": "object",
"required": [
"dateFrom",
"dateTo",
"username",
"#password"
],
"properties": {
"username": {
"title": "Username",
"type": "string",
"minLength": 1,
"default": "",
"propertyOrder": 1
},
"#password": {
"title": "Password",
"type": "string",
"format": "password",
"minLength": 1,
"default": "",
"propertyOrder": 2
},
"dateFrom": {
"title": "Date from",
"type": "string",
"description": "Any date accepted by strtotime (https://www.php.net/manual/en/function.strtotime.php) function",
"minLength": 1,
"default": "",
"propertyOrder": 3
},
"dateTo": {
"title": "Date to",
"type": "string",
"description": "Any date accepted by strtotime (https://www.php.net/manual/en/function.strtotime.php) function",
"minLength": 1,
"default": "",
"propertyOrder": 4
}
}
}

If you want to provide links to external resources, use options.documentation to add a clickable documentation icon next to the field label:

{
"dateFrom": {
"title": "Date from",
"type": "string",
"description": "Any date accepted by the strtotime function",
"options": {
"documentation": {
"link": "https://www.php.net/manual/en/function.strtotime.php",
"tooltip": "strtotime Documentation"
}
}
}
}

The old links property is no longer supported. If you have existing schemas using it, migrate to options.documentation:

{
"title": "Parameters",
"type": "object",
"required": [
"dateFrom",
"dateTo",
"username",
"#password"
],
"properties": {
"username": {
"title": "Username",
"type": "string",
"minLength": 1,
"default": "",
"propertyOrder": 1
},
"#password": {
"title": "Password",
"type": "string",
"format": "password",
"minLength": 1,
"default": "",
"propertyOrder": 2
},
"dateFrom": {
"title": "Date from",
"type": "string",
"description": "Any date accepted by the strtotime function",
"minLength": 1,
"default": "",
"propertyOrder": 3,
"links": [
{
"rel": "strtotime Documentation",
"href": "https://www.php.net/manual/en/function.strtotime.php"
}
]
},
"dateTo": {
"title": "Date to",
"type": "string",
"description": "Any date accepted by the strtotime function",
"minLength": 1,
"default": "",
"propertyOrder": 4,
"links": [
{
"rel": "strtotime Documentation",
"href": "https://www.php.net/manual/en/function.strtotime.php"
}
]
}
}
}

Which renders like this:

Configuration Schema with links

The following features are still supported for backwards compatibility but have preferred alternatives:

  • enumSource / watch — Dynamic enum population based on other field values. For new schemas, prefer options.async with sync actions instead. See Sync Action Examples.

The following features from the legacy JSON Editor library are no longer supported:

  • links — Clickable links on field descriptions. Use options.documentation with link and optional tooltip instead.
Ask Kai

Ask anything about Keboola — I'll search the docs and cite the pages I use.