zanith

Tables surface

The daily database surface. Browse rows, edit cells, drill through foreign keys, run bulk operations, mask sensitive columns, edit JSON as a tree.

Browsing

ActionHow
Open a tableSidebar → table name. URL is permalink-safe (/db//tables/.).
FilterHeader bar + filter. Builds a typed where clause matching the engine's filter API.
SortClick a column header. Multi-sort with shift-click.
Find on page⌘F — searches loaded rows only, doesn't re-query.
FK drilldownCell with an FK link → arrow icon → opens the parent row in a side panel.

Editing

TXT
Single cell : double-click inline editor. Saves on blur or Enter.
Multiple cells : shift-click range bulk edit modal.
Insert row : header "+ row". Required columns highlighted; FK fields
get a typeahead from the parent table.
Delete rows : select checkboxes toolbar "delete". Confirmation modal
with the SQL preview before commit.

Every edit emits the same compiled query the engine would — it goes through the adapter, the plugin chain, and writes to the audit log just like an application query.

Bulk operations

OperationUse when
**Bulk update**Set the same value across the selection. SQL preview shown before commit.
**Bulk delete**Same shape — confirmation modal with row count.
**Export**Selection or full filtered query → CSV / JSONL / SQL INSERT statements.
**Import**CSV → pasted row append. Type-checks against the column types.

Sensitive masking

Columns marked sensitive in the schema render as **** by default. Click the eye icon to reveal — the action writes a row to the audit log. Studio respects the same field-level sensitive: true the engine reads from the schema.

TS
// Mark a field sensitive via the meta channel — Studio reads this flag and masks the column.
const User = defineModel((m) => ({
name: 'User', table: 'users',
fields: {
...m.id(),
email: m.string().meta({ sensitive: true }), // → masked in Studio by default
passwordHash: m.string().meta({ sensitive: true }),
},
}));

Special editors

TypeEditor
json / jsonbTree editor — expand keys, edit leaves, validate against an optional inline schema.
byteaHex / base64 toggle. Image preview if the bytes start with a known image header.
Array columnsPer-element editor with type-checked add/remove.
Range typesTwo-input editor with the inclusive/exclusive bracket toggles.