Data retention
ProHow long each kind of data is kept, and what happens after. Read-only: the rows are the service's policy, with the version and date it last changed, so nothing here can drift from what actually happens.
Preview
Install
With the Candor CLI
First time? Get started sets up the registry and theme. Or with shadcn directly: npx shadcn@latest add @candor/data-retention
Brings in: locale, utils · npm: lucide-react@^1.67.0
Usage
"use client"
import { DataRetention, type RetentionRow } from "@/components/data-retention"
const rows: RetentionRow[] = [
{ kind: "Threads and messages", kept: "Until you delete it", after: "Deleted within 30 days", note: "Visible to members of the account" },
{ kind: "Run logs", kept: "90 days", after: "Summarised, then deleted" },
{ kind: "Audit log", kept: "1 year", after: "Deleted" },
{ kind: "Uploaded files", kept: "Until you delete it", after: "Deleted within 30 days" },
]
export default function Example() {
return <DataRetention className="max-w-2xl" rows={rows} version="v4" changedAt="2026-09-14" />
}<DataRetention>
| Prop | Type | Default | Description |
|---|---|---|---|
| rowsrequired | RetentionRow[] | — | One row per kind of data: how long it's kept and what happens after. |
| versionrequired | string | — | The policy's version, shown in the header. |
| changedAtrequired | string | — | When the policy last changed, as an ISO date. |
| className | string | undefined | — | Extra classes for the outer element. |
Strings
The fixed words, in English by default. Change any of them under dataRetention in <LocaleProvider strings={{ … }}>; the table is exported as dataRetentionStrings.
| Key | English |
|---|---|
| label | Data retention |
| heading | How long data is kept |
| policy | Policy {version} · changed {changed} |
| data | Data |
| kept | Kept |
| then | Then |
Types
- RetentionRow
{ /** What kind of data, e.g. "Threads and messages". */ kind: string /** How long it's kept, e.g. "Until you delete it", "90 days". */ kept: string /** What happens then, e.g. "Deleted", "Summarised, then deleted". */ after: string /** Optional detail: where it lives, who can see it. */ note?: string | undefined }