Guide: Developing on the Quest 2

If you’ve ever dreamed of looking like Johnny Mnemonic as you develop on the information superhighway, well, here is your chance!

You after following this tutorial…

Don’t have a Quest 2? Please consider using my referral link if you’re going to purchase one. We’ll both get $30 Meta Quest Store Credits. That’s equal to a free game. I recommend Synth Riders. 😉

Quest 2 Referral Link: https://www.oculus.com/referrals/link/PeterCTucker/

What developing in Quest 2 looks like. 🙂

Table of Contents

(because I’m sure you too hate to have to read the author’s life story before you get to the good parts)

  1. Why use the Quest 2 as a DEV device?
  2. What’s the game plan?
  3. Pre-requisites
  4. Steps for a mobile Quest 2 DEV office.
  5. Some drawbacks kinda suck
  6. Tips & Tricks for a better User Experience

Why use the Quest 2 as a DEV device?

  • First off, it’s cool as hell… in a very uncool nerdy way!
  • It’s a whole multi-monitor office setup… on the go!
  • That being said, why even work in an office? How about doing all your dev work in a recliner… or in bed… or even on your favorite fainting couch! With the Quest 2, it’s possible!
Imagine! This could be you! Do people not have fainting couches anymore?
  • Also, the Quest 2 dev setup allows privacy if you’re working on client projects or data-sensitive code.
  • As a bunch of industries move towards SAAS, a lot of work tools are available via web interfaces; Google Docs, Office, VS Code, Photopea, and Quickbooks online just to name a few. Even this blog post was written on my Quest 2. Why not leverage the Quest 2 to do all the tasks!
  • Also, it’s just a good feeling to use your Quest 2 for more than just VR games. I use my Quest 2 in conjunction with resistance bands for muscle training. I also play music games like Synth Riders, Beatsaber, and PowerBeats for my cardio exercise. Basically, my Quest 2 is my mobile gym! And now… it’s also my entire dev office on the go! How cool!

That being said, before you take the time to follow this guide, you may want to jump to the “some drawbacks that kinda sucks” section, just so you don’t waste your time. I, personally, find the hiccups not workflow-breaking, but your subjective mileage may vary.


What’s the gameplan?

I made this small guide as a starting point on how to do dev work “on” the Quest 2. I put “on” in quotations as this guide is more so how to set up a Digital Ocean droplet with code-server(VSCode web GUI) and remote in via the Quest 2 headset through Occulus Browser, and NOT developing directly ON the Quest ie native VScode via Linux VM. I’m making this guide because I could not find any comprehensive helpful results on Google for developing via the Quest 2. Why no results? Well, I’m guessing it’s because developing on the Quest 2 takes A LOT of trial and error in finding a setup to develop comfortably. Fortunately, I’ve “guinea pigged” this experience for you… So let’s begin!

What this guide won’t be teaching you:

  1. Installing Linux on an Android device
  2. Getting Docker to run via Termux on the Quest 2

Though installing Linux on the Quest 2 is technically possible, I found it pretty hacky and overall not a nice user experience. That being said, this is what we will be doing:

  1. Set up a Digital Ocean droplet.
  2. Set up SSH on your droplet.
  3. Sideloading Termux on your Quest 2 via Sidequest.
  4. Install code-server on your droplet. (Code-server is a self-hosted version of VSCode that runs right in your browser!)
  5. How to run terminal via code-server
  6. What is the best setup for VR VSCode via Oculus Browser; Setting up a multi-window setup in Oculus Browser, and keyboard bindings

And before you ask, here is a list of other browsers I’ve tried and had a bad time with:

  1. FirefoxVR: this project is now dead in the water and didn’t allow you to use a mouse. I also could not copy & paste in the app.
  2. Wolvic: after FirfoxVR was discontinued, the original devs decided to continue on with the project with Wolvic. Wolvic still suffers from the issues that FirefoxVR did above. Womp Womp.
  3. Horizon Workrooms: Unfortunately and surprisingly, there is no built-in virtual browser in Meta’s own virtual workplace solution, Horizon Workrooms. What the hell, Facebook?
  4. Sideloading Browser APKs. Due to only being able to run one instance of an APK at a time, this means you will not be able to have multiple windows. You could try running multiple chromium-based APKs ie Brave, Brave Nightly, and Chromium to emulate a multi-window setup but this seems cumbersome.

Pre-requisites:

Hardware Pre-requisites:

  1. A wireless (mechanical) Keyboard.
    • Recommendation: AKKO 3098B ($105) – (https://bit.ly/3RBMbGC) (comes w/ anime keycaps, you can switch these out if you don’t like the aesthetic)
    • 2nd keyboard recommendation: EPOMAKER TH80 w/ Brown Switches ($85) – (https://amzn.to/3BBt49X)
    • We want the following features in a keyboard (which the above both have):
      • Software(Win10) to swap CTRL + ALT, and changes will stay when the keyboard is connected via Bluetooth on Android. Good for users coming from MacOS/Linux
      • Hot Swappable – You can swap out the keyboard switches for higher quality ones. Recommendation: Drop Halo Clear Tactile Switches ($39 – On Sale) (https://bit.ly/3Dmpm5l) | Keycap & Switch remover ($4.99) (https://amzn.to/3qwBJo2)
      • RGB Lighting Nice to have but not necessary.
  2. A wireless Mouse. (you could use your quest wands, or handtracking, but trust me, a mouse is much better) I recommend the MX Master, but likely any bluetooth mouse will do.
  3. A Quest 2 headset (obviously)
  4. A Digital Ocean Droplet (or equivalent server)

Software Pre-requisites:

  1. AKKO/Epomaker Software – For swapping ALT & CTRL. For devs used to a Mac seup. (Optional)
  2. Sidequest – For sideloading APKs (https://sidequestvr.com/setup-howto)
  3. Oculus Browser – Firefox Reality looked promising, but it lacks a lot of features and has since been axed. Brave/Chrome.apk, I could not figure out how to launch multiple windows. Oculus Browser you can launch multiple windows
  4. Termux / F-Droid APKs: F-Droid & Termux APK link

Knowledge Pre-requisites:

  • Comfortable with terminal commands: cd, ls, apt-get, etc.
  • Comfortable with SSH and generating keys.
  • Comfortable with creating Digital Ocean Droplets.
  • Comfortable typing without looking at your keyboard due to you being in VR.

Steps for a mobile Quest 2 DEV office:

  • Pair your Bluetooth Keyboard & Mouse to your Quest 2.
  • Spin up a digital ocean droplet. Droplet Tutorial
  • Setting up Termux is optional, but I like it just in case I can’t get into my droplet via code-server’s terminal, and instead want to SSH into my droplet.
  • [OPTIONAL] Sideload F-Droid & Termux on your Quest 2.
  • [OPTIONAL] In Termux generate SSH keys:
apt update
apt upgrade
apt install openssh
ssh-keygen -b 4096 -t rsa
cat ~/.ssh/id_rsa.pub 

# then copy the id_rsa.pub key to the Quest 2 clipboard, ssh into your server, and paste into your ~/.ssh/authorized_keys file. See how to Copy & Paste in the tips and tricks section of this guide.
  • Then all you have to do is open the Occulus browser, and point the URL to your server running code-server
  • This is how you get the Occulus Browser in multi-window mode:
    • Open up Occulus Browser.
    • First open up three tabs.
    • Drag the bottom dash under the window upwards on the screen to detach from the bottom dock.
Undocking the Occulus Browser from the Quest dock.
  • Then click and drag down the tab till you see an icon. Then move it to the left or right to create a 2nd/3rd window!
How to turn Occulus Browser tabs to windows!
  • At this point rejoice. You are now plugged into The Matrix! Happy development!

Some drawbacks that kinda suck:

UPDATE 10/13/2022: Below are a bunch of issues I’ve had with the Oculus Browser. Since originally writing this article, I’ve come up with a solution that fixes most of these issues.

  • Install Brave browser apk.
    • APK can be found here
    • In both Oculus Browser & Brave go to: chrome:// flags
    • Search ‘force dark mode’ and turn it on. Dark Mode now enabled.
    • Now when you need to go to a website with ads(youtube), use the find command on a page, or need a better bookmarking system, just use Brave. For a Terminal and Code-server, use Oculus Browser.

NOTE (BUG FIX… kinda): I found a bug that when you are only using the Quest 2 wands and a keyboard, if you have a secondary app/apk open (like brave) with the Oculus Browser, all physical keyboard input will go to the secondary app/apk, and you will not be able to type in Oculus Browser. The fix is to use a physical mouse instead of the wands. This will allow keyboard input focus to switch between Oculus Browser and the secondary app/apk.

Original Issues section (10/11/22):

Not to be a Debby-downer but it’s not all rainbows and git commits…

As awesome as it is developing on the Quest 2, some of dev user experience is lame…
  • The multi-window Oculus Browser can only spawn three windows (likely because of resource management), and they are pretty fixed in place, meaning you can’t stack browser windows vertically or off to the side. Again, what the hell facebook? This is VR! I should be able to put a virtual window VIRTUALLY anywhere I want. And I realize meta is trying to ‘idiot proof’ the experience, but at least give me a dev option to “enable ‘free moving window mode'”. Boooo!
  • The dreadful, white, head tracking dot. When you’re running the Oculus browser(or any APK for that matter) and don’t put any user input in via your keyboard, mouse, hand-tracking, or wands, a big white dot shows up in the center of your vision that is supposed to be a cursor so that you can ‘click’ via the volume buttons… to put it, bluntly, this SUCKS! For example, when you’re watching a youtube video in the Oculus Browser for an extended time, a big, ugly white dot will show up in the center of your vision. If you’re a gamer and you install something like Geforce Now / Retroarch, this dot will also appear as the Quest 2 does not take Gamepad(Xbox Controller S) input as a form of input to hide the dot. You would think Meta/Facebook would at least give you the options to turn off, if not in the normal settings, the dev settings, but nooooope. Facebook, please add ‘turn off head-tracking dot.’ PLEASE! (you can vote here btw) 🙁
  • No browser extensions…. which means no ad blocking… Are you really surprised blocking ads isn’t available on a Facebook/Meta platform? This is kind of a pain in the butt, but there are workarounds so you can at least watch Youtube videos without ads (see tips & tricks)!
Your typical Oculus Browser experience
  • Oculus Browser has no ‘find’ command, so you won’t be using ctrl+f or cmd+f. Super lame but I can deal with it. I just find constantly having to search through pages such a hassle. I have no idea how Facebook/Meta left this out.
  • Oculus Browser doesn’t have Folder bookmarking. So you can’t open up a window of bookmarks and start where you left off…
  • Oculus Browser doesn’t have a Dark Mode. (Fortunately, code-server still maintains VS Code’s dark themes) THE LIGHT…. THE LIIIIIIIIIGHT!

Tips & Tricks for a better User Experience:

  1. Turn on Voice Commands. I use ‘Hey Facebook, recenter’ all the time. Definitely commit it to memory! Other important commands are:
    1. ‘Hey Facebook, turn off handtracking.”
    2. ‘Hey Facebook, turn on handtracking.”
    3. ‘Hey Facebook, what time is it?’ ( so you don’t have to open the quest menu)
    4. ‘Hey Facebook, start casting.’
  2. Copy & Paste…. You have to long hold down the left mouse click button over the text you want to start selecting, then once you’ve selected the beginning of the sentence, hold “shift” on your keyboard, and press the left or right arrows on your keyboard to select the text you want. Then ctrl+c to copy.
  3. For an Ad free Youtube experience try the Youtube proxy ViewTube. You can go to this website ‘https://viewtube.io/‘ in the Oculus Browser, or install it as a service on your own server. Neat-o!
  4. External Viewers for colleagues to peek at what you’re working on. Air Receiver for Windows 10 works pretty well if you want to remotely show your Quest 2. Sidequest’s streamer is also a cross-platform solution. Alternatively, in the Quest/Oculus mobile app you can cast to your phone, then use an HDMI dongle if your device supports video out to connect to a TV/Monitor.
  5. Enable double tap to Passthrough. This helps when you quickly want to jump in and out of vr and see what’s going on around without taking off your Quest 2 helmet.
  6. Enable handtracking to get rid of the dreadful, white, head tracking dot. Due to you always making slight minuscule movements with your hands, the white dot will not appear as the handtracking counts as user input. This works super well if you’re gaming in Geforce Now or Retroarch. The only issue now is you have to see ‘ghost hands’ in your peripheral vision, but it’s better than nothing.

The Quest 2 is an awesome device which with a little elbow grease, could be a killer setup for web development. Hopefully this guide has helped you skip some pitfalls, and has helped you setup your own Quest 2 as a DEV device. Hope you liked!

Until next time…

-Peter