# databend-driver

> Databend Driver Node.js Binding

Latest version **0.34.2** (published 2026-07-16) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install databend-driver
pnpm add databend-driver
yarn add databend-driver
bun add databend-driver
```

## Health

**Score 70/100 (B)** — status: active.

Positive: has types; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

## Facts

| | |
|---|---|
| Version | 0.34.2 |
| Published | 2026-07-16 |
| First published | 2024-07-23 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >= 16 |
| Dependencies | 0 |
| Unpacked size | 32.9 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 65 |
| Author | Databend Authors |
| Maintainers | everpcpc |
| Keywords | api, databend, driver |

## Links

- npm: https://www.npmjs.com/package/databend-driver
- Repository: https://github.com/databendlabs/bendsql
- Homepage: https://github.com/databendlabs/bendsql#readme
- Issues: https://github.com/databendlabs/bendsql/issues
- npm.io page: https://npm.io/package/databend-driver

## Recent versions

- 0.34.2 (latest) — 2026-07-16
- 0.34.1 — 2026-07-08
- 0.34.0 — 2026-05-18
- 0.33.7 — 2026-04-07
- 0.33.6 — 2026-03-15
- 0.33.4 — 2026-01-16
- 0.33.3 — 2026-01-16
- 0.33.1 — 2025-12-29
- 0.33.0 — 2025-12-18
- 0.32.0 — 2025-11-24
- 0.31.0 — 2025-11-12
- 0.30.3 — 2025-10-23
- 0.30.2 — 2025-10-20
- 0.30.1 — 2025-10-19
- 0.29.1 — 2025-09-26
- … 38 more at https://npm.io/package/databend-driver/versions

## README

# databend-driver

Databend Node.js Client

[![image](https://img.shields.io/npm/v/databend-driver.svg)](https://www.npmjs.com/package/databend-driver)
![License](https://img.shields.io/npm/l/databend-driver.svg)
[![image](https://img.shields.io/npm/types/databend-driver.svg)](https://www.npmjs.com/package/databend-driver)

## Usage

```javascript
const { Client } = require("databend-driver");

const client = new Client(
  "databend://root:root@localhost:8000/?sslmode=disable",
);
const conn = await client.getConn();

await conn.exec(`CREATE TABLE test (
	i64 Int64,
	u64 UInt64,
	f64 Float64,
	s   String,
	s2  String,
	d   Date,
	t   DateTime
);`);

// get rows of value array
const rows = await conn.queryIter("SELECT * FROM test");
let row = await rows.next();
while (row) {
  console.log(row.values());
  row = await rows.next();
}

// get rows of map
const rows = await conn.queryIter("SELECT * FROM test");
let row = await rows.next();
while (row) {
  console.log(row.data());
  row = await rows.next();
}

// iter rows
const rows = await conn.queryIter("SELECT * FROM test");
for await (const row of rows) {
  console.log(row.values());
}

// pipe rows
import { Transform } from "node:stream";
import { finished, pipeline } from "node:stream/promises";

const rows = await conn.queryIter("SELECT * FROM test");
const stream = rows.stream();
const transformer = new Transform({
  readableObjectMode: true,
  writableObjectMode: true,
  transform(row, _, callback) {
    console.log(row.data());
  },
});
await pipeline(stream, transformer);
await finished(stream);

await conn.close();
```

## Type Mapping

[Databend Types](https://docs.databend.com/sql/sql-reference/data-types/)

### General Data Types

| Databend       | Node.js   |
| -------------- | --------- |
| `BOOLEAN`      | `Boolean` |
| `TINYINT`      | `Number`  |
| `SMALLINT`     | `Number`  |
| `INT`          | `Number`  |
| `BIGINT`       | `BigInt`  |
| `FLOAT`        | `Number`  |
| `DOUBLE`       | `Number`  |
| `DECIMAL`      | `String`  |
| `DATE`         | `Date`    |
| `TIMESTAMP`    | `Date`    |
| `TIMESTAMP_TZ` | `Date`    |
| `VARCHAR`      | `String`  |
| `BINARY`       | `Buffer`  |

### Semi-Structured Data Types

| Databend    | Node.js           |
| ----------- | ----------------- |
| `ARRAY`     | `Array`           |
| `TUPLE`     | `Array`           |
| `MAP`       | `Object`          |
| `VARIANT`   | `String / Object` |
| `BITMAP`    | `String`          |
| `GEOMETRY`  | `String / Buffer` |
| `GEOGRAPHY` | `String / Buffer` |

Note: `VARIANT` is a json encoded string. Example:

```sql
CREATE TABLE example (
    data VARIANT
);
INSERT INTO example VALUES ('{"a": 1, "b": "hello"}');
```

```javascript
const row = await conn.queryRow("SELECT * FROM example limit 1;");
const data = row.values()[0];
const value = JSON.parse(data);
console.log(value);
```

`GEOMETRY` and `GEOGRAPHY` follow the current `geometry_output_format` setting. Text formats such as `GeoJSON` or `WKT` return `String`; binary formats such as `WKB` or `EWKB` return `Buffer`.

For example:

```javascript
const row = await conn.queryRow(
  "settings(geometry_output_format='WKB') SELECT st_point(60, 37)",
);
console.log(Buffer.isBuffer(row.values()[0]));
```

We also provide a helper function to convert `VARIANT` to `Object`:

```javascript
const row = await conn.queryRow("SELECT * FROM example limit 1;");
row.setOpts({ variantAsObject: true });
console.log(row.data());
```

Parameter binding

```javascript
const row = await this.conn.queryRow(
  "SELECT $1, $2, $3, $4",
  (params = [3, false, 4, "55"]),
);
const row = await this.conn.queryRow(
  "SELECT :a, :b, :c, :d",
  (params = { a: 3, b: false, c: 4, d: "55" }),
);
const row = await this.conn.queryRow("SELECT ?, ?, ?, ?", [3, false, 4, "55"]);
```

## Development

```shell
cd bindings/nodejs
pnpm install
pnpm run build:debug
pnpm run test
```

---
_Source: https://npm.io/package/databend-driver · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
