A local-first, decentralized social client built on pzp (the "ppppp" successor to Secure Scuttlebutt).
The name plays on decentralized ā and is mildly self-deprecating. It's decent.
Decent treats human and programmatic use as co-equal, first-class concerns. You can scroll your feed in a browser, or let an AI agent read and post to your feed through the same local API. It runs entirely on your machine ā no servers, no accounts, no cloud. Your data is yours.
š± Early scaffold. This is a fresh project. The backend stands up a real pzp node and publishes to your feed; the web UI is minimal. Expect sharp edges. We're public from the start because we intend to build this with friends.
We evaluated all four against two principles: decentralization and local-first.
ppppp-db, ppppp-sync) is finished and stable ā it builds and passes its full test suite on current Node.We're not chasing a big network. Decent is for tinkering with technically-curious friends, seeded partly by mirroring content in from other platforms.
Full rationale and the protocol comparison live in docs/decisions.md.
docs/decisions.md).āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā apps/web Svelte SPA (the human UI) ā
āāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāā
ā HTTP / JSON (localhost)
āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāā
ā packages/backend Node process: ā
ā ⢠pzp node (secret-stack + ppppp-* ) ā
ā ⢠local HTTP/RPC API ā
āāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāā
ā same local API
āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāā
ā packages/cli companion CLI ā
ā (humans + AI agents, co-equal with the UI) ā
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
Portability constraint: the backend is portable-by-default so the mobile door stays open. It must never import sodium-native directly ā always go through sodium-universal (whose browser/react-native field swaps the native crypto addon for a WASM/JS fallback). See docs/decisions.md.
| Path | What |
|---|---|
packages/backend |
The pzp node + local HTTP API. The heart of Decent. |
packages/cli |
Companion CLI for humans and agents. |
apps/web |
Svelte single-page app (the human UI). |
docs/ |
Decision log, architecture notes. |
npm install
# Start the backend (creates an identity on first run, publishes a hello post)
npm run backend
# In another terminal, talk to it via the CLI
npm run cli -- whoami
npm run cli -- post "hello from the CLI"
# Or run the web UI
npm run web
We're building this in the open with friends. If that's you: open an issue, start a discussion, or just clone it and tinker. The decision log in docs/ is the best place to understand why things are the way they are.
AGPL-3.0 ā in keeping with the SSB/pzp ecosystem and the spirit of building software that stays free.