Get it on the Meta Horizon Store · Download the APK · Build from source
OpenQR reads QR codes through the Quest passthrough camera and opens what's in them. It runs in a normal window, so you can keep it next to whatever else you have open.
- Websites open in your browser, or in an installed app that claims that site's links.
- YouTube links play in YouTube VR, 360° videos included.
- Meta Horizon Store links open the app's page in the Store.
- Matterport tours open with the tour already running, one tap from VR.
- App deep links (
myapp://anything) open the app that declares that scheme.
Close whatever it opened and you're back at the scanner. OpenQR refuses scripts, files and intent: links. Wi-Fi codes, contacts and plain text show as unsupported for now.
Put any of these in a QR code:
myapp://anything
https://yoursite.com/page
https://www.youtube.com/watch?v=VIDEO_ID
https://www.meta.com/experiences/APP_ID/
https://my.matterport.com/show/?m=MODEL_ID
A deep link needs an intent filter with the BROWSABLE category in your app's manifest. A website opens in your app when your app is the one installed app that claims its links.
Meta Horizon Store: OpenQR on the Meta Horizon Store. This is the easiest way, and it keeps the app updated.
Sideload: download openqr-quest-v*.apk from the latest release and install it with your headset in developer mode:
adb install -r openqr-quest-v1.0.60.apkThe release APK is the same build that ships on the Store. Check it against SHA256SUMS in the release.
| Device | Minimum | Notes |
|---|---|---|
| Meta Quest 3 | Horizon OS, Android API 34 | Passthrough camera access required |
| Meta Quest 3S | Horizon OS, Android API 34 | Passthrough camera access required |
OpenQR asks for the standard CAMERA permission and the Horizon OS HEADSET_CAMERA permission. Meta only gives apps camera access on Quest 3 and 3S.
Prerequisites: JDK 17 or newer, Android SDK 36, and the Gradle wrapper in this repo.
git clone https://github.com/orgista/openQR.git
cd openQR
./gradlew assembleQuestDebug| Command | Description |
|---|---|
./gradlew assembleQuestDebug |
Quest debug APK at app/build/outputs/apk/quest/debug/, installs as com.orgista.openqr.debug |
./gradlew assemblePlayDebug |
Phone and tablet build |
./gradlew testQuestDebugUnitTest |
Unit tests |
Release builds need your own signing key, passed through the OPENQR_KEYSTORE_FILE, OPENQR_KEYSTORE_PASS, OPENQR_KEY_ALIAS and OPENQR_KEY_PASS environment variables.
OpenQR has no internet permission, no account and no analytics. It reads camera frames on the headset to find the code, then discards them. It keeps no scan history and hands the link straight to the app that opens it.
Issues and pull requests are welcome. Keep changes small and say how you tested them on a headset.
Apache 2.0. Third-party notices are in THIRD_PARTY_NOTICES.md.
Made by Orgista. More apps at github.com/orgista.