Skip to main content

Changelog

Even death stars have an exhaust vent.

Auto-updated when new builds ship.

Latest

What's New

  • Scraper debug window toggle for Instagram and Facebook

Fixes

  • Exclude draft releases from changelog commit boundary
  • Fixes changelog entries silently dropping features developed during failed build attempts

What's New

  • Anti-detection hardening for social media capture
  • Changelog page, remove frosted glass, fix update banner

Fixes

  • Rquest (used for X API requests) links BoringSSL statically as its TLS implementation
  • UA selection for Facebook happens in fb-auth.ts at connect time (showFbLogin calls selectPlatformUA)
  • Remove capture-x build step from release CI
  • Hide scraper window after FB scrape, stop stealing focus on IG scrape

What's New

  • Add performance debug panel, FPS monitor, and perf benchmarking infrastructure
  • Seed X/Facebook/Instagram sample data and auto-seed in dev mode
  • Social engagement via outbox pattern (like, seen-sync, comment links)

Fixes

  • Restore tracing dependency versions and tighten release script
  • Two TypeScript compile errors blocking the v26.3.802 release build on all four platforms
  • E2E social capture tests and post-migration perf baselines
  • Remove accidentally committed node_modules symlinks and tsbuildinfo

What's New

  • Adds full Instagram feed capture using the same WebView-based architecture as the existing Facebook integration

Fixes

  • Prefixes the unused state parameter with _ in recordSuccess() in packages/capture-instagram/src/rate-limit.ts

What's New

  • Add freed-ship-build command
  • UI polish bundle - tooltips, hover states, scroll reset, save fix, sidebar counts
  • Overhaul dual-column split view
  • Add X and Facebook scrapers with Tauri WebView capture
  • Replace manual cookie entry with native X login window
  • Add sample data seeding + fix PWA build and Automerge worker
  • Add freed-build-feature command documentation
  • Add dual-column reading mode
  • Add Playwright e2e smoke test infrastructure for desktop

Fixes

  • Desktop build errors in x-capture and fb-capture
  • Remove redundant data wrapper from TimelineResponse type
  • Archive cache staleness + scroll-read visibility model

Performance

  • Desktop E2E benchmarks, MiniSearch lazy-build, focus mode fix, eliminate main-thread blocking

Fixes

  • Double-cast window through unknown to satisfy strict TS in mock files

What's New

  • Add X sync pipeline instrumentation and integration tests

Performance

  • Fix feed reader lockup and move PWA Automerge to a Web Worker

Fixes

  • Switch X API to GET, update feature flags, grant fs caps
  • Center feed cards to match skeleton layout

Fixes

  • Remove hardcoded local path from .cargo/config.toml

What's New

  • Add PWA X settings page and fix duplicate search clear button
  • X connection/disconnect/sync is now a dedicated page under Settings > Sources > X, alongside Feeds and Saved Content
  • Complete X/Twitter integration end-to-end
  • Command bar foundation with settings navigation and lower-contrast search
  • Adds a Mark read on scroll toggle to the reader settings section (default: on)
  • Unified two-column Settings dialog with scrollspy and I/O sections
  • Saved content modal, folder import, phased progress, unit tests
  • Add universal full-text search across all sources
  • Phase 8 friends CRM + social graph scaffolding
  • Build out the archive system end-to-end
  • Tighten introducing-freed post, cut technical architecture section

Performance

  • Instant app launch with deferred migrations and skeleton loading
  • Fix UI freeze when entering reading mode

Fixes

  • Resolve TypeScript errors that blocked the release desktop build
  • Add value and cursorType fields to FollowingEntry.content type
  • Stop Automerge undefined writes from crashing RSS and X sync
  • Sidebar section header buttons (SOURCES, LIBRARY, FEEDS) were rendering at 32px while source/feed items were 34px
  • Never assign undefined into Automerge documents
  • PWA UI polish -- header, settings, update check, X settings
  • Increase header toolbar gap from 8px to 24px
  • Uniform header spacing and hide command palette on mobile
  • Correct CSS @import order, hide swipe indicator at rest, polish search hover
  • Trigger update check when button enters viewport, not scrollspy threshold
  • Eliminate init flash and reduce desktop startup serialization overhead
  • Import invoke/isTauri from @tauri-apps/api/core instead of window.__TAURI__
  • Resolve all TypeScript errors breaking the release CI build
  • Auto-update service worker and add purple F favicon
  • Switch mobile feed to window scroll for Safari address bar collapse
  • Highlight Updates nav item on individual post pages
  • Open all How You Can Help links in new tab

What's New

  • Replace emoji sidebar icons with white SVG icons

Fixes

  • Fix update detection and move HTTPS warning before QR/manual forms
  • Startup migration heals untitled feeds + toolbar drag fix (#42)
  • Fix OAuth redirect URI, Google Drive client secret, and offline status
  • Show download progress and post-restart toast for updates
  • Extend drag region to inner header div and spacer

What's New

  • Add bulk unsubscribe and factory reset features
  • Subscribe to RSS feeds from the PWA with deferred metadata

Fixes

  • Remove unused CloudProvider import from MobileSyncTab
  • Make untitled-feed healing bulletproof

What's New

  • Improved UX flow and visual polish in the SyncConnectDialog component in the PWA
  • Adds a /privacy route to the marketing website with a full privacy policy page

Fixes

  • Rewrite Google OAuth proxy as Node.js Lambda
  • Unread count in toolbar header now formats via toLocaleString() (e.g. 1,234 in en-US)
  • On sync, desktop app now re-fetches live XML to recover missing feed titles that were previously stored as untitled

What's New

  • Cloud Sync is now the default tab when the Connect to Desktop dialog opens (was Manual)
  • Adds /privacy to the marketing site at freed.wtf/privacy
  • MDNS discovery, cloud file sync + desktop cloud sync
  • Comprehensive sync debug mode + QR connection diagnostics
  • Secure desktop ↔ mobile pairing with 256-bit token

Fixes

  • Cast rdf.channel before spread in browser.ts
  • Add browser entry with fast-xml-parser parseFeedXml
  • Inline parseCookieString, switch x-auth to /browser imports
  • Add browser-safe subpath export to isolate Node-only code
  • Add sideEffects:false to enable Rollup tree-shaking
  • Remove stale .data wrapper on TimelineResponse
  • Build capture-rss and capture-x before desktop release
  • Rewrite Google OAuth proxy as Node.js Lambda (req/res style)
  • Bypass service worker for API routes; add catch to OAuth exchange
  • Heal untitled feed titles from live XML on sync
  • Format unread count in the Header toolbar button with toLocaleString() so US users see 2,401 instead of 2401

What's New

  • Move X connect UI from sidebar into feed blank state
  • Add per-feed context menu with sync status, rename, and unsubscribe
  • Sync button opens status popover instead of immediate refresh

Performance

  • Lazy-load images, drop backdrop-filter blur, add scroll gutter
  • Eliminate redundant re-renders on feed list scroll

Fixes

  • Deduplicate historical feed items and add link-URL secondary dedup index
  • Parse <guid>/<id> for stable dedup keys, guard docAddFeedItem against clobbering
  • Hide logo in desktop mobile-layout to clear macOS traffic lights
  • Add top padding to first card in feed list
  • Reader toolbar full-width layout and macOS inset constant

Fixes

  • RSS feed persistence, platform capability honesty, desktop UI polish
  • Fix tab strip alignment in AddFeedDialog
  • Fix hero vertical centering and desktop text alignment
  • Fix iOS keyboard occlusion and bottom viewport gap

Fixes

  • IPhone safe-area gaps, desktop sync→settings, traffic light alignment
  • Auto-publish release after all builds complete

Fixes

  • Full iPhone mobile compatibility
  • Read version from package.json instead of npm_package_version
  • Newsletter modal subscribe button scrunched on mobile

What's New

  • Update system, CalVer DDBUILD, UI polish
  • UI polish — settings cleanup, sync unification, sidebar refinements
  • UI overhaul — unified header, draggable sidebar, modal consistency
  • Add early-build disclaimer and clarify app vs desktop roles
  • Deep-linkable /get modal, restore tooltip, disable subscribe
  • Direct platform downloads with override dropdown
  • Redesign Get Freed modal with app links and downloads

Fixes

  • Use case/esac instead of bash 4 associative arrays
  • Include PWA sources in desktop Tailwind content scan
  • Use YY.M.D CalVer to stay within MSI 255 major version limit

What's New

  • Auto-update system, release pipeline, and distribution
  • Clarify hero above-the-fold with platform logos and tighter copy
  • Add sandbox settings to settings.local.json
  • Add @freed/capture-facebook and @freed/capture-instagram packages
  • Mark all as read + unread count in desktop header
  • Feed management tab, improved empty state, fix unused import
  • Per-feed RSS sidebar with unread counts in desktop app
  • Per-feed RSS sidebar with unread counts and feed URL filtering
  • Focus mode (bionic reading) in desktop ReaderView
  • Expand desktop SettingsPanel with ranking weights and display prefs
  • Keyboard navigation in desktop app FeedView
  • Mark all as read + unread count in PWA header
  • Keyboard navigation (j/k/Enter), mark-as-read on open, roadmap fix
  • Background RSS polling + fix desktop TypeScript errors
  • Settings panel with ranking sliders, compact mode, engagement counts
  • Add QR scanner to SyncConnectDialog
  • Virtual scrolling, focus mode, service worker, system tray, content
  • OPML import/export, PWA reader-only architecture, Vite 7 WASM fix
  • Add dynamic background gradients and iOS Safari fixes
  • Make architecture diagram responsive with larger mobile icons
  • Redesign roadmap page with animated architecture diagram
  • Add pull-to-refresh and toast notifications
  • Add settings panel and sync connection dialog
  • Add WebSocket sync relay server in Rust
  • Add Automerge persistence and sync client
  • Add X/Twitter capture integration
  • Add Automerge persistence and native RSS fetching

Performance

  • Load Automerge WASM as separate streamed asset

Fixes

  • Force Automerge base64 entry and use real signing password
  • Skip Automerge WASM patch and fix signing password
  • Resolve WASM patch, signing key, and macOS codesign issues
  • Switch from bun to npm and drop empty signing password
  • Correct NSIS installMode location and Windows tsc resolution
  • Resolve release workflow build failures
  • Layout overhaul — viewport fill, internal scroll, sidebar polish
  • Sidebar feeds list scrolls internally, app fills viewport
  • Update button text and comment out motion paragraph
  • Correct double-cast in toggleSaved to satisfy TypeScript strict checks
  • Sync pipeline, X capture wiring, save quick action on cards
  • Wire onAddFeed and hasFeedsSubscribed props from FeedView
  • Enhance iOS Safari compatibility with background adjustments
  • IOS Safari viewport height with svh/dvh cascade
  • Move safe area handling to layout wrapper
  • IOS Safari safe area support + remove parallax
  • Restore html/body background for iOS Safari compatibility
  • Honest copy and interaction affordances
  • IOS Safari bottom bar floats over page gradients
  • Update descriptions in HowItWorks component for clarity
  • Add iOS Safari safe area support for edge-to-edge display
  • Use Floating UI for cursor-following tooltip
  • Center connector dots between HowItWorks cards
  • Set correct output directory for Next.js build
  • Explicitly set nextjs framework in vercel.json
  • Remove GitHub Pages 404.html that breaks Vercel routing
  • Consolidate app directory into src/app