---
date: 2026-03-05
title: Apache Iceberg Go 0.5.0 Release
slug: apache-iceberg-go-0.5.0-release
authors:
  - iceberg-pmc
categories:
  - release
---

<!--
 - Licensed to the Apache Software Foundation (ASF) under one or more
 - contributor license agreements.  See the NOTICE file distributed with
 - this work for additional information regarding copyright ownership.
 - The ASF licenses this file to You under the Apache License, Version 2.0
 - (the "License"); you may not use this file except in compliance with
 - the License.  You may obtain a copy of the License at
 -
 -   http://www.apache.org/licenses/LICENSE-2.0
 -
 - Unless required by applicable law or agreed to in writing, software
 - distributed under the License is distributed on an "AS IS" BASIS,
 - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 - See the License for the specific language governing permissions and
 - limitations under the License.
 -->

The Apache Iceberg community is pleased to announce version 0.5.0 of [iceberg-go](https://github.com/apache/iceberg-go).

This release covers approximately five months of development since the 0.4.0 release in October 2025 and is the result of merging over **110 PRs** from **31 contributors**, including **18 first-time contributors**. See the [full changelog](https://github.com/apache/iceberg-go/compare/v0.4.0...v0.5.0) for the complete list of changes.

`iceberg-go` is a native Go implementation of the Apache Iceberg table format, providing libraries for reading, writing, and managing Iceberg tables in Go applications.

<!-- more -->

## Release Highlights

### Iceberg V3 Table Spec Support

This release significantly advances `iceberg-go`'s implementation of the Iceberg V3 table specification:

- **Table Metadata V3**: [Full V3 metadata format support](https://github.com/apache/iceberg-go/pull/585) is now implemented
- **Unknown Type**: [Support for the `Unknown` type](https://github.com/apache/iceberg-go/pull/605) introduced in the V3 spec
- **TimestampNano and TimestampNanoTz**: [New timestamp nanosecond types](https://github.com/apache/iceberg-go/pull/594) required by V3 are now supported
- **Row Lineage Tracking**: [Row lineage metadata](https://github.com/apache/iceberg-go/pull/659) is now tracked and the [snapshot producer wires V3 row-lineage state](https://github.com/apache/iceberg-go/pull/728) correctly, with a fix for [first-row-id assignment in V3 manifest lists](https://github.com/apache/iceberg-go/pull/741)
- **Source IDs**: [Support for `source-ids` metadata](https://github.com/apache/iceberg-go/pull/651) was added

### View Support

`iceberg-go` now has substantial support for Iceberg views:

- **View Spec**: [Initial implementation of the View specification](https://github.com/apache/iceberg-go/pull/600) including serialization, deserialization, and JSON validation
- **View Metadata Builder**: [Full view metadata builder](https://github.com/apache/iceberg-go/pull/629) and `UpdateView` method in the REST catalog
- **Load View**: [Load existing views](https://github.com/apache/iceberg-go/pull/640) from catalogs
- **Hive Catalog View Operations**: [View create, load, drop, and list support](https://github.com/apache/iceberg-go/pull/742) in the Hive catalog
- **RCK Compatibility**: [Field ID preservation and error handling](https://github.com/apache/iceberg-go/pull/647) for REST Catalog Kit compatibility

### Schema Evolution

- **Schema evolution**: [Full schema evolution support](https://github.com/apache/iceberg-go/pull/596) was added, enabling `AddColumn`, `RenameColumn`, `UpdateColumnType`, and related operations
- **HighestFieldID fixes**: Corrected `HighestFieldID` to [include the List element ID](https://github.com/apache/iceberg-go/pull/609) and [fixed a related bug](https://github.com/apache/iceberg-go/pull/611)

### Delete File Support

`iceberg-go` now supports both strategies for deleting rows from Iceberg tables:

- **Copy-on-Write deletes**: [Implemented `copy-on-write` delete mode](https://github.com/apache/iceberg-go/pull/718) for rewriting data files on delete
- **Merge-on-Read deletes**: [Implemented `merge-on-read` delete mode](https://github.com/apache/iceberg-go/pull/721) for writing position and equality delete files
- **Table overwrite**: [General table overwrite functionality](https://github.com/apache/iceberg-go/pull/674) with a [clean options-based API](https://github.com/apache/iceberg-go/pull/717)
- **Add/replace data files**: [Functions to directly add or replace DataFiles](https://github.com/apache/iceberg-go/pull/723) in a table

### Hive Catalog

- **Initial Hive Catalog support**: [Full Hive metastore catalog](https://github.com/apache/iceberg-go/pull/678) was added, supporting table creation, listing, loading, and dropping
- **View operations in Hive**: [View support](https://github.com/apache/iceberg-go/pull/742) was added alongside the table operations

### Puffin File Format

A [Puffin reader and writer](https://github.com/apache/iceberg-go/pull/676) was implemented, enabling `iceberg-go` to read and write Puffin statistics files used for table statistics and NDV sketches.

### Catalog Improvements

- **AuthManager support**: [Pluggable authentication manager](https://github.com/apache/iceberg-go/pull/579) for the REST catalog, enabling custom credential flows
- **WithHeaders**: [A `WithHeaders` catalog option](https://github.com/apache/iceberg-go/pull/652) allows injecting custom HTTP headers into REST catalog requests
- **Staged table creation**: [Support for staged table creation](https://github.com/apache/iceberg-go/pull/754) in the REST catalog
- **ListNamespaces pagination**: [Pagination support](https://github.com/apache/iceberg-go/pull/694) was added to `ListNamespaces`
- **RegisterTable fix**: [Corrected the `RegisterTable` REST endpoint](https://github.com/apache/iceberg-go/pull/624)
- **renameTable 204 handling**: [Properly handle `204 No Content`](https://github.com/apache/iceberg-go/pull/633) responses on `renameTable`

### Write Performance

- **Partitioned write throughput**: [Optimized partitioned write throughput](https://github.com/apache/iceberg-go/pull/622) by reducing allocations in the hot path
- **Gzip metadata**: Support for both [reading](https://github.com/apache/iceberg-go/pull/610) and [writing](https://github.com/apache/iceberg-go/pull/612) gzip-compressed metadata JSON files

### IO Improvements

- **IO registry pattern**: [Refactored IO scheme registration](https://github.com/apache/iceberg-go/pull/709) to use a registry pattern, making it easier to add custom IO backends
- **S3 signing**: [Allow `s3.signer.uri` property](https://github.com/apache/iceberg-go/pull/744) and only reject explicit `s3.remote-signing-enabled=true`; also [set `x-amz-content-sha256` before signing](https://github.com/apache/iceberg-go/pull/637)
- **Azure SAS tokens**: [Updated SAS token behaviour](https://github.com/apache/iceberg-go/pull/746) to match the Java implementation

### Bug Fixes

Notable bug fixes in this release include:

- [Fix truncate transform for negative integers](https://github.com/apache/iceberg-go/pull/608)
- [Fix data race in `yieldDataFiles`](https://github.com/apache/iceberg-go/pull/650)
- [Remove partition type cache causing concurrent map write panic](https://github.com/apache/iceberg-go/pull/627)
- [Preserve snapshot log history](https://github.com/apache/iceberg-go/pull/638)
- [Handle missing parent snapshots in `ExpireSnapshots`](https://github.com/apache/iceberg-go/pull/671)
- [Add `AssertRefSnapshotID` requirements to `ExpireSnapshots`](https://github.com/apache/iceberg-go/pull/672)
- [Support INT32/INT64 physical types for decimal columns](https://github.com/apache/iceberg-go/pull/686)
- [Fix decimal literal `MarshalBinary`](https://github.com/apache/iceberg-go/pull/745)
- [Fix index out of range in `buildManifestEvaluator`](https://github.com/apache/iceberg-go/pull/692)
- [Fix response body leaks in the REST catalog](https://github.com/apache/iceberg-go/pull/655)
- [Close writers on error for every exit path](https://github.com/apache/iceberg-go/pull/667)
- [Fix `findMinSeq` from manifest list](https://github.com/apache/iceberg-go/pull/693)

### Breaking Changes

Some of these changes are breaking changes that need to be called out:

- You now need to add `import _ "github.com/apache/iceberg-go/io/gocloud"` to register the storage implementations for S3, GCS, Azure and in-memory blobs. They are no longer registered by default, only the local filesystem implementation exists by default.
- `io.ParseAWSConfig` is now in the `gocloud` package, though it wasn't expected that this would necessarily be used by many consumers anyways.
- The `table.Metadata` interface has two new methods `PartitionSpecByID` and `NextRowID`, any packages that implemented their own Metadata object to meet the interface would need to add these methods. Though it is not expected that consumers would do this.
- The `rest.Catalog.CreateView` function signature has changed ([#629](https://github.com/apache/iceberg-go/pull/629))
- The fields of `catalog.CreateTableCfg` have been moved into an embedded `commonCreateCfg` struct ([#754](https://github.com/apache/iceberg-go/pull/754)). Field access should still work via the inherited properties, but you should use `NewCreateTableCfg()` and the `With*` methods rather than attempting to construct this directly.

## New Contributors

Welcome to all 18 first-time contributors:
@hamilton-earthscope, @itaigilo, @ankur-anand, @0xMALVEE, @el10savio, @rambleraptor, @vjanelle, @hdnpth, @dhananjaykrutika, @hackintoshrao, @csumisha, @ErenDursun, @dontirun, @alexandre-normand, @agaddis02, @mkuznets, @lovromazgon, @zhjwpku

## Getting Involved

The `iceberg-go` project welcomes contributions. We use GitHub [issues](https://github.com/apache/iceberg-go/issues) for tracking work and the [Apache Iceberg Community Slack](https://iceberg.apache.org/community/#slack) for discussions.

The easiest way to get started is to:

1. Try `iceberg-go` with your workloads and report any issues you encounter
2. Review the [contributor guide](https://github.com/apache/iceberg-go/blob/main/CONTRIBUTING.md)
3. Look for [good first issues](https://github.com/apache/iceberg-go/contribute)

For more information, visit the [iceberg-go repository](https://github.com/apache/iceberg-go).
