Repository navigation
v0.6.3
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
tailandtarcommands for extraction - No special tools required on target system
New Features
- Added
-oshorthand for--out-dirflag - 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:
imgcdbinary +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%) ✓