A spreadsheet cannot say who owns this row
It cannot say what state the row is in, or that it is waiting on somebody. A table can, and everything else in stepbase — the forms, the pages, the approvals, the dashboards — is reading the same rows.

Asset Register
- Columns with real types
- Text, numbers with a currency or percentage format, dates, checkboxes, dropdowns, files. A dropdown's options are the lanes a board groups by, so the column and the board can never disagree.
- Tables that know about each other
- A linked-record column points at a row in another table. A rollup adds up, counts, or takes the max across that link — repair spend per asset, committed spend per vendor — and keeps itself current.
- A grid people actually work in
- Inline edit, search, sort and filter. Save a set of filters as a named view and pin it to the sidebar, so "Open requests" is one click rather than a filter somebody re-applies every morning.
- Row and column policies
- Narrow a table to the rows somebody owns, or hide a column from everyone but the people who need it. Written as an expression over the viewer, enforced on every surface that renders data on their behalf.
- Get your data in and out
- Import a CSV into a new or existing table, and export what is there. A form can also write straight into a table you already have, with the mapping stated explicitly.
What it does not do
- Tables are native. stepbase does not read an existing Postgres, MySQL, Airtable, Notion or Google Sheets — other systems connect over HTTP connectors instead.
- Freshness is a poll while the tab is visible, with stale-write detection. It is not a live multiplayer cursor.