Design

Grab specs

Updated: May 4, 2026
Here you find detailed specs that make up a great grab interaction. Enhancing and replicating behaviors familiar from the physical world will help make for a satisfying immersive experience. Here are the features that improve grab interactions and that we recommend you implement as well.

Indirect cone casting

Aiming at far away targets can be difficult when using a noisy input, especially hands. To make this easier, the system uses a magnetic cone with time thresholds instead of a single straight ray. The cone expands the effective targeting area, and a dwell time prevents accidental selection.

Key details

ComponentMetricsDetails
Cone start length
0.05 m
Avoids selecting near targets unintentionally
Cone max length
5 m
Avoids selecting targets too far away or out of sight
Targeting cone
10 degree aperture
Targets must stay inside this cone for 100 ms to become candidates
Untargeting cone
20 degree aperture
Targets must leave this wider cone to stop being considered
Dwelling time
100 ms
Time a target must remain in the targeting cone before becoming a candidate

Distance grab ray affordance

The ray used for targeting far interactables has a magnetic behavior that helps the user aim faster. The ray bends toward the nearest valid target.
ComponentMetricsDetails
Ray visual
0.003 m radius cylinder
Thin line projected from the hand
Transparency
0.2 m fade at each end
Fully transparent at the start and end for a softer look
Default color
#ffffff at 80% alpha
Semi-transparent white
Bending
Quadratic bezier curve
Middle control point is placed at half the distance along the aiming direction

Ghost target affordance

A hover state affordance that shows the user where the interactable will move when grabbed. A translucent copy of the object appears and moves from its current position to the predefined grab position at the hand.
StateAffordances
Hover
Visual: Translucent copy of the interactable appears in BCBCBC color at 25% opacity with a solid white outline. Moves to the hand position at 10 m/s with ease in-out. Haptic: Object Hover system haptics effect.
Select
Visual: Ghost target and distance grab ray disappear. The interactable moves into the user’s hand with the predefined hand pose.
Release
Visual: Object returns to its original position or follows physics.

Ghost hand affordance

A hover state affordance that shows the user’s hand at the object’s location, as if the hand moved to where the object is. The object stays in place and is manipulated without moving it to the hand.
StateAffordances
Hover
Visual: White translucent version of the user’s hand appears in BCBCBC color at 25% opacity with a solid white outline. The hand is aligned with the object as if already grabbing it.
Select
Visual: The translucent hand interacts with the interactable at the object’s position.

Indirect gaze-based grab

When eye tracking is enabled, eye tracking is used to target far interactables. The system detects where the user is looking and allows grab confirmation through a secondary input such as a hand gesture or controller press.

Direct pinch

The system places a sphere collider between the tips of the pinching fingers to determine which objects are intersected. There are two pinch detection methods.

Key details

Pinch typeDescription
ISDK pinch
Pinch with any finger tip touching the thumb tip, or with the thumb touching the side of the index finger. Once you initiate a pinch, sliding the finger tip along the thumb does not cause a release. Uses a 0.05 m sphere radius for detection, placed between the strongest pinching fingers but never too far from the thumb.
ML-based pinch
Uses machine learning to detect the pinch gesture. Does not support thumb-base lateral pinches and can be prone to accidental releases. ML-based pinch is never maintained when hand tracking is lost, so the pinch always releases on tracking loss.

Detection thresholds

Pinch detection measures the distance between the thumb tip and index finger tip. Both the start and stop thresholds are different (a technique called hysteresis) so that the grab does not flicker on and off when the user’s hand is near the boundary.
ParameterValueDescription
Start distance
0.016 m
Fingers must be within 1.6 cm to begin a pinch
Stop max distance
0.03 m
Pinch always releases above 3 cm
Stop offset
0.02 m
Pinch releases at 2 cm above the minimum detected distance

Hover distances

The pinch grab sphere controls when the hover state activates as the user’s hand approaches an interactable. The gap between enter and exit distances prevents the hover state from flickering when the hand is near the boundary.
ParameterValue
Enter distance
0.05 m
Exit distance
0.08 m

Direct palm grab

Uses the entire hand or fist to grab larger or heavier objects such as a sword, basketball, or flashlight. Palm detection measures how much the fingers curl into the palm, calculating a grab strength value from 0 to 1 where 1 represents a fully closed fist.

Detection thresholds

ParameterValueDescription
Start threshold
0.9
Fingers must curl to 90% strength to begin a palm grab
Release threshold
0.85
Palm grab releases when curl drops below 85% strength
The grab strength calculation uses a weighted blend of each finger’s curl and flexion angles. The 5% gap between the 0.85 release threshold and the 0.9 start threshold is intentionally tight, giving a responsive feel where small finger movements register as a release.

Hover distances

The palm grab sphere is larger than the pinch sphere because the grab gesture involves the full hand, which requires more space to detect reliably.
ParameterValue
Enter distance
0.08 m
Exit distance
0.1 m

Hit test participation

The default hit test set includes select, poke, ray grab, and pinch grab. Palm grab is excluded from the default set. If your app relies on palm grab, you need to configure hit testing to include it explicitly.
Choosing between pinch and palm
Use pinch grab for small, precise interactions where the user picks up objects with their fingertips. Use palm grab for larger objects where the user wraps their hand around the interactable. You can support both on the same object to let users choose the gesture that feels natural.

Hybrid hover

The hybrid grab sphere uses a tight enter distance for precision but a wide exit distance to maintain the hover state once activated.
ParameterValue
Enter distance
0.01 m
Exit distance
0.08 m

Gesture switching

The user can start with a pinch and transition to a palm grab, or vice versa, without dropping the interactable. The system maintains continuity when the user shifts their grip naturally.

Direct controllers

Grabs are triggered by pressing actuators on the controller that simulate a hand grip, such as the index trigger for smaller objects or the middle-finger grip button for larger objects.

Alignment

When a user grabs an interactable, the system handles alignment between the hand and the object in one of three ways. Choose the behavior that fits the kind of object the user is grabbing.
Alignment behaviorDescription
No alignment
The object stays in place and does not snap to the hand. Used for UI windows and panels where the user adjusts position by dragging without the object jumping to their hand location.
Object moves to hand
The object snaps or moves to the hand’s current position. The classical default for picking up objects in the environment.
Hand moves to object
The virtual hand representation moves to the interactable’s position to maintain its world-space placement. Used for fixed objects such as climbing a ladder or operating a mounted control.

Manipulation

After a grab is established, the system controls how the held object follows the hand and reacts to the environment. Manipulation covers the visual hand pose, the physics behavior of the held object, and the motion controller that drives the object during drag.
Manipulation behaviorDescription
Hand grab pose
The virtual hand adopts a pose that matches the shape of the grabbed object, so the hand appears to wrap naturally around it.
Kinematic
The object tracks the hand position exactly, with no physics. Standard for UI panels and simple tools.
Physics
The object has mass and inertia. It can collide with the environment and may feel heavy if the user moves faster than the physics engine updates.
Motion controller types
The SDK provides several controller types that govern how objects move when grabbed and dragged. Developers configure the controller type per interactable.

Two-hand manipulation

The system supports multi-hand manipulation through a two-grab configuration. When two grab points are active on the same interactable, the user can scale, rotate, and translate the object using both hands simultaneously.

Configuration

ParameterDefaultDescription
Scale
Disabled
Resize the object by moving hands apart or together
Rotate
Disabled
Rotate the object by twisting the axis between hands
Translate
Disabled
Move the object by shifting both hands in the same direction
All two-hand manipulation parameters are disabled by default. Enable them per interactable based on the interaction your app requires.

Constraints

Limits movement to specific axes or planes. Used for interactions like pulling a lever, sliding a drawer, or rotating a dial where the object should only move in one direction.

Throwing

The object inherits its own velocity and direction at the point of release, allowing for natural projectile motion. The release velocity is sampled directly from the object’s movement over a short window before the release gesture. The hand’s tracking is used only to detect when the object should stop moving because tracking has been lost.

Grab handles

Grab handles are visual affordances attached to panels and resizable objects. They indicate where a user can grab to move, resize, or rotate the object. The system defines 31 grab handle segment types with a full geometry specification covering over 20 dimension parameters.

Handle types

Grab handles appear on edges and corners of panels. Each handle type defines a segment shape, interaction zone, and visual style.
Handle categoryPurpose
Edge handles
Resize the panel along one axis
Corner handles
Resize the panel proportionally
Title bar handle
Move the panel to a new position
Rotation handles
Rotate the panel around an axis

Implementation

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

Next steps

More design resources on grab

Core interaction types

  • Ray casting: Indirect interaction through ray casting
  • Touch: Direct interaction through touch

Designing experiences

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

Developing experiences

Meta Spatial SDK

Unity

Unreal