Design

Touch specs

Updated: May 7, 2026
This page documents the technical parameters behind touch interactions. These values control when a touch registers, how the system stabilizes the user’s finger near surfaces, and how rapid tapping is handled. Understanding these values helps you tune and replicate familiar touch behaviors in your app.

Hover zones

Touch interactions use a layered zone system based on the distance between the user’s finger and the interactable surface. The hover zone activates visual feedback before contact, giving the user a preview of which element they are about to touch.
The enter and exit distances are different — a technique called hysteresis — so that the hover state does not flicker on and off when the user’s finger is near the boundary.

Key details

ParameterValueDescription
Enter hover (normal)
0.15 m
Finger must be within 15 cm of the surface to begin hover
Exit hover (normal)
0.20 m
Finger must move beyond 20 cm to exit the hover state
Enter hover (tangent)
0 m
No tangent constraint. Hover activates at any lateral position
Exit hover (tangent)
0 m
No tangent constraint on exit
The normal direction is perpendicular to the surface. The tangent direction is parallel to the surface. A tangent value of 0 means the system only checks the perpendicular distance.
Hover as a targeting signal
Use the hover zone to show visual feedback such as button highlights or cursor proximity indicators. The 15 cm enter distance gives users enough preview time to adjust their aim before making contact.

Poke detection

The system places a small sphere collider at the tip of the user’s index finger. A touch registers when this sphere makes contact with an interactable surface. The touch ends when the finger pulls back past the release threshold.

Key details

ParameterValueDescription
Poke sphere radius
0.005 m
A 5 mm sphere at the index finger tip defines the contact point
Touch release threshold
0.002 m
The finger must pull back 2 mm from the deepest contact to register a release
Equal distance threshold
0.001 m
When multiple interactables overlap within 1 mm, the nearest one receives the touch
The small 2 mm release threshold prevents accidental double-taps while allowing quick, deliberate repeat presses. The 5 mm sphere radius provides a balance between precision and reliable detection.

Affordances

StateAffordances
Hover
Haptic: System hover effect. No audio.
Press
Haptic: Direct press effect. Audio: Direct press sound.
Release
Haptic/Audio: None.

Position pinning

Position pinning adds simulated friction to the touch point on a surface. When enabled, the touch contact point resists small movements, making it easier to hold a finger steady on a button or to scroll without accidentally drifting sideways.
The pinning range has two zones. A hard pinning zone close to the touch point locks movement completely. A soft pinning zone beyond that gradually reduces friction until the touch point moves freely.

Key details

ParameterValueDescription
Enabled
false (default)
Position pinning is disabled by default. Enable per interactable.
Max pin distance
0.075 m
Total pinning range: 0.5 cm hard pinning zone plus 7 cm soft pinning zone
Recovery curve time
0.2 s
Time for the pinned point to catch up when the finger moves beyond the pinning range
When to enable position pinning
Enable position pinning for interactables where accidental lateral movement causes problems, such as small buttons in a dense grid or scrollable content where diagonal drift is disorienting. The default dead zone prevents micro-jitter without making the interface feel sluggish.

Recoil assist

Recoil assist handles a common challenge with touch interactions: because there is no physical surface, the user’s hand can end up tracked below the virtual UI plane without realizing it. Due to touch limiting, the visual hand always appears above the surface, so users may not fully pull their hand out between presses. Recoil assist dynamically shifts the detection plane toward the hand position, enabling presses and drags to be recognized while the hand is under the surface.

Key details

ParameterValueDescription
Enabled
false (default)
Recoil assist is disabled by default in the SDK. Enable per interactable.
Exit distance
0.02 m
After a press, the detection point recoils 2 cm above the surface
Re-enter distance
0.02 m
The finger must travel 2 cm back toward the surface to register the next press

Velocity expansion

Recoil assist can optionally adjust the recoil distance based on how fast the user is tapping. Faster movements get a larger recoil zone, making rapid tapping more reliable.
ParameterValue
Use velocity expansion
false (default)
Min speed
0.4 m/s
Max speed
1.4 m/s
Expansion distance
0.055 m
Decay rate
0.125

Touch limiting

Touch limiting stops the virtual hand from passing through interactable surfaces. When the user’s finger reaches a panel or button, the system dissociates the virtual hand from the physical hand’s exact position, stopping the virtual representation at the surface. This creates the illusion of a solid surface and gives the user confidence that their touch landed.
The system applies touch limiting automatically to all poke-enabled interactables. No additional configuration is needed.
Surface types and touch limiting
For floating UI panels in mid-air, touch limiting is essential because there is no physical surface to provide feedback. For surface-locked interfaces placed on a real table, the physical surface itself provides the stopping point, but touch limiting still prevents visual clipping of the virtual hand.

Implementation

Meta XR Interaction SDK (Unity)
Meta XR Interaction SDK (Unreal)
Meta Spatial SDK

Next steps

More design resources on touch

Core interaction types

  • Grab: Object manipulation through grab
  • Grab specs: Technical specifications for grab
  • Ray casting: Indirect interaction through ray casting

Designing experiences

Explore more design guidelines and learn how to design great experiences for your app:

Developing experiences

Meta Spatial SDK

Unity

Unreal