From 8e35add7bbc2bb5cd2b63f977d06750ae5519b3b Mon Sep 17 00:00:00 2001 From: Scott Reimers Date: Tue, 21 Apr 2026 23:58:35 -0400 Subject: [PATCH] v0.6.0: hard network fork; ship multi-persona + CDN restructure Phases 1-5 of the Identity Architecture rollout are on master; Phase 6 (rotating DM IDs) is deferred. This bumps the protocol-breaking release: v0.5 and v0.6 cannot interoperate. Packaging: - Cargo + tauri.conf: 0.5.3 -> 0.6.0 - deploy.sh: drop -beta filename suffix - download.html: single v0.6.0 section with fork notice at the top; changelog entry summarising the five phases and the schema migration; Phase 6's rotating-DM-ID status noted as deferred Co-Authored-By: Claude Opus 4.7 (1M context) --- Cargo.lock | 6 ++-- crates/cli/Cargo.toml | 2 +- crates/core/Cargo.toml | 2 +- crates/tauri-app/Cargo.toml | 2 +- crates/tauri-app/tauri.conf.json | 2 +- deploy.sh | 10 +++--- website/download.html | 56 ++++++++++++++++++-------------- 7 files changed, 44 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index ea7050b..cc75005 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2732,7 +2732,7 @@ checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" [[package]] name = "itsgoin-cli" -version = "0.5.3" +version = "0.6.0" dependencies = [ "anyhow", "hex", @@ -2744,7 +2744,7 @@ dependencies = [ [[package]] name = "itsgoin-core" -version = "0.5.3" +version = "0.6.0" dependencies = [ "anyhow", "base64 0.22.1", @@ -2767,7 +2767,7 @@ dependencies = [ [[package]] name = "itsgoin-desktop" -version = "0.5.3" +version = "0.6.0" dependencies = [ "anyhow", "base64 0.22.1", diff --git a/crates/cli/Cargo.toml b/crates/cli/Cargo.toml index d2dc068..b883c40 100644 --- a/crates/cli/Cargo.toml +++ b/crates/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itsgoin-cli" -version = "0.5.3" +version = "0.6.0" edition = "2021" [[bin]] diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index 71b3017..a851932 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itsgoin-core" -version = "0.5.3" +version = "0.6.0" edition = "2021" [dependencies] diff --git a/crates/tauri-app/Cargo.toml b/crates/tauri-app/Cargo.toml index b1af404..8a12bf5 100644 --- a/crates/tauri-app/Cargo.toml +++ b/crates/tauri-app/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "itsgoin-desktop" -version = "0.5.3" +version = "0.6.0" edition = "2021" [lib] diff --git a/crates/tauri-app/tauri.conf.json b/crates/tauri-app/tauri.conf.json index b84c910..4537ec4 100644 --- a/crates/tauri-app/tauri.conf.json +++ b/crates/tauri-app/tauri.conf.json @@ -1,6 +1,6 @@ { "productName": "itsgoin", - "version": "0.5.3", + "version": "0.6.0", "identifier": "com.itsgoin.app", "build": { "frontendDist": "../../frontend", diff --git a/deploy.sh b/deploy.sh index b79903c..984dee8 100644 --- a/deploy.sh +++ b/deploy.sh @@ -19,7 +19,7 @@ KEYSTORE="itsgoin.keystore" KS_ALIAS="itsgoin" VERSION=$(grep '"version"' crates/tauri-app/tauri.conf.json | head -1 | sed 's/.*"\([0-9.]*\)".*/\1/') -echo "=== Deploying v${VERSION}-beta ===" +echo "=== Deploying v${VERSION} ===" # Build CLI echo "=== Building CLI ===" @@ -43,7 +43,7 @@ echo "=== APK build complete ===" echo "=== Signing APK ===" UNSIGNED="crates/tauri-app/gen/android/app/build/outputs/apk/universal/release/app-universal-release-unsigned.apk" ALIGNED="itsgoin-aligned.apk" -SIGNED="itsgoin-${VERSION}-beta.apk" +SIGNED="itsgoin-${VERSION}.apk" ZIPALIGN=$(find ~/Android/Sdk/build-tools -name "zipalign" 2>/dev/null | sort -V | tail -1) APKSIGNER=$(find ~/Android/Sdk/build-tools -name "apksigner" 2>/dev/null | sort -V | tail -1) "$ZIPALIGN" -f 4 "$UNSIGNED" "$ALIGNED" @@ -56,7 +56,7 @@ sshpass -p "$SSH_PASS" scp $SSH_OPTS website/*.html website/style.css "$SSH_HOST sleep 5 echo "=== Uploading AppImage ===" -sshpass -p "$SSH_PASS" scp $SSH_OPTS "target/release/bundle/appimage/itsgoin_${VERSION}_amd64.AppImage" "$SSH_HOST:~/public_html/itsgoin_${VERSION}-beta_amd64.AppImage" +sshpass -p "$SSH_PASS" scp $SSH_OPTS "target/release/bundle/appimage/itsgoin_${VERSION}_amd64.AppImage" "$SSH_HOST:~/public_html/itsgoin_${VERSION}_amd64.AppImage" sleep 5 echo "=== Uploading APK ===" @@ -64,7 +64,7 @@ sshpass -p "$SSH_PASS" scp $SSH_OPTS "$SIGNED" "$SSH_HOST:~/public_html/" sleep 5 echo "=== Uploading CLI ===" -sshpass -p "$SSH_PASS" scp $SSH_OPTS target/release/itsgoin "$SSH_HOST:~/public_html/itsgoin-cli-${VERSION}-beta-linux-amd64" +sshpass -p "$SSH_PASS" scp $SSH_OPTS target/release/itsgoin "$SSH_HOST:~/public_html/itsgoin-cli-${VERSION}-linux-amd64" sleep 5 echo "=== Uploading anchor binary ===" @@ -78,4 +78,4 @@ sleep 2 echo "=== Verifying anchor ===" sshpass -p "$SSH_PASS" ssh $SSH_OPTS "$SSH_HOST" 'ps aux | grep "[i]tsgoin.*daemon"' -echo "=== Deploy complete: v${VERSION}-beta ===" +echo "=== Deploy complete: v${VERSION} ===" diff --git a/website/download.html b/website/download.html index f15b207..8105215 100644 --- a/website/download.html +++ b/website/download.html @@ -24,42 +24,38 @@

Download ItsGoin

-

Available for Android and Linux. Free and open source.

+

Available for Android, Linux, and Windows. Free and open source.

-

Stable Release

-

Version 0.5.3 — April 19, 2026

-

Multi-identity, export/import, fast startup, pagination, SAF support, AppImage video, and more. Recommended for daily use.

+
+ Network fork: v0.6 is a hard fork from v0.5. Older versions cannot connect to the v0.6 network. If you were on v0.5.3, upgrade to stay reachable. Export your identity from v0.5.3 (Settings → Export) and import it on first launch of v0.6. +
+ +

v0.6.0 — April 21, 2026

+

The privacy architecture overhaul. Network identity is decoupled from posting identity — peers cannot correlate network traffic to a posting identity, and users can hold multiple simultaneous posting identities (personas) on one device.

-

Coming in Beta (0.6.x)

-

The next beta introduces a major privacy architecture overhaul:

-
    -
  • Multiple personas on one device — Public, Private, Work, per-conversation. No switching; all active at once.
  • -
  • Network-ID / Posting-ID split — peers can no longer correlate network traffic to a posting identity.
  • -
  • Ephemeral rotating DM identities — observers cannot link successive messages in a thread.
  • -
  • CDN-only DM propagation — removes the sender→recipient traffic signal entirely.
  • -
  • Multi-device support — phone + desktop share a persona without exposing the relationship.
  • -
  • File-holder CDN — replaces the upstream/downstream tree with flat lateral replication.
  • +
      +
    • Multiple personas on one device — Public, Private, Work, whatever you want. No switching; all active at once. Filter the merged feed per persona; compose as any persona.
    • +
    • Network-ID / Posting-ID split — content is signed by a posting key, not the network endpoint. Peers cannot link network connections to posting identities.
    • +
    • CDN-only DM propagation — encrypted posts no longer have a sender→recipient traffic signal. They travel through the same CDN path as any other content.
    • +
    • Merged pull with recipient-match — DMs from strangers reach you without requiring a mutual follow. No distinguishable “searching for DMs” traffic pattern.
    • +
    • File-holder CDN — replaces the upstream/downstream tree with flat lateral holder sets (max 5 per file, LRU-capped). Delete-notice and manifest fan-out are now uniform.
    -

    See the Identity Architecture section of the design doc for the full plan. Beta releases will appear here as each phase ships.

    +

    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.

@@ -116,6 +112,18 @@

Changelog

+
v0.6.0 — April 21, 2026
+
    +
  • Network fork from v0.5. The network protocol has changed enough that v0.5 and v0.6 cannot interoperate. Upgrade if you want to stay reachable.
  • +
  • CDN-only encrypted-post propagation. Direct PostPush for encrypted posts is removed; encrypted DMs look identical on the wire to any other encrypted post.
  • +
  • Flat per-file holder sets replace upstream/downstream trees. Each file tracks up to 5 most-recent peers it was exchanged with. Engagement diffs, manifest pushes, and delete notices all route through this holder set uniformly.
  • +
  • Merged pull with recipient-match. Pull queries contain a uniform list of NodeIds (follows + your own); server matches on post author OR wrapped-key recipient. Non-follower DMs now reach you via a normal pull cycle — no sender→recipient traffic signal.
  • +
  • Posting-key / network-key split. Content is signed with a dedicated posting key; the network endpoint uses a separate network key. Peers can no longer correlate posting identity to network traffic.
  • +
  • Multi-persona support. Hold multiple posting keys on one device; each peer sees distinct authors. Settings → Personas to create/manage; compose box picks which persona posts each item; feed has filter pills per persona.
  • +
  • pkarr default lookup suppressed. clear_address_lookup() + mDNS only; no implicit DNS publishing.
  • +
  • Schema: four legacy tables dropped (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.
  • +
+
v0.5.3-beta — April 19, 2026
  • Feed pagination — Cursor-based pagination (20 posts/page) with pre-fetch and infinite scroll. Batched engagement queries (3 SQL queries instead of 4 per post). Media loads only for visible posts via IntersectionObserver.