Browse documentation

Route: /p/:id/tables and /p/:id/tables/:model. Source: apps/studio/src/features/tables.

Layout

ComponentWhat it does
TableSidebarSchema/table picker
TableDataPanelPaged rows, sorting, inline edit
TableStructurePanelColumns, types, defaults, nullability, indexes
FilterBarColumn filters, serialized into the rows query
NewTableModalCreate a table from generated SQL plus an RLS policy preset
AddColumnForm, ColumnEditModal, CreateIndexFormDDL forms
TableContextMenusPer-table and per-column actions
CellValueType-aware rendering of a cell

Reads

CallEndpoint
Table listGET /admin/tables
RowsGET /admin/tables/:model/rows?… → { rows, total, page, pageSize }
Schema tablesGET /admin/schema/tables?schema=…
IndexesGET /admin/schema/tables/:name/indexes?schema=…
Relationship graphGET /admin/schema/graph?schema=…

The rows query carries page, pageSize, sort, order and filters; filters are parsed server-side by apps/server/services/admin/row-filters.ts.

Row edits

ActionEndpoint
CreatePOST /admin/tables/:model/rows
UpdatePATCH /admin/tables/:model/rows/:id
DeleteDELETE /admin/tables/:model/rows/:id
Note

Sensitive columns never reach the browser. apps/server/constants/admin.constants.ts strips password, passwordHash, accessToken, refreshToken, idToken, tokenHash, secretCode and secretCodeExpiryDate from every admin row payload, recursively through nested relations (maskRow). Prisma internals and Postgres catalog tables (_prisma_*, pg_*) are excluded from the table list.

Structure edits (DDL)

ActionEndpoint
Create tablePOST /admin/schema/tables with { sql, policyPreset }
Drop tableDELETE /admin/schema/tables/:name?schema=
Add columnPOST /admin/schema/tables/:name/columns?schema=
Rename columnPATCH /admin/schema/tables/:name/columns/:col/rename
Set nullablePATCH …/columns/:col/nullable
Set defaultPATCH …/columns/:col/default
Drop columnDELETE /admin/schema/tables/:name/columns/:col?schema=
Create indexPOST /admin/schema/tables/:name/indexes?schema= with { columns, unique, method }
Drop indexDELETE /admin/schema/indexes/:name?schema=

Creating a table sends the generated CREATE TABLE plus a policyPreset, so a new table can come out of the modal with RLS already configured rather than fully open. See Row Level Security.

Everything above is a real Postgres DDL statement executed by apps/server/services/admin/schema.service.ts — there is no shadow metadata layer. Anything you can do here you can also do in the SQL editor, and the result is identical.

Users are elsewhere

/p/:id/tables/users redirects to the auth users screen: managing accounts goes through the auth API rather than raw row edits. See Authentication screens.