# Export your data

> Export a Done Bear workspace as a portable JSON archive containing every stored field, using the donebear export command.

Your data belongs to you. `donebear export` writes a complete copy of one workspace to stdout as JSON, so you can back it up, inspect it, or move it somewhere else.

## Take an export

```bash
donebear export > backup.json
```

Output goes to stdout, so redirect it to a file. There is no `--out` flag; the shell already does that job.

To export a workspace other than the active one:

```bash
donebear export --workspace personal > personal-backup.json
```

## What the archive contains

```json
{
  "formatVersion": 1,
  "exportedAt": "2026-08-19T01:17:39.200Z",
  "workspace": { "id": "...", "name": "Personal", "urlKey": "personal" },
  "counts": { "Task": 1317, "Project": 11, "...": 0 },
  "records": { "Task": [], "Project": [], "...": [] }
}
```

Eight record types are included:

| Record type         | What it holds                      |
| ------------------- | ---------------------------------- |
| `Task`              | Tasks, with every stored field     |
| `Project`           | Projects                           |
| `ProjectHeading`    | Headings inside projects           |
| `Team`              | Teams                              |
| `TeamProject`       | Team-to-project links              |
| `Label`             | Labels                             |
| `TaskLabel`         | Task-to-label links                |
| `TaskChecklistItem` | Checklist items belonging to tasks |

## It is a complete copy, not a summary

The export reads from the sync layer rather than the public read API, so it carries fields the API does not return. Ordering (`sortOrder`, `todaySortOrder`, `projectSortOrder`), reminder state (`reminderAt`, `lastReminderInteractionAt`), and repeat state (`repeatType`, `repeatStatus`, `repeatInstanceDate`, `repeatNextAt`) are all present.

This matters because an archive missing those fields cannot be used to reconstruct your workspace, by you or by anyone else.

## What is deliberately excluded

Workspace members, pending invitations, and agent conversation threads are not in the archive. In a shared workspace those records describe other people, including their email addresses, so they are not yours to export.

## Check an export

```bash
donebear export --json | jq '.counts'
donebear export --json | jq '.records.Task | length'
```

Compare the task count against the API to confirm the archive is complete:

```bash
donebear task list --state all --limit 5000 --json | jq '.total'
```

The server declares how many records it is sending before it sends them, and the command checks the archive against that count. If the connection drops partway through, it fails rather than handing you a short archive that looks complete.

## Next steps

- Read [Commands](/cli/commands) for the full command surface.
- See [Automate with tokens, JSON, and context](/cli/automation) to run exports from a script or a scheduled job.

---

Every Done Bear page is listed at https://donebear.com/llms.txt. Any page has a markdown copy at its URL plus `.md`. Start from the map rather than guessing a path.
