TotalBase
DataViews

Creating a DataView

The New DataView wizard, step by step, and what it creates.

In the admin: DataViews › New DataView

New DataView opens a wizard. Its steps are the sections of the DataView's Settings, in the same order and with the same controls, so what you set while creating is where you'll find it when you come back to change it. Nothing is published when you finish: the DataView is a draft only administrators see.

This page builds Acme's Work orders kanban.

The wizard's first step: the types, grouped by what each is for.
The wizard's first step: the types, grouped by what each is for.
With an AI agent. Ask "Make a kanban of work orders by status for dispatchers". The agent calls create_dataview with the type, the table, its columns and the layout, then publish_dataview with the roles that open it. See Recipes › A DataView.

From a table, in one step

On a table's page (Database › Tables), Create DataView makes a screen of it in one window: its Name (the table's, humanized), Who opens it (the roles), and Publish now (on). Create makes a Table DataView over every column, grants the roles and publishes it, so it's in the App at once, and opens its Settings › Security. If a role still lacks something, such as READ on the table, the header's warnings say so with the fix. See Publishing › Warnings.

Everything stays editable in its Settings. More options… opens the wizard below instead, with the table already chosen.

The steps

Which steps you get depends on the type:

TypeSteps
Table, Cards, Kanban, Calendar, Gantt, Map, TreeType → General → Data → Views → Form → Actions → Security
FormType → General → Data → Form → Actions → Security
Master-detailType → General → Master → Detail → Detail columns → Form → Actions → Security
SettingsType → General → Data → Settings → Actions → Security
CustomType → General → Record → Security
External frameType → General → Frame → Security

A step you've reached can be opened again from the rail on the left, so you can go back without losing what you entered. Next waits until the step is complete.

Type

Pick what you're building. The types are grouped by purpose: See and work with many rows, Enter or edit one record, and Pages of your own. Table is marked Recommended.

A type that needs a particular column says so on its card: Calendar Needs a date column, Gantt Needs a start and an end, Map Needs a location, Kanban Needs a status column, Tree Needs a column pointing at its own table.

For Acme's board, pick Kanban. You can offer more views of the same rows later, such as a table and a calendar, in Settings › Views.

General

Field
NameRequired, up to 32 characters, unique. Work orders
SlugRequired, proposed from the name, unique. It's the DataView's address in the App: /admin/app/dataviews/work-orders
DescriptionOptional, up to 128 characters. Shown as a tooltip in the App menu
Icon, ColorOptional. Without an icon, the type's icon is used

Data

Pick the source: a table or a view that is ACTIVE and exposed for GET. Master-detail and Custom need a table, because they write records. Functions are never a source.

Then the columns, one row each:

Column
ShowWhether the column is in the DataView. All are checked, except a uuid primary key and the audit columns PostgreSQL fills (created_at, updated_at, created_by, updated_by)
LabelThe column's title, read-only here: it comes from the table's column presentation
Help textShown under the field in the record form
WidgetThe control that edits it, proposed from the column's type and constraints

The primary key is always read, because editing and deleting a row need it. Unchecked, it's only hidden.

Under the columns, Column set decides what happens to a column added to the table later: Auto-hide new columns (the default) adds it hidden, Auto-show new columns adds it visible, Lock to selected columns keeps it out.

Show records runs the query the DataView will make, with your permissions, so you see what it will read before you finish. A viewer's own permissions can narrow it further.

If the table looks like a parameter table (a key and a value column), the wizard suggests the Settings type.

Views

The main view's layout, with a select for each column it needs. Each type has its own; for a kanban:

Field
Group byRequired. A foreign key (a lane per row of the table it points at) or a column with a CHECK list (a lane per value)
Card titleRequired. The card's headline
Card description, Card imageOptional

Acme groups by status and titles each card with description. Each type's page describes its layout: see Types.

More options holds what every view shares: the density and page size a first-time viewer starts with, the toolbar's mode, the list's margin and the auto-refresh.

The Views step for a kanban: grouped by status, titled by the description.
The Views step for a kanban: grouped by status, titled by the description.

Form

How a row's record form opens from the list:

Mode
SidebarBeside the list, which stays in view. The default, and right for most forms
ModalA centered dialog, for short forms
DrawerFrom the bottom, covering most of the screen, for a heavy form
PageIts own address, for long forms

Past 8 visible columns in a Sidebar or a Modal, the wizard suggests a Page. Below, the record's actions: Clone, Save & New, Copy, Print, Activity. See Settings › Form.

Actions

Allow sets what viewers may do besides reading: Create, Edit, Delete. It can only take away what their permissions give, never add to it. A Closed orders history can have no New button while the same roles create orders in another DataView.

Then the toolbar's functions, on or off: search, saved views, activity, filter, import, export, refresh. See Settings › Actions.

Security

The roles that may open it. They're granted as soon as the DataView is created, but users only see it once it's published. Give the Work orders kanban to Dispatcher and Manager. See Settings › Security.

What the wizard creates

  • The DataView, as a draft, with the columns you checked shown and the primary key hidden if you unchecked it.
  • Its record form, generated from the same columns: one field per column, in one column for a Sidebar or a Modal, two per row past 8 fields in a Drawer or a Page. Each field gets the widget you chose. Over a view there is no record form: a DataView never writes to a view.
  • Its default order, taken from the source's default order. From then on the order is the DataView's own.
  • For a Master-detail, two DataViews: the master, and a detail DataView over the items table that lives inside it and is published with it. See Master-detail.
  • For a Tree, optionally a trigger on the table that refuses a row placed under itself or one of its descendants (Protect against cycles). It applies to every writer, not only the DataView.

Only what differs from the defaults is stored, so a DataView keeps following the defaults you didn't touch.

Errors

CodeWhen
DATAVIEW_NAME_DUPLICATE, DATAVIEW_SLUG_DUPLICATE (409)another DataView already has the name or the slug
INVALID_DATAVIEW_COLOR (422)a color that isn't one of the palette's
DATAVIEW_SOURCE_TYPE_INVALID (422)the source isn't a table or a view, isn't ACTIVE, or is a view for a type that writes
DATAVIEW_FIELD_WIDGET_INVALID (422)a widget that can't edit that column
DATAVIEW_DETAIL_REQUIRED, DATAVIEW_DETAIL_INVALID (422)a Master-detail without a detail table, or with one that has no foreign key to the master
DATAVIEW_VIEW_CONFIG_INVALID (422)a layout that doesn't fit the source, such as a Settings DataView without its four columns

See Errors.

Without the wizard

The wizard sends one request, POST /admin/api/dataviews, with the name, the type, the source, the chosen columns and the configuration. Agents use the MCP tool create_dataview, which takes the same, and then publish_dataview with the roles that open it. See Admin API.

Next steps