Metadata-Version: 2.4
Name: pless
Version: 0.1.0a1
Summary: Self-hosted Paperless-ngx on hardware you own — encrypted at rest, invisible on your LAN
Project-URL: Homepage, https://kschulst.github.io/pless/
Project-URL: Documentation, https://kschulst.github.io/pless/
Project-URL: Source, https://github.com/kschulst/pless
Project-URL: Issues, https://github.com/kschulst/pless/issues
Project-URL: Changelog, https://github.com/kschulst/pless/releases
Author-email: Kenneth Leine Schulstad <ks@rubberduck.no>
License-Expression: MIT
License-File: LICENSE
Keywords: documents,luks,paperless-ngx,raspberry-pi,self-hosted,tailscale
Classifier: Development Status :: 3 - Alpha
Classifier: Environment :: Console
Classifier: Intended Audience :: End Users/Desktop
Classifier: Intended Audience :: System Administrators
Classifier: Operating System :: MacOS
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: System :: Archiving
Classifier: Topic :: System :: Installation/Setup
Classifier: Topic :: System :: Systems Administration
Classifier: Typing :: Typed
Requires-Python: >=3.12
Requires-Dist: hcloud>=2.0
Requires-Dist: httpx>=0.27
Requires-Dist: pydantic-settings>=2.3
Requires-Dist: pydantic>=2.7
Requires-Dist: pyyaml>=6.0
Requires-Dist: rich>=13.7
Requires-Dist: typer>=0.12
Description-Content-Type: text/markdown

# pless

**A searchable archive of your documents, on hardware you own.**

[![CI](https://github.com/kschulst/pless/actions/workflows/ci.yml/badge.svg)](https://github.com/kschulst/pless/actions/workflows/ci.yml)
[![Docs](https://github.com/kschulst/pless/actions/workflows/docs.yml/badge.svg)](https://kschulst.github.io/pless/)

`pless` sets up and operates a self-hosted [Paperless-ngx](https://docs.paperless-ngx.com/)
installation — on a Raspberry Pi, a cloud server, or a local VM — with two properties most
self-hosting guides skip:

- **Encrypted at rest.** Documents live on a LUKS2 volume whose key is never stored on the
  machine. A stolen box is a brick.
- **Invisible on your LAN.** After hardening, nothing listens on your local network. Paperless
  is bound to localhost and SSH answers only over Tailscale.

> [!WARNING]
> **Alpha.** `pless` cannot yet import documents or take backups — those are the next two
> milestones. Don't put your only copy of anything on it.

## 📖 [Documentation →](https://kschulst.github.io/pless/)

Getting started, installation, maintenance and a cookbook live on the docs site.

## Quick look

```bash
git clone https://github.com/kschulst/pless.git
cd pless
uv tool install --editable .

pless init --secrets
pless doctor
```

Then follow [Installation](https://kschulst.github.io/pless/installation/).

## Status

| Capability | Status |
|---|---|
| Provisioning, encrypted storage, deployment | ✅ Working |
| Tailscale access, LAN hardening, exposure audit | ✅ Working |
| Raspberry Pi target | 📋 Documented, awaiting hardware validation |
| Hetzner Cloud target | 📋 Code and unit tests, not validated live |
| Importing documents | ❌ Not built |
| Backup, restore, restore drills | ❌ Not built |
| Web setup wizard | ❌ Planned |

Verified end to end on Debian 13 and Ubuntu 24.04.

## Development

```bash
uv sync
uv run pytest
uv run ruff check .
uv run ruff format .
zensical serve      # docs at http://localhost:8000
```

See [CONTRIBUTING.md](CONTRIBUTING.md) for the full development guide, and
[`adr/`](adr/README.md) for why the architecture is the way it is.

Work in progress lives in [issues](https://github.com/kschulst/pless/issues).

## Licence

MIT. See [LICENSE](LICENSE).
