The Ithura Blog
Sovereign5 min read

Your workspace is now a SQLite file you can grep

The Workspace File export puts your whole Ithura workspace into a single SQLite database. Nineteen tables, indexed, with a bundled DuckDB cookbook. GDPR Article 20 in one click, and a sovereign story that's finally demo-able instead of just marketed.

Every project-management tool tells you your data is yours. Then it hands you a CSV, a PDF, or nothing at all. Ithura's Workspace File is the opposite: your whole workspace as one SQLite database, downloadable in one click, queryable in every tool that speaks SQL.

Nineteen tables, indexed, with parent-child foreign keys intact. A bundled README with the schema and a DuckDB cookbook. No Ithura-specific tooling required to read a single row.

Who this is for. Anyone who needs to answer a question the built-in reports don't cover, migrate away without losing history, satisfy a data-portability audit request, or keep an offline archive that outlives any subscription. Where to find it. Workspace settings, Exports, New export, Workspace file (SQLite). Enterprise plan, workspace-admin only.

Why we built it

Portable-export used to mean "here's a spreadsheet, good luck." The workspace file is the position that your data is yours in a way you can actually use: analyse in DuckDB without an API token, ship to your SIEM without a middleware rewrite, migrate to a new instance without reverse-engineering a proprietary format, or archive to git and diff two quarters line-by-line.

It also makes the sovereign story demo-able rather than marketed. GDPR Article 20 (data portability) is a single click. Auditors get a file they can grep. Nothing about your data is stuck behind Ithura's UI.

What's in the file

The download is a small zip:

  • workspace.db: SQLite 3 database, indexed on hot columns, timestamps in ISO 8601 UTC.
  • README.md: the schema plus five example DuckDB queries out of the box.

The 19 tables, grouped:

workspace.db schema
Identity
  • workspace
  • users
  • workspace_members
Structure
  • projects
  • project_members
  • states
  • labels
  • cycles
  • modules
Work
  • issues
  • issue_assignees
  • issue_labels
  • issue_cycles
  • issue_modules
  • issue_comments
  • issue_activities
Knowledge
  • wiki_pages
  • goals
Compliance
  • audit_logs

Wiki page HTML bodies are included. The Yjs update logs that power live wiki and board collaboration are not yet encoded; attachment binaries live in the object store and are not in the bundle. Both are follow-ups on the sovereign roadmap.

Reading the file

SQLite 3 is a universal format. Every serious tool reads it. Our favourite path is DuckDB because it treats the file as a normal analytical database:

How long did an issue take, on average, this quarter?
SELECT
  ROUND(AVG(julianday(completed_at) - julianday(created_at)), 1) AS avg_days,
  COUNT(*) AS completed
FROM issues
WHERE completed_at IS NOT NULL
  AND completed_at >= '2026-05-01';
Sprint velocity (last six sprints)
SELECT c.name, COUNT(*) AS committed,
  SUM(CASE WHEN i.completed_at IS NOT NULL THEN 1 END) AS done
FROM issue_cycles ic
JOIN cycles c ON c.id = ic.cycle_id
JOIN issues i ON i.id = ic.issue_id
WHERE c.end_date IS NOT NULL
GROUP BY c.name, c.end_date
ORDER BY c.end_date DESC
LIMIT 6;
Everything alice@example.com changed in July
SELECT created_at, action, entity_type, entity_id, ip_address
FROM audit_logs al
JOIN users u ON u.id = al.actor_user_id
WHERE u.email = 'alice@example.com'
  AND created_at BETWEEN '2026-07-01' AND '2026-08-01'
ORDER BY created_at DESC;

Where it fits in the sovereign story

The workspace file is the point where portable data becomes usable data:

  • Data residency: the file is generated on your hardware for self-hosted Ithura; it never leaves your rack. On Ithura Cloud, it's generated in the EU and served over a 7-day presigned link.
  • GDPR Article 20 (portability): a single click for the whole workspace. Article 15 (access) is the same file.
  • NIS2 21(2)(c) (business continuity): Postgres plus RustFS plus this file is your backup posture. If you can move the three, you can move Ithura anywhere.
  • DORA exit and substitutability: the whole workspace in one file makes "switching cost" a bounded number, not a scary one.

Not yet

Round-trip import is on the roadmap; today the file is read-only. Attachment binaries and Yjs CRDT logs are separate encoding work and will land in follow-ups.

Get started

  • Workspace admins on the Enterprise plan can trigger an export from Settings → Exports → New export → Workspace file (SQLite). A row appears with status queued, then processing, then a download link once the bundle lands. You'll also get an email when it's ready.
  • The 7-day presigned URL is your download window. Grab it, archive it, and re-trigger any time.
  • Full technical detail: docs/features/workspace-file. The sovereign context lives at docs/sovereign.