/hz-store-submit
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. Use when preparing a Quest app for store publishing.
$ npx -y skills add meta-quest/agentic-tools --skill hz-store-submit --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/hz-store-submit
Context preview
The summary Claude sees to decide when to auto-load this skill.
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. Use when preparing a Quest app for store publishing.
SKILL.md
hz-store-submit.SKILL.mdname: hz-store-submit
license: Apache-2.0
description: 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. Use when preparing a Quest app for store publishing.
allowed-tools: Bash(metavr:*) Bash(hzdb:*)
Store Submission 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.
When to Use This Skill
Use this skill when you need to:
- Prepare a Quest app build for store submission
- Validate that an APK meets the Horizon Store's publishing requirements before uploading
- Prepare and validate store listing assets (icons, screenshots, videos, descriptions)
- Walk through the submission workflow on the developer dashboard
- Track a submission through the review process
- Troubleshoot submission rejections
Run the VRC (Virtual Reality Check) validation inline (see the VRC checklist below) for thorough compliance testing before proceeding to submission.
Submission Workflow Overview
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
Step 1: Build Validation
Before uploading, validate the APK meets basic packaging requirements.
APK Signing
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.
Manifest Checks
# 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` >= 32
- `android:minSdkVersion` >= 29
- Target architecture: ARM64 only (no x86 or ARM32)
- Application must declare the `com.oculus.intent.category.VR` intent category
- Version code must be higher than any previously uploaded build
Performance Baseline
Run the app on a Quest device and verify:
- Maintains 72 Hz minimum frame rate (90 Hz recommended for Quest 3)
- No thermal throttling warnings within the first 5 minutes of normal use
- Load time under 15 seconds from launch to interactive content
# 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
Step 2: Store Readiness Checks
Run through the VRC checklist below for a detailed walkthrough. Key VRC categories:
- **Packaging** — Release-signed APK (APK Signature Scheme v2; v1-only is rejected), `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.
- **Functional** — No crashes or ANRs in any core flow (first-run setup, permission dialogs, rapid scene transitions, low-battery/thermal). Keep long network, IO, and asset work off the main thread.
- **Performance** — Sustained 72 Hz on Quest 2 / 90 Hz on Quest 3, no thermal throttling within 5 minutes, interactive within 15 seconds of launch, and no memory leaks over an extended session.
- **Security / Permissions** — Declare only permissions the app actually uses; disallowed permissions cause automatic rejection *before* manual review. Remove telephony/SMS/contacts (`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/`.
- **Asset** — Store images meet the dimension and content specs in [Step 3](#step-3-asset-preparation), screenshots are real on-device captures (not editor views or mockups), text stays inside the inner 80% safe area of hero art, and the comfort rating matches the actual locomotion (Comfortable = stationary/teleport, Moderate = slow smooth locomotion with comfort options, Intense = fast movement).
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`. | | Co
Read more
name: hz-store-submit license: Apache-2.0 description: 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. Use when preparing a Quest app for store publishing. allowed-tools: Bash(metavr:*) Bash(hzdb:*)
Store Submission 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.
When to Use This Skill
Use this skill when you need to:
- Prepare a Quest app build for store submission
- Validate that an APK meets the Horizon Store's publishing requirements before uploading
- Prepare and validate store listing assets (icons, screenshots, videos, descriptions)
- Walk through the submission workflow on the developer dashboard
- Track a submission through the review process
- Troubleshoot submission rejections
Run the VRC (Virtual Reality Check) validation inline (see the VRC checklist below) for thorough compliance testing before proceeding to submission.
Submission Workflow Overview
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
Step 1: Build Validation
Before uploading, validate the APK meets basic packaging requirements.
APK Signing
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.
Manifest Checks
# 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` >= 32
- `android:minSdkVersion` >= 29
- Target architecture: ARM64 only (no x86 or ARM32)
- Application must declare the `com.oculus.intent.category.VR` intent category
- Version code must be higher than any previously uploaded build
Performance Baseline
Run the app on a Quest device and verify:
- Maintains 72 Hz minimum frame rate (90 Hz recommended for Quest 3)
- No thermal throttling warnings within the first 5 minutes of normal use
- Load time under 15 seconds from launch to interactive content
# 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
Step 2: Store Readiness Checks
Run through the VRC checklist below for a detailed walkthrough. Key VRC categories:
- **Packaging** — Release-signed APK (APK Signature Scheme v2; v1-only is rejected), `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.
- **Functional** — No crashes or ANRs in any core flow (first-run setup, permission dialogs, rapid scene transitions, low-battery/thermal). Keep long network, IO, and asset work off the main thread.
- **Performance** — Sustained 72 Hz on Quest 2 / 90 Hz on Quest 3, no thermal throttling within 5 minutes, interactive within 15 seconds of launch, and no memory leaks over an extended session.
- **Security / Permissions** — Declare only permissions the app actually uses; disallowed permissions cause automatic rejection *before* manual review. Remove telephony/SMS/contacts (`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/`.
- **Asset** — Store images meet the dimension and content specs in [Step 3](#step-3-asset-preparation), screenshots are real on-device captures (not editor views or mockups), text stays inside the inner 80% safe area of hero art, and the comfort rating matches the actual locomotion (Comfortable = stationary/teleport, Moderate = slow smooth locomotion with comfort options, Intense = fast movement).
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`. | | Co
Agentic skills and tools for Meta Quest and Horizon OS development.
Repo: meta-quest/agentic-tools
Other skills on meta-vr.
- /hz-android-2d-porting
Guides porting existing Android 2D apps to Meta Quest and Horizon OS — input adaptation, panel layout, and design requirements. Use when adapting a mobile Android app for Quest.
Open skill - /hz-api-upgrade
Upgrades Meta Quest apps to newer Horizon OS SDK versions — migration guides, deprecated API replacements, changelog. Use when updating SDK versions or fixing deprecated API warnings.
Open skill - /hz-immersive-designer
Guides design of comfortable, intuitive VR/MR experiences for Meta Quest and Horizon OS — comfort guidelines, interaction patterns, spatial layout, accessibility. Use during UX design review or when evaluating comfort and accessibility.
Open skill - /hz-iwsdk-webxr
Builds WebXR experiences for Meta Quest and Horizon OS using the Immersive Web SDK (IWSDK) — ECS architecture, Three.js integration, spatial UI. Use when creating web-based VR/MR apps for Quest Browser.
Open skill - /hz-new-project-creation
Scaffolds new Meta Quest and Horizon OS projects with recommended settings for Unity, Unreal, Android/Spatial SDK, or WebXR. Use when creating a new Quest app from scratch.
Open skill - /hz-perfetto-debug
Analyzes Meta Quest and Horizon OS VR performance using Perfetto traces — frame timing, CPU/GPU bottlenecks, render pass analysis. Use when profiling frame drops, jank, or thermal issues on Quest devices.
Open skill

