Docs
CodeRabbit
Cloudflare
AG Grid
SerpAPI
Netlify
OpenRouter
Neon
WorkOS
Clerk
Electric
PowerSync
Sentry
Railway
Prisma
Strapi
Unkey
CodeRabbit
Cloudflare
AG Grid
SerpAPI
Netlify
OpenRouter
Neon
WorkOS
Clerk
Electric
PowerSync
Sentry
Railway
Prisma
Strapi
Unkey
API Reference
Hotkeys API Reference
Hotkey Sequence API Reference
Key Hold API Reference
Held Keys API Reference
Hotkey Recorder API Reference
Hotkey Sequence Recorder API Reference
Format for Display API Reference
Key Hold API Reference

KeyStateTracker

Class: KeyStateTracker

Defined in: key-state-tracker.ts:63

Singleton tracker for currently held keyboard keys.

This class maintains a list of all keys currently being pressed, which is useful for:

  • Displaying currently held keys to users
  • Custom shortcut recording for rebinding
  • Complex chord detection

State Management:

  • Uses TanStack Store for reactive state management
  • State can be accessed via tracker.store.state when using the class directly
  • When using framework adapters (React), use useHeldKeys and useHeldKeyCodes hooks for reactive state

Example

ts
const tracker = KeyStateTracker.getInstance()

// Access state directly
console.log(tracker.store.state.heldKeys) // ['Control', 'Shift']

// Subscribe to changes with TanStack Store
const unsubscribe = tracker.store.subscribe(() => {
  console.log('Currently held:', tracker.store.state.heldKeys)
})

// Check current state
console.log(tracker.getHeldKeys()) // ['Control', 'Shift']
console.log(tracker.isKeyHeld('Control')) // true

// Cleanup
unsubscribe()

Properties

store

ts
readonly store: Store<KeyStateTrackerState>;

Defined in: key-state-tracker.ts:70

The TanStack Store instance containing the tracker state. Use this to subscribe to state changes or access current state.

Methods

areAllKeysHeld()

ts
areAllKeysHeld(keys): boolean;

Defined in: key-state-tracker.ts:228

Checks if all of the given keys are currently held.

Parameters

keys

string[]

Array of key names to check

Returns

boolean

True if all of the keys are currently held


destroy()

ts
destroy(): void;

Defined in: key-state-tracker.ts:235

Destroys the tracker and removes all listeners.

Returns

void


getHeldKeys()

ts
getHeldKeys(): string[];

Defined in: key-state-tracker.ts:197

Gets an array of currently held key names.

Returns

string[]

Array of key names currently being pressed


isAnyKeyHeld()

ts
isAnyKeyHeld(keys): boolean;

Defined in: key-state-tracker.ts:218

Checks if any of the given keys are currently held.

Parameters

keys

string[]

Array of key names to check

Returns

boolean

True if any of the keys are currently held


isKeyHeld()

ts
isKeyHeld(key): boolean;

Defined in: key-state-tracker.ts:207

Checks if a specific key is currently being held.

Parameters

key

string

The key name to check (case-insensitive)

Returns

boolean

True if the key is currently held


getInstance()

ts
static getInstance(): KeyStateTracker;

Defined in: key-state-tracker.ts:87

Gets the singleton instance of KeyStateTracker.

Returns

KeyStateTracker


resetInstance()

ts
static resetInstance(): void;

Defined in: key-state-tracker.ts:97

Resets the singleton instance. Useful for testing.

Returns

void