- New contribute.html with honest project story and contributor guide - Discord and Contribute links added to nav on all pages - Forgejo + Discord links in all footers - Removed sensitive data from project-notes (passwords, server paths) - Updated .gitignore to exclude keystores, APKs, AppImages, credentials Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
235 lines
20 KiB
HTML
235 lines
20 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Download — ItsGoin</title>
|
|
<meta name="description" content="Download the ItsGoin app for Android and Linux. Free, open source, Apache 2.0.">
|
|
<link rel="stylesheet" href="style.css">
|
|
</head>
|
|
<body>
|
|
<nav>
|
|
<a href="index.html" class="logo">ItsGoin</a>
|
|
<div class="links">
|
|
<a href="index.html">About</a>
|
|
<a href="tech.html">How It Works</a>
|
|
<a href="design.html">Design</a>
|
|
<a href="download.html" class="active">Download</a>
|
|
<a href="contribute.html">Contribute</a>
|
|
<a href="https://discord.gg/pCjMbY9PmN">Discord</a>
|
|
</div>
|
|
</nav>
|
|
|
|
<div class="container">
|
|
<section>
|
|
<h1 style="font-size: 2rem; font-weight: 800; letter-spacing: -0.03em; margin-bottom: 0.25rem;">Download ItsGoin</h1>
|
|
<p>Available for Android and Linux. Free and open source.</p>
|
|
<p style="color: var(--text-muted); font-size: 0.85rem;">Version 0.3.2 — March 15, 2026</p>
|
|
|
|
<div class="downloads">
|
|
<a href="itsgoin-0.3.2.apk" class="download-btn btn-android">
|
|
Android APK
|
|
<span class="sub">v0.3.2</span>
|
|
</a>
|
|
<a href="itsgoin_0.3.2_amd64.AppImage" class="download-btn btn-linux">
|
|
Linux AppImage
|
|
<span class="sub">v0.3.2</span>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Installation</h2>
|
|
|
|
<div class="card">
|
|
<h3 style="color: var(--accent);">Android</h3>
|
|
<ol class="steps">
|
|
<li><strong>Download the APK</strong> — Tap the button above. Your browser may warn that this type of file can be harmful — tap <strong>Download anyway</strong>.</li>
|
|
<li><strong>Open the file</strong> — When the download finishes, tap the notification or find <code>itsgoin-0.3.2.apk</code> in your Downloads folder and tap it.</li>
|
|
<li><strong>Allow installation</strong> — Android will ask you to allow installs from this source. Tap <strong>Settings</strong>, toggle <strong>"Allow from this source"</strong>, then go back and tap <strong>Install</strong>.</li>
|
|
<li><strong>Launch the app</strong> — Once installed, tap <strong>Open</strong> or find ItsGoin in your app drawer.</li>
|
|
</ol>
|
|
<div class="note">
|
|
<strong>Note:</strong> If you don't see the "Allow from this source" prompt, go to <strong>Settings → Apps → Special access → Install unknown apps</strong> and enable it for your browser.
|
|
</div>
|
|
</div>
|
|
|
|
<div class="card">
|
|
<h3 style="color: var(--green);">Linux (AppImage)</h3>
|
|
<ol class="steps">
|
|
<li><strong>Download the AppImage</strong> — Click the button above to download.</li>
|
|
<li><strong>Make it executable</strong> — Open a terminal and run:<br><code>chmod +x itsgoin_0.3.2_amd64.AppImage</code></li>
|
|
<li><strong>Run it</strong> — Double-click the file, or from the terminal:<br><code>./itsgoin_0.3.2_amd64.AppImage</code></li>
|
|
</ol>
|
|
<div class="note">
|
|
<strong>Note:</strong> If it doesn't launch, you may need to install FUSE:<br><code>sudo apt install libfuse2</code> (Debian/Ubuntu) or <code>sudo dnf install fuse</code> (Fedora).
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Changelog</h2>
|
|
<div class="changelog">
|
|
<div class="changelog-date">v0.3.2 — March 15, 2026</div>
|
|
<ul>
|
|
<li><strong>Bidirectional engagement propagation</strong> — Reactions and comments now flow both upstream (toward author) and downstream through the CDN tree. Previously only downstream propagation existed, so the post author often never received reactions.</li>
|
|
<li><strong>Auto downstream registration</strong> — Nodes that receive a post via pull sync or push notification automatically register as downstream peers. This ensures engagement diffs reach all holders without manual registration.</li>
|
|
<li><strong>Upstream tracking</strong> — New <code>post_upstream</code> table records which peer each post was received from, enabling engagement to flow back toward the author hop-by-hop through the CDN tree.</li>
|
|
<li><strong>N2/N3 freshness</strong> — TTL reduced from 7 days to 5 hours. Full N1/N2 state re-broadcast every 4 hours catches missed diffs. Disconnect cleanup already removes departed peer's contributions immediately.</li>
|
|
<li><strong>Bootstrap isolation recovery</strong> — 24 hours after startup, nodes check if the bootstrap anchor is within their N1/N2/N3 reach. If absent, they reconnect and request referrals. The bootstrap is added to sticky N1 for 24 hours so mesh peers discover it via diffs, bridging isolated network segments back together.</li>
|
|
<li><strong>Following: Online/Offline</strong> — People tab splits followed peers into Online and Offline sections with “Last online” timestamps. DMs no longer appear in My Posts.</li>
|
|
<li><strong>Video playback</strong> — Videos now play correctly in-app on both desktop and Android.</li>
|
|
<li><strong>On-demand blob fetch</strong> — Media attachments that haven't synced locally are fetched from peers when you view them.</li>
|
|
<li><strong>Image loading fix</strong> — Asset protocol properly configured for streaming images from disk. Fallback to IPC if asset protocol fails.</li>
|
|
<li><strong>Image lightbox</strong> — Click any image to view full-size. Escape or click to close.</li>
|
|
<li><strong>File attachments</strong> — Attach any file type to posts. Non-media files show as download buttons with a trust warning prompt.</li>
|
|
<li><strong>Audio player</strong> — Audio attachments display with native playback controls.</li>
|
|
<li><strong>Video download</strong> — Download button under video player saves to Downloads folder.</li>
|
|
<li><strong>Share link fix</strong> — Fixed redirect to <code>0.0.0.0</code> — unroutable addresses are now skipped, falling through to QUIC proxy correctly.</li>
|
|
<li><strong>TCP hole punch protocol</strong> — New wire messages (TcpPunchRequest/Result) enable direct HTTP serving from nodes to browsers, reducing proxy load on itsgoin.net.</li>
|
|
<li><strong>Tiered web serving</strong> — Share links try direct redirect to HTTP-capable post holders before falling back to QUIC proxy.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.3.1 — March 13, 2026</div>
|
|
<ul>
|
|
<li><strong>Engagement sync</strong> — Pull sync now fetches reactions, comments, and policies from peers. Previously these only propagated via real-time push.</li>
|
|
<li><strong>Profile push fix</strong> — Name and bio changes now sent to all connected peers immediately, not just audience members.</li>
|
|
<li><strong>Auto-sync on follow</strong> — Following someone immediately pulls their posts into your feed.</li>
|
|
<li><strong>Popover UI</strong> — Notifications, diagnostics, and message threads open as overlay windows instead of inline sections.</li>
|
|
<li><strong>Notification settings</strong> — Configure message, post, and nearby-user notifications from Settings.</li>
|
|
<li><strong>Smart DM polling</strong> — Message refresh rate scales with conversation recency (5s–daily).</li>
|
|
<li><strong>Reaction display</strong> — Posts show top 5 emoji reactions + total response count.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.3.0 — March 12, 2026</div>
|
|
<ul>
|
|
<li><strong>Full rename distsoc → ItsGoin</strong> — ALPN, crypto contexts, data paths, Android package ID all changed. Clean break — incompatible with prior versions.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.11 — March 12, 2026</div>
|
|
<ul>
|
|
<li><strong>Engagement system</strong> — Reactions (public + private encrypted), inline comments with ed25519 signatures, and author-controlled comment/react policies. Full UI with emoji picker, reaction pills, and expandable comment threads.</li>
|
|
<li><strong>CDN tree for all posts</strong> — New <code>post_downstream</code> table gives every post (including text-only) a propagation tree. Engagement diffs flow through the file layer via BlobHeaderDiff (0xD0), never mesh.</li>
|
|
<li><strong>4 new wire messages</strong> — BlobHeaderDiff (0xD0), BlobHeaderRequest/Response (0xD1/0xD2), PostDownstreamRegister (0xD3). Policy enforcement in handlers (blocklist, audience-only, permission checks).</li>
|
|
<li><strong>Thread splitting</strong> — Headers exceeding 16KB automatically split oldest comments into linked thread posts, keeping engagement propagation lightweight.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.10 — March 12, 2026</div>
|
|
<ul>
|
|
<li><strong>Per-family NAT classification</strong> — IPv4 and IPv6 public reachability detected independently. Fixes false "public (v4+v6)" when only IPv6 is public, which was silently breaking IPv4 hole punches.</li>
|
|
<li><strong>STUN always runs</strong> — IPv6-only anchors now correctly probe their IPv4 NAT type instead of assuming "Public". Only <code>--bind</code> (explicit server) skips STUN.</li>
|
|
<li><strong>Anchor address fallback</strong> — Anchors without <code>--bind</code> or UPnP now advertise their public IPv6 address, so peers save them in known_anchors for preferential reconnection.</li>
|
|
<li><strong>Bootstrap deprioritization</strong> — Discovered anchors are tried before hardcoded bootstrap anchors at startup, reducing bootstrap server load as the network grows.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.9 — March 12, 2026</div>
|
|
<ul>
|
|
<li><strong>ConnectionManager actor redesign</strong> — Replaced global mutex with actor pattern (ConnHandle + ConnectionActor). Network operations no longer block each other — 14 I/O code paths that previously held the lock for up to 15 seconds now run concurrently.</li>
|
|
<li><strong>60+ call sites migrated</strong> — All network and node code uses the new lock-free ConnHandle API. Public mutex accessor removed.</li>
|
|
<li><strong>I/O extraction</strong> — Broadcast, push, pull, relay, anchor register, and address resolution all execute outside state locks.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.8 — March 11, 2026</div>
|
|
<ul>
|
|
<li><strong>NAT filter probe</strong> — Anchor probes your NAT filtering type (address-restricted vs port-restricted) by attempting to reach you from a different source port. Eliminates unnecessary port scanning for the majority of connections.</li>
|
|
<li><strong>Role-based NAT traversal</strong> — Each side now takes the correct role based on its NAT profile: EIM nodes punch every 2s (stable port), EDM nodes walk outward at 100/sec (opening firewall entries). Previous burst-scan design replaced with steady ~100 ports/sec outward walk.</li>
|
|
<li><strong>IPv4 vs IPv6 public</strong> — Public reachability now distinguished by protocol family (v4 only, v6 only, v4+v6). Prevents false assumptions when only one family is public.</li>
|
|
<li><strong>Scanning cleanup</strong> — Scan tasks properly cancelled via JoinSet between attempts. Previous design spawned 37K+ fire-and-forget tasks.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.7 — March 11, 2026</div>
|
|
<ul>
|
|
<li><strong>Focused port scanning</strong> — Scanning now targets only the anchor-observed IP address instead of all self-reported addresses, reducing wasted scan budget on unreachable VPN/cellular IPs.</li>
|
|
<li><strong>Scan on unknown NAT</strong> — Port scanning now triggers when peer NAT type is unknown (e.g. peer running older version), not just when explicitly EDM.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.6 — March 11, 2026</div>
|
|
<ul>
|
|
<li><strong>Anchor self-verification</strong> — Nodes with public addresses now verify their reachability via cold-connect probes from N2 strangers. Two consecutive failures revoke anchor status.</li>
|
|
<li><strong>Advanced NAT traversal</strong> — Hard+hard NAT pairs are no longer skipped. Port scanning (tiered: ±500, ±2000, full ephemeral range) attempts direct connection before falling back to relay.</li>
|
|
<li><strong>NAT profile sharing</strong> — Peers exchange mapping (EIM/EDM) and filtering (open/port-restricted) classification during connection, enabling smarter hole punch decisions.</li>
|
|
<li><strong>Behavioral NAT inference</strong> — Filtering type is refined from actual connection outcomes — no unreliable upfront probing needed.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">v0.2.3 — March 11, 2026</div>
|
|
<ul>
|
|
<li><strong>NAT type detection</strong> — STUN probing on startup classifies your NAT as Public, Easy, or Hard. Shared with peers during connection.</li>
|
|
<li><strong>Skip futile hole punches</strong> — When both peers are behind hard/symmetric NATs, skip the 30-second hole punch attempt entirely.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">March 10, 2026 (v2)</div>
|
|
<ul>
|
|
<li><strong>Anchor advertised address</strong> — Anchors advertise their stable bind address in initial exchange, so peers always store the correct reconnection address.</li>
|
|
<li><strong>Observed address notification</strong> — Peers tell each other "I see you at <ip:port>" during connection — lightweight STUN-like address feedback.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">March 10, 2026</div>
|
|
<ul>
|
|
<li><strong>UPnP port mapping</strong> — Devices behind NAT routers automatically request a port forward via UPnP, becoming directly reachable without manual configuration.</li>
|
|
<li><strong>Auto-anchor promotion</strong> — Devices with a successful UPnP mapping self-declare as anchors, improving bootstrap diversity for all peers.</li>
|
|
<li><strong>Hole punch fix</strong> — Target-side hole punch connections were silently discarded; now properly registered as sessions so both sides of a NAT punch succeed.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">February 24, 2026 (v2)</div>
|
|
<ul>
|
|
<li><strong>Request Referrals button</strong> — On-demand peer referral requesting in Network Diagnostics.</li>
|
|
<li><strong>Docker bridge IP filtering</strong> — Peer introductions no longer leak Docker bridge IPs.</li>
|
|
<li><strong>Keepalive fix</strong> — Sender-side last_activity update prevents false zombie detection.</li>
|
|
<li><strong>Message threads</strong> — DM conversations grouped by partner with expandable thread view.</li>
|
|
<li><strong>Mesh/reach diagnostics</strong> — Peer cards show reach level badges (Mesh/N1/N2/N3).</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">February 24, 2026</div>
|
|
<ul>
|
|
<li><strong>Audience request button</strong> — "Ask to join audience" on followed peers.</li>
|
|
<li><strong>DMs filtered from feed</strong> — Direct messages show only in Messages tab.</li>
|
|
<li><strong>Peer bios displayed</strong> — Bio text shown below peer names in People tab.</li>
|
|
<li><strong>People tab auto-refresh</strong> — Follows, peers, audience refresh every 10 seconds.</li>
|
|
<li><strong>Button feedback</strong> — Loading state and toast confirmation on diagnostics refresh.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">February 23, 2026</div>
|
|
<ul>
|
|
<li><strong>Fix connection lock contention</strong> — QUIC connect no longer blocks all tasks.</li>
|
|
<li><strong>Image attachments display</strong> — Fixed CSP blocking blob: URLs.</li>
|
|
<li><strong>Non-blocking startup</strong> — Referral connections run in background.</li>
|
|
<li><strong>Connect timeout</strong> — 15-second cap on connection attempts.</li>
|
|
<li><strong>Android foreground service</strong> — Mesh stays alive in background.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">February 20, 2026</div>
|
|
<ul>
|
|
<li><strong>IPv4-mapped address fix</strong> — Normalized dual-stack addresses for NAT traversal.</li>
|
|
<li><strong>Mesh keepalive</strong> — 30-second pings prevent zombie detection on idle connections.</li>
|
|
<li><strong>Audience management</strong> — Approve/Deny/Remove audience members.</li>
|
|
<li><strong>Network diagnostics overhaul</strong> — Summary grid, peer cards, connection breakdown.</li>
|
|
<li><strong>Manual rebalance</strong> — Trigger immediate mesh rebalancing from Settings.</li>
|
|
<li><strong>Reset all data</strong> — Clear local data while preserving identity key.</li>
|
|
</ul>
|
|
|
|
<div class="changelog-date">February 19, 2026</div>
|
|
<ul>
|
|
<li><strong>Reactive mesh growth loop</strong> — New peers connect within seconds.</li>
|
|
<li><strong>Anchor matchmaking only</strong> — Anchors introduce peers, never proxy bytes.</li>
|
|
<li><strong>Parallel hole punching</strong> — NAT traversal tries all addresses simultaneously.</li>
|
|
<li><strong>Relay-observed address injection</strong> — Fixes NAT-to-NAT hole punching.</li>
|
|
<li><strong>Growth loop introduction fallback</strong> — Bilateral hole punching when direct fails.</li>
|
|
</ul>
|
|
</div>
|
|
</section>
|
|
|
|
<section>
|
|
<h2>Help build ItsGoin</h2>
|
|
<p>This project is open source and could use your help. Whether you're a developer, tester, or just have ideas — jump in.</p>
|
|
<p style="margin-top: 0.75rem;">
|
|
<a href="https://discord.gg/pCjMbY9PmN" class="btn btn-primary" style="margin-right: 0.5rem;">Join the Discord</a>
|
|
<a href="https://git.itsgoin.net/Sologretto/itsgoin" class="btn btn-secondary">Source code</a>
|
|
</p>
|
|
</section>
|
|
</div>
|
|
|
|
<footer>
|
|
<p>ItsGoin — Apache 2.0 License — <a href="https://itsgoin.com">itsgoin.com</a> · <a href="https://discord.gg/pCjMbY9PmN">Discord</a> · <a href="https://git.itsgoin.net/Sologretto/itsgoin">Source Code</a></p>
|
|
</footer>
|
|
</body>
|
|
</html>
|