Hoquiam
Products / Devices & developers

Hoq DB

SQLite databases over HTTP, libSQL and Redis, with 30 days of history.

Open Hoq DBLive16 featuresdb.hoq.app

What it does

Hoq DB holds SQLite databases and runs your SQL against them over HTTPS. You send a statement or a batch; a batch is one transaction that commits or rolls back as a whole. The libSQL clients (@libsql/client, Drizzle, and the Python, Go and Rust libsql clients) connect without changes, and any Redis client can reach the same database on port 6380 over TLS.

A write is answered once two servers have it on disk. Every committed change is also written to an append-only log in Cloudflare R2, each segment written create-only, so two servers can never both claim the same position. The local file is a cache rebuilt from that log on every open. A quiet database is also copied into your Hoq Storage drive as Databases/<name>.db.

Keys can be read-only or limited to named tables, and SQLite's own authorizer enforces both. Agents connect through an MCP endpoint at /mcp. You can fork any database as it was at any change or moment in the last 30 days.

In numbers

~6 msto acknowledge a write once two servers hold it
30 daysof history you can fork a database from
0.2 sto hand the service to the second server during a deploy, with no refused requests
7MCP tools for agents, with reads kept read-only even on a writing key

Specifications

ProtocolsJSON over HTTPS, libSQL (Hrana over HTTP), Redis RESP2 over TLS on port 6380, and MCP (streamable HTTP).
When a write is acknowledgedBy default, once a second server has fsynced it. Per database you can choose to be answered only after the change is stored in the R2 log, or at once.
Where data livesAn append-only log of whole-page segments and periodic full copies in Cloudflare R2. A quiet database is also copied to your Hoq Storage drive as Databases/<name>.db.
Ordering guaranteeLog segment n is written create-only (If-None-Match). The first writer owns it, so a replaced server refuses writes instead of forking the history.
FailoverTwo servers, one active by a lease held in the bucket. A planned handover takes about 0.2 s and refuses no requests; if the active server dies, the standby takes over after 20 s without a lease renewal.
HistoryFork a database as it was at any log position or moment within the retention window (30 days by default).
Access controlKeys are read-only or read-write, reach chosen databases, and can be limited to named tables. SQLite's authorizer refuses everything else, including ATTACH and load_extension.
Per-request limits5 s per statement, 100 statements per batch, 999 parameters, 10,000 rows or 8 MiB per response, 4 MiB per value.
Extensions built inFTS5 full-text search, R*Tree, and sqlite-vec vector search (vec0 tables, cosine and L2 distance).
Change feedCommitted inserts, updates and deletes on chosen tables, followed by long-poll, Server-Sent Events or MCP. Rolled-back work never appears.

Features

16 features, all shipped. Listed from the product's code and documentation; each row shows the day it was last checked.

Querying 5
Query and batchRun one statement or an all-or-nothing batch, with positional or named parameters.
libSQL clientsPoint @libsql/client or Drizzle at https://db.hoq.app/db/<key>/ and they work unchanged.
Redis protocolStrings, counters, expiry, hashes, lists, sets, sorted sets, MULTI/EXEC and pub/sub, stored in tables of the same SQLite file.
Full-text searchFTS5 tables with snippets and bm25 ranking.
Vector searchsqlite-vec is compiled in: store embeddings in vec0 tables and search by distance in SQL.
Durability and history 5
Second copyA write is answered once a second server has it on disk, and the bucket upload follows.
Upload gapChoose how often a database uploads to the bucket, from 1 s to 300 s, trading storage write cost against latency.
Fork in timeMake a new database from any earlier log position or moment.
Drive copyA quiet database's newest full copy is saved into your Hoq Storage drive as Databases/<name>.db.
FailoverTwo servers share one address; the standby forwards requests and takes over when the active one stops renewing its lease.
Access 3
Database keysKeys that reach chosen databases, read-only or read-write, optionally limited to named tables.
MCP for agentsList databases, read schema, query, execute, batch, follow changes and create databases from an MCP client.
Change feedFollow committed changes to chosen tables by long-poll or Server-Sent Events, resuming from the last id.
Console 3
Table browser and query editorBrowse tables, run queries and read the schema in the browser, signed in with Hoq ID.
Keys and snippetsMake keys with table limits and copy ready-made connection snippets.
DownloadDownload the whole database as a SQLite file.

Works with

  • Hoq StorageA quiet database's newest full copy lands in your drive as Databases/<name>.db.
  • Hoq AgentsAgents read and write tables through the MCP endpoint with a key you limit to chosen tables.
  • GrimasteYour agent connects to /mcp with its own key, read-only or table-limited.

Your data

Where it is keptAn append-only change log and full copies in Cloudflare R2, a second copy on a second server until the log has each change, and a copy in your own Hoq Storage drive.
Getting it outGET /v1/db/{db}/export returns the whole database as a standard SQLite file (up to 512 MB); the console has a Download button.
If you leavenot published

APIs and standards

  • JSON API: POST /v1/db/{db}/query and /v1/db/{db}/batch with a Bearer key
  • libSQL (Hrana over HTTP): https://db.hoq.app/db/<key>/
  • Redis RESP2 over TLS: rediss://<database>:<key>@db.hoq.app:6380
  • MCP server: https://db.hoq.app/mcp, 7 tools
  • Change feed: long-poll and Server-Sent Events
  • Web console at db.hoq.app
  • Standard: SQLite
  • Standard: libSQL Hrana
  • Standard: Redis RESP2
  • Standard: Model Context Protocol
  • Standard: Server-Sent Events

Compared

Checked 2026-11-01Hoq DBCloudflare D1Turso
EngineSQLiteSQLite1libSQL (a SQLite fork)2
Point-in-time history30 days, fork to a new database30 days (Workers Paid), 7 days (Free)31 day (Free) to 90 days (Pro)4
Maximum database size1 GiB (default page limit)10 GB (Workers Paid), 500 MB (Free)3not published4
Maximum query duration5 s per statement30 s3not published4
Bound parameters per query9991003not published4
Vector search in SQLsqlite-vec (vec0) compiled innot published (separate Vectorize product)5Native vector types and search2
ExportWhole SQLite file over the API, up to 512 MBSQL file via wrangler d1 export; databases with virtual tables (including FTS5) cannot be exported6not published4
Free tiernot published10 databases, 5 GB, 5 million rows read and 100,000 written per day7$0: 100 databases, 5 GB, 500 million rows read, 10 million written a month4
  1. https://developers.cloudflare.com/d1/
  2. https://docs.turso.tech/features/ai-and-embeddings
  3. https://developers.cloudflare.com/d1/platform/limits/
  4. https://turso.tech/pricing
  5. https://developers.cloudflare.com/vectorize/
  6. https://developers.cloudflare.com/d1/best-practices/import-export-data/
  7. https://developers.cloudflare.com/d1/platform/pricing/