54 Commits

Author SHA1 Message Date
Nova
e5bb4944f6 fix: everything 2025-08-19 03:47:26 -07:00
Nova King
0a46ac6a90 Replace Docusaurus site with static HTML 2025-08-19 03:05:23 -07:00
Owen Zimmerman
c510b9c2b5 Fix the build (#32) 2025-07-09 20:22:19 -07:00
Owen Zimmerman
bcc3a5a057 remove quick start page, various updates for existing pages (#31) 2025-07-09 20:11:02 -07:00
Owen Zimmerman
87b4ad67be Add more list of clients, alphabetize list. (#30) 2025-07-08 19:16:57 -07:00
Owen Zimmerman
961d3af578 Fix: arch directions (#29)
* Fix arch directions

* Correct telescope installed script name
2025-07-08 18:41:37 -07:00
Leah Anderson
7edcb4f2f3 fix misspelling of "actively" (#28) 2025-07-04 11:10:59 -07:00
Owen Zimmerman
a02d8a2241 Add period to NixOS tagline (#27) 2025-05-06 18:57:03 -07:00
Cyberneticmelon
3feec70b28 Updated blog 2025-04-10 19:20:34 -04:00
Cyberneticmelon
160dae3712 Updated blog 2025-04-10 19:05:58 -04:00
Cyberneticmelon
9d0315bdc5 Updated blog 2025-04-10 17:59:52 -04:00
Cyberneticmelon
9985cd50e7 Updated blog 2025-04-10 00:42:02 -04:00
Cyberneticmelon
5cf2cc908e Update 2025-04-04-Stardust-XR-Philosophy.md 2025-04-09 21:58:31 -04:00
Ananta Srikar
8c0ea9c987 fix: typo (#26)
Fixed a typo in the word "interacting".
2025-04-08 03:54:16 -07:00
lea
0427a21a27 feat: add metrics (#25)
* feat: add metrics

* don't use hosted service
2025-04-07 13:59:09 -07:00
Cyberneticmelon
d23b221c3b Added link 2025-04-05 02:16:38 -04:00
Cyberneticmelon
cc8a927ac6 Stardust XR Philosophy Blog Post 2025-04-05 01:57:49 -04:00
Cyberneticmelon
84719643b7 Added XR & Hand tracking guides 2025-03-31 21:42:16 -04:00
Cyberneticmelon
fcf9718299 Added guided GIFs 2025-03-30 02:11:25 -04:00
Cyberneticmelon
1cf332a6d6 Update 05-quest-3-setup.md 2025-03-27 15:19:17 -04:00
Cyberneticmelon
f0e063522d Update 04-manual.md 2025-03-27 15:18:59 -04:00
Cyberneticmelon
ef7a264492 Update 03-setup-openxr.md 2025-03-27 15:18:43 -04:00
Cyberneticmelon
635945d6af Update 03-setup-openxr.md 2025-03-27 15:18:29 -04:00
Cyberneticmelon
ffd08727b5 Update 02-Quickstart.md 2025-03-27 15:17:52 -04:00
Cyberneticmelon
a5381d5c5d Update 04-manual.md 2025-03-18 23:01:39 -04:00
Cyberneticmelon
d44216e950 Update 03-setup-openxr.md 2025-03-18 23:01:24 -04:00
Cyberneticmelon
286fc61986 Update 02-Quickstart.md 2025-03-18 23:00:53 -04:00
Owen Zimmerman
0401a6318d Add aurora to terra pre-installed (#24) 2025-03-12 23:22:39 -07:00
Nova
3163176060 refactor: embedded iframes for videos 2025-03-08 12:37:45 -08:00
Owen Zimmerman
b63890353b Update 05-quest-3-setup.md (#23) 2025-03-08 00:29:45 -08:00
Owen Zimmerman
e0ec73ecab Fix 04-manual.md (#22) 2025-03-07 23:57:32 -08:00
Owen Zimmerman
a04f3fdbcf Fix: setup (#21)
* Fix setup

* Remove spaces
2025-03-07 23:57:23 -08:00
Owen Zimmerman
3cd472c3eb Fix: quickstart page (#20)
* Quickstart fixes

* Clarify adding repo
2025-03-07 23:43:09 -08:00
Cyberneticmelon
90b4126bfe Update 05-quest-3-setup.md 2025-03-07 23:46:47 -05:00
Cyberneticmelon
aeadc7df95 Update 03-setup-openxr.md
Added link to Envision setup portion of Quest 3 walk through Youtube Video
2025-03-07 14:03:11 -05:00
Cyberneticmelon
0833f75285 Update docusaurus.config.js
Return character doesn't work, removed colon for better look
2025-03-07 13:53:28 -05:00
Cyberneticmelon
5a3d158e35 Update 03-setup-openxr.md 2025-03-07 13:49:01 -05:00
Cyberneticmelon
97fbd850ee Updated documentation for easier onboarding of developers and users (#19)
* Website updated with better documentation and guides

* Website update with better documentation

* ❤️

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/05-quest-3-setup.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/05-quest-3-setup.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/05-quest-3-setup.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docusaurus.config.js

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/04-manual.md

Co-authored-by: Jaiden Riordan <jade@e.email>

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/01-What-is-Stardust.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/02-Quickstart.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update docs/01-get-started/03-setup-openxr.md

Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>

* Update 02-Quickstart.md

Added information about Atomic installations

* Update 02-Quickstart.md

* Update 03-setup-openxr.md

Added Terra installation information for Atomic versions

* Update 04-manual.md

Added Terra installation information about Atomic editions

* Update 05-quest-3-setup.md

Updating Terra installation information about Atomic editions

* Update 02-Quickstart.md

* Update 03-setup-openxr.md

* Update 04-manual.md

* Update 05-quest-3-setup.md

* Update 05-quest-3-setup.md

* Update 01-What-is-Stardust.md

* Update 02-Quickstart.md

* Update 03-setup-openxr.md

---------

Co-authored-by: Jaiden Riordan <jade@e.email>
Co-authored-by: Owen Zimmerman <123591347+Owen-sz@users.noreply.github.com>
2025-03-07 10:38:36 -08:00
Nova
b5d1c679f4 feat: carousel workflow 2024-12-30 13:48:29 -08:00
Owen Zimmerman
cae188d6ea Add: Terra instructions (#18)
* Add Terra instructions

* How to run telescope

* Fix typo
2024-12-29 21:34:20 -05:00
lea
43380670f3 feat: add funding.json well-known (#17) 2024-10-25 05:02:47 +00:00
Holger Mueller
c51de16fb7 removed links to roadmap and added wrning at top of roadmap.md file (#16)
* removed links to roadmap and added wrning at top of roadmap.md file

* reverted lock files
2024-08-29 08:33:05 +00:00
Nova
26561a4ae6 fix(bundled): new graphics commands 2024-08-24 23:34:47 -04:00
Nova
d67dc8fc4d reorder: everythinggg 2024-08-22 05:26:51 -04:00
Nova
f04a3eabbc fix: architecture diagram location 2024-08-22 03:47:03 -04:00
Nova
8c5ed14cd9 fix(overview): info about stardust clients 2024-08-22 03:45:19 -04:00
6543
1f4e00b4be Documenting stardust projects and components (#10)
* Start documenting stardust projects and components

* add-more
2024-08-22 07:41:35 +00:00
6543
3a8f38a602 Update github actions (#11)
to fix https://github.com/StardustXR/website/actions/runs/10498882310/job/29084645282
2024-08-22 01:24:44 +00:00
6543
5d65681b81 update docusaurus and add mermaidjs support (#9) 2024-08-21 23:14:29 +00:00
6543
3b4cfc15ba Restructur and start dedicated pages for user tutorials (#7)
* rename filenames to reflect order

* introduce editorconfig

* Restructur and start dedicated pages for terminology and user tutorials

* update docusaurus and add mermaidjs support

* Add simplified architecture as diagram for now

* finish
2024-08-21 23:13:55 +00:00
6543
9672f2b7c0 Remove old stardust protocol docs (#8)
they moved to https://github.com/StardustXR/core/tree/main/schemas/src/protocol
2024-08-21 12:19:51 +00:00
6543
3d0faf554c Add nix flake (#6) 2024-08-21 10:06:49 +00:00
Nova
a9fc72b62b refactor: replace multiple clients image 2023-09-17 11:16:49 -04:00
technobaboo
1a6df6154c feat: examplesss 2023-07-11 12:34:41 -07:00
103 changed files with 1211 additions and 10091 deletions

18
.editorconfig Normal file
View File

@@ -0,0 +1,18 @@
root = true
[*]
indent_style = space
indent_size = 2
tab_width = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
trim_trailing_whitespace = false
indent_size = 1
[*.{css,js,json}]
indent_style = tab

View File

@@ -9,10 +9,10 @@ jobs:
name: Deploy to GitHub Pages
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 14.x
node-version: 22.x
cache: yarn
- name: Build website
run: |
@@ -22,7 +22,7 @@ jobs:
# Popular action to deploy to GitHub Pages:
# Docs: https://github.com/peaceiris/actions-gh-pages#%EF%B8%8F-docusaurus
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
uses: peaceiris/actions-gh-pages@v4
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
# Build output to publish to the `gh-pages` branch:
@@ -32,4 +32,4 @@ jobs:
# The GH actions bot is used by default if you didn't specify the two fields.
# You can swap them out with your own user credentials.
user_name: github-actions[bot]
user_email: 41898282+github-actions[bot]@users.noreply.github.com
user_email: 41898282+github-actions[bot]@users.noreply.github.com

17
.gitignore vendored
View File

@@ -1,20 +1,3 @@
# Dependencies
/node_modules
# Production
/build
# Generated files
.docusaurus
.cache-loader
# Misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local
npm-debug.log*
yarn-debug.log*
yarn-error.log*

View File

@@ -0,0 +1 @@
https://fyralabs.com/funding.json

1
CNAME Normal file
View File

@@ -0,0 +1 @@
stardustxr.org

View File

@@ -1,33 +1,21 @@
# Website
# Stardust XR Website
This website is built using [Docusaurus 2](https://docusaurus.io/), a modern static website generator.
This repository contains a minimal static website for the Stardust XR project.
## Installation
## Usage
```console
yarn install
No build tools are required. Open `index.html` in your browser or serve the
folder with any static web server.
## Documentation
Markdown files live in the `docs/` directory. The docs page loads them on demand
using the [Marked](https://marked.js.org/) library. To link to a document, use a
URL of the form:
```
/docs/#path/to/file
```
## Local Development
```console
yarn start
```
This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.
## Build
```console
yarn build
```
This command generates static content into the `build` directory and can be served using any static contents hosting service.
## Deployment
```console
GIT_USER=<Your GitHub username> USE_SSH=true yarn deploy
```
If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch.
Adding a new document is as easy as dropping a `.md` file into the `docs`
folder.

View File

@@ -1,3 +0,0 @@
module.exports = {
presets: [require.resolve('@docusaurus/core/lib/babel/preset')],
};

View File

@@ -1,3 +0,0 @@
#!/bin/sh
GIT_USER=$1 USE_SSH=true yarn deploy

View File

@@ -1,4 +0,0 @@
{
"label": "Protocol",
"position": 2
}

View File

@@ -1,4 +0,0 @@
{
"label": "Client",
"position": 2
}

View File

@@ -1 +0,0 @@
# Initial Client Connection

View File

@@ -1,78 +0,0 @@
---
sidebar_position: 1
---
# Protocol
## Data
Every message uses [flatbuffers](https://google.github.io/flatbuffers/) and [flexbuffers](https://google.github.io/flatbuffers/flexbuffers.html) to add variant data such as method arguments and return values. The Stardust XR Message schema is:
```cpp
namespace StardustXR;
table Message {
type: ubyte;
id: uint;
object: string;
method: string;
error: string;
data:[ubyte] (flexbuffer);
}
root_type Message;
```
## Message Types
All fields not accounted for are assumed to be not included or `0` or `""`
### Error
| Field Name | Value |
|-:|:-|
| `type` | `0` |
| `id` | `0` or ID of method call |
| `object` | Path to the object the error comes from |
| `method` | What method caused the error (if applicable, otherwise this is an empty string) |
| `error` | String containing the error message itself |
| `data` | Empty vector |
### Signal
Signals are method calls that do not expect a response of any kind.
| Field Name | Value |
|-:|:-|
| `type` | `1` |
| `object` | Path to object to send signal to |
| `method` | Name of the method to execute |
| `data` | Flexbuffer containing arguments to pass to remote method |
### Method Call
Method calls allow for remote procedure calling.
| Field Name | Value |
|-:|:-|
| `type` | `2` |
| `id` | Dynamically generated ID to identify method return for this method |
| `object` | Path to object to execute method on |
| `method` | Name of the method to execute |
| `data` | Flexbuffer containing arguments to pass to remote method |
### Method Return
Message to pass the return value back to the program.
| Field Name | Value |
|-:|:-|
| `type` | `3` |
| `id` | The same as the message call's ID |
| `data` | Flexbuffer containing return value |
## Data Types
Stardust does not support the `Map` or `FixedTypedVector` flexbuffers datatypes.
### Color
A `Vector` of 4 `float` is treated as a `Color` in the form `RGBA`.
### Vector2
A `Vector` of 2 `double` is treated as a `Vector2`.
### Vector3
A `Vector` of 3 `double` is treated as a `Vector3`.
### Quaternion
A `Vector` of 4 `double` is treated as a `Quaternion`.

View File

@@ -1,4 +0,0 @@
{
"label": "Server",
"position": 3
}

View File

@@ -1,4 +0,0 @@
{
"label": "Server Objects",
"position": 2
}

View File

@@ -1,13 +0,0 @@
# /drawable
Object managing anything drawable, from the skytex to models.
## Signals
### `createModelFromFile(string name, string spacePath, string path)`
Creates a new [Model](../types/Model.md) at `/model/[name]` with parent at `spacePath`.
### `setSkytex(string path)`
Sets the sky texture to be the image (HDR) at the absolute `path`.
### `setSkylight(string path)`
Sets the ambient lighting (using spherical harmonics) to the HDR at the absolute `path`.

View File

@@ -1,13 +0,0 @@
# /field
Object managing fields for interaction.
## Signals
### `createBoxField(string name, string spacePath, Vector3 origin, Quaternion orientation, Vector3 size)`
Creates a new [BoxField](../types/field/BoxField.md) at `/field/[name]` with parent at `spacePath`.
### `createCylinderField(string name, string spacePath, Vector3 origin, Quaternion orientation, float length, float radius)`
Creates a new [CylinderField](../types/field/CylinderField.md) at `/field/[name]` with parent at `spacePath`.
### `createSphereField(string name, string spacePath, Vector3 origin, float radius)`
Creates a new [SphereField](../types/field/SphereField.md) at `/field/[name]` with parent at `spacePath`.

View File

@@ -1,9 +0,0 @@
# /hmd
Reference object to the HMD being used to render content and track head position. This does not currently work, but is planned to.
<!-- ## Signals -->
<!-- ### `setPosition(Vector3 position)` -->
<!-- ### `setRotation(Quaternion rotation)` -->
<!-- ### `setPose(Vector3 position, Quaternion rotation)` -->
<!-- ### `setIPD(double meters)` -->

View File

@@ -1,16 +0,0 @@
# /input
Object managing input and interaction.
## Signals
<!-- ### `registerPointerInput(string name, Vector3 origin, Vector3 direction, float tilt)` -->
<!-- Creates a new [PointerInput](../types/input/inputtypes/PointerInput.fbs) at `/input/methods/[name]` with the origin, direction, and tilt specified. -->
### `registerInputHandler(string name, string field, string spacePath, Vector3 position, Quat rotation, string callbackPath, string callbackMethod)`
Creates a new [InputHandler](../types/input/InputHandler.md) with the specified `name` and `field`, located relative to the space referenced in `spacePath` and the `postion` + `rotation`.
## Methods
### `Vector<Vector<string inputHandlerUUID, Vector3 position>> getInputHandlers(string spacePath, bool excludeSelf)`
Returns a list of all [InputHandler](../types/input/InputHandler.md) UUIDs and their positions (relative to the space at `spacePath`), as well as puts aliases to those handlers in `/input/global_handler/[UUID]`. Excludes handlers from this client if `excludeSelf` is true.

View File

@@ -1,14 +0,0 @@
# /
Object managing the client/server relationship as a whole.
## Signals
### `subscribeLogicStep(string path, string method)`
Executes `method` on object at `path` on the client when the main logic loop of the server starts each frame.
`method` must have arguments of `(double delta, double timeToRender)`.
`delta` gives the time in seconds between the current time and the last time the logic loop executed while `timeToRender` gives the time in ms since epoch when the current frame is expected to reach the user's eyes (returns 0 for now).
### `disconnect(null)`
Lets the server know that the client wishes to disconnect. After this it can be assumed the client is disconnected from the server.

View File

@@ -1,10 +0,0 @@
# /spatial
Object managing spatial objects and spatial manipulation.
## Signals
### `createSpatial(string name, string spacePath, Vector3 origin, Quat orientation, Vector3 scale, bool translatable, bool rotatable, bool scalable)`
Creates a new [Spatial](../types/Spatial.md) at `/spatial/spatial/[name]` with parent at `spacePath`.
### `createZone(string name, string fieldPath, string spacePath, Vector3 origin, Quat orientation, string callbackPath, string callbackMethod)`
Creates a new [Zone](../types/Zone.md) at `/spatial/zone/[name]` with parent at `spacePath` and field at `fieldPath`. The arguments `callbackPath` and `callbackMethod` refer to a callback method accepting a `Vector` of 2 `TypedVector`s, the first being a list of names of nodes that have just entered the field and the second being names of nodes that left (as `string`).

View File

@@ -1,41 +0,0 @@
---
sidebar_position: 3
---
# Model
### Derived from [Spatial](Spatial)
A graphical model. It will only show when enabled.
## Properties
### `setVisible(bool visible)`
Enables/disables visibility.
### `setOrigin(Vector3 origin)`
Sets the origin to `origin`.
### `setOrientation(Quat orientation)`
Sets the orientation to `orientation`.
<!-- -->
<!-- ### `setPose(Vector3 origin, Quat orientation)` -->
<!-- Sets the pose using `origin` and `orientation` absolutely. -->
### `destroy()`
Destroys the model instance. Resources like the mesh and material and textures may be in memory still, but the resource manager will clean it up if needed.
### `setMaterialProperty(uint32 submeshIndex, string propertyName, float value)`
### `setMaterialProperty(uint32 submeshIndex, string propertyName, Color value)`
### `setMaterialProperty(uint32 submeshIndex, string propertyName, string value)`
Sets the material property `propertyName` on this model's submesh at `submeshIndex` to `value`. Valid material names are:
| Name | Type | Description |
|--------------|--------------|----------------------------------------------------------------------------------------------|
|`color` | `Color` | Tint/multiply the shader's output color by this amount. (default is opaque white) |
|`roughness` | `float` | Scale the metal texture's roughness by this amount |
|`metallic` | `float` | Scale the metal texture's metalness by this amount |
|`tex_scale` | `float` | Scale the UV coordinates of all textures by this amount |
|`diffuse` | `string` | Path to the diffuse texture of the material (if it has one). |
|`emission` | `string` | Path to the emission texture of the material (if it has one). |
|`metal` | `string` | Path to the metalness texture of the material (if it has one). |
|`normal` | `string` | Path to the normal map texture of the material (if it has one). |
|`occlusion` | `string` | Path to the occlusion map texture of the material (if it has one). |

View File

@@ -1,13 +0,0 @@
---
sidebar_position: 1
---
# Node
A base type for all other types that exist in 3D space.
## Methods
### `destroy()`
Destroy this node immediately, as well as all its children if it has any.
### `setEnabled(bool enabled)`
Set if this node is enabled or not, for example a disabled model will not render and a disabled input handler will not recieve input.

View File

@@ -1,56 +0,0 @@
---
sidebar_position: 2
---
# Spatial
### Derived from [Node](Node)
A base type for types that exist in 3D space, always relative to another space or the engine's world space. Spatials are always relative because in AR or XXR reference spaces change constantly in response to new environments.
## Internal Properties
Sometimes it makes sense for a Spatial to not be scalable (like in [Fields](field/Field) where scaling dramatically increases the number of steps to raymarch for pointers) or not be rotatable (point lights) or such, so these are disabled for certain Spatial-derived objects, mentioned right after "Derived from [Spatial](Spatial)".
### `translatable: bool`
If false, object's origin cannot be modified from a client.
### `rotatable: bool`
If false, object's rotation cannot be modified from a client (e.g. point lights, point sound sources).
### `scalable: bool`
If false, object's scale cannot be modified from a client (e.g. [Fields](field/Field), [PointerInput](input/inputtypes/PointerInput.md)).
### `zoneable: bool`
If false, no zones will see that this spatial exists. Useful for locking objects in space so they aren't affected by workspaces and generally shouldn't be true for anything other than the root spatial of an object.
## Signals
### `move(Vector3 position)`
Moves the Spatial relative to itself if `translatable` is not `false`.
### `rotate(Quat rotation)`
Rotates the Spatial relative to itself if `rotatable` is not `false`.
### `scale(float scale)`
Multiplies the Spatial's scale vector by `scale` if `scalable` is not `false`.
### `setOrigin(Vector3 origin)`
Sets the origin to `origin` if `translatable` is not `false`.
### `setOrientation(Quat orientation)`
Sets the orientation to `orientation` if `rotatable` is not `false`.
### `setScale(Vector3 scale)`
Sets the scale to `scale` if `scalable` is not `false`.
### `setPose(Vector3 origin, Quat orientation)`
Sets the pose relative to the Spatial's space if `translatable` and `rotatable` are true. This method saves on IPC calls compared to `setOrigin` and `setOrientation` in sequence.
### `setTransform(Vector3 origin, Quat orientation)`
Sets the transform relative to the Spatial's space if `translatable`, `rotatable` and `scalable` are true. This method saves on IPC calls compared to `setOrigin`, `setOrientation`, and `setScale` in sequence.
### `setSpatialParent(string parentPath)`
Sets the spatial parent of this `Spatial` while keeping the object in the same place in local space.
### `setSpatialParentInPlace(string parentPath)`
Sets the spatial parent of this `Spatial` while not changing the object's absolute position.
### `setZoneable(bool zoneable)`
Enable/disable this spatial's zoneable property.
## Methods
### `Vector<Vector3 origin, Quat orientation, Vector3 scale> getTransform(null)`
Returns the `origin`, `orientation`, and `scale` of this spatial relative to its parent.

View File

@@ -1,18 +0,0 @@
---
sidebar_position: 9
---
# Zone
### Derived from [Spatial](Spatial)
An object to manipulate compatible [Spatials](Spatial) inside its field, such as organizing/aligning widgets or creating workspaces, acting as an inertial reference frame or part of a multi-selection wand.
## Signals
### `bool isCaptured(string spatialUUID)`
Returns `true`/`false` if the [Spatial](Spatial) is captured by this zone or another, `null` if the [Spatial](Spatial) at `spatialUUID` is not accessible by this zone or does not exist.
### `capture(string spatialUUID)`
Captures the [Spatial](Spatial) at `spatialUUID` if that [Spatial](Spatial) exists and is accessible by this zone. This means that the [Spatial](Spatial) cannot be seen or affected by other zones unless a zone is closer to the [Spatial](Spatial) than this zone.
### `release(string spatialUUID)`
Uncaptures the [Spatial](Spatial) at `spatialUUID` so any zone the [Spatial](Spatial) is inside can access it.

View File

@@ -1,4 +0,0 @@
{
"label": "Node Types",
"position": 1
}

View File

@@ -1,7 +0,0 @@
# BoxField
### Derived from [Field](Field)
This field is in a rectangular prism shape.
## Properties
### `setSize(Vector3 size)`
Sets the size of the box.

View File

@@ -1,7 +0,0 @@
# CylinderField
### Derived from [Field](Field)
A cylinder shaped field defined by radius and length, along the forward vector.
## Properties
### `setSize(Vector3 size)`
Sets the size of the box.

View File

@@ -1,13 +0,0 @@
# Field
### Derived from [Spatial](../Spatial)
Type that contains methods all Fields share. All fields created are under `/field`. See [/field](../../objects/field.md) for the field factory.
## Methods
### `double distance(string spacePath, Vector3 point)`
Returns the distance from `point` to the surface of the object, positive if the point is outside and negative if inside. When `point` is far enough away the object will give an approximate distance to the origin instead of the surface.
### `Vector3 normal(string spacePath, Vector3 point)`
Returns the normal of `point` compared to the surface of the object. Normal always points toward object.
### `Vector3 closestPoint(string spacePath, Vector3 point)`
Returns the closest point from `point` to the surface of the object. Use this instead of `distance` and `normal` when best to limit IPC calls.

View File

@@ -1,7 +0,0 @@
# SphereField
### Derived from [Field](Field)
This Field is in a sphere shape.
## Properties
### `setRadius(double size)`
Sets the radius of the sphere.

View File

@@ -1,4 +0,0 @@
{
"label": "Fields",
"position": 4
}

View File

@@ -1,26 +0,0 @@
---
sidebar_position: 1
---
# InputHandler
## Derived from [Spatial](../Spatial) (`scalable: false`)
A handler to allow clients to recieve input. Won't send input through the callback if disabled.
## Methods
### `setField(string field)`
Sets the field this input handler will use.
### `setCallback(string callbackPath, string callbackMethod)`
Sets the callback this input handler will use.
### `setActions(Vector<String> actions)`
Specify all compatible action names (human-readable).
### `Vector<String> getActions(null)`
Get a list of all action names (human-readable).
### `setActions(Vector<String> actions)`
Set all the objects on this input handler to `actions`.
### `runAction(String actionName)`
Runs the action specififed by `actionName`.

View File

@@ -1,51 +0,0 @@
---
sidebar_position: 2
---
# InputMethod
## Derived from [Spatial](../Spatial.md) (`scalable: false`)
Represents an input device generically, with specifics being fleshed out in subclasses.
## Internal Properties
### `type: uint8`
| | Name | Description |
|---|--------------|-------------------------------------------------------------------------------------------------------------|
| 0 | `Global` | A non-spatial input, used for power buttons and system volume and such |
| 1 | `Controller` | Contains a pose and datamap for buttons, trackpad, joystick, grip, trigger, etc. |
| 2 | [`PointerInput`](inputtypes/PointerInput.md) | Defined by origin, direction, and tilt with datamap for buttons, trackpad, etc. |
| 3 | [`HandInput`](inputtypes/HandInput.md) | Contains a full 27-bone hand skeleton (including forearm) and datamap for abstractions like grip, pinch distance/point, etc. |
### `datamap: Dictionary`
See [Datamap:](#datamap)
## Internal Methods
### `distanceToField(string field)`
Returns the distance from this input to a field in meters. `field` is the name of the field, not the full path.
### `serialize()`
Returns a serialized version of the InputMethod, each serialized schema is shown under #Serialization in the respective Input subclasses.
## Serialization
| Key | Value Type |
|-----------|-------------|
| type | `int` |
| distance | `float` |
## Datamap
The datamap is a dictionary containing abstracted and raw data related to the input that clients can use to analyze input in the most optimal way. It has keys of type `Key`(Flexbuffers-specific, in any other language use a `String`) and values:
| Type | Example Uses | Usage Notes |
|-----------|----------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------|
| `bool` | Digital buttons | If values are analog, use a `float` instead with `1.0` being considered `true`. |
| `float` | Analog trigger, grip | For values such as grip/trigger, make the range `0.0`-`1.0`, for something like a scroll wheel `-0.5`-`0.5`. |
| `Vector2` | Touchpad, joystick | For values such as trackpad and joystick, make each component in the range of `-0.5`-`0.5` and calculate+apply deadzone before setting these values. |
| `Vector3` | Pinch position, grip axis vector | For points and directions, make this a value inside the InputMethod's local space. Raw hand pose data should not be put in the datamap. |
| `string` | Input device type/name | Device name such as `"valveindex"` and device type such as `"controller"` on a PointerInput. Useful for client devs to customize input to work best with these devices. |
Standard supported datamap keys will be put in the individual type's documentation, however you can put more data in and some input handlers may be able to use that data for better interactions.
## Methods
<!-- ### `setPosition(Vector3 point)` -->
<!-- Sets the position of this [InputMethod](../input/InputMethod). This pose also defines the main interaction point. -->
### `modifyDatamap(Dictionary data)`
Merges the datamap of this [InputMethod](InputMethod) with `data`. Each key here will add to the datamap if not present and set the existing value if present. Any key not present in `data` will be unaffected.

View File

@@ -1,4 +0,0 @@
{
"label": "Input",
"position": 5
}

View File

@@ -1,57 +0,0 @@
# HandInput
### Derived from [InputMethod](../InputMethod)
A full 27-bone hand+forearm input with useful abstractions provided through the datamap.
The local space of a hand is where +Z is away from the palm, +Y is from the palm to the fingers, and +X is orthogonal and to the right.
## Serialization
| Key | Value Type |
|-----------|--------------|
| origin | `Vector3` |
| direction | `Vector3` |
| tilt | `float` |
| datamap | `Dictionary` |
```js
[
thumb metacarpal,
thumb proximal,
thumb distal,
thumb tip,
index metacarpal,
index proximal,
index intermediate,
index distal,
index tip,
middle metacarpal,
middle proximal,
middle intermediate,
middle distal,
middle tip,
ring metacarpal,
ring proximal,
ring intermediate,
ring distal,
ring tip,
little metacarpal,
little proximal,
little intermediate,
little distal,
little tip
]
```
(This section is WIP)
## Datamap
### Required
| Key | Value Type | Description |
|-----------------|-----------------------------|--------------------------------------------------------------------|
| confidence | `float` (range `0.0`-`1.0`) | How confident the hand tracker is of the pose of the hand |
| isLeft | `bool` | `true` if this hand is the left hand, `false` if not |
| pinchStrength | `float` (range `0.0`-`1.0`) | How much the hand is pinching |
| pinchDistance | `float` (>`0.0`) | The distance in meters between the thumb and index finger |
| grabStrength | `float` (range `0.0`-`1.0`) | How much the hand is making a fist |
## Methods
**TODO**: Properly secured field distance calculation accessible to clients

View File

@@ -1,37 +0,0 @@
# PointerInput
### Derived from [InputMethod](../InputMethod)
An input method for pointers, such as the Daydream's remote, a pointer put on an Index controller, Oculus style laser mouse, and your desktop's mouse in flatscreen.
The local space for a pointer is where +Z is along the pointer's direction, +X is to the right of the pointer when laying face up, and +Y is upward when laying face up.
## Serialization
| Key | Value Type |
|-----------|--------------|
| origin | `Vector3` |
| direction | `Vector3` |
| tilt | `float` |
| datamap | `Dictionary` |
## Datamap
### Required
| Key | Value Type | Description |
|--------|-------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| select | `float` (range `0.0`-`1.0`) | Whether the pointer is attempting to select an object, usually through trigger. 1.0 is selected, 0.0 is not selected, and inbetween is to add smoothness to the interaction. |
| grab | `float` (range `0.0`-`1.0`) | How much the pointer is attempting to grab an object. 0.0 is not grabbing at all, 1.0 is grabbing the strongest, and inbetween is to add smoothness. |
| scroll | `Vector2` (component range `-0.5`-`0.5`) | The amount to scroll on this input tick (sensitivity determined on the receiving client). Can be used for 2D scrolling as well as adjusting depth/size when grabbing an object. |
### Built in
| Key | Value Type | Description |
|--------|--------------|-----------------------------------------------------------|
| deepestPointDistance | `float` (>=`0.0`) | The distance along the ray where the deepest surface point resides. |
| type | `string` | The type of pointer. Can be one of `"eyes"`, `"mouse"`, `"controller"`, `"gaze"`, `"generic"` |
## Methods
### `setDirection(Vector3 direction)`
Sets the direction the pointer is pointing in stage space.
### `setTilt(float angle)`
Sets the tilt of the pointer (rotation about the pointer direction) clockwise in radians.
### `setOrientation(Vector3 direction, float angle)`
Sets the direction and tilt of the pointer to save on IPC calls.
### `setPose(Vector3 origin, Vector3 direction, float angle)`
Sets the origin, direction, and tilt of the pointer to save on IPC calls.

View File

@@ -1,4 +0,0 @@
{
"label": "Input Method Types",
"position": 3
}

View File

@@ -1,4 +0,0 @@
{
"label": "Item",
"position": 6
}

View File

@@ -0,0 +1,21 @@
---
sidebar_position: 1
---
# What is Stardust XR?
<div style={{textAlign: 'center'}}>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/v2WblwbaLaA"
frameBorder={0}
allow="autoplay; encrypted-media"
allowFullScreen
style={{maxWidth: '100%', aspectRatio: '16/9'}}
></iframe>
</div>
Stardust XR is a [display server](https://itsfoss.com/display-server/) for VR and AR headsets on Linux-based systems. Stardust provides a 3D environment, where anything from 2D windows (including your existing apps!), to 3D apps built from objects, can exist together in physical space.
If you'd like to try Stardust XR on your existing device (including without a headset!) head to the [Full Installation](manual) guide. If you'd like to use a VR headset, check out [Set up OpenXR Runtime](setup-openxr). If you already have your headset set up, head to the [Full Stardust Installation](manual) page. If you've a beginner, and have a Meta Quest device, we've created a [full walkthrough to get you started playing with Stardust](quest-3-setup)!
Stardust XR is actively looking for help with development to expand the project. You can also [become a sponsor](https://github.com/sponsors/technobaboo).

View File

@@ -0,0 +1,111 @@
---
sidebar_position: 3
---
# Setup OpenXR Runtime
This guide will help you set up your VR or AR headset for use with Stardust. Although support for many headsets on Linux is still under active development, there are a number of good options available. If you already have OpenXR set up on your Linux distribution, head to the [Full Installation](manual) page to get Stardust XR installed.
:::info
If you want to try Stardust in a window on your existing device you can skip this step and checkout the [Full installation](manual) guide.
:::
# Envision
:::note
![Envision](/img/docs/Envision_Monado.png)
We highly recommend using [Envision](https://lvra.gitlab.io/docs/fossvr/envision/), an easy to use GUI for utilizing [Monado](https://monado.dev/) which is what you likely use if you have a wired headset. Envision also comes with [WiVRn](https://github.com/WiVRn/WiVRn) support for connecting to headsets like the Meta Quest wirelessly.
:::
Check the [hardware table](https://lvra.gitlab.io/docs/hardware/) (for Monado/WiVRn support) to ensure your hardware and headset are compatible. If you're using an Nvidia card, you'll need to install [proprietary drivers](https://rpmfusion.org/Howto/NVIDIA). If you're using a modern Nvidia card on Fedora (with RPMFusion) or Ultramarine, this command will install the driver:
```
sudo dnf install akmod-nvidia
sudo akmods
# Wait for this to finish before rebooting, this may take up to 15 minutes
```
AMD graphic cards do not require additional drivers.
<h3>
<img
src="/img/docs/Fedora_logo.svg"
alt="Fedora Logo"
style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }}
/>
<img
src="/img/docs/ultramarine-logo.svg"
alt="Ultramarine Logo"
style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }}
/>
Fedora and Derivatives
</h3>
:::info
envision is packaged in the [Terra repository](https://terra.fyralabs.com/). If you are using [Ultramarine Linux](https://ultramarine-linux.org), [Bazzite](https://bazzite.gg), or [Aurora](https://getaurora.dev), this repository comes pre-installed, otherwise you will need to add the repository:
Standard Fedora Editions and derivatives can directly install terra-release:
```
sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
```
If you are using [RHEL10](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux-10) or derrivative you will need to first the EPEL repos, which may be installed with:
```
sudo dnf install 'https://dl.fedoraproject.org/pub/epel/epel-release-latest-$releasever.noarch.rpm'
```
Then install terra-release:
```
sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terrael$releasever' terra-release
```
If you are using a [Fedora Atomic Edition](https://fedoraproject.org/atomic-desktops/) or derrivative you will need to run the following command:
```
curl -fsSL https://github.com/terrapkg/subatomic-repos/raw/main/terra.repo | pkexec tee /etc/yum.repos.d/terra.repo
sudo rpm-ostree install terra-release
```
:::
Then, run this command to install envision:
```
sudo dnf group install envision
```
If using a Fedora Atomic/Universal Blue based image, run the following command to install envision:
```
sudo rpm-ostree install envision
```
<h3>
<img src="/img/docs/arch.png" alt="Logo" style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }} />
Arch Linux
</h3>
For Arch Linux, Envision is available via the [AUR](https://aur.archlinux.org/packages/envision-xr-git). We suggest using an AUR helper, like Paru:
```
paru -S envision-xr-git
```
<h3>
<img src="/img/docs/nixos.svg" alt="Logo" style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }} />
NixOS
</h3>
On NixOS, it's generally easiest to follow the instructions at https://lvra.gitlab.io/docs/distros/nixos/ as Envision is currently unstable on NixOS and troubleshooting SteamVR can be tricky.
### Other options for installation
You can also download the [Envision AppImage](https://gitlab.com/gabmus/envision/-/pipelines?ref=main&status=success). Once downloaded, unzip the archive, you should find a file named Envision-x86_64.AppImage. You can do this from the properties menu in your file manager, or run `chmod +x Envision-x86_64.AppImage` in your terminal.
Then double click the file to run it.
![Envision App Image](/img/docs/envisionappimage.png)
When you launch Envision, you will have to build a profile for your headset, check the [Envision website](https://lvra.gitlab.io/docs/fossvr/envision/) for instructions specific to what you have. You can take a look at [this section](https://youtu.be/Rgj9-9UwA2g?si=Rt23rZf01fzQt3RB&t=280) of our Meta Quest setup video for an example using WiVRn.
![Envision Build Profile](/img/docs/envisionbuildprofile.png)
Once you have one of these options installed, a quick way to test on the headset is by running `xrgears`. [xrgears](https://gitlab.freedesktop.org/monado/demos/xrgears) is a demo that comes with Monado.
:::tip
If you run into any problems during installation, the [Meta Quest Walkthrough](quest-3-setup) may contain information helpful in regards to dependencies, firewalls and drivers.
:::
# ALVR
Another option is ALVR, you can check the GitHub repository for more information [https://github.com/alvr-org/ALVR](https://github.com/alvr-org/ALVR)
# SteamVR
If you'd like to use SteamVR, head over to [https://lvra.gitlab.io/docs/steamvr/](https://lvra.gitlab.io/docs/steamvr/), although it is not the recommended way to use VR within Linux due to poor support.

View File

@@ -0,0 +1,127 @@
---
sidebar_position: 4
---
# Full Installation
This guide covers installing Stardust XR packages on various distributions, and building from source.
<h3>
<img
src="/img/docs/Fedora_logo.svg"
alt="Fedora Logo"
style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }}
/>
<img
src="/img/docs/ultramarine-logo.svg"
alt="Ultramarine Logo"
style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }}
/>
Fedora and Derivatives
</h3>
If you already added Terra when setting up the Open XR runtime, you can skip to the install commands below.
:::info
Stardust XR is packaged in the [Terra repository](https://terra.fyralabs.com/). If you are using [Ultramarine Linux](https://ultramarine-linux.org), [Bazzite](https://bazzite.gg), or [Aurora](https://getaurora.dev), this repository comes pre-installed, otherwise you will need to add the repository:
Standard Fedora Editions and derivatives can directly install terra-release:
```
sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terra$releasever' terra-release
```
If you are using [RHEL10](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux-10) or derrivative you will need to first the EPEL repos, which may be installed with:
```
sudo dnf install 'https://dl.fedoraproject.org/pub/epel/epel-release-latest-$releasever.noarch.rpm'
```
Then install terra-release:
```
sudo dnf install --nogpgcheck --repofrompath 'terra,https://repos.fyralabs.com/terrael$releasever' terra-release
```
If you are using a [Fedora Atomic Edition](https://fedoraproject.org/atomic-desktops/) or derrivative you will need to run the following command:
```
curl -fsSL https://github.com/terrapkg/subatomic-repos/raw/main/terra.repo | pkexec tee /etc/yum.repos.d/terra.repo
sudo rpm-ostree install terra-release
```
:::
Then, run this command to install all Stardust XR packages:
```
sudo dnf group install stardust-xr
```
If using a Fedora Atomic/Universal Blue based image, run the following command to install all Stardust XR packages:
```
sudo rpm-ostree install stardust-xr-armillary stardust-xr-atmosphere stardust-xr-black-hole stardust-xr-comet stardust-xr-flatland stardust-xr-gravity stardust-xr-magnetar stardust-xr-non-spatial-input stardust-xr-protostar stardust-xr-server stardust-xr-telescope
```
<h3>
<img src="/img/docs/arch.png" alt="Logo" style={{ verticalAlign: 'middle', height: '1em', marginRight: '0.5em' }} />
Arch Linux
</h3>
```
paru -s stardust-xr-armillary stardust-xr-atmosphere stardust-xr-black-hole stardust-xr-comet stardust-xr-flatland stardust-xr-gravity stardust-xr-magnetar stardust-xr-non-spatial-input stardust-xr-protostar stardust-xr-server stardust-xr-telescope
```
On NixOS, use the [Nix package manager](https://nixos.org/download/#nix-install-linux). Make sure [flakes are enabled](https://nixos.wiki/wiki/flakes).
```
nix run github:StardustXR/telescope
```
From there, you can launch Stardust with `telescope`, then in another terminal window or tab, run any other clients you need. We recommend `flatland` and `hexagon-launcher`.
# Manual Build
:::caution
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
:::
### Server
Clone the [Stardust XR Server](https://github.com/StardustXR/server) `https://github.com/StardustXR/server`
Make sure to check the list of prerequisites. Run `cargo build` and `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 `startup` file inside the folder `~/.config/stardust/` to automate the loading in of clients, an example of which is shown [here](https://youtu.be/c6RyEYDz2iw?si=pL1zffNVsWocZHrc&t=788), and an example of is linked [here](https://github.com/cyberneticmelon/usefulscripts/blob/main/startup)
### Clients
After the server is running, you'll need to run some clients. Clone any of these, `cargo build` & then `cargo run` after the server is already running, and they will load into the Stardust server!
Non-exhaustive list of clients:
- [**armillary**](https://github.com/StardustXR/Armillary): `https://github.com/StardustXR/Armillary`
A 3D model viewer for Stardust XR; rotate, move, and display models in your XR space
- [**atmosphere**](https://github.com/StardustXR/atmosphere): `https://github.com/StardustXR/atmosphere`
3D environment with natural momentum-based movement
- [**black hole**](https://github.com/StardustXR/black-hole): `https://github.com/StardustXR/black-hole`
Universal minimization of Stardust objects
- [**comet**](https://github.com/StardustXR/comet): `https://github.com/StardustXR/comet`
Write in 3D wherever you want amongst your other apps!
- [**flatland**](https://github.com/StardustXR/flatland): `https://github.com/StardustXR/flatland`
3D panel UI (like window manager) for interacting with all your 2D apps
- [**gravity**](https://github.com/StardustXR/gravity): `https://github.com/StardustXR/gravity`
Launch programs with a certain offset in 3D space
- [**magnetar**](https://github.com/StardustXR/magnetar): `https://github.com/StardustXR/magnetar`
Example workspaces client
- [**non-spatial-input**](https://github.com/StardustXR/non-spatial-input): `https://github.com/StardustXR/non-spatial-input`
Provides utilities to port keyboard, mouse, and other input methods like libinput into Stardust XR
- [**protostar**](https://github.com/StardustXR/protostar): `https://github.com/StardustXR/protostar`
App launcher library and examples including futuristic Hexagon Launcher
### Installation Script
If you have all the correct dependencies, we've created a [script](https://github.com/cyberneticmelon/usefulscripts/blob/main/stardustxr_setup.sh) that will automatically `git clone` all of the necessary repositories, `cargo build` all of them, and give them a symlinks for running the server and clients from the command line. It also creates a [config](https://github.com/cyberneticmelon/usefulscripts/blob/main/startup) file that will by default install the default `atmosphere` background. Run the script with flag `-nobg` if you don't want that.
# After Installation
You can either use `Telescope` to launch the Stardust XR server and a small selection of clients (`telescope` in your terminal, or `telescope -f` for flatscreen mode), or you can run the server directly, 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 above), as they are all considered separate items but can run concurrently inside Stardust.
You will see a floating hexagon with the Stardust XR logo in the center, this is Hexagon Launcher.
To move around, hold down ***Shift*** and ***W A S D***, with ***Q*** for moving down and ***E*** for moving up.
![WASD Q E Look around](/img/updated_flat_wasd.GIF)
To look around, hold down ***Shift*** and ***Right Click*** while moving the mouse.
![Look around](/img/updated_flat_look.GIF)
If you click on the hexagon, the launcher will open. Try dragging one of the apps with `Shift + ~`. The small minus sign is Black Hole, if you click it, it will grab any open window and store it away. Click it again and they will return to their original location.
![Flat drag](/img/updated_flat_drag.GIF)
If you are already using OpenXR within Linux, running `telescope` while OpenXR is running should launch Stardust on your headset. If not, check further instructions for setting up OpenXR.

View File

@@ -0,0 +1,72 @@
---
sidebar_position: 5
---
# Meta Quest Walkthrough
Do you have a Meta Quest and would like to try Stardust for yourself? Even if you don't have any experience with Linux, this full guide will get you started with Stardust! It is recommended that you install a version of Linux called [Ultramarine](https://ultramarine-linux.org/download/). We suggest Plasma Edition due to VRR and HDR support. Once you have it installed, you will mainly be using the terminal to install what you need. Linked below is a YouTube walkthrough:
<div style={{textAlign: 'center'}}>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/Rgj9-9UwA2g"
frameBorder={0}
allow="autoplay; encrypted-media"
allowFullScreen
style={{maxWidth: '100%', aspectRatio: '16/9'}}
></iframe>
</div>
The setup video is done with a Meta Quest 3, and with [Ultramarine](https://ultramarine-linux.org/download/), a Fedora based distribution. Ultramarine comes with the Terra repository pre-installed. You can follow [these instructions](https://wiki.ultramarine-linux.org/en/setup/getting/) to install a version of Ultramarine.
# Nvidia & AMD
AMD Graphics cards do not require additional drivers, but Nvidia graphics cards will need to install drivers [provided by RPMFusion](https://rpmfusion.org/Howto/NVIDIA), which can be installed with:
```
sudo dnf install akmod-nvidia
```
# Envision
The next step is to install [Envision](https://lvra.gitlab.io/docs/fossvr/envision/). Envision is a GUI that makes it easier to connect and run the Quest 3 (among other headsets) with [Monado](https://monado.dev/), an open source OpenXR implementation, and [WiVRn](https://github.com/WiVRn/WiVRn), a wireless streaming implementation that also works with the Quest 3. Envision comes pre-packaged with WiVRn. For install instructions, check out the [Setup Open XR Runtime](setup-openxr) guide.
# Vulkan Layers
If you have an Nvidia graphics card, it is possible that you will need to install [Vulkan Layers](https://gitlab.freedesktop.org/monado/utilities/vulkan-layers) for Monado, although this may not be necessary depending on the driver version:
```
sudo dnf install monado-vulkan-layers
```
Next, Launch Envision, and in the drop down menu on the bottom, select the **WiVRn profile** and click **Build Profile**. It'll give you a list of dependencies to install, so copy the command and run it. After they are installed, there's one extra dependency to add manually.
```
sudo dnf install libnotify-devel
```
:::note
Note that [Developer Mode](https://developers.meta.com/horizon/documentation/native/android/mobile-device-setup/) must be enabled on your Quest 3. The most streamlined way to do this is through the Meta Horizons app on [Android](https://play.google.com/store/apps/details?id=com.oculus.twilight&hl=en_US) or [iPhone](https://apps.apple.com/us/app/meta-horizon/id1366478176)
:::
# Installing WiVRn
Once that is complete, you're ready to click Build Profile within Envision. Once it's done building, you're ready to install WiVRn on the headset. Connect your headset to your computer via the Quest 3 Link cable or another compatable USB-C cable. Now that Developer Mode is enabled, you should see "Allow USB debugging", click *allow* within the headset.
With debugging enabled and the headset connected, click **Install WiVRn** within Envision to install the android apk onto the headset.
# Firewalls
Once it's installed, you'll need avahi-daemon running:
```
systemctl enable --now avahi-daemon
```
And it's possible that your firewall could prevent connection, so use the following commands to open up the ports required and reload the firewall:
```
sudo firewall-cmd --zone=public --add-port=5353/udp --permanent
sudo firewall-cmd --zone=public --add-port=9757/udp --permanent
sudo firewall-cmd --zone=public --add-port=9757/tcp --permanent
sudo firewall-cmd --reload
```
# Stardust XR
Now that we've set up the Quest 3 to be able to connect to your linux distribution via Envision/WiVRn, we can install Stardust XR! Check the [Full Installation](manual) guide on how to install Stardust XR.
Once installed, you'll have to launch WiVRN within the headset. On the bottom right of the Quest 3 menu, go to Library > Unknown Sources, and you'll see the WiVRn app. Once you're loaded up, click the Start button at the top of Envision on your computer, and you'll be greeted with a PIN for firs time setup. Back in the Quest 3, tap Connect, and enter the PIN, and you should see "Connection ready, Start a VR application on Ultramarine"
For the quickest way to test Stardust XR, run the telescope command:
```
telescope
```
Which will launch Stardust XR along with the Hexagon App Launcher and some pre-loaded applications!

View File

@@ -0,0 +1,4 @@
{
"label": "Get Started",
"position": 1
}

View File

@@ -0,0 +1,26 @@
---
sidebar_position: 1
---
# Flatscreen Navigation
<div style={{textAlign: 'center'}}>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/JCYecSlKlDI"
frameBorder={0}
allow="autoplay; encrypted-media"
allowFullScreen
style={{maxWidth: '100%', aspectRatio: '16/9'}}
></iframe>
</div>
To move around, hold down `Shift + W A S D`, with `Q` for moving down and `E` for moving up.
![wasd](/img/updated_flat_wasd.GIF)
To look around, hold down `Shift + Right` Click while moving the mouse.
![updated_look](/img/updated_flat_look.GIF)
To drag applications out of the app launcher, hold down `Shift + ~`
![updated_drag](/img/updated_flat_drag.GIF)

View File

@@ -0,0 +1,27 @@
---
sidebar_position: 1
---
# XR Navigation
<div style={{textAlign: 'center'}}>
<iframe
width="560"
height="315"
src="https://www.youtube.com/embed/JCYecSlKlDI"
frameBorder={0}
allow="autoplay; encrypted-media"
allowFullScreen
style={{maxWidth: '100%', aspectRatio: '16/9'}}
></iframe>
</div>
**Quest 3 Hand tracking**:
Pinch to drag and drop, grasp with full hand for grabbing,
point and click with pointer finger to click or pinch from a distance
![hand_pinching](/img/hand_pinching.GIF)
**Quest 3 Controller**:
Grab with the grip buttons, click by touching the tip of the cones or by using the trigger from a distance
![controller_click](/img/controller_click.GIF)

View File

@@ -0,0 +1,4 @@
{
"label": "User Guide",
"position": 2
}

View File

@@ -0,0 +1,100 @@
---
sidebar_position: 1
---
# Brief Overview
Stardust XR is an XR [display server](https://itsfoss.com/display-server) designed for Linux-based systems<!-- (possibly most unix-based too, but untested)-->.<br/>
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
```mermaid
graph LR
OpenXR
OpenXR -->|Frame Data| StereoKit
OpenXR -->|Input Data| StereoKit
subgraph Server[Stardust Server]
StereoKit[StereoKit]
InternalSceneGraph[Internal Scenegraph]
WC1[Wayland Client 1]
DBusConnection[D-Bus Connection]
ClientSceneGraph -->|Drawable Objects| StereoKit
StereoKit -->|Controller, Hand & HMD Data| InternalSceneGraph
InternalSceneGraph -->|Panel Items| ClientSceneGraph
InternalSceneGraph -->|Controller, Hand & HMD Export| DBusConnection
WC1 -->|Panel Item| InternalSceneGraph
WC1 -->|Textures| StereoKit
StereoKit -->|EGL Context| WC1
ClientSceneGraph --> C1
subgraph C1[Stardust Client 1]
ClientSceneGraph[Client Scenegraph]
end
end
StardustSocket[Stardust Socket]
SessionBus[D-Bus Session Bus]
WaylandSocket[Wayland Socket]
WC1 --> WaylandSocket
WaylandSocket --> WC1
DBusConnection --> SessionBus
C1 --> StardustSocket
subgraph StardustClient[Stardust Client 1]
Fusion
Molecules
UserCode[User Code]
Fusion --> Molecules
Fusion --> UserCode
Molecules --> UserCode
subgraph Fusion
libstardustxr[stardust-xr library]
end
end
StardustSocket --> libstardustxr
SessionBus -->|HMD Spatial Reference| Fusion
WaylandClient[Wayland Client]
WaylandSocket --> WaylandClient
WaylandClient --> WaylandSocket
```
## Projects & Components
- [**armillary**](https://github.com/StardustXR/Armillary): A 3D model viewer for Stardust XR; rotate, move, and display models in your XR space
- [**atmosphere**](https://github.com/StardustXR/atmosphere): 3D environment with natural momentum-based movement
- [**black hole**](https://github.com/StardustXR/black-hole): Universal minimization of Stardust objects
- [**comet**](https://github.com/StardustXR/comet): Annotate in 3D wherever you want amongst your other apps!
- [**core lib**](https://github.com/StardustXR/core): Rust crates and schemas for connecting stardust server and client
- [**flatland**](https://github.com/StardustXR/flatland): Allows Starust XR to run 2D linux applications
- [**gravity**](https://github.com/StardustXR/gravity): Launch programs with a certain offset in 3D space
- [**magnetar**](https://github.com/StardustXR/magnetar): Example workspaces client
- [**non-spatial-input**](https://github.com/StardustXR/non-spatial-input): Provides utilities to port keyboard, mouse, and other input methods like libinput into Stardust XR
- [**protostar**](https://github.com/StardustXR/protostar): App launcher library and examples including futuristic hexagon launcher
- [**server**](https://github.com/StardustXR/server): Reference implementation of the StardustXR server (similar to Xorg)
- [**telescope**](https://github.com/StardustXR/telescope): Stable stardust setup for quick and easy usage
- [**website**](https://github.com/StardustXR/website): The location where documentation is done and the website is generated from

View File

@@ -36,4 +36,4 @@ The Stardust XR IPC uses Unix domain sockets for communication and a protocol ba
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.
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.

View File

@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 3
---
# Making Clients
@@ -26,4 +26,4 @@ and include the `stardust-xr-fusion` dependency in your `cargo.toml`. Documentat
## Molecules
`stardust-xr-molecules` is an even higher level widget library built on Fusion similar to [MRTK](https://github.com/microsoft/MixedRealityToolkit-Unity) to get your clients up and running faster. Documentation will be available at https://docs.rs/crate/stardust-xr-molecules/latest.
`stardust-xr-molecules` is an even higher level widget library built on Fusion similar to [MRTK](https://github.com/microsoft/MixedRealityToolkit-Unity) to get your clients up and running faster. Documentation will be available at https://docs.rs/crate/stardust-xr-molecules/latest.

View File

@@ -0,0 +1,5 @@
# Glossary
- **Item**: a virtual object that represents data
- **Panel Shells**: 3D UIs around 2D apps
- ...

View File

@@ -0,0 +1,4 @@
{
"label": "Dive deeper",
"position": 3
}

15
docs/docs.js Normal file
View File

@@ -0,0 +1,15 @@
async function loadDoc() {
const hash = decodeURIComponent(location.hash.slice(1)) || '01-get-started/01-What-is-Stardust';
const file = hash + '.md';
const res = await fetch(file);
const container = document.getElementById('content');
if (!res.ok) {
container.textContent = 'Document not found.';
return;
}
let text = await res.text();
text = text.replace(/^---[\s\S]*?---\n/, '');
container.innerHTML = marked.parse(text);
}
window.addEventListener('hashchange', loadDoc);
window.addEventListener('load', loadDoc);

View File

@@ -1,4 +0,0 @@
{
"label": "Getting Started",
"position": 1
}

View File

@@ -1,55 +0,0 @@
---
sidebar_position: 3
---
# Installation
As Stardust is a display server, it is split into multiple parts. Don't be afraid to ask questions in the [Matrix](https://matrix.to/#/#stardustxr:matrix.org) or [Discord](https://discord.gg/A9w7fKE) servers!
## [stardust-xr](https://github.com/StardustXR/stardust-xr-server) (reference server)
<!-- ### Packages -->
<!-- AUR: `stardust-xr-git` -->
### Build system
1. Cargo
### Build dependencies
1. Flatbuffers >= 2.0.8
2. EGL+GLES 3.2
3. GLX+Xlib
4. fontconfig
5. dlopen
6. libseat (such as [seatd](https://sr.ht/~kennylevinsen/seatd/))
7. wayland
8. OpenXR Loader (required even if run in flatscreen mode, generally just named `openxr`)
### Download
```bash
git clone https://github.com/StardustXR/stardust-xr-server.git
cd stardust-xr-server
```
### Build
```bash
cargo build
```
### Install
(this step isn't required. Using `cargo run` while developing is just fine)
```bash
cargo install --path .
```
## [Flatland](https://github.com/StardustXR/flatland) (Simple simula-like panel UI client for 2D app interaction)
### Build system
1. Cargo
### Build dependencies
1. Flatbuffers >= 2.0.8
### Install
```bash
cargo install flatland
```

View File

@@ -1,12 +0,0 @@
---
sidebar_position: 1
---
# Overview
## Description
Stardust XR (informally known as Stardust) is an XR display server for Linux-based distros (possibly most unix-based too, but untested). Unlike display servers of the past that were run on bounded 2D screens, Stardust has to break convention in order to account for unbounded 3D space in any potential virtual or real environment.
Unlike many display servers, Stardust is not trying to reinvent how applications interface with the system. Stardust uses Wayland and will use OpenXR for 2D/XR app integration. Stardust however has a special protocol for creation of virtual objects such as 3D UIs around 2D apps (called Panel Shells) and handling of data as objects (called Items, can represent files or Wayland surfaces or such). Stardust is not a collaborative 3D space, instead focusing on your own personal device and interactions with it.
Put simply, Stardust is a system UI framework where multiple different clients (programs that connect to Stardust directly) can create objects for the user to interact with their apps and device. The user can choose to use the objects that work best for their current scenario, and default setups can easily be created so users start out with all the essentials.

View File

@@ -1,54 +0,0 @@
---
sidebar_position: 4
---
# Starting
First, try running `cargo run` in a terminal window. If a headset is plugged in and OpenXR is working no window will show up. However, the headset should show the same things as the window that opens:
![A pitch black void with a single bleach white hand in the middle](/img/docs/run/xr_mode_windowed_blank.png)
### Images
Flatscreen mode upon initial startup:
![A pitch black window representing Stardust in flatscreen mode](/img/docs/run/flatscreen_1.png)
XR mode when OpenXR somehow fails:
![A black void representing Stardust in XR mode with a hand skeleton in the middle](/img/docs/run/flatscreen_2.png)
Flatscreen mode when `~/.config/stardust/skytex.hdr` is [Zhengyang Gate](https://polyhaven.com/a/zhengyang_gate):
![A pitch black window representing Stardust in flatscreen mode](/img/docs/run/flatscreen_3.png)
### Startup Scripts
`stardust-xr-server` is a Wayland server which clients can connect to.
The easiest way to get Wayland applications to connect is to run a script with your initial environment.
This can be specified using the `-e or --execute-startup-script <PATH>` CLI argument, or can be placed in `$HOME/.config/stardust/startup`.
(assuming you have cloned and installed [flatland](https://github.com/StardustXR/flatland))
This example will spawn the flatland client which will help arrange 2D windows, and spawn a KDE konsole which will attach to the wayland display set up by stardust. You will then be able to drag the konsole around with your mouse. If you have a keyboard you can move your camera around with `Shift+WASD`. If you don't have a 6DoF controller connected you can also use your mouse to move a hand around and the scroll wheel to move it towards and away from your screen.
```
#!/bin/sh
echo $DISPLAY;
echo $WAYLAND_DISPLAY;
flatland &
konsole &
```
### Help screen
```
stardust-xr-server 0.10.0
Nova King <technobaboo@proton.me>
Stardust XR reference display server
USAGE:
stardust-xr-server [OPTIONS]
OPTIONS:
-f, --flatscreen Force flatscreen mode and use the mouse pointer as a 3D pointer
-h, --help Print help information
-o, --overlay <PRIORITY> Run Stardust XR as an overlay with given priority
-V, --version Print version information
```

27
docs/index.html Normal file
View File

@@ -0,0 +1,27 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Stardust XR Docs</title>
<link rel="stylesheet" href="../style.css" />
<link rel="icon" type="image/png" href="../img/icon.png" />
<script src="../js/marked.min.js"></script>
<script src="docs.js" defer></script>
</head>
<body>
<header>
<h1>
<a href="../index.html" style="color: inherit; text-decoration: none"
>Stardust XR Docs</a
>
</h1>
<nav>
<a href="../index.html">Home</a>
</nav>
</header>
<main>
<div id="content">Loading...</div>
</main>
</body>
</html>

View File

@@ -1,149 +0,0 @@
const lightCodeTheme = require('prism-react-renderer/themes/vsLight');
const darkCodeTheme = require('prism-react-renderer/themes/vsDark');
/** @type {import('@docusaurus/types').DocusaurusConfig} */
module.exports = {
title: 'Stardust XR',
tagline: 'We Fight for the Users!',
url: 'https://stardustxr.org',
baseUrl: '/',
trailingSlash: false,
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
favicon: 'img/favicon.ico',
organizationName: 'StardustXR', // Usually your GitHub org/user name.
projectName: 'website', // Usually your repo name.
themeConfig: {
colorMode: {
defaultMode: "dark",
disableSwitch: true,
respectPrefersColorScheme: false,
},
navbar: {
title: 'Stardust XR',
logo: {
alt: 'Stardust XR logo, a yellow astroid with smaller white astroids around it',
src: 'img/icon.webp',
},
items: [
{
href: '/roadmap',
position: 'left',
label: 'Roadmap',
},
{
type: 'doc',
docId: 'getting-started/overview',
position: 'left',
label: 'Docs',
},
{
href: 'https://twitter.com/stardustxr',
label: 'Twitter',
position: 'right',
},
{
href: 'https://discord.gg/A9w7fKE',
label: 'Discord',
position: 'right',
},
{
href: 'https://matrix.to/#/#stardustxr:matrix.org',
label: 'Matrix',
position: 'right',
},
{
href: 'https://github.com/StardustXR',
label: 'GitHub',
position: 'right',
},
{
href: 'https://github.com/sponsors/technobaboo',
label: 'Sponsor This',
position: 'right',
},
],
},
footer: {
style: 'dark',
links: [
{
title: 'Docs',
items: [
{
label: 'Roadmap',
href: 'roadmap',
},
{
label: 'Getting Started',
to: '/docs/getting-started/overview',
},
],
},
{
title: 'Community',
items: [
{
label: 'Discord',
href: 'https://discord.gg/A9w7fKE',
},
{
label: 'Matrix',
href: 'https://matrix.to/#/#stardustxr:matrix.org',
},
{
label: 'Twitter',
href: 'https://twitter.com/stardustxr',
},
{
label: 'Stardust XR (GitHub)',
href: 'https://github.com/StardustXR',
},
{
label: 'Sponsor This',
href: 'https://github.com/sponsors/technobaboo',
},
],
},
{
title: 'Code',
items: [
{
label: 'Stardust XR (Server)',
href: 'https://github.com/StardustXR/stardust-xr-server',
},
{
label: 'stardust-xr (includes Fusion)',
href: 'https://github.com/StardustXR/stardust-xr',
},
{
label: 'Flatland',
href: 'https://github.com/StardustXR/flatland',
},
],
},
],
copyright: `Copyright © ${new Date().getFullYear()} Nova King`,
},
prism: {
theme: lightCodeTheme,
darkTheme: darkCodeTheme,
},
},
presets: [
[
'@docusaurus/preset-classic',
{
docs: {
sidebarPath: require.resolve('./sidebars.js'),
// Please change this to your repo.
editUrl:
'https://github.com/StardustXR/website/edit/main/',
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
},
},
],
],
};

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

View File

Before

Width:  |  Height:  |  Size: 476 KiB

After

Width:  |  Height:  |  Size: 476 KiB

BIN
img/carousel/workflow.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 KiB

BIN
img/controller_click.GIF Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

10
img/docs/Fedora_logo.svg Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" width="267" height="267" id="svg2">
<defs id="defs5"/>
<path d="M 266.62575,133.50613 C 266.62575,59.98128 207.02222,0.37583 133.49792,0.37583 C 60.00668,0.37583 0.42639,59.93123 0.37425,133.41225 L 0.37425,236.4333 C 0.4138,253.11763 13.94545,266.62417 30.64027,266.62417 L 133.55192,266.62417 C 207.05167,266.59532 266.62575,207.01142 266.62575,133.50613" id="voice" style="fill:#294172"/>
<path d="M 77.126289,142.09756 C 77.126289,142.09756 124.97104,142.09756 124.97104,142.09756 C 124.97104,142.09756 124.97104,189.94234 124.97104,189.94234 C 124.97104,216.35263 103.53659,237.78707 77.126289,237.78707 C 50.715979,237.78707 29.28153,216.35263 29.28153,189.94234 C 29.28153,163.53203 50.715979,142.09756 77.126289,142.09756 z" id="in" style="fill:none;stroke:#3c6eb4;stroke-width:29.21"/>
<use transform="matrix(-1,0,0,-1,249.71151,284.2882)" id="finity" xlink:href="#in"/>
<path d="M 139.6074,127.52923 L 139.6074,189.87541 C 139.6074,224.37943 111.63203,252.35541 77.12679,252.35541 C 71.89185,252.35541 68.1703,251.7644 63.32444,250.49771 C 56.25849,248.64859 50.48398,242.85518 50.48158,236.1166 C 50.48158,227.97147 56.39394,222.0467 65.23187,222.0467 C 69.43824,222.0467 70.96454,222.85435 77.12679,222.85435 C 95.3184,222.85435 110.07443,208.11916 110.10634,189.92756 L 110.10634,161.27099 C 110.10634,158.70324 108.01971,156.62274 105.44767,156.62274 L 83.78246,156.61846 C 75.71034,156.61846 69.18845,150.18003 69.18845,142.0858 C 69.18414,133.94124 75.77725,127.52923 83.93653,127.52923" id="free" style="fill:#ffffff"/>
<use transform="matrix(-1,0,0,-1,249.71152,284.28821)" id="dom" xlink:href="#free"/>
<path d="M 243.65456,243.58425 C 243.65456,243.58425 243.6546,238.05286 243.6546,238.05286 L 241.12607,243.85062 C 241.12607,243.85062 238.66466,238.05286 238.66466,238.05286 L 238.66513,243.58425 L 237.24683,243.58425 L 237.24683,234.84933 L 238.73387,234.84933 C 238.73387,234.84933 241.16784,240.42984 241.16784,240.42984 L 243.56495,234.84933 L 245.07039,234.84933 L 245.07039,243.58425 L 243.65456,243.58425 z M 233.32154,236.31241 L 233.32154,243.58425 L 231.83941,243.58425 L 231.83941,236.31241 L 229.35453,236.31241 L 229.35453,234.84933 L 235.80399,234.84933 L 235.80399,236.31241" id="TM" style="fill:#3c6eb4"/>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
img/docs/arch.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 242 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
img/docs/gitbonsai Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

120
img/docs/nixos.svg Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="41.759441mm"
height="36.219036mm"
viewBox="0 0 41.759441 36.219036"
version="1.1"
id="svg1"
xml:space="preserve"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs1"><linearGradient
id="linearGradient5960"><stop
id="stop5962"
offset="0"
style="stop-color:#637ddf;stop-opacity:1" /><stop
style="stop-color:#649afa;stop-opacity:1"
offset="0.23168644"
id="stop5964" /><stop
id="stop5966"
offset="1"
style="stop-color:#719efa;stop-opacity:1" /></linearGradient><linearGradient
y2="515.97058"
x2="282.26105"
y1="338.62445"
x1="213.95642"
gradientTransform="translate(983.36076,601.38885)"
gradientUnits="userSpaceOnUse"
id="linearGradient5855"
xlink:href="#linearGradient5960" /></defs><g
id="layer1"
transform="translate(-58.258978,-103.52501)"><g
id="g1"
transform="matrix(0.08323529,0,0,0.08323529,25.787204,112.98814)"><g
id="layer6"
style="display:none"
transform="translate(-132.5822,958.04022)"><rect
y="-958.02759"
x="132.65129"
height="484.30399"
width="550.41602"
id="rect5379"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5c201e;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c24a46;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect5372"
width="501.94415"
height="434.30405"
x="156.12303"
y="-933.02759" /><rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#d98d8a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect5381"
width="24.939611"
height="24.939611"
x="658.02826"
y="-958.04022" /></g><g
id="layer1-7"
style="display:inline"
transform="translate(233.78153,819.49931)"><path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
id="path4861" /><path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 353.50926,-797.4433 -122.21756,211.6631 -28.53477,-48.37 32.93839,-56.6875 -65.41521,-0.1719 -13.9414,-24.1698 14.23637,-24.721 93.11177,0.2939 33.46371,-57.6903 z"
id="use4863" /><path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 362.88537,-628.243 244.41439,0.012 -27.62229,48.8968 -65.56199,-0.1817 32.55876,56.7371 -13.96098,24.1585 -28.52722,0.032 -46.3013,-80.7841 -66.69317,-0.1353 z"
id="use4865" /><path
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#7ebae4;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
d="m 505.14318,-720.9886 -122.19683,-211.6751 56.15706,-0.5268 32.6236,56.8692 32.85645,-56.5653 27.90237,0.011 14.29086,24.6896 -46.81047,80.4902 33.22946,57.8256 z"
id="use4867" /><path
id="path4873"
d="m 309.40365,-710.2521 122.19683,211.6751 -56.15706,0.5268 -32.6236,-56.8692 -32.85645,56.5653 -27.90237,-0.011 -14.29086,-24.6896 46.81047,-80.4902 -33.22946,-57.8256 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
id="use4875"
d="m 451.3364,-803.53264 -244.4144,-0.012 27.62229,-48.89685 65.56199,0.18175 -32.55875,-56.73717 13.96097,-24.15851 28.52722,-0.0315 46.3013,80.78414 66.69317,0.13524 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><path
id="use4877"
d="m 460.87178,-633.8425 122.21757,-211.66304 28.53477,48.37003 -32.93839,56.68751 65.4152,0.1718 13.9414,24.1698 -14.23636,24.7211 -93.11177,-0.294 -33.46371,57.6904 z"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#5277c3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" /><g
id="layer2"
style="display:none"
transform="translate(72.039038,-1799.4476)"><path
d="M 460.60629,594.72881 209.74183,594.7288 84.309616,377.4738 209.74185,160.21882 l 250.86446,1e-5 125.43222,217.255 z"
id="path6032"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:0.236;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" /><path
transform="translate(0,-308.26772)"
style="color:#000000;display:inline;overflow:visible;visibility:visible;opacity:1;fill:#4e4d52;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
id="path5875"
d="m 385.59154,773.06721 -100.83495,0 -50.41747,-87.32564 50.41748,-87.32563 100.83495,10e-6 50.41748,87.32563 z" /><path
transform="translate(0,-308.26772)"
id="path5851"
d="m 1216.5591,938.53395 123.0545,228.14035 -42.6807,-1.2616 -43.4823,-79.7725 -39.6506,80.3267 -32.6875,-19.7984 53.4737,-100.2848 -37.1157,-73.88955 z"
style="fill:url(#linearGradient5855);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /><rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.415;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#c53a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect5884"
width="48.834862"
height="226.22897"
x="-34.74221"
y="446.17056"
transform="rotate(-30)" /><path
transform="translate(0,-308.26772)"
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.509;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="path3428"
d="m 251.98568,878.63831 -14.02447,24.29109 h -28.04894 l -14.02447,-24.29109 14.02447,-24.2911 h 28.04894 z" /><use
x="0"
y="0"
xlink:href="#rect5884"
id="use4252"
transform="rotate(60,268.29786,489.4515)"
width="100%"
height="100%" /><rect
style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:0.650794;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
id="rect4254"
width="5.3947482"
height="115.12564"
x="545.71014"
y="467.07007"
transform="rotate(30,575.23539,-154.13386)" /></g></g></g></g></svg>

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 KiB

View File

@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="svg5" version="1.1" viewBox="0 0 224 224" xmlns="http://www.w3.org/2000/svg">
<defs id="defs1">
<style id="style1">.cls-1{fill:#00078f;fill-rule:evenodd;}.cls-2{fill:#fdfdff;}</style>
</defs>
<g id="layer1">
<g id="surface85753">
<path id="path1984" class="cls-1" transform="translate(0)" d="M112,0A112,112,0,1,1,0,112,112,112,0,0,1,112,0"/>
<path id="path1986" class="cls-2" transform="translate(0)" d="m206.49 147.8c-16.67-3.84-33-9.53-44.13-16-30.51-17.8-41.07-56.65-84.1-42.2 34 39.65-23 52-61.64 55.76a101 101 0 0 0 189.87 2.44"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 616 B

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
img/hand_pinching.GIF Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 MiB

View File

Before

Width:  |  Height:  |  Size: 2.8 MiB

After

Width:  |  Height:  |  Size: 2.8 MiB

View File

Before

Width:  |  Height:  |  Size: 234 KiB

After

Width:  |  Height:  |  Size: 234 KiB

View File

Before

Width:  |  Height:  |  Size: 895 KiB

After

Width:  |  Height:  |  Size: 895 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

BIN
img/updated_flat_drag.GIF Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 MiB

BIN
img/updated_flat_look.GIF Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

BIN
img/updated_flat_wasd.GIF Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 MiB

173
index.html Normal file
View File

@@ -0,0 +1,173 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Stardust XR</title>
<link rel="stylesheet" href="style.css" />
<style>
.sr-only {
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
}
</style>
<link
rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/all.min.css"
/>
<link rel="icon" type="image/png" href="img/icon.png" />
</head>
<body>
<header>
<div class="header-content">
<div class="logo-container">
<img
src="img/icon.webp"
alt="Stardust XR logo, a yellow star with smaller white stars around it in a purple cosmic background"
class="logo"
/>
<h1>Stardust XR</h1>
</div>
<p class="tagline">Stardust... We Fight For the Users!</p>
<nav>
<div class="nav-right">
<a
href="https://discord.gg/A9w7fKE"
target="_blank"
rel="noopener"
class="nav-icon"
>
<i class="fab fa-discord" aria-hidden="true"></i>
<span class="sr-only">Join our Discord server</span>
</a>
<a
href="https://matrix.to/#/#stardustxr:matrix.org"
target="_blank"
rel="noopener"
class="nav-text matrix-link"
>
<span aria-label="Join our Matrix space">[matrix]</span>
</a>
<a
href="https://bsky.app/profile/stardustxr.org"
target="_blank"
rel="noopener"
class="nav-icon"
>
<i class="fa-brands fa-bluesky" aria-hidden="true"></i>
<span class="sr-only">Follow us on Bluesky</span>
</a>
<a
href="https://twitter.com/stardustxr"
target="_blank"
rel="noopener"
class="nav-icon"
>
<i class="fab fa-twitter" aria-hidden="true"></i>
<span class="sr-only">Follow us on Twitter</span>
</a>
<a
href="https://github.com/StardustXR"
target="_blank"
rel="noopener"
class="nav-icon"
>
<i class="fab fa-github" aria-hidden="true"></i>
<span class="sr-only">View our GitHub repositories</span>
</a>
<a
href="https://github.com/sponsors/technobaboo"
target="_blank"
rel="noopener"
class="nav-icon sponsor-link"
>
<i class="fas fa-heart" aria-hidden="true"></i>
<span class="sr-only">Sponsor Stardust XR development</span>
</a>
</div>
</nav>
</div>
</header>
<main>
<section class="hero">
<h2>Welcome to Stardust XR</h2>
<p class="lead">
Experience the next generation of XR computing. Build immersive
experiences that transcend reality.
</p>
<div class="cta-buttons">
<a href="docs/index.html" class="cta-primary">Get Started</a>
<a href="https://github.com/StardustXR" class="cta-secondary"
>View on GitHub</a
>
</div>
</section>
</main>
<footer>
<div class="footer-content">
<div class="footer-section">
<h3>Community</h3>
<ul>
<li>
<a
href="https://discord.gg/A9w7fKE"
target="_blank"
rel="noopener"
>Discord</a
>
</li>
<li>
<a
href="https://matrix.to/#/#stardustxr:matrix.org"
target="_blank"
rel="noopener"
>Matrix</a
>
</li>
<li>
<a
href="https://bsky.app/profile/stardustxr.org"
target="_blank"
rel="noopener"
>Bluesky</a
>
</li>
<li>
<a
href="https://twitter.com/stardustxr"
target="_blank"
rel="noopener"
>Twitter</a
>
</li>
<li>
<a
href="https://github.com/StardustXR"
target="_blank"
rel="noopener"
>GitHub</a
>
</li>
<li>
<a
href="https://github.com/sponsors/technobaboo"
target="_blank"
rel="noopener"
>Sponsor This</a
>
</li>
</ul>
</div>
</div>
</footer>
</body>
</html>

69
js/marked.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -1,43 +0,0 @@
{
"name": "stardust-website",
"version": "0.0.0",
"private": true,
"scripts": {
"docusaurus": "docusaurus",
"start": "docusaurus start",
"build": "docusaurus build",
"swizzle": "docusaurus swizzle",
"deploy": "docusaurus deploy",
"clear": "docusaurus clear",
"serve": "docusaurus serve",
"write-translations": "docusaurus write-translations",
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "2.0.0-beta.3",
"@docusaurus/preset-classic": "2.0.0-beta.3",
"@mdx-js/react": "^1.6.21",
"@svgr/webpack": "^5.5.0",
"clsx": "^1.1.1",
"file-loader": "^6.2.0",
"prism-react-renderer": "^1.2.1",
"react": "^17.0.1",
"react-dom": "^17.0.1",
"react-responsive-carousel": "^3.2.20",
"url-loader": "^4.1.1",
"utils-merge": "^1.0.1",
"yarn": "^1.22.10"
},
"browserslist": {
"production": [
">0.5%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}

View File

@@ -1,26 +0,0 @@
/**
* Creating a sidebar enables you to:
- create an ordered group of docs
- render a sidebar for each doc of that group
- provide next/previous navigation
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
module.exports = {
// By default, Docusaurus generates a sidebar from the docs folder structure
tutorialSidebar: [{type: 'autogenerated', dirName: '.'}],
// But you can create a sidebar manually
/*
tutorialSidebar: [
{
type: 'category',
label: 'Tutorial',
items: ['hello'],
},
],
*/
};

View File

@@ -1,37 +0,0 @@
import React from 'react';
import { Carousel } from 'react-responsive-carousel';
const ImageList = [
{
image: "img/carousel/multipleclients.jpg",
alt: "A scene showing multiple widgets, including sliders like an equalizer and a virtual touchscreen.",
caption: "Multiple objects working independently all at once.",
},
{
image: "img/carousel/spatialcode.png",
alt: "To the left, a code editor showing Stardust Fusion creating several models and transforming them on the logicStep. To the right is the program running in Stardust.",
caption: "Code vs output of the Spatial Fusion demo.",
},
{
image: "img/carousel/panels.png",
alt: "A series of application windows as 3D panels similar to small wooden boards in proportions with a Panasonic CRT TV model in the center showing Agregore (the browser).",
caption: "Panels for wayland apps and a CRT panel shell for XR UI.",
},
]
function CarouselImage({image, alt, caption}) {
return (
<div>
<img alt={alt} src={image} />
<p className="legend">{caption}</p>
</div>
);
}
export default () => (
<Carousel autoPlay infiniteLoop showThumbs={false} className="gallery">
{ImageList.map((props, idx) => (
<CarouselImage key={idx} {...props} />
))}
</Carousel>
);

View File

@@ -1,53 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import styles from './HomepageFeatures.module.css';
const FeatureList = [
{
title: 'Flexible',
image: '/img/icon.gif',
description: (
<>
Stardust allows developers to make XR widgets or interfaces and run them among others.
You don&apos;t have to make a whole system UI, just a few pieces.
</>
),
},
{
title: 'Streamlined',
image: 'https://stereokit.net/img/StereoKitLogoLight.svg',
description: (
<>
Stardust is made using <a href="https://stereokit.net">StereoKit</a>, an XR application/rendering toolkit allowing for a fast and lightweight display server.
</>
),
},
];
function Feature({image, title, description}) {
return (
<div className={clsx('col col--6')}>
<div className="text--center">
<img src={image} className={styles.featureImg} alt={title} />
</div>
<div className="text--center padding-horiz--md">
<h3>{title}</h3>
<p>{description}</p>
</div>
</div>
);
}
export default function HomepageFeatures() {
return (
<section className={styles.features}>
<div className="container">
<div className="row">
{FeatureList.map((props, idx) => (
<Feature key={idx} {...props} />
))}
</div>
</div>
</section>
);
}

View File

@@ -1,13 +0,0 @@
/* stylelint-disable docusaurus/copyright-header */
.features {
display: flex;
align-items: center;
padding: 2rem 0;
width: 100%;
}
.featureImg {
height: 200px;
width: 200px;
}

View File

@@ -1,46 +0,0 @@
/* stylelint-disable docusaurus/copyright-header */
/**
* Any CSS included here will be global. The classic template
* bundles Infima by default. Infima is a CSS framework designed to
* work well for content-centric websites.
*/
/* You can override the default Infima variables here. */
:root {
--ifm-color-primary: #e1e456;
--ifm-color-primary-dark: rgb(175, 173, 33);
--ifm-color-primary-darker: rgb(165, 163, 31);
--ifm-color-primary-darkest: rgb(134, 136, 26);
--ifm-color-primary-light: rgb(201, 203, 70);
--ifm-color-primary-lighter: rgb(212, 210, 102);
--ifm-color-primary-lightest: rgb(223, 224, 146);
--ifm-color-secondary: #a14ed8;
--ifm-color-secondary-dark: #7c3ca7;
--ifm-color-secondary-darker: #612f83;
--ifm-code-font-size: 95%;
}
.docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.1);
display: block;
margin: 0 calc(-1 * var(--ifm-pre-padding));
padding: 0 var(--ifm-pre-padding);
}
html[data-theme='dark'] .docusaurus-highlight-code-line {
background-color: rgba(0, 0, 0, 0.3);
}
ul.contains-task-list {
list-style-type: none;
}
li.task-list-item > input[type="checkbox"] {
pointer-events: none;
}
.gallery {
margin: 0 auto;
max-width: 1250px;
}

View File

@@ -1,44 +0,0 @@
import React from 'react';
import clsx from 'clsx';
import Layout from '@theme/Layout';
import Link from '@docusaurus/Link';
import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
import styles from './index.module.css';
import HomepageFeatures from '../components/HomepageFeatures';
import Carousel from '../components/Carousel';
import 'react-responsive-carousel/lib/styles/carousel.min.css';
function HomepageHeader() {
const {siteConfig} = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<div className="container">
<link rel="me" href="https://fosstodon.org/@stardustxr"></link>
<h1 className="hero__title">{siteConfig.title}</h1>
<p className="hero__subtitle">{siteConfig.tagline}</p>
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/getting-started/overview">
Get Started
</Link>
</div>
</div>
</header>
);
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
return (
<Layout
image="img/icon.gif"
description="XR Display Server">
<HomepageHeader />
<main>
<HomepageFeatures />
<Carousel />
</main>
</Layout>
);
}

View File

@@ -1,25 +0,0 @@
/* stylelint-disable docusaurus/copyright-header */
/**
* CSS files with the .module.css suffix will be treated as CSS modules
* and scoped locally.
*/
.heroBanner {
padding: 4rem 0;
text-align: center;
position: relative;
overflow: hidden;
}
@media screen and (max-width: 966px) {
.heroBanner {
padding: 2rem;
}
}
.buttons {
display: flex;
align-items: center;
justify-content: center;
}

View File

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

View File

@@ -1 +0,0 @@
stardustxr.org

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 789 KiB

Some files were not shown because too many files have changed in this diff Show More