Apache Polaris, the interoperable, open source catalog for Apache Iceberg https://polaris.apache.org/
  • Java 87.7%
  • Python 7.5%
  • Shell 1.5%
  • Kotlin 1.1%
  • Jupyter Notebook 0.7%
  • Other 1.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-06 10:34:00 +01:00
.github Update actions/setup-java action to v6.2.0 (#5983) 2026-11-04 17:38:07 -08:00
.idea Spotless, license header, add xml (#25) 2024-07-30 07:30:21 -07:00
aggregated-license-report Prepare for Gradle 9.6 (#4835) 2026-06-19 15:29:42 +02:00
api Fix misleading null-check message for tableUuid in TableUpdateNotification (#5900) 2026-10-29 22:43:07 -07:00
bom Allow skipping duplicate Scala variants during IDE Gradle imports (#5803) 2026-10-17 10:19:45 +02:00
build-logic Update dependency com.diffplug.spotless:spotless-plugin-gradle to v8.11.0 (#5962) 2026-11-03 13:16:22 -08:00
client/python Update dependency openapi-generator-cli to v7.27.0 (#5965) 2026-11-03 16:31:48 +01:00
codestyle NoSQL: Add maintenance API, SPI (#3028) 2025-11-12 09:18:37 -05:00
extensions Update docker.io/openpolicyagent/opa Docker tag to v1.22.2 (#5990) 2026-11-06 10:34:00 +01:00
gradle Update dependency com.google.cloud:google-cloud-iamcredentials to v2.101.0 (#5995) 2026-11-05 15:51:57 -08:00
helm/polaris Fix helm test running no tests for the Helm chart (#5877) 2026-10-27 21:10:54 -05:00
integration-tests Reject invalid external catalog connection configs with 400 instead of 500 (#5909) 2026-11-05 14:15:44 -08:00
persistence NoSQL metastore: commit catalog changes through a caller-supplied callback (#5963) 2026-11-05 13:53:27 -05:00
plugins/spark Fix typo in DeltaHelper comment (#5971) 2026-11-03 19:28:52 +00:00
polaris-core Core: Report a rename that loses the race for its name as ENTITY_ALREADY_EXISTS (#5986) 2026-11-05 11:13:25 +01:00
regtests Add missing credentials endpoint in /config (#5850) 2026-10-29 20:09:19 +00:00
releasey Bump Python client version (pyproject.toml + uv.lock) in the release script (#5188) 2026-07-30 15:41:54 -07:00
runtime Reject invalid external catalog connection configs with 400 instead of 500 (#5909) 2026-11-05 14:15:44 -08:00
server-templates fix(codegen): Do not use unnecessary @Valid annotations in static builder factories (#4621) 2026-06-17 15:44:31 -04:00
site Update openpolicyagent/opa Docker tag to v1.22.2 (#5996) 2026-11-06 10:33:31 +01:00
spec Reject invalid external catalog connection configs with 400 instead of 500 (#5909) 2026-11-05 14:15:44 -08:00
tools Update docker.io/openpolicyagent/opa Docker tag to v1.22.2 (#5990) 2026-11-06 10:34:00 +01:00
.asf.yaml Add EJ to Polaris Contributor (#4863) 2026-06-22 18:35:37 +00:00
.dockerignore Isolate Dropwizard and HK2 dependencies (#523) 2024-12-10 12:58:05 -08:00
.gitignore Allow skipping duplicate Scala variants during IDE Gradle imports (#5803) 2026-10-17 10:19:45 +02:00
.openapi-generator-ignore Update license header templates + replace in files (#173) 2024-08-24 09:40:42 +02:00
AGENTS.md docs: Prefer records for new simple value types (#5906) 2026-10-29 13:33:48 -07:00
build.gradle.kts Fix 5749 (#5752) 2026-10-09 00:49:28 -05:00
CHANGELOG.md Reject invalid external catalog connection configs with 400 instead of 500 (#5909) 2026-11-05 14:15:44 -08:00
CHAT_BYLAWS.md Graduation code base changes (#3830) 2026-02-20 17:57:07 +01:00
CODE_OF_CONDUCT.md Add Code of Conduct entry to the ASF menu (#2537) 2025-09-19 06:23:13 +02:00
CONTRIBUTING.md Doc: introduce guidelines for AI-generated contributions (#3948) 2026-03-19 11:50:37 -07:00
doap.rdf Update release in DOAP (#5712) 2026-10-06 18:54:59 +02:00
docs Revert PR 2033 (#2087) 2025-07-15 17:55:19 +02:00
getting-started [Site] Add getting-started guides as "Guides" to the web site (#3550) 2026-02-25 13:18:09 +01:00
gradle.properties Build: Ensure reproducible .properties files (#3089) 2025-12-23 08:57:46 +01:00
gradlew Update Gradle to v9.6.0 (#4832) 2026-06-19 14:03:25 +00:00
ide-name.txt Set project name in IDE (#23) 2024-07-30 07:30:20 -07:00
kind-registry.sh Update license header templates + replace in files (#173) 2024-08-24 09:40:42 +02:00
LICENSE Remove MinIO based tests and minio-testcontainer (#5192) 2026-08-20 11:30:05 +02:00
Makefile Makefile: Fix optional dependencies install along with main dependencies (#5957) 2026-11-03 11:11:50 -08:00
NOTICE Graduation code base changes (#3830) 2026-02-20 17:57:07 +01:00
polaris Promo polaris cli from PyPI (#4645) 2026-06-08 22:40:04 -05:00
README.md Remove MinIO based tests and minio-testcontainer (#5192) 2026-08-20 11:30:05 +02:00
SECURITY-THREAT-MODEL.md Add Polaris threat model and security guidance for agents (#4433) 2026-05-26 09:35:54 +02:00
SECURITY.md SECURITY.md: link the project's threat model for agent discoverability (#4561) 2026-05-28 14:27:37 +02:00
settings.gradle.kts Update plugin com.gradle.develocity to v4.6.1 (#5827) 2026-10-20 13:33:59 -07:00
version.txt Update version.txt to 1.9.0-SNAPSHOT (#5635) 2026-09-29 07:45:46 +02:00

Apache Polaris

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 (or browse the archives) and read the CONTRIBUTING guide.

Slack Build Status

Overview & Quickstart

  • Overview of what Polaris is and how it works.
  • Quickstart to set up a Polaris instance locally or on a supported cloud provider.

Project Structure

The repository is organized into the following groups of Gradle modules. Each leaf is a Gradle subproject; some link to a per-module README.

  • Core
  • API - generated from the OpenAPI specifications:
    • polaris-api-management-model, polaris-api-management-service - Polaris Management API
    • polaris-api-iceberg-service - Iceberg REST service
    • polaris-api-catalog-service - Polaris Catalog API
  • Runtime
  • Persistence
    • polaris-relational-jdbc - JDBC implementation of BasePersistence
  • Extensions
    • polaris-extensions-federation-hive, polaris-extensions-federation-hadoop, polaris-extensions-federation-bigquery - catalog federation
    • polaris-extensions-auth-opa, polaris-extensions-auth-ranger (plus *-tests) - external authorization
  • Tooling & build support
    • polaris-bom, polaris-build-logic, polaris-version - BOM, shared build logic, versioning
    • polaris-immutables, polaris-misc-types, polaris-container-spec-helper - shared utilities
    • polaris-floci-aws-testcontainer, polaris-floci-az-testcontainer, polaris-floci-gcp-testcontainer, polaris-rustfs-testcontainer, polaris-hms-testcontainer - test containers
    • polaris-config-docs-{annotations,generator,site} - reference-doc generation
    • aggregated-license-report - aggregated license report
  • Tests
    • polaris-tests - normative integration tests, reusable downstream

Other top-level directories:

Additional tooling lives in the separate Polaris-Tools repository.

Building and Running

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 realm
    • root is the CLIENT_ID
    • secret is the CLIENT_SECRET
    • If credentials are not set, it will use preset credentials POLARIS,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.

Makefile Convenience Commands

  • make build-server, make build-admin build components and container images
  • make minikube-start-cluster, make minikube-cleanup manage a local minikube cluster
  • make helm-doc-generate, make helm-unittest work with the Helm charts
  • make client-lint, make client-regenerate work with the Python client
  • make install-dependencies-brew install developer prerequisites on macOS

Running in Docker

Build 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.

Running in Kubernetes

See helm/polaris/README.md.

Configuring Polaris

Servers can be configured in several ways: see the Configuration Guide. Default values live in runtime/defaults/src/main/resources/application.properties.

Building the docs

Docs use Hugo with the Docsy theme. To preview locally:

site/bin/run-hugo-in-docker.sh

See site/README.md for more.

Develocity build scans

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.

License

Apache Polaris is under the Apache License Version 2.0. See the LICENSE.