
# IceGuard
**A modern web console to manage, inspect and maintain Apache Icebergβ’ tables across multiple catalogs.**
**π [adelfardi.github.io/iceguard-site](https://adelfardi.github.io/iceguard-site/)**
[](https://adelfardi.github.io/iceguard-site/)
[](https://github.com/adelfardi/iceguard/actions/workflows/ci.yml)
[](https://github.com/adelfardi/iceguard/releases/latest)
[](https://github.com/adelfardi/iceguard/pkgs/container/iceguard-backend)
[](LICENSE)
[](backend)
[](frontend)
[](CONTRIBUTING.md)
Dashboard β a table's branches & tags graph, storage health down to each partition, timeline and schema evolution β a Spark maintenance action with its result + logs β catalogs, wizards and pipelines. βΆ MP4 version Β· live demo
> β οΈ **Independent community project β not affiliated with or endorsed by the Apache Software Foundation.**
> "Apache", "Apache Iceberg", "Iceberg" and "Apache Polaris" are trademarks of the ASF.
---
## What is IceGuard?
IceGuard is an admin & maintenance console for the **Apache Iceberg** lakehouse. Point it at one or
more catalogs (REST, Nessie, Polaris) and get a single UI to browse namespaces and tables, evolve
schemas and partitions, edit properties, sample data, inspect storage layout, view lineage, and run
(or schedule) maintenance like snapshot expiration and data-file compaction.
It is **not** a catalog β it sits on top of your existing Iceberg catalogs.
### What IceGuard actually is
IceGuard is **two components**:
1. **Frontend** β the React/TypeScript web UI.
2. **Backend** β the Quarkus REST API.
It has **one required dependency**: a **PostgreSQL** database (you provide it), where the backend
stores IceGuard's own state β registered catalogs, pipelines, schedules, alerts and execution
history. Postgres is not part of IceGuard; it's infrastructure IceGuard needs to run, like a JVM.
IceGuard then **connects to your own** Iceberg catalog(s) and object store.
> The `docker-compose.yml` in this repo (MinIO, an Iceberg REST Catalog, Nessie, Apache Polaris,
> optionally Spark) is **only a local test sandbox** so you can try IceGuard end-to-end without
> bringing your own infrastructure. **It is not part of the product** β in production you point
> IceGuard at your existing catalogs and storage.
## Features
- **Multi-catalog** β register and switch between REST, Nessie, Polaris and Unity Catalog (None/Bearer/OAuth2
supported). Catalogs can be **tagged** and filtered, and edited on a dedicated page (credentials, arbitrary
properties, S3 access modes).
- **Dashboard** β configurable, live widgets (storage, maintenance reliability, recently active partitions,
file sizes, catalogs, executions): add them from a gallery, pin them from a table, drag to reorder.
- **Namespaces & tables** β browse the tree, create namespaces, create/drop/rename tables, insert sample rows.
- **Schema editor** β add / rename / retype / re-doc / drop multiple columns, applied in a **single commit**.
- **Properties editor** β add / update / remove table properties in a **single commit**.
- **Partition evolution** β add or drop partition fields (identity, bucket, truncate, year/month/day/hour).
- **Versioning** β a git-style graph of the snapshot history with one lane per branch and tag; branch, tag
(with retention policy) and snapshot lists, snapshot details and rollback. Nessie history is rebuilt from
its commit log.
- **Storage & health** β point-in-time totals, file-size histogram and per-partition aggregates (server-side
paginated, typed filters), with a **health grade** for the table and for every partition (file size vs
target, small files, delete files; configurable thresholds). Drill down to a partition's files and to a
file's rows, data and delete files alike. See **[docs/STORAGE_HEALTH.md](docs/STORAGE_HEALTH.md)**.
- **Evolution** β schema-version history with column diffs, and a visual snapshot-to-snapshot diff.
- **Timeline** β snapshots + executions on one timeline, click any item for its output/logs.
- **Maintenance** β expire snapshots, rewrite data files (strategy, sort order, `where`, options; whole table or
selected partitions), rewrite manifests, rewrite position / equality delete files, remove orphan files,
rollback. Pluggable executors: a **Java API** executor (real compaction and orphan removal on small,
append-only tables) and a **Spark** executor (local `local[*]` with tunable resources, or a remote Spark
cluster).
- **Commit activity** β the quietest window of the day, detected from snapshot timestamps, to schedule
maintenance off-peak.
- **Pipelines** β chain maintenance actions with per-task parameters, retries and delay, and a cron schedule
built graphically; Airflow-style run view with rerun and retry of a failed task.
- **Alerts** β threshold rules on table metrics with optional SMTP email notifications.
- **Public demo mode** β `ICEGUARD_DEMO_MODE=true` on the frontend serves a read-only UI (banner, writes refused
with a clear message), as on [demo.iceguard.cloud](https://demo.iceguard.cloud).
## Supported catalogs
Any Iceberg REST-compatible catalog works. The **Add Catalog** wizard shows a card per engine, and
the type is auto-detected from the catalog name/URI:
| | Catalog | Typical URI | Auth |
|:---:|---|---|---|
|