Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
clickhouse avatar

Clickhouse Js Node Coding

  • 4.7k installs
  • 510 repo stars
  • Updated August 2, 2026
  • clickhouse/agent-skills

clickhouse-js-node-coding is an agent skill that teaches idiomatic Node.js coding with the @clickhouse/client package for developers who build analytics APIs, event inserts, and parameterized queries on ClickHouse server

About

clickhouse-js-node-coding is an agent skill from clickhouse/agent-skills for building with the ClickHouse Node.js client `@clickhouse/client` in Node.js, Next.js Node runtime routes, React Server Components, and Server Actions—not Edge or browser runtimes. It maps tasks to 12 reference files covering client configuration, ping health checks, JSONEachRow inserts and selects, async inserts, query parameter binding with `{name: Type}` syntax, sessions, compression, and modern types like Dynamic, Variant, JSON, Time, Time64, and QBit. The skill mandates `query_params` instead of template-literal SQL interpolation, explicit SQL injection warnings, and `await client.close()` in snippets. Use it when wiring analytics endpoints, bulk event ingestion, or parameterized reporting queries in Node backends backed by ClickHouse.

  • Uses official ClickHouse JS client patterns
  • Authors efficient analytical SQL and aggregations
  • Handles batch inserts and async ingestion
  • Applies Node service integration best practices
  • Addresses timeouts, pooling, and type mapping

Clickhouse Js Node Coding by the numbers

  • 4,668 all-time installs (skills.sh)
  • +942 installs in the week ending Aug 4, 2026 (Skillselion tracking)
  • Ranked #23 of 911 Databases skills by installs in the Skillselion catalog
  • Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/clickhouse/agent-skills --skill clickhouse-js-node-coding

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs4.7k
repo stars510
Last updatedAugust 2, 2026
Repositoryclickhouse/agent-skills

How do you query ClickHouse from Node.js safely?

Implement Node.js clients, queries, inserts, and performance patterns against ClickHouse for analytics APIs and event pipelines.

Who is it for?

clickhouse-js-node-coding fits backend engineers shipping Node.js or Next.js Node-runtime analytics services that read and write ClickHouse with the official JS client.

Skip if: Skip clickhouse-js-node-coding for @clickhouse/client-web browser usage, Edge runtime workers, or ClickHouse troubleshooting hangs and TLS issues covered elsewhere.

When should I use this skill?

Trigger clickhouse-js-node-coding when configuring createClient, inserting JSONEachRow batches, binding query_params, or parsing ClickHouse results in Node.js.

What you get

Node.js client setup code, parameterized insert and select queries, parsed JSONEachRow results, and reference-backed patterns for sessions or async inserts.

  • Client configuration snippets
  • Parameterized query and insert code

By the numbers

  • 12-task reference index rows in the skill Task Index table
  • Documents client features from version 1.0.0 through 1.15.0 and server types from 24.1 onward

Files

SKILL.mdMarkdownGitHub ↗

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.
  • 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.

TaskTriggers / symptomsReference file
Configure / connect the clientBuilding a createClient call, URL parameters, clickhouse_settings, default format, custom HTTP headersreference/client-configuration.md
Ping the serverHealth 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 JSONObjectEachRowreference/insert-formats.md
Insert into a subset of columns / different databaseinsert({ columns }), excluding columns, ephemeral columns, cross-DB insertsreference/insert-columns.md
Insert values, expressions, dates, decimalsINSERT … VALUES with SQL functions, Date/DateTime from JS, Decimal precision, INSERT … SELECTreference/insert-values.md
Async inserts (server-side batching)async_insert=1, fire-and-forget vs wait-for-ackreference/async-insert.md
Select and parse resultsJSONEachRow reads, JSON with metadata, picking a select formatreference/select-formats.md
Parameterize queriesBinding values, special characters / escaping, "SQL injection?", {name: Type} syntaxreference/query-parameters.md
Sessions & temporary tablessession_id, CREATE TEMPORARY TABLE, per-session SET commandsreference/sessions.md
Modern data typesDynamic, Variant, JSON (object), Time, Time64reference/data-types.md
Custom JSON parse/stringifyPlug in JSONBig / safe-stable-stringify / a BigInt-aware serializerreference/custom-json.md

---

Conventions used in answers

  • Always show import { createClient } from '@clickhouse/client' (Node, never

Web).

  • Always await client.close() at the end of self-contained snippets; in

long-running services, close on graceful shutdown.

  • For inserts, prefer format: 'JSONEachRow' and values: [...] unless the

user's scenario requires otherwise.

  • For selects, prefer await (await client.query({...})).json<RowType>() for

small / medium result sets; for bigger results suggest streaming.

  • When showing parameter binding, use ClickHouse's native {name: Type}

syntax — never $1, ?, or :name.

  • For DDL inside a cluster or behind a load balancer, set

clickhouse_settings: { wait_end_of_query: 1 } on the command() call so the server only acknowledges after the change is applied. See https://clickhouse.com/docs/en/interfaces/http/#response-buffering.

---

Out of scope

This skill covers day-to-day coding against @clickhouse/client (Node). The following topics are intentionally not covered here:

  • **Errors, hangs, type mismatches, proxy pathname surprises, log silence,

socket hang-ups, ECONNRESET** → use the clickhouse-js-node-troubleshooting skill.

  • **Streaming, Parquet, file streams, server-side bulk moves, progress

streaming, async-insert throughput tuning** — see `examples/node/performance/`.

  • TLS, RBAC / read-only users, deeper SQL-injection guidance — see

`examples/node/security/`.

  • **CREATE TABLE patterns, deployment-shaped connection strings,

replication / sharding choices** — see `examples/node/schema-and-deployments/`.

  • Browser, Web Worker, Next.js Edge, Cloudflare Workers — use

@clickhouse/client-web and see `examples/web/`.

---

Still Stuck?

Related skills

How it compares

Pick clickhouse-js-node-coding over generic SQL skills when implementing the official Node ClickHouse client rather than HTTP curl or ORM abstractions.

FAQ

Which ClickHouse JavaScript package does clickhouse-js-node-coding cover?

clickhouse-js-node-coding covers `@clickhouse/client` for Node.js runtimes only, including Next.js Node API routes and Server Actions, and directs browser or Edge code to `@clickhouse/client-web` instead.

How should user input be passed to ClickHouse queries?

clickhouse-js-node-coding requires `query_params` with ClickHouse `{name: Type}` syntax and explicitly warns that template-literal SQL interpolation creates SQL injection risk.

Databasesdatabasesanalytics

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.