v0.17.2 · published stable release

A clearer view of your privacy.

Your microphone.
Your camera.
Your visibility.

Spot access, understand the evidence, and take action from your desktop. MicCamWatch observes system metadata — not your conversations or images.

Windows 10/11 · Linux x64 · macOS 15+
Native tool · Open source · No telemetry

Control, a click awayWindows
MicCamWatch’s native Windows menu: monitor status, privacy controls, and desktop options.
The actual Windows menu, captured in v0.17.1. Historical screenshot of the user installation: camera pipeline “ready”, microphone protection not requested, and camera allowed. A real interface, not evidence of capture or hardware blocking. It predates the incomplete-state diagnostics described in the Windows FAQ.

Observe without recording

Understand before acting

Keep control local

Less opacity. More context.

A useful signal.
Not a magic promise.

MCW distinguishes observed activity, confidence level, and risk. Weak evidence does not become certainty.

01 / OBSERVE

See access

Current status, live monitoring, and a terminal dashboard. Process identity and context when the system makes them available.

mcw status --lang en
02 / UNDERSTAND

Trace the evidence

Process, path, origin, and trust validation, depending on the OS. Diagnostics also show degraded or unavailable collectors.

mcw doctor
03 / ACT

Choose your controls

Muting, camera commands, and launch at login: explicit actions limited to what the platform actually supports.

mcw tray
Just as comfortable in a terminal

A dashboard without a browser.

mcw top
Actual output from the mcw top 0.17.1 dashboard in a Windows CI terminal without capture devices.
Actual output from mcw top v0.17.1, run in Windows ConPTY in CI (150 columns), then rendered as an image. This runner has no capture devices, and its SDK mute state is unknown: it illustrates the interface, not detection or evidence of blocking on physical hardware. All screenshots on this page are from Windows.

Three operating systems, different capabilities

The limits are part
of the product.

Monitoring works without administrator privileges. Privileged actions require separate authorization.

Scope of version 0.17.2
SystemMicrophoneCameraControls and limits
Windows 10/11
x64
Active WASAPI sessions; process validated when accessible.Native capture evidence; process attribution when available. Loaded modules: “ready” only.Endpoint muting and camera device control with UAC. Manual protection is held in the background until explicitly released; no electrical isolation or guarantee for exclusive/ASIO paths.
Linux
x64 · PipeWire
Source and running stream with an active link; PID authenticated, then validated in /proc.The same active PipeWire link requirement applies. A V4L2 handle alone does not prove a stream exists; access outside PipeWire may go unobserved.Session source muting, not an ALSA access ban. USB uvcvideo cameras are supported only through a separate, reviewed administrator component; non-USB cameras are not supported.
macOS 15+
Apple Silicon / Intel
CoreAudio input activity; PID validated if the process identity is readable.Device running state via CoreMediaIO, medium confidence. Client and PID unknown. This signal does not prove an image stream exists; camera health is “degraded”.Muting only if the input property is writable. MCW-owned camera profile, requiring manual approval in System Settings; its presence does not certify physical denial of access.

Not a universal kill switch. MCW is neither antivirus software nor forensic proof of capture. A protected process, driver, direct access, or inaccessible session can limit observations and controls. WSL, virtual machines, and runners without hardware do not guarantee access to physical devices.

Resources: the 15 MB target has not been met. Documented measurements for the full Windows scenario exceed this target (sampled combined peak RSS: 56,041 MB, using a decimal comma). These measurements have limitations; no memory budget guarantee is claimed. Read the measurements and their scope ↗

A straightforward start

Your system.
The right installation.

Stable version 0.17.2. Executables remain hosted on GitHub Releases, never on a mirror on this site.

Linux and macOS only

One line to follow the stable release.

Without sudo
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/Roman-Cuisset/miccamwatch/a58c8b9f3a967589a576879d6d27bfdbc40f9dff/installer/install.sh | sh

This command executes a remote script. Downloading and reading it first is safer. This is not a PowerShell command: on Windows, choose the MSI or ZIP below.

Without JavaScript or in an HTTP preview, the HTTPS link points to the script at the release’s immutable commit. On this site over HTTPS, the command is adapted to its local install.sh endpoint. Archives and their checksums are still downloaded from GitHub.

Commands remain selectable without JavaScript. The “Copy” button appears only if the browser provides its secure clipboard API; otherwise, select the text and use Ctrl+C, Cmd+C, or the selection menu.

Windows 10 / 11

Native installation · x64

The per-user MSI adds mcw to PATH and a shortcut to the Start menu. The portable ZIP contains the CLI + tray host pair; keep these two executables together and at the same version.

Reopen PowerShell after installation. For a ZIP installation not added to PATH, use .\mcw.exe instead of mcw.

mcw --version
mcw doctor
mcw status --lang en
mcw top

Desktop Linux

x64 · glibc 2.35+

Requires PipeWire/SPA libraries, pw-dump, and an accessible PipeWire socket in your user session. The tray requires a StatusNotifierItem host; notifications and sound require their session services.

The installer manages the executable under $HOME/.local/bin by default and checks the archive’s exact entry in SHA256SUMS. Unsupported architectures are rejected, not substituted.

macOS 15 or later

Apple Silicon / Intel

The installer selects your native architecture. The menu bar requires an Aqua session. The native helper is bundled; no development environment is required for these archives.

The recommended alternative

Download. Verify. Read. Run.

Linux and macOS · This script is pinned to the release commit. Download and read it first; verify its checksum before running the separate installation command below.

curl --proto '=https' --tlsv1.2 -fsSL \
  https://raw.githubusercontent.com/Roman-Cuisset/miccamwatch/a58c8b9f3a967589a576879d6d27bfdbc40f9dff/installer/install.sh \
  -o mcw-install.sh
less mcw-install.sh

Before execution, compare the file’s checksum: sha256sum mcw-install.sh on Linux, or shasum -a 256 mcw-install.sh on macOS. The expected value for the installer script (not the archives) is:

b7348c9a6f37a3d4f89faa2b767fd4880162d90c8f5d7c151185e0823384d1bb

A checksum displayed through the same channel verifies byte consistency, not independent authenticity. Also consult the script at its immutable source.

After reading and verification, install version 0.17.2, explicitly requesting that it be added to PATH:

sh mcw-install.sh --version v0.17.2 --add-path

Replace --add-path with --no-modify-path to leave the shell configuration unchanged. Without a choice, the installer asks for consent in a terminal; it does not silently change PATH in non-interactive mode. Then open a new terminal. No automatic startup or device control is enabled.

Expected result on Unix: the script displays the download and verification steps, then Installation completed: mcw 0.17.2 for the explicitly requested version. Steps are colored in a compatible terminal (disable with NO_COLOR). It then explains how to run mcw top and, if necessary, use the full path or open a new terminal for PATH. This success concerns installation: it certifies neither device availability nor active protection.

Archives, SHA-256 checksums, and provenance

Download your archive and SHA256SUMS from the same release. On Linux, use sha256sum --check --ignore-missing SHA256SUMS. On macOS, compare shasum -a 256 nom-de-l-archive.tar.gz with the exact manifest entry. In PowerShell, Get-FileHash .\miccamwatch-windows-x86_64.zip -Algorithm SHA256 lets you compare the ZIP checksum (adjust the name for the MSI).

GitHub attestations provide build provenance information. To verify with GitHub CLI, adjust the path to the downloaded file:

gh attestation verify ./miccamwatch-linux-x86_64.tar.gz \
  --repo Roman-Cuisset/miccamwatch \
  --signer-workflow Roman-Cuisset/miccamwatch/.github/workflows/release.yml \
  --source-ref refs/tags/v0.17.2 \
  --source-digest a58c8b9f3a967589a576879d6d27bfdbc40f9dff \
  --deny-self-hosted-runners

Checksums and archives share the publication channel. Build provenance, publisher signing, and antivirus analysis are three different things. This site serves no binaries.

Homebrew / AUR: recipes exist in the repository; no published tap or AUR package is announced. Do not use an invented package-manager command.

Everyday use

Observe first.
Enable what you choose.

Installation alone enables no protection, autostart, or process termination.

01

Check your session

Display the version, collector status, and observed access. status returns 0 with no matching access, 1 with access, and 2 on error: exit code 1 is not a failure.

mcw --version
mcw doctor
mcw status --lang en
02

Choose your interface

top opens the dashboard. tray opens the native menu (Windows notification area, Linux StatusNotifierItem, macOS menu bar). Stop terminal monitoring with Ctrl+C.

mcw top
# Or monitor with notifications:
mcw watch --notify
03

Startup: your consent

Only if you want to, register the tray to launch at login: Windows user task/entry, Linux .desktop file, or macOS LaunchAgent. No login service is installed implicitly.

mcw autostart enable
mcw autostart status
# To undo this:
mcw autostart disable

Automatic termination (--kill-unauthorized) is disabled by default. It requires explicit denial by a publisher/path policy, attributed active capture, two consecutive observations, and an unprotected process. A “suspicious” risk alone does not enable it; a macOS camera without a PID cannot trigger it.

An installation you remain in control of

Update.
Remove cleanly.

Do not mix MSI, managed installer, manual archive, and package manager installations. The installation owner determines the procedure.

Update

  • Windows MSI: install the MSI from the new release; mcw update does not update the MSI registration.
  • Windows portable / Cargo: mcw update verifies and replaces a consistent CLI/tray pair after validating protection readiness and safely stopping the owned tray.
  • Managed Unix: mcw update or the public script with the same prefix. Without --version, the script follows stable latest. The updater rejects downgrades.
  • Manual archive: Linux requires manual replacement; macOS can update an owned standalone executable outside bin under the documented conditions.
  • Package manager: update with that manager, never with the curl script or mcw update.

Managed updates preserve preferences and do not re-enable absent, disabled, or external autostart entries. An installation that is modified, active, or whose ownership cannot be verified is rejected; do not force a workaround.

Uninstall

  • Windows MSI: disable the autostart you want to remove, then use Installed apps in Windows Settings.
  • Portable ZIP: disable the owned autostart entry, stop the processes from this installation, then remove the executable pair.
  • Managed Unix: after downloading and reading the script above, use the command below; add the same --prefix if the installation used a custom prefix.
  • Linux camera component: restore owned bindings and explicitly remove the separate administrator component before updating or removing the user installation. Procedure ↗.
mcw autostart disable
mcw tray stop
sh mcw-install.sh --uninstall

The Unix script removes only its owned executables/state and managed PATH blocks; it does not delete policies, preferences, history, or evidence of control ownership. Removing the application does not replace explicit restoration.

Local by default

Your activity is
not our data.

No audio recording or image capture. No telemetry or history sent to a server.

Read the privacy policy

Metadata, not media

MCW reads system signals and process information. Settings, policies, logs, and history stay local. Check the paths with mcw config settings-path and mcw history path; mcw history clear clears MCW history.

Network exceptions are explicit

Installation and updates contact GitHub. An “online” trust policy allows native network checks of certificates or keys; “offline” prohibits them according to the platform. System logs follow their own retention rules.

This page keeps dependencies light

No tracker, third-party library, or remote font. Optional JavaScript enhances tabs and copying; downloads and guides remain accessible without it. The hosting provider and GitHub may process normal request metadata, such as IP addresses.

When something is unclear

Answers,
without gray areas.

Start with mcw doctor. An unavailable collector is not an all-clear.

“mcw” is not recognized after installation

Open a new terminal after a PATH change. On portable Windows, use .\mcw.exe from the extracted folder. On Unix, try "$HOME/.local/bin/mcw" --version if you kept the default prefix. The installer cannot change its parent terminal’s environment.

If Defender quarantined the executable, PATH is not the problem: keep the Protection history details and follow the precautions below without restoring the detected bytes.

Windows: camera in use, unknown PID, or partial coverage in the tray

Camera activity may remain without an attributed PID when the native report provides no usable timestamp, even if Windows supplies a raw PID. Since version 0.17.2, the tray retains observed access and marks this partial coverage with an orange exclamation mark. Details identify the collector, its reason, and captures; genuine unavailability or a protection error still takes priority. Older versions may display a gray cross and a generic “telemetry degraded” summary.

Check Status details…, mcw status --lang en, mcw status --json, and mcw doctor to distinguish activity, attribution, and collector health. Unknown attribution means neither “no access” nor “camera blocked”: no client identity or authority to stop a process should be inferred from its name alone or a raw PID. The screenshots on this page remain explicitly historical, from 0.17.1.

What privileges and permissions are needed?

Observation: run MCW in your user session without general elevation. System restrictions can make some identities or collectors unavailable; additional privileges do not guarantee attribution.

Windows: camera device changes require separate UAC authorization. Linux: USB camera controls first require the separate administrator component of the same version, then explicit Polkit authorization; the user installer does not deploy it. macOS: installing and removing the camera profile remain manual operations in System Settings, and notifications depend on system permission. MCW does not bypass TCC, Gatekeeper, or SIP; a profile’s presence does not prove capture is denied.

Linux: PipeWire unavailable, no camera, or no tray

Run MCW in your desktop user session, not through sudo. Check pw-dump, PipeWire/SPA libraries, XDG_RUNTIME_DIR, the user socket, and PIPEWIRE_REMOTE if customized. An inaccessible or restarting socket is an error, not “no access”.

The tray requires a StatusNotifierItem host. Notifications need the session service and notify-send; sound needs canberra-gtk-play, a theme, and a session backend. An accepted call does not certify that a notification was seen or a sound heard. Direct camera access outside PipeWire may remain unattributed or degrade observation.

macOS: why does the camera have no PID?

The public CoreMediaIO API reports the device’s running state, not the identity of the client using it. MCW therefore displays an unknown PID and degraded camera health rather than inventing attribution. AVFoundation availability and running state do not prove images were captured. Pending profile approval does not count as blocking.

SmartScreen, Defender, or Gatekeeper: should I bypass them?

No: do not disable protections or add an exclusion. The public 0.17.2 release is unsigned on Windows; no Apple Developer ID signature or notarization is announced. Warnings may therefore appear. A GitHub attestation describes a build, not its safety.

If Defender detects something, record the name, path, version, available hash, and Protection history details. Do not restore the quarantined file or automatically reinstall the detected bytes. The repository documents the incident and manual submission to Microsoft; no false-positive verdict is claimed. Signing, provenance, and safe handling ↗.

I closed the tray: have my protections been removed?

Not necessarily. On Windows, manual protection belongs to a native background broker and remains requested after closing the tray or top, until mcw unmute or mcw camera allow. This does not promise persistence across a restart. Linux and macOS retain their limited, one-shot controls: they do not inherit this Windows mechanism.

Check the actual status. A stopped Windows camera guard remains a warning: a “Block” intent alone does not prove protection of future connections. Explicitly restore before replacement or uninstallation, and resolve any pending state.

Why is an update or uninstall rejected?

An active executable, requested protection, pending restoration, missing/modified receipt, or unsafe path can prevent an operation. Stop your watchers, complete privileged operations, and check control status. The script rejects root, modified/unowned targets, and unsafe links; it does not stop processes for you.

An older tray may require a normal manual exit: do not force it to quit during a camera operation. Do not delete ownership records to bypass rejection. Use the appropriate installation owner and the documented procedure.

How can I share diagnostics without exposing my private information?

mcw doctor --json and mcw status --json help with diagnostics, but paths, users, PIDs, devices, and application names may be personal information. Review and redact this data before attaching an excerpt to an issue. MCW does not automatically collect your reports; sharing remains voluntary. Technical evidence details stay in English to keep diagnostics stable.

Open, documented, auditable

Trust begins
with what you can verify.