{
  "id": "previous-cli-comparison",
  "title": "Compare the previous and current RDI CLI",
  "url": "https://redis.io/docs/latest/integrate/redis-data-integration/reference/cli/previous-cli-comparison/",
  "summary": "Compare the RDI CLI introduced in version 1.19.0 with the previous CLI",
  "tags": [
    "redis-di"
  ],
  "last_updated": "2026-07-31T16:56:30+01:00",
  "page_type": "content",
  "content_hash": "88cf92d6c5c4e870411240c5b485568aae78ae8b79285241c4fc5b4b5c471ca3",
  "sections": [
    {
      "id": "overview",
      "title": "Overview",
      "role": "overview",
      "text": "RDI 1.19.0 replaces the previous Python-based `redis-di` CLI with a Go-based CLI.\nThe executable name stays the same, and several command names are unchanged, but the\ncurrent CLI is not a drop-in replacement for the previous connection settings or contexts.\n\nThe most important difference is what the CLI connects to. The previous CLI connected\ndirectly to the RDI database and the Kubernetes API. The current CLI is a thin client over\nthe RDI REST API."
    },
    {
      "id": "compare-the-clis",
      "title": "Compare the CLIs",
      "role": "content",
      "text": "| Area | Previous CLI (before RDI 1.19.0) | Current CLI (RDI 1.19.0 and later) |\n| :--- | :------------------------------- | :---------------------------------- |\n| Implementation | Python application | Self-contained Go binary |\n| Installation types | VM installations | VM, Kubernetes, and Redis Cloud installations |\n| Connection | RDI database and Kubernetes API | RDI REST API |\n| Pipeline scope | The `default` pipeline | Multiple named pipelines; defaults to `default` |\n| Connection options | `--rdi-host`, `--rdi-port`, `--rdi-user`, `--rdi-password`, and RDI database TLS options | `--api-url`, `--user`, `--password`, and API TLS options; Redis Cloud also supports `--account-key` and `--user-key` |\n| Contexts | A list of RDI database connections in `~/.redis-di`, with an `is_active` field on each entry | A map of API connections in `~/.redis-di`, with one `current-context` |\n| Output | Human-readable tables | Compact tables and sectioned descriptions; `list` and `get` commands also support JSON and YAML |\n| Secrets | `set-secret` on VM installations; `rdi-secret.sh` for Kubernetes | Create, inspect, update, and delete operations through `redis-di` on every installation type |"
    },
    {
      "id": "update-the-connection-options",
      "title": "Update the connection options",
      "role": "content",
      "text": "Replace the RDI database address with the RDI API URL. For example, a previous CLI\ninvocation such as:\n\n[code example]\n\nbecomes:\n\n[code example]\n\nThe current CLI does not accept the previous RDI database connection options on\nAPI-based commands. Update scripts and environment variables as follows:\n\n| Previous setting | Current setting |\n| :--------------- | :-------------- |\n| `--rdi-host` and `--rdi-port` | `--api-url` or `RDI_API_URL` |\n| `--rdi-user` or `RDI_REDIS_USERNAME` | `--user` or `RDI_USER` |\n| `--rdi-password` or `RDI_REDIS_PASSWORD` | `--password` or `RDI_PASSWORD` |\n| `--rdi-cacert` | `--cacert` or `RDI_CACERT` |\n| `--rdi-key`, `--rdi-cert`, `--rdi-key-password` | No equivalent; the CLI authenticates to the API instead of the RDI database |\n| `--rdi-namespace` or `RDI_NAMESPACE` | No equivalent; pipeline operations go through the API |\n\nFor Redis Cloud, use `--account-key` with `--user-key` instead of `--user` with\n`--password`. See the [CLI reference overview](https://redis.io/docs/latest/integrate/redis-data-integration/reference/cli#connecting-to-the-api)\nfor all authentication modes."
    },
    {
      "id": "recreate-contexts",
      "title": "Recreate contexts",
      "role": "content",
      "text": "Both CLIs use `~/.redis-di`, but the file formats and stored connection details are\ndifferent. Previous contexts contain RDI database and Kubernetes connection details and\ncannot be used as API contexts.\n\nThe standard VM [`upgrade.sh`](https://redis.io/docs/latest/integrate/redis-data-integration/installation/upgrade#upgrading-a-vm-installation)\nflow preserves the previous context for the VM administration commands and creates a\ndefault API context. If you replace the CLI independently and still have a previous-format\n`~/.redis-di` file, back it up before creating current contexts:\n\n[code example]\n\nThe context commands also changed meaning:\n\n| Task | Previous CLI | Current CLI |\n| :--- | :----------- | :---------- |\n| Create a context | `redis-di add-context <name> [connection options]` | `redis-di set-context <name> [connection options]` |\n| Select the active context | `redis-di set-context <name>` | `redis-di use-context <name>` |\n| Update a context | Recreate the context | `redis-di set-context <name> [options to update]` |\n| Remove all contexts | `redis-di delete-all-contexts` | Delete contexts individually with `redis-di delete-context <name>` |\n\nPasswords and Redis Cloud user keys are not saved in current contexts. Supply them with an\nenvironment variable, a command option, or the interactive prompt."
    },
    {
      "id": "update-commands",
      "title": "Update commands",
      "role": "content",
      "text": "Pipeline lifecycle commands keep their previous names. They now take an optional pipeline\nname that defaults to `default`:\n\n[code example]\n\nOther common tasks changed as follows:\n\n| Task | Previous CLI | Current CLI |\n| :--- | :----------- | :---------- |\n| Inspect pipeline status | `redis-di status` | `redis-di describe [pipeline]`; `status` remains an alias |\n| Continuously refresh status | `redis-di status --live` | `watch -n 1 redis-di describe [pipeline]` |\n| List pipelines | Not available | `redis-di list` |\n| Get a pipeline | Not available | `redis-di get [pipeline]` |\n| Delete a pipeline | Not available | `redis-di delete [pipeline]` |\n| Inspect rejected records | `redis-di get-rejected [options]` | `redis-di list-dlqs`, then `redis-di list-dlq-records <dlq>`; `get-rejected` remains an alias |\n| Inspect jobs | `redis-di list-jobs` and `redis-di describe-job <job>` | The same commands, with `--pipeline <pipeline>` for a non-default pipeline |\n| Manage secrets | `redis-di set-secret <key> <value>` or `rdi-secret.sh` | `list-secrets`, `get-secret`, `describe-secret`, `set-secret`, and `delete-secret` |\n| Install or upgrade RDI on a VM | `redis-di install` or `redis-di upgrade` | Run `install.sh` or `upgrade.sh` from the VM installation package |\n| Install or upgrade RDI on Kubernetes | Not available | Use the RDI Helm chart |\n| Trace pipeline records | `redis-di trace` | Removed |\n| Create the RDI database | `redis-di create` | Removed; use the installation workflow |\n\nOn VM installations, `configure-rdi` and `dump-support-package` remain available through\n`redis-di`. They are not available with a standalone CLI or on Kubernetes, Redis Cloud,\nmacOS, or Windows.\n\nThe current `describe` output is sourced from the API. It does not include the connected\nRedis client list or Debezium offsets that the previous `status` command read directly.\nThe `--live`, `--page-number`, `--page-size`, and `--ingested-only` status options were\nremoved."
    },
    {
      "id": "update-scripts-that-read-cli-output",
      "title": "Update scripts that read CLI output",
      "role": "content",
      "text": "The current CLI uses a compact, kubectl-style table for list operations and a sectioned,\nhuman-readable layout for `describe` operations. Scripts that parse the previous bordered\ntables must be updated.\n\nFor list and get operations, prefer machine-readable output instead of parsing a table:\n\n[code example]\n\nCommand results are written to standard output and diagnostics are written to standard\nerror, so you can redirect or pipe results without including log messages."
    },
    {
      "id": "verify-the-migration",
      "title": "Verify the migration",
      "role": "content",
      "text": "After updating your contexts and commands:\n\n1. Run `redis-di --version` and verify that it reports version 1.19.0 or later.\n1. Run `redis-di info` to verify the API connection and RDI version.\n1. Run `redis-di list` to verify that the expected pipelines are visible.\n1. Run `redis-di describe [pipeline]` to verify pipeline status and metrics.\n1. Run `redis-di help <command>` to review changed options before updating automation."
    }
  ],
  "examples": [
    {
      "id": "update-the-connection-options-ex0",
      "language": "bash",
      "code": "redis-di status \\\n  --rdi-host <rdi-database-host> \\\n  --rdi-port <rdi-database-port> \\\n  --rdi-user <user> \\\n  --rdi-password <password>",
      "section_id": "update-the-connection-options"
    },
    {
      "id": "update-the-connection-options-ex1",
      "language": "bash",
      "code": "redis-di describe \\\n  --api-url https://<rdi-api-host> \\\n  --user <user> \\\n  --password <password>",
      "section_id": "update-the-connection-options"
    },
    {
      "id": "recreate-contexts-ex0",
      "language": "bash",
      "code": "mv ~/.redis-di ~/.redis-di.pre-1.19\n\nredis-di set-context <context-name> \\\n  --api-url https://<rdi-api-host> \\\n  --user <user>\nredis-di use-context <context-name>",
      "section_id": "recreate-contexts"
    },
    {
      "id": "update-commands-ex0",
      "language": "bash",
      "code": "redis-di deploy [pipeline] --dir <path>\nredis-di start [pipeline]\nredis-di stop [pipeline]\nredis-di reset [pipeline]",
      "section_id": "update-commands"
    },
    {
      "id": "update-scripts-that-read-cli-output-ex0",
      "language": "bash",
      "code": "redis-di list -o json\nredis-di get <pipeline> -o yaml\nredis-di list-secrets -o json",
      "section_id": "update-scripts-that-read-cli-output"
    }
  ]
}
