Their algorithms optimize for profit. Optimize yours for life.
Capture your social/rss/newsletter feeds locally. Tune the ranking algo yourself. Sync across devices. No cloud dependency, no tracking, no algorithmic manipulation.
- π Unified feed β X, RSS, YouTube, newsletters, podcasts in one timeline
- βοΈ Your ranking β Weight by recency, author, topic, custom semantics. Not engagement
- π Local-first β All data on your device, we can't see it
- π Cross-device sync β Your devices stay in step directly, with your own cloud storage as backup
- π Save for later β Capture any URL with reader view
- β Ulysses mode β Block platform feeds, stay intentional
- π Friend map β See where your people are posting from
Freed uses SQLite everywhere. Freed Desktop and the headless Primary share one native Rust core. The PWA runs official SQLite WebAssembly over OPFS. Every view uses bounded typed queries, and synchronization exchanges normalized signed logical objects rather than database files or a monolithic Library document. See the Library Core architecture and the detailed contract.
Capture Layers Sync Clients
βββββββββββββββββ βββββββββββββββββ βββββββββββββββββ
X, RSS, Facebook, β Sync + Storage β Desktop App
Instagram, etc. Local + Cloud Phone PWA
Extension
One active Primary admits canonical mutations. The Primary may run inside Freed Desktop or the headless service. Freed Desktop and PWA followers keep fully queryable local SQLite replicas, apply edits through durable signed intent overlays, and choose independently which large content to stream, cache, pin offline, or exclude.
| Package | Sources | Method | Status |
|---|---|---|---|
capture-x |
X/Twitter | GraphQL API | β Complete |
capture-rss |
Blogs, Medium, Substack, YouTube, podcasts, Mastodon, Reddit, GitHub | RSS/Atom | β Complete |
capture-save |
Any URL | Readability extraction | β Complete |
capture-facebook |
DOM scraping | Phase 7 | |
capture-instagram |
DOM scraping | Phase 7 | |
capture-linkedin |
DOM scraping | Phase 12 | |
capture-tiktok |
TikTok | TBD | Phase 12 |
capture-threads |
Threads | TBD | Phase 12 |
Marketing site, monorepo, sync schema, CI/CD.
capture-x and capture-rss packages with OpenClaw skill wrappers.
URL capture with Readability extraction.
Phase 4: Sync Layer π§
Local WebSocket relay + cloud backup.
HIGHEST PRIORITY β Native apps (macOS, Windows, Linux, iOS, Android) bundling capture, sync, and reader UI.
Phase 6: PWA π§
Mobile companion at app.freed.wtf, with the dev channel at dev-app.freed.wtf.
DOM scraping via headless browser.
Location-based social view.
Quick saves and Ulysses mode.
Onboarding, statistics, accessibility.
Headless capture via OpenClaw CLI (no Desktop App required) + Omi wearable integration to surface voice memories and meeting summaries as feed items.
LinkedIn, TikTok, Threads, Bluesky, Reddit, YouTube.
Compose and publish through your own site.
- One active Primary: Freed Desktop or the headless service admits canonical mutations through the same native Library Core
- No Freed content backend: Synchronization uses storage owned by the user
- SQLite everywhere: Every client queries a local SQLite Library through one generated contract
- Shared React views:
packages/uiconsumes platform-neutral typed query and mutation adapters - Typed capture boundary: Provider packages normalize bounded values and submit registered mutations
- Ranking in the Primary: Canonical scores are materialized through signed Primary operations and queried locally on every client
- Logical-object sync: Devices exchange signed normalized records and selective content, never database files
- Next.js for the marketing site: The public site remains isolated in the
wwwlane
devis the default integration branchmainis the production promotion branch- Production web surfaces live at
freed.wtfandapp.freed.wtf - Dev web surfaces live at
dev.freed.wtfanddev-app.freed.wtf
# Match the repo toolchain
nvm use
# Clone and install dependencies
git clone https://github.com/cyberspatial/freed.git
cd freed
npm run setupUse ./scripts/worktree-preview.sh pwa or ./scripts/worktree-preview.sh desktop from a product worktree. The helper marks PWA and Freed Desktop previews as feature previews, accepts local legal gates, and seeds sample data so the app opens ready for inspection.
npm run website:dev # Dev server at http://localhost:3000
npm run website:build # Production buildnpm run pwa:dev # Dev server at http://localhost:5173
npm run pwa:build # Production build
npm run pwa:test # Run Playwright testsRequires Rust and platform-specific dependencies. See Tauri prerequisites.
npm run desktop:dev # Dev mode with hot reload
npm run desktop:build # Build distributable (DMG, EXE, etc.)cd skills/capture-rss
npx tsx src/index.ts add https://simonwillison.net # Subscribe to feed
npx tsx src/index.ts sync # Fetch new items
npx tsx src/index.ts recent 20 # Show recent items
npx tsx src/index.ts list # List subscriptionscd skills/capture-x
npx tsx src/index.ts status # Auth status
npx tsx src/index.ts mode mirror_blacklist # Set capture mode
npx tsx src/index.ts sync # Fetch timeline
npx tsx src/index.ts recent 20 # Show recent itemscd skills/capture-save
npx tsx src/index.ts add https://example.com/article # Save URL
npx tsx src/index.ts add https://... --tags "tech" # Save with tags
npx tsx src/index.ts list # List saved items
npx tsx src/index.ts search "keyword" # Search saved content# From repo root
npm run build # Build all packages
npm run typecheck # Type-check all packagesOperational settings (~/.freed/config.json):
{
"capture-x": { "pollInterval": 5, "browser": "chrome" },
"capture-rss": { "pollInterval": 30 }
}Subscriptions & preferences sync across your devices.
Freed is open source. See CONTRIBUTING.md.
For Freed Desktop development without automatic sample data, set
FREED_AUTO_SEED_SAMPLE_DATA=0 in packages/desktop/.env.local and restart the
dev server, or run FREED_AUTO_SEED_SAMPLE_DATA=0 npm run tauri:dev from
packages/desktop. Hot reload and native APIs stay enabled. The flag also
disables automatic seeding in Desktop feature previews. Clear existing samples
through Settings; manual sample population still works. See the
Desktop development guide.
Areas where we need help:
- Desktop app UI
- Additional capture layers
- Sync layer implementation
- Testing
Freed operates locally using your own authenticated sessions. All data stays local. We have no servers and collect no data.
See docs/LEGAL.md.
MIT. See LICENSE.
- Your attention belongs to you
- Algorithms should serve your goals, not theirs
- Social media should facilitate human connection, not replace it
Read the manifesto at freed.wtf/manifesto.
Built for humans, not algorithms.
On iOS, Freed uses the default Home Screen status bar and an invisible theme-aware color extension to keep the toolbar sharp without extra padding. If an existing shortcut retains native blur, add a replacement from Safari with Open as Web App enabled. Keep the original until the replacement and your library work; replacement shortcuts can have separate storage. Do not clear Safari data or delete the original library.
