npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@ddwang/watchav

v1.2.0

Published

Monitor camera and microphone usage on macOS

Readme

watchav

A CLI tool that monitors camera and microphone usage on macOS in real-time.

 📹  Video: ACTIVE     🎙️  Audio: idle

─── Devices ───

  📹  MacBook Pro Camera
  🎙️  MacBook Pro Microphone
  🎙️  ZoomAudioDevice

─── History ───

  10:23:45  📹  ACTIVE
  10:23:40  🎙️  stopped
  10:22:15  🎙️  ACTIVE

Features

  • Real-time monitoring of camera and microphone status
  • Detects when apps start/stop using your camera or mic
  • Lists all available audio/video capture devices
  • Event history showing the last 10 state changes in the UI
  • Persistent event logging to ~/.watchav/events.log
  • Supports USB webcams and external audio devices
  • Desktop notifications when camera/mic state changes (optional)
  • Works on both Apple Silicon and Intel Macs
  • Supports JSON output for scripting

Installation

npm install -g @ddwang/watchav

Or run directly with npx:

npx @ddwang/watchav

Usage

# Basic monitoring
watchav

# Desktop notifications when state changes
watchav --notify

# Only output when state changes (no continuous display)
watchav --quiet

# JSON output for scripting
watchav --json

# Faster polling (default: 500ms)
watchav --interval 200

# Verbose output for debugging
watchav --verbose

Options

| Option | Short | Description | |--------|-------|-------------| | --interval | -i | Microphone poll interval in ms (default: 500) | | --json | -j | Output in JSON format | | --quiet | -q | Only output on state changes | | --notify | -n | Show desktop notifications on state changes | | --verbose | -V | Show verbose output for debugging | | --version | -v | Show version number | | --help | -h | Show help message |

Event Log

All camera and microphone state changes are logged to ~/.watchav/events.log:

[2025-01-15T10:23:45.123Z] CAMERA ACTIVE
[2025-01-15T10:23:40.456Z] MICROPHONE STOPPED
[2025-01-15T10:22:15.789Z] MICROPHONE ACTIVE

How It Works

watchav uses macOS system APIs to detect camera and microphone activity:

  • Apple Silicon: Monitors kernel logs for camera streaming state changes and microphone audio events
  • Intel Macs: Uses IORegistry polling and UVC extension logs
  • USB Webcams: Detects USB Video Class (UVC) devices and monitors their streaming state via IORegistry

The tool detects the initial state on startup (so it works even if recording is already in progress) and then monitors for changes in real-time.

Requirements

  • macOS 11.0 (Big Sur) or later
  • Node.js 18 or later

Development

# Clone the repo
git clone https://github.com/ddwang/watchav.git
cd watchav

# Install dependencies
npm install

# Build
npm run build

# Run tests
npm test

# Lint
npm run lint

# Format code
npm run format

# Link for local development
npm link

# Run
watchav

License

MIT