Glassblue

A Bluesky client
built for iOS 26.

Glassblue is a native SwiftUI client for the AT Protocol, leaning hard on iOS 26's Liquid Glass design language. Real glass surfaces, connected threading, inline media playback, and the kind of polish you'd expect from a first-party Apple app — nothing in a WebView, nothing transcribed from Material.

Coming to the App Store In review See features
Built around Bluesky app passwords. OAuth support coming as the AT Proto ecosystem stabilizes.
Home
Jay @jay.bsky.team 2h
hot take: the best part of Swift 6 isn't strict concurrency itself — it's that the compiler tells you about data races that have been lurking in your codebase for years.
Alice @alice.bsky.social 1h
hard agree. caught three real races in our codebase last week — two of them in code that's been "working" since 2019.
4 12 184

What makes Glassblue different

Three things you notice in the first five seconds.

Liquid Glass, top to bottom

SwiftUI throughout. Real glass surfaces via .glassEffect(), GlassEffectContainer, and tabBarMinimizeBehavior — no ultraThinMaterial mimicry, no UIKit wrapping, no web view.

Threads that show both sides

Replies in the timeline render their parent inline, joined by a connected thread line. You see the conversation, not just one side of it — Twitter/Bluesky-web style, but native.

Media that just plays

Bluesky videos and animated GIFs autoplay muted on loop, just like Twitter. Tap an image for the fullscreen viewer with one-tap save to Photos. Toggle autoplay off if you prefer.

Designed for the way iOS works

Glassblue follows iOS conventions instead of fighting them. The details that make first-party apps feel right are wired into every screen.

Reading

  • Custom feed tabs at the top of Home — Following plus every feed-generator you've pinned in Bluesky, with per-tab pagination preserved when you switch.
  • Tap Home to scroll up, tap again to refresh — the way Twitter, Instagram, and Apple's own apps have always worked.
  • Scroll-driven minimize for the tab bar and feed selector, so reading reclaims the full screen.
  • Skeleton placeholders that mirror the real layout, so the swap to loaded content doesn't reflow.
  • Dynamic Type honored, plus a built-in text-size override for when you want bigger or smaller than the system default.

Posting

  • Compose, reply, quote — proper thread-root resolution; quote posts can be text-only, image-only, or text + images, all via recordWithMedia.
  • Attach up to 4 images via PhotosPicker with per-image alt text, off-main JPEG re-encoding to fit Bluesky's blob ceiling.
  • Facet detection — URLs, @mentions (resolved to DIDs at submit), and #hashtags become tappable in the post.
  • Optimistic likes & reposts with mutation propagation across every cached feed, so a tap in Following reflects in Discover.
  • Haptics where they belong — light on action-bar taps, medium on send, success notification when an action lands, error notification on failure.

People

  • Immersive profile banners that paint behind the nav bar, with the system back chevron floating over them.
  • Follow, mute, block, report — all wired with optimistic UI and proper destructive-action confirmation dialogs.
  • Search with a system-level magnifying glass affordance and a People / Posts scope picker; results stream in parallel.
  • Grouped notifications — consecutive likes and reposts on the same post collapse into one row, matching Bluesky's official client.

Polish

  • Save images to Photos from the fullscreen viewer in one tap — minimum-privilege add-only permission, original format preserved.
  • Dark mode + appearance picker — System, Light, or Dark, persisted independently of iOS.
  • Accessibility baseline — 44pt tap targets, VoiceOver labels on avatars and timestamps (announces "2 minutes ago" instead of "2m"), Reduce Motion honored.
  • Quote-post and link cards use a true punched-out look — pure black/white background, thin primary outline — instead of recessed grey blocks.

Where your data goes

No middleman server, no analytics SDK, no error-reporting service. Glassblue talks directly to your PDS — that's it.

Credentials Bluesky app passwords are stored in the iOS Keychain, scoped to the device. Glassblue never sees them after the create-session call.
API calls Direct from your device to your PDS (defaults to bsky.social, custom hosts supported). No proxy.
Telemetry None. No analytics, no crash reporter, no third-party SDKs. The app doesn't phone home.
Photos library Read-write access is never requested. The save-to-Photos feature uses add-only authorization, the least-invasive scope iOS offers.