Skip to content

0.19.0

Choose a tag to compare

@github-actions github-actions released this 19 Jun 21:27
· 5 commits to master since this release
  • 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.