Dragonfly Cloud runs the same multi-threaded engine as the
[Dragonfly image](/docs/recipes/dragonfly), with a managed endpoint.
`drivers.store.kv` stays `redis`.

<Callout title="The one rule">
  Click the **data store row** to open the side drawer — copy the **Redis-compatible Connection
  URI** (includes passkey). Paste it as `REDIS_URL`.
</Callout>

## Find credentials (current console)

1. Open Dragonfly Cloud → **Data Stores**.
2. Wait until **Status** is **Active**.
3. Click the data store **row** (opens the configuration drawer).
4. Copy:
   - **Redis-compatible Connection URI** (e.g. `rediss://default:PASS@….dragonflydb.cloud:6385`)
   - or host / port / `default` user / passkey separately
5. Paste the URI into `REDIS_URL` unchanged when it already uses `rediss://`.

```bash title="process env"
REDIS_URL=rediss://default:PASSKEY@xxxxx.dragonflydb.cloud:6385
```

Smoke-check: `redis-cli -u "$REDIS_URL" PING`.

## Production guidance

| Topic           | Guidance                                                                     |
| --------------- | ---------------------------------------------------------------------------- |
| Public network  | TLS + passkey **on** by default — leave TLS enabled                          |
| Private network | Recommended for production (peering) — passkey still required on public      |
| HA              | Enable high availability in the data store settings before you need failover |
| Driver          | Same `redis` driver as self-hosted Dragonfly                                 |
| Port            | Drawer URI often uses **6385** (not 6379) — copy the URI wholesale           |

Self-hosting comparison: the [Dragonfly image](/docs/recipes/dragonfly) needs
`OKE_STORE_KV_PASSWORD` + `memlock`; Cloud replaces that with the drawer passkey.

Do not reuse a self-hosted `REDIS_URL` without `rediss://` when the drawer shows TLS.

## Real gotcha — connecting before Active

The drawer is visible while the store is still provisioning; clients get connection
errors until **Status = Active**. Wait for Active before wiring CI or app boot.

## Troubleshooting

<Accordions>
<Accordion title="Connection refused / timeout while Status is not Active">

Provisioning. Retry when the console shows **Active**. Do not rotate the passkey yet —
confirm status first.

</Accordion>
<Accordion title="NOAUTH / WRONGPASS">

URI missing the passkey, or passkey rotated in the drawer without updating env. Re-copy
the Connection URI from the data store drawer after any rotation.

</Accordion>
</Accordions>

## Learn more

- [Dragonfly (image)](/docs/recipes/dragonfly) — self-hosted peer
- [Store · KV](/docs/elements/store#kv)
- [Upstash](/docs/providers/upstash) — serverless alternative

## Next

<Cards>
  <Card title="Upstash" description="Serverless-friendly option." href="/docs/providers/upstash" />
  <Card title="Redis Cloud" description="Vendor-native Redis." href="/docs/providers/redis-cloud" />
  <Card title="YugabyteDB" description="Managed SQL-side pair." href="/docs/providers/yugabytedb" />
</Cards>
