Guide
In-App Feedback Widgets Are Built for Web - Here's the Mobile-Native Alternative
Why a JS embed can't live inside an App Store-distributed app, and what to use instead.
Search "feedback widget" and nearly every result is the same shape: a JavaScript snippet you paste before `</body>` on a website. Hotjar, Intercom, Zendesk's Web Widget, Sentry's User Feedback widget, even Canny's own embeddable widget - all of them assume there's a web page to inject into. That's a reasonable assumption, because most feedback-widget buyers do have a website. But if what you're actually building is a native iOS app, none of these run where your users are. There's no script tag inside a Swift app.
This isn't a knock on those tools - they're well-built for what they do. It's a category mismatch. Here's why the web-widget model breaks for native apps, and what to reach for instead.
What web feedback widgets do well
Worth saying plainly, because the web-widget category is mature and the tools are genuinely good at their job:
- Zero-friction install. One script tag, no build step, no app store review cycle. Ship a widget to production in minutes.
- Session replay and heatmaps. Tools like Hotjar pair the feedback widget with screen recordings and click maps - you see exactly what the user was doing when they left feedback, not just the text they typed.
- Survey and NPS overlays. Triggered by scroll depth, time on page, or exit intent - easy to configure without touching code again.
- Works on any browser, any device, with no separate install per platform.
If your product is a website or a web app, one of these is probably already the right call.
Where the gap is for native iOS apps
A native iOS app doesn't have a DOM, doesn't execute arbitrary script tags, and doesn't render HTML by default. To get a web widget "into" a native app at all, you'd need to embed a WKWebView, point it at a hosted page carrying the widget's script, and render that inside your otherwise native UI. In practice that means:
| Capability | Web widget in a WKWebView | Native iOS SDK (FeedbackOS) |
|---|---|---|
| Runs as native UI, not an embedded browser | No | Yes |
| Works offline / on a flaky connection | No - needs to fetch remote JS | Yes |
| Screenshot + device/OS metadata captured automatically | No | Yes |
| Feels like the rest of your app (fonts, motion, haptics) | No - inherits web rendering | Yes |
| Public roadmap + voting inside the app | Not without a second embed | Yes |
| App Review friction around remote-loaded interactive content | Possible, depends on usage | None - it's a compiled SDK |
Why "just embed it in a WebView" doesn't really work
It's technically possible to wrap almost anything in a WKWebView, so this is the workaround people try first. In practice it fights you the whole way:
- It's a network dependency for a support feature. If the widget's remote JS fails to load - bad connection, CDN hiccup, the user's on a plane - the feedback UI just doesn't appear. The moment a user most wants to report a problem (something's broken) is exactly when you can least rely on a clean network fetch of third-party JavaScript.
- It doesn't feel native. Web-rendered text, web-standard buttons, no native haptics or transitions - a visible seam in an otherwise native app, right at the moment a user is already frustrated enough to file feedback.
- No access to native capture APIs. A web widget running inside a WebView can't reach into the rest of your app to grab a screenshot of what the user was actually looking at, or attach device/OS/app-version metadata automatically - all of which a native SDK gets for free.
- You're maintaining two integrations. The web widget for your marketing site or web dashboard, plus a bespoke WebView wrapper for the app that nobody else has needed to build this way - extra surface area for one feature.
What FeedbackOS does instead
FeedbackOS is a native Swift SDK, not a web widget wrapped in a WebView. It renders as part of your app's own UI:
- Screenshots captured natively, with device and OS context attached - no remote script fetch, no WebView.
- Voting and roadmap rendered as native views that match the rest of your app, not an embedded web page.
- Replies show up inside the app the user already has open, not a separate portal.
- A live "already requested" nudge as someone types - nothing to configure via a web dashboard's trigger rules.
(See our feature request tool guide for why submission-time dedup is the stage most feedback boards skip entirely.)
See the full breakdown on pricing - $99/year founding, flat, unlimited apps.
When a web widget is still the right call
To be fair to the category: if you also run a marketing site, docs, or a web version of your product, keep using a web widget there - that's exactly what Hotjar, Intercom, and the rest are built for, and FeedbackOS doesn't try to replace them. FeedbackOS is scoped to the native iOS app itself, where a script tag was never going to reach anyway.
Founding price is $99/year, locked for life, for the first cohort.
Join the FeedbackOS waitlistFAQ
Can I use a website feedback widget like Hotjar or Intercom inside my iOS app?
Not directly - those widgets are JavaScript embedded into a web page. To show one inside a native app you'd need to wrap it in a WebView, which loses the offline reliability, native feel, and automatic screenshot/metadata capture a native SDK provides.
Why can't I just embed a WebView with the widget in my app?
You can, but it depends on a network fetch of remote JavaScript at the exact moment a user wants to report a problem, doesn't visually match native UI, and can't reach native capture APIs like automatic screenshots.
What's the difference between a web feedback widget and a native iOS SDK?
A web widget is a script tag rendered inside a web page or WebView. A native SDK like FeedbackOS is compiled into the app itself, rendered as native UI, and works offline.
Does FeedbackOS replace my website's feedback widget too?
No - FeedbackOS is scoped to native iOS apps. If you also have a website or web dashboard, a dedicated web widget is still the right tool there.