Files
website/assets/js/a2f9352b.265a090d.js
github-actions[bot] 9b0b368998 deploy: 87b4ad67be
2025-07-09 02:18:35 +00:00

1 line
12 KiB
JavaScript

"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[393],{5680:(e,t,a)=>{a.d(t,{xA:()=>u,yg:()=>g});var r=a(6540);function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function i(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,r)}return a}function o(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};t%2?i(Object(a),!0).forEach((function(t){n(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):i(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}function l(e,t){if(null==e)return{};var a,r,n=function(e,t){if(null==e)return{};var a,r,n={},i=Object.keys(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||(n[a]=e[a]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r<i.length;r++)a=i[r],t.indexOf(a)>=0||Object.prototype.propertyIsEnumerable.call(e,a)&&(n[a]=e[a])}return n}var s=r.createContext({}),p=function(e){var t=r.useContext(s),a=t;return e&&(a="function"==typeof e?e(t):o(o({},t),e)),a},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},m="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},c=r.forwardRef((function(e,t){var a=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),m=p(a),c=n,g=m["".concat(s,".").concat(c)]||m[c]||d[c]||i;return a?r.createElement(g,o(o({ref:t},u),{},{components:a})):r.createElement(g,o({ref:t},u))}));function g(e,t){var a=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=a.length,o=new Array(i);o[0]=c;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[m]="string"==typeof e?e:n,o[1]=l;for(var p=2;p<i;p++)o[p]=a[p];return r.createElement.apply(null,o)}return r.createElement.apply(null,a)}c.displayName="MDXCreateElement"},4632:(e,t,a)=>{a.r(t),a.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=a(8168),n=(a(6540),a(5680));const i={sidebar_position:4},o="Full Installation",l={unversionedId:"get-started/manual",id:"get-started/manual",title:"Full Installation",description:"Unlike Telescope that launches the Stardust XR server and a small selection of clients, the typical way to interact with Stardust is to first run the server, which only provides a void by default, as there are no applications or clients within it. You can then launch any combination of the clients listed below, as they are all considered separate items but can run concurrently inside Stardust.",source:"@site/docs/01-get-started/04-manual.md",sourceDirName:"01-get-started",slug:"/get-started/manual",permalink:"/docs/get-started/manual",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/01-get-started/04-manual.md",tags:[],version:"current",sidebarPosition:4,frontMatter:{sidebar_position:4},sidebar:"tutorialSidebar",previous:{title:"Setup OpenXR Runtime",permalink:"/docs/get-started/setup-openxr"},next:{title:"Meta Quest Walkthrough",permalink:"/docs/get-started/quest-3-setup"}},s={},p=[{value:"Server",id:"server",level:3},{value:"Clients",id:"clients",level:3},{value:"Installation Script",id:"installation-script",level:3}],u={toc:p},m="wrapper";function d(e){let{components:t,...a}=e;return(0,n.yg)(m,(0,r.A)({},u,a,{components:t,mdxType:"MDXLayout"}),(0,n.yg)("h1",{id:"full-installation"},"Full Installation"),(0,n.yg)("p",null,"Unlike ",(0,n.yg)("a",{parentName:"p",href:"Quickstart"},"Telescope")," that launches the Stardust XR server and a small selection of clients, the typical way to interact with Stardust is to first run the server, which only provides a void by default, as there are no applications or clients within it. You can then launch any combination of the clients listed below, as they are all considered separate items but can run concurrently inside Stardust. "),(0,n.yg)("h3",null,(0,n.yg)("img",{src:"/img/docs/Fedora_logo.svg",alt:"Fedora Logo",style:{verticalAlign:"middle",height:"1em",marginRight:"0.5em"}}),(0,n.yg)("img",{src:"/img/docs/ultramarine-logo.svg",alt:"Ultramarine Logo",style:{verticalAlign:"middle",height:"1em",marginRight:"0.5em"}}),"Fedora and derivatives (except Enterprise Linux)"),(0,n.yg)("admonition",{type:"info"},(0,n.yg)("p",{parentName:"admonition"},"Stardust XR is packaged in the ",(0,n.yg)("a",{parentName:"p",href:"https://terra.fyralabs.com/"},"Terra repository"),". If you are using ",(0,n.yg)("a",{parentName:"p",href:"https://ultramarine-linux.org"},"Ultramarine Linux"),", ",(0,n.yg)("a",{parentName:"p",href:"https://bazzite.gg"},"Bazzite"),", or ",(0,n.yg)("a",{parentName:"p",href:"https://getaurora.dev"},"Aurora"),", this repository comes pre-installed, otherwise you will need to add the repository:"),(0,n.yg)("p",{parentName:"admonition"},"If you are using a ",(0,n.yg)("a",{parentName:"p",href:"https://fedoraproject.org/atomic-desktops/"},"Fedora Atomic Edition")," or derrivative you will need to run the following command:"),(0,n.yg)("pre",{parentName:"admonition"},(0,n.yg)("code",{parentName:"pre"},"curl -fsSL https://github.com/terrapkg/subatomic-repos/raw/main/terra.repo | pkexec tee /etc/yum.repos.d/terra.repo\nsudo rpm-ostree install terra-release\n")),(0,n.yg)("p",{parentName:"admonition"},"Standard Fedora Editions and derivatives can directly install terra-release:"),(0,n.yg)("pre",{parentName:"admonition"},(0,n.yg)("code",{parentName:"pre"},"sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release\n"))),(0,n.yg)("p",null,"Then, run this command to install all Stardust XR packages:"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"sudo dnf group install stardust-xr\n")),(0,n.yg)("h3",null,(0,n.yg)("img",{src:"/img/docs/arch.png",alt:"Logo",style:{verticalAlign:"middle",height:"1em",marginRight:"0.5em"}}),"Arch Linux"),(0,n.yg)("pre",null,(0,n.yg)("code",{parentName:"pre"},"paru -s stardust-xr-telescope\nparu -s stardust-xr-armillary\nparu -s stardust-xr-atmosphere\nparu -s stardust-xr-black-hole\nparu -s stardust-xr-comet\nparu -s stardust-xr-flatland\nparu -s stardust-xr-gravity\nparu -s stardust-xr-magnetar\nparu -s stardust-xr-non-spatial-input\nparu -s stardust-xr-protostar\nparu -s stardust-xr-server\n")),(0,n.yg)("p",null,"From there, you can launch Stardust with ",(0,n.yg)("inlineCode",{parentName:"p"},"telescope"),", then in another terminal window or tab, run any other clients you need. We recommend ",(0,n.yg)("inlineCode",{parentName:"p"},"flatland")," and ",(0,n.yg)("inlineCode",{parentName:"p"},"hexagon-launcher"),"."),(0,n.yg)("h1",{id:"manual-build"},"Manual Build"),(0,n.yg)("admonition",{type:"caution"},(0,n.yg)("p",{parentName:"admonition"},"Make sure all of the repositories that are cloned are on the same branch (e.g. all main or all dev branch) to ensure Stardust protocol compatibility ")),(0,n.yg)("h3",{id:"server"},"Server"),(0,n.yg)("p",null,"Clone the ",(0,n.yg)("a",{parentName:"p",href:"https://github.com/StardustXR/server"},"Stardust XR Server")," ",(0,n.yg)("inlineCode",{parentName:"p"},"https://github.com/StardustXR/server")),(0,n.yg)("p",null,"Make sure to check the list of prerequisites. Run ",(0,n.yg)("inlineCode",{parentName:"p"},"cargo build")," and ",(0,n.yg)("inlineCode",{parentName:"p"},"cargo run")," in the cloned repo to start the server. As stated above, the Stardust server will simply load in with a black void until clients are loaded in. This behaviour can currently be modified by creating a ",(0,n.yg)("inlineCode",{parentName:"p"},"startup")," file inside the folder ",(0,n.yg)("inlineCode",{parentName:"p"},"~/.config/stardust/")," to automate the loading in of clients, an example of which is shown ",(0,n.yg)("a",{parentName:"p",href:"https://youtu.be/c6RyEYDz2iw?si=pL1zffNVsWocZHrc&t=788"},"here"),", and an example of is linked ",(0,n.yg)("a",{parentName:"p",href:"https://github.com/cyberneticmelon/usefulscripts/blob/main/startup"},"here")),(0,n.yg)("h3",{id:"clients"},"Clients"),(0,n.yg)("p",null,"After the server is running, you'll need to run some clients. Clone any of these, ",(0,n.yg)("inlineCode",{parentName:"p"},"cargo build")," & then ",(0,n.yg)("inlineCode",{parentName:"p"},"cargo run")," after the server is already running, and they will load into the Stardust server! "),(0,n.yg)("p",null,"Non-exhaustive list of clients:"),(0,n.yg)("ul",null,(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/Armillary"},(0,n.yg)("strong",{parentName:"a"},"armillary")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/Armillary"),(0,n.yg)("br",{parentName:"li"}),"A 3D model viewer for Stardust XR; rotate, move, and display models in your XR space"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/atmosphere"},(0,n.yg)("strong",{parentName:"a"},"atmosphere")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/atmosphere"),(0,n.yg)("br",{parentName:"li"}),"3D environment with natural momentum-based movement"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/black-hole"},(0,n.yg)("strong",{parentName:"a"},"black hole")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/black-hole"),(0,n.yg)("br",{parentName:"li"}),"Universal minimization of Stardust objects"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/comet"},(0,n.yg)("strong",{parentName:"a"},"comet")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/comet"),(0,n.yg)("br",{parentName:"li"}),"Write in 3D wherever you want amongst your other apps!"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/flatland"},(0,n.yg)("strong",{parentName:"a"},"flatland")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/flatland"),(0,n.yg)("br",{parentName:"li"}),"3D panel UI (like window manager) for interacting with all your 2D apps"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/gravity"},(0,n.yg)("strong",{parentName:"a"},"gravity")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/gravity"),(0,n.yg)("br",{parentName:"li"}),"Launch programs with a certain offset in 3D space"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/magnetar"},(0,n.yg)("strong",{parentName:"a"},"magnetar")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/magnetar"),(0,n.yg)("br",{parentName:"li"}),"Example workspaces client"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/non-spatial-input"},(0,n.yg)("strong",{parentName:"a"},"non-spatial-input")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/non-spatial-input"),(0,n.yg)("br",{parentName:"li"}),"Provides utilities to port keyboard, mouse, and other input methods like libinput into Stardust XR"),(0,n.yg)("li",{parentName:"ul"},(0,n.yg)("a",{parentName:"li",href:"https://github.com/StardustXR/protostar"},(0,n.yg)("strong",{parentName:"a"},"protostar")),": ",(0,n.yg)("inlineCode",{parentName:"li"},"https://github.com/StardustXR/protostar"),(0,n.yg)("br",{parentName:"li"}),"App launcher library and examples including futuristic Hexagon Launcher")),(0,n.yg)("h3",{id:"installation-script"},"Installation Script"),(0,n.yg)("p",null,"If you have all the correct dependencies, we've created a ",(0,n.yg)("a",{parentName:"p",href:"https://github.com/cyberneticmelon/usefulscripts/blob/main/stardustxr_setup.sh"},"script")," that will automatically ",(0,n.yg)("inlineCode",{parentName:"p"},"git clone")," all of the necessary repositories, ",(0,n.yg)("inlineCode",{parentName:"p"},"cargo build")," all of them, and give them a symlinks for running the server and clients from the command line. It also creates a ",(0,n.yg)("a",{parentName:"p",href:"https://github.com/cyberneticmelon/usefulscripts/blob/main/startup"},"config")," file that will by default install the default ",(0,n.yg)("inlineCode",{parentName:"p"},"atmosphere")," background. Run the script with flag ",(0,n.yg)("inlineCode",{parentName:"p"},"-nobg")," if you don't want that."))}d.isMDXComponent=!0}}]);