Skip to main content

Berg

CI PyPI Python

Berg is a safe management layer for Apache Iceberg catalogs and table metadata. It helps teams inspect tables, identify health problems, describe desired state, review deterministic changes, and execute approved operations inside their own infrastructure.

Berg does not replace Spark, Flink, Trino, Athena, or another query engine. It does not move or transform table records. Its focus is controlled metadata and catalog operations with explicit approval, backend capability checks, durable execution state, idempotency, audit history, and failure reconciliation.

Install

With pip:

python -m pip install berg-iceberg

With uv:

uv tool install berg-iceberg

Then:

berg --version
berg --help

What you can do

berg connect
berg capabilities
berg scan
berg inspect analytics.events
berg health analytics.events
berg maintenance-report analytics.events --output json
berg diff table.yaml --fail-on-drift --output json

Use --output json for automation and CI/CD integrations.

For a metadata change, Berg uses a reviewable plan:

berg plan analytics.events \
  --set-property write.target-file-size-bytes=536870912 \
  --save events-plan.json

berg apply events-plan.json --dry-run
berg apply events-plan.json --approve --audit-file audit.jsonl
berg execution-status ID --output json

Plans are checked against current table state and the selected backend. Berg rejects unsupported operations, stale plans, unauthorized changes, and unsafe duplicate execution before mutation.

For CI/CD policy gates, use berg validate-policy and berg authorize on the exact saved plan before any execution. See the CI/CD integration guide and the provider-neutral examples in examples/ci.

Customer-managed policy bundles are versioned berg.dev/v1 YAML or JSON documents. They can scope allow, warning, approval, and denial rules to operations, namespaces, and tables. Use docs/policy-bundles.md and the example in examples/policies/production.yaml.

Declarative table management

Desired state can be written as a portable berg.dev/v1 YAML or JSON document:

berg validate-spec table.yaml
berg diff table.yaml
berg plan --spec table.yaml --save table-plan.json

Python users can author the same document without connecting to a catalog:

from berg.sdk import TableDefinition

events = (
    TableDefinition.for_table("analytics.events")
    .with_column("id", "long", required=True)
    .with_column("created_at", "timestamp", required=True)
    .partition_by("created_at", transform="day")
    .with_property("write.target-file-size-bytes", "536870912")
)

events.write("events.yaml")

Policies can be authored with the same typed SDK:

from berg.sdk import PolicyDefinition

PolicyDefinition.for_policy("production") \\
    .require_approval("review-properties", operations=("SET_PROPERTY",)) \\
    .write("production-policy.yaml")

Supported catalog paths

Berg has compatibility contracts for:

  • Iceberg REST Catalog with S3-compatible storage
  • Project Nessie
  • Apache Polaris
  • JDBC/PostgreSQL catalogs
  • Hive Metastore
  • AWS Glue Catalog with S3

Support is operation- and backend-specific. Run berg capabilities and read the compatibility matrix before enabling an operation in automation.

Customer-local Agent

The Agent runs the same guarded execution kernel inside customer infrastructure. It receives an approved plan, uses customer credentials, and writes state and audit records locally. It requires no inbound service and does not upload raw table data to Berg Cloud.

berg agent apply plan.json --approve
berg agent status --output json

berg maintenance-report and berg agent status are read-only operational commands. Maintenance reports explain recommendations and backend blocks; Agent status includes the versioned status/heartbeat envelope and local inbox, processing, and quarantine counts.

The reference container deployment is in docker-compose.agent.yml.

Local development

The private conformance repository contains disposable Docker environments and live compatibility contracts. The core repository contains the installable package and its offline test suite:

git clone https://github.com/Berg-Cloud/berg.git
cd berg
uv sync --group dev
uv run pytest

See the conformance repository for local catalog stacks. See local development, the capability matrix, and the Python API guide for details.

The live backend matrix and disposable acceptance environments are maintained in the private Berg Conformance repository. See the repository topology for the ownership and migration rules.

Safety boundaries

Berg currently supports approved metadata operations such as properties, compatible schema additions, additive partition fields, certified snapshot expiration, and guarded orphan-file cleanup. Compaction, arbitrary destructive changes, and unsupported backend operations remain disabled or capability-gated.

The product roadmap and release boundaries are documented in V0_SCOPE.md, V1_SCOPE.md, V1.2_SCOPE.md, V1.3_SCOPE.md, V1.4_SCOPE.md, and docs/roadmap.md.

License and security

See SECURITY.md for vulnerability reporting and docs/security.md for the operational security model.

Metadata

Release files for berg-iceberg 1.5.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for berg-iceberg 1.5.0
File Size Uploaded Provenance
berg_iceberg-1.5.0.tar.gz 280.9 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for berg-iceberg 1.5.0
File Interpreter ABI Platform
berg_iceberg-1.5.0-py3-none-any.whl Python 3 none any Details

Total release size: 338.2 kB

Release files / berg_iceberg-1.5.0.tar.gz

Download URL berg_iceberg-1.5.0.tar.gz
Size 280.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a18758d8136b82c095aacc8c82baa86a5812eb8f67a1a28f2fc3f98d6911be20
BLAKE2b-256 checksum
How to use checksums
94143d360c315bdac5fdd96d4207631ab6ba61b2e41dad43ba845896d93c066d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Release files / berg_iceberg-1.5.0-py3-none-any.whl

Download URL berg_iceberg-1.5.0-py3-none-any.whl
Size 57.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1cd5d945fc861f1a3b7d2e418cef30124dd77b10f6d1e2bd07428265e7569dab
BLAKE2b-256 checksum
How to use checksums
a2c1f38ac4230a9fe3a82a84d5fe04601d3b8f7e0160ebef36ec75844143c5c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

Security for berg-iceberg 1.5.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for berg_iceberg-1.5.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page