Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/worldwidetelescope/wwt-webgl-engine

The full WorldWide Telescope rendering engine in JavaScript with WebGL
https://github.com/worldwidetelescope/wwt-webgl-engine

Last synced: about 1 month ago
JSON representation

The full WorldWide Telescope rendering engine in JavaScript with WebGL

Awesome Lists containing this project

README

        

[![Build Status](https://dev.azure.com/aasworldwidetelescope/WWT/_apis/build/status/WorldWideTelescope.wwt-webgl-engine?branchName=cranko)](https://dev.azure.com/aasworldwidetelescope/WWT/_build/latest?definitionId=21&branchName=cranko)
[![npm](https://img.shields.io/npm/v/@wwtelescope/astro?label=@wwtelescope/astro)](https://www.npmjs.com/package/@wwtelescope/astro)
[![npm](https://img.shields.io/npm/v/@wwtelescope/embed?label=@wwtelescope/embed)](https://www.npmjs.com/package/@wwtelescope/embed)
[![npm](https://img.shields.io/npm/v/@wwtelescope/embed-common?label=@wwtelescope/embed-common)](https://www.npmjs.com/package/@wwtelescope/embed-common)
[![npm](https://img.shields.io/npm/v/@wwtelescope/embed-creator?label=@wwtelescope/embed-creator)](https://www.npmjs.com/package/@wwtelescope/embed-creator)
[![npm](https://img.shields.io/npm/v/@wwtelescope/engine?label=@wwtelescope/engine)](https://www.npmjs.com/package/@wwtelescope/engine)
[![npm](https://img.shields.io/npm/v/@wwtelescope/engine-helpers?label=@wwtelescope/engine-helpers)](https://www.npmjs.com/package/@wwtelescope/engine-helpers)
[![npm](https://img.shields.io/npm/v/@wwtelescope/engine-types?label=@wwtelescope/engine-types)](https://www.npmjs.com/package/@wwtelescope/engine-types)
[![npm](https://img.shields.io/npm/v/@wwtelescope/engine-pinia?label=@wwtelescope/engine-pinia)](https://www.npmjs.com/package/@wwtelescope/engine-pinia)
[![npm](https://img.shields.io/npm/v/@wwtelescope/research-app?label=@wwtelescope/research-app)](https://www.npmjs.com/package/@wwtelescope/research-app)
[![npm](https://img.shields.io/npm/v/@wwtelescope/research-app-messages?label=@wwtelescope/research-app-messages)](https://www.npmjs.com/package/@wwtelescope/research-app-messages)
[![Powered by NumFOCUS](https://img.shields.io/badge/powered%20by-NumFOCUS-orange.svg?style=flat&colorA=E1523D&colorB=007D8A)](http://numfocus.org)

# The WorldWide Telescope WebGL engine

The “WebGL engine” of the [WorldWide Telescope][wwt-home] (WWT) is a
JavaScript/[TypeScript] framework that powers the Web-based versions of the WWT
visualization software, as exemplified by the [WWT web client][webclient].

Learn more about WWT [here][wwt-home].

[TypeScript]: https://www.typescriptlang.org/
[wwt-home]: https://worldwidetelescope.org/home/
[webclient]: https://worldwidetelescope.org/webclient/

[//]: # (numfocus-fiscal-sponsor-attribution)

The WorldWide Telescope project uses an [open governance
model](https://worldwidetelescope.org/about/governance/) and is fiscally
sponsored by [NumFOCUS](https://numfocus.org/). Consider making a
[tax-deductible donation](https://numfocus.org/donate-for-worldwide-telescope)
to help the project pay for developer time, professional services, travel,
workshops, and a variety of other needs.





## Developers’ quick start

1. Check out this repository to a machine with [Node.js] and [Yarn].
1. Builds with versions of Node.js around 18.17 may fail with [an Invalid URL
error](https://github.com/nodejs/node/issues/48855).
1. There have also been reports of builds that hang on Linux with Node 20.x.
1. `git submodule update --init`
1. `yarn install`
1. `yarn lint` (uses [ESLint])
1. `yarn build` creates:
1. The core engine package in the `engine/` package.
1. The engine tidied up into a [Vue]/[Pinia] module in `engine-pinia/`
1. The WWT embed app intended for iframe inclusion in `embed/`
1. The WWT research app in `research-app/`
1. The user-facing app for creating embed iframe code in `embed-creator/`
1. Commands to serve the web apps:
1. `yarn run serve-embed` to serve the embed app
1. `yarn run serve-research` to serve the research app
1. `yarn run serve-creator` to serve the embed creator app
1. `yarn test` (mainly uses [mocha] and [chai]; see also [Integration Testing] below)
1. `yarn doc` (uses [TypeDoc])

[Node.js]: https://nodejs.org/en/
[Yarn]: https://yarnpkg.com/
[Vue]: https://vuejs.org/
[Pinia]: https://pinia.vuejs.org/
[ESLint]: https://eslint.org/
[mocha]: https://mochajs.org/
[chai]: https://www.chaijs.com/
[Integration Testing]: #integration-testing
[TypeDoc]: https://typedoc.org/

## Repository structure

This repository is a [monorepo] containing the source for several interlocking
TypeScript packages that together comprise the core of the WWT web framework.
The most important subdirectories are:

[monorepo]: https://en.wikipedia.org/wiki/Monorepo

- `@wwtelescope/engine` in `engine/`, the core engine code with TypeScript annotations
- `@wwtelescope/engine-pinia` in `engine-pinia/`, a higher-level package that turns the
engine into a reusable [Vue]/[Pinia] component
- `@wwtelescope/embed` in `embed/`, a web application that turns WWT into a
configurable, embeddable iframe
- `@wwtelescope/research-app` in `research-app/`, an embeddable web application for
astrophysics research using WWT.
- The narrative documentation in `docs/`

README files inside the individual subdirectories give more information about
their contents and development workflows.

Previous versions used [Vuex] instead of [Pinia] in the `engine-vuex/`
subdirectory. That module has been superseded by the Pinia version.

[Vuex]: https://vuex.vuejs.org/

## Building the code

Code in this repository is built using standard [Node.js]/[Yarn] tooling.
These tools must be installed before you can do anything else. To set up your
checkout, follow the instructions in the [Developers’ Quick Start][dqs] above.

[dqs]: #developers-quick-start

Once setup is complete, the following commands will be useful:

- `yarn build` to build the subpackages
- `yarn lint` to lint the subpackages (using [eslint] with TypeScript extensions)
- `yarn test` to run the tests (mainly using [mocha] and [chai])
- `yarn doc` to build most of the documentation (using [TypeDoc]) — but see below
- `yarn clean` to remove built files

You can run these commands from the top level, which will run them for all of
the packages, or from the subdirectory of the package you’re interested in.

## Building the full documentation

Documentation is maintained in subdirectories of `docs/`. The documentation is a
Frankenstein combination of the autogenerated API documentation and narrative
material written in [CommonMark Markdown]. The final HTML is assembled with the
static site generator [Zola].

[CommonMark Markdown]: https://commonmark.org/
[Zola]: https://getzola.org/
[TypeDoc]: https://typedoc.org/

1. Zola is fast and self-contained and [ridiculously easy to
install][install-zola].
1. The `yarn doc` command will install the autogenerated documentation into
`docs/engine/static/`
1. Running `zola build` in a subdirectory of `docs` will assembled the final HTML
into `docs/{subdir}/public/`.
1. The command `zola check` will check the narrative docs for broken links.
1. The command `zola serve` will serve the documentation using a local server
with autoreload.

[install-zola]: https://www.getzola.org/documentation/getting-started/installation/

## Continuous Integration and Deployment

This repository uses [Cranko] to automate release workflows. This automation is
essential to the smooth and reproducible deployment of the WWT web services.

[Cranko]: https://pkgw.github.io/cranko/

## Integration Testing

Integration testing of the apps is done using [Selenium], [Nightwatch], and
[BrowserStack]. For the main branch, this is triggered automatically with each
commit/pull request. However, the test suite can also be run using a version of
the app on your local machine, either locally (using the Nightwatch binary) or
using BrowserStack (provided that you have a BrowserStack account). In either
case, you may need to modify the `url` in `tests/page_objects/researchApp.js` to
point to the localhost port that you will be using (the default is
`http://localhost:8080`).

[Selenium]: https://www.selenium.dev/
[Nightwatch]: https://nightwatchjs.org/
[BrowserStack]: https://www.browserstack.com/

To run the test suite on a local version of the app with ChromeDriver:

```
yarn run serve-research & # or equivalent
cd tests
yarn build
yarn local
```

To run tests on a local version of the app via BrowserStack's multi-browser,
multi-platform infrastructure, do the following:

* Set the variables `BROWSERSTACK_USERNAME` and `BROWSERSTACK_ACCESS_KEY` to your BrowserStack
username and access key, respectively. You can find these values in your BrowserStack
[Account Settings].

[Account Settings]: https://www.browserstack.com/accounts/settings

* Run the test suite as above but with the final command: `yarn bs-local`

By default, both of these local options will run the tests in Chrome. You can
adjust the testing environments adding the `-e` option, which can be
accomplished with syntax such as

```
yarn bs-local -e firefox,edge
```

## Getting involved

We love it when people get involved in the WWT community! You can get started
by [participating in our user forum] or by
[signing up for our low-traffic newsletter]. If you would like to help make
WWT better, our [Contributor Hub] aims to be your one-stop shop for
information about how to contribute to the project, with the
[Contributors’ Guide] being the first thing you should read. Here on GitHub we
operate with a standard [fork-and-pull] model.

[participating in our user forum]: https://wwt-forum.org/
[signing up for our low-traffic newsletter]: https://bit.ly/wwt-signup
[Contributor Hub]: https://worldwidetelescope.github.io/
[Contributors’ Guide]: https://worldwidetelescope.github.io/contributing/
[fork-and-pull]: https://help.github.com/en/articles/about-collaborative-development-models

All participation in WWT communities is conditioned on your adherence to the
[WWT Code of Conduct], which basically says that you should not be a jerk.

[WWT Code of Conduct]: https://worldwidetelescope.github.io/code-of-conduct/

## Acknowledgments

Work on the WorldWide Telescope system has been supported by the [American
Astronomical Society] (AAS), the [.NET Foundation], and other partners. See [the
WWT user website][acks] for details.

[American Astronomical Society]: https://aas.org/
[.NET Foundation]: https://dotnetfoundation.org/
[acks]: https://worldwidetelescope.org/about/acknowledgments/

## Legalities

The WWT code is licensed under the [MIT License]. The copyright to the code is
owned by the [.NET Foundation].

[MIT License]: https://opensource.org/licenses/MIT