Skip to content

Schema Configuration

The columns prop defines the data schema that drives editor suggestions. Keys are column names, values are column definitions.

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 },
}
FieldTypeDefaultDescription
typestringColumn type: 'string', 'number', 'enum', 'object'
suggestbooleantrueShow this column in suggestions
autocompletebooleanfalseEnable value autocomplete for this column
valuesstring[] or number[]Static values for autocomplete (used before onAutocomplete callback)
childrenobjectNested column definitions for object-type columns
display_namestring''Optional user-friendly display name for the column. On parsed columns, the alias overrides this value

General text column. All comparison operators are available including regex (~, !~).

{ type: 'string', suggest: true }

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'] }

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 },
},
}

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],
},
}

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 API
async function onAutocomplete(key, value) {
const resp = await fetch(`/api/values?column=${key}`)
const data = await resp.json()
return { items: data.values }
}

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.

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.

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 },
}