High-performance web application for interactive exploration of Apache Iceberg data lakes
Project description
Iceberg Explorer
High-performance web application for interactive exploration of Apache Iceberg data lakes.
Features
- Browse Iceberg catalog namespaces and tables
- View table schema, partitioning, and snapshot history
- Execute SQL queries against Iceberg tables using DuckDB
- Export query results to CSV
- Real-time streaming of query results
Tech Stack
- Backend: FastAPI, DuckDB (with Iceberg extension), Granian
- Frontend: HTMX, Alpine.js, Tailwind CSS
- Observability: OpenTelemetry, structlog
Quick Start (Docker)
Run the latest image from GHCR:
docker run --rm -p 8080:8080 \
-e ICEBERG_EXPLORER_CATALOG__TYPE=rest \
-e ICEBERG_EXPLORER_CATALOG__URI=http://<catalog-host>:8181 \
-e ICEBERG_EXPLORER_CATALOG__NAME=default \
ghcr.io/davzucky/iceberg-explorer:latest
Open http://localhost:8080 in your browser.
Environment Variables
These are the main environment variables end users typically set when running with Docker.
| Variable | Required | Description |
|---|---|---|
ICEBERG_EXPLORER_CATALOG__TYPE |
Yes | Catalog type: rest (default) or local. |
ICEBERG_EXPLORER_CATALOG__URI |
Yes for rest |
REST catalog endpoint (for example, http://lakekeeper:8181). |
ICEBERG_EXPLORER_CATALOG__WAREHOUSE |
Yes for local |
Warehouse location for local catalog mode. |
ICEBERG_EXPLORER_CATALOG__NAME |
No | DuckDB attachment name (default: default). |
ICEBERG_EXPLORER_CATALOG__TOKEN |
No | Bearer token for authenticated REST catalogs. |
ICEBERG_EXPLORER_CATALOG__CREDENTIAL |
No | Catalog credential string when required by your catalog. |
ICEBERG_EXPLORER_CATALOG__S3__ENDPOINT |
No | S3-compatible endpoint URL for table data access. |
ICEBERG_EXPLORER_CATALOG__S3__ACCESS_KEY_ID |
No | S3 access key ID. |
ICEBERG_EXPLORER_CATALOG__S3__SECRET_ACCESS_KEY |
No | S3 secret access key. |
ICEBERG_EXPLORER_CATALOG__S3__REGION |
No | S3 region. |
ICEBERG_EXPLORER_SERVER__PORT |
No | HTTP server port inside the container (default: 8080). |
Screenshot
Development
Prerequisites
- Python 3.11+
- uv package manager
Setup
# Install dependencies
uv sync --all-extras
# Run tests
uv run pytest
# Run linting
uv run ruff check src/
# Start development server
uv run iceberg-explorer
CI/CD and Releases
Continuous Integration
The CI workflow runs on pull requests and pushes to main and performs:
- Dependency install with
uv(locked viauv.lock) - Linting (
ruff check) - Tests (
pytest) - Lakekeeper/MinIO/Postgres service startup checks via Docker Compose
- Docker image build validation
Release Workflow
The Release workflow supports two paths:
- Push a tag in the format
vX.Y.Z - Manually run the workflow (
workflow_dispatch) to create the tag frompyproject.toml
Release behavior:
- Verifies tag version matches
pyproject.toml - Builds and publishes a Python wheel
- Builds Docker image and scans with Trivy (fails on
HIGH,CRITICAL) - Pushes image to GHCR only after Trivy passes
- Creates GitHub Release with auto-generated release notes
- Opens a PR to bump version to the next patch (
X.Y.Z -> X.Y.(Z+1))
Manual Release Steps
- Ensure
project.versioninpyproject.tomlis the version you want to release - Open GitHub Actions and run the
Releaseworkflow - Leave
refasmain(or choose a specific commit/branch) - Confirm the workflow completes successfully
PyPI Trusted Publishing Setup (one-time)
Configure Trusted Publishing in your PyPI project:
- Go to PyPI project settings -> Publishing -> Add a new trusted publisher
- Set owner to
davzucky - Set repository to
iceberg-explorer - Set workflow name to
release.yml - Set environment name only if you enforce one in GitHub Actions
No PyPI API token is needed when Trusted Publishing is configured correctly.
Pre-commit Hooks
# Install pre-commit hooks
uv run pre-commit install
License
MIT
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 Distributions
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 iceberg_explorer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: iceberg_explorer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 53.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e53707443f81aed51eb7a222491ebd0d31b78febb24d856838bcf18107c827bc
|
|
| MD5 |
c0e3ce52bddf2b1940b642f4030b227c
|
|
| BLAKE2b-256 |
4b2648058afe2f5a17cc1b16ed3a0dfd6352b3ff932c355f9774f056906237ff
|
Provenance
The following attestation bundles were made for iceberg_explorer-0.1.0-py3-none-any.whl:
Publisher:
release.yml on davzucky/iceberg-explorer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
iceberg_explorer-0.1.0-py3-none-any.whl -
Subject digest:
e53707443f81aed51eb7a222491ebd0d31b78febb24d856838bcf18107c827bc - Sigstore transparency entry: 991489855
- Sigstore integration time:
-
Permalink:
davzucky/iceberg-explorer@17a55b385f74beb9ee71e7b231d6c5bd437ee805 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/davzucky
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@17a55b385f74beb9ee71e7b231d6c5bd437ee805 -
Trigger Event:
workflow_dispatch
-
Statement type: