TUI for managing DuckLake datalakes
Project description
quacktui
A Python TUI for managing DuckLake datalakes. Browse your catalog, inspect table metadata, run SQL queries, and perform maintenance operations — all from your terminal.
Install
With uv (recommended)
uv tool install quacktui
With pip
pip install quacktui
From source
git clone https://github.com/riazk/quacktui
cd quacktui
uv sync
uv run quacktui
Quickstart
Create a connections.toml file in your home directory:
[[connections]]
name = "demo"
type = "duckdb"
uri = "md:demo"
[connections.storage]
type = "s3"
bucket = "my-data"
endpoint = "http://localhost:9000"
access_key_id = "minioadmin"
secret_access_key = "minioadmin"
Then launch quacktui:
quacktui --connection demo
For DuckDB with local files:
[[connections]]
name = "local"
type = "duckdb"
database = "/path/to/database.duckdb"
[connections.storage]
type = "s3"
bucket = "local-bucket"
endpoint = "http://localhost:9000"
Features
Catalog Views
Browse and inspect your datalake with eight dedicated views:
- Schema Browser — Explore tables and views organized by schema
- Table Details — Inspect table structure, columns, constraints, and statistics
- Snapshot Timeline — View table snapshot history and retention policies
- File Inventory — List all data files backing a table
- Partition Explorer — Navigate and manage table partitions
- Schema Evolution — Track column additions, renames, and type changes over time
- Health Dashboard — Monitor table health, data quality, and maintenance metrics
- Catalog Database Info — View version, format configuration, and settings
Query Editor
Multi-tab SQL editor with the following capabilities:
- Syntax highlighting for SQL and Python
- Schema-aware autocomplete for table and column names
- Query history stored in persistent SQLite
- Saved query snippets for frequent operations
- Result export to CSV, Parquet, JSON, or clipboard
- Multiple concurrent queries with separate result tabs
- Query timeline to review and re-run historical queries
Maintenance Operations
Perform five critical datalake maintenance tasks, all requiring explicit confirmation:
- Compaction — Consolidate small files into larger files to improve query performance and reduce file count
- Expire Snapshots — Remove old snapshots based on retention policies to free storage
- Delete Orphaned Files — Clean up unreferenced files in S3 storage
- Refresh Statistics — Update table statistics for query optimization
- Optimize Manifests — Reorganize manifest files (version-dependent, available when supported by catalog format)
Destructive operations require pressing Ctrl+Enter to confirm.
Safety
By default, quacktui operates in read-only mode. Pass the --allow-writes flag to enable mutations:
quacktui --connection demo --allow-writes
Without this flag, all write operations are disabled and maintenance ops are grayed out.
Catalog Backends
quacktui supports the following catalog backends via DuckLake's extension:
- DuckDB (default, embedded)
- PostgreSQL (remote)
- SQLite (file-based)
- MySQL (remote)
Specify the backend in connections.toml using the type field.
Storage
In v1, quacktui supports S3 and S3-compatible storage backends:
- AWS S3
- MinIO (local or remote)
- Cloudflare R2
- DigitalOcean Spaces
- Any S3-compatible endpoint
Configure the storage endpoint, bucket, and credentials in the [connections.storage] section of connections.toml.
Configuration
Create a connections.toml file to define your datalake connections:
[[connections]]
name = "production"
type = "duckdb"
uri = "md:prod"
[connections.storage]
type = "s3"
bucket = "prod-data"
endpoint = "https://s3.amazonaws.com"
region = "us-east-1"
access_key_id = "YOUR_KEY"
secret_access_key = "YOUR_SECRET"
[[connections]]
name = "staging"
type = "postgresql"
host = "localhost"
port = 5432
database = "datalake"
user = "admin"
password = "secret"
[connections.storage]
type = "s3"
bucket = "staging-data"
endpoint = "http://minio:9000"
For more detailed configuration options, see docs/CONFIGURATION.md.
Keybindings
Navigate and control quacktui with these keyboard shortcuts:
| Key | Action |
|---|---|
Ctrl+P |
Command palette (search and run commands) |
Ctrl+T |
Theme switcher (dark/light) |
F1 |
Help and keybindings |
1 / 2 / 3 |
Switch between mode tabs (Catalog / Query / Maintenance) |
Ctrl+Enter |
Execute SQL query or confirm destructive operation |
Ctrl+N |
Open new query tab |
Ctrl+W |
Close current tab |
Ctrl+R |
Recall query from history |
Tab |
Navigate between panes |
Up / Down |
Navigate lists and history |
Development
For development and contribution guidelines, see:
docs/CONTRIBUTING.md— How to contributedocs/COMPATIBILITY.md— Supported versions and compatibility matrix.sisyphus/plans/ducklake-tui.md— Current implementation status and milestones
License
Apache License 2.0. See LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file quacktui-0.1.0.tar.gz.
File metadata
- Download URL: quacktui-0.1.0.tar.gz
- Upload date:
- Size: 254.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ce8532bbe75265ff914a41f1aba9806db04af5c84bfe08c073d17f0bb1807bc
|
|
| MD5 |
350cef673fefe9af32bc1f6072ae1201
|
|
| BLAKE2b-256 |
ddfe336d693f49047a6512361d021e914e6231847ba17d44ec49df053a025f37
|
Provenance
The following attestation bundles were made for quacktui-0.1.0.tar.gz:
Publisher:
publish.yml on arksigma/quacktui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quacktui-0.1.0.tar.gz -
Subject digest:
8ce8532bbe75265ff914a41f1aba9806db04af5c84bfe08c073d17f0bb1807bc - Sigstore transparency entry: 1864528352
- Sigstore integration time:
-
Permalink:
arksigma/quacktui@88e8a4f724b49cdd571e793f7289db6a9403edf6 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/arksigma
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@88e8a4f724b49cdd571e793f7289db6a9403edf6 -
Trigger Event:
push
-
Statement type:
File details
Details for the file quacktui-0.1.0-py3-none-any.whl.
File metadata
- Download URL: quacktui-0.1.0-py3-none-any.whl
- Upload date:
- Size: 88.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b22a8c5e7d71927766a22eb420906f423365cddeb8c0773546e87dfa6bfeb453
|
|
| MD5 |
0934ac0896f50c1a8ca20e7d355c2cd3
|
|
| BLAKE2b-256 |
84008305fbff673d3d8913e7df6627cc0f2758769368f1a1eccad49c015f32cd
|
Provenance
The following attestation bundles were made for quacktui-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on arksigma/quacktui
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
quacktui-0.1.0-py3-none-any.whl -
Subject digest:
b22a8c5e7d71927766a22eb420906f423365cddeb8c0773546e87dfa6bfeb453 - Sigstore transparency entry: 1864528449
- Sigstore integration time:
-
Permalink:
arksigma/quacktui@88e8a4f724b49cdd571e793f7289db6a9403edf6 -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/arksigma
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@88e8a4f724b49cdd571e793f7289db6a9403edf6 -
Trigger Event:
push
-
Statement type: