Changelog¶
0.3.0 - 2026-02-09¶
Added¶
- S3 Select (SQL on CSV/JSON Objects)
POST /{bucket}/{key}?select&select-type=2endpoint for SQL queries- CSV input with configurable delimiter, quote character, and header detection
- JSON input in DOCUMENT and LINES modes
-
SQL subset: SELECT, WHERE (=, !=, <, >, LIKE, IS NULL, AND, OR), LIMIT
-
Object-Level Compression (zstd)
- Automatic zstd compression on PUT with configurable level (1-22)
- Transparent decompression on GET (including range requests)
- Smart skip for already-compressed content types (images, video, zip)
-
Config:
HAFIZ_COMPRESSION_ENABLED,HAFIZ_COMPRESSION_LEVEL -
Data Deduplication (SHA-256)
- Content-addressable storage with SHA-256 hash-based dedup
- Reference counting for shared storage of identical content
-
Config:
HAFIZ_DEDUP_ENABLED, configurable min_size -
Immutable Audit Log (Blockchain-Style)
- Every mutating operation logged with blockchain-style hash chain
- Tamper detection via chain verification endpoint
-
Admin API:
GET /api/v1/audit/logsandGET /api/v1/audit/verify -
Real-Time Change Stream (SSE)
- Server-Sent Events:
GET /events/sse?bucket=optional-bucket - Global and per-bucket event channels via tokio broadcast
-
Events for object creation and deletion with full metadata
-
Temporary Bucket Sharing
- Token-based public bucket access without S3 credentials
- Admin API:
POST/GET/DELETE /api/v1/shares - Public endpoints:
GET/PUT /share/:token/*key(no auth required) -
Configurable permissions, prefix restrictions, expiration, download limits
-
Object Transform Pipeline
- New
hafiz-transformcrate for async image processing - Built-in transforms: Thumbnail, EXIF strip, Format conversion
- Per-bucket transform configuration via Admin API
-
Supported formats: JPEG, PNG, WebP, GIF, BMP
-
Erasure Coding (Reed-Solomon)
- Reed-Solomon encoding/decoding in
hafiz-clustercrate - Configurable data shards (default 4) and parity shards (default 2)
-
Shard distribution across cluster nodes (round-robin placement)
-
PostgreSQL Error Logging
- Full implementation of 9 previously stubbed error logging methods
error_logstable with indexes for efficient querying- Aggregation, maintenance, and query-by-request-id support
Technical¶
- 40,000+ lines of Rust
- 10 crates (new: hafiz-transform)
- 90+ API endpoints
- 30+ database tables
- New dependencies: reed-solomon-erasure, image, csv, tokio-stream, parking_lot
0.2.0 - 2026-02-07¶
Added¶
- Native Object Replication
- Async object replication across cluster nodes via
hafiz-clustercrate - Automatic replication of PutObject, DeleteObject, CompleteMultipartUpload
- Default "replicate everything" behavior with loop prevention
-
Cluster internal HTTP routes (
/cluster/join,/cluster/heartbeat, etc.) -
PostgreSQL Backend - Cluster Support
cluster_nodesandreplication_rulestables- Full CRUD operations for node registry and replication rules
-
PostgreSQL stubs for CORS, ACL, notification, policy, object lock
-
Distributed Deployment
- 3-node cluster deployment configs (
deploy/distributed/) - HAProxy load balancer with consistent hashing
- PostgreSQL initialization script
Fixed¶
- Multipart upload replication and primary key mismatch
- User metadata persistence and HeadObject metadata headers
- Shared PostgreSQL metadata overwrite for REPLICA requests
- HAProxy balancing mode (roundrobin to source with consistent hashing)
- Bucket tagging dispatcher in routes
Test Results¶
- 52/52 S3 API tests passing
- 29/29 Replication tests passing
Technical¶
- 36,000+ lines of Rust
- Enhanced cluster replication protocol
0.1.0 - 2024-12-08¶
Added¶
- Full S3 API compatibility (76+ endpoints)
- Multi-part uploads
- Object versioning
- Lifecycle policies
- Server-side encryption (AES-256-GCM)
- Object Lock (WORM)
- Bucket policies
- LDAP integration
- Admin API & UI
- Prometheus metrics
- Event notifications
- Cluster mode
- Helm chart
- CLI tool
Technical¶
- 33,000+ lines of Rust
- 9 crates
- PostgreSQL & SQLite support