Upgrading to 1.0
This page maps each spelling an App written for tablewalk 0.8 or 0.9 used to the one 1.0 takes.
An old key is never read as the new one. mistri check and the server’s start refuse it by name and say what to write
instead, so fix them one at a time. The changelog has the reason for each change.
Two commands
Section titled “Two commands”The App framework is mistri; tablewalk is the database browser alone. Every
command that names an App moved, and tablewalk refuses the old spelling with
the npx mistri … line to type instead.
| 0.8 / 0.9 spelling | 1.0 spelling |
|---|---|
npx tablewalk --app . --config tablewalk.json |
npx mistri --app . --config tablewalk.json, or npx mistri dev while you work |
tablewalk check, build, shot, grade, docs, agent, new, jobs, flows and the rest |
mistri check, mistri build, … (the same words) |
tablewalk migrate … --app <dir>, migrate stores, migrate files |
mistri migrate … |
tablewalk seed --app <dir> |
mistri seed --app <dir> |
tablewalk <db> --scaffold-app |
mistri <db> --scaffold-app |
tablewalk migrate and seed on a database with no App |
unchanged: tablewalk migrate, tablewalk seed |
tablewalk <db> --mcp, the browser’s tools |
unchanged; an App’s tools are mistri --app-mcp |
The App definition
Section titled “The App definition”| Since | 0.8 / 0.9 spelling | 1.0 spelling |
|---|---|---|
| 0.9.9 | dashboard refresh: '30 seconds' |
removed: dashboards follow changes live, and re-read each minute |
| 0.9.9 | SplitListDetail props isCurrent, listWidth, expandList, sentenceTitle (tablewalk/ui) |
removed from the public type: the shell sets them for its own rooms |
| 0.9.9 | ui: { connect: [...], images: [...] } |
ui: { csp: { connect: [...], images: [...] } } |
| 0.9.9 | landing hero.text, callToAction.text, and features / steps items { title, text } |
description (a text section and the footer keep text) |
| 0.9.9 | list filter { has: 'opportunity', via: 'account_id' } |
whose: 'account_id' (the query language keeps any opportunity via account_id) |
| 0.9.9 | first-run step title |
label |
| 0.9.9 | dashboard embed(view, { tab: 'All open' }), the tab’s label |
tab: 'all-open', its address word (?tab=); a label is refused naming the word |
| 0.9.9 | notify rule open: 'thread_id' |
opens: 'thread_id' |
| 0.9.9 | ui.shell.title: false |
ui.shell.heading: false |
| 0.9.9 | consumes / restocks refuse: '…' |
message: '…' |
| 0.9.6 | dashboard layout: [...] (its grid) |
areas: [...] |
| 0.9.6 | custom section totals, CustomTotal, CustomDashTotal, TotalValue, TotalGroup |
figures, CustomFigure, CustomDashFigure, FigureValue, FigureGroup |
| 0.9.6 | funnel stage title |
label |
| 0.9.6 | page layout: 'listing' |
layout: 'showcase' |
| 0.9.6 | resource search with a "kind": "search" connection |
removed |
| 0.9.5 | chart funnel shape |
funnel() section |
| 0.9.5 | related list or section empty: false |
empty: 'hide' |
| 0.9.5 | page('Title', 'resource', [...]), document('Title', ...) |
page('resource', [...]), document(...) |
| 0.9.5 | money(), number(), percent(), relative(), items(), tones() |
plain display rules: { format: 'money', currency }, { tone: {…} } |
| 0.9.5 | metric(..., { view }) |
to |
| 0.9.5 | ui.shell.workbench |
removed: an App serves no Workbench |
| 0.9.5 | App page related list sizing |
a list view with sizing: 'scroll' |
| 0.9.4 | notify via: {…} |
send: { channel, to, consent, timezone? } |
| 0.9.2 | query status in onBench (a machine group) |
status is onBench |
| 0.9.1 | list tabs: [{ label, query }] |
segments on the resource, tabs: ['open', { segment, sort }] |
| 0.9.0 | target/table on lists, dashboards and sections; resource on blocks, backdrops and fields; auth.me.table |
from |
| 0.9.0 | reference field value; link { from }; latest(..., { by }) |
by; { column }; sort |
| 0.9.0 | role from (claims) |
claims |
| 0.9.0 | role supportLog: true, supportAudit: true |
operations: ['support'] |
| 0.9.0 | timeline and stream tint; display icon/tags tone naming a column |
tone; toneOf |
| 0.9.0 | label naming a column (mentions, groups, templates, backdrops) |
labelColumn |
| 0.9.0 | calendar backdrop from / to |
start / end |
| 0.9.0 | cards lines; queue and split facts |
properties |
| 0.9.0 | timeline order: 'asc' | 'desc' |
newest: 'last' | 'first' |
| 0.9.0 | fields or list section edit |
editable |
| 0.9.0 | fields(..., { presentation: 'card' }) |
card(title, 'reference', [...]) |
| 0.9.0 | fields(..., { presentation: 'headline', ... }) |
headline('column', { links, subfigure, was, note }) |
| 0.9.0 | fact { column, label, position: 'before' } |
{ column, before } / { column, after } |
| 0.9.0 | related(..., whose, { about }), similar(title, from, match) |
related(title, from, { same, near? }) |
| 0.9.0 | App page section hidden, offsetLeft, sizing, names: false |
removed (tablewalk.json pages keep them) |
| 0.9.0 | action kind: 'primary' | 'secondary'; JSON kind: 'cta' |
intent; kind: 'callToAction' |
| 0.9.0 | list filterBar: true | false |
filterBar: 'bar' | 'rail' | 'none' |
| 0.9.0 | list or New form open: 'peek' |
open: 'drawer' |
| 0.9.0 | list keys |
shortcuts |
| 0.9.0 | New form line title |
label |
| 0.9.0 | empty and done states message; first run text |
description |
| 0.9.0 | funnel step action; collect: ['actions'] |
command; collect: ['commands'] |
| 0.9.0 | fromRecord base, brandColor; branding.allow: ['theme'] |
preset, accent; ['preset'] |
| 0.9.0 | ui.shell.menu |
leave out nav |
| 0.9.0 | ui.theme: defineTheme(...) |
ui.customThemes: [theme], ui.theme: { preset: '<its id>' } |
| 0.9.0 | machine state at: { due_at: 'breach' } |
resource at: { due_at: { command, when } } |
| 0.9.0 | flagSegments; flag or experiment segments |
root audiences; audiences: [...] |
| 0.9.0 | flag or experiment eligibility: { roles, tenants } |
eligibility: { audiences: [...] } |
| 0.9.0 | messages(ns, {...}), copy(catalog, key) |
messages/<locale>.ts with defineMessages, and msg('ns.key') |
| 0.9.0 | assistant confirm: 'writes' |
removed: a write always waits for the person |
| 0.8.5 | resource access: 'read' |
leave it out: a resource is read by default |
| 0.8.5 | statusCheck.shows, stepUp.shows |
show |
| 0.8.5 | form.visibleIf; validation if |
form.when; when |
| 0.8.5 | validation { kind, field, operator, other, value } |
{ must: 'a >= b', when?, message } |
| 0.8.5 | landing hero.headline; fromRecord headline |
hero.heading; heading |
| 0.8.5 | onlyOn on App pages |
removed |
| 0.8.5 | versionField |
the version column |
| 0.8.5 | when: { status: [...] } |
when: 'status = open' |
| 0.8.5 | list presentation: { kind: 'board' | 'split' } |
board: {...} / split: {...} |
| 0.8.5 | sort, show or limit inside query |
the view’s or tab’s sort |
| 0.8.5 | durations '5m', '30s', …Hours keys |
'30 seconds', '5 minutes' |
| 0.8.5 | defineEvent with a fields list |
defineEvent(name, shape({...})) |
| 0.8.5 | a landing’s own footer |
ui.footer |
| 0.8.5 | command group help; related create fill |
description; prefill |
| 0.8.0 | count(), total(), countBy(); list() section |
metric / breakdown with whose; rows() |
Themes
Section titled “Themes”| Since | 0.8 / 0.9 spelling | 1.0 spelling |
|---|---|---|
| 0.9.6 | display rule face: 'sans' |
face: 'ui' |
| 0.9.6 | type role face: 'mono' |
face: 'code' |
| 0.9.6 | recipes.head |
recipes.header |
| 0.9.6 | nav.currentInk |
nav.onCurrent |
| 0.9.4 | type.scale, type.headingWeight |
type.roles.title.size (or type.base), type.roles.title.weight |
| 0.9.4 | recipes.labels, recipes.figures, recipes.headings |
type.roles.label, .figure, .section |
| 0.9.4 | colors.*.rules.weight, rules.control |
shape.border.rule, shape.border.control |
| 0.9.4 | shape.radius as one length |
shape.radius: { control, field, pill } |
| 0.9.2 | colors background, text, borderControl, navSurface, negative, … |
the spec’s paths: ground, ink, navGround, statusCritical, …, each named by its refusal |
| 0.9.2 | shape.radii |
shape.radius |
| 0.9.0 | defineTheme({ palette }) |
defineTheme({ colors: { light, dark } }) |
| 0.8.9 | looks Canvas, Iris, Coral, Ink, Signal, Tray | Lumen, Mono or Sage, or your own with defineTheme |
Pages, components and packages
Section titled “Pages, components and packages”| Since | 0.8 / 0.9 spelling | 1.0 spelling |
|---|---|---|
| 0.9.9 | useFile(resource)(key, { thumb: true }) |
{ thumbnail: true } |
| 0.9.9 | STATE_KEY and walkOf from tablewalk/react; a routerNavigator that wraps and unwraps the walk itself |
removed: read returns the router’s own state and push / replace receive the entry state to store ({ ...router.state, ...entry }) |
| 0.9.9 | migrate… and verify… maintenance functions (migrateSqliteCommandJournal, migratePostgresAuthStore, verifySqliteSupportAudit, …) from tablewalk/commands |
the same names from tablewalk/maintenance |
| 0.9.9 | a Dropdown item’s tone typed string, only error styled |
ToneName: good, warn, bad, info and neutral each color the option’s word |
| 0.9.9 | ui.shell.search: true and { signedOut: true } |
'members' and 'everyone' (false unchanged) |
| 0.9.9 | ThemeDefinition (the compiled theme, with base) from tablewalk/app |
removed: write a ThemeSpec with extends |
| 0.9.9 | a stock rule’s message as text only |
text, or msg('stock.short', { left: 'part_id.on_hand' }) (text still works) |
| 0.9.6 | provisionSqlite…, provisionPostgres…, provisionMysql… from tablewalk/commands |
provisionStores(db, { app, only, jobs }) from tablewalk/maintenance |
| 0.9.2 | policy principal.visitor === 'public' |
principal.kind === 'public' |
| 0.9.0 | useExperimentVisitor |
useVisitor |
| 0.9.0 | useAddressState from tablewalk/ui |
from tablewalk/page |
| 0.9.0 | definePage({ title, path, nav: { icon, order } }) |
definePage({ label, icon, nav: { position } }); the file’s name is its path |
| 0.9.0 | <List> block |
<Rows> |
| 0.9.0 | <Empty text detail> |
<Empty title description> |
| 0.9.0 | <Value display> with bar, max, avatar |
the column’s display rule |
| 0.9.5 | TypeScript 5.9 | TypeScript 7 or later |
The command line and the API
Section titled “The command line and the API”| Since | 0.8 / 0.9 spelling | 1.0 spelling |
|---|---|---|
| 0.9.6 | --trust-proxy-header, TABLEWALK_TRUST_PROXY_HEADER |
--auth-proxy-header, TABLEWALK_AUTH_PROXY_HEADER |
| 0.9.6 | /api/integrations/<name>/webhook |
/api/inbound/<name> |
| 0.9.4 | --check-app |
mistri check |
| 0.9.4 | shot --look |
shot --theme <id | all> |
| 0.9.4 | App API ?tab= for a view’s tab |
?segment= |
| 0.9.4 | check codes contact-email-* |
notify-send-* |
| 0.9.1 | refused write code: 'access_denied' |
code: 'forbidden' |