Workspace file (SQLite export)

The workspace file is your entire workspace as a single SQLite database, downloaded as a zip. Projects, sprints, tasks, comments, activity, wiki pages, and the full audit log, in 19 indexed tables with foreign keys intact. Open it in DuckDB, DBeaver, VS Code, or the sqlite3 CLI and run any query you want.

The point: if you can SELECT, you can answer any workspace question without touching Ithura. GDPR Article 20 (data portability) is one click. Migration prep is one download. An auditor's "show me every change alice@example.com made in July" is one query.

What's in the bundle

workspace-<slug>-<utc-timestamp>.zip
├── workspace.db        (SQLite 3, ~a few MB for a busy workspace)
└── README.md           (schema + DuckDB cookbook)

workspace.db has 19 tables in dependency order (parents first):

GroupTables
Identityworkspace, users, workspace_members
Structureprojects, project_members, states, labels, cycles, modules
Workissues, issue_assignees, issue_labels, issue_cycles, issue_modules, issue_comments, issue_activities
Knowledgewiki_pages, goals
Complianceaudit_logs

Every UUID is stored as TEXT, every timestamp as ISO 8601 UTC TEXT (RFC 3339), every JSONB column as TEXT (the JSON payload). Hot columns have indexes so ad-hoc queries stay fast on large workspaces.

Who can create one

  • Enterprise plan. The export is Enterprise-gated. The audit log, full history, and freedom to leave are the enterprise deal.
  • Workspace admin (role 20) only. Regular members cannot trigger a workspace file export.

Every trigger writes an audit-log entry (workspace.audit.exported sibling), so a reviewer can always answer "who pulled it, when."

How to create one

From the app:

  1. Go to workspace settings → Exports.
  2. Click New export.
  3. Choose Workspace file (SQLite) from the format dropdown.
  4. Click Start export. A row appears with status queued, then processing, then completed when the download link is ready.

From the API:

curl -X POST "https://api.ithura.com/workspaces/<slug>/export-issues/" \
  -H "Authorization: Bearer $ITHURA_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"provider": "workspace_file"}'

The response gives you the export id and token. Poll GET /workspaces/<slug>/export-issues/ for the row; when status = completed the url field is a 7-day presigned link to the .zip.

Reading the file

The database is plain SQLite 3. Any tool that speaks SQLite reads it: the sqlite3 CLI, DBeaver, DataGrip, Grist, Rows, VS Code SQLite extensions, every ORM's SQLite driver. DuckDB reads it natively too and gives you a nicer analytical query experience.

DuckDB, one command:

duckdb workspace.db

Then treat it as a normal SQL database. The bundled README has the schema plus five example queries out of the box (cycle time, WIP by assignee, sprint velocity, wiki freshness, per-user audit trail).

What's included, and what isn't

Included in v1

  • Every row across the 19 tables above.
  • Wiki page HTML bodies (rendered content).
  • The audit log for the full retention window.

Not in v1

  • Attachment binaries. Files uploaded to issues, boards, and wiki pages live in the object store. Pointers stay in the export; the bytes do not.
  • CRDT logs for wiki and boards. The Yjs update stream that powers live collaboration is not encoded in v1. Wiki HTML bodies ARE included; board content is not.
  • Integrations config. These rows contain encrypted secrets and are deliberately excluded.
  • Notifications, sessions. Transient by definition.

Retention of the download

The presigned .zip link is valid for 7 days after the export completes. If you need to keep the file long term, download it and archive it in your own storage. If you miss the window, trigger a fresh export.

Round-trip (planned)

The v1 file is read-only. Import into a fresh Ithura instance is on the roadmap. Until then, the workspace file is the source of truth for archival, audit, migration prep, and offline analysis.

  • Sovereign overview: the compliance answer pack this export exists to serve.
  • Data residency: where the file is generated and where it lives.
  • GDPR: Article 20 (right to portability) is what this feature answers in a single click.