Low-Latency Emission
Motion is detected and the emission scheduled within the same animation frame. Passive listeners and frame-aligned sampling keep your INP untouched.

Zero-dependency, strictly typed, purely organic scroll interactions.
npm install @puejs/coreTrusted by acoustic engineers at:
Every layer of the Pue JS runtime has been profiled, benchmarked and hardened to keep emissions on time, in proportion and in budget, at any scroll velocity.
Motion is detected and the emission scheduled within the same animation frame. Passive listeners and frame-aligned sampling keep your INP untouched.
Volume scales continuously with scroll velocity through a calibrated tonnage curve. Measured reading stays discreet; aggressive flicks are rendered at full amplitude.
No emission before an explicit user gesture, and silence for users who prefer reduced motion. Your visitors opt in; nobody is surprised.
Each acoustic profile ships as an isolated ES module. Import only the emissions you need — everything else is eliminated at build time.
Pue JS exposes a single, declarative entry point. Describe your acoustic profile once — pitch envelope, resonance, duration — and the runtime handles sampling, throttling and scheduling.
Every option is inferred end-to-end. Invalid resonance curves fail at compile time, not in production.
Bind to any scroll container, from the window to a single panel. Official React adapter, and plain lifecycle hooks everywhere else.
Subscribe to emission events and pipe tonnage metrics straight into your telemetry stack.
import { createEmitter, presets } from "@puejs/core";import type { EmitterOptions } from "@puejs/core"; const options: EmitterOptions = { preset: presets.organic, pitch: { min: 0.82, max: 1.24 }, resonance: 0.65, duration: 420, throttle: "velocity",}; const emitter = createEmitter(document.documentElement, options); emitter.on("emit", ({ tonnage, latency }) => { telemetry.track("acoustic_event", { tonnage, latency });});