# What changed in redisvl

> 54 changes in redisvl 0.27 to 0.28 from its official release notes, upgrade guides and advisories: 32 breaking, 3 security, 2 new APIs and options. Each one cited. Sources checked 2026-10-28. HTML: https://unstale.sh/pypi/redisvl/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## redisvl 0.28

### Breaking changes

- The constructor no longer converts a sync Redis client automatically. Pass an async client, or convert a non-cluster client yourself with `RedisConnectionFactory.sync_to_async_redis()`. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Passing the wrong Redis client flavour now raises `TypeError` at construction rather than failing at first use. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real constructor signatures, so calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- This index-constructor keyword is removed; use `connection_kwargs` with the same value. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Use this index-constructor keyword in place of the removed `connection_args` and `redis_kwargs`, passing the same value. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real vectorizer method signature; calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real vectorizer method signature; calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- GEO validation and schema inference now expect longitude before latitude, matching Redis. Existing latitude-first values may need swapping and reloading; validation cannot detect every swapped pair. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Use this function in place of the removed `RedisConnectionFactory.connect()`. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Use this function in place of the removed `RedisConnectionFactory.connect()`. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real signatures, so calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- An index given a client without `redis_url` now raises `RedisVLError` on reconnect after that client is closed, instead of falling back to `REDIS_URL`. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- This index-constructor keyword is removed; use `connection_kwargs` with the same value. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Use this keyword in the connection factory functions in place of the removed `url` keyword. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- An `AsyncSearchIndex` built with both `redis_url` and a `url` inside `connection_kwargs` now raises instead of connecting to the latter. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- A cache built from a `redis_url` now raises `ConnectionError` when its async client is created, surfacing an unreachable server at construction rather than at the first command. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- This connection factory method is removed; use `get_redis_connection()` or `get_async_redis_connection()` instead. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Passing the wrong Redis client flavour now raises `TypeError` at construction rather than failing at first use. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- The connection method and its `AsyncSearchIndex` counterpart are removed; pass `redis_client` or `redis_url` to the constructor instead. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- The method and its `AsyncSearchIndex` counterpart are removed; pass `redis_client` or `redis_url` to the constructor instead. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real constructor signatures, so calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real signatures, so calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Type checkers now see the real signatures, so calls passing unsupported arguments may newly fail type checking. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Passing an empty reference id now raises `ValueError` instead of matching every reference, deleting one and reporting success. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- Passing an empty reference id now raises `ValueError` instead of matching every reference and returning an arbitrary one. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- The keyword is removed from all five connection factory functions; use `redis_url` instead. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)

### Security

- Custom tool profiles can scope every query to a tenant from the caller’s verified token. The injected field is hidden from the model, and injecting profiles are refused when authentication is off, transport is stdio, or another tool can reach… (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)

### New APIs and options

- This public function returns `True` for filters that match every document, including `None`, `"*"` and an uninitialised `FilterExpression`. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- The constructor accepts `owns_client` to control whether the index closes its Redis client on disconnect or garbage collection. The default is unchanged; pass `True` to hand over a supplied client or `False` to keep one the index would otherwise close.… (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)

### Performance

- For JSON indexes with `validate_on_load=True`, schema-derived JSONPath expressions are compiled once and reused instead of re-parsed for every field of every document, substantially speeding document loading. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)

### Behavior and default changes

- The protobuf upper bound has been removed from the `all` extra, so installations are no longer constrained by RedisVL when resolving newer protobuf versions. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)
- The protobuf upper bound has been removed from the `vertexai` extra, so installations are no longer constrained by RedisVL when resolving newer protobuf versions. (0.28.0) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.28.0)

## redisvl 0.27

### Breaking changes

- Replaces EXTERNAL_INDEX_LIFECYCLE_CONFLICT in redisvl.extensions.constants; code importing the old name or matching its old message needs updating. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Geo coordinates reject strings and `Decimal` values with `TypeError`, and out-of-range coordinates with `ValueError`; zero, negative, or infinite radii raise `ValueError`. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- Geo radius queries now use the supplied fractional distance instead of truncating it to an integer. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- `between(start, end)` raises `TypeError` unless both bounds are real numbers; coerce numeric strings or `Decimal` values first. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- Tag filter values are validated and a `|` in a value is escaped, so it matches one literal value rather than introducing a union. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- A raw-string filter containing a top-level `|` is now contained within the filter, preventing results outside the vector range. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)

### Security

- Clearing an index uses CountQuery instead of FT.INFO, making it available to credentials with +@read +@write; clearing also continues past pages whose keys could not be deleted. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Clearing an index uses CountQuery instead of FT.INFO, making it available to credentials with +@read +@write; clearing also continues past pages whose keys could not be deleted. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)

### Behavior and default changes

- Filtered queries no longer group vector-range clauses in parentheses; the meaning is unchanged, but exact query-string assertions may need updating. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- Filtered queries no longer wrap the whole query; the meaning is unchanged, but exact query-string assertions may need updating. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)

### Fixes and other changes

- Fixes cache clearing key scans that hang or crash on Redis Cluster. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- SemanticCache, MessageHistory, SemanticMessageHistory and SemanticRouter instances created with create_index=False can now call clear() to remove their entries; delete() still raises ValueError. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Fixes batch writes being silently dropped on async Redis Cluster. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Fixes migration key scans that hang or crash on Redis Cluster. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Pagination now continues past a page whose matches were all dropped. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Glob metacharacters in SCAN match patterns are now escaped. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Fixes connections to Sentinel instances when passwords contain quotes. (0.27.2) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.2)
- Filter expressions combined with another clause are now parenthesised, fixing broken query shapes. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- The `eq`, `ne`, and `in` text filters now work with multi-word values. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- An explicit wildcard filter now runs instead of raising a syntax error. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- Text filter values are validated and contained in their clause; quoted values in inequality filters now exclude correctly. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
- A `filter_expression` containing more than one clause now runs instead of raising a syntax error. (0.27.1) — [release notes](https://github.com/redis/redis-vl-python/releases/tag/v0.27.1)
