/clickhouse-js-node-coding
Write idiomatic application code with the ClickHouse Node.js client (`@clickhouse/client`). Use this skill whenever a user is *building* against the Node.js client — configuring the client, pinging, inserting rows in JSON or raw formats, selecting and parsing results, binding
$ npx -y skills add clickhouse/agent-skills --skill clickhouse-js-node-coding --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/clickhouse-js-node-coding
Context preview
The summary Claude sees to decide when to auto-load this skill.
Write idiomatic application code with the ClickHouse Node.js client (`@clickhouse/client`). Use this skill whenever a user is *building* against the Node.js client — configuring the client, pinging, inserting rows in JSON or raw formats, selecting and parsing results, binding
SKILL.md
clickhouse-js-node-coding.SKILL.mdname: clickhouse-js-node-coding
description: >
Write idiomatic application code with the ClickHouse Node.js client
(`@clickhouse/client`). Use this skill whenever a user is *building* against
the Node.js client — configuring the client, pinging, inserting rows in JSON
or raw formats, selecting and parsing results, binding query parameters,
managing sessions and temporary tables, working with data types or
customizing JSON parsing. Do NOT use for browser/Web client code.
ClickHouse Node.js Client — Coding
Reference: https://clickhouse.com/docs/integrations/javascript
> **⚠️ Node.js runtime only.** This skill covers the `@clickhouse/client` > package running in a **Node.js runtime** exclusively — including **Next.js > Node runtime** API routes, React Server Components, Server Actions, and > standard Node.js processes. Do **not** apply this skill to browser client > components, Web Workers, **Next.js Edge runtime**, Cloudflare Workers, or > any usage of `@clickhouse/client-web`. For browser/edge environments, the > correct package is `@clickhouse/client-web`.
---
How to Use This Skill
1. **Match the user's intent** to a row in the Task Index below and read the corresponding reference file before writing code. After reading it, scan any **Answer checklist** in that reference and make sure the final answer covers each relevant item; those checklists capture details users usually need but are easy to omit in short answers. 2. **Always import from `@clickhouse/client`** (never `@clickhouse/client-web`) and create a client with `createClient({ url })` or rely on supported defaults when appropriate. Close it with `await client.close()` preferably when it's no longer needed or during graceful shutdown for global resources. 3. **Prefer `JSONEachRow` for typical row inserts/selects** unless the user has already chosen another format or is streaming raw bytes (CSV / TSV / Parquet — see `examples/node/performance/`). **Note on `clickhouse_settings`:** settings passed to `createClient` are defaults for every request; they can be overridden per-call by passing `clickhouse_settings` directly to `insert()`, `query()`, or `command()`. Always mention this when the user configures settings at the client level. 4. **Always use `query_params` for user-supplied values** — never template- literal-interpolate them into SQL. See `reference/query-parameters.md`. **When answering a parameter-binding question, your response must explicitly name template-literal interpolation as a "SQL injection risk"** — even when the user only asked about syntax and did not raise security. The literal phrase "SQL injection" needs to appear; this is the most common mistake from PostgreSQL/MySQL users and the security framing is part of the correct answer, not an optional aside. 5. **Pick the right method for the job:**
- `client.insert()` — write rows.
- `client.query()` + `resultSet.json()` / `.text()` / `.stream()` — read
rows that return data.
- `client.command()` — DDL and other statements that don't return rows
(`CREATE`, `DROP`, `TRUNCATE`, `ALTER`, `SET` in a session, etc.).
- `client.exec()` — when you need the raw response stream of an arbitrary
statement (rare in coding scenarios).
- `client.ping()` — health check; returns `{ success, error? }`, never
throws on connection failure. 6. **Note version constraints** when relevant. Examples:
- `pathname` config option: client `>= 1.0.0`.
- `BigInt` values in `query_params`: client `>= 1.15.0`.
- `TupleParam` and JS `Map` in `query_params`: client `>= 1.9.0`.
- Configurable `json.parse` / `json.stringify`: client `>= 1.14.0`.
- `Time` / `Time64` data types: ClickHouse server `>= 25.6`.
- `QBit` data type: ClickHouse server `>= 25.10` (GA on `26.x`).
- `Dynamic` / `Variant` / new `JSON` types: ClickHouse server `>= 24.1` /
`24.5` / `24.8` (no longer experimental since `25.3`).
---
Task Index
Identify the user's task and read the matching reference file.
| Task | Triggers / symptoms | Reference file | | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | **Configure / connect the client** | Building a `createClient` call, URL parameters, `clickhouse_settings`, default format, custom HTTP headers | `reference/client-configuration.md` | | **Compress requests / responses** | `compression`, gzip vs `zstd`, `{ codec }` option shape, Node version requirements, web limitations | `reference/compression.md` | | **Ping the server** | Health checks, readiness probes, "is ClickHouse up?" | `reference/ping.md` | | **Choose an insert format** | "Which format should I use to insert?", JSON vs raw, `JSONEachRow` vs `JSON` vs `JSONObjectEachRow`
Read more
name: clickhouse-js-node-coding description: > Write idiomatic application code with the ClickHouse Node.js client (`@clickhouse/client`). Use this skill whenever a user is *building* against the Node.js client — configuring the client, pinging, inserting rows in JSON or raw formats, selecting and parsing results, binding query parameters, managing sessions and temporary tables, working with data types or customizing JSON parsing. Do NOT use for browser/Web client code.
ClickHouse Node.js Client — Coding
Reference: https://clickhouse.com/docs/integrations/javascript
> **⚠️ Node.js runtime only.** This skill covers the `@clickhouse/client` > package running in a **Node.js runtime** exclusively — including **Next.js > Node runtime** API routes, React Server Components, Server Actions, and > standard Node.js processes. Do **not** apply this skill to browser client > components, Web Workers, **Next.js Edge runtime**, Cloudflare Workers, or > any usage of `@clickhouse/client-web`. For browser/edge environments, the > correct package is `@clickhouse/client-web`.
---
How to Use This Skill
1. **Match the user's intent** to a row in the Task Index below and read the corresponding reference file before writing code. After reading it, scan any **Answer checklist** in that reference and make sure the final answer covers each relevant item; those checklists capture details users usually need but are easy to omit in short answers. 2. **Always import from `@clickhouse/client`** (never `@clickhouse/client-web`) and create a client with `createClient({ url })` or rely on supported defaults when appropriate. Close it with `await client.close()` preferably when it's no longer needed or during graceful shutdown for global resources. 3. **Prefer `JSONEachRow` for typical row inserts/selects** unless the user has already chosen another format or is streaming raw bytes (CSV / TSV / Parquet — see `examples/node/performance/`). **Note on `clickhouse_settings`:** settings passed to `createClient` are defaults for every request; they can be overridden per-call by passing `clickhouse_settings` directly to `insert()`, `query()`, or `command()`. Always mention this when the user configures settings at the client level. 4. **Always use `query_params` for user-supplied values** — never template- literal-interpolate them into SQL. See `reference/query-parameters.md`. **When answering a parameter-binding question, your response must explicitly name template-literal interpolation as a "SQL injection risk"** — even when the user only asked about syntax and did not raise security. The literal phrase "SQL injection" needs to appear; this is the most common mistake from PostgreSQL/MySQL users and the security framing is part of the correct answer, not an optional aside. 5. **Pick the right method for the job:**
- `client.insert()` — write rows.
- `client.query()` + `resultSet.json()` / `.text()` / `.stream()` — read
rows that return data.
- `client.command()` — DDL and other statements that don't return rows
(`CREATE`, `DROP`, `TRUNCATE`, `ALTER`, `SET` in a session, etc.).
- `client.exec()` — when you need the raw response stream of an arbitrary
statement (rare in coding scenarios).
- `client.ping()` — health check; returns `{ success, error? }`, never
throws on connection failure. 6. **Note version constraints** when relevant. Examples:
- `pathname` config option: client `>= 1.0.0`.
- `BigInt` values in `query_params`: client `>= 1.15.0`.
- `TupleParam` and JS `Map` in `query_params`: client `>= 1.9.0`.
- Configurable `json.parse` / `json.stringify`: client `>= 1.14.0`.
- `Time` / `Time64` data types: ClickHouse server `>= 25.6`.
- `QBit` data type: ClickHouse server `>= 25.10` (GA on `26.x`).
- `Dynamic` / `Variant` / new `JSON` types: ClickHouse server `>= 24.1` /
`24.5` / `24.8` (no longer experimental since `25.3`).
---
Task Index
Identify the user's task and read the matching reference file.
| Task | Triggers / symptoms | Reference file | | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- | | **Configure / connect the client** | Building a `createClient` call, URL parameters, `clickhouse_settings`, default format, custom HTTP headers | `reference/client-configuration.md` | | **Compress requests / responses** | `compression`, gzip vs `zstd`, `{ codec }` option shape, Node version requirements, web limitations | `reference/compression.md` | | **Ping the server** | Health checks, readiness probes, "is ClickHouse up?" | `reference/ping.md` | | **Choose an insert format** | "Which format should I use to insert?", JSON vs raw, `JSONEachRow` vs `JSON` vs `JSONObjectEachRow`
The official Agent Skills for ClickHouse. These skills help LLMs and agents to adopt best practices when working with ClickHouse and chdb (in-process ClickHouse for Python). You can use these skills with open-source ClickHouse and managed ClickHouse Cloud.
Repo: clickhouse/agent-skills
Other skills on clickhouse-best-practices.
- /chdb-datastore
Use when the user has tabular data (pandas DataFrame, parquet, csv, Arrow, json) and wants to filter, group, aggregate, join, or speed up slow pandas. Provides chDB DataStore — same pandas API, ClickHouse engine underneath. Also handles reading from S3, MySQL, PostgreSQL,
Open skill - /chdb-sql
Use when the user wants to run SQL — especially analytical SQL — on local files (parquet/csv/json), URLs, S3 paths, or remote databases (Postgres, MySQL, MongoDB, ClickHouse Cloud, Iceberg, Delta Lake) without setting up a server. Provides chDB — embedded ClickHouse SQL in
Open skill - /clickhouse-architecture-advisor
MUST USE when designing ClickHouse architectures, selecting between ingestion or modeling patterns, or translating best practices into workload-specific system designs. Complements clickhouse-best-practices with decision frameworks and explicit provenance labels.
Open skill - /clickhouse-best-practices
MUST USE when reviewing ClickHouse schemas, queries, or configurations. Contains 31 rules that MUST be checked before providing recommendations. Always read relevant rule files and cite specific rules in responses.
Open skill - /clickhouse-js-node-rowbinary
Generate TypeScript/JavaScript code that reads/decodes AND writes/encodes ClickHouse RowBinary streams for the ClickHouse HTTP server. Use this skill whenever a user wants to parse or produce `RowBinary`, `RowBinaryWithNames`, or `RowBinaryWithNamesAndTypes`. Node.js only,
Open skill - /clickhouse-js-node-troubleshooting
Troubleshoot and resolve common issues with the ClickHouse Node.js client (@clickhouse/client). Use this skill whenever a user reports errors, unexpected behavior, or configuration questions involving the Node.js client specifically — including socket hang-up errors, Keep-Alive
Open skill

