{
  "schema_version": 2,
  "id": "develop/ai/redisvl/user_guide/installation",
  "title": "Install RedisVL",
  "url": "https://redis.io/docs/latest/develop/ai/redisvl/0.25.1/user_guide/installation/",
  "summary": "",
  "content": "\n\nThere are a few ways to install RedisVL. The easiest way is to use pip.\n\n## Install RedisVL with Pip\n\nInstall `redisvl` into your Python (\u003e=3.10) environment using `pip`:\n\n```bash\n$ pip install -U redisvl\n```\n\nRedisVL comes with a few dependencies that are automatically installed, however, several optional\ndependencies can be installed separately based on your needs:\n\n```bash\n# Vectorizer providers\n$ pip install redisvl[openai]              # OpenAI embeddings\n$ pip install redisvl[cohere]              # Cohere embeddings and reranking\n$ pip install redisvl[mistralai]           # Mistral AI embeddings\n$ pip install redisvl[voyageai]            # Voyage AI embeddings and reranking\n$ pip install redisvl[sentence-transformers]  # HuggingFace local embeddings\n$ pip install redisvl[google-genai]        # Google embeddings (Vertex AI + Gemini API)\n$ pip install redisvl[vertexai]            # Google Vertex AI embeddings (legacy; deprecated, multimodal only)\n$ pip install redisvl[bedrock]             # AWS Bedrock embeddings\n\n# Other optional features\n$ pip install redisvl[mcp]                 # RedisVL MCP server support (Python 3.10+)\n$ pip install redisvl[langcache]           # LangCache managed service integration\n$ pip install redisvl[sql-redis]           # SQL query support\n```\n\nIf you use ZSH, remember to escape the brackets:\n\n```bash\n$ pip install redisvl\\[openai\\]\n```\n\nYou can install multiple optional dependencies at once:\n\n```bash\n$ pip install redisvl[mcp,openai,cohere,sentence-transformers]\n```\n\nTo install **all** optional dependencies at once:\n\n```bash\n$ pip install redisvl[all]\n```\n\n## Install RedisVL from Source\n\nTo install RedisVL from source, clone the repository and install the package using `pip`:\n\n```bash\n$ git clone https://github.com/redis/redis-vl-python.git \u0026\u0026 cd redis-vl-python\n$ pip install .\n\n# or for an editable installation (for developers of RedisVL)\n$ pip install -e .\n```\n\n## Development Installation\n\nFor contributors who want to develop RedisVL, we recommend using [uv](https://docs.astral.sh/uv/) for dependency management:\n\n```bash\n# Clone the repository\n$ git clone https://github.com/redis/redis-vl-python.git \u0026\u0026 cd redis-vl-python\n\n# Install uv if you don't have it\n$ pip install uv\n\n# Install all dependencies (including dev and docs)\n$ uv sync\n\n# Or use make\n$ make install\n```\n\nThis installs the package in editable mode along with all development dependencies (testing, linting, type checking) and documentation dependencies.\n\n### Running Tests and Linting\n\n```bash\n# Run tests (no external APIs required)\n$ make test\n\n# Run all tests (includes API-dependent tests)\n$ make test-all\n\n# Format code\n$ make format\n\n# Run type checking\n$ make check-types\n\n# Run full check (lint + test)\n$ make check\n```\n\n### Pre-commit Hooks\n\nWe use pre-commit hooks to ensure code quality. Install them with:\n\n```bash\n$ pre-commit install\n```\n\nRun hooks manually on all files:\n\n```bash\n$ pre-commit run --all-files\n```\n\n## Installing Redis\n\nRedisVL requires Redis with [Redis Search](https://redis.io/docs/latest/develop/ai/search-and-query/) available. There are several options:\n\n1. [Redis Cloud](https://redis.io/cloud), a fully managed cloud offering with a free tier\n2. [Redis 8+ (Docker)](https://redis.io/downloads/), for local development and testing\n3. [Redis Software](https://redis.io/software/), a commercial self-hosted option\n\n### Redis Cloud\n\nRedis Cloud is the easiest way to get started with RedisVL. You can sign up for a free account [here](https://redis.io/cloud). Make sure to have `Redis Search`\nenabled when creating your database.\n\n### Redis 8+ (local development)\n\nFor local development and testing, we recommend running Redis 8+ in a Docker container:\n\n```bash\ndocker run -d --name redis -p 6379:6379 redis:8.4\n```\n\nRedis 8 includes Redis Search and built-in vector search capabilities.\n\n### Redis Software (self-hosted)\n\nRedis Software is a commercial offering that can be self-hosted. You can download the latest version [here](https://redis.io/downloads/).\n\nIf you are considering a self-hosted Redis Software deployment on Kubernetes, there is the [Redis Software Operator](https://docs.redis.com/latest/kubernetes/) for Kubernetes. This will allow you to easily deploy and manage a Redis Software cluster on Kubernetes.\n\n### Redis Sentinel\n\nFor high availability deployments, RedisVL supports connecting to Redis through Sentinel. Use the `redis+sentinel://` URL scheme to connect. Both sync and async connections are fully supported.\n\n```python\nfrom redisvl.index import SearchIndex, AsyncSearchIndex\n\n# Sync connection via Sentinel\n# Format: redis+sentinel://[username:password@]host1:port1,host2:port2/service_name[/db]\nindex = SearchIndex.from_yaml(\n    \"schema.yaml\",\n    redis_url=\"redis+sentinel://sentinel1:26379,sentinel2:26379/mymaster\"\n)\n\n# Async connection via Sentinel\nasync_index = AsyncSearchIndex.from_yaml(\n    \"schema.yaml\",\n    redis_url=\"redis+sentinel://sentinel1:26379,sentinel2:26379/mymaster\"\n)\n\n# With authentication and database selection\nindex = SearchIndex.from_yaml(\n    \"schema.yaml\",\n    redis_url=\"redis+sentinel://user:pass@sentinel1:26379,sentinel2:26379/mymaster/0\"\n)\n```\n\nThe Sentinel URL format supports:\n\n- Multiple sentinel hosts (comma-separated)\n- Optional authentication (username:password)\n- Service name (defaults to `mymaster` if not specified)\n- Optional database number (defaults to 0)\n- Both sync (`SearchIndex`) and async (`AsyncSearchIndex`) connections\n\n## Redis permissions (ACLs)\n\nRedisVL works through Redis Search commands, so a connecting credential needs the `@search` ACL category, or the individual `FT.*` commands. Reading an index additionally requires key permissions covering its prefix: the [ACL documentation](https://redis.io/docs/latest/operate/oss_and_stack/management/security/acl/#command-categories) describes this rule for creating, modifying, and reading an index, and in practice `FT.INFO`, `FT.SEARCH`, and `FT.AGGREGATE` are denied when the index prefix falls outside the allowed key patterns. `FT.CREATE` is not checked this way, so a credential can create an index it is then unable to read.\n\nOne command needs more than `@search`. Redis tags `FT._LIST` as `@admin` as well as `@search` and `@slow`, and ACL rules are applied left to right — so a rule that grants search access and then takes back administrative commands, such as `+@search -@admin` or `+@all -@admin`, denies it:\n\n```text\nUser \u003cname\u003e has no permissions to run the 'FT._LIST' command\n```\n\nNote that `FT._LIST` does not *require* `@admin`: granting `+@search` on its own permits it. Only rules that subtract `@admin` after granting search are affected. To keep such a policy and still enumerate indexes, grant the command back explicitly with `+ft._list`.\n\n| Operation                                                 | Redis command                                        | Permitted by `+@all -@admin`   |\n|-----------------------------------------------------------|------------------------------------------------------|--------------------------------|\n| `index.create()`, `index.exists()`                        | `FT.CREATE`, `FT.INFO`                               | Yes                            |\n| `index.query()`, `index.search()`, `index.aggregate()`    | `FT.SEARCH`, `FT.AGGREGATE`                          | Yes                            |\n| `index.info()`, `rvl index info`, `rvl stats`             | `FT.INFO`                                            | Yes                            |\n| `index.load()`                                            | `HSET` or `JSON.SET` (needs `@write` and key access) | Yes                            |\n| `index.delete()`, `rvl index delete`, `rvl index destroy` | `FT.DROPINDEX`                                       | Yes                            |\n| Enumerating indexes (see below)                           | `FT._LIST`                                           | No                             |\n\n`SemanticCache`, `SemanticMessageHistory`, `MessageHistory`, and `SemanticRouter` each call `index.create()` while being constructed, so they are covered by the first row.\n\nIndex enumeration is the only thing an `-@admin` rule breaks. It is reached by `SearchIndex.listall()` and `AsyncSearchIndex.listall()`, by `rvl index listall`, and by the migration entry points that discover indexes for you: `rvl migrate helper`, `rvl migrate wizard` when no `-i/--index` is given, and `rvl migrate batch-plan --pattern`.\n\nOther categories gate different operations. `FT.DROPINDEX` is tagged `@dangerous` and `@write` as well as `@search`, so a policy that subtracts `@dangerous` denies `index.delete()`, `rvl index delete`, and `rvl index destroy`.\n\nOutside of Redis Search, RedisVL identifies itself on connect with `CLIENT SETINFO` and falls back to `ECHO`. A credential permitted to run neither currently fails when the connection is created, before any index operation.\n\n### Redis Cloud and Redis Software\n\nBoth manage ACLs through their own control plane rather than the `ACL SETUSER` command, so permissions are attached to roles and users instead of being set on a connection.\n\n- **Redis Cloud** provides three predefined ACL rules that cannot be edited — Full-Access, Read-Write (\"read and write commands and excludes dangerous commands\"), and Read-Only — which you assign to a data access role. See [Configure permissions with Redis ACLs](https://redis.io/docs/latest/operate/rc/security/access-control/data-access-control/configure-acls/). Custom rules use the same syntax as above.\n- **Redis Software** ships one predefined ACL, Full Access, and you define others in the Cluster Manager UI or with a [`POST /v1/redis_acls`](https://redis.io/docs/latest/operate/rs/security/access-control/create-db-roles/) request. It [does not support every `ACL` command](https://redis.io/docs/latest/operate/rs/security/access-control/redis-acl-overview/#acl-command-support), nor nested selectors, nor `(` and `)` in key patterns.\n\nBecause the predefined rules’ exact command sets are not published, confirm a credential against the database rather than inferring what its policy name implies. Redis Software’s documentation uses `+@read +FT.INFO +FT.SEARCH` as an example rule, which is a good illustration: it permits querying and `index.exists()`, but not `index.create()` or index enumeration. Grant `FT.CREATE` explicitly when the application creates its own index, which `SemanticCache`, `SemanticMessageHistory`, `MessageHistory`, and `SemanticRouter` all do.\n",
  "tags": [],
  "last_updated": "2026-08-20T09:47:49+02:00"
}
