Skip to content

v0.6.3

Choose a tag to compare

@so2liu so2liu released this 28 Oct 17:10
· 8 commits to main since this release

Breaking Changes

Bundle format changed from base64-encoded to makeself-style

  • Old bundles (v0.6.2 and earlier) cannot be loaded by v0.6.3+
  • New bundles cannot be loaded by v0.6.2 and earlier

Major Improvements

Size Reduction (25% smaller bundles)

  • Eliminates 33% base64 encoding overhead
  • postgres:15: 155MB (was ~207MB with base64)
  • alpine:latest: 9.7MB (was ~13MB with base64)

Performance Improvements

  • Zero encoding/decoding time (saves 2-3 seconds per operation)
  • Streaming data processing with constant ~50MB memory usage
  • No more loading entire images into memory

Bundle Format (Makeself-Style)

  • Shell script header + __PAYLOAD_BELOW__ marker + raw tar.gz payload
  • Uses standard tail and tar commands for extraction
  • No special tools required on target system

New Features

  • Added -o shorthand for --out-dir flag
  • Progress logging during bundle creation:
    • "Creating payload archive..."
    • "Writing self-extracting header..."
    • "Appending binary payload (XXX MB)..."
    • "Bundle created successfully (XXX MB total)"

Technical Details

  • Removed base64 encoding/decoding logic completely
  • Bundle payload structure: imgcd binary + image.tar.gz (no base64)
  • Self-extractor template now embedded in binary using go:embed
  • Verified incremental export functionality works correctly with new format

Test Results

Incremental export verification (postgres:15):

  • Full export: 155MB (14 layers)
  • Incremental (--since postgres:14): 127MB (13 layers)
  • Space savings: 28MB (18%) ✓

Large image example (vllm):

  • Full export: 11.6GB (33 layers)
  • Incremental (v0.11.0 --since v0.10.1.1): 6.8GB (22 layers)
  • Space savings: 4.8GB (41.3%) ✓