| Crates.io | icepick |
| lib.rs | icepick |
| version | 0.4.1 |
| created_at | 2025-11-17 04:20:25.466525+00 |
| updated_at | 2026-01-19 20:23:55.530283+00 |
| description | Experimental Rust client for Apache Iceberg with WASM support for AWS S3 Tables and Cloudflare R2 |
| homepage | https://github.com/smithclay/icepick |
| repository | https://github.com/smithclay/icepick |
| max_upload_size | |
| id | 1936233 |
| size | 935,088 |
A CLI tool and wasm-compatible library for managing Apache Iceberg tables in AWS S3 Tables and Cloudflare R2 Data Catalog.
icepick provides a simple command-line interface and wasm-friendly library for working with Apache Iceberg tables:
The official iceberg-rust library doesn't yet support WASM compilation, and most Iceberg tools are built for JVM environments. icepick fills the gap for:
cargo install icepick --features cli
Set your catalog credentials:
# For Cloudflare R2
export ICEPICK_CATALOG_URL="https://catalog.cloudflarestorage.com/<account-id>/<bucket>"
export ICEPICK_TOKEN="<cloudflare-api-token>"
# For AWS S3 Tables
export ICEPICK_CATALOG_ARN="arn:aws:s3tables:us-west-2:123456789012:bucket/my-bucket"
# Uses AWS credential chain (env vars, ~/.aws/credentials, IAM role)
# List namespaces
icepick namespace list
# List tables in a namespace
icepick table list --namespace my_namespace
# Get table info
icepick table info my_namespace.my_table
# List all namespaces
icepick namespace list
# Create a namespace
icepick namespace create my_namespace
# Delete a namespace
icepick namespace delete my_namespace
# List tables in a namespace
icepick table list --namespace my_namespace
# Get detailed table info (schema, partitioning, snapshots)
icepick table info my_namespace.my_table
# Scan table data (shows pruning stats with filters)
icepick table scan my_namespace.my_table
# Scan with filter
icepick table scan my_namespace.my_table --filter "date >= '2024-01-01'"
# Limit output rows
icepick table scan my_namespace.my_table --limit 100
Commit existing Parquet files to an Iceberg table:
# Preview what would be committed (dry run)
icepick commit /data/**/*.parquet --namespace prod --table events --dry-run
# Commit files to existing table
icepick commit /data/**/*.parquet --namespace prod --table events
# Create new table with partition spec
icepick commit /data/**/*.parquet --namespace prod --table events \
--create --partition year:int,month:int
# For non-Hive paths, specify partition values explicitly
icepick commit /flat/*.parquet --namespace prod --table events \
--partition-values year=2024,month=01
# Use specific file as schema exemplar
icepick commit /data/**/*.parquet --namespace prod --table events \
--exemplar /data/sample.parquet --create
The commit command:
--exemplar) as the reference--partition-values for flat directory structures--dry-run before committingMerge small files into larger ones for better query performance:
# Preview compaction plan (dry run)
icepick compact my_namespace.my_table --dry-run
# Execute compaction with default settings
icepick compact my_namespace.my_table
# Custom target file size (256 MB)
icepick compact my_namespace.my_table --target-size 268435456
# Only compact files smaller than 128 MB
icepick compact my_namespace.my_table --max-input-size 134217728
Manage table snapshots and clean up old versions:
# List all snapshots with age and status
icepick snapshot list my_namespace.my_table
# Preview cleanup (dry run)
icepick snapshot cleanup my_namespace.my_table --dry-run
# Execute cleanup with retention policy
icepick snapshot cleanup my_namespace.my_table \
--older-than-days 7 \
--retain-last 10
Snapshot cleanup respects:
export ICEPICK_CATALOG_URL="https://catalog.cloudflarestorage.com/<account-id>/<bucket>"
export ICEPICK_TOKEN="<your-api-token>"
The R2 catalog is fully WASM-compatible, making it suitable for:
Uses the AWS default credential provider chain:
AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)~/.aws/credentials)export ICEPICK_CATALOG_ARN="arn:aws:s3tables:us-west-2:123456789012:bucket/my-bucket"
Important: Ensure your credentials have S3 Tables permissions.
S3 Tables requires the AWS SDK and is only available on native platforms (Linux, macOS, Windows). It does not compile to WASM.
icepick can also be used as a Rust library for programmatic access to Iceberg tables. See DEVELOPER.md for:
Contributions are welcome! Please feel free to submit issues and pull requests.
Built on the official iceberg-rust library from the Apache Iceberg project.