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
Metadata
Release files for iceberg-explorer 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| iceberg_explorer-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for iceberg_explorer-0.1.0-py3-none-any.whl |
Release files / iceberg_explorer-0.1.0-py3-none-any.whl
| Download URL | iceberg_explorer-0.1.0-py3-none-any.whl |
|---|---|
| Size | 53.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e53707443f81aed51eb7a222491ebd0d31b78febb24d856838bcf18107c827bc
|
|
BLAKE2b-256 checksum How to use checksums |
4b2648058afe2f5a17cc1b16ed3a0dfd6352b3ff932c355f9774f056906237ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.
Transparency logSecurity for iceberg-explorer 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
1 file in this release has been uploaded with provenance metadata.
Attestation for iceberg_explorer-0.1.0-py3-none-any.whl
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Feb 25, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.