Changelog
All notable changes to saneless are recorded here. The format follows Keep a Changelog, and saneless uses Semantic Versioning.
Unreleased
Added
- A
nextimage tag, which moves to the newest release, candidate or final. See Image tags.
0.2.0 - 2026-10-05
The first release, 0.2.0.
Added
- A web UI for scanning from any device on the local network. A status strip checks the configuration, the scanner, paperless-ngx, the profiles, the fallback folder and the data folder, and the scan's status updates live. Only the browser that started a scan sees its title, preview and error text. See First Web UI Scan.
- The
sanelesscommand line:scan,devices,jobs,serve,auto-profilesanddoctor, with documented exit codes for scripting. See CLI Commands. - Scan profiles in
saneless.toml, andsaneless auto-profiles, which writes them from what the scanner reports. See Configure Scan Profiles. - Duplex scanning through the document feeder, in hardware or by flipping the stack by hand, and multi-page documents built from several scans into one PDF. See Set Up ADF Duplex Scanning and Scan a Multi-Page Document.
- Empty-page detection, which drops blank pages from every scan, flatbed or feeder. See Empty Page Detection.
- A consume-directory fallback that saves the PDF to a folder paperless-ngx watches when the paperless-ngx API cannot take the upload. See Consume Directory Fallback.
- A container image published to the GitHub Container Registry, with build provenance and an SBOM you can verify. See Docker.
- This documentation site, at kdknigga.github.io/saneless.
Security
- The web UI has no login, by design: it is an appliance for a trusted local network. See What an unauthenticated client can read.
- A Host check answers only requests that name saneless's own host names, which stops DNS rebinding. See Host check.
- Same-origin checks reject cross-site requests that change state. See Cross-site requests.
- The paperless-ngx token is kept out of logs and error messages: text about a paperless-ngx request has the token struck out before it is shown or logged, and a config error names the setting, never its value.