You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Notifications now carry the actor's avatar and a media thumbnail. The API's notification payload gained the actor avatar_url and the target tweet's media, so the native clients show each actor's face beside the action chip and a rounded thumbnail (with a play glyph on videos) when a notification is about a post with attachments — no longer a flat, faceless list.
A batch of native-client fixes across iOS and macOS. Opening a reply no longer flashes the whole thread and folds it in — the focal tweet shows immediately with replies settling under it. Full-screen video now plays with sound (the audio session routes through .playback); inline feed clips stay muted. Tweets with several attachments offer "Save all" plus a per-item list instead of only the first. The Postcard composer gained a Thread toggle that stacks the whole root→focal reply chain under one continuous accent bar, matching the TUI's thread screenshot. The "collecting tweets… N/25" loader now counts up live as the filter classifies each tweet. Notifications got a loading spinner, and "Liked by" is hidden on tweets that aren't your own (X only exposes your own likers).
The iOS tab bar and Home feed got a smarter, stickier UX. The Home tab now relabels itself "Following" (with the right icon) while in Following mode instead of always reading "For You", and double-tapping it toggles For You ↔ Following. The Edit Tabs screen can finally add tabs — the green "+" on each available tab works now — not just remove them. The "Originals only" filter and the For You/Following choice persist locally across launches, so the feed reopens exactly where you left it instead of resetting. The confusing "N ↑" nav counter is now a clear "⌄ N" pill that appears only when there are unread tweets below and is hidden otherwise.
The iOS app can now render any tweet as a shareable postcard, matching the TUI's screenshot feature. A new "Postcard…" entry in the tweet context menu (feed and thread) opens a composer that renders the tweet as a beautiful share image: a left accent bar, the author's avatar + name/handle/verified badge, the body in a large editorial font, photo media (and video posters), and an unrager watermark. Pick from seven themes — Glass, Synthwave, Cutout, Moss, Blueprint, Arcade, and Match App (which follows the live light/dark appearance) — with the choice persisted across sessions, and toggle the display name and a metrics row (replies/reposts/likes/views) live. Save the retina-crisp image to Photos, Share it through the system sheet, or Copy it to the clipboard.
The API now reports each photo/video's real dimensions so native clients can size attachments to their true aspect ratio. Tweet media gained width/height fields, parsed from X's original_info (photos) and video_info.aspect_ratio (videos/GIFs). The iOS feed no longer letterboxes every image into a fixed 16:9 box — tall portraits and wide panoramas render at their natural shape (clamped to a sane range so nothing dominates the scroll).
Pin cookie extraction to a single browser so unrager never reads the wrong x.com login. When you're logged into x.com in more than one Chromium-family browser, unrager used to take whichever it found first in its detection order. Set cookie_browser = "Vivaldi" in config.toml (or the UNRAGER_BROWSER env var, which wins) and the session loader uses only that browser's profiles — no silent fallback to a stale login elsewhere. unrager doctor marks the pinned source and warns if it has no x.com session. Matching is case-insensitive; an unknown name fails loudly with the list of supported browsers.
The iOS app now renders every media kind, tracks what you've read, and saves/shares tweets natively. The iPhone feed previously showed only a single image per tweet; it now renders polls as labeled vote bars (with a "Final results"/"ends …" footer and the leading option accented), link/article/broadcast/YouTube as bordered tap-through cards (cover image, a red "● LIVE" pill for live broadcasts, a play glyph for video/YouTube), multiple photos as a rounded 2×2 grid with a "+N" overflow tile, and videos/GIFs with muted inline autoplay (GIFs loop) streamed through the server media proxy. Quoted tweets gained the quoted author's avatar and a compact media thumbnail. New: a paginated "Liked by" screen from the tweet context menu; opt-in read-tracking that dims already-seen tweets on Following/Mentions plus a "jump to next unread" button; "Save image/video" to Photos, "Share…", and a "Copy embed link" (fixupx) action; photo attachments in compose via the system picker; a "My Profile" entry; optimistic like; pull-to-refresh and infinite scroll on threads; swipe actions (Like / Reply / Ask) and hardware-keyboard shortcuts (⌘N new tweet, ⌘R refresh, ⌘F search); and VoiceOver labels across cell controls and media.
Native iOS and macOS apps. unrager now has first-class native clients — a UIKit iPhone app (ios/) and an AppKit Mac app (macos/), both on the iOS/macOS 26 Liquid Glass design language, sharing a UnragerKit Swift package (models, networking, SSE, image pipeline, logging). They're thin clients over unrager serve (pair with Tailscale and read every feed from your phone), with feature parity: all seven sources, threads, profiles, compose/reply, like, media, and the rage-filter/ask/brief/translate LLM features over SSE. They aren't App Store apps (unrager uses your own X session) — install via developer/ad-hoc signing on iOS and a notarized DMG on macOS; see ios/scripts/ and README.md.
The Dioxus web/PWA client is gone — unrager serve is now an API-only server for a native iOS app. The crates/unrager-app web client (and its experimental dx bundle web/iOS/Android targets) has been removed in favor of a first-class native iOS app living in ios/. unrager serve no longer embeds or serves a web UI; it exposes only the /api/* HTTP surface — the same sources, tweet/thread/profile reads, compose/reply, like, media proxy, seen/session/filter state, and filter/ask/brief/translate SSE streams — that the native client consumes. The serve --open flag is removed (there's no page to open), and dropping the embedded WASM bundle and rust-embed makes the full install smaller.