Skip to content

Releases: barddoo/zedis

0.1.2

22 May 12:07
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 SHA256SUMS

Quick 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

24 Apr 21:24
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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 SHA256SUMS

Quick 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

24 Apr 02:51
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

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.Threaded for 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.

  1. Download the appropriate binary for your platform
  2. Verify the checksum against SHA256SUMS
  3. Make the binary executable (Linux/macOS): chmod +x zedis-*
  4. Run the server: ./zedis-0.1.0-<platform>

Verify Checksums

sha256sum -c SHA256SUMS

Quick 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 mykey

0.0.8

28 Jan 03:30
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

Added

  • Bloom filter data structure

Changed

  • Use newer Zig master version

Installation

Download Binaries

Pre-built binaries are available for Linux, macOS, and Windows.

  1. Download the appropriate binary for your platform
  2. Verify the checksum against SHA256SUMS
  3. Make the binary executable (Linux/macOS): chmod +x zedis-*
  4. Run the server: ./zedis-0.0.8-<platform>

Verify Checksums

sha256sum -c SHA256SUMS

Quick 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 mykey

0.0.6

12 Dec 21:54
Immutable release. Only release title and notes can be modified.

Choose a tag to compare

What's Changed

  • Fix a bunch of performance issues in #32
  • Hash Table improved dramatically in #35
  • Update Zig to v0.16, use new IO API in #36

Full Changelog: 0.0.5...0.0.6

0.0.5

22 Oct 13:52

Choose a tag to compare

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.

  1. Download the appropriate binary for your platform
  2. Verify the checksum against SHA256SUMS
  3. Make the binary executable (Linux/macOS): chmod +x zedis-*
  4. Run the server: ./zedis-0.0.5-<platform>

Verify Checksums

sha256sum -c SHA256SUMS

Quick 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 mykey

v0.0.3-alpha

12 Oct 22:50

Choose a tag to compare

Time Series 🎉

  • Added support for Gorilla compression.
  • New commands: TS.CREATE, TS.ADD and TS.GET

v0.0.2-alpha

08 Oct 14:26

Choose a tag to compare

Major Features

Append-Only File (AOF) Persistence

  • New Module: Added src/aof/aof.zig with 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 key
  • STRLEN - Get length of value stored in key
  • GETSET - Atomically set key and return old value
  • MGET - Get values of multiple keys in single operation
  • MSET - Set multiple key-value pairs atomically
  • SETEX - Set key with expiration time
  • SETNX - Set key only if it doesn't exist
  • INCRBY - Increment key by specific integer amount
  • DECRBY - Decrement key by specific integer amount
  • INCRBYFLOAT - 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 CommandError with 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.zig module 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 ShortString type with efficient fromSlice() and asSlice() 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.zig for 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_string handling in incrDecr() 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 writer and store instead of Client
  • 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

29 Sep 22:02

Choose a tag to compare

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 key
  • SET - Store key-value pairs
  • INCR - Increment integer value
  • DECR - Decrement integer value
  • DEL - Delete keys
  • EXISTS - Check key existence
  • TYPE - Get value type

List Commands

  • LPUSH - Push elements to the head of a list
  • RPUSH - Push elements to the tail of a list
  • LPOP - Pop elements from the head of a list
  • RPOP - Pop elements from the tail of a list
  • LLEN - Get list length
  • LINDEX - Get element by index
  • LSET - Set element at index
  • LRANGE - Get range of elements

Connection Commands

  • PING - Test server connectivity
  • ECHO - Echo messages back to client

Pub/Sub

  • PUBLISH - Publish messages to channels
  • SUBSCRIBE - Subscribe to channels
  • UNSUBSCRIBE - 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.io functions 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