{ }
Resource profile / ClickHouse Node.js Client Coding
About this skill

Workflow & requirements

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:
  6. client.insert() — write rows.
  7. client.query() + resultSet.json() / .text() / .stream() — read rows that return data.
  8. client.command() — DDL and other statements that don't return rows (CREATE, DROP, TRUNCATE, ALTER, SET in a session, etc.).
  9. client.exec() — when you need the raw response stream of an arbitrary statement (rare in coding scenarios).
  10. client.ping() — health check; returns { success, error? }, never throws on connection failure.
  11. Note version constraints when relevant. Examples:
  12. pathname config option: client >= 1.0.0.
  13. BigInt values in query_params: client >= 1.15.0.
  14. TupleParam and JS Map in query_params: client >= 1.9.0.
  15. Configurable json.parse / json.stringify: client >= 1.14.0.
  16. Time / Time64 data types: ClickHouse server >= 25.6.
  17. QBit data type: ClickHouse server >= 25.10 (moved to Beta in 26.1; check the deployed release).
  18. Dynamic / Variant / new JSON types: ClickHouse server >= 24.5 / 24.1 / 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 reference/insert-formats.md
Insert into a subset of columns / different database insert({ columns }), excluding columns, ephemeral columns, cross-DB inserts reference/insert-columns.md
Insert values, expressions, dates, decimals INSERT … VALUES with SQL functions, Date/DateTime from JS, Decimal precision, INSERT … SELECT; inserting a UUID into a UInt128 column is tricky — use when the user is writing code that stores a UUID as UInt128 reference/insert-values.md
Async inserts (server-side batching) async_insert=1, fire-and-forget vs wait-for-ack reference/async-insert.md
Select and parse results JSONEachRow reads, JSON with metadata, picking a select format reference/select-formats.md
Parameterize queries Binding values, special characters / escaping, "SQL injection?", {name: Type} syntax reference/query-parameters.md
Sessions & temporary tables session_id, CREATE TEMPORARY TABLE, per-session SET commands reference/sessions.md
Modern data types Dynamic, Variant, JSON (object), Time, Time64, QBit (vector search) reference/data-types.md
Custom JSON parse/stringify Plug in JSONBig / safe-stable-stringify / a BigInt-aware serializer reference/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 to buffer the HTTP response and improve late-error reporting. This is not a cluster-wide atomicity, replication or asynchronous-mutation completion guarantee. 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?

PACKAGE TRANSPARENCY

Inspect before installing

Source: ClickHouse · Apache-2.0 · SHA-256 shown alongside the download.

24 files64804 ZIP bytes0 script/code files

License file included. A license and checksum are not a security certification. Review package instructions and scripts before running them.

View files and uncompressed sizes

An adaptation record is bundled. Inspect the declared changes and archived original before use. Review adaptation and original-file hashes →

Machine-readable installation guide →
CATALOG REVIEW NOTES

Know what you need before installing

Source and packaging checks recorded on 2026-10-03. These notes are not safety certification or measured task performance.

Requirements

A supported Node.js runtime, @clickhouse/client and an authorized ClickHouse HTTP(S) connection. Full codec object guidance needs client >=1.22.0; zstd needs Node >=22.15.0. Check exact server features and optional parsers. Browser/Edge clients are separate.

Costs, access & practical limits

Apache-2.0 material; separate hosting, tooling, model access and services may have costs. Full skill/agent runtime evaluation has not been performed. Selected version, FORMAT and bounded-scope corrections are marked; originals retained. DDL examples can replace tables. Setting wait_end_of_query is response buffering, not cluster atomicity. QBit moved to Beta in 26.1, not blanket GA. BigInt parsing must feature-check source text. UUID-to-UInt128 byte-layout and full type/version behavior need isolated validation. No client library or database bundled.

View the recorded checks
  • Pinned original bytes verified against Git blob hashes
  • Complete Apache-2.0 license and publisher NOTICE retained
  • Core identity and local references validated
  • Selected Node client configuration and version boundaries reviewed; limitations disclosed

Upstream commit: 356a8c1b9a7392adb389a132f5ad3fec38532a03

Runtime status: not tested by this catalog. Configure your client and test the skill in your own environment.

SCENARIOS

Inputs, criteria and recorded outcomes

Records are supplied by the site administrator and bound to a specific package. They are not third-party safety certification. This page does not execute skills.

No published scenario records yet. Resource availability and download counts do not imply measured task performance.

Community reviews

★ New

Be the first to share your experience.

Sign in to leave a review →

More to explore

View all ↗