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
Hotkeys API Reference
App Hotkeys API Reference
Key hold & held keys API Reference
Hotkey Recorder API Reference
Normalization & format API Reference
Hotkey Recorder API Reference

HotkeyRecorder

Defined in: hotkey-recorder.ts:192

Framework-agnostic class for recording keyboard shortcuts.

With the default maxSteps: 1, the first valid chord commits. With a larger maxSteps, each chord adds a step; the recording commits on Enter (unless commitKeys: 'none'), after idleTimeoutMs, or when it reaches maxSteps. Backspace/Delete removes the last step, and on an empty recording calls onClear. Escape cancels. A one-step result is a chord string.

State Management:

  • Uses TanStack Store for reactive state management
  • State can be accessed via recorder.store.state when using the class directly
  • When using framework adapters, use the useHotkeyRecorder hook for reactive state

Example

ts
const recorder = new HotkeyRecorder({
  onRecord: (hotkey) => {
    console.log('Recorded:', hotkey) // 'Mod+S'
  },
})

const sequenceRecorder = new HotkeyRecorder({
  maxSteps: Infinity,
  onRecord: (hotkey) => {
    console.log('Recorded:', hotkey) // 'Mod+S' or ['G', 'H']
  },
})

recorder.start()
// ... later
recorder.destroy()
const recorder = new HotkeyRecorder({
  onRecord: (hotkey) => {
    console.log('Recorded:', hotkey) // 'Mod+S'
  },
})

const sequenceRecorder = new HotkeyRecorder({
  maxSteps: Infinity,
  onRecord: (hotkey) => {
    console.log('Recorded:', hotkey) // 'Mod+S' or ['G', 'H']
  },
})

recorder.start()
// ... later
recorder.destroy()

Constructors

Constructor

ts
new HotkeyRecorder(options): HotkeyRecorder;
new HotkeyRecorder(options): HotkeyRecorder;

Defined in: hotkey-recorder.ts:217

Parameters

options

| HotkeyChordRecorderOptions | (() => HotkeyChordRecorderOptions)

Returns

HotkeyRecorder

Constructor

ts
new HotkeyRecorder(options): HotkeyRecorder;
new HotkeyRecorder(options): HotkeyRecorder;

Defined in: hotkey-recorder.ts:220

Parameters

options

| HotkeySequenceRecorderOptions | (() => HotkeySequenceRecorderOptions)

Returns

HotkeyRecorder

Properties

store

ts
readonly store: Store<HotkeyRecorderState>;
readonly store: Store<HotkeyRecorderState>;

Defined in: hotkey-recorder.ts:193

Methods

cancel()

ts
cancel(): void;
cancel(): void;

Defined in: hotkey-recorder.ts:475

Cancel recording without saving.

Removes the event listener, resets the recording state, and calls the onCancel callback if provided.

Returns

void


commit()

ts
commit(): void;
commit(): void;

Defined in: hotkey-recorder.ts:381

Commits the recorded steps after validation and conflict checks. Called automatically at maxSteps, on Enter, or after idleTimeoutMs. A rejected commit leaves recording active with its steps intact.

Returns

void


destroy()

ts
destroy(): void;
destroy(): void;

Defined in: hotkey-recorder.ts:502

Clean up event listeners and reset state.

Call this when you're done with the recorder to ensure all event listeners are properly removed.

Returns

void


setOptions()

ts
setOptions(options): void;
setOptions(options): void;

Defined in: hotkey-recorder.ts:233

Updates the recorder options, including callbacks. This allows framework adapters to sync callback changes without recreating the recorder.

Parameters

options

Partial<HotkeyRecorderOptions>

Returns

void


start()

ts
start(): void;
start(): void;

Defined in: hotkey-recorder.ts:267

Start recording a new hotkey.

Sets up a keydown event listener that captures keyboard events and records chords according to maxSteps.

Returns

void


stop()

ts
stop(): void;
stop(): void;

Defined in: hotkey-recorder.ts:465

Stop recording (same as cancel, but doesn't call onCancel).

Removes the event listener and resets the recording state.

Returns

void