← All developer guidesDeveloper guide

Server packages

The browser package defines transport contracts; @wts-data-table/server supplies backend handlers and adapters without coupling the UI to a database.

Shared protocol

Rows, facets, cursor pages, editor options, and uploads use structured request/response contracts. serializeRequest and parseResponse adapt existing APIs or GraphQL envelopes.

Supported server surfaces

Use Express, Fetch, or GraphQL handlers and inject your own database client. Set maximum page sizes, timeouts, and allowlists at the server boundary.

Security responsibilities

Authentication, authorization, tenant isolation, field allowlists, rate limits, and mutation validation always remain server responsibilities.

Express handler
app.post('/api/data-table', createDataTableExpressHandler({
  adapter: database,
  maxPageSize: 100,
  authorize: ({ principal }) => principal.can('people:read')
}));