10 open-source integrations

    Hardcharger™ Integrations

    Drivers for Python, Go, Java and JavaScript, a command-line client and a web UI, an MCP server for Claude, dbt, PySpark-style DataFrames and replication from other databases. Every one speaks Warp SQL, so results arrive as Apache Arrow, and every one is Apache-2.0.

    01Drivers

    Python, Go and ADBC driver

    adbc-driver-hardcharger: query Hardcharger from Python, Go, C/C++, R, Rust or any ADBC language.

    A native Go driver, built on the Warp SQL ADBC driver and compiled to one shared library that every ADBC language loads. Python gets a DB-API 2.0 interface with Arrow results; Go programs import it directly; C/C++, R and Rust load it through an ADBC driver manager as driver = "hardcharger".

    On top of Warp SQL it adds what is particular to Hardcharger: hardcharger:// URIs, query and session tags, hardcharger.* settings, browser sign-in (SSO) and client-certificate sign-in. Large results are read over several connections at once and bulk ingests are sent in parallel parts by default.

    What it provides

    • hardcharger:// URIs, port 31337 by default, TLS by default (?tls=false for plain HTTP)
    • Bind parameters and Arrow results end to end
    • Bulk ingest (adbc_ingest) in parallel parts, all or nothing
    • Password, token, browser sign-in (auth_type="external") and mTLS
    • Partitioned reads and lz4/zstd chosen from the link’s round trip
    • Go package github.com/gizmodata/hardcharger-adbc/go/v2/hardcharger
    Install
    pip install adbc-driver-hardcharger
    # Go
    go get github.com/gizmodata/hardcharger-adbc/go/v2
    Query
    1from adbc_driver_hardcharger import dbapi as hardcharger
    2
    3with hardcharger.connect(uri="hardcharger://localhost?tls=false", username="hardcharger", password="change-me") as conn:
    4    with conn.cursor() as cur:
    5        cur.execute(operation="SELECT 42 AS answer, ? AS greeting", parameters=["hello"])
    6        print(cur.fetch_arrow_table())

    Python 3.11 or later. pip install "hardcharger[adbc]" also installs the Python server package.

    02Drivers

    JDBC driver

    hardcharger-jdbc: Hardcharger for Java applications, DBeaver and other JDBC tools, in one jar.

    A single standalone jar for Java 17 and later, with no gRPC, Netty or protobuf inside: jdbc:hardcharger://host[:port] URLs on the Warp SQL JDBC driver. It names itself “Hardcharger JDBC Driver” to the tools that show it, and DatabaseMetaData reports the server as Hardcharger.

    What it provides

    • jdbc:hardcharger:// URLs, port 31337 by default
    • TLS by default (useEncryption=false for plain HTTP)
    • Partitioned reads (resultPartitions, 8 by default)
    • Password, token and mTLS sign-in
    • Driver class com.gizmodata.hardcharger.jdbc.HardchargerDriver
    Maven coordinates
    <dependency>
      <groupId>com.gizmodata</groupId>
      <artifactId>hardcharger-jdbc</artifactId>
      <version><!-- the release version --></version>
    </dependency>
    Query
    Properties properties = new Properties();
    properties.setProperty("user", "hardcharger");
    properties.setProperty("password", "change-me");
    properties.setProperty("useEncryption", "false"); // plain HTTP on localhost
    try (Connection connection = DriverManager.getConnection("jdbc:hardcharger://localhost", properties);
         ResultSet rows = connection.createStatement().executeQuery("SELECT 42 AS answer")) {
      rows.next();
      System.out.println(rows.getInt("answer"));
    }

    Java 17 or later. Bulk ingest has no JDBC API; use the ADBC driver for loads.

    03Drivers

    JavaScript and TypeScript client

    @gizmodata/hardcharger: hardcharger:// URLs in, Arrow out, in Node, browsers, Deno, Bun and Cloudflare Workers.

    A thin layer on @gizmodata/warp-sql, the generic JavaScript client for any Warp SQL server, which it re-exports. Plain fetch and Apache Arrow JS, no native code and no gRPC, so the same code runs on a server, in a browser page (allow its origin with --cors-origins) or at the edge.

    What it provides

    • Arrow JS Tables, or record-batch streams for large results
    • Bind parameters, transactions and bulk ingest
    • Split results over several connections (8 in Node, 4 in browsers)
    • Cancellation with an AbortSignal
    • Password, token and mTLS sign-in
    Install
    npm install @gizmodata/hardcharger apache-arrow
    Query
    import { connect } from "@gizmodata/hardcharger";
    
    const conn = await connect({ url: "hardcharger://localhost?tls=false", username: "hardcharger", password: "change-me" });
    const table = await conn.query("SELECT 42 AS answer, ? AS greeting", ["hello"]);
    console.log(table.toArray().map((row) => row.toJSON()));
    await conn.close();

    Node 22.19 or later; apache-arrow is a peer dependency.

    04Tools

    hardcharger command-line client

    An interactive SQL shell and a scripting tool, shipped with every server.

    hardcharger ships beside hardcharger-server in every tarball, MSI and container image. Run it with no statement for an interactive shell with history, tab completion, syntax highlighting and a pager, or pass one statement, a file or a heredoc for scripts: the exit status is 1 when a statement fails.

    What it provides

    • Output as tables, CSV, JSON or Markdown
    • Ctrl-C cancels the running statement and keeps the shell
    • Large results read over up to 8 connections, in order
    • Browser sign-in (--auth-type external) and client certificates
    • hardcharger:// URIs with the Python driver’s rules
    Comes with the server
    curl https://install.hardcharger.gizmodata.com | sh
    Run a statement
    export HARDCHARGER_PASSWORD='change-me'
    hardcharger --host localhost --tls=false --username hardcharger --csv \
      --command "SELECT 42 AS answer"
    05Tools

    Web UI

    A SQL editor, results grid, schema browser and file upload, built into the server.

    Start the server with --web-ui and open /ui on its own port and certificate. Each editor tab is its own session; the schema browser and autocomplete show each user only what their roles allow; Upload data loads CSV, TSV, Excel, Parquet, JSON or Arrow files into a table; and the API page shows the server’s Warp SQL API in Swagger UI.

    What it provides

    • Up to 20 editor tabs, scripts with a result tab per result set
    • Results grid for up to a million rows, copy to Excel or Google Sheets
    • Upload data with a preview and editable column types
    • Downloads as CSV, TSV, JSON, Excel, Parquet or Arrow
    • SSO and certificate sign-in
    Turn it on
    HARDCHARGER_ADMIN_PASSWORD='change-me' hardcharger-server --web-ui --database demo.duckdb
    # open http://localhost:31337/ui
    06AI & Agents

    Hardcharger™ MCP server

    Explore and query Hardcharger from Claude Desktop, Claude Code and any MCP client.

    A Model Context Protocol server and Claude Desktop extension, the Hardcharger port of the GizmoSQL MCP server. Claude lists catalogs, schemas and tables, describes columns, explains plans and runs read-only SQL against a Hardcharger server you can reach, and it can serve a team over Streamable HTTP behind OAuth.

    What it provides

    • Read-only by default; writes only when you allow them
    • Password, token, mTLS and browser sign-in
    • Several connections, switchable in one chat
    • A remote connector over Streamable HTTP with OAuth 2.1
    • Pure JavaScript, built on @gizmodata/hardcharger
    Claude Code
    claude mcp add hardcharger \
      -e HARDCHARGER_URI='hardcharger://localhost?tls=false' \
      -e HARDCHARGER_USERNAME=hardcharger \
      -e HARDCHARGER_PASSWORD=change-me \
      -- npx -y @gizmodata/hardcharger-mcp

    Node 22.19 or later for npx. Claude Desktop: install hardcharger-mcp.mcpb from the releases, no Node needed.

    07Transformation

    dbt-hardcharger

    Build your dbt project on Hardcharger: remote DuckDB 2.0, over Warp SQL.

    The dbt adapter for Hardcharger, the port of dbt-gizmosql, passing the same dbt adapter test suite. It connects through adbc-driver-hardcharger, so models run on the server and seeds load through DuckDB’s own CSV reader.

    What it provides

    • Every materialization, including incremental (append, delete+insert, merge, microbatch) and snapshots
    • Python models, run locally in DuckDB and bulk-loaded
    • External files written by the server
    • DuckLake catalogs, enforced constraints, persist_docs
    • Password, token, mTLS and browser sign-in
    Install
    pip install dbt-hardcharger
    profiles.yml
    shop:
      target: dev
      outputs:
        dev:
          type: hardcharger
          host: localhost
          port: 31337
          user: hardcharger
          password: "{{ env_var('HARDCHARGER_PASSWORD') }}"
          tls: false        # a local server without TLS
          database: demo
          schema: main
          threads: 4

    dbt-core 1.12, Python 3.11 or later. The grants config is not applied yet; use GRANT in a post-hook.

    08DataFrames

    SQLFrame for Hardcharger

    Run your PySpark DataFrame code on Hardcharger, with no Spark cluster.

    The Hardcharger backend for SQLFrame: PySpark-style transformations become DuckDB SQL that runs on the server, so Spark and Databricks jobs move over by swapping the session builder. activate() lets unchanged pyspark imports run on Hardcharger.

    What it provides

    • The PySpark DataFrame API, plus activate() for unchanged imports
    • session.ingest() bulk loading
    • Client-local spark.read.json / csv / parquet
    • Every sign-in method
    • OpenTelemetry traces
    Install
    pip install sqlframe-hardcharger
    A session
    1from sqlframe_hardcharger import HardchargerSession, functions as F
    2
    3spark = HardchargerSession.builder.config(map={
    4    "hardcharger.uri": "hardcharger://localhost?tls=false",
    5    "hardcharger.username": "hardcharger",
    6    "hardcharger.password": "change-me",
    7}).getOrCreate()
    8
    9spark.table("nation").groupBy("n_regionkey").agg(F.count("*").alias("nations")).show()

    Python 3.11 or later. Python UDFs can’t run on the server.

    09Data Loading

    adbc-replicate-hardcharger

    Copy whole schemas from Oracle, PostgreSQL, Snowflake, DuckDB or another Hardcharger, on a schedule.

    Config-driven ADBC-to-ADBC replication into Hardcharger. List the schemas, tables and views to copy in a YAML file; it streams them as Arrow, masks columns inside the source, reads every table at the same instant, copies only what changed on later runs and translates views to DuckDB SQL. Run it from the command line, the container image or a Helm CronJob.

    What it provides

    • Masks evaluated inside the source: raw values never leave it
    • Consistent snapshots and change detection by fingerprint
    • Views translated with sqlglot
    • Parallel, atomic per-table swaps and a run log in the target
    • Container image and Helm chart
    Install
    pip install "adbc-replicate-hardcharger[all]"   # or [oracle], [postgresql], [snowflake], [duckdb]
    replicate.yaml
    version: 1
    name: shop-to-hardcharger
    
    source:
      type: duckdb
      path: ./shop.duckdb
    
    target:
      type: hardcharger
      uri: hardcharger://localhost?tls=false
      username: hardcharger
      password: ${HARDCHARGER_PASSWORD}
    
    objects:
      - db_schemas: [sales]
    
    columns:
      - tables: [sales.customers]
        mask:
          ssn: hash
    
    parallelism: 2

    Run it with adbc-replicate-hardcharger run --config replicate.yaml (also plan, validate and test-connection). Python 3.11 or later.

    10SQL Clients

    DBeaver

    Browse and query Hardcharger in DBeaver through the JDBC driver.

    Add the Hardcharger JDBC jar in DBeaver’s Driver Manager and connect with jdbc:hardcharger:// URLs. Built-in Hardcharger support in DBeaver is coming; until then the manual setup takes a minute.

    What it provides

    • Driver class com.gizmodata.hardcharger.jdbc.HardchargerDriver
    • URL template jdbc:hardcharger://{host}[:{port}][/{database}]
    • Default port 31337
    • useEncryption=false for a local server without TLS

    Other JDBC tools take the same jar, driver class and URL.

    Which Hardcharger driver should I start with?

    For Python, Go, R, Rust or C/C++, use the ADBC driver (pip install adbc-driver-hardcharger). For Java and JDBC tools such as DBeaver, use hardcharger-jdbc. For Node, browsers, Deno, Bun and Cloudflare Workers, use @gizmodata/hardcharger. For a shell, use the hardcharger client that ships with the server.

    Do GizmoSQL drivers work with Hardcharger?

    No. GizmoSQL speaks Arrow Flight SQL over gRPC; Hardcharger speaks Warp SQL over HTTP. The main ones have Hardcharger counterparts: adbc-driver-gizmosql → adbc-driver-hardcharger, the GizmoSQL JDBC driver → hardcharger-jdbc, dbt-gizmosql → dbt-hardcharger, the GizmoSQL MCP server → hardcharger-mcp, SQLFrame’s GizmoSQL backend → sqlframe-hardcharger and adbc-replicate → adbc-replicate-hardcharger. The migration guide on docs.hardcharger.gizmodata.com(opens in a new tab) covers the move.

    Can I call Hardcharger without a driver?

    Yes. Warp SQL is plain HTTP: get a token, open a session and post a statement with curl or any HTTP library, and ask for Accept: application/vnd.apache.arrow.stream to get the rows as an Arrow IPC stream. Every server serves its OpenAPI 3.1 description at /warp/v1/openapi.json.

    Which integrations support SSO?

    The ADBC driver (and so dbt-hardcharger and SQLFrame), the MCP server, the hardcharger command-line client and the web UI can sign in through the server’s browser sign-in with your OpenID Connect provider. The JDBC driver signs in with a password, a token or a client certificate.

    Are the integrations open source?

    Yes. Every driver and integration on this page is published by GizmoData under the Apache-2.0 license.

    Missing an integration?

    Anything that speaks HTTP can talk to Hardcharger, and anything that speaks ADBC or JDBC can use its drivers. If your tool is not listed, tell us and we will build or document it.

    Schedule a demo!powered by Calendly