Does Screenwire work with both Node.js and Electron?
Yes. The package is built for both plain Node.js projects and Electron apps, with a small CommonJS API and no special bundler setup.
Open-source screen recording library for developers who need reliable desktop capture without wrestling with ffmpeg wrappers, fragile native builds, or paid SDK licensing.
Capture screen, system audio, and microphone to MP4 using native OS APIs on macOS and Windows. Prebuilt binaries included, zero configuration required.
const recorder = require('screenwire')
await recorder.startAsync('recording.mp4')
// ... do stuff ...
await recorder.stopAsync()
Real-time H.264 encoding via ScreenCaptureKit on macOS and direct WASAPI + GDI capture on Windows. No temp frame files.
Capture system audio and microphone input simultaneously, multiplexed directly into the output file.
Prebuilt binaries shipped with the package. No Xcode, no .NET SDK, no node-gyp on the user’s machine.
Outputs standard H.264/AAC MP4 files directly to disk, ready for immediate playback or sharing.
Flexible API design supports both modern async/await patterns and traditional Node.js callbacks.
Five methods total. Plain CommonJS, works in any Node.js or Electron project without bundler config.
| Platform | Video | System audio | Microphone | Status |
|---|---|---|---|---|
| macOS 13+ (Apple Silicon) | 24 fps H.264 | ✓ | ✓ | Stable |
| Windows 10/11 (x64) | 30 fps H.264 | ✓ | ✓ | Beta |
| Linux | — | — | — | Not yet |
recorder.start(outputPath, onStatus)
Starts recording. Calls onStatus(message) with progress strings.
recorder.stop(onStatus)
Finalizes the MP4. Callback receives the final status string.
recorder.startAsync(outputPath)
Promise version. Resolves once recording has started.
recorder.stopAsync()
Promise version. Resolves with the final status when the file is saved.
recorder.isRecording()
Returns true while a capture is in progress.
We needed reliable screen recording inside an Electron app at BreakingPoint and found the ecosystem fragmented — thin wrappers around ffmpeg, abandoned native modules, or paid SDKs with awkward licensing. So we wrote our own using the actual native APIs each platform provides, packaged it as a single drop-in npm install, and open-sourced it under MIT.
Yes. The package is built for both plain Node.js projects and Electron apps, with a small CommonJS API and no special bundler setup.
Yes. Screenwire can capture system audio and microphone input and mux both directly into the final MP4 output.
No. Screenwire ships with prebuilt binaries and uses native platform APIs, so developers can skip ffmpeg installs, Xcode setup, .NET SDKs, and node-gyp troubleshooting.
Today, Screenwire supports macOS 13+ on Apple Silicon and Windows 10/11 on x64. Linux support is planned, but not available yet.
npm install screenwire
MIT licensed · Built and maintained by BreakingPoint