{"id":23289759,"url":"https://github.com/bodo-ai/denali","last_synced_at":"2025-07-06T21:34:40.132Z","repository":{"id":245025335,"uuid":"817031006","full_name":"bodo-ai/denali","owner":"bodo-ai","description":"An open-source, community-driven REST catalog for Apache Iceberg!","archived":false,"fork":false,"pushed_at":"2024-06-26T15:50:49.000Z","size":91,"stargazers_count":25,"open_issues_count":14,"forks_count":2,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-11-14T21:39:34.669Z","etag":null,"topics":["apache-iceberg","catalog","go","golang","iceberg"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bodo-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-06-18T22:04:01.000Z","updated_at":"2024-09-25T12:02:20.000Z","dependencies_parsed_at":"2024-06-26T17:30:05.601Z","dependency_job_id":null,"html_url":"https://github.com/bodo-ai/denali","commit_stats":null,"previous_names":["bodo-inc/denali","bodo-ai/denali"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bodo-ai%2Fdenali","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bodo-ai%2Fdenali/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bodo-ai%2Fdenali/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bodo-ai%2Fdenali/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bodo-ai","download_url":"https://codeload.github.com/bodo-ai/denali/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":230532675,"owners_count":18240834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["apache-iceberg","catalog","go","golang","iceberg"],"created_at":"2024-12-20T04:18:04.586Z","updated_at":"2024-12-20T04:18:05.159Z","avatar_url":"https://github.com/bodo-ai.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Denali Catalog\n\nAn open-source Iceberg Catalog that implements the REST API spec designed to be:\n\n- Simple \u0026 Extensible: Written in Go to be easily extended, with minimal dependencies and \u003c5000 lines of hand-written code.\n- Customizable: Supports multiple database backends and warehouse storage locations. A ~20MB binary that can be easily deployed to most environments.\n  - If you want a local ephemeral catalog, use SQLite and local filesystem storage.\n  - If you want a scalable catalog, use PostgreSQL and any object store for storage.\n- Performant \u0026 Scalable: Can be easily scaled horizontally (across multiple instances) and vertically (by increasing resources).\n\nWritten 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!\n\n# Install\n### Recommended:\n```shell\ngo install github.com/Bodo-inc/denali\n```\nTo install to your `$GOPATH/bin` directory.\n\n### Manual:\n```shell\ngit clone github.com/Bodo-inc/denali\ncd denali\ngo build .\n```\nFor manual builds.\n\n# Getting Started\n\n1) Start the server: `denali start`\n2) 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. \n\nMore details of configuration options are provided below in:\n- [Database Config](#supported-database-backends)\n- [Warehouse Config](#supported-warehouse-storage-locations)\n\n# Implemented REST API Endpoints \n\n| Type | Endpoint | Implemented |\n| --- | --- | --- |\n| GET | `/v1/config` | ![done]  |\n| POST | `/v1/oauth/tokens` | ❌ Oauth Not Supported Yet |\n| GET | `/v1/{prefix}/namespaces` | ![done] |\n| POST | `/v1/{prefix}/namespaces` | ![done] |\n| GET | `/v1/{prefix}/namespaces/{namespace}` | ![done] |\n| HEAD | `/v1/{prefix}/namespaces/{namespace}` | ![done] |\n| DELETE | `/v1/{prefix}/namespaces/{namespace}` | ![done] |\n| POST | `/v1/{prefix}/namespaces/{namespace}/properties` | ![done] |\n| GET | `/v1/{prefix}/namespaces/{namespace}/tables` | ![done] |\n| POST | `/v1/{prefix}/namespaces/{namespace}/tables` | ![done] |\n| POST | `/v1/{prefix}/namespaces/{namespace}/register` | 🟡 Untested |\n| GET | `/v1/{prefix}/namespaces/{namespace}/tables/{table}` | ![done] |\n| POST | `/v1/{prefix}/namespaces/{namespace}/tables/{table}` | ![done]  |\n| DELETE | `/v1/{prefix}/namespaces/{namespace}/tables/{table}` | ![done] |\n| HEAD | `/v1/{prefix}/namespaces/{namespace}/tables/{table}` | ![done] |\n| POST | `/v1/{prefix}/tables/rename` | 🟡 Untested |\n| POST | `/v1/{prefix}/namespaces/{namespace}/tables/{table}/metrics` | ❌ Implemented but Metrics Not Tracked Yet |\n| POST | `/v1/{prefix}/transactions/commit` | ❌ Multi-Table Transactions Not Supported Yet |\n| GET | `/v1/{prefix}/namespaces/{namespace}/views` | ![done] |\n| POST | `/v1/{prefix}/namespaces/{namespace}/views` | ❌ Not Implemented Yet |\n| GET | `/v1/{prefix}/namespaces/{namespace}/views/{view}` | 🟡 Untested |\n| POST | `/v1/{prefix}/namespaces/{namespace}/views/{view}` | ❌ Not Implemented Yet |\n| DELETE | `/v1/{prefix}/namespaces/{namespace}/views/{view}` | 🟡 Untested |\n| HEAD | `/v1/{prefix}/namespaces/{namespace}/views/{view}` | 🟡 Untested |\n| POST | `/v1/{prefix}/views/rename` | 🟡 Untested  |\n\n# Supported Database Backends\n\nTo configure the database backend the server should use, set the following properties in the configuration file:\n\n```toml\n[database]\nurl = \"...\"      # URL string to database. Env: $DENALI_DATABASE_URL\ndialect = \"...\"  # Database dialect / type. Env: $DENALI_DATABASE_DIALECT\n```\n\nThe server currently supports the following databases / dialects:\n\n| Database | Supported | Dialect in Settings |  Driver Used |\n| --- | --- | --- | --- |\n| PostgreSQL | ![done] | `postgres` or `pgx` | [pgx](https://github.com/jackc/pgx)\n| SQLite | ![done] | `sqlite` or `sqlite3` | [sqlite3](https://github.com/mattn/go-sqlite3)\n| MySQL | 🟡 In Discussion\n\nIf you want to use a different database, please open an issue!\n\nOn initialization, the server will automatically set up the database with the necessary tables.\n\n# Supported Warehouse Storage Locations\n\nTo configure where the warehouse is located, set the following properties in the configuration file:\n\n```toml\n[warehouse]\npath = \"...\"  # Absolute path to warehouse. Env: $DENALI_WAREHOUSE_PATH\n```\n\n| Storage | Supported | \n| --- | --- |\n| Local Filesystem | ![done] |\n| S3 | 🟡 Untested | \n| Azure | 🟡 Untested |\n| GCS | 🟡 Untested |\n\nNote:\n- Both the server and client is required to have access to the storage location. The server does not currently support sending delegated credentials.\n- The server will not automatically set up the storage location or check on initialization.\n\n# Docs\n\nOpenAPI-based generated docs are hosted by the server at `http://\u003cbase-url\u003e:\u003cport\u003e/docs`\n\n[done]: https://cdn.jsdelivr.net/gh/Readme-Workflows/Readme-Icons@main/icons/octicons/ApprovedChanges.svg\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbodo-ai%2Fdenali","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbodo-ai%2Fdenali","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbodo-ai%2Fdenali/lists"}