Skip to content

hydra: An Electron application across process boundaries

This Hydra fork is a desktop launcher with an Electron shell and React interface. Its build also includes a native addon and Python RPC component. Those boundaries explain why the project has several toolchains rather than one frontend build.

Application and tools Fork
  • Updated
  • TypeScript · 81.85%
  • MIT
Upstream credited
Repository languagesTypeScript 81.85%7

Shares calculated from GitHub Linguist bytes.

Language%Bytes
TypeScript81.85%5,693,766
SCSS10.64%739,993
Rust6.46%449,445
Python0.55%38,598
JavaScript0.49%33,740
HTML0.01%981
1 more languages
NSIS0%119

GitHub · README · Language statistics

Overview

Why it exists

Desktop Electron and TypeScript application orchestrating gaming library metadata and downloads.

Best fit

Open-source alternative game launcher and library organizer.

Getting started

These commands come from the repository documentation. They were not run during this review.

Tasks declared in manifests

package.json

test
node --import ./scripts/register-ts-node.mjs --test "src/**/*.test.ts"
lint
eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix
typecheck
npm run typecheck:node && npm run typecheck:web
start
electron-vite preview
dev
electron-vite dev
build
npm run typecheck && electron-vite build

Repository references

Excerpts from the repository’s guides, in their original language. Links open the inspected source revision.

Prerequisites and first run

Build from source and contributing

README.md

Please, refer to our Documentation pages: docs.hydralauncher.gg
Read the full instructions ↗

Local development requirements

README.md

  • Node.js + Yarn
  • Python 3.9+ with pip install -r requirements.txt
  • Rust toolchain (for hydra-native) After installing dependencies, postinstall now builds the Rust native addon automatically (hydra-native/hydra-native.node). Packaging scripts (yarn build:win, yarn build:mac, yarn build:linux, yarn build:unpack) now run yarn build:python-rpc automatically.
Read the full instructions ↗
Source documentation

1 documents read from 1 candidates.

Features and components 2

Main and renderer
package.json points Electron to out/main/index.js. Separate TypeScript checks cover node and web code. Electron-Vite builds the desktop application, while React and the UI libraries belong to the renderer side.
Native and Python modules
build:native runs a dedicated addon script. build:python-rpc packages python_rpc separately, and platform packaging invokes both paths. Installing JavaScript dependencies alone is therefore not the complete release build.

Architecture

The components and their connections remain available as text. The diagram adds an interactive view.

System context Context
  1. React renderer
  2. Electron process boundary
  3. Main-process services
  4. Native addon
  5. Python RPC component

Links verified in the repository.

Mermaid Interactive diagram (loads on open)

System overview of the components and connections verified in the repository.

Static architecture view for hydra
Static preview. The interactive diagram replaces it after Mermaid loads.
flowchart LR
  n0["React renderer"]
  n1["Electron process boundary"]
  n2["Main-process services"]
  n3["Native addon"]
  n4["Python RPC component"]
  n0 --> n1
  n1 --> n2
  n2 --> n3
  n2 --> n4
Text version of the diagram
  • React renderer → Electron process boundary
  • Electron process boundary → Main-process services
  • Main-process services → Native addon
  • Main-process services → Python RPC component
Follow one path through the code

Start with the build scripts and distinguish renderer compilation, native-addon compilation and Python packaging. Then inspect the process API for a particular feature; package dependencies alone do not identify which process owns it.

Types and file structure

1254 declared types, with 12 in the base-relationship overview.

Type diagram
classDiagram
direction TB
class t497b591ddfee["CheckCloudSaveCustomPathOverlapInput"] {
  <<struct>>
}
class t546b0e1d60a3["CheckCloudSaveCustomPathOverlapResult"] {
  <<struct>>
}
class t4193b7c58165["CanonicalSnapshotVariant"] {
  <<struct>>
}
class t9be9d73de926["CanonicalSnapshotFile"] {
  <<struct>>
}
class t9e1524c40c18["CanonicalSnapshot"] {
  <<struct>>
}
class te94442ffd312["HashFilesBestEffortResult"] {
  <<struct>>
}
class t7de7357401f4["SnapshotAggregateHashFile"] {
  <<struct>>
}
class tba32df98af48["BuildSnapshotAggregateHashInput"] {
  <<struct>>
}
class t8896e2a0569a["LocalFileHashCacheEntry"] {
  <<struct>>
}
class t15b26b607bab["HashedLocalFile"] {
  <<struct>>
}
class t111381412a72["HashFilesResult"] {
  <<struct>>
}
class t0ff949433faa["SnapshotVariant"] {
  <<struct>>
}

Unresolved bases remain labelled; full signatures are not reconstructed.

Type index

Reference

1335 / 1335 eligible files read (1725 in the tree); 0 oversized, 0 failed reads and 1 syntax diagnostics.

What the scan covers

Known dependency/build folders, credential files and binaries are excluded. The scan covers READMEs, recognized manifests and parser-supported source files.

Linguist statistics cover the whole repository and may include other languages.

File map
flowchart TD
  root["hydra"]
  f0["README.md"]
  root --> f0
  f1["electron.vite.config.ts"]
  root --> f1
  f2["package.json"]
  root --> f2
  f3[".eslintrc.cjs"]
  root --> f3
  f4[".prettierrc.cjs"]
  root --> f4
  f5["commitlint.config.js"]
  root --> f5
  f6["requirements.txt"]
  root --> f6
  f7["python_rpc/main.py"]
  root --> f7
  f8["python_rpc/setup.py"]
  root --> f8
  f9["python_rpc/torrent_downloader.py"]
  root --> f9
  f10["scripts/build-native-addon.cjs"]
  root --> f10
  f11["scripts/inspect-ps1-memcard.cjs"]
  root --> f11
  f12["scripts/inspect-ps2-memcard.cjs"]
  root --> f12
  f13["scripts/postinstall.cjs"]
  root --> f13
  f14["scripts/register-ts-node.mjs"]
  root --> f14
  f15["scripts/upload-build.cjs"]
  root --> f15

Files to read 3

References