Export your first workspace file
Time: 10 minutes. You'll need: the workspace-admin role (role 20), the Enterprise plan on the workspace, and a machine with either DuckDB or the sqlite3 CLI installed.
By the end you'll have a .zip containing your entire workspace as a
SQLite database, plus a small DuckDB session running a real query
against it.
1. Trigger the export from the app
Open Workspace settings (the gear icon at the bottom of the left rail). Click into the Exports section. Click New export.
In the format dropdown, pick Workspace file (SQLite). Click Start export.
A row appears at the top of the exports table with status queued.
It flips to processing within a couple of seconds, then to
completed once the bundle is built. For a busy workspace this
usually takes under a minute. You'll also get an email when the
bundle is ready.
2. Download the zip
Click the row's Download link. The URL is a 7-day presigned link; 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.
Unzip the download:
unzip workspace-<slug>-<utc-timestamp>.zip
You get two files:
workspace.db: the SQLite 3 database with 19 tables.README.md: the schema plus five example DuckDB queries.
3. Open it in DuckDB
DuckDB reads SQLite files natively and gives you a nicer analytical
query experience. In the directory that has workspace.db, run:
duckdb
Then in the DuckDB prompt:
ATTACH 'workspace.db' AS ws (TYPE sqlite);
USE ws;
SHOW TABLES;
You should see the 19 tables listed: workspace, users,
workspace_members, projects, project_members, states,
labels, cycles, modules, issues, issue_assignees,
issue_labels, issue_cycles, issue_modules, issue_comments,
issue_activities, wiki_pages, goals, audit_logs.
4. Run your first real query
The bundled README has five sample queries out of the box. Pick the average cycle time 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';
DuckDB returns a two-column result: the average number of days a task took to complete, and the count of completed tasks in the window. That's an answer no built-in report would give you exactly this way, and you got it in ten seconds without an API token.
5. Try a second query, then archive
Sprint velocity is a good next one:
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;
Once you're done, .quit out of DuckDB. Archive the .zip somewhere
durable (git-tracked storage, an S3 bucket, an air-gapped USB drive).
The workspace file is now your offline snapshot of the whole
workspace.
What next
- Workspace file: the full 19-table schema, what is and isn't included in v1 (attachments and CRDT logs are not), and the API endpoint if you want to trigger exports from automation.
- Sovereign: where this feature sits in the GDPR Article 20 (portability), NIS2 21(2)(c) (business continuity), and DORA (exit and substitutability) stories.