Tables
Tables are where your data lives. App Builder uses tables as a direct source of structured information — perfect for dashboards, lists, search pages, and trackers.
What tables do for your apps
A table in Vince is a structured data source with a defined set of columns. Unlike a workflow, a table has a fixed schema that App Builder can see directly — that makes it the easiest, fastest way to get an app up and running.
Tables are good for:
- Master data — suppliers, items, locations, warehouses, customers
- Transactional data — orders, invoices, goods receipts, claims
- Configuration and lookups — categories, statuses, regions
- Enrichment — extra fields your apps need that aren't in M3
- Favorites and user preferences — things each user wants to remember
If you can think of the data as a spreadsheet, it probably belongs in a table.
Creating tables
Tables are created and managed in the Vince Platform. The full reference lives there:
- Tables reference — schema setup, columns, validation
- Custom Tables API — for reading and writing programmatically
- Export M3 Data To Table — video tutorial on populating a table from M3
Adding a table as a resource in App Builder
Once your table exists and has data:
- Open your app in App Builder.
- Open the Resources panel.
- Click Add resource and pick the table.
- Give it a clear alias — like
invoice_tableorsupplier_table. This is the name you'll use in prompts. - (Recommended) Open the schema view to remind yourself which columns exist.
Tables don't need the "3-run" warmup that workflows do — their schema is known immediately. You can add them and start prompting straight away.
How tables differ from workflows
| Tables | Workflows | |
|---|---|---|
| Schema | Defined when you create the table — App Builder knows it immediately | Inferred from past executions — needs to be run 3+ times first |
| Best for | Static or semi-static data, master records, logs | Dynamic logic, integrations, actions, computed results |
| Updates | Set up once, fill with data, mostly leaves you alone | Re-run after every change so App Builder picks up the new shape |
| Speed to first app | Fastest — start prompting right after adding | Slower — needs runs before App Builder can use it |
| Use together | ✓ — combine in one app | ✓ — combine in one app |
If you're starting from scratch and want an app fast, look for an existing table to build on.
Designing tables for apps
A few practical tips to make a table easy for App Builder to use:
- Use clear column names.
supplier_name,order_date,status— notc1,f3,value. The AI uses these names directly when generating the app. - Pick the right data type for each column. Dates as dates, numbers as numbers. The AI then knows to format dates as dates and sum numbers correctly.
- Add a useful identifier column. Most apps need something like an order number, item code, or record ID to link views together.
- Keep one row per real-world thing. One row per supplier, one row per order. Don't squeeze multiple records into one row.
- Avoid hidden context. If the meaning of a column depends on something the AI can't see, the generated app may misuse it.
For detailed schema setup and column options, see the Tables reference.
Common table patterns
Patterns that come up often in App Builder apps:
- Master data list — Example: a
supplier_tablepopulated from M3. The app shows a searchable supplier directory with a detail view per supplier. - Transactional dashboard — Example: an
invoice_tablewith one row per invoice. The app shows it as a status dashboard with counts and filters. - Tracker — Example: a
goods_receipt_tablepopulated by a workflow. The app surfaces pending receipts at the top with a button to mark them processed. - Enrichment — Example: a
supplier_notes_tablethat adds internal notes per supplier. The app joins it to the main supplier list. - Favorites or watchlist — Example: a
user_favorites_tablekeyed by user. The app shows each user's saved items on their dashboard.
Updating a table your app uses
When you change a table that an existing app depends on:
- Make the change in Vince Platform (add a column, rename a field, change a type).
- Open your app, start a new build session, and re-prompt with what changed — for example: "The
invoice_tablenow has a 'priority' column. Show priority next to status in the list, and add a filter for it at the top." - Save in App Builder and republish the app version.
Tables don't need the 3-run warmup — App Builder sees the new schema immediately. But the app still needs to be re-prompted to actually use the new columns.
Quick reference
- Where to create tables — Vince Platform → Tables
- Where to use them in apps — Resources panel in App Builder
- No 3-run rule — tables have a fixed schema; you can prompt as soon as you add one
- Clear column names matter — the AI uses them directly
- Re-prompt after schema changes — App Builder doesn't auto-refresh
Further reading
Vince Platform docs:
- Tables — full reference
- Custom Tables API — programmatic access
Video tutorials:
- Export M3 Data To Table — populate a table from M3
- Create workflow with Table Component — pulling data into a table from a workflow
Where to go next
- Workflows — for dynamic logic and integrations
- Prompting & Best Practices — how to write prompts that use tables well
- Troubleshooting & FAQ — when something's not behaving