Fluid / Continuous Gestures
Fluid gestures send movement updates to control volume, brightness, MIDI values or scripts. They work on built-in MacBook trackpads and Apple Magic Trackpads. Existing discrete gestures keep working alongside them.
For mouse buttons, see Continuous Mouse Drags.
Available gestures
Choose Trackpad → Add Trigger → Fluid / Continuous Gestures. All 13 trackpad variants are available:
| Gesture | Movement |
|---|---|
| 3, 4 or 5 Finger Swipe (Continuous) | Horizontal or vertical |
| 2 Finger Pinch (Continuous) | Fingers apart / together |
| 2 Finger Rotation (Continuous) | Counterclockwise / clockwise |
| 1 Finger Slide Along … Edge (Continuous) | Left, right, top or bottom edge |
| 2 Finger Slide Along … Edge (Continuous) | Left, right, top or bottom edge |
Pinch and rotation require Zoom in or out / Rotate to be enabled in macOS Trackpad settings. For three-finger swipes, disable macOS three-finger dragging in Accessibility settings.

Example: swipe up and down to adjust volume
- Add 3 Finger Swipe (Continuous). Set Movement Axis to Vertical.
- Use Action For Trigger Category to add Actions Executed While Moving (Continuous).
- Add Set System Volume, click the link icon beside Volume, and enable Use the swipe value.
- Choose Increase / Decrease Value, Output range: 0 … 100, and Curve: Linear. Keep the range limit on and Wrap around off.
- Lift all fingers, then swipe: up raises volume, down lowers it. You can reverse without lifting.
New gesture bindings already default to Increase / Decrease Value; saved bindings keep their mode. Volume starts from the current system setting.
The same setup works for every gesture: use While Pinching or While Rotating for those gestures. Up/right, pinch out and counterclockwise rotation increase the value; the opposite directions decrease it.
When actions run
| Category | Use it for |
|---|---|
| While Moving / Pinching / Rotating (Continuous) | One action that responds in both directions, such as adjusting volume |
| Swipe Up / Down / Left / Right, Pinch Out / In, or a rotation direction | Different actions for each direction |
| Gesture Begin | An action once the initial movement threshold is reached |
| Gesture End | An action when fingers lift normally; interruptions do not run it |
If both a general movement category and a matching direction category contain actions, both run. Edge slides offer only the two directions along their edge. Numeric bindings are available during movement and at End, not at Begin.
Adjusting the gesture
| Setting | Purpose |
|---|---|
| Movement Axis | For swipes: Automatic locks to the first dominant axis. Choose Vertical or Horizontal for a dedicated control. |
| Movement Required To Begin | Initial movement before actions start. Increase it to avoid accidental activation. |
| Maximum Update Rate | Limits action updates; default 60/second. |
| Binding: Movement for the full range | Sensitivity for Increase / Decrease Value. Larger values require more movement. |
Increase / Decrease Value keeps adjusting a value through reversals. Set Value Directly maps progress within each stroke and restarts on reversal; its sensitivity comes from the trigger's Movement For Full Value Range. See Action Value Bindings for all modes and MIDI setup.
Screenshots: binding and trigger settings
The binding screenshot uses earlier labels; follow the names above.


Repeat a shortcut or discrete action by distance
Under a continuous direction category, add Only Continue After Accumulating Movement / Value before your shortcut. A threshold of 5 runs it every additional 5% of trackpad travel; for rotation, 10 means 10 degrees. This depends on movement, unlike time-based Debounce. See threshold behavior.
Script variables
Run Real JavaScript can read BTTTriggerValue (progress) and BTTTriggerValueDelta (signed movement), plus normalized, percentage and MIDI forms. Add the script to a continuous movement category. See the variable table and JavaScript example.
These are gesture inputs, not a bound field's accumulated output. They are shared variables; another trigger can change them while an asynchronous script runs.
Pinch, rotation and edge-slide details
Example: pinch or rotate to adjust a value
Use the volume setup above with While Pinching or While Rotating. Keep exactly two fingers touching. Pinch measures magnification reported by macOS; rotation measures degrees.
| Gesture | Initial movement | Full-range default* |
|---|---|---|
| Swipe / edge slide | 2% of trackpad | 40% of trackpad |
| Pinch | 2 magnification percentage points | 50 magnification percentage points |
| Rotation | 3 degrees | 90 degrees |
The trigger's progress range and the binding's adjustment sensitivity use the same initial default but are configured separately. Swipe movement uses the average finger position; more fingers do not multiply it.
Sliding along an edge
Start at the chosen edge and slide along it; entering the edge from the middle does not start a gesture. For two-finger slides, at least one finger must start there and both must move. Lift all fingers to restart.
Touches must begin in the outer 6% of the edge. At least one finger must stay within 12% (one-finger slide) or 15% (two-finger slide). Avoid corners if adjacent edges are configured. Pointer movement and native scrolling remain active.
Compatibility and troubleshooting
Compatibility and troubleshooting
- Existing discrete gestures may also fire. Use modifiers, app assignments, conditions or different finger counts to separate actions when needed.
- Matching three-/four-/five-finger swipes block native scrolling and momentum. Other macOS swipe assignments may still run; disable conflicting assignments if needed.
- Matching pinch/rotation blocks the corresponding native zoom/rotation. Unmatched native gestures and ordinary two-finger scrolling remain available.
- Keep the finger count stable. Lifting ends a swipe; adding a finger or clicking/force pressing can interrupt it. Lift all fingers before restarting. Thumb/accidental-touch filtering still applies.
- Avoid duplicate eligible configurations of the same continuous gesture: an ambiguous match does not start. Different finger counts, different edges, and pinch plus rotation can coexist.
- No link icon? Use a supported numeric field under a movement/direction category, not Gesture Begin.
- Value restarts on reversal? Choose Increase / Decrease Value.