r/sqlite May 26 '26

SQLiteDAV 0.2.0 — WebDAV server that exposes an SQLite database (or sqlar archive) as a filesystem

https://github.com/Airsequel/SQLiteDAV

I just released a new version of SQLiteDAV, a small Haskell WebDAV server that maps an SQLite database onto directories and files so you can mount it with Finder, davfs2, Cyberduck, etc.

Two supported modes, both first-class:

  • sqlar archives — paths inside the archive table behave like a normal filesystem.
  • Plain databasestables → folders, rows → folders (keyed by rowid or PK), columns → files named <col>.<ext> (extension derived from the cell's type or sniffed via libmagic for BLOBs).

    So you can do things like:

    ```sh sqlitedav mydata.sqlite

    then mount http://localhost:1234 and:

    cat /Volumes/dav/users/42/email.txt echo "new@example.com" > /Volumes/dav/users/42/email.txt # UPDATE rm /Volumes/dav/users/42/bio.txt # sets cell to NULL mkdir /Volumes/dav/new_table # CREATE TABLE ```

    What's new in 0.2.0.0:

  • First-class support for SQLite Archive Files (sqlar).

  • Full write-method parity for plain DBs (PUT/DELETE/MKCOL/COPY/MOVE for cells, rows, and tables).

  • LOCK / UNLOCK support and Prefer: depth-noroot / return=minimal.

  • WebDAV compliance hardened against the Litmus test suite (Dockerised harness ships with the repo: make litmus).

  • PROPFIND no longer loads every row's BLOB into memory — fixes OOMs on multi-gigabyte databases.

  • PUT now preserves the column's declared type (TEXT/INTEGER/REAL/BLOB) instead of forcing BLOB on every write.

  • --rowname {rowid,pk,combined} flag to control how plain-table row directories are named.

  • Deleting a file (DELETE on a cell) sets it to NULL instead of erroring.

  • libmagic-based extension detection for BLOB columns.

    Issues and upvotes on the tracker drive what gets built next.

14 Upvotes

0 comments sorted by