Sign inSign up

gizmodata/gizmosql

By gizmodata

β€’Updated 7 days ago

GizmoSQL - an Arrow Flight SQL Server with DuckDB and SQLite back-ends

Image
Databases & storage
2

100K+

gizmodata/gizmosql repository overview

β πŸš€ GizmoSQL β€” High-Performance SQL Server for the Cloud

DockerHub DockerHub LTS LTS Channel GitHub Container Documentation GitHub JDBC Driver ADBC PyPI SQLAlchemy Dialect Ibis Backend App Store


⁠🌟 What is GizmoSQL?

GizmoSQL is a lightweight, high-performance SQL server built on:

Originally forked from sqlflite⁠ β€” and now enhanced into a more extensible, production-ready platform under the Apache 2.0 license.


β πŸ“¦ Editions

GizmoSQL is available in two editions:

FeatureCoreEnterprise
DuckDB & SQLite backendsβœ…βœ…
Arrow Flight SQL protocolβœ…βœ…
TLS & mTLS authenticationβœ…βœ…
JWT token authenticationβœ…βœ…
Query timeoutβœ…βœ…
Session InstrumentationβŒβœ…
Kill SessionβŒβœ…
Per-Catalog PermissionsβŒβœ…
SSO/OIDC Authentication (JWKS)βŒβœ…
Authorized Email FilteringβŒβœ…
Statement QueuingβŒβœ…

GizmoSQL Core is free and open source under the Apache 2.0 license.

GizmoSQL Enterprise requires a commercial license. Contact [email protected]⁠ for licensing information.

For more details, see the Editions documentation⁠.


⁠🧠 Why GizmoSQL?

  • πŸ›°οΈ Deploy Anywhere β€” Run as a container, native binary, or in Kubernetes
  • πŸ“¦ Columnar Fast β€” Leverages Arrow columnar format for high-speed transfers
  • βš™οΈ Dual Backends β€” Switch between DuckDB and SQLite at runtime
  • πŸ” Built-in TLS + Auth β€” Password-based login + signed JWT tokens
  • πŸ“ˆ Super Cheap Analytics β€” TPC-H SF 1000 in 161s for ~$0.17 on Azure
  • πŸ§ͺ CLI, Python, JDBC, SQLAlchemy, Ibis, WebSocket β€” Pick your interface

β πŸ“¦ Component Versions

β πŸ“š Documentation

For detailed instructions and configuration information, see our full documentation:

GizmoSQL Documentation⁠


β πŸš€ Quick Start

Default credentials: The server's default username is gizmosql_user (override with --username or GIZMOSQL_USERNAME). A password is always required via --password or GIZMOSQL_PASSWORD.

⁠Option 1: Run from Docker
# Username defaults to "gizmosql_user" when GIZMOSQL_USERNAME is not set
docker run --name gizmosql \
           --detach \
           --rm \
           --tty \
           --init \
           --publish 31337:31337 \
           --env TLS_ENABLED="1" \
           --env GIZMOSQL_PASSWORD="gizmosql_password" \
           --env PRINT_QUERIES="1" \
           --pull always \
           gizmodata/gizmosql:latest
⁠Option 2: Mount Your Own DuckDB database file
duckdb ./tpch_sf1.duckdb << EOF
INSTALL tpch; LOAD tpch; CALL dbgen(sf=1);
EOF

docker run --name gizmosql \
           --detach \
           --rm \
           --tty \
           --init \
           --publish 31337:31337 \
           --env TLS_ENABLED="1" \
           --env GIZMOSQL_PASSWORD="gizmosql_password" \
           --pull always \
           --mount type=bind,source=$(pwd),target=/opt/gizmosql/data \
           --env DATABASE_FILENAME="data/tpch_sf1.duckdb" \
           gizmodata/gizmosql:latest
⁠Option 3: Install via Homebrew (macOS & Linux)
brew tap gizmodata/tap
brew install gizmosql

Supported platforms:

  • macOS (Apple Silicon / ARM64)
  • Linux (x86-64 / AMD64)
  • Linux (ARM64)

Then run the server (username defaults to gizmosql_user):

GIZMOSQL_PASSWORD="gizmosql_password" gizmosql_server --database-filename your.duckdb --print-queries
⁠Option 4: Windows Installer (MSI)

Download the latest MSI installer from the GitHub Releases⁠ page β€” GizmoSQL-amd64.msi for x64 machines, or GizmoSQL-arm64.msi for Windows on Arm (e.g. Snapdragon X-class devices). The installer adds gizmosql_server.exe and gizmosql_client.exe to C:\Program Files\GizmoSQL and updates the system PATH.

Then run the server from PowerShell or Command Prompt:

$env:GIZMOSQL_PASSWORD="gizmosql_password"
gizmosql_server --database-filename your.duckdb --print-queries
⁠Option 5: iOS App (iPhone & iPad) πŸ“±

GizmoSQL is available as a native iOS app on the Apple App Store β€” run a full GizmoSQL server right on your iPhone or iPad.

Download GizmoSQL on the App Store

The iOS edition bundles the DuckDB engine and the Arrow Flight SQL server, so any GizmoSQL client (JDBC, ADBC, CLI, UI, etc.) can connect to it over your local network.

Important

**The iOS app is intended for development, learning, demos, and local prototyping β€” not production workloads.** iOS enforces aggressive background execution limits, memory caps, and network/thermal throttling that make a phone or tablet unsuitable for hosting production SQL traffic. For production, run GizmoSQL via Docker, Kubernetes, Homebrew, or the native Linux/macOS/Windows binaries.

⁠🧰 Clients and Tools

β πŸ”— JDBC

Use with DBeaver or other JDBC clients:

jdbc:gizmosql://localhost:31337?useEncryption=true&user=gizmosql_user&password=gizmosql_password&disableCertificateVerification=true

More info: Setup guide⁠


⁠🐍 Python (ADBC)

Prerequisite: Python 3.10+ and the GizmoSQL ADBC driver⁠:

pip install adbc-driver-gizmosql

The driver also supports OAuth/SSO authentication for GizmoSQL Enterprise users.

from adbc_driver_gizmosql import dbapi as gizmosql

with gizmosql.connect(
    "grpc+tls://localhost:31337",
    username="gizmosql_user",
    password="gizmosql_password",
    tls_skip_verify=True,  # Not needed if you use a trusted CA-signed TLS cert
) as conn:
    with conn.cursor() as cur:
        cur.execute(
            "SELECT n_nationkey, n_name FROM nation WHERE n_nationkey = ?",
            parameters=[24],
        )
        x = cur.fetch_arrow_table()

β πŸ”‘ Token authentication

See: https://github.com/gizmodata/generate-gizmosql-token⁠ for an example of how to generate a token and use it with GizmoSQL.

β πŸ’» CLI Client

GizmoSQL ships with an interactive SQL shell inspired by psql and the DuckDB CLI:

# Interactive session
GIZMOSQL_PASSWORD="gizmosql_password" gizmosql_client --host localhost --username gizmosql_user --tls --tls-skip-verify

Run a single query with --command:

GIZMOSQL_PASSWORD="gizmosql_password" gizmosql_client \
  --host localhost --username gizmosql_user --tls --tls-skip-verify \
  --command "SELECT version()"

Pipe SQL from a heredoc:

GIZMOSQL_PASSWORD="gizmosql_password" gizmosql_client \
  --host localhost --username gizmosql_user --tls --tls-skip-verify --quiet <<'EOF'
SELECT n_nationkey, n_name
FROM nation
WHERE n_nationkey = 24;
EOF

More info: Client Shell documentation⁠


β πŸ—οΈ Build from Source (Optional)

git clone https://github.com/gizmodata/gizmosql --recurse-submodules
cd gizmosql
cmake -S . -B build -G Ninja -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build build --target install

Then run:

GIZMOSQL_PASSWORD="..." gizmosql_server --database-filename ./data/your.db --print-queries

⁠πŸ§ͺ Advanced Features

  • βœ… DuckDB + SQLite backend support
  • βœ… TLS & optional mTLS
  • βœ… JWT-based auth (automatically issued, signed server-side)
  • βœ… Server initialization via INIT_SQL_COMMANDS or INIT_SQL_COMMANDS_FILE
  • βœ… Slim Docker image for minimal runtime

β πŸ›  Backend Selection

# DuckDB (default)
gizmosql_server -B duckdb --database-filename data/foo.duckdb

# SQLite
gizmosql_server -B sqlite --database-filename data/foo.sqlite

Tip

You can now use the: `--query-timeout` argument to set a maximum query timeout in seconds for the server. Queries running longer than the timeout will be killed. The default value of: `0` means "unlimited". Example: `gizmosql_server (other args...) --query-timeout 10` will set a timeout of 10 seconds for all queries.

Tip

The health check query can be customized using `--health-check-query` or the `GIZMOSQL_HEALTH_CHECK_QUERY` environment variable. The default is `SELECT 1`. This is useful when you need a more specific health check for your deployment. Example: `gizmosql_server (other args...) --health-check-query "SELECT 1 FROM my_table LIMIT 1"`

⁠🧩 Extensions & Integrations


β πŸ“Š Performance

πŸ’‘ On Azure VM Standard_E64pds_v6 (~$3.74/hr):

  • TPC-H SF 1000 benchmark:
    ⏱️ 161.4 seconds
    πŸ’° ~$0.17 USD total

🏁 Speed for the win. Performance for pennies.


β πŸ”’ License

GizmoSQL Core is licensed under the Apache License, Version 2.0⁠.

Enterprise features (in src/enterprise/) are proprietary and require a commercial license from GizmoData LLC. See src/enterprise/LICENSE⁠ for details.


β πŸ“« Contact

Questions or consulting needs?

πŸ“§ [email protected]⁠
🌐 https://gizmodata.com⁠


Built with ❀️ by GizmoDataℒ⁠

Tag summary

Content type

Image

Digest

sha256:aa11705e3…

Size

616.3 MB

Last updated

7 days ago

docker pull gizmodata/gizmosql