Changelog
Even death stars have an exhaust vent.
Auto-updated when new builds ship.
v26.3.903
LatestWhat'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
v26.3.804
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
v26.3.703
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
v26.3.702
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
v26.3.601
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
v26.3.504
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
v26.3.502
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
v26.3.303
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
v26.3.302
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
v26.3.300
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
v26.3.200
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
v26.3.104
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
v26.3.103
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
v26.3.102
Fixes
- IPhone safe-area gaps, desktop sync→settings, traffic light alignment
- Auto-publish release after all builds complete
v26.3.101
Fixes
- Full iPhone mobile compatibility
- Read version from package.json instead of npm_package_version
- Newsletter modal subscribe button scrunched on mobile
v26.3.100
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
v0.2.0
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