Contributing
3 minutes read
Getting Started
- Fork the repository
- Clone your fork
- Install prerequisites: .NET 10 SDK, Node.js 20+
- Run
dotnet buildto build everything (including frontend) - Run
dotnet runto launch
Development Workflow
- Create a feature branch from
main - Make changes following Coding Standards
- Test:
dotnet buildmust complete with 0 errors - For frontend changes, also verify
cd Frontend && npx tsc --noEmit - Commit with clear messages
- Open a Pull Request
Linux packaging icon note
Build/is generated during packaging; source icon isFrontend/public/icon.png.- For Linux packages (including Flatpak),
Scripts/publish.shgeneratesBuild/icons/with hicolor app-id icons (io.github.HyPrismTeam.HyPrism) to ensure icon export works after install. - Linux package app ID is
io.github.HyPrismTeam.HyPrism. - AppStream metadata is injected for Linux packaging from
Properties/linux/io.github.HyPrismTeam.HyPrism.metainfo.xml. - RPM repack step intentionally strips
/usr/lib/.build-idpayload and does not own system directories (/,/usr,/usr/lib) to avoid install conflicts on Fedora. - Flatpak packaging uses runtime/base
25.08; CI prepares Flathub remotes at system and user levels so flatpak-builder can install deps, then installsorg.freedesktop.Platform,org.freedesktop.Sdk, andorg.electronjs.Electron2.BaseAppat system level before build. - Linux CI prints Flatpak remotes/runtimes diagnostics to simplify troubleshooting when flatpak-bundler fails.
Adding a New Feature
Checklist
- Add/update .NET service in
Services/{Core|Game|User}/ - Register in
Bootstrapper.csif new service - Add IPC handler +
@ipcannotation inIpcService.cs - Add
@typeannotation if new TypeScript type is needed - Regenerate:
node Scripts/generate-ipc.mjs(ordotnet build) - Create React component/page in
Frontend/src/ - Add route in
App.tsxif new page - Update documentation in
Docs/ - Verify:
dotnet buildpasses with 0 errors
Adding an IPC Channel
See IPC Code Generation for the full guide.
Adding a Built-in Mirror
See Adding a Mirror for the full guide on adding a community mirror to the default set.
Critical Files
| File | Impact | Rule |
|---|---|---|
ClientPatcher.cs | Game integrity | Never modify without explicit instruction |
Program.cs | App entry point | Changes affect entire startup |
Bootstrapper.cs | DI setup | Breaking changes affect all services |
IpcService.cs | IPC bridge | Must stay in sync with frontend |
preload.js | Security boundary | Minimal changes only |
Documentation
Every change must include documentation updates:
- User docs — when UI or feature behavior changes
- Developer docs — when build/CI/workflows change
- API docs — when IPC channels are added, renamed, or removed
Both English and Russian docs should be updated.
Code Review Guidelines
- Follows coding standards (naming, braces, async suffix)
- No hardcoded values — use config, theme tokens, localization keys
- IPC changes update both C# annotations and verify generated output
- No references to deprecated
UI/directory - No manual edits to
Frontend/src/lib/ipc.ts