diff --git a/package.json b/package.json
index 5c85d209240d059393329cb772c933150f6eb150..95b04a6073d46ef12bfce28af145e42bd741ad9d 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
   },
   "scripts": {
     "postinstall": "node ./scripts/postinstall.js",
-    "start": "cross-env NODE_ENV=development webpack-dev-server --mode=production",
+    "start": "cross-env NODE_ENV=development webpack-dev-server",
     "build": "rimraf ./public && cross-env NODE_ENV=production webpack --mode=production",
     "doc": "node ./scripts/doc/build.js",
     "prettier": "prettier --write '*.js' 'src/**/*.js'",
diff --git a/src/hub.js b/src/hub.js
index 51419d8d636cf18e1c4e292dade6146e156d0ff3..39cb6d97e42b26809be549c2d7262a9ebd489514 100644
--- a/src/hub.js
+++ b/src/hub.js
@@ -446,6 +446,8 @@ const onReady = async () => {
   getAvailableVREntryTypes().then(availableVREntryTypes => {
     if (availableVREntryTypes.gearvr === VR_DEVICE_AVAILABILITY.yes) {
       remountUI({ availableVREntryTypes, forcedVREntryType: "gearvr" });
+    } else if (availableVREntryTypes.isInHMD) {
+      remountUI({ availableVREntryTypes, forcedVREntryType: "vr" });
     } else {
       remountUI({ availableVREntryTypes });
     }
diff --git a/src/index.js b/src/index.js
index 32558cd4ec93844c558ce5d45fed8d54824ac01a..d0b5c4557cda8a0e408ef01c6e5fa2ae680a01ed 100644
--- a/src/index.js
+++ b/src/index.js
@@ -10,6 +10,9 @@ const qs = queryString.parse(location.search);
 registerTelemetry();
 
 ReactDOM.render(
-  <HomeRoot dialogType={qs.list_signup ? InfoDialog.dialogTypes.updates : null} />,
+  <HomeRoot
+    initialEnvironment={qs.initial_environment}
+    dialogType={qs.list_signup ? InfoDialog.dialogTypes.updates : null}
+  />,
   document.getElementById("home-root")
 );
diff --git a/src/link.html b/src/link.html
index 954061491faa3b257adedf87df06a26cfc58f79b..8543e83b88b0495bd8e34bb2110bbba6bd3a7ecd 100644
--- a/src/link.html
+++ b/src/link.html
@@ -8,6 +8,12 @@
     <title>Enter Code | Hubs by Mozilla</title>
     <link href="https://fonts.googleapis.com/css?family=Zilla+Slab:300,300i,400,400i,700" rel="stylesheet">
     <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
+
+    <% if(NODE_ENV === "production") { %>
+    <script src="https://cdn.rawgit.com/aframevr/aframe/1be48d9/dist/aframe-master.min.js" integrity="sha384-SXrfoMHbXpA5RZhIyhgaR6tQ764dDZsbFk3PiokC/tc0+NnW1yaYQMUzWtL06hnq" crossorigin="anonymous"></script>
+    <% } else { %>
+    <script src="https://cdn.rawgit.com/aframevr/aframe/1be48d9/dist/aframe-master.js" integrity="sha384-AmjDGOMbvTrrUFdeVWcBIlXRINIWnO8iwj/4VS21OWbYDsa/7nheOIyPAPJSkR6J" crossorigin="anonymous"></script>
+    <% } %>
 </head>
 
 <body>
diff --git a/src/react-components/home-root.js b/src/react-components/home-root.js
index 318fc88d95acd9d95d67adbb507ecd08cce843ee..d27bc310dac25f0a480aa634afb2ae61ae7fa243 100644
--- a/src/react-components/home-root.js
+++ b/src/react-components/home-root.js
@@ -17,7 +17,8 @@ addLocaleData([...en]);
 class HomeRoot extends Component {
   static propTypes = {
     intl: PropTypes.object,
-    dialogType: PropTypes.symbol
+    dialogType: PropTypes.symbol,
+    initialEnvironment: PropTypes.string
   };
 
   state = {
@@ -155,7 +156,12 @@ class HomeRoot extends Component {
                 </div>
               </div>
               <div className="hero-content__create">
-                {this.state.environments.length > 0 && <HubCreatePanel environments={this.state.environments} />}
+                {this.state.environments.length > 0 && (
+                  <HubCreatePanel
+                    initialEnvironment={this.props.initialEnvironment}
+                    environments={this.state.environments}
+                  />
+                )}
               </div>
             </div>
             <div className="footer-content">
diff --git a/src/react-components/hub-create-panel.js b/src/react-components/hub-create-panel.js
index dc10b99ac217609b07bda59422c805c5ea4f1581..959a4a9331a1975a83a0ab315b7fa092c8f05418 100644
--- a/src/react-components/hub-create-panel.js
+++ b/src/react-components/hub-create-panel.js
@@ -15,16 +15,25 @@ const HUB_NAME_PATTERN = "^[A-Za-z0-9-'\":!@#$%^&*(),.?~ ]{4,64}$";
 class HubCreatePanel extends Component {
   static propTypes = {
     intl: PropTypes.object,
-    environments: PropTypes.array
+    environments: PropTypes.array,
+    initialEnvironment: PropTypes.string
   };
 
   constructor(props) {
     super(props);
 
+    let environmentIndex = Math.floor(Math.random() * props.environments.length);
+
+    if (props.initialEnvironment) {
+      environmentIndex = props.environments.findIndex(
+        e => e.name.toLowerCase() === props.initialEnvironment.toLowerCase()
+      );
+    }
+
     this.state = {
       ready: false,
       name: generateHubName(),
-      environmentIndex: Math.floor(Math.random() * props.environments.length),
+      environmentIndex,
       // HACK: expand on small screens by default to ensure scene selection possible.
       // Eventually this could/should be done via media queries.
       expanded: window.innerWidth < 420
diff --git a/src/utils/vr-caps-detect.js b/src/utils/vr-caps-detect.js
index 685fb3ba326cebd1febc8f6d6005c7c846a6d99b..58023becc83d428d1d89f8c80878897d37da66b5 100644
--- a/src/utils/vr-caps-detect.js
+++ b/src/utils/vr-caps-detect.js
@@ -46,7 +46,8 @@ export async function getAvailableVREntryTypes() {
   const ua = navigator.userAgent;
   const isSamsungBrowser = browser.name === "chrome" && /SamsungBrowser/.test(ua);
   const isOculusBrowser = /Oculus/.test(ua);
-  const isInHMD = isOculusBrowser;
+  const isFirefoxReality = /Firefox Reality/.test(ua);
+  const isInHMD = isOculusBrowser || isFirefoxReality;
 
   // This needs to be kept up-to-date with the latest browsers that can support VR and Hubs.
   // Checking for navigator.getVRDisplays always passes b/c of polyfill.