Skip to content

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.

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
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()
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
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
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'