Nostr Integration
Stegstr is a Nostr client with steganographic transport. It uses Nostr events, keys, and (optionally) relays. Learn more at nostr.com.
Identity Modes
1. Local (Anonymous) Identity
- When you don't log in with Nostr, the app creates or reuses an anonymous key stored only locally (e.g.,
localStoragekeystegstr_anon_keyon desktop). - That key is a normal Nostr secp256k1 key: it has a public key (your "local" identity) and a private key for signing posts and DMs.
- Nothing is sent to relays until you turn Network ON. All posts and DMs stay in the app and in any image you embed.
- You can still embed and share images; recipients can Detect them without logging in.
2. Nostr (Logged-in) Identity
- Log in with your nsec (bech32-encoded private key) or 64-character hex private key. No internet is required for login.
- Your existing local-only posts are re-signed with your Nostr key and published to relays once when you first turn Network ON after login. They then appear on Nostr under your account.
- From that point on, new posts, likes, DMs, etc. are signed with your Nostr key. When Network is ON, they are published to relays.
- Recipients-mode encryption (embed for specific pubkeys) uses your Nostr key for NIP-04; include your own pubkey if you want to open the image later.
Sync Behavior
When you turn Network ON for the first time after logging in:
- The app re-signs all your previous local-only events (posts, DMs, profile) with your Nostr key.
- Those events are published to relays once. They will then appear in other Nostr clients.
- Ongoing activity (new posts, likes, DMs) is published to relays whenever Network is ON.
If you stay in local-only mode, no relay traffic occurs. Detect and Embed work fully offline.
NIP Compatibility
- Events: Kind 1 (notes), kind 4 (DMs), kind 0 (profiles), and others. Bundled events are standard Nostr JSON.
- DMs: NIP-04 style encryption (ECDH + shared secret). Only the sender and recipient can decrypt DM content.
- Signing: Desktop may use a stub signer for local/embed use; full NIP-01 (secp256k1 + Schnorr) requires
nostr-tools. Android uses full Nostr signing. - See Nostr NIPs for the full specification.
Network Toggle
The Network toggle (top-right) controls relay connection:
- OFF: 100% local. No relay traffic. Detect and Embed work offline. Posts stay in-app and in images.
- ON: Connects to Nostr relays. Syncs feed from relays and publishes your events when logged in.
Stegstr Relay Proxy
By default, the desktop app connects to a Stegstr-operated relay proxy (a single WebSocket URL). The proxy forwards traffic to a configurable set of Nostr relays. Relay selection is controlled server-side, so we can change or add backend relays without an app update. Power users can still add or switch to custom relay URLs in Settings. For deploy and operations, see the relay proxy README in the website repo.
Post Branding
All kind 1 notes published through Stegstr automatically end with Stegster so they are identifiable as coming from this app. The compose UI enforces a 4991-character limit (user-typed chars) to reserve space for the suffix.
DMs in Images
When you embed an image containing DMs (kind 4 events):
- DM content is NIP-04 encrypted. Only the sender and the recipient's private key can decrypt.
- To read a DM, the recipient must log in as the Nostr account you sent it to.
- To see the post (kind 1), no login is needed—Detect merges it into the feed. The DM appears in Messages, but content shows "[Decryption failed]" until they log in with the correct key.