52 Commits

Author SHA1 Message Date
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
85 changed files with 5165 additions and 4926 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

View File

@@ -0,0 +1,61 @@
---
title: Stardust XR Philosophy
author: Cyberneticmelon
---
-----
# Complexity ≠ Difficulty
In most modern user interaction there is a massive disconnect between the interface and the underlying system that is running.
Although some user interfaces may look well designed, often times they have papered over how things work instead of unfolding the complexity
in a way that is more understandable.
The average person may not easily understand why their computer is doing what it is doing, and delegate this knowledge to the realm of programmers
or more technically inclined people.
High complexity, however, does not innately indicate that something is highly difficult. Take all the objects lying in front of you when
you're working at a desk. To move all of those items around is a highly complex task that even modern visual tracking algorithms can
sometimes struggle with, let alone the mechatronic limitations when it comes to robotics, outside of tightly controlled environments.
You, however, can easily and intuitively move things around and organize them in a spatial environment without needing to directly
think about it, which provides a unique and newly available avenue of exploration in the XR and VR space, and it is this innate ability
that we aim to harness with Stardust XR's design philosophy, by focusing in on direct interactions that map to underlying functionality.
# Direct Interaction Vs Indirect Action
With something like indirect action such as a touch screen on a phone or tablet, you're limited to essentially a few modes of interaction such as tapping or swiping, whereas direct interaction within XR and VR you're opened up to a wide possibility of methods like cutting something in half with scissor fingers, duplicating by stretching an object, plugging one thing into another, etc. Stardust XR's design philosophy allows for the possibility of taking the underlying mechanics and expressing them as full interfaces. With the correct signifiers and affordances that map directly to the things underneath, people can gain an intuitive understanding of how their computer works. Clients and applications can also be designed in a way that allows for a better understanding of what is going on as there is far less obfuscation as to how underlying structures are handling that data.
![git-bonsai](/img/docs/gitbonsai)
*git-bonsai, a prototype design for an intuitive spatial github client*
A virtual environment provides an infinite space in which unfolding complexity becomes much more viable to do.
Part of the goal of Stardust XR is to allow the average user to become a power-user through intuitive interaction; because of the number of ways a user can engage with a 3D environment, this greatly increases the interactive bandwidth a developer
can utilize.
# Form Flexibility Principle
With a PC, you are essentially limited to a keyboard and mouse; with a touch screen, you're limited to touch and multi-touch; in XR,
you have hands, eyes, and body, which has an exceedingly large amount of available bandwidth for interaction.
The more interaction bandwidth you have to offer, the more customizability is not just something that *can* be done, it's something that
*must* be done to provide an adaptable user experience for real world scenarios. As XR expands into areas beyond just the home and workspace,
this becomes increasingly important as the ways in which you can interact with the world is, by default, extremely variable, and Stardust XR's open platform and client creation philosophy allows developers to freely expand these types of interactions to meet the demands that computation brought into a 3D space will bring. From sitting at a small workbench all the way up to a full warehouse, the application space becomes much larger as you incorporate the ability to move through the world with mixed reality. Existing user interfaces of today typically provide limited and hard-coded exceptions to the rules, and only for specific situations or disabilities. By making user interaction systems more emergent, many forms of accessibility become available third party, with broader compatibility.
When you take advantage of the innate interactions and movements that come naturally to people in a 3D environment, and combine that with a library of base interactions associated with underlying computer structures, a system that is both modular and emergent in its ability to grow as XR expands more and more into the real world becomes essential.
Stardust XR is that system 🍉
<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>
If you'd like to try out Stardust XR, [click here](https://stardustxr.org/docs/get-started/What-is-Stardust)
[Become a sponsor](https://github.com/sponsors/technobaboo) and help Nova expand Stardust XR! Stardust XR is also actively looking for help with development, check out the [github](https://github.com/StardustXR) page for more information.

View File

@@ -1,3 +1,3 @@
#!/bin/sh
GIT_USER=$1 USE_SSH=true yarn deploy
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
}

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,35 +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)
### 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
```

View File

@@ -1,18 +1,23 @@
const lightCodeTheme = require('prism-react-renderer/themes/vsLight');
const darkCodeTheme = require('prism-react-renderer/themes/vsDark');
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: '/',
title: "Stardust XR",
tagline: "Stardust... 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.
onBrokenLinks: "throw",
onBrokenMarkdownLinks: "warn",
favicon: "img/favicon.ico",
organizationName: "StardustXR", // Usually your GitHub org/user name.
projectName: "website", // Usually your repo name.
scripts: [{src: 'https://plausible.fyralabs.com/js/script.hash.outbound-links.js', defer: true, 'data-domain': 'stardustxr.org'}],
markdown: {
mermaid: true,
},
themes: ["@docusaurus/theme-mermaid"],
themeConfig: {
colorMode: {
defaultMode: "dark",
@@ -20,105 +25,90 @@ module.exports = {
respectPrefersColorScheme: false,
},
navbar: {
title: 'Stardust XR',
title: "Stardust XR",
logo: {
alt: 'Stardust XR logo, a yellow astroid with smaller white astroids around it',
src: 'img/icon.webp',
alt: "Stardust XR logo, a yellow astroid with smaller white astroids around it",
src: "img/icon.webp",
},
items: [
{
href: '/roadmap',
position: 'left',
label: 'Roadmap',
href: "https://twitter.com/stardustxr",
label: "Twitter",
position: "right",
},
{
type: 'doc',
docId: 'getting-started/overview',
position: 'left',
label: 'Docs',
href: "https://discord.gg/A9w7fKE",
label: "Discord",
position: "right",
},
{
href: 'https://twitter.com/stardustxr',
label: 'Twitter',
position: 'right',
href: "https://matrix.to/#/#stardustxr:matrix.org",
label: "Matrix",
position: "right",
},
{
href: 'https://discord.gg/A9w7fKE',
label: 'Discord',
position: 'right',
href: "https://github.com/StardustXR",
label: "GitHub",
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',
href: "https://github.com/sponsors/technobaboo",
label: "Sponsor This",
position: "right",
},
],
},
footer: {
style: 'dark',
style: "dark",
links: [
{
title: 'Docs',
title: "Docs",
items: [
{
label: 'Roadmap',
href: 'roadmap',
},
{
label: 'Getting Started',
to: '/docs/getting-started/overview',
label: "Getting Started",
to: "/docs/get-started/setup-openxr",
},
],
},
{
title: 'Community',
title: "Community",
items: [
{
label: 'Discord',
href: 'https://discord.gg/A9w7fKE',
label: "Discord",
href: "https://discord.gg/A9w7fKE",
},
{
label: 'Matrix',
href: 'https://matrix.to/#/#stardustxr:matrix.org',
label: "Matrix",
href: "https://matrix.to/#/#stardustxr:matrix.org",
},
{
label: 'Twitter',
href: 'https://twitter.com/stardustxr',
label: "Twitter",
href: "https://twitter.com/stardustxr",
},
{
label: 'Stardust XR (GitHub)',
href: 'https://github.com/StardustXR',
label: "Stardust XR (GitHub)",
href: "https://github.com/StardustXR",
},
{
label: 'Sponsor This',
href: 'https://github.com/sponsors/technobaboo',
label: "Sponsor This",
href: "https://github.com/sponsors/technobaboo",
},
],
},
{
title: 'Code',
title: "Code",
items: [
{
label: 'Stardust XR (Server)',
href: 'https://github.com/StardustXR/stardust-xr-server',
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: "stardust-xr (includes Fusion)",
href: "https://github.com/StardustXR/stardust-xr",
},
{
label: 'Flatland',
href: 'https://github.com/StardustXR/flatland',
label: "Flatland",
href: "https://github.com/StardustXR/flatland",
},
],
},
@@ -132,16 +122,15 @@ module.exports = {
},
presets: [
[
'@docusaurus/preset-classic',
"@docusaurus/preset-classic",
{
docs: {
sidebarPath: require.resolve('./sidebars.js'),
sidebarPath: require.resolve("./sidebars.js"),
// Please change this to your repo.
editUrl:
'https://github.com/StardustXR/website/edit/main/',
editUrl: "https://github.com/StardustXR/website/edit/main/",
},
theme: {
customCss: require.resolve('./src/css/custom.css'),
customCss: require.resolve("./src/css/custom.css"),
},
},
],

61
flake.lock generated Normal file
View File

@@ -0,0 +1,61 @@
{
"nodes": {
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1723991338,
"narHash": "sha256-Grh5PF0+gootJfOJFenTTxDTYPidA3V28dqJ/WV7iis=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "8a3354191c0d7144db9756a74755672387b702ba",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"root": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": "nixpkgs"
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
}
},
"root": "root",
"version": 7
}

23
flake.nix Normal file
View File

@@ -0,0 +1,23 @@
{
inputs = {
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
};
outputs =
{ nixpkgs, flake-utils, ... }:
flake-utils.lib.eachDefaultSystem (
system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
{
devShells.default = pkgs.mkShell {
buildInputs = with pkgs; [
nodejs_22
yarn
];
};
}
);
}

View File

@@ -14,8 +14,9 @@
"write-heading-ids": "docusaurus write-heading-ids"
},
"dependencies": {
"@docusaurus/core": "2.0.0-beta.3",
"@docusaurus/preset-classic": "2.0.0-beta.3",
"@docusaurus/core": "2.4.1",
"@docusaurus/preset-classic": "2.4.1",
"@docusaurus/theme-mermaid": "2.4.1",
"@mdx-js/react": "^1.6.21",
"@svgr/webpack": "^5.5.0",
"clsx": "^1.1.1",

View File

@@ -1,12 +1,13 @@
/**
* 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
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.
The sidebars can be generated from the filesystem, or explicitly defined here.
Create as many sidebars as you want.
*/
module.exports = {

View File

@@ -1,25 +1,26 @@
import React from 'react';
import { Carousel } from 'react-responsive-carousel';
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/workflow.png",
alt: "A scene showing a flat panel with Blender to the left (containing a sketch of a 3D git client that looks like a bonsai tree), a turntable with a 3D model of the stardust logo on it in the center, and a massive grid of hexagons for all the apps on the system to the right.",
caption:
"A workflow containing Blender, a turntable with a 3D model preview, and the hexasgon app launcher.",
},
{
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/multipleclients.png",
alt: "A scene showing multiple widgets, including CRT TV panel shells and flat touchscreen panels and 2 rings forming a cylinder around the scene.",
caption: "Multiple objects working independently all at once.",
},
{
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}) {
function CarouselImage({ image, alt, caption }) {
return (
<div>
<img alt={alt} src={image} />

View File

@@ -43,4 +43,4 @@ li.task-list-item > input[type="checkbox"] {
.gallery {
margin: 0 auto;
max-width: 1250px;
}
}

View File

@@ -1,17 +1,17 @@
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';
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();
const { siteConfig } = useDocusaurusContext();
return (
<header className={clsx('hero hero--primary', styles.heroBanner)}>
<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>
@@ -19,7 +19,8 @@ function HomepageHeader() {
<div className={styles.buttons}>
<Link
className="button button--secondary button--lg"
to="/docs/getting-started/overview">
to="/docs/get-started/What-is-Stardust"
>
Get Started
</Link>
</div>
@@ -29,11 +30,9 @@ function HomepageHeader() {
}
export default function Home() {
const {siteConfig} = useDocusaurusContext();
const { siteConfig } = useDocusaurusContext();
return (
<Layout
image="img/icon.gif"
description="XR Display Server">
<Layout image="img/icon.gif" description="XR Display Server">
<HomepageHeader />
<main>
<HomepageFeatures />

View File

@@ -4,6 +4,8 @@ title: Roadmap
# Roadmap
**Warning. This roadmap is now outdated.**
## 1.0 (Minimum Viable Product)
- [x] Core functionality
@@ -70,4 +72,4 @@ title: Roadmap
- [ ] Panel Item UI
- [ ] Flatland
More to come!
More to come!

View File

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

View File

@@ -1 +1 @@
stardustxr.org
stardustxr.org

Binary file not shown.

Before

Width:  |  Height:  |  Size: 231 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 223 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

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
static/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
static/img/docs/gitbonsai Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 KiB

120
static/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.

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 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

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 MiB

8428
yarn.lock

File diff suppressed because it is too large Load Diff