The software you install on an onion-accessible host. It stores your local timeline, inbox, identity keys, and peer radar.
> DEADDROP_
An experimental Tor-native PHP/SQLite Nano-Pub node for pull-based onion federation, signed public posts, peer trust, encrypted DM media, and paranoid inbox storage on low-resource darknet hosts.
SYSTEM_TERMINOLOGY
Your local contact graph. Add onion endpoints, assign petnames, review key changes, moderate peers, and let the worker pull active outboxes.
The static broadcast ledger exposed by each node. Peers read it without needing live accounts, feeds, or centralized APIs.
A public signal, encrypted private message, burner drop, reply, or tombstone event traveling through the pull-based network.
CORE_DARKNET_FEATURES
Production peers are expected to use Tor v3 onion endpoints. Clearnet peer discovery is intentionally out of scope.
Nodes publish a compact JSON ledger and pull peer ledgers asynchronously, reducing runtime pressure on tiny hosts.
The interface is designed to remain usable in Tor Browser's safest-style environments without requiring frontend JavaScript.
Private payloads use libsodium-based envelopes and remain ciphertext-at-rest until the vault is unlocked.
Private media is exported as ciphertext-only .ddm blobs. Media keys travel inside the encrypted private-drop payload.
Outgoing DMs default to ciphertext-only local storage unless the operator explicitly saves a plaintext sender copy.
First-seen peer encryption and signing keys are pinned. Later key changes pause sync until Radar approval.
Public outbox posts carry Ed25519 signatures. The worker verifies remote signatures before inserting posts.
Unknown pings wait for review. Peers can be active, quarantined, or blocked from Radar.
Operators can discard remote media URLs per peer while still allowing signed text posts from active peers.
Burner drops can be destroyed by backend logic after reading, avoiding client-side timers or JavaScript self-destruct gimmicks.
Peer discovery can require proof-of-work pings so unsolicited radar entries are harder to flood at scale.
Synchronization is handled by a command-line worker intended for cron, not by visitor-triggered frontend scripts.
Designed around PHP, SQLite, static JSON, and small-footprint hosting such as VPS, recycled boxes, or STB-style nodes.
PEER_TRUST_&_NETWORK_INTEGRITY
The worker stores the first observed peer encryption key and signing key. This is a practical trust-on-first-use boundary, not a replacement for out-of-band verification.
If a peer advertises different keys later, sync pauses and Radar shows [ KEY CHANGED ] until the operator approves or rejects the pending key.
Signed public posts help verify feed authorship and integrity. They do not prove that content is safe, true, or trusted.
Unknown knocks can stay pending. Quarantined peers remain visible for review but are skipped by the worker.
NODE_CAPACITY_GUIDANCE
These are conservative operational guidelines, not formal benchmarks. Tor latency, disk speed, cron frequency, media usage, and peer outbox size will change real-world behavior.
Comfortable for small trusted circles. Sync cycles should remain lightweight on modest hardware.
Expect slower worker cycles, more SQLite churn, and heavier Tor traffic during polling windows.
Split nodes, prune radar entries, reduce media, or tune cron intervals before treating this as a public-scale network.
SECURITY_&_ARCHITECTURE
> STATUS: EXPERIMENTAL
> AUDIT: NOT FORMALLY AUDITED
> ANONYMITY: TOR-DEPENDENT
> OPSEC: OPERATOR RESPONSIBILITY
> CLAIMS: NO ABSOLUTES
> KEY TRUST: FIRST-SEEN / MANUAL REVIEW
> POST SIGNING: AUTHORSHIP, NOT CONTENT SAFETY
> DM MEDIA: CONTENT ENCRYPTED, METADATA STILL EXISTS
> INBOX: CIPHERTEXT-AT-REST BY DEFAULT
> CLEARNET: OPTIONAL BRIDGES MUST BE REVIEWED
PRIVATE_DATA_HARDENING
Private DM media is encrypted into .ddm blobs. The random media key, nonce, MIME type, and integrity hash are carried inside the encrypted private-drop payload.
Incoming private drops remain ciphertext-at-rest. Outgoing private drops no longer keep local plaintext by default.
Private text and media are decrypted only during an active vault unlock session. Browser-visible plaintext is a live-session event, not a stored public asset.
Encrypted blobs hide content, not all metadata. File size, timing, access patterns, compromised hosts, and operator mistakes remain out of scope.
GENESIS_DEPLOYMENT
Deploy a private onion node, initialize SQLite, point nginx/PHP-FPM at the app, expose the hidden service through Tor, run health checks, then run the worker from cron.
PHP 8.2+
SQLite / PDO SQLite
libsodium
cURL + mbstring
nginx or compatible web server
Tor hidden service
age + tar
util-linux / flock
/var/lib/deaddrop/private-media
/var/www/html/deaddrop/media/private
cron/systemd timer for worker.php
Torminal CSS assets