Open source · MIT · Zero dependencies

@reechy-tools/recorder

OBS-style screen + camera PIP recording in the browser.
The open-source library behind Reechy.

Draggable PIP · Shape masks · Audio mixing · TypeScript · React hooks · ~10KB gzipped

$npm install @reechy-tools/recorder
Vanilla JS
import { BrowserRecorder } from '@reechy-tools/recorder'

const recorder = new BrowserRecorder({
  screen: true,
  pip: { shape: 'rounded', mirrored: true },
  maxDuration: 300,  // auto-stop at 5 min
})

await recorder.init()
recorder.start()

const blob = await recorder.stop()  // → WebM
React
import { useRecorder, usePip } from '@reechy-tools/recorder/react'

const recorder = useRecorder({ screen: true, pip: { shape: 'rounded' } })

// Spread on your container → Tailwind state styling
<div {...recorder.dataAttrs}
  className="[&[data-recording]]:ring-2 [&[data-recording]]:ring-red-500"
>
  <video ref={el => { if (el) el.srcObject = recorder.screenStream }} />
</div>

Features

Everything you need

Extracted from Reechy's production codebase. Battle-tested.

TypeScript native
Strict types, full autocomplete. No @types/ package needed.
Screen + camera PIP
Canvas compositing with draggable, resizable overlay. Circle, rounded, or square mask.
Audio mixing
AudioContext graph — mic + system audio without crashing MediaRecorder.
Camera switch
Front ↔ back with freeze-frame. No flash, no glitch mid-recording.
Add screen mid-recording
Start camera-only, add screen share without stopping. Fully dynamic.
Max duration + auto-stop
Set maxDuration in seconds. Emits duration-limit event before stopping.
React hooks
useRecorder() + usePip() — full state, dataAttrs for Tailwind styling.
Structured errors
Every error has code + recovery hint. AI-debuggable by design.

Comparison

Why not RecordRTC?

RecordRTC hasn't shipped a release since 2021. No TypeScript, no PIP, 180KB.

FeatureRecordRTC@reechy-tools
TypeScript — native, strict
Screen + camera PIP
Draggable & resizable PIP
PIP shape masks (circle, rounded, square)
Audio mixing without crashing MediaRecorder
Camera switch with freeze-frame
Add screen share mid-recording
Max duration + auto-stop
React hooks (useRecorder, usePip)
Tailwind data-* state attributes
Bundle size~180KB~10KB gzip
Last updated2021Active
Built by Reechy

See it working in production.

This library powers Reechy — browser-based video pitch recorder used by sales teams, recruiters, and founders. Free to start, no account needed.

Chrome 88+ · Firefox 84+ · Edge 88+ · Safari 15+ (camera only)