diff --git a/404.html b/404.html index 874124a6..3121eb07 100644 --- a/404.html +++ b/404.html @@ -4,13 +4,13 @@ Page Not Found | Stardust XR - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/cd484bad.bdc07e87.js b/assets/js/cd484bad.bd57a71e.js similarity index 85% rename from assets/js/cd484bad.bdc07e87.js rename to assets/js/cd484bad.bd57a71e.js index 7f7086d5..0073e7b3 100644 --- a/assets/js/cd484bad.bdc07e87.js +++ b/assets/js/cd484bad.bd57a71e.js @@ -1 +1 @@ -"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[851],{5680:(e,t,r)=>{r.d(t,{xA:()=>d,yg:()=>g});var n=r(6540);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(r),y=a,g=u["".concat(p,".").concat(y)]||u[y]||c[y]||o;return r?n.createElement(g,i(i({ref:t},d),{},{components:r})):n.createElement(g,i({ref:t},d))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=y;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(8168),a=(r(6540),r(5680));const o={sidebar_position:1},i="Setup OpenXR Runtime",s={unversionedId:"get-started/setup-openxr",id:"get-started/setup-openxr",title:"Setup OpenXR Runtime",description:"if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with trying out telescope.",source:"@site/docs/01-get-started/01-setup-openxr.md",sourceDirName:"01-get-started",slug:"/get-started/setup-openxr",permalink:"/docs/get-started/setup-openxr",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/01-get-started/01-setup-openxr.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Bundled setup",permalink:"/docs/get-started/bundled"}},p={},l=[{value:"SteamVR",id:"steamvr",level:2},{value:"Monado",id:"monado",level:2},{value:"NixOS",id:"nixos",level:3},{value:"Other distros",id:"other-distros",level:3}],d={toc:l},u="wrapper";function c(e){let{components:t,...r}=e;return(0,a.yg)(u,(0,n.A)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"setup-openxr-runtime"},"Setup OpenXR Runtime"),(0,a.yg)("admonition",{type:"info"},(0,a.yg)("p",{parentName:"admonition"},"if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with ",(0,a.yg)("a",{parentName:"p",href:"bundled"},"trying out telescope"),".")),(0,a.yg)("p",null,"Check the ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/hardware/"},"hardware table")," to ensure your hardware and headset are compatible:"),(0,a.yg)("h2",{id:"steamvr"},"SteamVR"),(0,a.yg)("p",null,"You will likely want to use ",(0,a.yg)("a",{parentName:"p",href:"#monado"},"Monado")," instead, but if you need to the instructions are available."),(0,a.yg)("admonition",{type:"warning"},(0,a.yg)("p",{parentName:"admonition"},"If you are on NixOS please consult ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/distros/nixos/"},"https://lvra.gitlab.io/docs/distros/nixos/")," before installing SteamVR.")),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/steamvr/"},"https://lvra.gitlab.io/docs/steamvr/")," is a good starting point, but be aware that the stardust server cannot run as an overlay on top of other games due to SteamVR not implementing the OpenXR Overlay extension."),(0,a.yg)("h2",{id:"monado"},"Monado"),(0,a.yg)("p",null,"If you've got a wired headset, this is generally the way to go."),(0,a.yg)("h3",{id:"nixos"},"NixOS"),(0,a.yg)("p",null,"It's generally easiest to follow the instructions at ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/distros/nixos/"},"https://lvra.gitlab.io/docs/distros/nixos/")," to install properly to the system."),(0,a.yg)("h3",{id:"other-distros"},"Other distros"),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/fossvr/envision/"},"Envision")," is the XR launcher (like a minecraft launcher) of choice for open source XR and is overall better in practice than SteamVR."),(0,a.yg)("h1",{id:"test-openxr-runtime"},"Test OpenXR Runtime"),(0,a.yg)("p",null,"Try running ",(0,a.yg)("a",{parentName:"p",href:"https://gitlab.freedesktop.org/monado/demos/xrgears"},"XRGears")," and see if it works, you can get it from the system's package manager often."))}c.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[851],{5680:(e,t,r)=>{r.d(t,{xA:()=>d,yg:()=>m});var n=r(6540);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var p=n.createContext({}),l=function(e){var t=n.useContext(p),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},d=function(e){var t=l(e.components);return n.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,p=e.parentName,d=s(e,["components","mdxType","originalType","parentName"]),u=l(r),y=a,m=u["".concat(p,".").concat(y)]||u[y]||c[y]||o;return r?n.createElement(m,i(i({ref:t},d),{},{components:r})):n.createElement(m,i({ref:t},d))}));function m(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=y;var s={};for(var p in t)hasOwnProperty.call(t,p)&&(s[p]=t[p]);s.originalType=e,s[u]="string"==typeof e?e:a,i[1]=s;for(var l=2;l{r.r(t),r.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>o,metadata:()=>s,toc:()=>l});var n=r(8168),a=(r(6540),r(5680));const o={sidebar_position:1},i="Setup OpenXR Runtime",s={unversionedId:"get-started/setup-openxr",id:"get-started/setup-openxr",title:"Setup OpenXR Runtime",description:"if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with trying out telescope.",source:"@site/docs/01-get-started/01-setup-openxr.md",sourceDirName:"01-get-started",slug:"/get-started/setup-openxr",permalink:"/docs/get-started/setup-openxr",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/01-get-started/01-setup-openxr.md",tags:[],version:"current",sidebarPosition:1,frontMatter:{sidebar_position:1},sidebar:"tutorialSidebar",next:{title:"Bundled setup",permalink:"/docs/get-started/bundled"}},p={},l=[{value:"SteamVR",id:"steamvr",level:2},{value:"Monado",id:"monado",level:2},{value:"NixOS",id:"nixos",level:3},{value:"Other distros",id:"other-distros",level:3}],d={toc:l},u="wrapper";function c(e){let{components:t,...r}=e;return(0,a.yg)(u,(0,n.A)({},d,r,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"setup-openxr-runtime"},"Setup OpenXR Runtime"),(0,a.yg)("admonition",{type:"info"},(0,a.yg)("p",{parentName:"admonition"},"if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with ",(0,a.yg)("a",{parentName:"p",href:"bundled"},"trying out telescope"),".")),(0,a.yg)("p",null,"Check the ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/hardware/"},"hardware table")," to ensure your hardware and headset are compatible:"),(0,a.yg)("h2",{id:"steamvr"},"SteamVR"),(0,a.yg)("p",null,"You will likely want to use ",(0,a.yg)("a",{parentName:"p",href:"#monado"},"Monado")," instead, but if you need to the instructions are available."),(0,a.yg)("admonition",{type:"warning"},(0,a.yg)("p",{parentName:"admonition"},"If you are on NixOS please consult ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/distros/nixos/"},"https://lvra.gitlab.io/docs/distros/nixos/")," before installing SteamVR.")),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/steamvr/"},"https://lvra.gitlab.io/docs/steamvr/")," is a good starting point, but be aware that the stardust server cannot run as an overlay on top of other games due to SteamVR not implementing the OpenXR Overlay extension."),(0,a.yg)("h2",{id:"monado"},"Monado"),(0,a.yg)("p",null,"If you've got a wired headset, this is generally the way to go."),(0,a.yg)("h3",{id:"nixos"},"NixOS"),(0,a.yg)("p",null,"It's generally easiest to follow the instructions at ",(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/distros/nixos/"},"https://lvra.gitlab.io/docs/distros/nixos/")," to install properly to the system."),(0,a.yg)("h3",{id:"other-distros"},"Other distros"),(0,a.yg)("p",null,(0,a.yg)("a",{parentName:"p",href:"https://lvra.gitlab.io/docs/fossvr/envision/"},"Envision")," is the XR launcher (like a minecraft launcher) of choice for open source XR and is overall better in practice than SteamVR. If you are a Fedora user, Envision is packaged, but it's reccomended to get it from the ",(0,a.yg)("a",{parentName:"p",href:"https://terra.fyralabs.com/"},"Terra repository"),". Other distros will need to build from source."),(0,a.yg)("h1",{id:"test-openxr-runtime"},"Test OpenXR Runtime"),(0,a.yg)("p",null,"Try running ",(0,a.yg)("a",{parentName:"p",href:"https://gitlab.freedesktop.org/monado/demos/xrgears"},"XRGears")," and see if it works, you can get it from the system's package manager often."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cdda5b0c.80ddfd16.js b/assets/js/cdda5b0c.80ddfd16.js deleted file mode 100644 index 1ae52d6f..00000000 --- a/assets/js/cdda5b0c.80ddfd16.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[733],{5680:(e,t,n)=>{n.d(t,{xA:()=>p,yg:()=>y});var r=n(6540);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=u(n),g=a,y=d["".concat(s,".").concat(g)]||d[g]||c[g]||i;return n?r.createElement(y,l(l({ref:t},p),{},{components:n})):r.createElement(y,l({ref:t},p))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,l=new Array(i);l[0]=g;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:a,l[1]=o;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>c,frontMatter:()=>i,metadata:()=>o,toc:()=>u});var r=n(8168),a=(n(6540),n(5680));const i={sidebar_position:2},l="Bundled setup",o={unversionedId:"get-started/bundled",id:"get-started/bundled",title:"Bundled setup",description:"Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer.",source:"@site/docs/01-get-started/02-bundled.md",sourceDirName:"01-get-started",slug:"/get-started/bundled",permalink:"/docs/get-started/bundled",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/01-get-started/02-bundled.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Setup OpenXR Runtime",permalink:"/docs/get-started/setup-openxr"},next:{title:"Manual build/installation",permalink:"/docs/get-started/manual"}},s={},u=[{value:"Nix",id:"nix",level:2},{value:"Install Nix",id:"install-nix",level:3},{value:"Run Telescope",id:"run-telescope",level:3},{value:"Non-nix",id:"non-nix",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,a.yg)(d,(0,r.A)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"bundled-setup"},"Bundled setup"),(0,a.yg)("p",null,"Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer."),(0,a.yg)("h2",{id:"nix"},"Nix"),(0,a.yg)("h3",{id:"install-nix"},"Install Nix"),(0,a.yg)("p",null,"For easy development and distribution this project uses the ",(0,a.yg)("a",{parentName:"p",href:"https://nix.dev/"},"nix package manager"),".",(0,a.yg)("br",null),"\nThis allows to ensure all dependency requirements are met."),(0,a.yg)("p",null,"If you do not have nix installed follow the instructions at ",(0,a.yg)("a",{parentName:"p",href:"https://nixos.org/download/#nix-install-linux"},"https://nixos.org/download/#nix-install-linux"),"."),(0,a.yg)("admonition",{type:"warning"},(0,a.yg)("p",{parentName:"admonition"},"Make sure to have ",(0,a.yg)("a",{parentName:"p",href:"https://nixos.wiki/wiki/flakes"},"flakes enabled"),".")),(0,a.yg)("h3",{id:"run-telescope"},"Run Telescope"),(0,a.yg)("p",null,"Because telescope itself is a nix flake, you simply have to run\nIntel/AMD/NVK graphics:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-sh"},"nix run github:StardustXR/telescope\n")),(0,a.yg)("p",null,(0,a.yg)("del",{parentName:"p"},"Proprietary NVIDIA graphics:")," is broken :/"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-sh"},"NIXPKGS_ALLOW_UNFREE=1 nix run --impure github:StardustXR/telescope#telescopeNvidia\n")),(0,a.yg)("h2",{id:"non-nix"},"Non-nix"),(0,a.yg)("p",null,"An AppImage generated from the nix flake is currently WIP. Please check back later or do a ",(0,a.yg)("a",{parentName:"p",href:"manual"},"manual build.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/cdda5b0c.d48707d0.js b/assets/js/cdda5b0c.d48707d0.js new file mode 100644 index 00000000..c0acaebd --- /dev/null +++ b/assets/js/cdda5b0c.d48707d0.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[733],{5680:(e,t,n)=>{n.d(t,{xA:()=>p,yg:()=>y});var r=n(6540);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),u=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},p=function(e){var t=u(e.components);return r.createElement(s.Provider,{value:t},e.children)},d="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},g=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,l=e.originalType,s=e.parentName,p=o(e,["components","mdxType","originalType","parentName"]),d=u(n),g=a,y=d["".concat(s,".").concat(g)]||d[g]||c[g]||l;return n?r.createElement(y,i(i({ref:t},p),{},{components:n})):r.createElement(y,i({ref:t},p))}));function y(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=n.length,i=new Array(l);i[0]=g;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[d]="string"==typeof e?e:a,i[1]=o;for(var u=2;u{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>i,default:()=>c,frontMatter:()=>l,metadata:()=>o,toc:()=>u});var r=n(8168),a=(n(6540),n(5680));const l={sidebar_position:2},i="Bundled setup",o={unversionedId:"get-started/bundled",id:"get-started/bundled",title:"Bundled setup",description:"Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer.",source:"@site/docs/01-get-started/02-bundled.md",sourceDirName:"01-get-started",slug:"/get-started/bundled",permalink:"/docs/get-started/bundled",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/01-get-started/02-bundled.md",tags:[],version:"current",sidebarPosition:2,frontMatter:{sidebar_position:2},sidebar:"tutorialSidebar",previous:{title:"Setup OpenXR Runtime",permalink:"/docs/get-started/setup-openxr"},next:{title:"Manual build/installation",permalink:"/docs/get-started/manual"}},s={},u=[{value:"Nix",id:"nix",level:2},{value:"Install Nix",id:"install-nix",level:3},{value:"Run Telescope",id:"run-telescope",level:3},{value:"Fedora/Ultramarine",id:"fedoraultramarine",level:2},{value:"Other",id:"other",level:2}],p={toc:u},d="wrapper";function c(e){let{components:t,...n}=e;return(0,a.yg)(d,(0,r.A)({},p,n,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"bundled-setup"},"Bundled setup"),(0,a.yg)("p",null,"Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer."),(0,a.yg)("h2",{id:"nix"},"Nix"),(0,a.yg)("h3",{id:"install-nix"},"Install Nix"),(0,a.yg)("p",null,"For easy development and distribution this project uses the ",(0,a.yg)("a",{parentName:"p",href:"https://nix.dev/"},"nix package manager"),".",(0,a.yg)("br",null),"\nThis allows to ensure all dependency requirements are met."),(0,a.yg)("p",null,"If you do not have nix installed follow the instructions at ",(0,a.yg)("a",{parentName:"p",href:"https://nixos.org/download/#nix-install-linux"},"https://nixos.org/download/#nix-install-linux"),"."),(0,a.yg)("admonition",{type:"warning"},(0,a.yg)("p",{parentName:"admonition"},"Make sure to have ",(0,a.yg)("a",{parentName:"p",href:"https://nixos.wiki/wiki/flakes"},"flakes enabled"),".")),(0,a.yg)("h3",{id:"run-telescope"},"Run Telescope"),(0,a.yg)("p",null,"Because telescope itself is a nix flake, you simply have to run\nIntel/AMD/NVK graphics:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-sh"},"nix run github:StardustXR/telescope\n")),(0,a.yg)("p",null,(0,a.yg)("del",{parentName:"p"},"Proprietary NVIDIA graphics:")," is broken :/"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-sh"},"NIXPKGS_ALLOW_UNFREE=1 nix run --impure github:StardustXR/telescope#telescopeNvidia\n")),(0,a.yg)("h2",{id:"fedoraultramarine"},"Fedora/Ultramarine"),(0,a.yg)("p",null,"You can install Telescope, and all other core Stardust tools, through the ",(0,a.yg)("a",{parentName:"p",href:"https://terra.fyralabs.com/"},"Terra repository"),". This repository is pre-installed on Ultramarine, manual instructions can be found on their website."),(0,a.yg)("p",null,"To just install Telescope:"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"dnf install telescope\n")),(0,a.yg)("p",null,"To install all Stardust XR packages (Ultramarine 40 and later, Fedora 41 and later):"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre"},"dnf group install stardust-xr\n")),(0,a.yg)("p",null,"From here, just run ",(0,a.yg)("inlineCode",{parentName:"p"},"telescope")," in your terminal of choice."),(0,a.yg)("h2",{id:"other"},"Other"),(0,a.yg)("p",null,"An AppImage generated from the nix flake is currently WIP. Please check back later or do a ",(0,a.yg)("a",{parentName:"p",href:"manual"},"manual build.")))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.672ddcbb.js b/assets/js/runtime~main.672ddcbb.js new file mode 100644 index 00000000..02e5b723 --- /dev/null +++ b/assets/js/runtime~main.672ddcbb.js @@ -0,0 +1 @@ +(()=>{"use strict";var e,t,r,a,o,n={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=d,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(f.O).every((e=>f.O[e](r[i])))?r.splice(i--,1):(d=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var d=2&a&&e;"object"==typeof d&&!~t.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({61:"1f391b9e",140:"69369ae2",375:"b74877f5",401:"17896441",581:"935f2afb",634:"c4f5d8e4",695:"c91a686f",698:"90eee115",714:"1be78505",733:"cdda5b0c",773:"b2400e94",851:"cd484bad",908:"b4e94af8",987:"c4348237",996:"81253b24"}[e]||e)+"."+{55:"46a8d801",61:"491486ac",113:"96a447f5",140:"20ee0827",261:"2e796b47",375:"6b5678de",401:"5f242564",428:"2aadad0c",581:"f5f4bd2e",615:"5c077adb",634:"f4272d08",695:"ac43580f",698:"a7faaa41",714:"40b2c3bf",733:"d48707d0",773:"00ee335a",774:"054ba7c6",851:"bd57a71e",908:"dc0c06c1",987:"d1cf9227",996:"77394c2b"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="stardust-website:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var d,i;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{d.onerror=d.onload=null,clearTimeout(b);var o=a[e];if(delete a[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach((e=>e(r))),t)return t(r)},b=setTimeout(l.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=l.bind(null,d.onerror),d.onload=l.bind(null,d.onload),i&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"401","1f391b9e":"61","69369ae2":"140",b74877f5:"375","935f2afb":"581",c4f5d8e4:"634",c91a686f:"695","90eee115":"698","1be78505":"714",cdda5b0c:"733",b2400e94:"773",cd484bad:"851",b4e94af8:"908",c4348237:"987","81253b24":"996"}[e]||e,f.p+f.u(e)},(()=>{var e={354:0,869:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),d=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;d.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",d.name="ChunkLoadError",d.type=o,d.request=n,a[1](d)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],d=r[1],i=r[2],c=0;if(n.some((t=>0!==e[t]))){for(a in d)f.o(d,a)&&(f.m[a]=d[a]);if(i)var u=i(f)}for(t&&t(r);c{"use strict";var e,t,r,a,o,n={},f={};function d(e){var t=f[e];if(void 0!==t)return t.exports;var r=f[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=f,e=[],d.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u=o)&&Object.keys(d.O).every((e=>d.O[e](r[i])))?r.splice(i--,1):(f=!1,o0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var f=2&a&&e;"object"==typeof f&&!~t.indexOf(f);f=r(f))Object.getOwnPropertyNames(f).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,d.d(o,n),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({61:"1f391b9e",140:"69369ae2",375:"b74877f5",401:"17896441",581:"935f2afb",634:"c4f5d8e4",695:"c91a686f",698:"90eee115",714:"1be78505",733:"cdda5b0c",773:"b2400e94",851:"cd484bad",908:"b4e94af8",987:"c4348237",996:"81253b24"}[e]||e)+"."+{55:"46a8d801",61:"491486ac",113:"96a447f5",140:"20ee0827",261:"2e796b47",375:"6b5678de",401:"5f242564",428:"2aadad0c",581:"f5f4bd2e",615:"5c077adb",634:"f4272d08",695:"ac43580f",698:"a7faaa41",714:"40b2c3bf",733:"80ddfd16",773:"00ee335a",774:"054ba7c6",851:"bdc07e87",908:"dc0c06c1",987:"d1cf9227",996:"77394c2b"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="stardust-website:",d.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var f,i;if(void 0!==r)for(var c=document.getElementsByTagName("script"),u=0;u{f.onerror=f.onload=null,clearTimeout(l);var o=a[e];if(delete a[e],f.parentNode&&f.parentNode.removeChild(f),o&&o.forEach((e=>e(r))),t)return t(r)},l=setTimeout(b.bind(null,void 0,{type:"timeout",target:f}),12e4);f.onerror=b.bind(null,f.onerror),f.onload=b.bind(null,f.onload),i&&document.head.appendChild(f)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.p="/",d.gca=function(e){return e={17896441:"401","1f391b9e":"61","69369ae2":"140",b74877f5:"375","935f2afb":"581",c4f5d8e4:"634",c91a686f:"695","90eee115":"698","1be78505":"714",cdda5b0c:"733",b2400e94:"773",cd484bad:"851",b4e94af8:"908",c4348237:"987","81253b24":"996"}[e]||e,d.p+d.u(e)},(()=>{var e={354:0,869:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(354|869)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=d.p+d.u(t),f=new Error;d.l(n,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;f.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",f.name="ChunkLoadError",f.type=o,f.request=n,a[1](f)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],f=r[1],i=r[2],c=0;if(n.some((t=>0!==e[t]))){for(a in f)d.o(f,a)&&(d.m[a]=f[a]);if(i)var u=i(d)}for(t&&t(r);c Brief Overview | Stardust XR - +

Brief Overview

Stardust XR is an XR display server designed for Linux-based systems.
Unlike traditional display servers that focus on 2D screens, Stardust XR introduces new conventions to utilize unbounded 3D space in virtual or real environments.

Priorities

  • 3D Environment Focus: While supporting 2D clients through the Wayland protocol, Stardust XR primarily aims to create and manage 3D environments.

  • Standard Interfaces: Utilizes Wayland and OpenXR for 2D and XR app integration.

  • Stardust Protocol: Implements a special protocol for:

    • Creating virtual objects
    • Developing 3D UIs around 2D apps (Panel Shells)
    • Handling data as Items that can represent files, Wayland surfaces, etc.
  • Personal Device Interaction: Focuses on individual user interactions rather than collaborative 3D spaces.

  • Flexible Object Interaction: Users can choose objects that best suit their current scenario, with easy setup for default configurations.

Architecture

Projects & Components

  • telescope: Stable stardust setup for quick and easy usage
  • server: Reference implementation of the StardustXR server (similar to Xorg)
  • core lib: Rust crates and schemas for connecting stardust server and client
  • website: The location where documentation is done and the website is generated from
  • protostar: App launcher library and examples including futuristic hexagon launcher
  • black hole: Universal minimization of Stardust objects
  • gravity: Launch programs with a certain offset in 3D space
  • magnetar: Example workspaces client
  • atmosphere: 3D environment with natural momentum-based movement
  • comet: Annotate in 3D wherever you want amongst your other apps!
- + \ No newline at end of file diff --git a/docs/dive-deeper/deep-overview.html b/docs/dive-deeper/deep-overview.html index a0da562f..6c42d3ec 100644 --- a/docs/dive-deeper/deep-overview.html +++ b/docs/dive-deeper/deep-overview.html @@ -4,13 +4,13 @@ Technical Overview | Stardust XR - +

Technical Overview

Server

The server is what renders all the meshes of each client, takes in input from input methods, and spits out input to input handlers according to the SUIS (Spatial Universal Interaction System). As well, the server is going to be part Wayland compositor and OpenXR runtime so all 2D and XR applications can be used together at once (if the hardware allows). It is the glue of Stardust, allowing any number of clients and apps to work in harmony while allowing the user full control in an intuitive way.

As new technologies come out, keeping the same server and trying to progressively upgrade it may lead to bloat and issues, so the protocol is designed to make creating new servers possible without too much hassle or to make servers modular. Old interfaces can be deprecated without breaking the overall system, and new interfaces can be added if needed due to the object-oriented design. The design is highly inspired by game engines, however the reference server is made in StereoKit due to it being more optimal.

Reference Server

Stardust has a reference server, but unlike other display servers this reference server is just as functional as any other Stardust server would be, because all the functionality is implemented in the clients. The server is just the glue.

The reference server uses StereoKit as its backend for many reasons:

  • Much more lightweight than any other framework/other engine
    • It was originally designed to run AR apps on HoloLens, and now it works on Quest
    • It's able to render thousands of objects on a HoloLens without breaking a sweat
  • Does not include unnecessary features that slow down performance
    • Physics and UI are not needed for Stardust, but those do not actively run and can always have an option to not be compiled at all.
  • Uses C-style C++ meaning not bytecode or interpreted (however has a C# API that is not used by Stardust)
  • Uses immediate mode rendering meaning the logic is many times easier to implement
  • Exposes its rendering insides whenever needed
    • Very needed for Wayland when it needs to display EGL Wayland surface textures on meshes
    • Overriding the depthbuffer per-pixel in fragment shader is useful for XR depth compositing
  • Is constantly getting new updates faster than most engines
    • World semantics for OpenXR was implemented ~1 week after the official OpenXR extension release
  • Is optimized to load resources JIT
    • Many game engines are best at caching their assets, but this is not practical in a display server
  • Uses OpenXR as its backend out of the box

IPC

The Stardust XR IPC uses Unix domain sockets for communication and a protocol based on flatbuffers/flexbuffers.

Protocol

The Stardust XR protocol is object-oriented, depending on a scenegraph on the server end and scenegraph or functionally equivalent structure on the client end. This allows easier implementation of the protocol while still remaining fast, reliable, and extensible.

Clients

The clients tell the server what models to draw, where they would like to accept input in, etc. Stardust clients are much more suited to widgets or user interfaces to 2D/XR apps.

- + \ No newline at end of file diff --git a/docs/dive-deeper/make-clients.html b/docs/dive-deeper/make-clients.html index 06119d00..fb53fd78 100644 --- a/docs/dive-deeper/make-clients.html +++ b/docs/dive-deeper/make-clients.html @@ -4,13 +4,13 @@ Making Clients | Stardust XR - +

Making Clients

A Stardust client is at its core an executable that connects to a stardust server instance at $XDG_RUNTIME_DIR/stardust-[0-32], sends and receives messages according to the Stardust protocol.

Rust

Stardust uses Rust due to its speed and reliability in build and runtime, so you will need to install cargo (preferably through rustup). If you're unsure how to use Rust then a great guide is at https://doc.rust-lang.org/book/.

stardust-xr

stardust-xr is a connecting library for servers and clients that deals with the lowest level of connecting to ensure basic compatibility is ensured. As a client developer you most likely won't need it, but it's good to know about it.

Fusion

stardust-xr-fusion is the high level library you'll probably be using to create your clients. It features structs for all Stardust objects and trait-based + async systems for handling events from the server.

To get started, create a new Rust project using

cargo new

and include the stardust-xr-fusion dependency in your cargo.toml. Documentation will be available at https://docs.rs/crate/stardust-xr-fusion/latest.

Molecules

stardust-xr-molecules is an even higher level widget library built on Fusion similar to MRTK to get your clients up and running faster. Documentation will be available at https://docs.rs/crate/stardust-xr-molecules/latest.

- + \ No newline at end of file diff --git a/docs/dive-deeper/terminology.html b/docs/dive-deeper/terminology.html index 8c5ea5ea..82ac879f 100644 --- a/docs/dive-deeper/terminology.html +++ b/docs/dive-deeper/terminology.html @@ -4,13 +4,13 @@ Glossary | Stardust XR - + - + \ No newline at end of file diff --git a/docs/get-started/bundled.html b/docs/get-started/bundled.html index 3a4349b1..62281a60 100644 --- a/docs/get-started/bundled.html +++ b/docs/get-started/bundled.html @@ -4,15 +4,15 @@ Bundled setup | Stardust XR - +

Bundled setup

Telescope is a bundled Stardust setup that lets you 1-click run all the essentials for testing a setup out on an existing 2D computer.

Nix

Install Nix

For easy development and distribution this project uses the nix package manager.
This allows to ensure all dependency requirements are met.

If you do not have nix installed follow the instructions at https://nixos.org/download/#nix-install-linux.

danger

Make sure to have flakes enabled.

Run Telescope

Because telescope itself is a nix flake, you simply have to run -Intel/AMD/NVK graphics:

nix run github:StardustXR/telescope

Proprietary NVIDIA graphics: is broken :/

NIXPKGS_ALLOW_UNFREE=1 nix run --impure github:StardustXR/telescope#telescopeNvidia

Non-nix

An AppImage generated from the nix flake is currently WIP. Please check back later or do a manual build.

- +Intel/AMD/NVK graphics:

nix run github:StardustXR/telescope

Proprietary NVIDIA graphics: is broken :/

NIXPKGS_ALLOW_UNFREE=1 nix run --impure github:StardustXR/telescope#telescopeNvidia

Fedora/Ultramarine

You can install Telescope, and all other core Stardust tools, through the Terra repository. This repository is pre-installed on Ultramarine, manual instructions can be found on their website.

To just install Telescope:

dnf install telescope

To install all Stardust XR packages (Ultramarine 40 and later, Fedora 41 and later):

dnf group install stardust-xr

From here, just run telescope in your terminal of choice.

Other

An AppImage generated from the nix flake is currently WIP. Please check back later or do a manual build.

+ \ No newline at end of file diff --git a/docs/get-started/manual.html b/docs/get-started/manual.html index 82935b40..60885920 100644 --- a/docs/get-started/manual.html +++ b/docs/get-started/manual.html @@ -4,7 +4,7 @@ Manual build/installation | Stardust XR - + @@ -13,7 +13,7 @@ Follow the README.

Clients

After the server is running, you'll need to run some clients. Here's a demo showing some off: A showcase of some different clients

Non-exhaustive list of clients:

  • flatland: 3D panel UI (like window manager) for intercting with all your 2D apps A flat panel containing the prism launcher
  • protostar: App launcher library and examples including futuristic hexagon launcher
  • black hole: Universal minimization of Stardust objects
  • gravity: Launch programs with a certain offset in 3D space
  • magnetar: Example workspaces client
  • atmosphere: 3D environment with natural momentum-based movement
  • comet: Annotate in 3D wherever you want amongst your other apps!
- + \ No newline at end of file diff --git a/docs/get-started/setup-openxr.html b/docs/get-started/setup-openxr.html index ffea2625..85179a84 100644 --- a/docs/get-started/setup-openxr.html +++ b/docs/get-started/setup-openxr.html @@ -4,13 +4,13 @@ Setup OpenXR Runtime | Stardust XR - +
-

Setup OpenXR Runtime

info

if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with trying out telescope.

Check the hardware table to ensure your hardware and headset are compatible:

SteamVR

You will likely want to use Monado instead, but if you need to the instructions are available.

danger

If you are on NixOS please consult https://lvra.gitlab.io/docs/distros/nixos/ before installing SteamVR.

https://lvra.gitlab.io/docs/steamvr/ is a good starting point, but be aware that the stardust server cannot run as an overlay on top of other games due to SteamVR not implementing the OpenXR Overlay extension.

Monado

If you've got a wired headset, this is generally the way to go.

NixOS

It's generally easiest to follow the instructions at https://lvra.gitlab.io/docs/distros/nixos/ to install properly to the system.

Other distros

Envision is the XR launcher (like a minecraft launcher) of choice for open source XR and is overall better in practice than SteamVR.

Test OpenXR Runtime

Try running XRGears and see if it works, you can get it from the system's package manager often.

- +

Setup OpenXR Runtime

info

if you want to test stardust in flatscreen mode (in a window) without a headset or other OpenXR device, you can skip this step and start with trying out telescope.

Check the hardware table to ensure your hardware and headset are compatible:

SteamVR

You will likely want to use Monado instead, but if you need to the instructions are available.

danger

If you are on NixOS please consult https://lvra.gitlab.io/docs/distros/nixos/ before installing SteamVR.

https://lvra.gitlab.io/docs/steamvr/ is a good starting point, but be aware that the stardust server cannot run as an overlay on top of other games due to SteamVR not implementing the OpenXR Overlay extension.

Monado

If you've got a wired headset, this is generally the way to go.

NixOS

It's generally easiest to follow the instructions at https://lvra.gitlab.io/docs/distros/nixos/ to install properly to the system.

Other distros

Envision is the XR launcher (like a minecraft launcher) of choice for open source XR and is overall better in practice than SteamVR. If you are a Fedora user, Envision is packaged, but it's reccomended to get it from the Terra repository. Other distros will need to build from source.

Test OpenXR Runtime

Try running XRGears and see if it works, you can get it from the system's package manager often.

+ \ No newline at end of file diff --git a/index.html b/index.html index 1a0bed6e..bafea3a3 100644 --- a/index.html +++ b/index.html @@ -4,13 +4,13 @@ Stardust XR - +

Stardust XR

We Fight for the Users!

Flexible

Flexible

Stardust allows developers to make XR widgets or interfaces and run them among others. You don't have to make a whole system UI, just a few pieces.

Streamlined

Streamlined

Stardust is made using StereoKit, an XR application/rendering toolkit allowing for a fast and lightweight display server.

- + \ No newline at end of file diff --git a/roadmap.html b/roadmap.html index 0ee3bc0f..262f0807 100644 --- a/roadmap.html +++ b/roadmap.html @@ -4,13 +4,13 @@ Roadmap | Stardust XR - +

Roadmap

Warning. This roadmap is now outdated.

1.0 (Minimum Viable Product)

  • Core functionality
    • IPC+RPC
  • Client
    • Fusion
      • Initial connection
      • Node type creation/destruction
      • Interface interaction
      • Callbacks
      • Documentation
  • Server
    • Per-client scenegraph
    • Statically link StereoKit
    • Basic features
      • Logic step
      • Spatial transforms
        • Absolute movement
        • Relative movement
        • Spatial parenting
      • Models
        • Loading
        • Setting material parameters
      • Fields (SDFs for interaction)
        • Box field
        • Rounded box field
        • Sphere field
      • Input
        • Input methods
          • Hand input
            • Creation from OpenXR
            • Creation from StereoKit (flatscreen)
            • Interaction with clients
          • Pointer input
            • Creation from StereoKit (flatscreen, mouse cursor ray)
            • Interaction with clients
        • Input handler
          • Async input propagation through distance
      • Environment
        • Set skytex
        • Set skylight
      • Items
        • Base item class
        • Base item accepter class
        • Environment equirectangular item
        • Environment equirectangular accepter
      • 2D integration
        • Panels
          • Panel item
          • smithay (for Wayland)
            • Rendering
            • Input seats
        • Panel shells
          • Accept panel items
          • Put surface on model material's texture
          • Feed input through to panel
          • Release panel items
  • Daily Drivable System
    • GUI App Launcher (Protostar)
      • Get desktop files
      • Find and parse icons
      • Display icons and desktop files in grid
      • Launch executables spatially
    • Panel Item UI
      • Flatland

More to come!

- + \ No newline at end of file