Files
website/assets/js/9e9b69ea.4f675bb6.js
github-actions[bot] f453b212a0 deploy: 84719643b7
2025-04-01 01:44:27 +00:00

1 line
5.9 KiB
JavaScript

"use strict";(self.webpackChunkstardust_website=self.webpackChunkstardust_website||[]).push([[233],{5680:(e,t,r)=>{r.d(t,{xA:()=>c,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 s(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<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?s(Object(r),!0).forEach((function(t){a(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):s(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function o(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},s=Object.keys(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);for(n=0;n<s.length;n++)r=s[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),u=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},c=function(e){var t=u(e.components);return n.createElement(l.Provider,{value:t},e.children)},d="mdxType",p={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,s=e.originalType,l=e.parentName,c=o(e,["components","mdxType","originalType","parentName"]),d=u(r),y=a,g=d["".concat(l,".").concat(y)]||d[y]||p[y]||s;return r?n.createElement(g,i(i({ref:t},c),{},{components:r})):n.createElement(g,i({ref:t},c))}));function g(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var s=r.length,i=new Array(s);i[0]=y;var o={};for(var l in t)hasOwnProperty.call(t,l)&&(o[l]=t[l]);o.originalType=e,o[d]="string"==typeof e?e:a,i[1]=o;for(var u=2;u<s;u++)i[u]=r[u];return n.createElement.apply(null,i)}return n.createElement.apply(null,r)}y.displayName="MDXCreateElement"},76:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>s,metadata:()=>o,toc:()=>u});var n=r(8168),a=(r(6540),r(5680));const s={sidebar_position:3},i="Making Clients",o={unversionedId:"dive-deeper/make-clients",id:"dive-deeper/make-clients",title:"Making Clients",description:"A Stardust client is at its core an executable that connects to a stardust server instance at $XDGRUNTIMEDIR/stardust-[0-32], sends and receives messages according to the Stardust protocol.",source:"@site/docs/03-dive-deeper/03-make-clients.md",sourceDirName:"03-dive-deeper",slug:"/dive-deeper/make-clients",permalink:"/docs/dive-deeper/make-clients",draft:!1,editUrl:"https://github.com/StardustXR/website/edit/main/docs/03-dive-deeper/03-make-clients.md",tags:[],version:"current",sidebarPosition:3,frontMatter:{sidebar_position:3},sidebar:"tutorialSidebar",previous:{title:"Technical Overview",permalink:"/docs/dive-deeper/deep-overview"},next:{title:"Glossary",permalink:"/docs/dive-deeper/terminology"}},l={},u=[{value:"Rust",id:"rust",level:2},{value:"stardust-xr",id:"stardust-xr",level:2},{value:"Fusion",id:"fusion",level:2},{value:"Molecules",id:"molecules",level:2}],c={toc:u},d="wrapper";function p(e){let{components:t,...r}=e;return(0,a.yg)(d,(0,n.A)({},c,r,{components:t,mdxType:"MDXLayout"}),(0,a.yg)("h1",{id:"making-clients"},"Making Clients"),(0,a.yg)("p",null,"A Stardust client is at its core an executable that connects to a stardust server instance at ",(0,a.yg)("inlineCode",{parentName:"p"},"$XDG_RUNTIME_DIR/stardust-[0-32]"),", sends and receives messages according to the Stardust protocol."),(0,a.yg)("h2",{id:"rust"},"Rust"),(0,a.yg)("p",null,"Stardust uses Rust due to its speed and reliability in build and runtime, so you will need to install cargo (preferably through ",(0,a.yg)("a",{parentName:"p",href:"https://rustup.rs/"},"rustup"),"). If you're unsure how to use Rust then a great guide is at ",(0,a.yg)("a",{parentName:"p",href:"https://doc.rust-lang.org/book/"},"https://doc.rust-lang.org/book/"),"."),(0,a.yg)("h2",{id:"stardust-xr"},"stardust-xr"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"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."),(0,a.yg)("h2",{id:"fusion"},"Fusion"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"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."),(0,a.yg)("p",null,"To get started, create a new Rust project using"),(0,a.yg)("pre",null,(0,a.yg)("code",{parentName:"pre",className:"language-bash"},"cargo new\n")),(0,a.yg)("p",null,"and include the ",(0,a.yg)("inlineCode",{parentName:"p"},"stardust-xr-fusion")," dependency in your ",(0,a.yg)("inlineCode",{parentName:"p"},"cargo.toml"),". Documentation will be available at ",(0,a.yg)("a",{parentName:"p",href:"https://docs.rs/crate/stardust-xr-fusion/latest"},"https://docs.rs/crate/stardust-xr-fusion/latest"),"."),(0,a.yg)("h2",{id:"molecules"},"Molecules"),(0,a.yg)("p",null,(0,a.yg)("inlineCode",{parentName:"p"},"stardust-xr-molecules")," is an even higher level widget library built on Fusion similar to ",(0,a.yg)("a",{parentName:"p",href:"https://github.com/microsoft/MixedRealityToolkit-Unity"},"MRTK")," to get your clients up and running faster. Documentation will be available at ",(0,a.yg)("a",{parentName:"p",href:"https://docs.rs/crate/stardust-xr-molecules/latest"},"https://docs.rs/crate/stardust-xr-molecules/latest"),"."))}p.isMDXComponent=!0}}]);