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.
Repository languagesTypeScript 81.85%7
Shares calculated from GitHub Linguist bytes.
| Language | % | Bytes |
|---|---|---|
| TypeScript | 5,693,766 | |
| SCSS | 739,993 | |
| Rust | 449,445 | |
| Python | 38,598 | |
| JavaScript | 33,740 | |
| HTML | 981 |
1 more languages
| NSIS | 0% | 119 |
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
testnode --import ./scripts/register-ts-node.mjs --test "src/**/*.test.ts"linteslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fixtypechecknpm run typecheck:node && npm run typecheck:webstartelectron-vite previewdevelectron-vite devbuildnpm 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
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.
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.
- React renderer
- Electron process boundary
- Main-process services
- Native addon
- 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.

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
CheckCloudSaveCustomPathOverlapInput(struct) ·native/hydra-native/src/cloud_save/custom_path_overlap.rs:14CheckCloudSaveCustomPathOverlapResult(struct) ·native/hydra-native/src/cloud_save/custom_path_overlap.rs:30CanonicalSnapshotVariant(struct) ·native/hydra-native/src/cloud_save/hashing/aggregate.rs:11CanonicalSnapshotFile(struct) ·native/hydra-native/src/cloud_save/hashing/aggregate.rs:22CanonicalSnapshot(struct) ·native/hydra-native/src/cloud_save/hashing/aggregate.rs:32HashFilesBestEffortResult(struct) ·native/hydra-native/src/cloud_save/hashing/batch.rs:12SnapshotAggregateHashFile(struct) ·native/hydra-native/src/cloud_save/hashing/types.rs:6BuildSnapshotAggregateHashInput(struct) ·native/hydra-native/src/cloud_save/hashing/types.rs:15LocalFileHashCacheEntry(struct) ·native/hydra-native/src/cloud_save/hashing/types.rs:22HashedLocalFile(struct) ·native/hydra-native/src/cloud_save/hashing/types.rs:33HashFilesResult(struct) ·native/hydra-native/src/cloud_save/hashing/types.rs:43SnapshotVariant(struct) ·native/hydra-native/src/cloud_save/identity/mod.rs:15
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