No description
  • Rust 62%
  • TypeScript 34.6%
  • Astro 2.2%
  • CSS 0.5%
  • Makefile 0.3%
  • Other 0.3%
Find a file
Joshua Marsh (icub3d) 4280341bd1
Some checks failed
Security Audit / Gitleaks (Secrets) (push) Successful in 31s
Release / Docker image (push) Failing after 54s
Security Audit / Trivy (SCA & IaC) (push) Failing after 40s
Security Audit / PNPM Audit (JS SCA) (push) Successful in 47s
Deploy Landing Site / deploy (push) Successful in 1m22s
Release / Server binary (linux/amd64) (push) Successful in 1m59s
Security Audit / Semgrep (SAST) (push) Failing after 1m59s
Security Audit / Cargo Audit (Rust SCA) (push) Failing after 7m1s
Release / Tauri client (linux/amd64) (push) Successful in 9m21s
Simplify HTTPRoute: send to shared Caddy instead of MinIO directly
The marshians cluster now runs a shared Caddy Deployment that handles
MinIO bucket vhost addressing and dir->index.html resolution. This
HTTPRoute shrinks to a 14-line "Host -> caddy:80" form; the
Envoy-Gateway-specific HTTPRouteFilter regex rewrites and the
ExternalName Service this route used to need are gone.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 15:20:14 -06:00
.claude/skills open source security 2026-05-04 11:27:10 -06:00
.forgejo/workflows ci: approve pnpm build scripts after install 2026-05-16 16:14:28 -06:00
.gemini unify skills 2026-04-15 12:00:02 -06:00
.github fix: remove conditional Apple signing step (invalid workflow expression) 2026-04-23 13:30:59 -06:00
.vscode chore: make implement gh usage non-interactive 2026-04-15 08:48:05 -06:00
client open source security 2026-05-04 11:27:10 -06:00
docs feat: add brand voice guidelines and sweep competitor names from README (#79) (#82) 2026-04-17 16:12:12 -06:00
sdk/rust feat: Rust SDK (Base Protocol & Identity) (#85) (#100) 2026-04-18 19:23:44 -06:00
server fix: handle SIGTERM for graceful shutdown in Docker (#110) 2026-04-23 12:09:14 -06:00
shared feat: bot account type (#75) (#87) 2026-04-18 16:31:53 -06:00
site Simplify HTTPRoute: send to shared Caddy instead of MinIO directly 2026-05-17 15:20:14 -06:00
test-configs feat: Reference bots — welcomebot, modbot, auditbot (#77) (#113) 2026-04-23 18:01:10 -06:00
tools feat: Reference bots — welcomebot, modbot, auditbot (#77) (#113) 2026-04-23 18:01:10 -06:00
.dockerignore fix: add register-bot stub to Dockerfile and remove sdk/tools from .dockerignore (#64) 2026-04-23 11:44:43 -06:00
.gitignore ignore worktrees 2026-04-24 17:25:25 -06:00
Cargo.lock feat: Reference bots — welcomebot, modbot, auditbot (#77) (#113) 2026-04-23 18:01:10 -06:00
Cargo.toml feat: Reference bots — welcomebot, modbot, auditbot (#77) (#113) 2026-04-23 18:01:10 -06:00
CLAUDE.md open source security 2026-05-04 11:27:10 -06:00
Dockerfile perf: use BuildKit cache mounts in Dockerfile for faster builds 2026-04-23 16:43:12 -06:00
GEMINI.md initial documentation 2026-04-13 07:25:28 -06:00
LICENSE initial documentation 2026-04-13 07:25:28 -06:00
Makefile open source security 2026-05-04 11:27:10 -06:00
Procfile feat: Reference bots — welcomebot, modbot, auditbot (#77) (#113) 2026-04-23 18:01:10 -06:00
Procfile.servers feat: replace test-setup with SDK-based seeding (#101) (#103) 2026-04-19 12:46:49 -06:00
README.md docs: add Docker deployment section to README (#64) 2026-04-23 11:30:07 -06:00

decentcom

Decentralized Communication — open-source, self-hostable community software where your identity is a cryptographic key pair you own and no central authority controls your server.

"Decent" in the name is intentional: a decent (good) way to communicate, built on decentralized infrastructure.

Philosophy

  • No central authority. Servers are fully self-managed. There is no decentcom.io account required to run or join a server.
  • Users own their identity. Authentication is built on public key cryptography. Servers store only your public key — never a password or credential.
  • Server operators are in control. Each server chooses its own policies: open or invite-only, which features are enabled, how data is stored, and what content is allowed.
  • Open source first. The software is MIT-licensed. A managed hosting service will eventually be offered as a revenue model, but the core will always be free and open.

Tech Stack

Layer Technology
Backend Rust (axum, tokio, sqlx)
Desktop client Tauri v2 + React + TypeScript
Styling Tailwind CSS + Catppuccin themes (Mocha default)
Auth Ed25519 public key cryptography (no passwords)
Realtime WebSockets
Voice / Video WebRTC

Design Documents

Architecture and feature decisions are documented in docs/design/:

Prerequisites

To develop decentcom you will need:

Project Structure

decentcom/
├── server/          # Rust backend (axum HTTP + WebSocket server)
├── client/          # Tauri + React frontend
│   ├── src/         # React app (TypeScript)
│   ├── src-tauri/   # Tauri host (Rust)
│   └── public/
├── docs/
│   └── design/      # Architecture and design documents
└── README.md

Development

Local development runs three test servers, a one-shot seeder, and the Tauri client together under Overmind. Orchestration is wrapped in a Makefile.

  • Open Server (port 8081): Open membership mode.
  • Private Server (port 8082): Invite-only mode.
  • Strict Server (port 8083): Allowlist mode, restricted features.
  • Seed: tools/sdk-seed — runs once after the servers come up and populates each one with channels, members, messages, etc., via the public REST API (using decentcom-sdk).
  • Client: The Tauri dev server with hot reload.

First run

make clean   # remove test DBs, WebView storage, and OS keychain entries
make setup   # install client deps, stage keychain entries + WebView localStorage
make dev     # start the 3 servers, run the seeder, then start the client

make dev keeps everything in one attached overmind session. The seeder is one-shot — it exits cleanly once seeding finishes (OVERMIND_CAN_DIE=seed keeps the rest of the session alive).

Other targets

  • make servers — start only the 3 test servers (no seeder, no client).
  • make seed — re-run the SDK seeder against already-running servers.
  • make client — start only the Tauri client.
  • make test / make lint / make build — run the workspace tests, clippy + ESLint, or cargo build.
  • make help — list every target.

Tips

  • Inspect one server: overmind connect private
  • Restart one node: overmind restart open
  • Stop everything: Press Ctrl+C in the overmind session.

Running the server with Docker

Pre-built multi-arch images (linux/amd64, linux/arm64) are published to GHCR on every push to main and on version tags.

# Pull the latest image
docker pull ghcr.io/icub3d/decentcom-server:latest

# Run with a bind-mounted config and a named volume for persistent data
docker run -d \
  --name decentcom \
  -p 8080:8080 \
  -v /path/to/decentcom.toml:/config/decentcom.toml:ro \
  -v decentcom-data:/data \
  ghcr.io/icub3d/decentcom-server:latest

The container expects:

Path Purpose
/config/decentcom.toml Server configuration (bind-mount, read-only)
/data/decentcom.db SQLite database (via the /data volume)
/data/media Uploaded media files (via the /data volume)

A minimal decentcom.toml for Docker:

[server]
name = "My Community"

[network]
bind_address = "0.0.0.0:8080"

[storage]
backend = "sqlite"
database_path = "/data/decentcom.db"
media_path = "/data/media"

Building locally

docker build -t decentcom-server .
docker run -d \
  -p 8080:8080 \
  -v $(pwd)/test-configs/open.toml:/config/decentcom.toml:ro \
  -v /tmp/decentcom-data:/data \
  decentcom-server

License

MIT — see LICENSE.