README.md

May 29, 2026 ยท View on GitHub

cqlls (CQL Language Server)

Crates.io

The Best Open Source language server for CQL (Cassandra Query Language) ^_^

image

IDE Integrations

Installation

cargo install cqlls

Config

To configure cqlls you can add .cqlls file in the project root

db {
    type: "datastax_hcd|scylla|dynamo"
 
    preferred_dc: "us-east-1"
    known_nodes: {
        "127.0.0.1:9042",
        "127.0.0.1:9043"
    }

    tls: "none|tls|mtls"
    ca_cert: "/path/to/ca_cert"

    user: "cassandra"
    pswd: "cassandra"
}

fmt {
    type_padding: 0-255
    indent: 0-255
}

features {
    context_aware_completions: true|false
    diagnostics: true|false
}

debug {
    logging: true|false
}

Tip

All parts of the config are independent from each other, so if, for example, you only want to configure formatting settings and db url, you can do something like this:

db {
    known_nodes: {
        "172.0.0.2:9042"
    }
}

fmt {
    indent: 2
}

If no config file was provided, server will default to the following

db {
    type: "scylla"

    preferred_dc: ""
    known_nodes: {
        "127.0.0.1:9042"
    }

    tls: "none"
    ca_cert: ""

    user: "cassandra"
    pswd: "cassandra"
}

fmt {
    type_padding: 8
    indent: 4
}

features {
    context_aware_completions: true
    diagnostics: false
}

debug {
    logging: false
}

db

Just configures your database connection.

fmt

Indent vs padding

-- Inside create table
CREATE TABLE IF NOT EXISTS users (
/*Indent*/ id           /*Padding*/ uuid,
/*Indent*/ display_name /*Padding*/ text,
);
-- Inside insert
INSERT INTO users (
/*Indent*/ user_id,
/*Indent*/ username,
/*Indent*/ contact,
/*Indent*/ addresses,
/*Indent*/ tags,
/*Indent*/ preferences,
/*Indent*/ last_login,
/*Indent*/ created_at
)
VALUES (
/*Indent*/ uuid(),
/*Indent*/ 'bob_builder',
/*Indent*/ {
/*Indent*/ /*Indent*/ email: 'bob@example.com',
/*Indent*/ /*Indent*/ phone: '+1-555-0202',
/*Indent*/ /*Indent*/ preferred_time: {
/*Indent*/ /*Indent*/ /*Indent*/ 'morning'
/*Indent*/ /*Indent*/ }
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'home': {
/*Indent*/ /*Indent*/ /*Indent*/ street: '789 Oak Ave',
/*Indent*/ /*Indent*/ /*Indent*/ city: 'Austin',
/*Indent*/ /*Indent*/ /*Indent*/ zip_code: '73301',
/*Indent*/ /*Indent*/ /*Indent*/ country: 'USA'
/*Indent*/ /*Indent*/ }
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'verified',
/*Indent*/ /*Indent*/ 'beta-tester'
/*Indent*/ },
/*Indent*/ {
/*Indent*/ /*Indent*/ 'theme': 'light',
/*Indent*/ /*Indent*/ 'language': 'en',
/*Indent*/ /*Indent*/ 'notifications': 'disabled'
/*Indent*/ },
/*Indent*/ toTimestamp(now()),
/*Indent*/ toTimestamp(now())
);

Padding is calculated in the following way for each field:

curr_field_padding = padding + max_field_len - curr_field_len;

-- Assuming padding is set to 8, max_field_len = 12 (display_name)
CREATE TABLE IF NOT EXISTS users (
/*Indent*/  id           /* 8 + 12 - 2  = 18 */  uuid,
/*Indent*/  display_name /* 8 + 12 - 12 = 8  */  text,
);

features

Used to enable/disable a specific feature.

Currently cqlls has 2 features which are

  • context_aware_completions
    • When enabled, cqlls will attempt to query the database, and provide a context aware completions, such as table names, keyspaces, table fields etc.
  • diagnostics
    • When enabled, shows diagnostics.

debug

Enable/Disable logging.

Log file can be found at:

  • MacOS: ~/Library/Application\ Support/cqlls/cqlls.log
  • Linux: ~/.local/share/cqlls/cqlls.log

Tip

Diagnostics are currently available as an experimental feature,
and aren't stable yet ^_^