> ## Documentation Index
> Fetch the complete documentation index at: https://ngquct-fix-editor-drop-rename-forgets-table-settings.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Cassandra / ScyllaDB

> Connect to Cassandra and ScyllaDB clusters, browse keyspaces, and run CQL queries

export const name_0 = "Cassandra"

export const plugin_0 = "Cassandra Driver"

Cassandra 3.0 is the floor here, and 2.x will not connect. The driver reads its schema from `system_schema`, which 2.x does not have. ScyllaDB is a separate entry in the database type list but the same driver, over the same CQL native protocol.

## Quick setup

Click **New Connection…**, select **Cassandra** or **ScyllaDB**, enter host, port, and credentials, and connect.

The {name_0} driver is not in the app. Picking {name_0} in the **Choose a Database** sheet offers the
download before the form opens, and opening a saved {name_0} connection installs it without asking.
**Settings > Plugins > Browse > {plugin_0}** installs it up front. See [Plugins](/features/plugins).

## Connection settings

| Field | Default | Notes |
| - | - | - |
| **Host** | `localhost` | CQL contact point |
| **Port** | `9042` | CQL native port |
| **Username** | - | Only if the cluster has an authenticator configured |
| **Password** | - | |

There is no Keyspace field. Pick one in the sidebar after connecting, or put it in the URL path and import that URL. Later switches happen in place, with no reconnect, and the system keyspaces are filtered out of the list. Tabs already open are bound to their own keyspace and do not follow. See [Tabs](/features/tabs#where-a-tab-points).

There is no consistency level field either. The driver never sets one, so every statement runs at the DataStax C driver's default of `LOCAL_ONE`.

## Connection URLs

```text theme={null}
cassandra://user:password@host:9042/keyspace
scylladb://user:password@host:9042/keyspace
```

`cql://` and `scylla://` work too. See [Connection URL Reference](/connections/urls).

## Amazon Keyspaces

Keyspaces authenticates with SigV4, not a password, so set **Authentication** to an AWS IAM mode and leave Username and Password empty.

<Steps>
  <Step title="Point at the regional endpoint">
    Host `cassandra.{region}.amazonaws.com`, port `9142`.
  </Step>

  <Step title="Pick an IAM mode and enter the region">
    Access Key, Profile, or SSO. Profiles resolve from `~/.aws/config` and `~/.aws/credentials`, including `credential_process` and assumed roles.
  </Step>

  <Step title="Turn TLS on">
    Keyspaces refuses a plaintext connection. See [AWS IAM Authentication](/connections/aws-iam).
  </Step>
</Steps>

## Browsing and editing

<Frame caption="Keyspace tables in the sidebar with the data grid">
  <img className="block dark:hidden" src="https://mintcdn.com/ngquct-fix-editor-drop-rename-forgets-table-settings/r0fNaPCgrJHY74Mk/images/cassandra-keyspace-browser.png?fit=max&auto=format&n=r0fNaPCgrJHY74Mk&q=85&s=c4911c19fb22cea0fd13d3960cc46283" alt="Cassandra keyspace and tables in the sidebar with table data in the grid" width="1560" height="960" data-path="images/cassandra-keyspace-browser.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/ngquct-fix-editor-drop-rename-forgets-table-settings/r0fNaPCgrJHY74Mk/images/cassandra-keyspace-browser-dark.png?fit=max&auto=format&n=r0fNaPCgrJHY74Mk&q=85&s=29d5be71163410d1b1f6c0c537a14b10" alt="Cassandra keyspace and tables in the sidebar with table data in the grid" width="1560" height="960" data-path="images/cassandra-keyspace-browser-dark.png" />
</Frame>

The structure view gives each column's name, CQL type, a primary key flag set for partition key and clustering columns alike, and the table's secondary indexes. Structure editing adds and drops columns; every other schema change goes in the CQL editor. In the grid, map, set, list, and tuple render as collections, a user-defined type as `{field: value}`, a `duration` as `1d2h30m`, a float `vector` as a list of numbers, and blob as hex.

CQL has no `OFFSET`, so a page is reached by reading forward from the first row. **Next** and **Previous** over pages already shown take one read each. Jumping straight to page 200 reads the 199 pages before it first. Rows arrive in token order, and a column header does not sort them: CQL orders rows only by clustering columns inside one partition. A result in the CQL editor sorts the rows it holds.

Neither a table's total nor a filtered total is counted on open. **Count Exactly** runs `SELECT COUNT(*)`, which reads every partition whatever `LIMIT` it carries, so on a large table it can hit the 30 second request timeout.

### Filters

A filter adds `ALLOW FILTERING`, so the server reads every partition to answer it unless the filter pins the whole partition key.

| Operator | Result |
| - | - |
| **equals**, **greater than**, **greater or equal**, **less than**, **less or equal**, **in list**, **between** | Runs on any column |
| **contains**, **starts with**, **ends with** | Sends `LIKE`. ScyllaDB takes it on any column; Cassandra only on a column with a SASI or SAI index |
| **not equals**, **not contains**, **is NULL**, **is not NULL**, **is empty**, **is not empty**, **not in list**, **matches regex** | Refused with a message naming the operator. CQL has no form for them |

The filter bar offers **Match all** only, because CQL has no `OR`, and **Search All Rows** does not appear in the find bar. A raw row goes into the `WHERE` clause as written, joined to the others with `AND`.

### Editing

An edited value is sent as its column's type, so it has to read as one: a number for `int` or `decimal`, a UUID for `uuid`, `0x…` for `blob`. A `timestamp` takes the form the grid shows, the form cqlsh prints, a date alone, or milliseconds since 1970, and one with no zone is read as UTC. A value that does not parse is refused and nothing in the save is written. `list`, `set`, `map`, `tuple`, user-defined types and `duration` cannot be edited in the grid: write an `UPDATE` in the CQL editor.

Each row in a save is written by its own statement, named by its whole primary key, so deleting several rows sends one `DELETE` each. **Add Row** writes `INSERT … IF NOT EXISTS`: a new row whose key is already taken is refused rather than written over the row that holds it. A primary key column cannot be edited in place. Delete the row and add it again with the new key.

Results in the CQL editor are read-only. Open the table from the sidebar to edit its rows.

## SSL/TLS

The default is **Disabled**, and there is no opportunistic TLS here, so **Preferred** behaves exactly like **Required**.

| Mode | Verifies |
| - | - |
| **Preferred**, **Required** | Nothing. Encryption only |
| **Verify CA** | The chain, against the PEM file you supply |
| **Verify Identity** | The chain and the hostname |

Both verifying modes need a **CA Certificate** path, and refuse to connect without one rather than falling back to the system roots. For mutual TLS set the client certificate and key paths, with the key's passphrase in **Key Passphrase**. See [SSL/TLS](/connections/ssl).

## Limitations

* A page far into a large table is slow, because every row before it is read first. Filter the table down, or query it in the CQL editor with a `WHERE` on the partition key.
* Counter columns cannot be set with a plain `UPDATE`. The grid will edit one and the server rejects the statement it generates. Use `UPDATE … SET c = c + 1` in the CQL editor.
* Materialized views and UDTs do not appear in the sidebar. Query `system_schema` in the CQL editor to see them. UDFs and UDAs are listed under Functions; see [Procedures, functions, and triggers](/features/routines-triggers).
* The DDL tab reconstructs `CREATE TABLE` from the column list, so table options (compaction, compression, `gc_grace_seconds`), clustering order, and the split between partition and clustering key are all missing from it. Read the real definition with `DESCRIBE TABLE` in `cqlsh`.
* DataStax Astra DB does not connect. The Secure Connect Bundle it requires cannot be loaded, and there is no way around it.
* Connect and request timeouts are fixed at 10 and 30 seconds. Neither the app-wide query timeout nor a multi-DC policy reaches this driver.

## Troubleshooting

**Connection refused**: Check Cassandra is running with `nodetool status`, that port 9042 matches `cassandra.yaml`, and that `rpc_address` and `listen_address` are reachable from your Mac.

**Authentication fails**: Verify the credentials and check `authenticator: PasswordAuthenticator` in `cassandra.yaml`. The default superuser is `cassandra` / `cassandra`.

**Read timeout**: Put the full partition key in the `WHERE` clause, add a `LIMIT`, and check cluster health with `nodetool`.
