Skip to content
CatalogsLast updated: October 14, 2026

Project Nessie

Project Nessie is an open source Iceberg catalog with Git-like branches, tags, and multi-table commits. See how it works and how it compares to Apache Polaris.

project nessienessie iceberg catalognessie git like catalogiceberg branching catalognessie transactional catalog

Project Nessie

Project Nessie is an open source transactional catalog for Apache Iceberg that adds Git-like branching and merging at the catalog level. It serves the Iceberg REST Catalog API alongside its own API for branches and tags. Originally developed and open-sourced by Dremio, Nessie enables data engineering teams to work with Iceberg tables the same way software engineers work with code: on isolated branches, with the ability to test changes safely before merging to the main catalog state.

What Makes Nessie Unique

Nessie does not store data files or Iceberg manifests. For each table on each branch, it stores a pointer to the table’s current metadata file. Standard Iceberg catalogs (Hive Metastore, AWS Glue, Apache Polaris) track one current state per table. Nessie adds a versioning layer above the catalog that tracks the state of the entire catalog (all tables, all namespaces) as a sequence of commits, each with a unique hash.

This enables:

Git-Like Workflow for Data Engineering

Nessie’s branching model translates directly to common data engineering patterns:

Development Isolation

main branch           dev-etl-v2 branch
───────────────       ────────────────────
current_state    →    fork
                      run new ETL logic
                      validate results
                      ← merge to main (or discard)

ETL developers can run their jobs against real production data (copied via branch fork: zero data copy) on a dev branch without any risk of corrupting the production catalog.

Write-Audit-Publish and CI/CD for Data Pipelines

Data pipelines can be tested against a branch of the catalog in CI/CD:

  1. CI creates a ci-build-123 branch from main.
  2. Pipeline runs against the branch and commits results.
  3. Tests validate the output.
  4. On success, branch merges to main; on failure, branch is discarded.

This is the Write-Audit-Publish pattern. Iceberg also supports branches and tags on a single table, which can drive WAP without Nessie. Nessie’s difference is that its branches cover the whole catalog.

Zero-Copy Experiments

“Zero-copy” branching means the branch does NOT duplicate data files: it only duplicates the catalog metadata pointers. Creating a branch with 100TB of Iceberg data takes milliseconds and costs nothing in storage.

Nessie API

Nessie exposes both the standard Iceberg REST Catalog API and its own API for branch and tag management:

Iceberg REST Catalog Compatibility

from pyiceberg.catalog import load_catalog

catalog = load_catalog(
    "nessie",
    **{
        "type": "rest",
        # The branch is the last path segment of the REST URI
        "uri": "http://localhost:19120/iceberg/main",
    }
)

Branch Operations with the Nessie CLI

The Nessie CLI wraps the native API (served under /api/v2) with SQL-like commands:

CONNECT TO http://localhost:19120/api/v2
CREATE BRANCH dev_etl FROM main
LIST REFERENCES
MERGE BRANCH dev_etl INTO main

Nessie vs. Apache Polaris

FeatureProject NessieApache Polaris
GovernanceOpen source project (Apache 2.0 license)Apache Software Foundation project
Iceberg REST APIYesYes
Catalog-level branchingYes (key differentiator)No; uses Iceberg table-level branches
Multi-table atomic commitsYes, through branch mergesYes, through the REST multi-table commit endpoint
Credential vendingS3 assume-role credentials and request signingYes
Access controlAuthorization rulesRole-based access control
Best forBranch-based ETL workflowsGovernance and broad engine support

For help choosing a catalog, read Choosing the Right Iceberg Control Plane, and see the Apache Polaris catalog entry.

Nessie in the Broader Ecosystem

Nessie is commonly used in local and self-hosted development environments via Docker:

# docker-compose.yml
services:
  nessie:
    image: ghcr.io/projectnessie/nessie:latest
    ports:
      - "19120:19120"

Dremio, where Nessie originated, can connect to Nessie as a source and query branches with AT BRANCH SQL. Dremio’s earlier managed catalog, Arctic, was built on Nessie. In 2024 Dremio announced it would fold Nessie’s capabilities into Apache Polaris, and its current catalog, Dremio Catalog, is built on Polaris. Nessie remains available as its own open source project.

The Nessie project is hosted at projectnessie.org and governed as a community open-source project.

Read more on this blog

📚 Go Deeper on Apache Iceberg

Alex Merced has authored three hands-on books covering Apache Iceberg, the Agentic Lakehouse, and modern data architecture. Pick up a copy to master the full ecosystem.

← Back to Iceberg Knowledge Base

Work with Alex