Last updated: May 2026
Umbra is a privacy-first Nostr client. This document explains what data is collected, how it is stored, and what guarantees we provide.
Umbra stores the following data exclusively on your device in an encrypted SQLite database:
- Events — Nostr notes you view or author (verified via BIP-340 Schnorr signature)
- Profiles — User metadata (names, pictures, NIP-05 identifiers)
- Relay list — Which Nostr relays you connect to
- Feed filters — Your feed configuration and preferences
- Relay metadata — Information about relays (name, supported NIPs, contact)
All data is stored in Android's private app database directory and is inaccessible to other applications.
The following data is never stored or persisted:
- Private keys (
nsec) — Not stored anywhere on device. Signing is delegated to Amber. - Full pubkeys in logs — Only truncated (first 8 hex chars) appear in debug logs
- Note content in logs — Event
contentfield is never logged - Relay URLs in logs — Relay hostnames are scrubbed (
[relay]) - User authentication tokens — No tokens exist; anonymous or Amber-based auth only
If you are logged in as a user:
- Events you author are stored in an encrypted database partition that cannot be accessed by relay observers
- Public events are stored separately for feed browsing
- Draft signable content and user-authored archive data stay in the encrypted app state; the complete user-to-user DM encryption flow remains a roadmap item rather than a settled shipping guarantee
- Every network request (HTTP, WebSocket, image loading, video streaming) routes through Orbot's SOCKS5 proxy at
127.0.0.1:9050 - No fallback: If Tor is not running, Umbra makes no network connections
- No DNS leaks: Hostnames are resolved inside the Tor network, not on your device
- Relay operators see only a Tor exit node IP, never your real IP
When you connect to a Nostr relay through Umbra:
- Relay sees your events and subscriptions (this is how Nostr works)
- Relay does NOT see your IP address (it sees a Tor exit node)
- Relay does NOT see your device identifier or browser fingerprint
- If you use multiple relays, they cannot correlate your activity across them without your explicit events
- IP-based identification — Your real IP is hidden from relays
- ISP observation — Your Nostr activity is hidden from network providers
- Device fingerprinting — No user agent, persistent cookies, or device IDs
- Plaintext eavesdropping — All relay connections use TLS over Tor
- Key compromise on device — Private keys are never stored; only Amber has them
- App-imposed censorship — Umbra never hides content on your behalf. Muting, NSFW hiding, and feed content filters are your own editable, fully removable settings (
domain/feed/FeedFilter.kt) with sensible defaults, not fixed app-side rules — nothing is hardcoded or unremovable
- Event content analysis — Your public notes are visible on the relay (encryption is at application level, not Nostr protocol level)
- Relay operator attacks — A relay operator who controls the relay can log when you were online, but not your IP
- Quantum computing — Nostr uses secp256k1; quantum breaks ECDSA. This affects all Nostr clients equally.
- Malware on your device — If your Android device is compromised, an attacker has access to all data and network traffic
- Compromised Amber — If Amber is backdoored, it can steal your keys or sign malicious events
- Moderation by relays or other users — A relay can refuse to store or serve your notes, and other clients/users can mute or ignore you; Umbra doesn't control the wider Nostr network, only what it does with the data it receives
Umbra does not use:
- Analytics services (Google Analytics, Mixpanel, etc.)
- Crash reporting services (Sentry, Firebase Crashlytics, etc.)
- CDNs for app updates
- Cloud backups
All crash reports and error handling happen locally.
- Images and videos are loaded through the Tor proxy
- Image URLs are embedded in Nostr events; Umbra does not scrape or mirror them
- Media is cached locally on your device, not sent to any server
Umbra requests the following Android permissions:
- INTERNET — Required for Nostr relay connections
- CHANGE_NETWORK_STATE — Required to check Tor connectivity status (via Orbot)
Umbra does NOT request:
READ_CONTACTS— You manage follows manuallyCAMERA— No video recording or streamingMICROPHONE— No audio recordingLOCATION— Never requested or usedREAD_CALENDARorREAD_SMS— Never requested
- Events — Stored until you delete them or clear all data
- Profiles — Cached for offline viewing; cleared on logout
- Relay metadata — Cached for up to 24 hours
- NIP-05 verification status — Cached for 24 hours (verified) or 15 minutes (failed transient verification)
You can delete all app data at any time via Settings > Apps > Umbra > Storage > Clear Data.
Umbra is open source under the MIT license. You can audit the source code at github.com/deymosh/umbra.
Security-critical code is audited via:
- Automated tests (
testDebugUnitTest) - Manual code review (see AUDIT.md)
- Community review on GitHub
If we make material changes to this privacy policy, we will:
- Update this document and commit to git
- Increment the version tag
- Notify users in the app (if applicable)
For privacy concerns or questions, open an issue on GitHub or contact the maintainers privately (see SECURITY.md).