Frequently asked questions
How do I add an onboarding tour to a React Native app?
Install @wrack/react-native-tour-guide and react-native-svg, wrap your app in TourGuideProvider with a TourGuideOverlay, then call startTour(steps) from the useTourGuide() hook. Each step references the component to highlight (via a ref) and the title/description to show.
How do I highlight a specific component with a spotlight?
Attach a ref to the component and pass it as targetRef on a step. The library measures it, dims the rest of the screen, and cuts out a spotlight that matches the component’s border radius automatically. Pass the component’s style as targetStyle so the spotlight matches its shape.
Does it work with Expo?
Yes — Expo (managed and bare, including Expo Go) and React Native CLI. The only required dependency is react-native-svg, which Expo supports out of the box, so no custom dev build is needed.
Does it support the New Architecture (Fabric)?
Yes. The overlay is drawn with a single even-odd SVG path (a real punched-out hole) rather than an SVG <Mask>, so the spotlight renders correctly on both the old and new architectures — with no white film over the highlighted element.
Can I fully customize the tooltip?
Yes. Use tooltipStyles to restyle the built-in tooltip, or pass renderTooltip to render your own component — it receives the title, description, step index, and onNext/onPrev/onSkip handlers.
What are the dependencies and bundle size?
Under 50KB with zero native dependencies — only react-native-svg as a peer. Blur and gradient effects are optional and load lazily only if you install them.
How does it compare to react-native-copilot or rn-tourguide?
All three highlight UI elements with tooltips. This library additionally matches the spotlight shape to each target’s border radius automatically (circles, pills, per-corner radii), auto-scrolls so the target and tooltip both fit on screen, and ships zero native dependencies — so it runs in Expo Go without a custom dev build. See the full comparison.
Can I show a tour only once per user?
Yes — use the useTourPersistence hook with any storage backend (AsyncStorage, MMKV, or a custom adapter) and pass a tourId.