Analysis updated 2026-07-06 · repo last pushed 2023-04-18
Request camera and microphone access before a video call starts in an Electron conferencing app.
Ask for Calendar permission in a Node.js calendar synchronization tool.
Check if the user has granted access to Contacts before attempting to read them.
Open System Preferences to let the user enable Full Disk Access for your app.
| jonluca/node-mac-permissions | google/santa | khronosgroup/moltenvk | |
|---|---|---|---|
| Stars | — | 4,515 | 5,621 |
| Language | Objective-C++ | Objective-C++ | Objective-C++ |
| Last pushed | 2023-04-18 | — | — |
| Maintenance | Dormant | — | — |
| Setup difficulty | moderate | hard | hard |
| Complexity | 2/5 | 4/5 | 4/5 |
| Audience | developer | ops devops | developer |
Figures from each repo's GitHub metadata at analysis time.
Requires a compatible terminal app (not the default macOS Terminal) for permission prompts, and developers must add Apple usage description strings to their app config or prompts will crash.
If you're building a desktop app for macOS, you've likely hit the wall of system permissions. Modern macOS requires explicit user approval before an application can touch things like the camera, microphone, contacts, calendar, or files in the Desktop and Documents folders. This project gives developers a straightforward way to handle those permission requests from JavaScript code, rather than wrestling with Apple's native languages. The library provides two main capabilities. First, you can check the current permission status for a specific resource, whether the user has already granted access, denied it, or hasn't been asked yet. Second, you can trigger the actual permission prompt that the user sees. For most resources like the microphone or camera, calling the appropriate function pops up the standard macOS dialog asking the user for permission. For a few things like Full Disk Access, where Apple doesn't allow apps to prompt directly, it opens the relevant System Preferences pane so the user can toggle the setting themselves. This would be useful for anyone building an Electron app or a Node.js desktop tool on macOS. For example, if you're building a video conferencing app, you'd use this to request camera and microphone access before a call starts. If you're building a calendar sync tool, you'd use it to ask for Calendar access. It covers the full range of macOS privacy-protected resources: contacts, reminders, photos, screen capture, speech recognition, input monitoring, and protected folders. One important detail: Apple requires apps to explain why they need each permission. Developers must include a text explanation in their app's configuration file for each resource they want to access, otherwise the permission request will crash rather than prompt. The library handles the prompting logic, but the usage descriptions are the developer's responsibility. The library is written in Objective-C++ because it needs to call directly into macOS's native security and privacy APIs. It wraps those native calls into simple JavaScript functions that return promises, so developers can write async/await-style code without dealing with the underlying system complexity. Note that running it as a plain Node.js script requires a compatible terminal app, the standard macOS Terminal won't work for permission prompts.
A library that lets JavaScript developers check and request macOS system permissions (camera, microphone, contacts, files, etc.) without writing native Apple code.
Mainly Objective-C++. The stack also includes Objective-C++, Node.js, JavaScript.
Dormant — no commits in 2+ years (last push 2023-04-18).
No license information was provided in the explanation, so the permissions for using this code are unknown.
Setup difficulty is rated moderate, with roughly 30min to a first successful run.
Mainly developer.
This repo across BitVibe Labs
Verify against the repo before relying on details.