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.
app.post('/api/data-table', createDataTableExpressHandler({
adapter: database,
maxPageSize: 100,
authorize: ({ principal }) => principal.can('people:read')
}));