Releases: barddoo/zedis
Releases · barddoo/zedis
0.1.2
Immutable
release. Only release title and notes can be modified.
Changed
- Upgrade to lalinsky/zio v0.12.0.
- Switch build optimization to ReleaseSafe for consistent behavior across platforms.
Fixed
- Fix store access performance and command execution overhead.
Install
Linux (x86_64)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.2/zedis-0.1.2-linux-x86_64
chmod +x zedis && sudo mv zedis /usr/local/bin/Linux (ARM64)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.2/zedis-0.1.2-linux-aarch64
chmod +x zedis && sudo mv zedis /usr/local/bin/macOS (Apple Silicon)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.2/zedis-0.1.2-macos-arm64
chmod +x zedis && sudo mv zedis /usr/local/bin/macOS (Intel)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.2/zedis-0.1.2-macos-x86_64
chmod +x zedis && sudo mv zedis /usr/local/bin/Verify checksums
sha256sum -c SHA256SUMSQuick start
# Start server (listens on 127.0.0.1:6379 by default)
zedis
# Connect
redis-cli ping
# PONG
SET hello world
GET hello
# "world"0.1.1
Immutable
release. Only release title and notes can be modified.
Added
- Add CI workflow running tests on push to main and pull requests.
- Add multi-variant Docker images: alpine, debian-slim, and distroless.
- Add Docker Bake configuration for parallel multi-platform builds (linux/amd64, linux/arm64).
- Add Docker Hub publishing workflow on tag push.
- Add release binaries for linux-aarch64 and windows-x86_64.
Fixed
- Fix config file loading hanging on async file reader EOF by switching to
readPositionalAll. - Fix Dockerfile: drop unnecessary build dependencies, fix symlink trailing slash, use nologin shell for service user, fix healthcheck.
Changed
- Gate release binary builds on passing tests.
- Update all GitHub Actions to latest versions.
Install
Linux (x86_64)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.1/zedis-0.1.1-linux-x86_64
chmod +x zedis && sudo mv zedis /usr/local/bin/Linux (ARM64)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.1/zedis-0.1.1-linux-aarch64
chmod +x zedis && sudo mv zedis /usr/local/bin/macOS (Apple Silicon)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.1/zedis-0.1.1-macos-arm64
chmod +x zedis && sudo mv zedis /usr/local/bin/macOS (Intel)
curl -Lo zedis https://github.com/charlesfonseca/zedis/releases/download/0.1.1/zedis-0.1.1-macos-x86_64
chmod +x zedis && sudo mv zedis /usr/local/bin/Verify checksums
sha256sum -c SHA256SUMSQuick start
# Start server (listens on 127.0.0.1:6379 by default)
zedis
# Connect
redis-cli ping
# PONG
SET hello world
GET hello
# "world"0.1.0
Immutable
release. Only release title and notes can be modified.
Added
- Add configuration file support with production-oriented defaults for memory, connections, and eviction tuning.
- Add client mailbox infrastructure for buffered server-to-client message delivery.
- Add server architecture and memory architecture documentation.
Fixed
- Fix Zig 0.16 compatibility issues across the server, parser, store, and benchmark paths.
- Improve client/pubsub handle tracking during disconnect and mailbox delivery.
Changed
- Migrate the runtime to Zig's newer I/O model and use
std.Io.Threadedfor the current server architecture. - Refactor command execution around async connection tasks, a dedicated store thread, and mailbox-based response delivery.
- Rework store allocation, memory accounting, and eviction policy behavior.
- Remove multi-database support and keep Zedis intentionally single-store.
- Update benchmarking support and project documentation for the current architecture.
Installation
Download Binaries
Pre-built binaries are available for Linux, macOS, and Windows.
- Download the appropriate binary for your platform
- Verify the checksum against SHA256SUMS
- Make the binary executable (Linux/macOS):
chmod +x zedis-* - Run the server:
./zedis-0.1.0-<platform>
Verify Checksums
sha256sum -c SHA256SUMSQuick Start
# Start the server (default: 127.0.0.1:6379)
./zedis-<platform>
# Connect using redis-cli
redis-cli -h 127.0.0.1 -p 6379
# Try some commands
SET mykey "Hello, Zedis!"
GET mykey0.0.8
Immutable
release. Only release title and notes can be modified.
Added
- Bloom filter data structure
Changed
- Use newer Zig master version
Installation
Download Binaries
Pre-built binaries are available for Linux, macOS, and Windows.
- Download the appropriate binary for your platform
- Verify the checksum against SHA256SUMS
- Make the binary executable (Linux/macOS):
chmod +x zedis-* - Run the server:
./zedis-0.0.8-<platform>
Verify Checksums
sha256sum -c SHA256SUMSQuick Start
# Start the server (default: 127.0.0.1:6379)
./zedis-<platform>
# Connect using redis-cli
redis-cli -h 127.0.0.1 -p 6379
# Try some commands
SET mykey "Hello, Zedis!"
GET mykey0.0.6
0.0.5
Changed
- Update README to reflect release workflow changes
- Test the release badge in the README
Installation
Download Binaries
Pre-built binaries are available for Linux, macOS, and Windows.
- Download the appropriate binary for your platform
- Verify the checksum against SHA256SUMS
- Make the binary executable (Linux/macOS):
chmod +x zedis-* - Run the server:
./zedis-0.0.5-<platform>
Verify Checksums
sha256sum -c SHA256SUMSQuick Start
# Start the server (default: 127.0.0.1:6379)
./zedis-<platform>
# Connect using redis-cli
redis-cli -h 127.0.0.1 -p 6379
# Try some commands
SET mykey "Hello, Zedis!"
GET mykeyv0.0.3-alpha
Time Series 🎉
- Added support for Gorilla compression.
- New commands:
TS.CREATE,TS.ADDandTS.GET
v0.0.2-alpha
Major Features
Append-Only File (AOF) Persistence
- New Module: Added
src/aof/aof.zigwith AOF reader and writer functionality - AOF writer captures all write commands and persists them to disk
- AOF reader replays commands on server startup for data recovery
- Integrated with server initialization for automatic persistence
- Added comprehensive AOF tests for read/write operations
Enhanced String Command Support
Added 10 new Redis-compatible string commands (increasing coverage from 23% to 36%):
APPEND- Concatenate value to existing keySTRLEN- Get length of value stored in keyGETSET- Atomically set key and return old valueMGET- Get values of multiple keys in single operationMSET- Set multiple key-value pairs atomicallySETEX- Set key with expiration timeSETNX- Set key only if it doesn't existINCRBY- Increment key by specific integer amountDECRBY- Decrement key by specific integer amountINCRBYFLOAT- Increment key by floating point number (17 decimal precision, Redis-compatible)
Architecture Improvements
Decoupled Command Architecture
- Decoupled commands from Client: Commands now only require their minimum dependencies (writer, store, args)
- Commands can be invoked from non-client contexts (e.g., AOF replay)
- Introduced three ClientHandler types: Default, Client, and Store
- Commands no longer require network stream, only a generic writer
Centralized Error Handling
- Moved error-to-RESP message mapping from individual commands to registry
- Expanded
CommandErrorwith specific error types (WrongType, ValueNotInteger, InvalidFloat, etc.) - Added
handleCommandError()function in registry for consistent error responses - Commands now return typed errors instead of writing RESP errors directly
Modular RESP Protocol Layer
- Created dedicated
src/commands/resp.zigmodule for RESP protocol writing - Decoupled RESP writing from client/network layer
- Generic writer interface allows RESP output to any destination
- Improved
writeInt()to accept any integer type via compile-time generics
Parser Improvements
- Decoupled parser from network streams - now only requires a generic reader
- Parser can consume from any source (network, file, buffer)
- Fixed memory leak in parser
- More flexible command parsing for AOF and testing scenarios
Performance Optimizations
Short String Optimization (SSO)
- Implemented inline storage for strings ≤23 bytes (no heap allocation)
- Added
ShortStringtype with efficientfromSlice()andasSlice()methods - Automatic type selection in
Store.set()based on string length - Significant memory savings for small strings (keys, common values)
Safe Memory Pool
- Added
src/safe_memory_pool.zigfor optimized allocations - Pre-allocated pools for common string lengths
- Reduced allocation overhead for frequently-used sizes
- Integrated with store operations for better memory management
Testing Improvements
Refactored Test Architecture
- Removed MockClient dependency: Tests now call command functions directly
- Implemented fixed buffer writer pattern (
std.Io.Writer.fixed(&buffer)) - More idiomatic Zig testing with stack-allocated buffers
- Cleaner test implementation without heap allocations
- Refactored all 31 string tests to use direct command calls
- Refactored all 30 list tests to use direct command calls
Enhanced Test Coverage
- Added comprehensive tests for 10 new string commands
- Expanded edge case testing (error conditions, boundary cases)
- Added AOF read/write tests
- Improved test utilities in
src/test_utils.zig
Bug Fixes
- Fixed
short_stringhandling inincrDecr()function - now properly parses integers from SSO strings - Fixed parser memory leak
- Improved error handling for out-of-range operations
- Better type checking in store operations
Code Quality
- Simplified RESP command responses throughout codebase
- More consistent error handling patterns
- Reduced code duplication in command implementations
- Better separation of concerns (commands, parsing, protocol, persistence)
- Improved code documentation and inline comments
Refactoring
- Consolidated command argument handling
- Streamlined store interface
- Reduced client.zig complexity (103 lines removed)
- Reorganized command registry with better type safety
- Cleaned up pubsub and RDB integration points
Statistics
- Redis Command Coverage: 23% → 36% (string commands)
Breaking Changes
- Command function signatures changed to require
writerandstoreinstead ofClient - Error handling now returns typed errors instead of writing RESP directly
- Test utilities restructured (MockClient usage patterns changed)
Deprecations
- Removed benchmark results until async I/O work is complete
v0.0.1-alpha
Added
Core Features
- Redis Serialization Protocol (RESP) implementation
- Multi-client connection handling with concurrent support
- Thread-safe in-memory data store
- Comprehensive logging system for debugging
Data Types
- String values with automatic type conversion
- Integer values with type-safe operations
- List data structure with full CRUD operations
String Commands
GET- Retrieve value by keySET- Store key-value pairsINCR- Increment integer valueDECR- Decrement integer valueDEL- Delete keysEXISTS- Check key existenceTYPE- Get value type
List Commands
LPUSH- Push elements to the head of a listRPUSH- Push elements to the tail of a listLPOP- Pop elements from the head of a listRPOP- Pop elements from the tail of a listLLEN- Get list lengthLINDEX- Get element by indexLSET- Set element at indexLRANGE- Get range of elements
Connection Commands
PING- Test server connectivityECHO- Echo messages back to client
Pub/Sub
PUBLISH- Publish messages to channelsSUBSCRIBE- Subscribe to channelsUNSUBSCRIBE- Unsubscribe from channels- Channel management and message routing
- Client state handling for subscribers
Persistence
- RDB (Redis Database) snapshot format support
- Point-in-time dataset snapshots
- Automatic RDB file loading on startup
- CRC64 checksums for data integrity
- Support for various RDB encoding types
Advanced Features
- Key expiration with TTL support
- Key-value allocator with eviction policy
- Zero dynamic memory allocation during command execution
- Memory-efficient operation using pre-allocated pools
Changed
- Updated to Zig 0.15.1
- Removed deprecated
std.iofunctions for compatibility - Streamlined client and server initialization
- Removed mutex from Store struct for better performance
- Consolidated ZDB writer and reader into unified interface
Fixed
- RDB file reading issues
- Socket error handling in parser
- Connection stream double-close issue
- Undefined behavior in ZDB writer/reader structs
Documentation
- Comprehensive README with quick start guide
- Feature documentation and roadmap
- Memory management explanations
- Code examples for extending functionality
Infrastructure
- Build system using Zig build tools
- Unit test framework with test runner
- Modular command registry system
- Separation of concerns across modules