Web-based haptic control library for bHaptics devices. A variety of haptic events can be played in your browser.
- Written in TypeScript
- Supports ESM
Play haptic event exported from bHaptics developer portal
Play single-frame feedback with intensity-mapped dot values
Play directional feedback across the surface of a device
npm install tact-js
# or
yarn add tact-js
# or
pnpm add tact-js- Download and install the bHaptics Player
- Make sure the Player is running
- Connect your bHaptics Device to the Player
- Ensure the Player version is vX.Y.Z or later
import Tact from 'tact-js';
// Initialize the library
Tact.init({
appId: '<APP_ID>',
apiKey: '<API_KEY>',
});import Tact, { PositionType } from 'tact-js';
// Play an event
Tact.play({ eventKey: key });import Tact, { PositionType } from 'tact-js';
// Play a dot
Tact.playDot({
position: PositionType.Vest, // e.g., Vest, Head, ForearmL, ForearmR etc.
motorValues: [100, 0, ... , 0], // 0 ~ 100
});import Tact, { PositionType } from 'tact-js';
// Play a path
Tact.playPath({
position: PositionType.Vest, // e.g., Vest, Head, ForearmL, ForearmR etc.
x: [0.4, 0.42, ... , 1], // 0 ~ 1
y: [0.5, 0.52, ... , 1], // 0 ~ 1
intensity: [100, 89, ... , 49], // 0 ~ 100
});- Initialize the library
params:appId: string - Your application IDapiKey: string - Your API keyremote?: string - (Optional) Remote IP address and Port number of the bHaptics Player (ex. "192.168.0.123:15881")
- Play an event
params:eventKey: string - Event keystartTime?: number - Start time in millisecondsintensityRatio?: number - Intensity ratiodurationRatio?: number - Duration ratiooffsetX?: number - Offset XoffsetY?: number - Offset Y
- Play a dot
params:position: PositionType - Position typemotorValues: number[] - Motor valuesduration?: number - Duration in milliseconds
- Play a path
params:position: PositionType - Position typex: number[] - X valuesy: number[] - Y valuesintensity: number[] - Intensity valuesduration?: number - Duration in milliseconds
If you are using Vite, you may need to add the following to your vite.config.js file:
export default defineConfig({
// ...
optimizeDeps: {
exclude: ['tact-js'],
},
// ...
});- Online demo: tact-js
- Local demo: Check the
demo/directory for a minimal setup example
bHaptics License


