Status & roadmap
This page says which features you can rely on and what comes next.
This site describes tablewalk 0.9.8, which finishes splitting the code into its packages: the engine, the kit,
the database browser and the App framework import only down, each with entry points of its own; the Preview features
at 1.0 are named; and a third sample App, Ladle, shows a site of its own embedding an App. Each version’s full list is in the changelog (CHANGELOG.md).
Stable and preview
Section titled “Stable and preview”Stable: the documented shape holds; a change is named in the changelog.
Every feature below is stable unless marked Preview. A Preview feature is
enforced on the server as documented, but its shape may change in any 1.x release,
outside the compatibility promise; tablewalk check lists the Preview features
an App uses, as information. At 1.0 these stay Preview: feature flags,
audiences and tablewalk/openfeature, experiments, the Suite Console, behavior
analytics, SCIM, and the Gantt presentation. The kernel, tenant Apps, SAML,
flows and machines, the assistant, integrations and durable workflows are
stable.
The App DSL
Section titled “The App DSL”| Feature | Status |
|---|---|
Resources, list and dashboard views, tabs, filters, sort, order, saved views, favorite, rowActions, totals, density |
Stable |
home rules, nav, nav groups, menu icons, the icon rail and a nav entry’s color dot |
Stable |
Canonical addresses (/leads/127), path, natural keys (address), public slugs, tablewalk check --routes |
Stable |
Checklist, queue, board, split, calendar, cards and tree presentations; the filter rail (filterBar: 'rail') and a text filter’s suggestions (suggest) |
Stable |
Cards read through a reference (vehicle_id.title, an image’s about); a calendar’s shaded spans (backdrop); a conversation’s other side (a timeline’s side) |
Stable |
Board cards’ category and footer, a board’s lane sum and folded lanes |
Stable |
Pages, display rules, record names (recordLabel templates) |
Stable |
Display rules format: 'duration', 'avatars', 'rating', 'color', 'time', 'month', 'year', 'json', 'qr'; icon, colors, ring, slider; video and audio file previews; the JSON editor, code scanner (scan) and signature pad (signature) |
Stable |
Record history (history()), notifications (notify) and the inbox |
Stable |
Rollups (count, sum, min, max) |
Stable |
Editing, autosave, lists edited in place (editable) and Set field… |
Stable |
Files and attachments (file), tags (tags), CSV import (import) |
Stable |
A resource’s search and tablewalk --reindex: they need a search pack, which ships after 1.0, so nothing can be plugged in before then |
Preview |
Resource validation, transitions (machine) and an action’s reason |
Stable |
A machine state’s after and a resource’s at timers, which run through the jobs, and a machine’s service-only moves (by) |
Stable |
Dashboards: metrics, charts, breakdowns, rows, activity(), section windows, interactive embed, firstRun() |
Stable |
funnel(); chart shapes stacked, scatter, heatmap, waterfall, treemap; target; find(); week, weekday/hour groups |
Stable |
Dashboard note variant: 'banner', breakdown shape: 'steps', a donut’s total, curve: 'smooth', windowControl: 'button' |
Stable |
Gallery, headline() (and its earlier figure, was), card(), facts, sheet and property-rail sections, section tab, ordered workflow strip, related cards, related(…, { same, near }) |
Stable |
The Gantt presentation (gantt(), kind: 'gantt' and its keys) |
Preview |
Row-defined fields (defined) |
Stable |
Flows from rows (flows, flowRunner, the flows() and diagram() sections, tablewalk flows start) |
Stable |
Forms with groups and when; multi-step forms (form.steps) |
Stable |
Money in minor units (minor, currency: { column }), a form’s lines and live values |
Stable |
Command forms (form views) and public forms: saved on every step, statusCheck and its page, keyed inputs, link to an account |
Stable |
A status check’s emailed code (statusCheck.stepUp) and a link by verified email (link.email) |
Stable |
Landing pages, signed-out reads (auth.public), ui.footer |
Stable |
The header’s New menu (ui.shell.new) |
Stable |
Custom components: component(), sections, value renderers, inputs, customList(), useCommand, ui.connect/ui.images, public surfaces |
Stable |
Free-form pages (definePage from tablewalk/page, pages/*.page.tsx), their loaders and blocks, and a role’s service |
Stable |
The assistant (assistant()): a panel that reads and proposes as the signed-in person, Claude via ANTHROPIC_API_KEY; on a tenant App, per customer once the platform owner turns it on, sending only the person’s messages and the rows their own reads return |
Stable |
The assistant’s page (placement: [..., 'page']), full screen, starters, and verbs on its record cards and table rows |
Stable |
| Feature | Status |
|---|---|
The three built-in looks: Lumen (the default, set in Inter), Mono and Sage; defineTheme, ui.theme and customThemes; a look’s named palettes; the theme validator in tablewalk check |
Stable |
Tenant branding (branding, brandingForm(), the branding store) |
Stable |
Access, commands and data
Section titled “Access, commands and data”| Feature | Status |
|---|---|
| Sign-in, role grants for resources, fields, commands and operations | Stable |
Fixed actions granted without write (auth.roles.<role>.actions) |
Stable |
| Account administration and settings records | Stable |
Row policies (auth.rows: 'policy'), named sources |
Stable |
Tenant Apps (auth.rows: 'tenant', the platform realm, invitations, public intake, delegated administration, support access), a form’s realm |
Stable |
Commands: declared inputs, typed db, checked record, refuse, output shapes, actor |
Stable |
Command lookup, effects and webhooks; events and jobs (tablewalk/jobs, --jobs); the App’s default track |
Stable |
Durable workflows (tablewalk/workflows), their workflows operations grant and createWorkflowDriver |
Stable |
Email ("kind": "email"): notify email and mentions, step-up codes, links by verified email |
Stable |
Tenant App mail (defineJobs mail): the signed inbound webhook, the send loop with DKIM, signed record links, tablewalk mail-dns |
Stable |
HTTP sources (--openapi, --from-openapi, "kind": "http") |
Stable |
Sign-in from a host app ("kind": "embed", /api/auth/embed/exchange) |
Stable |
Read replicas (a connection’s "replicas") |
Stable |
The App API and App MCP (api, --api-reads, --app-mcp, tablewalk api-token, tablewalk new --api, the OpenAPI and AsyncAPI exports, compare-openapi), over loopback or, with api.network, beyond it |
Stable |
tablewalk build |
Stable |
App testing (tablewalk/testing, tablewalk/ui/testing) and service virtualization (tablewalk virtual) |
Stable |
Feature flags, useFlags, command enabledBy, scoped flag capabilities, tablewalk/openfeature |
Preview |
Suite Console: targeting, rollouts, history and revision-checked changes; its Operations and Analytics rooms (the jobs, deliveries, stores, analytics and workflows operations grants); its Governance room (an App’s admin role) |
Preview |
Behavior analytics: analytics collection and funnels, the analytics store and sinks, sink presets (Segment, PostHog, Amplitude, GA4, a warehouse), useAnalytics |
Preview |
Experiments (experiments, experiment(), a role’s experiments, defineExperimentConversion, useVisitor, tablewalk experiments) and audiences (audiences), on an App’s public forms and a tenant’s public intake too |
Preview |
SCIM provisioning ("kind": "scim", a directory’s accounts and leavers) |
Preview |
Mounting an App in your server (tablewalk/handler) |
Stable |
Embedding in a React app (tablewalk/react and its router adapters) |
Stable |
Integrations (tablewalk/integration, a jobs module’s integrations, a command’s integrations and send(...), integrationsForm(), a notify rule’s send) and effects on a tenant App |
Stable |
The database browser (SQLite, PostgreSQL, MySQL/MariaDB; read-only by
default, writes opt-in per connection with "writable": true, enforced at
the adapter) and its MCP server are stable. Apps run on PostgreSQL and
SQLite; MySQL/MariaDB is supported for browsing.
Still refused
Section titled “Still refused”- An App API request that would read two connections (
api-multi-source): an App of several sources serves each request from one, and promises nothing across requests; generic writes stay single-source. - A row-policy App’s event feed and generic writes through the App API
(
policy-events-feed,api-write-unsupported): it reads through its policy and writes through the commands it exposes. - A suite’s App API beyond loopback: a suite serves its Apps’ APIs on loopback only.
- Experiment conversions from a tenant App’s platform realm; a tenant’s own commands and its public intake convert.
- A tenant App’s saved form with
statusCheckorlink. - A second tenant App on a database that already holds one: a tenant store is one App’s tenants and memberships. Give each its own database.
- Apps on MySQL/MariaDB (
app-on-mysql, atcheckand at startup): an App runs on PostgreSQL or SQLite. MySQL/MariaDB is supported for browsing, in the database browser and its MCP server. - An App over the database browser’s MCP server (
--mcp), and a Workbench inside an App: an App serves only its declared resources; the standalone browser is the tool for the rest. - The platform’s own email in tenant Apps (invitations, verification). A tenant
App sends and receives its own mail through its jobs module’s
mail. - A tenant store made before 0.8.11 (layout 1): reseed it. Every later layout
moves forward in place with
tablewalk migrate stores up --app <dir>.
Roadmap
Section titled “Roadmap”Planned work, in order. None of it has a date.
- The packages. The database browser, the engine, the shared client and the App framework each get their own entry point, as the four layers this release draws.
- Container deploys. An App deployed and running on container platforms, with a hosted PostgreSQL, before 1.0.
- 1.0 release candidate. The surface frozen and the compatibility promise in force.
Not planned
Section titled “Not planned”- A visual drag-and-drop page editor.
- HTML or scripts in an App definition. An App’s own code runs only as custom components, referenced by path, with declared reads and changes through its commands.
- Anonymous reads an App did not name: a signed-out visitor reads only what
auth.publiclists. - A Workbench inside an App, or an opt-in to one: it would read past the declared resources, the grants and the rest.