Available for Android, Linux, and Windows. Free and open source.
Your posts, media, follows, and identity key all come across. Encrypted posts stay decryptable under the same key.
v0.5.3 is kept online only as an upgrade bridge — it no longer connects to the live network.
Every remaining persona-signed direct push is off the wire. Deletes, visibility changes, profile updates, and group-key distribution now travel as encrypted / signed posts through the CDN. Groups are a first-class primitive. Plus two pre-release fixes — an admin-forgery check on group keys and a cap on concurrent port-scan hole punches that explains the 10 Mbps upload storm some users saw on VPNs.
DeleteRecord / VisibilityUpdate direct pushes are gone.GroupKeyDistribute wire message is gone.v0.6.2 is a wire-breaking fork from v0.6.1 (the retired message types are not optional). Upgrade both ends.
Network identity is now fully separated from posting identity on every install. Plus: Android auto-backup disabled by default, Reset actually resets, import preserves your personas, and display name is optional.
See the Identity Architecture section of the design doc for details. Rotating DM identities (from the original plan) are deferred — they need more work on the connection model.
chmod +x itsgoin_*.AppImage./itsgoin_*.AppImagesudo apt install libfuse2 (Debian/Ubuntu) or sudo dnf install fuse (Fedora).
chmod +x itsgoin-cli-*./itsgoin-cli-* /path/to/data --daemon./itsgoin-cli-* /path/to/data --bind 0.0.0.0:4433 --daemon --web 8080--help for all options.
VisibilityIntent::Control post type carries a signed DeletePost / UpdateVisibility operation. Receivers verify the ed25519 signature against the target post's author, then apply. DeleteRecord and VisibilityUpdate wire pushes are removed.VisibilityIntent::Profile; authored by the posting identity, propagates via the CDN. The ProfileUpdate wire message keeps only routing fields (anchors, recent_peers, preferred_peers).InlineComment gains an optional ref_post_id; when set, content is a short preview and the full body (long text, attachments) lives in the referenced post. Signature binds the reference so a peer can't strip or swap it.canonical_root_post_id field on the group-key record; groups reuse the same encryption machinery.GroupKeyDistribute (0xA0) wire push is retired. Admins publish an encrypted post carrying the seed; members decrypt with their posting secret. Removes the last persona-signed direct push.AudienceRequest/AudienceResponse wire messages, no more SocialRelation::Audience/Mutual. Comment permission AudienceOnly renamed to FollowersOnly.BlobDeleteNotice also retired — orphan blobs on remote holders evict via LRU.admin field doesn't match the post's author are rejected before storage. Prevents an attacker who knows a victim's posting id and the target group_id from overwriting the victim's legitimate group-key record.PendingConnectGuard prevents auto-reconnect, rebalance-slots, and relay-introduction from racing to connect to the same peer. Same-peer only — different peers connect independently; inbound connections are unaffected.v0.6.2 is a wire-breaking fork from v0.6.1. Retired message types (0x42 PostNotification, 0x43 PostPush, 0x44 AudienceRequest, 0x45 AudienceResponse, 0x95 BlobDeleteNotice, 0xA0 GroupKeyDistribute) are not optional — upgrade both ends.
allowBackup=true, which silently uploaded identity.key (your root secret — full access to all private content) to Google Drive for any user with cloud backup enabled. That's published-to-a-third-party without asking. Now off by default, plus data_extraction_rules for Android 12+ cloud and device-transfer paths. Users who want off-device backup use Settings → Export (explicit ZIP under their control).identity.key, WAL/SHM, and all identity subdirs — truly fresh on next launch.OPEN_DOCUMENT; picked file is staged in the app's private cache for the existing importer.display_name / bio / avatar are no longer sent on the wire. Peers render author names as hex until v0.6.2 adds persona-signed profile posts.PostPush for encrypted posts is removed; encrypted DMs look identical on the wire to any other encrypted post.clear_address_lookup() + mDNS only; no implicit DNS publishing.post_upstream, post_downstream, blob_upstream, blob_downstream); replaced with file_holders. One-way migration seeds the new table from the old ones on first launch. Also adds post_recipients index for merged pull, and posting_identities table for multi-persona.deleted_at timestamp) instead of hard-deleted. Tombstones propagate through pull sync, ensuring deletes reach peers that missed the real-time diff.seen_engagement and seen_messages tables. Only notifies on genuinely unseen content. Survives app restarts.encrypt_bytes_with_cek, decrypt_bytes_with_cek, unwrap_cek_for_recipient, unwrap_group_cek. Foundation for encrypted blob storage and future chunk-level encryption.intentKind) rather than encryption state.0.0.0.0. Fixes share link video/image serving for IPv6-reachable nodes.preload="auto"). Previously only the first frame loaded.PRAGMA user_version. Future upgrades can run data migrations automatically. Databases too old to migrate are reset cleanly.post_upstream table records which peer each post was received from, enabling engagement to flow back toward the author hop-by-hop through the CDN tree.0.0.0.0 — unroutable addresses are now skipped, falling through to QUIC proxy correctly.post_downstream table gives every post (including text-only) a propagation tree. Engagement diffs flow through the file layer via BlobHeaderDiff (0xD0), never mesh.--bind (explicit server) skips STUN.--bind or UPnP now advertise their public IPv6 address, so peers save them in known_anchors for preferential reconnection.This project is open source and could use your help. Whether you're a developer, tester, or just have ideas — jump in.