skills/hz-vrc-check/SKILL.md
Validates Meta Quest and Horizon OS apps against VRC (Virtual Reality Check) store publishing requirements. Use when preparing a build for Quest Store submission or running pre-submission compliance checks.
npx skillsauth add meta-quest/agentic-tools hz-vrc-checkInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Help developers prepare and validate Meta Quest apps for store submission. This skill covers the full publishing readiness lifecycle -- project configuration, code review, VRC compliance, content policies, data use, and store assets.
Apps go through these phases before reaching the store. Understand which phase the developer is in to focus your review.
After release, binary updates ship immediately without review. Metadata updates (descriptions, images, trailers) require 1-2 day review.
Work through each step in order. Each step tells you what to check and points to a reference doc when you need deeper detail.
Verify the project is set up correctly for store submission.
Check these items:
VRC.Quest.Security.1 -- most commonly failed VRC)Find entitlement check in code:
# Unity
grep -rn "Entitlements\|IsEntitled\|GetViewerEntitled\|PlatformInitialize" --include="*.cs" Assets/
# Unreal
grep -rn "Entitlement\|OvrPlatform\|GetViewerEntitlement" --include="*.cpp" --include="*.h" Source/
# Native / Spatial SDK
grep -rn "ovr_Entitlement_GetIsViewerEntitled\|ovr_PlatformInitializeAndroid" --include="*.c" --include="*.cpp" --include="*.h" src/
If entitlement check is missing or deferred, flag it -- this will fail review.
Audit the Android manifest against release requirements. Non-conforming manifests fail VRC.Quest.Packaging.1.
Quick manifest check on a built APK:
aapt dump badging app.apk
Verify: targetSdkVersion is 32-34 for immersive apps (32-36 for 2D panel apps), minSdkVersion 29-32, installLocation is auto, debuggable is false/unset.
Permissions check:
aapt dump permissions app.apk
Cross-reference against three categories: prohibited (auto-reject on upload), review-requiring (need justification), and safe. Unity and Unreal silently add permissions via plugins -- remove them before submission.
For the full manifest spec, SDK version table, prohibited/review-requiring permission lists, and engine-specific removal instructions, see references/publishing-requirements.md.
Validate the release APK before upload.
apksigner verify app.apk # Signature (VRC.Quest.Packaging.2)
ls -lh app.apk # Size < 1 GB (VRC.Quest.Packaging.5)
aapt dump badging app.apk | grep native-code # 64-bit arm64-v8a (VRC.Quest.Packaging.6)
Also verify: keystore is consistent across versions, no unsupported Android features (no Google Play Services), expansion files follow OBB naming and size limits.
For packaging specs and expansion file details, see references/publishing-requirements.md.
Deploy to a Quest device and run through the app.
hzdb app install ./app.apk
hzdb app launch com.example.app
hzdb perf capture
Test for at least 45 minutes (or content length, whichever is shorter):
VRC.Quest.Performance.1)VRC.Quest.Performance.2)VRC.Quest.Performance.3)VRC.Quest.Functional.2)VRC.Quest.Input.4)VRC.Quest.Functional.7)VRC.Quest.Functional.1, .3)VRC.Quest.Functional.12)For the complete VRC test plan with all categories and test steps, see references/vrc-test-plan.md.
After technical review passes, Meta evaluates the app's UX quality, content, and policies. Prepare for this by reviewing:
For the full content review criteria, app policies, and brand guidelines, see references/content-and-policies.md.
Required if the app uses platform features that access user data.
Features that require a DUC: User ID, User Profile, Avatars, Achievements, In-App Purchases, Matchmaking, Leaderboards, Cloud Storage, Deep Linking, Invites, Followers, Parties, Subscriptions, Challenges, User Age Group.
Verify:
For the DUC features table, submission process, and data handling questions, see references/content-and-policies.md.
Review all store-facing materials before submission.
Metadata checklist:
Asset checklist:
For full asset specifications, safe area rules, and format requirements, see references/store-assets.md.
Summarize findings as a pass/fail checklist:
Flag any failures with VRC IDs and remediation steps. Recommend whether the build is ready for Production channel upload.
The most frequently failed VRCs -- check these first:
| VRC | Issue |
|-----|-------|
| VRC.Quest.Security.1 | Missing or late entitlement check |
| VRC.Quest.Security.2 | Unnecessary permissions (often added by engine plugins) |
| VRC.Quest.Performance.1 | Frame rate below target refresh rate |
| VRC.Quest.Functional.2 | App doesn't pause when HMD removed |
| VRC.Quest.Functional.7 | No offline notification for internet-required apps |
| VRC.Quest.Input.4 | Not focus-aware under Universal Menu |
| VRC.Quest.Tracking.1 | Behavior doesn't match declared play mode |
hzdb (Horizon Debug Bridge) is the CLI for on-device testing. Invoke via npx — no install required:
npx -y @meta-quest/hzdb --version
Examples below use the bare hzdb command for brevity — substitute npx -y @meta-quest/hzdb in front.
hzdb device list # Verify device connection
hzdb device battery # Check battery and thermal state
hzdb app install ./app.apk # Deploy build
hzdb app launch com.example.app # Launch app
hzdb app stop com.example.app # Stop app
hzdb log # View app logs
hzdb adb logcat --tag ThermalService --level W # Thermal monitoring
hzdb perf capture # Performance profiling
hzdb capture screenshot # Capture VR view
hzdb docs search "entitlement check" # Search documentation
Load these on demand when you need deeper detail:
tools
Provides the complete metavr (Meta VR CLI) reference for Meta Quest and Horizon OS development — installation, device setup, command discovery, MCP server mode, documentation search, app deployment, device testing setup, audio control, screenshots, and performance analysis. Use when the user needs to install metavr, asks what commands are available, needs CLI syntax help, or wants to know what metavr can do.
development
Guides integration of the Horizon Platform SDK for Meta Quest and Horizon OS Unity/C# apps — achievements, IAP, users, leaderboards, challenges, presence, notifications, abuse reporting, entitlements, asset files, application lifecycle, consent, device integrity, language packs, user age categories, and rate and review. Covers setup, initialization, API usage, data types, error handling, and best practices for all 18 public platform SDK packages.
development
Meta XR Core SDK (com.meta.xr.sdk.core) for Unity XR development. Use when setting up VR/MR projects, configuring OVRManager, adding OVRCameraRig, enabling passthrough, hand tracking, spatial anchors, boundaryless mode, controller input, Scene API, or any Meta Quest XR feature. Covers OVRProjectSetup, AndroidManifest generation, and project configuration for Meta Quest headsets.
development
Build and sideload Android apps for Meta Portal devices (Portal, Portal+, Portal Mini, Portal Go, Portal TV) using metavr. Use when targeting Portal hardware — covers ADB enablement, the no-GMS constraint, manifest/launcher intent-filter requirements, icon density quirks (PNG-only, mipmap-xxxhdpi), the Smart Camera SDK, and the gradle + `metavr adb` build/deploy/debug loop. Auto-load when the user mentions "Portal" device, targets `minSdkVersion` 28-29 for a tabletop/TV form factor, or works with the `com.facebook.portal` package.