---
description: Exxat DS — when to use cards vs DataTable rows vs simple list rows.
alwaysApply: false
globs: 
  - components/**/*-table.tsx
  - components/**/*-client.tsx
  - components/data-views/**/*
tags: [hub, data-views]
seeAlso:
  - docs/exxat-ds/card-vs-rows-pattern.md
---

# Exxat DS — cards vs rows vs lists

## MUST

1. **Dense, comparable records (10+)** — **`DataTable`** + **`ListPageTemplate`** + **`useTableState`** for primary hubs (**`exxat-data-tables.mdc`**).
2. **Board / tiles / visual browse** — **`ListPageBoardCard`** (and related shells), **`ListPageViewFrame`** for non-table bodies (**`exxat-board-cards.mdc`**, **`exxat-list-page-view-shells.mdc`**).
3. **One dataset** — Cards and tables read the **same** **`tableState.rows`**; no forked mock arrays (**`exxat-centralized-list-dataset.mdc`**).

## MUST NOT

- Replace a **primary data hub grid** with a **card wall** when users need column sort, filter chips, and export parity.
- Introduce a **second table stack** for the same entity.

## See also

- **`docs/card-vs-rows-pattern.md`** · **`.cursor/skills/exxat-card-vs-list-rows/SKILL.md`**
