macOS 13+ Windows 10+ Node 18+ MIT License

Native screen recording for
Node.js & Electron

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.

npm install screenwire
View on npm GitHub

From zero to recording in 3 lines.

const recorder = require('screenwire')

await recorder.startAsync('recording.mp4')
// ... do stuff ...
await recorder.stopAsync()

Why developers choose Screenwire

speed

Native performance

Real-time H.264 encoding via ScreenCaptureKit on macOS and direct WASAPI + GDI capture on Windows. No temp frame files.

mic

Audio included

Capture system audio and microphone input simultaneously, multiplexed directly into the output file.

settings_power

Zero configuration

Prebuilt binaries shipped with the package. No Xcode, no .NET SDK, no node-gyp on the user’s machine.

movie

Single MP4 output

Outputs standard H.264/AAC MP4 files directly to disk, ready for immediate playback or sharing.

code

Promise + callback APIs

Flexible API design supports both modern async/await patterns and traditional Node.js callbacks.

data_object

Tiny surface area

Five methods total. Plain CommonJS, works in any Node.js or Electron project without bundler config.

Platform support

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

API

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.

Why we built it

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.

Frequently asked questions

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.

Can it record system audio and microphone audio?

Yes. Screenwire can capture system audio and microphone input and mux both directly into the final MP4 output.

Do I need ffmpeg or extra native tooling?

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.

Which platforms are supported right now?

Today, Screenwire supports macOS 13+ on Apple Silicon and Windows 10/11 on x64. Linux support is planned, but not available yet.

Try it now

npm install screenwire

MIT licensed · Built and maintained by BreakingPoint