+
+
+> **Note:** The `Godot.app` isn't signed for MacOS you need
+> to [allow to open it](https://support.apple.com/en-us/102445#:~:text=If%20you%20want%20to%20open%20an%20app%20that%20hasn%E2%80%99t%20been%20notarized%20or%20is%20from%20an%20unidentified%20developer).
+
+
+### Manual Installation
+
+If you prefer to browse all releases manually, visit the [GitHub Releases page](https://github.com/godotjs/GodotJS/releases).
+
+### Installation Instructions
+
+After downloading:
+
+1. Extract the downloaded zip file
+2. Rename the executable based on your OS:
+ - **Linux**: `godot.linuxbsd.editor.x86_64` → `godot`
+ - **macOS**: No rename required
+ - **Windows**: `godot.windows.editor.x86_64.exe` → `godot.exe`
3. [Add Godot to your PATH](https://docs.godotengine.org/en/stable/tutorials/editor/command_line_tutorial.html#path)
- - Linux: `/usr/local/bin`
- - MacOS: `echo ~/your-path/Godot.app/Contents/MacOS|sudo tee /etc/paths.d/godot;bash -l;echo $PATH`
- - Windows: `setx /M path "%path%;C:\your-path\windows-editor-v8"`
-4. Open a terminal
-5. Test if you can use Godot via terminal and run:
-
-```shell
-godot --version
-```
+4. Test the installation by running `godot --version` in your terminal
+
+### JS Engine Comparison
+
+| Engine | Performance | Memory Usage | Platform Support | Recommended For |
+|--------------------|-------------|--------------|------------------|--------------------------|
+| **V8** | High | Higher | Desktop | Development & Production |
+| **QuickJS** | Medium | Lower | All platforms | Mobile & Embedded |
+| **JavaScriptCore** | High | Medium | macOS/iOS | Apple platforms |
+| **Browser** | High | Lower | Web | Web |
+
+### Target Types
-> **Note:** The `Godot.app` isn't signed for MacOS you need to [allow to open it](https://support.apple.com/en-us/102445#:~:text=If%20you%20want%20to%20open%20an%20app%20that%20hasn%E2%80%99t%20been%20notarized%20or%20is%20from%20an%20unidentified%20developer).
+- **Editor**: Full Godot editor with GodotJS support
+- **Template**: Export templates for building your games
+- **Debug**: Debug versions with additional logging and debugging features
## Create a new project
@@ -25,14 +49,16 @@ godot --version
3. Run `cd `
4. Run `npm i`
5. Run `npm run dev` - this will enable typescript watch mode and opens the editor
-6. Inside the editor [install preset files](#install-preset-files) via `Project > Tools > GodotJS > Install Preset files`
+6. Inside the editor [install preset files](#install-preset-files) via
+ `Project > Tools > GodotJS > Install Preset files`
7. Click `OK` to confirm a list of files will be generated in the project.
8. Attach the `example.ts` script to a node and run the project
### Manually
1. Run `godot -p` and create a new project
-2. Inside the editor [install preset files](#install-preset-files) via `Project > Tools > GodotJS > Install Preset files`
+2. Inside the editor [install preset files](#install-preset-files) via
+ `Project > Tools > GodotJS > Install Preset files`
3. Click `OK` to confirm a list of files will be generated in the project.
4. Run `cd `
5. Run `npm i`
@@ -69,6 +95,7 @@ npx tsc
npx tsc -w
```
-Also, you can simply click the tool button on _GodotJS_ bottom panel in the godot editor. It'll do the same thing for you.
+Also, you can simply click the tool button on _GodotJS_ bottom panel in the godot editor. It'll do the same thing for
+you.

diff --git a/docs/index.md b/docs/index.md
index 4c10443..88d3f70 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -9,12 +9,6 @@ hide:
**_-- TypeScript/JavaScript Support for Godot 4.x by leveraging the high-performance capabilities of V8 to bring the delightful development experience of TypeScript into Godot.
--_**
-Supports JavaScript engines:
-
-- V8
-- QuickJS
-- JavaScriptCore
-- Directly run scripts on the host browser JS VM when porting to web.

@@ -34,29 +28,6 @@ Read the [getting-started](documentation/getting-started.md).
- [Worker threads](documentation/experimental/worker.md) (limited support) (**experimental**)
- Asynchronously loaded modules (limited support) (_temporarily only available in v8.impl, quickjs.impl_)
-## Getting the engine
-
-No installation or setup necessary.
-The binaries for download are the complete, usable Godot editor
-and engine with JavaScript/TypeScript language support.
-
-### Binary downloads
-
-Download the binaries from the [Releases](https://github.com/godotjs/GodotJS/releases).
-
-### Choose your engine
-
-Before initiating, make sure to select the JavaScript runtime you prefer between `v8`, `QuickJS` and `Web` (See [Supported Platforms](#supported-platforms)):
-
-- `v8` is proven to be one of the most powerful and high-performance JavaScript runtimes.
-- `QuickJS` is a remarkable and lightweight option.
-- `JavaScriptCore` is the built-in JavaScript engine for WebKit and bundled with macOS/iOS.
-- `Web` is only suitable when building for Web. All scripts run on the host browser JS VM rather than an additional interpreter.
-
-### Building from source
-
-In some cases you want or need to build the engine from source.
-Read the [Building from Source](documentation/building-from-source/) documentation in this case.
## Examples
diff --git a/docs/javascripts/release-selector.js b/docs/javascripts/release-selector.js
new file mode 100644
index 0000000..b03cab5
--- /dev/null
+++ b/docs/javascripts/release-selector.js
@@ -0,0 +1,295 @@
+class ReleaseSelector {
+ constructor() {
+ this.releases = [];
+ this.assets = [];
+ this.init();
+
+ this.osNames = {
+ windows: "Windows",
+ linux: "Linux",
+ macos: "macOS",
+ android: "Android",
+ ios: "iOS",
+ "web-nothreads": "Web (No Threads)",
+ web: "Web",
+ };
+
+ this.engines = {
+ v8: "V8",
+ "qjs-ng": "QuickJS NG",
+ };
+
+ this.targets = {
+ editor: "Editor",
+ "template-release": "Release Template",
+ "template-debug": "Debug Template",
+ };
+ }
+
+ async init() {
+ await this.fetchReleases();
+ this.renderSelectors();
+ this.bindEvents();
+ }
+
+ async fetchReleases() {
+ try {
+ const response = await fetch(
+ "https://api.github.com/repos/godotjs/GodotJS/releases",
+ );
+ this.releases = await response.json();
+ this.parseAssets();
+ } catch (error) {
+ console.error("Failed to fetch releases:", error);
+ }
+ }
+
+ parseAssets() {
+ this.assets = [];
+
+ this.releases.forEach((release) => {
+ release.assets.forEach((asset) => {
+ const os = Object.keys(this.osNames).find((key) =>
+ asset.name.includes(key),
+ );
+ const jsEngine = Object.keys(this.engines).find((key) =>
+ asset.name.includes(key),
+ );
+ const target = Object.keys(this.targets).find((key) =>
+ asset.name.includes(key),
+ );
+
+ this.assets.push({
+ name: asset.name,
+ downloadUrl: asset.browser_download_url,
+ os: os,
+ target: target,
+ jsEngine: jsEngine,
+ releaseTag: release.tag_name,
+ releaseDate: release.published_at,
+ isPrerelease: release.prerelease,
+ });
+ });
+ });
+ }
+
+ getUniqueValues(key, filters = {}) {
+ const filteredAssets = this.getFilteredAssets(filters);
+ return [...new Set(filteredAssets.map((asset) => asset[key]))].sort();
+ }
+
+ getFilteredAssets(filters) {
+ return this.assets.filter((asset) => {
+ return Object.entries(filters).every(
+ ([key, value]) => !value || asset[key] === value,
+ );
+ });
+ }
+
+ renderSelectors() {
+ const container = document.getElementById("release-selector");
+ if (!container) return;
+
+ const osOptions = this.getUniqueValues("os");
+ const targetOptions = this.getUniqueValues("target");
+ const jsEngineOptions = this.getUniqueValues("jsEngine");
+
+ container.innerHTML = `
+