# DAT protocol plugin for Dillo This repository builds the standalone Dillo Protocol Interface (DPI) plugin for `dat://` archives. It is kept separate from the dat-thang application repository so it can be built, packaged, and proposed to Dillo as an independent plugin. The plugin implements the Dillo DPI server protocol and serves archive pages from the C implementation. Archive contents and metadata are read through SLEEP; `dat.scm` is parsed as S-expressions with the embedded S7 reader and is never evaluated as executable archive code. The networking identity is the Cesspool protocol token in `NETWORK_PROTOCOL`. Dat-DNS is the project's archive-name mapping and is not public DNS. ## Build requirements - A C99 compiler, GNU Make, and binutils (`objcopy`) - `pkg-config` - libsodium and libcurl development headers and libraries - Dillo 3.0.5 or newer with its DPI daemon (`dpid`) On Debian-like systems, the build libraries are commonly provided by `libsodium-dev` and `libcurl4-openssl-dev`; package names vary by distribution. Build the plugin: ```sh make ``` The result is `build/dat.dpi`. The build output is ignored by Git. ## Install for one user ```sh make install-user DPIDIR=/path/to/dillo/dpi ``` This installs `~/.dillo/dpi/dat/dat.dpi`. If `~/.dillo/dpidrc` does not exist, it creates one with `dpi_dir` set to the supplied `DPIDIR`; choose the system DPI directory used by your Dillo installation. It then adds this association to `~/.dillo/dpidrc` if it is not already present: ```ini proto.dat=dat/dat.dpi ``` Restart Dillo's plugin daemon (`dpidc stop`, then open Dillo again), and navigate to a `dat://` archive address. User plugins are searched before the configured system DPI directory. ## System install ```sh sudo make install ``` By default, this installs to `/usr/local/lib/dillo/dpi/dat/dat.dpi`. Add the following line to `~/.dillo/dpidrc` (or the system `dpidrc` used by your Dillo installation), then restart `dpid`: ```ini proto.dat=dat/dat.dpi ``` Override paths as needed, for example: ```sh make install PREFIX=/usr DPIDIR=/usr/lib/dillo/dpi DESTDIR=/tmp/package-root ``` ## Protocol/version behavior The plugin accepts legacy hexadecimal and compact Base32768 Dat keys. A `+N` version suffix selects the requested archive version, matching the versioned navigation supported by the C archive implementation. The plugin accesses archives through the configured Cesspool networking layer when content is not available locally. ## Dillo plugin integration Dillo plugins are independent programs using the DPI protocol. Dillo searches for `.dpi` executables in user and system DPI directories and associates a URL scheme through `proto.=` in `dpidrc`. See the Dillo User Manual's Plugins and Dpidrc sections for the browser-side configuration. The Dillo project requests plugin proposals as a repository link and short description. This repository is prepared for that review; it has no configured remote and has not been submitted upstream. ## Source and license The C implementation and required headers are copied from the dat-thang source project. This repository carries the project's GNU AGPL v3 license. The bundled S7 source retains its upstream notices in `src/s7.c`.