Apache Polaris, the interoperable, open source catalog for Apache Iceberg
Apache Polaris, the interoperable, open source catalog for Apache Iceberg
Apache Polaris™ is an open-source, fully-featured catalog for Apache Iceberg™. It implements Iceberg's REST API, enabling seamless multi-engine interoperability across a wide range of platforms, including Apache Doris™, Apache Flink®, Apache Spark™, Dremio® OSS, StarRocks, and Trino.
Documentation is available at https://polaris.apache.org. The REST OpenAPI specifications can be browsed online: Polaris Management API and Polaris Catalog API.
For a high-level, auto-generated tour of the codebase's modules and relationships, see the Code Wiki for Apache Polaris. It is a third-party, auto-generated navigation aid, useful for orientation, but the source tree remains the authoritative reference.
To get involved, [subscribe to the dev mailing list][dev-list-subscribe] (or browse the archives) and read the CONTRIBUTING guide. [dev-list-subscribe]: mailto:[email protected]
The repository is organized into the following groups of Gradle modules. Each leaf is a Gradle subproject; some link to a per-module README.
polaris-core - entity definitions and core business logicpolaris-api-management-model, polaris-api-management-service - Polaris Management APIpolaris-api-iceberg-service - Iceberg REST servicepolaris-api-catalog-service - Polaris Catalog APIpolaris-server - Quarkus-based serverpolaris-admin - admin tool, mainly for bootstrapping persistencepolaris-runtime-service - the Polaris service packagepolaris-runtime-defaults - default runtime configurationpolaris-distribution - distribution packagingpolaris-runtime-common, polaris-runtime-test-common - shared runtime and test utilitiespolaris-runtime-spark-tests - integration tests for the Spark pluginpolaris-relational-jdbc - JDBC implementation of BasePersistencepolaris-extensions-federation-hive, polaris-extensions-federation-hadoop, polaris-extensions-federation-bigquery - catalog federationpolaris-extensions-auth-opa, polaris-extensions-auth-ranger (plus *-tests) - external authorizationpolaris-bom, polaris-build-logic, polaris-version - BOM, shared build logic, versioningpolaris-immutables, polaris-misc-types, polaris-container-spec-helper - shared utilitiespolaris-floci-aws-testcontainer, polaris-floci-az-testcontainer, polaris-floci-gcp-testcontainer,
polaris-rustfs-testcontainer, polaris-hms-testcontainer - test containerspolaris-config-docs-{annotations,generator,site} - reference-doc generationaggregated-license-report - aggregated license reportpolaris-tests - normative integration tests, reusable downstreamOther top-level directories:
spec/ - OpenAPI specificationsclient/python/ - Python clientplugins/spark/ - Polaris Spark pluginregtests/ - regression testshelm/ - Helm chartssite/ - documentation sitecodestyle/, gradle/, server-templates/ - build, style, and codegen supportAdditional tooling lives in the separate Polaris-Tools repository.
Apache Polaris is built using Gradle with Java 21+ and Docker 27+.
./gradlew build - To build and run tests. Make sure Docker is running, as the integration tests depend on it../gradlew assemble - To skip tests../gradlew check - To run all checks, including unit tests and integration tests.
To run all checks except integration tests, use ./gradlew check -PnoIntegrationTests../gradlew run - To run the Polaris server locally; the server is reachable at localhost:8181. This is also suitable for running regression tests, or for connecting with Spark. Set your own credentials by specifying system property ./gradlew run -Dpolaris.bootstrap.credentials=POLARIS,root,secret where:POLARIS is the realmroot is the CLIENT_IDsecret is the CLIENT_SECRETPOLARIS,root,s3cr3t./regtests/run_spark_sql.sh - To connect from Spark SQL. Here are some example commands to run in the Spark SQL shell:create database db1;
show databases;
create table db1.table1 (id int, name string);
insert into db1.table1 values (1, 'a');
select * from db1.table1;
env POLARIS_HOST=localhost ./regtests/run.sh - To run regression tests locally, see more options here.make build-server, make build-admin build components and container imagesmake minikube-start-cluster, make minikube-cleanup manage a local minikube clustermake helm-doc-generate, make helm-unittest work with the Helm chartsmake client-lint, make client-regenerate work with the Python clientmake install-dependencies-brew install developer prerequisites on macOSBuild the image locally:
./gradlew \
:polaris-server:assemble \
:polaris-server:quarkusAppPartsBuild --rerun \
-Dquarkus.container-image.build=true
Run the published image:
docker run -p 8181:8181 -p 8182:8182 apache/polaris:latest
The repository also ships docker-compose examples for various configurations. See the Quickstart for details.
Servers can be configured in several ways: see the Configuration Guide.
Default values live in runtime/defaults/src/main/resources/application.properties.
Docs use Hugo with the Docsy theme. To preview locally:
site/bin/run-hugo-in-docker.sh
See site/README.md for more.
Build scans for apache/polaris branch and tag CI runs are published to the ASF Develocity instance at
develocity.apache.org when the
DEVELOCITY_ACCESS_KEY org secret is available. Pull-request CI publishes to Gradle's public Develocity
instance instead.
Local builds publish a scan only when invoked with --scan, and only after you accept Gradle's
terms of service. Forks and other CI environments can opt in by setting
GRADLE_TOS_ACCEPTED=true. Optional overrides: DEVELOCITY_PROJECT_ID, DEVELOCITY_SERVER, and a
DEVELOCITY_ACCESS_KEY GitHub secret if you self-host Develocity.
Apache Polaris is under the Apache License Version 2.0. See the LICENSE.
No open issues yet, or sync has not completed.