Skip to main content
Question

Paywalls v2: Icon components (e.g. close button) have no accessibility label — unlike Image components

  • August 2, 2026
  • 4 replies
  • 34 views

Forum|alt.badge.img

Following up on Tarek's answer in the closed thread "Accessibility configuration support in Paywalls?" (community.revenuecat.com/sdks-51/accessibility-configuration-support-in-paywalls-7709) - that thread is closed for comments, so filing the concrete example he asked for as a new post.

 

Component: the built-in paywall close (X) button, a `type: icon` component (icon_name "x"), not an image.

 

Issue 1 - no accessibility label field: Image components support alt text (confirmed via the media gallery's "Image preview" panel). Icon components have no equivalent field anywhere in the builder - checked the Icon, Button, and Stack property panels for the close button, none of them expose a label/content-description field.

 

Issue 2 - Android traversal order: on Android the close button also renders after the entire scrollable body content in the accessibility tree (confirmed via adb shell uiautomator dump on a real device with TalkBack on), even though the paywall's own component JSON declares "header" (containing the close button) before "stack" (body). A TalkBack user has to swipe through the full pricing/feature/CTA list before ever reaching it - in practice indistinguishable from it never getting focus.

 

Together these make the close button effectively unreachable on Android and generically-labeled ("button") on iOS VoiceOver.

 

Requests:

1. Add alt-text/content-description support to icon components (parity with image components).

2. Make Android's rendered traversal order consistent with the declared header/stack order in the component JSON.

 

4 replies

guilherme
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • August 3, 2026

Hey ​@Alperen Acikgoz - thanks for following up on this.

I've passed the two points on to our Paywalls team internally, and I'll keep nudging on our side.

As a potential workaround (untested, but trying to unblock you as is), could you try putting a Text element inside the same Button as the Icon at a very small font size. Screen readers read the text as the button's label. We haven't tested this on device so I can't promise how it renders at your sizing, but it should get you a labelled control without reworking your header!

On the Android traversal order, could you share the project and Paywall you tested on, along with which RevenueCat SDK and version you're on (native Android, or a hybrid like Flutter, React Native or KMP), plus the device and Android version you saw it on? 

If you'd rather not post those publicly, just feel free to open a Support Ticket and reference this thread too.


Forum|alt.badge.img

Hey ​@guilherme , thanks for looking into this.                                                                                                                                                                                                                                      
- Project ID: proj811db09f                                                                                                                            
- App: Revela (Android, Play Store) , package `org.alpps.revela`                  
- Paywall: "Revela Pro" (ID: pwfeb75a7662284e59)

- sdk - purchases-kmp (Kotlin Multiplatform) 3.3.1
- Test device:  Xiaomi (MIUI), model M2101K7BNY, TalkBack enabled

 

Text element inside the same Button as the Icon at a very small font size.

The minimum text size for text elements is 12sp. Unfortunately, this wouldn’t be a WCAG-compliant solution. The close button’s content description and role need to be built in, so that it can be read as: “Close button, double tap to activate.”


Tarek
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • August 10, 2026

Hi ​@Alperen Acikgoz ,

Thanks for the details, they were exactly what I needed.

One update: the next purchases-ios release will add an accessibility label that the SDK derives from the button action. A close button with the close_workflow action reads as "Close". Your close button uses that action, so VoiceOver will announce it. You will need a purchases-kmp release that includes that iOS version. There is no Android equivalent yet, and I do not have a date for one.

I sent both of your requests to our Paywalls team, with your project, paywall and device details. I will come back here as soon as I have an answer on whether we plan to support them.

Let me know if you have any other questions.

Have an excellent day.

Best regards,


Tarek
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • August 12, 2026

Hey ​@Alperen Acikgoz 

I heard back from the engineering team. Thank you again for this thorough report.

The traversal order bug is filed internally and we're working on fixing it.

The team also acknowledged the points you made and improving accessibility is definitely on our roadmap as well, although I can't share an ETA yet.

Let me know if there's anything else I can help with!

Best,