RedisVL: the Redis Vector Library Python client for vector search and RAG
Redis Vector Library. The AI-native Python client for Redis.
At a glance
- What is it?
- RedisVL wraps Redis indexes, vectorizers and semantic caches in a typed Python layer. It is a good fit when Redis is already your data store, and a poor fit when it is not.
- Who is it for?
- Adopt RedisVL if you already run Redis and want vector search, hybrid filtering and a semantic cache behind one Python schema object, and if your environment can run Redis 8 or newer (the Docker example is redis:8.4) or a managed Redis with the search module. Do not adopt it as a standalone vector database; it is a client, and index creation fails without a Redis that supports vector fields.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 27, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What RedisVL solves, and who ends up using it
Redis can store vectors and run similarity search, but the raw client gives you commands, not a model of your data. RedisVL adds that model: an IndexSchema that describes fields and their types, a SearchIndex that creates and queries the index, and vectorizer classes that turn text into embeddings before the query leaves Python. The README frames the target audience directly, listing RAG pipelines with real-time retrieval, AI agents with memory and semantic routing, and recommendation systems with search and reranking.
The practical user is a Python engineer who already has Redis in the stack and wants retrieval without adding a second datastore. The library keeps documents, embeddings and metadata in Redis itself, so a filtered vector query is one round trip rather than a join between a vector service and a document store. That is the whole argument for it. If Redis is not already part of your architecture, RedisVL does not make the case for adding it; it assumes the decision has been made.
How the schema, index and query path fit together
The unit of work is the schema. Fields carry a type (text, tag, numeric, geo, vector) and attributes such as sortable, no_index and unf, and the schema declares where data lives through storage_type, either json or hash. A vector field names its algorithm (the README example uses flat), its dimensionality, its distance metric and its datatype, here float32. Those values are not decoration: they determine the index Redis builds, and changing dims after the fact means rebuilding.
Schemas load from a YAML file or a Python dictionary, and the README shows both paths producing the same object through IndexSchema.from_yaml and IndexSchema.from_dict. From there the flow is linear. A vectorizer converts input text to an embedding, a SearchIndex applies the schema to a Redis connection, documents are written under the declared prefix, and queries combine a vector with metadata filters. The README also describes hybrid search that mixes semantic and full-text signals, plus rerankers that reorder results after retrieval.
The extensions sit on the same foundation rather than beside it. Semantic caching stores prompt-response pairs so a near-duplicate prompt can be answered without a model call, embedding caching does the same for vectors, and LLM memory uses the index to hold conversational context. Each one is an index with a schema, which is why the schema layer is the part worth understanding first.
Installing RedisVL and running a first vector index
RedisVL needs Python 3.10 or later; pyproject.toml declares requires-python as >=3.10,<3.15. The README gives a single install command, with an extra for the MCP server.
pip install redisvlpip install redisvl[mcp]You need a Redis that supports vector search. The README's Docker option starts Redis 8 with vector capabilities built in, and the Makefile target redis-start uses the same image tag.
docker run -d --name redis -p 6379:6379 redis:latestNext, define a schema. This is the README's dictionary example, a four-dimensional vector field alongside a tag and a text field.
from redisvl.schema import IndexSchema
schema = IndexSchema.from_dict({
"index": {"name": "user-idx", "prefix": "user", "storage_type": "json"},
"fields": [
{"name": "user", "type": "tag"},
{"name": "credit_score", "type": "tag"},
{"name": "job_title", "type": "text", "attrs": {"sortable": True}},
{"name": "embedding", "type": "vector", "attrs": {
"algorithm": "flat", "datatype": "float32",
"dims": 4, "distance_metric": "cosine"}},
],
})What you should see: an IndexSchema object whose fields match the dictionary. The same schema can be loaded from YAML with IndexSchema.from_yaml("schemas/schema.yaml"), which is the better choice once the schema is shared across services. The README's getting-started guide continues from schema creation to index creation and search; it does not print an expected result for those steps, so treat the first successful index creation as the checkpoint rather than a specific output string.
The dependency pins are where the real constraints live
The most informative file in the repository is pyproject.toml, because its comments record failures rather than preferences. The redis dependency is pinned to >=6.3.0,!=8.0.0,<9.0. Two reasons are given in the file itself: 6.3.0 is the first version that accepts SVS-VAMANA, and redis-py 8.0.0 returns empty RESP3 search results, so 8.1.0 is the supported 8.x floor. An empty result set that looks like a valid answer is one of the worse failure modes a retrieval layer can have, and the exclusion is the project's response to it.
The MCP extra is capped at fastmcp>=2.0.0,<4 for a different reason. The comment states that the MCP protocol revision is chosen by the SDK, not by RedisVL, and that the 2026-07-28 revision is a breaking, stateless redesign of the protocol core. A major bump could change both the negotiated version and how tools advertise their input schemas. That is a transparent trade-off: the project prefers a known protocol version over tracking the newest one.
The consequence for you is that the library's supported range is narrower than "any recent redis-py". If another service in the same environment pins a redis-py version inside that exclusion, you get a resolution conflict, not a runtime warning.
Where RedisVL is the wrong choice
RedisVL is a client, so everything it promises depends on the server behind it. The README's Redis section lists Redis Cloud, Docker, Redis Enterprise, Redis Sentinel, Azure Managed Redis and a Sentinel connection string of redis+sentinel://sentinel1:26379,sentinel2:26379/mymaster. What is missing is a fallback: if your Redis deployment lacks vector and search support, no amount of Python configuration creates those fields.
The second limitation is scale of ambition. The README's vector example uses algorithm flat, which is exact search over every vector. Flat is the right default for a small set and the wrong one for millions of embeddings, where an approximate algorithm is the usual answer. RedisVL exposes the algorithm choice in the schema, so this is a decision you make rather than one the library makes for you, but the README does not walk through when to move off flat.
Third, the documentation surface is uneven. The README links out to docs.redisvl.com for installation, schema design and the MCP how-to, and the truncated portion covers index management, retrieval, rerankers and the CLI. Several of those sections are announced in the capability table before the details appear. If you are evaluating a specific feature, read the linked guide rather than the top-level README, because the README's depth varies by feature.
Finally, if your workload is analytical rather than retrieval-oriented, a columnar store with vector support will serve you better. RedisVL optimizes for low-latency lookups against a working set, not for scanning a large corpus.
RedisVL against building on redis-py directly
The honest alternative is not another vector library; it is the redis-py client you already depend on. RedisVL imports it, and the pinned range in pyproject.toml is the same dependency you would use by hand. The difference is what sits on top.
With redis-py alone you issue search commands, parse the raw response shape yourself, and manage index creation and document serialization in your own code. That is entirely workable, and it removes a layer from your dependency graph. What you take on is the schema: field types, attributes like sortable and unf, storage_type of json or hash, and the vector parameters of dims, distance_metric and datatype all become strings you maintain by hand and keep in sync with the data you write.
RedisVL's contribution is making that schema a first-class object that can be loaded from YAML, validated, and reused by the cache, memory and routing components. The trade is a dependency with its own pin constraints, including the redis-py exclusion, against code you would otherwise write and test yourself. For a single index and one query pattern, the raw client is lighter. For several indexes that share vectorizer and cache configuration, the schema layer earns its place. The README's CLI is a third option for index management from a terminal, useful when you want the schema without writing a service around it.
Maintenance, licence and upgrade cost
The repository is not archived, and the last push was on 2026-09-10, the same day as the v0.27.2 release. Releases in the visible window are close together: v0.27.0 on 2026-09-02, v0.27.1 on 2026-09-04, v0.27.2 on 2026-09-10. Frequent patch releases during a minor cycle usually mean fixes are landing quickly, but they also mean the version you pin will move if you do not pin it.
The version string in pyproject.toml carries a comment stating it is incremented automatically by the release workflow and should not be adjusted by hand. That confirms releases are cut by automation rather than manual tagging, which is a small but real signal about how the project is run.
The licence is MIT, declared both in pyproject.toml and in the README badge. MIT is permissive: it allows commercial use and modification with the copyright notice retained. That is a statement about the licence text, not legal advice; if you redistribute RedisVL inside a product, have your own counsel review the notice requirements.
Upgrade cost concentrates in two places. The redis-py exclusion means a future redis-py release may need a corresponding RedisVL release before you can move. The fastmcp upper bound means MCP protocol changes arrive on the project's schedule, not the SDK's. Both are documented in the file, which makes them predictable rather than surprising.
Editorial conclusion
Adopt RedisVL if you already run Redis and want vector search, hybrid filtering and a semantic cache behind one Python schema object, and if your environment can run Redis 8 or newer (the Docker example is redis:8.4) or a managed Redis with the search module. Do not adopt it as a standalone vector database; it is a client, and index creation fails without a Redis that supports vector fields. Before committing, verify three things: that your Redis endpoint answers the search commands the schema needs, that your Python version is inside the >=3.10,<3.15 range declared in pyproject.toml, and that the pinned redis dependency (>=6.3.0,!=8.0.0,<9.0) resolves against whatever redis-py version the rest of your stack already pins.
Frequently asked questions
What is RedisVL used for in Python?
It is a Python client and CLI for using Redis as a vector database. The README describes RAG pipelines with real-time retrieval, AI agents with memory and semantic routing, and recommendation systems with search and reranking as the intended uses.
How do I install RedisVL?
Install redisvl with pip into a Python 3.10 or later environment. The README also gives pip install redisvl[mcp] for the MCP server extra, and pyproject.toml declares requires-python as >=3.10,<3.15.
Does RedisVL need a specific Redis version?
It needs a Redis deployment with vector search support. The README's Docker option runs redis:latest, described as Redis 8+ with built-in vector search, and the Makefile's redis-start target uses redis:8.4. Redis Cloud, Redis Enterprise, Sentinel and Azure Managed Redis are also listed as options.
How do I define an index schema in RedisVL?
You build an IndexSchema either from a YAML file with IndexSchema.from_yaml or from a Python dictionary with IndexSchema.from_dict. The schema sets the index name, prefix and storage_type, then lists fields with types such as tag, text and vector.
Which redis-py version does RedisVL require?
pyproject.toml pins redis to >=6.3.0,!=8.0.0,<9.0. The file states that 6.3.0 is the first version to accept SVS-VAMANA, and that redis-py 8.0.0 returns empty RESP3 search results, making 8.1.0 the supported 8.x floor.
What is the RedisVL licence?
RedisVL is MIT licensed, declared in pyproject.toml and shown as a badge in the README. MIT permits commercial use and modification provided the copyright notice is retained.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/redis-redis-vl-python)