AnyShare is currently a private active prototype. Please report security issues privately to the repository owner instead of opening a public issue.
Do not commit:
- private keys, certificates, SSH keys, or Apple signing credentials
- VPS passwords, deployment tokens, or
.envfiles - GitHub tokens or API keys
- production room secrets, TURN secrets, or admin room secrets
- exported room snapshots that contain private user or agent data
Use environment variables, GitHub secrets, or VPS-local environment files for deployment secrets.
Important variables include:
ANYSHARE_ADMIN_ROOM_SECRET
ANYSHARE_AGENT_ROOM_TICKET_SECRET
ANYSHARE_TURN_SECRET
ANYSHARE_V3_REDIS_PASSWORD
ANYSHARE_V3_REDIS_SENTINEL_PASSWORD
ANYSHARE_V3_S3_SECRET_KEY
ANYSHARE_V3_LIVEKIT_API_SECRET
ANYSHARE_V3_TRUSTED_PROVIDER_KEYS
ANYSHARE_TRANSCRIBER_STATE_KEY
- Web/PWA device sharing payloads are designed for client-side encryption.
- New
/v3rooms require client-side AES-256-GCM encryption. The Relay never receives the room key and rejects plaintext event content. - The v3 Relay still sees authorization and routing metadata: room/member IDs, identity claims, scopes, event types, sequence numbers, timestamps, ciphertext sizes, presence, storage references, and connection metadata.
- Artifact bodies are encrypted by clients before local or S3-compatible object storage receives them.
- Voice messages are encrypted Artifacts. Duration, MIME type, file name, waveform, transcript, language, and segment data are encrypted payload fields; the Relay sees the voice event type, ciphertext size, Artifact reference, and timing metadata only.
- The self-hosted Transcriber Agent is a trusted room member that receives the room key through its same-origin Enrollment endpoint. The internal transcription API is not published by Gateway and processes audio in memory without cloud fallback.
- LiveKit audio uses client-side E2EE with a key derived from the room key. LiveKit still sees participant identities, room names derived from room hashes, connection timing, media transport metadata, and encrypted media volume.
/v3member Tokens and invite Tokens are stored only as SHA-256 hashes. Realtime connections use single-use, room-bound tickets that expire after 60 seconds.- Rooms expire after 24 hours by default and after at most 30 days. Janitor removes room state, events, grants, tickets, presence, idempotency records, and Artifact objects; a content-free tombstone remains for 24 hours.
.asw v3snapshots intentionally contain complete encrypted event history and all Ready voice ciphertext. Protect snapshot passphrases and original room keys, and treat exported files as sensitive even though their Manifest is encrypted./v2remains a legacy plaintext-capable protocol. Production must useServices/WorldRelay/v2-production.env.example; clients must show Legacy mode as a security downgrade.- Removing a v3 member blocks future Relay delivery but does not rotate an already shared room key in the developer preview. Previously obtained ciphertext and keys cannot be revoked.
- The v3 threat model is documented in
Protocol/v3/threat-model.md.
Do not log request bodies, query credentials, Tokens, invites, keys, decrypted content, or Artifact names. The production Relay emits structured request records containing only request ID, room hash, route event, latency, status, and error code.
Production deployments must replace local secrets, use trusted HTTPS/WSS, restrict MinIO and Transcriber network access, configure the correct LiveKit public address and TURN/firewall rules, and keep .env.local outside version control.