Apache Iceberg Go 0.5.0 Release
The Apache Iceberg community is pleased to announce version 0.5.0 of 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 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.
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 is now implemented
- Unknown Type: Support for the
Unknowntype introduced in the V3 spec - TimestampNano and TimestampNanoTz: New timestamp nanosecond types required by V3 are now supported
- Row Lineage Tracking: Row lineage metadata is now tracked and the snapshot producer wires V3 row-lineage state correctly, with a fix for first-row-id assignment in V3 manifest lists
- Source IDs: Support for
source-idsmetadata was added
View Support🔗
iceberg-go now has substantial support for Iceberg views:
- View Spec: Initial implementation of the View specification including serialization, deserialization, and JSON validation
- View Metadata Builder: Full view metadata builder and
UpdateViewmethod in the REST catalog - Load View: Load existing views from catalogs
- Hive Catalog View Operations: View create, load, drop, and list support in the Hive catalog
- RCK Compatibility: Field ID preservation and error handling for REST Catalog Kit compatibility
Schema Evolution🔗
- Schema evolution: Full schema evolution support was added, enabling
AddColumn,RenameColumn,UpdateColumnType, and related operations - HighestFieldID fixes: Corrected
HighestFieldIDto include the List element ID and fixed a related bug
Delete File Support🔗
iceberg-go now supports both strategies for deleting rows from Iceberg tables:
- Copy-on-Write deletes: Implemented
copy-on-writedelete mode for rewriting data files on delete - Merge-on-Read deletes: Implemented
merge-on-readdelete mode for writing position and equality delete files - Table overwrite: General table overwrite functionality with a clean options-based API
- Add/replace data files: Functions to directly add or replace DataFiles in a table
Hive Catalog🔗
- Initial Hive Catalog support: Full Hive metastore catalog was added, supporting table creation, listing, loading, and dropping
- View operations in Hive: View support was added alongside the table operations
Puffin File Format🔗
A Puffin reader and writer 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 for the REST catalog, enabling custom credential flows
- WithHeaders: A
WithHeaderscatalog option allows injecting custom HTTP headers into REST catalog requests - Staged table creation: Support for staged table creation in the REST catalog
- ListNamespaces pagination: Pagination support was added to
ListNamespaces - RegisterTable fix: Corrected the
RegisterTableREST endpoint - renameTable 204 handling: Properly handle
204 No Contentresponses onrenameTable
Write Performance🔗
- Partitioned write throughput: Optimized partitioned write throughput by reducing allocations in the hot path
- Gzip metadata: Support for both reading and writing gzip-compressed metadata JSON files
IO Improvements🔗
- IO registry pattern: Refactored IO scheme registration to use a registry pattern, making it easier to add custom IO backends
- S3 signing: Allow
s3.signer.uriproperty and only reject explicits3.remote-signing-enabled=true; also setx-amz-content-sha256before signing - Azure SAS tokens: Updated SAS token behaviour to match the Java implementation
Bug Fixes🔗
Notable bug fixes in this release include:
- Fix truncate transform for negative integers
- Fix data race in
yieldDataFiles - Remove partition type cache causing concurrent map write panic
- Preserve snapshot log history
- Handle missing parent snapshots in
ExpireSnapshots - Add
AssertRefSnapshotIDrequirements toExpireSnapshots - Support INT32/INT64 physical types for decimal columns
- Fix decimal literal
MarshalBinary - Fix index out of range in
buildManifestEvaluator - Fix response body leaks in the REST catalog
- Close writers on error for every exit path
- Fix
findMinSeqfrom manifest list
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.ParseAWSConfigis now in thegocloudpackage, though it wasn't expected that this would necessarily be used by many consumers anyways.- The
table.Metadatainterface has two new methodsPartitionSpecByIDandNextRowID, 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.CreateViewfunction signature has changed (#629) - The fields of
catalog.CreateTableCfghave been moved into an embeddedcommonCreateCfgstruct (#754). Field access should still work via the inherited properties, but you should useNewCreateTableCfg()and theWith*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 for tracking work and the Apache Iceberg Community Slack for discussions.
The easiest way to get started is to:
- Try
iceberg-gowith your workloads and report any issues you encounter - Review the contributor guide
- Look for good first issues
For more information, visit the iceberg-go repository.