Durable onion identity
Service state is stored outside disposable containers so private onion identities can persist across restart and rebuild operations.
TorKit is my OnionShare-derived Linux project for running several private onion services as a managed system instead of a collection of one-off processes. The work focuses on persistent onion identity, container boundaries, host-side lifecycle control, recovery, and verification.
The project keeps OnionShare's upstream attribution and GPL licensing while adding TorKit-specific operational tooling around the service runtime.
TorKit separates host orchestration from the OnionShare-derived application code so service lifecycle, state, and operator actions can be controlled explicitly.
Service state is stored outside disposable containers so private onion identities can persist across restart and rebuild operations.
A host-side operator interface provides authenticated local controls for service lifecycle and destructive actions without exposing an administrative web surface publicly.
Docker Compose and a non-root application runtime keep service execution isolated while preserving the state needed for long-running private services.
TorKit retains OnionShare-derived sharing and receiving workflows behind persistent service configuration and host-side lifecycle management.
Chat remains disposable while TorKit Board adds a separate persistent SQLite-backed discussion mode for authorized visitors.
Administrative actions such as clearing persistent state are separated from ordinary service startup and require explicit operator intent.
The recovery workflow stages a coherent snapshot, validates it, and stores it in an encrypted Restic repository.
Recovery payloads include a manifest and SHA-256 file inventory. SQLite state is checked before upload, and restore validates the payload before replacing local state.
Restore stages data next to its destination, swaps paths into place, and rolls back failed installation attempts instead of partially overwriting live state.
An optional Terraform stack provisions a private S3 bucket with public-access blocking, TLS-only access policy, server-side encryption, and an IAM user scoped to the TorKit recovery prefix.
The public repository uses a curated Git history and automated checks intended to keep release source separate from private engineering history and runtime secrets.
GitHub Actions exercises the inherited OnionShare CLI test suite and TorKit-specific runtime paths.
CI validates syntax, host-side unit tests, image build, and container smoke behavior.
Release checks scan the current source and public Git history for credential patterns, run privacy heuristics, and inspect committed images for GPS or author metadata.