How Bluesky makes its logo appear only in screenshots

A blogger who takes screenshots of Bluesky posts to save or share them noticed something odd: a Bluesky logo sits in the corner of the screenshot, but that same logo is never visible while actually using the app, where a "Follow" button occupies the spot instead. Suspecting some kind of last-moment swap triggered by the screenshot gesture, the author went looking in Bluesky's open source code and found the answer in a file called GrowthHack.tsx, introduced in January 2026 by a contributor going by mozzius. The file depends on a package, also by mozzius, called expo-privacy-sensitive. That package renders the actual content, in this case the "Follow" button, inside a native iOS UITextField with its isSecureTextEntry property set to true, the same flag apps use to mask a password field, and draws that content into the field's underlying layer. iOS treats any UITextField marked isSecureTextEntry as sensitive and blanks it out whenever the system detects a screenshot is being taken. Blanking the field, rather than hiding the content behind it, is exactly what lets the logo show through in the captured image: what was drawn onto the layer is hidden once the field itself goes blank. On platforms other than iOS, the package skips the trick entirely and just renders the content normally, without any masking. The blogger also tested switching between apps mid-gesture and found the effect did not appear there, and offers a guess, explicitly flagged as speculation, that iOS captures the app-switcher preview at the start of the gesture without ever triggering the blanking behavior, and that there is no live UITextField instance present to react to it at that moment. Digging further, the author found the technique is not new: Telegram uses a similar approach for its "secret" chats, and so does Signal, which the author takes as a sign Apple is unlikely to close the door on it soon. The author also notes that commenters in the discussion thread where the feature was added mostly did not like it, before that thread was locked, and leaves the question of whether it's a nifty trick or an abuse of the API unresolved, saying only that he thinks it's cute.

Key facts

  • A blogger found the Bluesky logo appears in the corner of screenshots of posts, but is replaced by a "Follow" button in the live app.
  • The behavior traces to GrowthHack.tsx, introduced in Bluesky's open source app in January 2026 by contributor mozzius, which depends on their package expo-privacy-sensitive.
  • The package renders content into a native iOS UITextField with isSecureTextEntry set to true, the flag normally used to mask password fields; iOS blanks that field when it detects a screenshot, which is what lets the layer underneath, the logo, show through.
  • The effect does not appear when switching apps; the author's own, explicitly hedged guess is that iOS captures that preview without triggering the blanking and without a live field instance to react.
  • The trick is not unique to Bluesky: Telegram and Signal use similar techniques for their "secret" chats, which the author says makes an Apple patch unlikely soon.

Why it matters

The trick turns an iOS privacy mechanism into free, organic marketing. Every time someone screenshots a Bluesky post to share it elsewhere, the shared image carries the Bluesky logo, even though the same logo is never shown to the person actually using the app. It costs nothing, requires no user action, and rides on a system behavior (secure-field blanking) that iOS applies automatically.

Who it affects

Bluesky's iOS users, whose screenshots quietly become carriers of the app's branding without their noticing. It also matters to iOS developers more broadly: anyone using isSecureTextEntry to protect genuinely sensitive text should know its blanking behavior can be repurposed for a very different, non-privacy end, and anyone reading Bluesky's code can see exactly how.

How to use it

The mechanism, as reverse-engineered from the code, is to place the content you want to appear only in screenshots (here, a logo) behind a UITextField that has isSecureTextEntry set to true, with the field's own layer rendering its ordinary content (here, the "Follow" button) via the expo-privacy-sensitive package; iOS's own screenshot-detection blanking then does the rest. The source notes this only works on iOS, since the package renders content as-is, without any masking, on other platforms.

How solid is it

The account comes from a blogger who reverse-engineered the behavior directly from Bluesky's own open source repository, naming the specific file (GrowthHack.tsx) and package (expo-privacy-sensitive) and the contributor (mozzius) credited with both. The author repeatedly says he is not an iOS developer, and the explanation for why the effect fails during app-switching is explicitly presented as his own supposition, not a confirmed mechanism.

Risks and caveats

The source never says whether Bluesky's use of the technique is officially sanctioned or was simply added by an individual contributor, and does not resolve the author's own question of whether it is a clever trick or an abuse of an API meant for privacy protection. No iOS or app version numbers are given, nor is it stated which thread the disliking commenters were part of before it was locked. Beyond the general note that other platforms render content without masking, there is no confirmation that Android or the web version of Bluesky are unaffected.

“iOS hides this UITextField by blanking the layer, allowing the Bluesky logo to flutter its wings through”

— the blog post's author