A fast and secure browser for standalone virtual-reality and augmented-reality headsets.
See the codeThe goal of the Wolvic project is to create a full-featured browser exclusively AR and VR headsets.
You can find us in wolvic.com, Mastodon @WolvicXR, Twitter @wolvicxr, and at [email protected].
Want to learn more about Wolvic? Read our FAQ!
For setup instructions using the development version of the Chromium backend check this instructions out instead
After PR #70, WebXR sessions won't work with the prebuilt maven GeckoView libraries because that PR introduced a change in the GeckoView protocol. So you have to build GeckoView manually by applying patches at this repository.
This could be done either by using a local maven repository (quite cumbersome), or via Gradle's dependency substitutions (not at all cumbersome!).
Currently, the substitution flow is streamlined for some of the core dependencies via configuration flags in local.properties. You can build against a local checkout of the following dependencies by specifying their local paths:
dependencySubstitutions.geckoviewTopsrcdir=/path/to/mozilla-release (and, optionally, dependencySubstitutions.geckoviewTopobjdir=/path/to/topobjdir). See Bug 1533465.
dependencySubstitutions.geckoviewTopobjdir while the x86_64 path via dependencySubstitutions.geckoviewTopobjdirX64Do not forget to run a Gradle sync in Android Studio after changing local.properties. If you specified any substitutions, they will be reflected in the modules list, and you'll be able to modify them from a single Android Studio window.
For step by step guide check here.
git clone [email protected]:Igalia/wolvic.git
cd wolvic
If you're developing for the Oculus, Huawei, Pico, or VIVE, you need to clone the repo with third-party SDK files.
wolvic$ git clone [email protected]:Igalia/wolvic-third-parties.git third_party
This repo is only available to Igalia members. If you have access to the relevant SDK but not this repo, you can manually place them here:
third_party/OVRPlatformSDK/ for Oculus (should contain a Android and Include folders)third_party/hvr/ for Huawei (should contain arm64-v8a, armeabi-v7a and include folders)third_party/picoxr Pico OpenXR Mobile SDK (should contain libs folders, among other things that are not necessary for Wolvic)third_party/spaces for Snapdragon Spaces(should contain libopenxr_loader.aar)third_party/aliceimu/ for Huawei Vision Glass (should contain an .aar file with the IMU library for the glasses)The repo in third_party can be updated like so:
pushd third_party && git fetch && git checkout main && git rebase origin/main && popd
You may need to set up two-factor authentication for the command line.
wolvic/third_party$ git submodule update --init --recursive
You can build for different devices:
oculusvr: Oculus Questhvr: Huawei VR Glassespicoxr: Pico 4 and (untested) Pico Neo 3lynx: Lynx R1spaces: Lenovo A3visionglass: Huawei Vision Glassaosp: MagicLeap2 (but should work for any other AOSP device using OpenXR)pfdmxr: PFDM YVR1, PFDM YVR2 and PFDM MRFor testing on a non-VR device:
noapi: Runs on standard Android phones without a headsetBuilding for Huawei requires access to its SDKs which is not included in this repo.
The command line version of gradlew requires JDK 11. If you see an error that Gradle doesn't understand your Java version, check which version of you're using by running java -showversion or java -version. You're probably using and older JDK, which won't work.
Open the project with Android Studio then build and run it. Depending on what you already have installed in Android Studio, the build may fail and then may prompt you to install dependencies. Just keep doing as it suggests. To select the device to build for, go to Tool Windows > Build Variants and select a build variant corresponding to your device.
By default Wolvic will try to download prebuilt GeckoView libraries from Mozilla's maven repositories, where WebXR won't work and that should be used just for testing the 2D browser or to download browser features. If you want to have this, just skip the GeckoView local substitution part of the Setup instructions.
You can enable a dev applicationID sufix to install both dev and production builds simultaneously. You just need to add this property to your user.properties file:
simultaneousDevProduction=true
Local release builds can be useful to measure performance or debug issues only happening in release builds. Insead of dealing with release keys you can make the testing easier just adding this property to your user.properties file:
useDebugSigningOnRelease=true
Note: the release APKs generated with a debug keystore can't be used for production.
By default, each build will be assigned an auto-generated version code, which is derived from the date when the build was created. This behavior interferes with Gradle's caching mechanism and unnecessarily re-runs tasks that depend on the version code, leading to longer build times. You can work around this by temporarily using a static version code that persists between builds. This can be done by setting this property in your user.properties file:
useStaticVersionCode=true
ETC2 compression is used to improve performance and memory usage. Raw assets are placed in the uncompressed_assets folder. You can generate the compressed textures using the compressor utility in tools/compressor. You need to set up etc2comp and make it available on your PATH before running the script. Run this command to generate the compressed assets:
cd tools/compressor
npm install
npm run compress
For more info on localization, how it works in the Wolvic XR project, and how to correctly edit localizable text in the application, please see our localization wiki page.
Device supports , but APK only supports armeabi-v7a[...]Enable USB Remote Debugging on the device.
Firefox > Web Developer > WebIDE > Performance gets stuck with greyed out "stop and show profile"Restart Wolvic XR and close and re-open the WebIDE page.
Tool Windows > Build Variants list is emptyAndroid Studio > Check for Updates….File > Sync Project with Gradle Files.pro hand -p true -s false SIGILLadb shell am start -a android.intent.action.VIEW -d "https://aframe.io" com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity to load a URL from the command lineadb shell am start -a android.intent.action.VIEW -n com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity -e homepage "https://example.com" to override the homepageadb shell setprop debug.oculus.enableVideoCapture 1 to record a video on the Oculus Go. Remember to run adb shell setprop debug.oculus.enableVideoCapture 0 to stop recording the video.
Sharing > Record VideodisableCrashRestart=true in the gradle user.properties to disable app relaunch on crash.700 followers · starred Jun 2024
165 followers · starred Nov 2023
1,985 followers · starred Feb 2022
25,624 followers · starred Feb 2022
A fast and secure browser for standalone virtual-reality and augmented-reality headsets.
See the codeThe goal of the Wolvic project is to create a full-featured browser exclusively AR and VR headsets.
You can find us in wolvic.com, Mastodon @WolvicXR, Twitter @wolvicxr, and at [email protected].
Want to learn more about Wolvic? Read our FAQ!
For setup instructions using the development version of the Chromium backend check this instructions out instead
After PR #70, WebXR sessions won't work with the prebuilt maven GeckoView libraries because that PR introduced a change in the GeckoView protocol. So you have to build GeckoView manually by applying patches at this repository.
This could be done either by using a local maven repository (quite cumbersome), or via Gradle's dependency substitutions (not at all cumbersome!).
Currently, the substitution flow is streamlined for some of the core dependencies via configuration flags in local.properties. You can build against a local checkout of the following dependencies by specifying their local paths:
dependencySubstitutions.geckoviewTopsrcdir=/path/to/mozilla-release (and, optionally, dependencySubstitutions.geckoviewTopobjdir=/path/to/topobjdir). See Bug 1533465.
dependencySubstitutions.geckoviewTopobjdir while the x86_64 path via dependencySubstitutions.geckoviewTopobjdirX64Do not forget to run a Gradle sync in Android Studio after changing local.properties. If you specified any substitutions, they will be reflected in the modules list, and you'll be able to modify them from a single Android Studio window.
For step by step guide check here.
git clone [email protected]:Igalia/wolvic.git
cd wolvic
If you're developing for the Oculus, Huawei, Pico, or VIVE, you need to clone the repo with third-party SDK files.
wolvic$ git clone [email protected]:Igalia/wolvic-third-parties.git third_party
This repo is only available to Igalia members. If you have access to the relevant SDK but not this repo, you can manually place them here:
third_party/OVRPlatformSDK/ for Oculus (should contain a Android and Include folders)third_party/hvr/ for Huawei (should contain arm64-v8a, armeabi-v7a and include folders)third_party/picoxr Pico OpenXR Mobile SDK (should contain libs folders, among other things that are not necessary for Wolvic)third_party/spaces for Snapdragon Spaces(should contain libopenxr_loader.aar)third_party/aliceimu/ for Huawei Vision Glass (should contain an .aar file with the IMU library for the glasses)The repo in third_party can be updated like so:
pushd third_party && git fetch && git checkout main && git rebase origin/main && popd
You may need to set up two-factor authentication for the command line.
wolvic/third_party$ git submodule update --init --recursive
You can build for different devices:
oculusvr: Oculus Questhvr: Huawei VR Glassespicoxr: Pico 4 and (untested) Pico Neo 3lynx: Lynx R1spaces: Lenovo A3visionglass: Huawei Vision Glassaosp: MagicLeap2 (but should work for any other AOSP device using OpenXR)pfdmxr: PFDM YVR1, PFDM YVR2 and PFDM MRFor testing on a non-VR device:
noapi: Runs on standard Android phones without a headsetBuilding for Huawei requires access to its SDKs which is not included in this repo.
The command line version of gradlew requires JDK 11. If you see an error that Gradle doesn't understand your Java version, check which version of you're using by running java -showversion or java -version. You're probably using and older JDK, which won't work.
Open the project with Android Studio then build and run it. Depending on what you already have installed in Android Studio, the build may fail and then may prompt you to install dependencies. Just keep doing as it suggests. To select the device to build for, go to Tool Windows > Build Variants and select a build variant corresponding to your device.
By default Wolvic will try to download prebuilt GeckoView libraries from Mozilla's maven repositories, where WebXR won't work and that should be used just for testing the 2D browser or to download browser features. If you want to have this, just skip the GeckoView local substitution part of the Setup instructions.
You can enable a dev applicationID sufix to install both dev and production builds simultaneously. You just need to add this property to your user.properties file:
simultaneousDevProduction=true
Local release builds can be useful to measure performance or debug issues only happening in release builds. Insead of dealing with release keys you can make the testing easier just adding this property to your user.properties file:
useDebugSigningOnRelease=true
Note: the release APKs generated with a debug keystore can't be used for production.
By default, each build will be assigned an auto-generated version code, which is derived from the date when the build was created. This behavior interferes with Gradle's caching mechanism and unnecessarily re-runs tasks that depend on the version code, leading to longer build times. You can work around this by temporarily using a static version code that persists between builds. This can be done by setting this property in your user.properties file:
useStaticVersionCode=true
ETC2 compression is used to improve performance and memory usage. Raw assets are placed in the uncompressed_assets folder. You can generate the compressed textures using the compressor utility in tools/compressor. You need to set up etc2comp and make it available on your PATH before running the script. Run this command to generate the compressed assets:
cd tools/compressor
npm install
npm run compress
For more info on localization, how it works in the Wolvic XR project, and how to correctly edit localizable text in the application, please see our localization wiki page.
Device supports , but APK only supports armeabi-v7a[...]Enable USB Remote Debugging on the device.
Firefox > Web Developer > WebIDE > Performance gets stuck with greyed out "stop and show profile"Restart Wolvic XR and close and re-open the WebIDE page.
Tool Windows > Build Variants list is emptyAndroid Studio > Check for Updates….File > Sync Project with Gradle Files.pro hand -p true -s false SIGILLadb shell am start -a android.intent.action.VIEW -d "https://aframe.io" com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity to load a URL from the command lineadb shell am start -a android.intent.action.VIEW -n com.igalia.wolvic/com.igalia.wolvic.VRBrowserActivity -e homepage "https://example.com" to override the homepageadb shell setprop debug.oculus.enableVideoCapture 1 to record a video on the Oculus Go. Remember to run adb shell setprop debug.oculus.enableVideoCapture 0 to stop recording the video.
Sharing > Record VideodisableCrashRestart=true in the gradle user.properties to disable app relaunch on crash.700 followers · starred Jun 2024
165 followers · starred Nov 2023
1,985 followers · starred Feb 2022
25,624 followers · starred Feb 2022