Capabilities
Capabilities are the device features your app is allowed to use. Studio's
capabilities form writes the same blocks you would otherwise hand-write in
waid.config.json, so Capabilities is the
reference for what each one grants.
Everything defaults to off. You add a group, then turn on the specific toggles inside it.
Groups#
| Group | What it covers | Platforms |
|---|---|---|
| Host functions | Native APIs exposed as window.host.*: files, shell, vault, auth, actions, intents, push, events, MCP, consent | Desktop, Android |
| Media | Audio and video playback, camera and microphone capture | Desktop, Android, iOS |
| Photos | Read the device photo library | Android |
| Storage | File access beyond the app's own directories | Android |
| Contacts | Read and write the address book | Android |
| Telephony | Place calls, read call state, act as the default dialer | Android |
| Messaging | Send, read and receive SMS, act as the default SMS app | Android |
| Launcher | Act as the home screen, list and manage installed apps | Android |
| Alarms | Schedule work that wakes the device | Android |
Each toggle names the OS permission it maps to, so you can see what you are actually asking the user for.
Two toggles deserve deliberate thought. All files access maps to Android
MANAGE_EXTERNAL_STORAGE, which Play Store review scrutinises. Place calls
maps to CALL_PHONE, which dials without showing the dialer. Neither is
wrong, but both need a reason you are prepared to defend.
Auto-detection#
Studio can read your project's source and suggest the capabilities it can prove
you need. Each suggestion carries a reason and the path:line where it was
seen, so you are reviewing evidence rather than accepting a guess.
Detection is deliberately conservative, and it is worth understanding why:
- A rule exists only where the source contains an unambiguous call into the capability. A false positive requests a permission the app never uses, which prompts the user for nothing and is exactly what store review penalises.
- Whole groups are deliberately absent because no reliable signal exists in
web source: photos, storage, contacts, telephony, messaging, launcher and
alarms are never auto-suggested. A
tel:link, for instance, opens the dialer through an intent and needs no calling permission at all, so inferring telephony from one would be wrong rather than cautious.
So detection narrows the work; it does not finish it. Anything in that list you still turn on yourself.
If you disagree with a suggestion, dismissing it stops it being offered again. Studio takes the disagreement as the answer rather than re-suggesting on every scan.