An open-source Iceberg Catalog that implements the REST API spec designed to be:
- Simple & Extensible: Written in Go to be easily extended, with minimal dependencies and <5000 lines of hand-written code.
- Customizable: Supports multiple database backends and warehouse storage locations. A ~20MB binary that can be easily deployed to most environments.
- If you want a local ephemeral catalog, use SQLite and local filesystem storage.
- If you want a scalable catalog, use PostgreSQL and any object store for storage.
- Performant & Scalable: Can be easily scaled horizontally (across multiple instances) and vertically (by increasing resources).
Written with ❤️ for Iceberg + Go, we want to build a REST catalog for the community with the community. Let's explore the full potential of Iceberg catalogs together. Open to contributions, feedback, and feature requests!
go install github.com/Bodo-inc/denali
To install to your $GOPATH/bin
directory.
git clone github.com/Bodo-inc/denali
cd denali
go build .
For manual builds.
- Start the server:
denali start
- If the server does not find a
config.toml
file, it will create one in the config directory (note, this depends on your OS on where it is). Your default text editor will be opened to edit the configuration file.
More details of configuration options are provided below in:
To configure the database backend the server should use, set the following properties in the configuration file:
[database]
url = "..." # URL string to database. Env: $DENALI_DATABASE_URL
dialect = "..." # Database dialect / type. Env: $DENALI_DATABASE_DIALECT
The server currently supports the following databases / dialects:
Database | Supported | Dialect in Settings | Driver Used |
---|---|---|---|
PostgreSQL | postgres or pgx |
pgx | |
SQLite | sqlite or sqlite3 |
sqlite3 | |
MySQL | 🟡 In Discussion |
If you want to use a different database, please open an issue!
On initialization, the server will automatically set up the database with the necessary tables.
To configure where the warehouse is located, set the following properties in the configuration file:
[warehouse]
path = "..." # Absolute path to warehouse. Env: $DENALI_WAREHOUSE_PATH
Storage | Supported |
---|---|
Local Filesystem | |
S3 | 🟡 Untested |
Azure | 🟡 Untested |
GCS | 🟡 Untested |
Note:
- Both the server and client is required to have access to the storage location. The server does not currently support sending delegated credentials.
- The server will not automatically set up the storage location or check on initialization.
OpenAPI-based generated docs are hosted by the server at http://<base-url>:<port>/docs