---
title: "redisvl Breaking Changes on PyPI | Since.dev"
description: "What each redisvl release removed, renamed or changed: 587 breaking changes in 5 versions on PyPI, each with its source."
canonical_url: https://since.dev/packages/pypi/redisvl
last_updated: 2026-05-27
---

# redisvl breaking changes

Every breaking API change we have recorded in redisvl on PyPI: 587 breaking changes in 5 versions. Below are its newest 5 versions, removals and renames first, each with its source.

Newest change May 27, 2026

## 0.19.0

4 breaking changes, first published May 27, 2026.

- **Removed** `redisvl.query.BaseVectorQuery.EPSILON_PARAM`  

redisvl.query.BaseVectorQuery.EPSILON_PARAM was removed in redisvl 0.19.0 [pypi.org](https://pypi.org/project/redisvl/0.19.0/)
- **Removed** `redisvl.query.VectorQuery.epsilon`  

The epsilon keyword argument was removed from VectorQuery because Redis rejects it on KNN queries. Use VectorRangeQuery for range queries that need epsilon. [pypi.org](https://pypi.org/project/redisvl/0.19.0/)
- **Removed** `redisvl.query.VectorQuery.set_epsilon`  

The set_epsilon() method was removed from VectorQuery. Use VectorRangeQuery for range queries that need epsilon. [pypi.org](https://pypi.org/project/redisvl/0.19.0/)
- **Signature changed** `redisvl.query.VectorQuery.__init__`  

Was def \_\_init\_\_(self, vector: list\[float\] | bytes, vector_field_name: str, return_fields: list\[str\] | None = None, filter_expression: str | FilterExpression | None = None, dtype: str = 'float32', num_results: int = 10, return_score: bool... [pypi.org](https://pypi.org/project/redisvl/0.19.0/)

## 0.18.0

354 breaking changes, first published April 21, 2026.

- **Removed**  

The package no longer supports Python 3.9. Users on Python 3.9 must upgrade their Python version before installing this release. [github.com](https://github.com/redis/redis-vl-python/releases/tag/v0.18.0)
- **Signature changed** `redisvl.cli.index.make_dict`  

Was def make_dict(values: List\[Any\]) -> Dict\[Any, Any\]; now def make_dict(values: list\[Any\]) -> dict\[Any, Any\]. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.connect`  

Was @classmethod def connect(cls, redis_url: Optional\[str\] = None, use_async: bool = False, \*\*kwargs) -> RedisClient; now @classmethod def connect(cls, redis_url: str | None = None, use_async: bool = False, \*\*kwargs) -> RedisClient. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_async_redis_cluster_connection`  

Was @staticmethod def get_async_redis_cluster_connection(redis_url: Optional\[str\] = None, \*\*kwargs) -> AsyncRedisCluster; now @staticmethod def get_async_redis_cluster_connection(redis_url: str | None = None, \*\*kwargs) -> AsyncRedisCluster. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_async_redis_connection`  

Was @staticmethod def get_async_redis_connection(redis_url: Optional\[str\] = None, \*\*kwargs) -> AsyncRedisClient; now @staticmethod def get_async_redis_connection(redis_url: str | None = None, \*\*kwargs) -> AsyncRedisClient. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_modules`  

Was @staticmethod def get_modules(client: SyncRedisClient) -> Dict\[str, Any\]; now @staticmethod def get_modules(client: SyncRedisClient) -> dict\[str, Any\]. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_modules_async`  

Was @staticmethod async def get_modules_async(client: AsyncRedisClient) -> Dict\[str, Any\]; now @staticmethod async def get_modules_async(client: AsyncRedisClient) -> dict\[str, Any\]. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_redis_cluster_connection`  

Was @staticmethod def get_redis_cluster_connection(redis_url: Optional\[str\] = None, \*\*kwargs) -> RedisCluster; now @staticmethod def get_redis_cluster_connection(redis_url: str | None = None, \*\*kwargs) -> RedisCluster. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_redis_connection`  

Was @staticmethod def get_redis_connection(redis_url: Optional\[str\] = None, \*\*kwargs) -> SyncRedisClient; now @staticmethod def get_redis_connection(redis_url: str | None = None, \*\*kwargs) -> SyncRedisClient. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.validate_async_redis`  

Was @staticmethod async def validate_async_redis(redis_client: AsyncRedisClient, lib_name: Optional\[str\] = None) -> None; now @staticmethod async def validate_async_redis(redis_client: AsyncRedisClient, lib_name: str | None = None) -> None. [pypi.org](https://pypi.org/project/redisvl/0.18.0/)

And 344 more in this version.

## 0.7.0

21 breaking changes, first published May 30, 2025.

- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.connect`  

Was @classmethod def connect(cls, redis_url: Optional\[str\] = None, use_async: bool = False, \*\*kwargs) -> Union\[Redis, AsyncRedis\]; now @classmethod def connect(cls, redis_url: Optional\[str\] = None, use_async: bool = False, \*\*kwargs) ->... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_async_redis_connection`  

Was @staticmethod def get_async_redis_connection(url: Optional\[str\] = None, \*\*kwargs) -> AsyncRedis; now @staticmethod def get_async_redis_connection(url: Optional\[str\] = None, \*\*kwargs) -> AsyncRedisClient. [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_modules`  

Was @staticmethod def get_modules(client: Redis) -> Dict\[str, Any\]; now @staticmethod def get_modules(client: SyncRedisClient) -> Dict\[str, Any\]. [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_modules_async`  

Was @staticmethod async def get_modules_async(client: AsyncRedis) -> Dict\[str, Any\]; now @staticmethod async def get_modules_async(client: AsyncRedisClient) -> Dict\[str, Any\]. [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.get_redis_connection`  

Was @staticmethod def get_redis_connection(redis_url: Optional\[str\] = None, required_modules: Optional\[List\[Dict\[str, Any\]\]\] = None, \*\*kwargs) -> Redis; now @staticmethod def get_redis_connection(redis_url: Optional\[str\] = None... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.sync_to_async_redis`  

Was @staticmethod def sync_to_async_redis(redis_client: Redis) -> AsyncRedis; now @staticmethod def sync_to_async_redis(redis_client: SyncRedisClient) -> AsyncRedisClient. [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.validate_async_redis`  

Was @staticmethod async def validate_async_redis(redis_client: AsyncRedis, lib_name: Optional\[str\] = None, required_modules: Optional\[List\[Dict\[str, Any\]\]\] = None) -> None; now @staticmethod async def validate_async_redis(redis_client... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.cli.index.RedisConnectionFactory.validate_sync_redis`  

Was @staticmethod def validate_sync_redis(redis_client: Redis, lib_name: Optional\[str\] = None, required_modules: Optional\[List\[Dict\[str, Any\]\]\] = None) -> None; now @staticmethod def validate_sync_redis(redis_client: SyncRedisClient... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.extensions.cache.BaseCache.__init__`  

Was def \_\_init\_\_(self, name: str, ttl: Optional\[int\] = None, redis_client: Optional\[Redis\] = None, redis_url: str = 'redis://localhost:6379', connection_kwargs: Dict\[str, Any\] = {}); now def \_\_init\_\_(self, name: str, ttl: Optional\[int\] =... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)
- **Signature changed** `redisvl.extensions.cache.embeddings.EmbeddingsCache.__init__`  

Was def \_\_init\_\_(self, name: str = 'embedcache', ttl: Optional\[int\] = None, redis_client: Optional\[Redis\] = None, redis_url: str = 'redis://localhost:6379', connection_kwargs: Dict\[str, Any\] = {}); now def \_\_init\_\_(self, name: str =... [pypi.org](https://pypi.org/project/redisvl/0.7.0/)

And 11 more in this version.

## 0.6.0

141 breaking changes, first published May 1, 2025.

- **Removed** `redisvl.extensions.constants.SESSION_VECTOR_FIELD_NAME`  

redisvl.extensions.constants.SESSION_VECTOR_FIELD_NAME was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.array_to_buffer`  

redisvl.extensions.llmcache.schema.array_to_buffer was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.CACHE_VECTOR_FIELD_NAME`  

redisvl.extensions.llmcache.schema.CACHE_VECTOR_FIELD_NAME was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.current_timestamp`  

redisvl.extensions.llmcache.schema.current_timestamp was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.deserialize`  

redisvl.extensions.llmcache.schema.deserialize was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.hashify`  

redisvl.extensions.llmcache.schema.hashify was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.IndexSchema`  

redisvl.extensions.llmcache.schema.IndexSchema was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.INSERTED_AT_FIELD_NAME`  

redisvl.extensions.llmcache.schema.INSERTED_AT_FIELD_NAME was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.PROMPT_FIELD_NAME`  

redisvl.extensions.llmcache.schema.PROMPT_FIELD_NAME was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)
- **Removed** `redisvl.extensions.llmcache.schema.RESPONSE_FIELD_NAME`  

redisvl.extensions.llmcache.schema.RESPONSE_FIELD_NAME was removed in redisvl 0.6.0 [pypi.org](https://pypi.org/project/redisvl/0.6.0/)

And 131 more in this version.

## 0.4.0

67 breaking changes, first published February 20, 2025.

- **Removed** `redisvl.extensions.router.Route.distance_threshold_must_be_positive`  

Route.distance_threshold_must_be_positive was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.router.RoutingConfig.distance_threshold`  

RoutingConfig.distance_threshold was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.router.RoutingConfig.distance_threshold_must_be_valid`  

RoutingConfig.distance_threshold_must_be_valid was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.router.RoutingConfig.max_k_must_be_positive`  

RoutingConfig.max_k_must_be_positive was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.router.semantic.SemanticRouter.Config`  

redisvl.extensions.router.semantic.SemanticRouter.Config was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.router.SemanticRouter.Config`  

redisvl.extensions.router.SemanticRouter.Config was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.session_manager.base_session.ChatMessage.Config`  

redisvl.extensions.session_manager.base_session.ChatMessage.Config was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.session_manager.base_session.create_uuid`  

redisvl.extensions.session_manager.base_session.create_uuid was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.session_manager.schema.ChatMessage.Config`  

redisvl.extensions.session_manager.schema.ChatMessage.Config was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)
- **Removed** `redisvl.extensions.session_manager.semantic_session.ChatMessage.Config`  

redisvl.extensions.session_manager.semantic_session.ChatMessage.Config was removed in redisvl 0.4.0 [pypi.org](https://pypi.org/project/redisvl/0.4.0/)

And 57 more in this version.

## Check your code

These are the changes. To see which of them reach your code, [scan a public repository](https://since.dev/scan.md), or have your coding agent call `check_code` with your manifest or lockfile over [MCP](https://since.dev/docs.md#mcp). [The API](https://since.dev/docs.md#api) reads every change in every version, not only the newest. On Team and up, a fix pull request opens for the changes that reach a connected repository. Nothing merges or deploys.

## Put your code on continuous management.

Scan a public repository now, or give your agent one line.

### See how out of date your code is.

[Scan a repository](https://since.dev/scan.md). Any public GitHub repository. No sign-in.

### Tell your agent what changed since it was trained.

`claude mcp add --transport http since https://api.since.dev/mcp`

---

Every page on this site as Markdown: https://since.dev/sitemap.md. For agents: https://since.dev/llms.txt.
