From meta-vr
Guides end-to-end Meta Quest and Horizon OS app submission to the Meta Horizon Store — build validation, store-readiness checks, asset preparation, upload, and submission tracking.
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta-vr:hz-store-submitThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Guide the end-to-end process of submitting a Meta Quest application to the Meta Horizon Store. This skill covers build validation, store-readiness checks, store asset preparation, upload, and submission tracking.
Guide the end-to-end process of submitting a Meta Quest application to the Meta Horizon Store. This skill covers build validation, store-readiness checks, store asset preparation, upload, and submission tracking.
Use this skill when you need to:
Run the VRC (Virtual Reality Check) validation inline (see the VRC checklist below) for thorough compliance testing before proceeding to submission.
The full submission process follows this order:
1. Build Validation → Verify APK is correctly signed, targets ARM64, meets packaging requirements
2. Store Readiness → Run through the readiness checks, fix any violations
3. Asset Preparation → Prepare store listing images, videos, descriptions, metadata
4. Dashboard Setup → Create app on developer.meta.com, configure pricing, age rating
5. Upload → Upload the build to the platform
6. Submission → Submit for review
7. Tracking → Monitor review status, respond to feedback
Before uploading, validate the APK meets basic packaging requirements.
The release APK must be signed with an Android keystore. Debug-signed APKs will be rejected.
# Verify the APK is signed (not debug-signed)
metavr adb shell "pm dump <package> | grep -i signature"
The signing key must remain consistent across updates. Changing the signing key requires a new app entry.
# Install the APK on a connected device to test
metavr app install path/to/release.apk
# Verify it launches correctly
metavr app launch <package>
# Check the manifest for required fields
metavr adb shell "dumpsys package <package> | head -50"
Required manifest elements:
android:targetSdkVersion >= 32android:minSdkVersion >= 29com.oculus.intent.category.VR intent categoryRun the app on a Quest device and verify:
# Monitor frame rate
metavr adb logcat --tag VrApi | grep FPS
# Check thermal state
metavr device battery
# Watch for thermal warnings
metavr adb logcat --tag ThermalService --level W
Run through the VRC checklist below for a detailed walkthrough. Key VRC categories:
targetSdkVersion >= 32 (2D panel apps: 34+), minSdkVersion >= 29, ARM64-only, a version code strictly higher than any previously uploaded build, and the com.oculus.intent.category.VR intent category declared in the launch activity.CALL_PHONE, SEND_SMS, READ_CONTACTS), precise location (ACCESS_FINE_LOCATION), and unjustified READ_EXTERNAL_STORAGE; guard optional hardware with hasSystemFeature() and drop the matching <uses-permission> when unused. Audit the merged manifest (including third-party libraries) with aapt dump permissions <app>.apk. Paid apps must verify entitlement within 10 seconds of launch (no internet required) or they are auto-rejected. See the prohibited and review-required permission lists at developers.meta.com/horizon/resources/permissions-prohibited/ and .../permissions-review-required/.Common store rejection reasons:
| Rejection Reason | Fix |
|---|---|
| Crash during review | Fix the crash. Run metavr adb logcat --buffer crash to investigate. |
| Frame rate below threshold | Optimize rendering. Profile with Perfetto or OVR Metrics Tool. |
| Missing store assets | Ensure all required images are uploaded at correct dimensions. |
| Disallowed permissions | Remove permissions not needed by the app (e.g., CALL_PHONE, SEND_SMS). |
| Text in unsafe zone of hero art | Keep text within the inner 80% safe area of hero images. |
| App Not Responding (ANR) | Move long network, IO, or asset work off the main thread. Reproduce with metavr adb logcat --buffer crash. |
| Comfort rating mismatch | Set the comfort rating to match actual locomotion (Comfortable / Moderate / Intense). |
| Paid app entitlement check missing | Verify entitlement within 10 seconds of launch (no internet required) before unlocking content. |
The Meta Horizon Store requires specific assets for the store listing.
| Asset | Dimensions | Format | Notes |
|---|---|---|---|
| App icon | 1024 x 1024 px | PNG or JPEG | Square, no rounded corners (system applies them) |
| Hero art (landscape) | 2560 x 1440 px | PNG or JPEG | Main store listing image. Keep text in inner 80% safe area. |
| Screenshots | 2560 x 1440 px | PNG or JPEG | Minimum 3 screenshots. Captured from the app, not mockups. |
| Small landscape (optional) | 1280 x 720 px | PNG or JPEG | Used in some store placements |
Upload the signed release APK through the developer dashboard or via CLI:
# The dashboard upload is preferred for first submissions.
# For subsequent builds, you can use the ovr-platform-util CLI:
ovr-platform-util upload-quest-build --app-id <APP_ID> \
--app-secret <APP_SECRET> \
--apk path/to/release.apk \
--channel STORE
After upload, verify the build appears in the dashboard with the correct version code and architecture.
Plan for a review period of approximately 1-2 weeks. Submit at least 2 weeks before your target launch date.
After submission:
Post-approval:
npx claudepluginhub meta-quest/agentic-tools --plugin meta-vrGuides shipping a web app to the Meta Horizon Store as a PWA/TWA in 2D or WebXR mode. Covers IWSDK WebXR builds, Vercel deployment, manifest/icons, bubblewrap packaging, keystore/Digital Asset Links, and ovr-platform-util upload.
Guides App Store submission preparation and rejection prevention. Covers privacy manifests, StoreKit/IAP rules, ATT, HIG compliance, and metadata requirements.
Consolidates store-facing assets, metadata, compliance paperwork, and packaging details for game/app store submission. Tracks platform-specific blockers and produces submission checklists.