Skip to the content.

Flavor capability matrix

This table is the canonical answer to “which capability is available in which flavor”. It is generated from the productFlavors block of app_v2/build.gradle.kts, which is the only source of truth - a capability exists exactly insofar as it is compiled in. Every other document in this repository defers to this table instead of restating the grid, and scripts/quality/assert-flavor-matrix-docs.ps1 fails the build when one of them drifts.

Regenerate with pwsh -NoProfile -File scripts/docs/generate-flavor-matrix.ps1.

Legend

Matrix

Flag standard noLegal lite photos legacy vr
IS_NO_LEGAL_FLAVOR [-]* [+] [-]* [-]* [-]* [-]*
SUPPORT_LAUNCHER [+] [+] [-]* [-]* [-]* [-]*
DECLARES_BATTERY_OPTIMIZATION [+]* [+]* [+]* [+]* [+]* [+]*
SUPPORT_VIDEO [+] [+] [+] [-] [+] [+]
SUPPORT_AUDIO [+] [+] [+] [-] [+] [+]
SUPPORT_STREAMS [+] [+] [-] [-] [+] [+]
SUPPORT_MIC_RECORDING [+] [+] [-] [-] [+] [+]
DECLARES_MIC_RECORDING [+] [+] [+] [-] [+] [+]
SUPPORT_IMAGES [+] [+] [+] [+] [+] [+]
SUPPORT_CLOUD [+] [+] [-] [+] [+] [+]
SUPPORT_LOCAL_NETWORK [+] [+] [-] [+] [+] [+]
SUPPORT_DOCUMENTS [+] [+] [-] [-] [+] [+]
ENABLE_ANIMATIONS [+] [+] [-] [+] [+] [+]
ENABLE_EPUB [+] [+] [-] [-] [+] [+]
ENABLE_TRANSLATION [+] [+] [-] [-] [+] [+]
ENABLE_PERSISTENT_AUDIO_PLAYBACK [+] [+] [-] [-] [+] [+]
SUPPORTS_DEFAULT_PLAYER [+] [+] [-] [+] [+] [+]
SUPPORT_VR_PLAYER [-] [+] [-] [-] [-] [-]
SUPPORT_WEAR_COMPANION [+] [+] [-] [-] [-] [-]
SUPPORT_CAST [+] [+] [+] [+] [+] [-]
SUPPORT_NETWORK_MONITOR [+] [+] [-] [-] [-] [-]
VR_UI_COMPOSITION_LAYER_ENABLED n/a [+] n/a n/a n/a [-]
minSdk 26 26 26 26 23 26

How the app reads this

Shared code never reads these fields directly (CLAUDE.md Rule 14). They are folded into the typed capability record bound per flavor, and section availability is resolved through the single capability-availability entry point. A [-] therefore means the surface has no entry point in that flavor, not that it is merely restricted.