Skip to main content

valkeylite

PyPI version Python versions License Sponsored by Cyborg Inc.

Install and run Valkey directly from Python

valkeylite is a Python package that bundles the Valkey server (the open-source continuation of Redis) as a library. It provides an embedded Valkey server that can be started and stopped from Python code, eliminating the need for external Valkey installations or Docker containers during development and testing.

It's like redislite but with Valkey!

Features

  • 🚀 Drop-in replacement for redislite with Valkey
  • 🔧 Two APIs - Simple client wrapper OR explicit server control
  • 🧪 Perfect for testing - Isolated instances with auto-cleanup
  • Latest Valkey - Currently bundles Valkey 9.0.0
  • 🎯 Pytest fixtures - Built-in pytest integration
  • 🔓 Open source - MIT license, bundles BSD-3-Clause Valkey

Supported Platforms

Platform Architecture Status
Linux x86_64 ✅ Supported
Linux aarch64 (ARM64) ✅ Supported
macOS x86_64 (Intel) ✅ Supported
macOS arm64 (Apple Silicon) ✅ Supported
Windows - ❌ Not supported

Installation

pip install valkeylite

Includes valkey-py client automatically. For testing extras:

pip install valkeylite[test]

Quick Start

Client API (Like redislite)

from valkeylite import Valkey

# Just works - server starts automatically
r = Valkey()
r.set('key', 'value')
assert r.get('key') == b'value'
r.close()

# Or with context manager
with Valkey() as r:
    r.set('key', 'value')
    assert r.get('key') == b'value'

# With persistence
r = Valkey('/tmp/mydata.db')
r.set('key', 'value')
r.close()

Server API

from valkeylite import ValkeyServer

# Full control over server lifecycle
with ValkeyServer() as server:
    print(f"Valkey running at {server.host}:{server.port}")

    # Use built-in client
    client = server.client()
    client.set('key', 'value')

    # Or bring your own (any Redis-compatible client)
    import aredis
    client = aredis.Redis(**server.connection_kwargs)

Pytest Integration

# Automatically available with valkeylite[test]

def test_with_server(valkeylite):
    """Use the server fixture."""
    import valkey
    client = valkey.Valkey(**valkeylite.connection_kwargs)
    client.set('test', 'data')
    assert client.get('test') == b'data'

def test_with_client(valkey_client):
    """Use the pre-configured client fixture."""
    valkey_client.set('test', 'data')
    assert valkey_client.get('test') == b'data'

Command-Line Interface

# Start server in foreground
valkeylite

# Or with python -m
python -m valkeylite

# Specify port
valkeylite --port 6380

# See all options
valkeylite --help

Advanced Usage

Custom Configuration

from valkeylite import ValkeyServer
from pathlib import Path

server = ValkeyServer(
    port=6380,                    # Specific port (None = auto-assign)
    host='127.0.0.1',            # Bind address
    data_dir=Path('/tmp/valkey'), # Data directory (None = temp)
    persist=True,                 # Keep data after shutdown
    config={
        'maxmemory': '100mb',
        'maxmemory-policy': 'allkeys-lru',
        'loglevel': 'debug',
    }
)

server.start()
# ... use server ...
server.stop()

Multiple Instances

from valkeylite import ValkeyServer

# Run multiple isolated servers
with ValkeyServer(port=6379) as server1:
    with ValkeyServer(port=6380) as server2:
        # Two independent Valkey instances
        client1 = server1.client()
        client2 = server2.client()

Manual Lifecycle Management

from valkeylite import ValkeyServer

server = ValkeyServer()
server.start(timeout=10.0)  # Wait up to 10s for startup

try:
    # Use server
    print(f"Server running: {server.is_running()}")
    print(f"Connection URL: {server.connection_url}")
finally:
    server.stop()  # Graceful shutdown
    # or server.terminate() for immediate kill

API Reference

Valkey (Client API)

class Valkey(valkey.Valkey):
    """
    Valkey client with embedded server (like redislite.Redis).

    Inherits all methods from valkey.Valkey client.
    """

    def __init__(
        self,
        dbfilename: Optional[Path] = None,
        host: str = "127.0.0.1",
        port: Optional[int] = None,
        **kwargs: Any,
    ) -> None:
        """
        Initialize client with embedded server.

        Args:
            dbfilename: Path for persistent data (None = temporary)
            host: Host to bind to
            port: Port to bind to (None = auto-assign)
            **kwargs: Additional valkey.Valkey arguments
        """

    @property
    def server(self) -> ValkeyServer:
        """Access underlying ValkeyServer instance."""

ValkeyServer (Server API)

class ValkeyServer:
    """Explicit server lifecycle management."""

    def __init__(
        self,
        port: Optional[int] = None,
        host: str = "127.0.0.1",
        data_dir: Optional[Path] = None,
        config: Optional[Dict[str, Any]] = None,
        persist: bool = False,
        **config_overrides: Any,
    ) -> None:
        """Initialize Valkey server instance."""

    def start(self, timeout: float = 10.0) -> None:
        """Start server and wait until ready."""

    def stop(self, timeout: float = 5.0) -> None:
        """Gracefully stop server."""

    def client(self, **kwargs: Any) -> valkey.Valkey:
        """Create valkey-py client connected to this server."""

    @property
    def port(self) -> int:
        """Get server port."""

    @property
    def connection_kwargs(self) -> Dict[str, Any]:
        """Get connection parameters for any client."""

Pytest Fixtures

# Available with pip install valkeylite[test]

@pytest.fixture
def valkeylite() -> ValkeyServer:
    """Provides ValkeyServer instance."""

@pytest.fixture
def valkey_client(valkeylite) -> valkey.Valkey:
    """Provides connected valkey-py client."""

@pytest.fixture
def valkey_url(valkeylite) -> str:
    """Provides connection URL string."""

Migration from redislite

# Before
from redislite import Redis
r = Redis()
r.set('key', 'value')

# After
from valkeylite import Valkey
r = Valkey()
r.set('key', 'value')

With persistence:

# Before
from redislite import Redis
r = Redis('/tmp/redis.db')

# After
from valkeylite import Valkey
r = Valkey('/tmp/redis.db')

With a Unix socket (e.g. flask_limiter):

When you pass a persistent path, valkeylite enables a Unix socket alongside TCP and reuses a single embedded server for that path across calls — so the socket path is stable and you won't churn through ports. The socket defaults to <path>/valkey.sock, and config_get()['unixsocket'] is populated just like redislite, so existing code ports over almost unchanged:

# Before (redislite)
from redislite import Redis
_conn = Redis(DBNAME)
_socket = _conn.config_get()['unixsocket']
limiter = Limiter(..., storage_uri=f'redis+unix://{_socket}')
_conn.close()

# After (valkeylite) — note the storage_uri scheme stays redis+unix://
from valkeylite import Valkey
_conn = Valkey(DBNAME)
_socket = _conn.config_get()['unixsocket']
limiter = Limiter(..., storage_uri=f'redis+unix://{_socket}')
_conn.close()   # the shared embedded server stays up for the limiter to use

Keep the redis+unix:// scheme in storage_uri — that's what flask_limiter's limits backend understands. (ValkeyServer.connection_url reports valkey+unix://…; that string is informational and is not a valid flask_limiter URI.)

One server per process. The embedded server is shared only within a single Python interpreter. Under a multi-worker server (gunicorn/uwsgi), each worker gets its own embedded instance, so rate limits would be per-worker. For multi-worker production, point flask_limiter at a standalone valkey/redis.

Development

# Clone repository
git clone https://github.com/cyborginc/valkeylite.git
cd valkeylite

# Install in development mode
pip install -e .[test]

# Run tests
pytest

Contributing

Contributions welcome! Please:

  1. Open an issue for bugs or feature requests
  2. Submit PRs with tests and documentation
  3. Follow existing code style

License

MIT License - see LICENSE file

Valkey is licensed under BSD 3-Clause License

Acknowledgments

This project is sponsored and maintained by Cyborg Inc.

  • Built on Valkey, the open-source continuation of Redis
  • Inspired by redislite

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

valkeylite-9.1.1.tar.gz (24.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

valkeylite-9.1.1-py3-none-manylinux_2_28_x86_64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ x86-64

valkeylite-9.1.1-py3-none-manylinux_2_28_aarch64.whl (1.7 MB view details)

Uploaded Python 3manylinux: glibc 2.28+ ARM64

valkeylite-9.1.1-py3-none-macosx_11_0_arm64.whl (1.3 MB view details)

Uploaded Python 3macOS 11.0+ ARM64

valkeylite-9.1.1-py3-none-macosx_10_13_x86_64.whl (1.5 MB view details)

Uploaded Python 3macOS 10.13+ x86-64

File details

Details for the file valkeylite-9.1.1.tar.gz.

File metadata

  • Download URL: valkeylite-9.1.1.tar.gz
  • Upload date:
  • Size: 24.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for valkeylite-9.1.1.tar.gz
Algorithm Hash digest
SHA256 3c2f0c95019d7d5b23994ede4b9d37e58be050f9df38946186306e46dde9cb61
MD5 6e460731230bb115627669f3b580ff7b
BLAKE2b-256 a068e38f2bd0b114b002eabc8a86ed3c173c3ecfe65eb418c787e770134786b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for valkeylite-9.1.1.tar.gz:

Publisher: build-and-release.yml on cyborginc/valkeylite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file valkeylite-9.1.1-py3-none-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for valkeylite-9.1.1-py3-none-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 03fe001228b747b451fb170e9d7256c382d4c9b97da2edb2fef3d537120752ba
MD5 86b2aae98efa1aedfcd4d5a69cc66207
BLAKE2b-256 0f9af2639268699cbe70694773368c58bde8844cefa26dbcbf7974b0393a9296

See more details on using hashes here.

Provenance

The following attestation bundles were made for valkeylite-9.1.1-py3-none-manylinux_2_28_x86_64.whl:

Publisher: build-and-release.yml on cyborginc/valkeylite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file valkeylite-9.1.1-py3-none-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for valkeylite-9.1.1-py3-none-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 3d735112d4895f5364059f0528802f0be2a8da6f287bd7a55af6ad3c2373b6c6
MD5 b9f8ff8152bf28ab5101b8e160e6544f
BLAKE2b-256 98f7c0ccf26f665398688c9c2416cc681e47ae345db001d243835fe7f7883873

See more details on using hashes here.

Provenance

The following attestation bundles were made for valkeylite-9.1.1-py3-none-manylinux_2_28_aarch64.whl:

Publisher: build-and-release.yml on cyborginc/valkeylite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file valkeylite-9.1.1-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for valkeylite-9.1.1-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3ada1783221b3742f40afe14fcfa4666490992bab5d37fc55411f6241231606
MD5 383f48eab71c49abd784bdcb0cda385b
BLAKE2b-256 31229999325e9b382200b926ace693087806383b814ff88e6de6dc6cd6af1c25

See more details on using hashes here.

Provenance

The following attestation bundles were made for valkeylite-9.1.1-py3-none-macosx_11_0_arm64.whl:

Publisher: build-and-release.yml on cyborginc/valkeylite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file valkeylite-9.1.1-py3-none-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for valkeylite-9.1.1-py3-none-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 c45d370b921d818e816de6d15401f4733fd1c23fe4687cd0737a6f0946b1a651
MD5 8cc81eea109dd4f80f695f6f0b784297
BLAKE2b-256 cbe9b8b34c5287f499cc31ed4a2f8d5f742885062d294956421f3d8019096b1c

See more details on using hashes here.

Provenance

The following attestation bundles were made for valkeylite-9.1.1-py3-none-macosx_10_13_x86_64.whl:

Publisher: build-and-release.yml on cyborginc/valkeylite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

9.1.1 This release

5 files

9.1.0

5 files

9.0.0

5 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page