Schema Configuration
The columns prop defines the data schema that drives editor suggestions. Keys are column names, values are column definitions.
Basic Schema
Section titled “Basic Schema”const columns = { level: { type: 'enum', suggest: true, autocomplete: true, values: ['debug', 'info', 'error'] }, service: { type: 'string', suggest: true, autocomplete: true }, status_code: { type: 'number', suggest: true }, host: { type: 'string', suggest: true },}Column Definition Fields
Section titled “Column Definition Fields”| Field | Type | Default | Description |
|---|---|---|---|
type | string | — | Column type: 'string', 'number', 'enum', 'object' |
suggest | boolean | true | Show this column in suggestions |
autocomplete | boolean | false | Enable value autocomplete for this column |
values | string[] or number[] | — | Static values for autocomplete (used before onAutocomplete callback) |
children | object | — | Nested column definitions for object-type columns |
display_name | string | '' | Optional user-friendly display name for the column. On parsed columns, the alias overrides this value |
Column Types
Section titled “Column Types”string
Section titled “string”General text column. All comparison operators are available including regex (~, !~).
{ type: 'string', suggest: true }number
Section titled “number”Numeric column. Regex operators (~, !~) are excluded from operator suggestions.
{ type: 'number', suggest: true }Enumerated column with a fixed set of values. Like number, regex operators are excluded. Use values to provide the set:
{ type: 'enum', suggest: true, autocomplete: true, values: ['debug', 'info', 'warning', 'error', 'critical'] }object
Section titled “object”Nested column with children. When the user types the column name followed by ., child columns are suggested:
{ type: 'object', suggest: true, children: { labels: { type: 'object', suggest: true, children: { tier: { type: 'string', suggest: true }, env: { type: 'string', suggest: true }, }, }, version: { type: 'string', suggest: true }, },}Value Autocomplete
Section titled “Value Autocomplete”Static Values
Section titled “Static Values”Provide a values array for columns with known options:
{ level: { type: 'enum', suggest: true, autocomplete: true, values: ['debug', 'info', 'warning', 'error', 'critical'], }, status_code: { type: 'number', suggest: true, autocomplete: true, values: [200, 201, 204, 400, 404, 500], },}Async Values
Section titled “Async Values”Set autocomplete: true without values and provide an onAutocomplete callback on the editor component. The callback is called when the user reaches the value position for that column.
// Column definition — no static values{ type: 'string', suggest: true, autocomplete: true }
// Editor callback fetches values from APIasync function onAutocomplete(key, value) { const resp = await fetch(`/api/values?column=${key}`) const data = await resp.json() return { items: data.values }}Nested Columns (JSONSchema)
Section titled “Nested Columns (JSONSchema)”Define nested structures using children on object-type columns:
const columns = { metadata: { type: 'object', suggest: true, children: { labels: { type: 'object', suggest: true, children: { tier: { type: 'string', suggest: true, autocomplete: true, values: ['dev', 'staging', 'prod'] }, env: { type: 'string', suggest: true, autocomplete: true }, }, }, version: { type: 'string', suggest: true }, }, },}Typing metadata. suggests labels and version. Typing metadata.labels. suggests tier and env. There is no depth limit.
Remote Key Discovery (Schemaless)
Section titled “Remote Key Discovery (Schemaless)”For object columns where the nested keys are not known at schema definition time, omit children and provide an onKeyDiscovery callback:
const columns = { request: { type: 'object', suggest: true }, // no children — triggers discovery}
async function onKeyDiscovery(columnName, segments) { const resp = await fetch(`/api/keys?column=${columnName}&path=${segments.join(',')}`) const data = await resp.json() return data.keys // Array<{ name: string, type?: string, hasChildren?: boolean }>}When the user types request., the callback is called with ('request', ['request']). Discovered keys are cached per activation session.
If a column has both children and onKeyDiscovery, the static children take priority.
Full Example
Section titled “Full Example”const columns = { // Enum with static values level: { type: 'enum', suggest: true, autocomplete: true, values: ['debug', 'info', 'error'] },
// String with async autocomplete service: { type: 'string', suggest: true, autocomplete: true },
// Number — excludes regex operators status_code: { type: 'number', suggest: true, autocomplete: true, values: [200, 400, 500] },
// Simple string host: { type: 'string', suggest: true },
// Nested with known children metadata: { type: 'object', suggest: true, children: { labels: { type: 'object', suggest: true, children: { tier: { type: 'string', suggest: true, autocomplete: true, values: ['dev', 'staging', 'prod'] }, env: { type: 'string', suggest: true, autocomplete: true }, }, }, version: { type: 'string', suggest: true }, }, },
// Schemaless — nested keys discovered at runtime request: { type: 'object', suggest: true },}