Meta VR Start Developer Competition 2026 - DEV Community

DEV Community

Kyle Y. Parsotan
Kyle Y. Parsotan

Posted on Edited on

Meta VR Start Developer Competition 2026

This is a submission for the MLH x DEV Writing Challenge

What I Built

IRON FRONT VR — Operation Black Iron
A Call of Duty-style first-person shooter for Meta Quest (WebXR in the Quest Browser) that also plays on desktop with mouse and keyboard. It has an open world, a 5-mission story campaign, round-based Zombies, Training, a squad mode and a Mixed Reality drill.

Enemies, squadmates and zombies are realistic skinned human characters with real walk, run and idle animations. Their arms are posed live with inverse kinematics, so soldiers actually aim their rifles at you.

Built with Meta's Immersive Web SDK
This project was generated with npm create @iwsdk@latest (IWSDK 1.1.0-rc.2, three.js via super-three r185) and the game was wired into it. If you'd rather stay on the last stable release, set @iwsdk/core, @iwsdk/cli and @iwsdk/vite-plugin-dev to 1.0.1 and three to npm:super-three@0.181.0 in package.json; the game works on both.

The game runs inside an IWSDK World (src/index.js). IWSDK owns the renderer, scene, player rig, XR session, controller input and frame loop, and the game is registered as an ECS System. It's configured in iwsdk.config.json (VR mode, local-floor, 75° FOV, 900 m far plane, Quest 3 emulator).

Ship to the Meta Horizon Store (immersive PWA)
The app is already prepared: there's public/manifest.webmanifest, the 192, 512 and maskable icons, and an auto-enter-VR step in src/index.js that runs only when installed as a Quest app (it's gated on getDigitalGoodsService). Browser tabs keep the Enter VR button.

Host it on a stable HTTPS origin, for example https://iron-front-vr.vercel.app, not a preview or tunnel URL.

Install Meta's bubblewrap with npm i -g @meta-quest/bubblewrap-cli, then run bubblewrap doctor once in a terminal and accept the JDK and Android SDK installs.

Create a signing key and keep it forever. You can't update the app without it: keytool -genkeypair -v -keystore twa/android.keystore -alias android -keyalg RSA -keysize 2048 -validity 10000
Copy twa/twa-manifest.template.json to twa/twa-manifest.json and fill in your domain, keystore path and (later) your Horizon App ID. Keep "isMetaQuest": true and "horizonOSAppMode": "immersive".

Build the APK: cd twa && BUBBLEWRAP_KEYSTORE_PASSWORD=… BUBBLEWRAP_KEY_PASSWORD=… bubblewrap update && bubblewrap build
Digital Asset Links: copy twa/assetlinks.template.json to public/.well-known/assetlinks.json with your keystore's SHA-256 (keytool -list -v -keystore twa/android.keystore), rebuild and redeploy. The Quest app won't launch until this URL is live.

Sideload and test with adb install -r twa/app-release-signed.apk, then upload to the Store with Meta's ovr-platform-util upload-quest-build --app-id … --app-secret … --apk app-release-signed.apk --channel ALPHA.

Web-only changes (gameplay, art, levels) only need a redeploy. The installed app loads the live site. You only rebuild the APK for package or name changes, the icon, version or signing.

Demo

Partner Technologies

Meta VR Developer website, Major League Hackathon

Hackathon Experience

This project is still in development and being tested for production however it is viewable via the web and VR. Built with Meta's Immersive Web SDK.

Top comments (0)