proofrock
ws4sqlite
Go

Query sqlite via json+http

Last updated Jul 6, 2026
556
Stars
16
Forks
6
Issues
0
Stars/day
Attention Score
58
Language breakdown
No language data available.
Files click to expand
README

🌱 ws4sqlite

A bit of status report. The ws4sql fork (to integrate duckdb alongside sqlite) is back on track, hopefully to be released "as soon as" the documentation is in good shape._
ws4sqlite is a server application that, applied to one or more sqlite files, allows to perform SQL queries and statements on them via REST (or better, JSON over HTTP). Possible use cases are the ones where remote access to a sqlite db is useful/needed, for example a data layer for a remote application, possibly serverless or even called from a web page (after security considerations of course). Client libraries are available, that will abstract the "raw" JSON-based communication. See here for Java/JVM, here for Go(lang); others will follow. As a quick example, after launching
ws4sqlite --db mydatabase.db
It's possible to make a POST call to http://localhost:12321/mydatabase, e.g. with the following body:
// Set Content-type: application/json
{
    "resultFormat": "map", // "map" or "list"; if omitted, "map"
    "transaction": [
        {
            "statement": "INSERT INTO TEST_TABLE (ID, VAL, VAL2) VALUES (:id, :val, :val2)",
            "values": { "id": 1, "val": "hello", "val2": null }
        },
        {
            "query": "SELECT * FROM TEST_TABLE"
        }
    ]
}
Obtaining an answer of
{
    "results": [
        {
            "success": true,
            "rowsUpdated": 1
        },
        {
            "success": true,
            "resultSet": [
                { "ID": 1, "VAL": "hello", "VAL2": null }
            ]
        }
    ]
}

Features

Docs, a Tutorial, a Discord.
  • Directly call ws4sqlite on a database (as above), many options available using a YAML companion file;
  • Batching of multiple value sets for a single statement;
  • Parameters may be passed to statements positionally (lists) or by name (maps);
  • Results of queries may be returned as key-value maps, or as values lists;
  • For each query/statement, specify if a failure should rollback the whole transaction, or the failure is limited to that query;
  • CORS mode, configurable per-db;
  • Scheduled tasks can be: backup (with rotation), vacuum and/or a set of SQL statements;
  • Compact codebase;
  • Comprehensive test suite (make test);
  • 11 os's/arch's directly supported;

Security Features

* on the client, either using HTTP Basic Authentication or specifying the credentials in the request; * on the server, either by specifying credentials (also with hashed passwords) or providing a query to look them up in the db itself; * customizable Not Authorized error code (if 401 is not optimal)
  • A database can be opened in read-only mode (only queries will be allowed);
  • It's possible to enforce using only stored statements, to avoid some forms of SQL injection and receiving SQL from the client altogether;
  • It's possible to bind to a network interface, to limit access.

Design Choices

Some design choices:
  • Very thin layer over SQLite. Errors and type translation, for example, are those provided by the SQLite driver;
  • Doesn't include HTTPS, as this can be done easily (and much more securely) with a reverse proxy;
  • Doesn't support SQLite extensions, to improve portability.

Contacts and Support

Let's meet on Discord!

Credits

Many thanks and all the credits to these awesome projects: Kindly supported by JetBrains for Open Source development
🔗 More in this category

© 2026 GitRepoTrend · proofrock/ws4sqlite · Updated daily from GitHub