GizmoSQL is a lightweight, high-performance SQL server built on:
- π¦ DuckDB or ποΈ SQLite for query execution
- π Apache Arrow Flight SQL for fast, modern connectivity
- π Middleware-based auth with optional TLS & JWT
Originally forked from sqlflite β and now enhanced into a more extensible, production-ready platform under the Apache 2.0 license.
GizmoSQL is available in two editions:
| Feature | Core | Enterprise |
|---|---|---|
| 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 | β | β |
GizmoSQL Core is free and open source under the Apache 2.0 license.
GizmoSQL Enterprise requires a commercial license. Contact sales@gizmodata.com for licensing information.
For more details, see the Editions documentation.
- π°οΈ 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 | Version |
|---|---|
| DuckDB | v1.5.2 |
| SQLite | 3.52.0 |
| Apache Arrow (Flight SQL) | 23.0.1 |
| jwt-cpp | v0.7.2 |
| OpenTelemetry C++ | v1.25.0 |
| nlohmann/json | v3.12.0 |
For detailed instructions and configuration information, see our full documentation:
Default credentials: The server's default username is
gizmosql_user(override with--usernameorGIZMOSQL_USERNAME). A password is always required via--passwordorGIZMOSQL_PASSWORD.
# 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:latestduckdb ./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:latestbrew tap gizmodata/tap
brew install gizmosqlSupported 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-queriesDownload the latest MSI installer from the GitHub Releases page. 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-queriesGizmoSQL is available as a native iOS app on the Apple App Store β run a full GizmoSQL server right on your iPhone or iPad.
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.
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
Prerequisite: Python 3.10+ and the GizmoSQL ADBC driver:
pip install adbc-driver-gizmosqlThe 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()See: https://github.com/gizmodata/generate-gizmosql-token for an example of how to generate a token and use it with GizmoSQL.
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-verifyRun 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;
EOFMore info: Client Shell documentation
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 installThen run:
GIZMOSQL_PASSWORD="..." gizmosql_server --database-filename ./data/your.db --print-queries- β DuckDB + SQLite backend support
- β TLS & optional mTLS
- β JWT-based auth (automatically issued, signed server-side)
- β
Server initialization via
INIT_SQL_COMMANDSorINIT_SQL_COMMANDS_FILE - β Slim Docker image for minimal runtime
# DuckDB (default)
gizmosql_server -B duckdb --database-filename data/foo.duckdb
# SQLite
gizmosql_server -B sqlite --database-filename data/foo.sqliteTip
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"
- π» GizmoSQL UI π NEW!
- π SQLAlchemy dialect
- πΏ Apache Superset compatible SQLAlchemy driver
- π Ibis adapter
- π Flight SQL over WebSocket Proxy
- π Metabase driver
- βοΈ dbt Adapter
- π₯ SQLMesh Adapter π NEW!
- β¨ PySpark SQLFrame adapter π NEW!
- πͺ© ADBC Scanner by Query.Farm π NEW!
- βοΈ Kubernetes Operator π NEW!
- πΊ GizmoSQLLine JDBC CLI Client NEW!
- π₯ Grafana Plugin NEW!
- πΈοΈ JavaScript/TypeScript Client NEW!
- βοΈ JDBC Driver NEW!
- π Python ADBC Driver (with OAuth/SSO) NEW!
- π ODBC Driver NEW!
- π Power BI Connector NEW!
π‘ 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.
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.
Questions or consulting needs?
π§ info@gizmodata.com
π https://gizmodata.com
Built with β€οΈ by GizmoDataβ’
