What Is Haptic Feedback: A Guide for React Native Devs
What is haptic feedback? Learn how it works on iOS and Android, key UX principles, and how to implement rich tactile responses in React Native and Expo apps.

Haptic feedback is the tactile response a user feels when interacting with a device, and it sits inside a technology category projected to grow from $2.74 billion in 2025 to $8.18 billion by 2034, with a 12.8% CAGR. In practice, haptic feedback is any vibration, tap, pulse, or touch-like physical cue that makes a digital interaction feel like it has real physical contact.
You're probably here because you've tapped a button in your app and felt that something was missing. The UI looks polished, the animation is fine, but the interaction still feels flat. That gap is often haptics.
A good haptic makes a button feel clickable, a toggle feel decisive, and an error feel unmistakable without adding more text, more color, or more visual noise. A bad one does the opposite. It buzzes too long, fires too often, and makes the app feel cheap. For React Native developers, the tricky part is that “add haptics” sounds simple until you hit real devices, Expo constraints, Android fragmentation, and the huge difference between a clean iPhone tap and a muddy vibration on lower-end hardware.
This guide treats haptics as both a UX tool and a production concern. The goal isn't to make your app vibrate more. The goal is to make it communicate better.
Table of Contents
- Introduction Why Your App Needs to Be Felt
- The Core Concept of Haptic Feedback
- How Haptics Work Under the Hood
- Designing Meaningful Haptic User Experiences
- Implementing Haptics in React Native and Expo
- Testing Accessibility and Performance Tradeoffs
- Conclusion Building Apps That Resonate
Introduction Why Your App Needs to Be Felt
Most apps respond visually. Better apps respond physically.
That difference matters because users don't experience your interface as a wireframe or a component tree. They experience it as a sequence of tiny moments: a press, a swipe, a refresh, a success state, an error. If those moments are silent and weightless, the app feels uncertain. If they're reinforced with the right tactile cue, the app feels responsive and trustworthy.
The business side of this is hard to ignore. The global haptic feedback technology market was valued at $2.74 billion in 2025 and is projected to reach $8.18 billion by 2034, with a 12.8% compound annual growth rate, according to Dataintelo's haptic feedback technology market report. That doesn't tell you how to write React Native code, but it does tell you haptics aren't a novelty feature anymore.
Flat apps feel slower than they are
Users rarely say, “this app needs haptics.” They say the app feels clunky, vague, or less polished than another app that does the same thing.
A crisp tactile confirmation can do three jobs at once:
- Confirm intent: The user knows the tap landed.
- Reduce hesitation: They don't need to stare at the screen for proof.
- Add perceived quality: The app feels deliberate, not accidental.
Practical rule: If the user initiates an action with their finger, there's a good chance that action deserves a tactile response.
Haptics are part of interface quality
Think of haptics the same way you think about spacing, motion, and typography. Nobody ships a serious mobile app and says layout quality is optional. Tactile quality is getting close to that category.
For mobile developers, that means learning one uncomfortable truth early: adding haptics is easy, but adding good haptics takes restraint.
The Core Concept of Haptic Feedback
When developers ask what is haptic feedback, the simple answer is vibration. The useful answer is broader. Haptic feedback is a non-visual communication channel between the app and the user.
Instead of putting every message on screen, you let the device deliver a small physical cue. That cue might confirm a successful action, warn about a failure, or add texture to an interaction that would otherwise feel dead. The best way to think about it is a digital tap on the shoulder. It's brief, intentional, and easy to understand without looking away from the task.
A diagram explaining the core concept of haptic feedback through four key user interaction and sensory principles.
Haptics communicate different kinds of meaning
Not every haptic should feel the same, because not every interaction means the same thing.
Here's a practical mental model:
| Type | What it communicates | Good example |
|---|---|---|
| Confirmation | “Your action worked” | Submitting a form, toggling a setting |
| Warning | “Something needs attention” | Invalid input, blocked action |
| Selection | “You moved focus or changed choice” | Picker wheel, segmented control |
| Immersion | “Feel the interaction itself” | Dragging a card, game impact, camera shutter feel |
A lot of teams only use the first category. That's fine for an MVP, but it leaves a lot of value on the table. Haptics can help users find their way, not just celebrate.
Good haptics reduce visual overload
A common mistake is trying to solve every clarity problem with labels, toasts, or color changes. That creates noisy interfaces. Haptics give you another layer.
For example:
- A successful save can use a subtle tap instead of a large confirmation banner.
- A picker snap can feel physical without adding extra animation.
- A validation error can use a distinct warning pulse before the user reads the message.
Haptics work best when they support the interface, not when they compete with it.
Haptics aren't just for games
Developers often associate tactile feedback with controllers and flashy interactions. In production mobile apps, the most valuable uses are usually boring in the best way. Payment confirmation. Pull-to-refresh completion. Keyboard press feel. Reorder handles. Dismiss gestures. These moments happen constantly, and tiny tactile cues make them easier to trust.
That's the main concept to keep in mind before touching code: haptics aren't decoration. They're interface language.
How Haptics Work Under the Hood
Haptics started long before smartphones. According to Titan Haptics' history of haptic technology, the technology began in the 1940s with aircraft feedback systems, evolved through the 1970s with the VPL DataGlove at institutions including MIT and Stanford, and reached mainstream consumers in the 1990s through gaming hardware like the Nintendo 64 Rumble Pak.
That history matters because mobile haptics still carry traces of that evolution. Some devices produce a crude rumble. Others produce something that feels more like a physical click. Your React Native code may look identical across both.
An infographic illustrating the technological evolution from crude rumble motors to precise modern haptic feedback actuators.
The basic hardware path
At the hardware level, a haptic system isn't magic. It's a control chain.
The implementation details vary by device, but one verified reference breaks the system into three core parts in a clear way: a microcontroller that handles logic, a haptic driver chip that translates PWM signals, and an eccentric rotating mass actuator where an unbalanced weight spins on a motor shaft to create vibration, as described in Michigan State University's haptic driver application note.
In plain terms:
- Your app requests feedback
- The operating system decides how to trigger it
- Hardware converts that instruction into physical movement
Why the same code feels different
This is the part many tutorials skip. “Trigger haptic” is not the same as “guarantee a specific sensation.”
Older or cheaper devices often rely on vibration hardware that feels broad and noisy. Premium phones tend to produce tighter, shorter, more controlled tactile responses. Apple's Taptic Engine is the reference point many developers mentally optimize for, even when they're building cross-platform products.
That's why a selection haptic may feel excellent on one phone and underwhelming on another. The code isn't always the problem. The actuator is.
If your Android build feels worse than your iPhone build, don't assume your implementation is broken. Check the hardware class first.
The practical takeaway for React Native devs
You don't need to become a hardware engineer, but you do need the right expectation: haptics are capability-based, not pixel-perfect. Treat them like audio playback across different phone speakers. You can design for quality, but you can't force identical output.
That should influence how you implement:
- Prefer semantic haptic types over handcrafted raw vibration patterns when the platform offers them.
- Design around clear categories of meaning, not ultra-specific physical signatures.
- Test on actual devices, because simulators won't reveal actuator quality.
Developers who understand this usually make better product decisions. They stop chasing exact sameness and start designing haptics that remain useful even when hardware varies.
Designing Meaningful Haptic User Experiences
Bad haptics are worse than no haptics. No haptics leaves value unrealized. Bad haptics actively annoy people.
The reason is biological as much as aesthetic. Human touch perception depends on mechanoreceptors including Meissner corpuscles, Pacinian corpuscles, Merkel cells, and Ruffini endings, and effective mobile haptics often rely on predefined constants such as Android's HapticFeedbackConstants.KEYBOARD_PRESS, which can produce clear sensations with optimal durations of 10–20 milliseconds, avoiding the more inconsistent feel of older one-shot vibration APIs, according to ScienceDirect's overview of haptic feedback.
That's why short, crisp feedback tends to feel premium, while long buzzing tends to feel cheap.
An infographic titled Designing Meaningful Haptic User Experiences detailing the pros, cons, and principles of haptic feedback design.
What good haptics usually do
Strong haptic UX has a few repeatable traits:
- It's contextual: The feedback matches an intentional user action.
- It's subtle: It reinforces the interface instead of stealing attention.
- It's consistent: Similar actions feel similar across the app.
- It's sparse: Not every tap deserves a pulse.
A lot of this overlaps with broader mobile interaction design. If you care about clear feedback loops, state changes, and touch confidence, the same principles show up in mobile UI design patterns that prioritize clarity and responsiveness.
What doesn't work in real apps
Three patterns fail over and over:
-
Buzzing on every tap
This gets old fast. The user stops noticing the meaning and starts noticing the noise. -
Using the same haptic for success and error
If every event feels identical, the tactile layer communicates nothing. -
Firing haptics for passive system events
A user should feel feedback for actions they take, not random background updates they didn't ask for.
A haptic should answer a user question. Usually that question is, “Did that happen?” or “What just changed?”
A simple design filter
Before adding a haptic, ask these questions:
| Question | If yes | If no |
|---|---|---|
| Did the user initiate the action? | Consider haptics | Usually skip it |
| Does the event benefit from immediate confirmation? | Add a subtle tap | Visual feedback may be enough |
| Will repetition make it annoying? | Keep it very light or reduce frequency | Stronger feedback may work |
| Is there a clear semantic difference from nearby actions? | Use a distinct pattern or type | Don't add another one |
The best haptics are often the ones users barely notice consciously. They just make the app feel right.
Implementing Haptics in React Native and Expo
If you're shipping with Expo, start simple. Don't begin with custom vibration logic or platform-specific branches unless you've already proven you need them. Most apps get solid results from semantic haptic APIs.
A laptop screen displaying code for a React Native application with haptic feedback implementation in a workspace.
The first decision is architectural, not tactile. If your project already uses Expo or an Expo-managed workflow, use expo-haptics first. If you need deeper platform-specific coverage or behavior outside Expo's abstraction, then evaluate alternatives. If you're still setting up your stack, a practical Expo React Native tutorial for production-oriented app structure makes this much easier because haptics end up cleaner when your interactions already live in predictable UI components.
Start with Expo Haptics
Install the package:
npx expo install expo-haptics
Basic usage looks like this:
import * as Haptics from 'expo-haptics';
import { Pressable, Text } from 'react-native';
export function SaveButton() {
const handlePress = async () => {
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
// run save action here
};
return (
<Pressable onPress={handlePress}>
<Text>Save</Text>
</Pressable>
);
}
That example is intentionally small, but it covers the core pattern. Trigger haptics at the point of user intent, not inside some distant side effect where timing gets vague.
A few useful Expo calls:
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light);
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);
await Haptics.selectionAsync();
Common patterns That Belong in Real Apps
Use haptics where interaction certainty matters.
Form submit success
const onSubmit = async () => {
const ok = await saveProfile();
if (ok) {
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Success);
} else {
await Haptics.notificationAsync(Haptics.NotificationFeedbackType.Error);
}
};
Segmented control or picker change
const onSelect = async (value: string) => {
setSelected(value);
await Haptics.selectionAsync();
};
Destructive action confirmation
const onDelete = async () => {
await Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium);
await deleteItem();
};
I'd avoid using Heavy by default. It's tempting because it feels dramatic, but dramatic isn't the same as good. In most productivity, commerce, and social app flows, Light, Medium, and selectionAsync() cover the majority of worthwhile cases.
Implementation rule: Put haptics next to the user event handler whenever possible. The farther the trigger lives from the tap, the easier it is for timing to feel off.
A short demo helps if you want to see typical patterns before wiring your own:
When to Reach for react-native-haptic-feedback
If you need a library outside Expo's built-in approach, react-native-haptic-feedback is a common choice in bare React Native setups.
Example:
import ReactNativeHapticFeedback from 'react-native-haptic-feedback';
const options = {
enableVibrateFallback: true,
ignoreAndroidSystemSettings: false,
};
ReactNativeHapticFeedback.trigger('impactLight', options);
ReactNativeHapticFeedback.trigger('notificationSuccess', options);
ReactNativeHapticFeedback.trigger('selection', options);
That ignoreAndroidSystemSettings: false default is the correct instinct for production apps. Respect user settings unless you have an unusually strong reason not to.
What the API is actually controlling
At a high level, these libraries don't “create feeling” on their own. They ask the OS to drive the hardware path discussed earlier. That path includes logic, a driver layer, and an actuator. In some devices that actuator is an ERM motor, where an unbalanced mass spins to generate vibration. On better hardware, the result feels more precise. On weaker hardware, the same semantic request can feel loose or buzzy.
That's another reason to prefer semantic calls like selectionAsync() or notificationAsync() over trying to handcraft every vibration yourself. Platform-native semantics usually degrade more gracefully.
Testing Accessibility and Performance Tradeoffs
A student project adds haptics and calls it done. A production app asks whether those haptics are appropriate, respectful, and stable across devices.
Respect System Preferences
Users can disable or reduce tactile feedback at the operating system level. Your app should treat that as a real preference, not a suggestion. If someone has turned haptics off, forcing feedback back on is a UX mistake.
In practical terms, this means two things:
- Use platform-standard haptic APIs when possible: They're more likely to respect system behavior.
- Avoid hardcoded fallback vibration unless it's justified: A fallback can be helpful, but it shouldn't override accessibility expectations.
If you use a library that exposes options around system settings, keep the setting that respects the OS.
ReactNativeHapticFeedback.trigger('selection', {
enableVibrateFallback: false,
ignoreAndroidSystemSettings: false,
});
For apps with a settings screen, it's also reasonable to add your own in-app toggle so users can reduce tactile intensity conceptually, even if the platform doesn't give you fine-grained physical control.
Test on Hardware, Not Just Simulators
Haptics are one of the clearest examples of why simulator-driven development has limits. Simulators can validate code paths. They can't tell you whether the interaction feels good.
Your QA process should include real-device checks across:
- At least one recent iPhone
- Multiple Android phones from different hardware tiers
- Scenarios with repeated interactions, such as typing, list selection, or rapid toggling
A broader mobile app quality assurance process helps here because haptic bugs often hide inside interaction timing, not just inside API usage.
Test haptics in the exact moment they occur. A feedback pattern that seems fine in isolation can feel irritating when repeated inside a real task flow.
Watch Battery and Interaction Noise
Haptics do consume energy. The bigger issue in many apps isn't raw battery cost, though. It's interaction noise.
If you trigger feedback too often, you create three problems at once:
| Risk | What it looks like | Better approach |
|---|---|---|
| Battery waste | Frequent repeated pulses in scroll-heavy flows | Limit haptics to important state changes |
| Perceptual fatigue | Users stop noticing meaning | Reduce frequency and vary semantics |
| Timing issues | Feedback lands after the UI change | Fire on the actual touch or confirmed result |
The easiest wins are conservative ones. Don't haptically acknowledge every list row tap. Don't vibrate during passive loading states. Don't pair strong haptics with every animation just because you can.
A polished app usually uses fewer haptics than a developer first expects.
Conclusion Building Apps That Resonate
Haptic feedback is simple to define and surprisingly easy to misuse. It's the tactile layer of your interface: the tap, pulse, or click-like sensation that gives digital actions physical presence. Used well, it confirms intent, reduces uncertainty, and makes an app feel more refined without adding visual clutter.
For React Native and Expo developers, the practical path is clear. Start with semantic APIs like expo-haptics. Use them for user-initiated moments that benefit from confirmation. Keep the signals short, distinct, and sparse. Test on real hardware, especially Android devices with different actuator quality. Respect system settings and treat accessibility as a requirement, not cleanup work.
The biggest mindset shift is this: haptics aren't decoration. They're interaction design. The same care you give to spacing, copy, motion, and state transitions belongs here too.
If you get that right, your app won't just look responsive. It will feel responsive, and users notice that faster than developers anticipate.
If you want to ship polished Expo apps faster, AppLighter gives you a production-ready starting point with the core pieces already wired up, so you can spend more time refining details like interaction quality and less time rebuilding the same app foundation from scratch.