{"id":50780534,"url":"https://github.com/yandy-r/crosshook","last_synced_at":"2026-06-12T03:01:23.715Z","repository":{"id":352283831,"uuid":"1211799445","full_name":"yandy-r/crosshook","owner":"yandy-r","description":"Native Linux trainer launcher for Steam and Proton games, built for desktop and Steam Deck.","archived":false,"fork":false,"pushed_at":"2026-06-12T01:13:31.000Z","size":12119,"stargazers_count":0,"open_issues_count":16,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-12T02:13:38.190Z","etag":null,"topics":["appimage","desktop-app","game-modding","gaming","linux","proton","react","rust","steam","steam-deck","tauri","trainer-launcher","typescript","wine"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yandy-r.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-15T18:59:32.000Z","updated_at":"2026-06-12T01:13:35.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/yandy-r/crosshook","commit_stats":null,"previous_names":["yandy-r/crosshook"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/yandy-r/crosshook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandy-r%2Fcrosshook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandy-r%2Fcrosshook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandy-r%2Fcrosshook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandy-r%2Fcrosshook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yandy-r","download_url":"https://codeload.github.com/yandy-r/crosshook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yandy-r%2Fcrosshook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34226629,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appimage","desktop-app","game-modding","gaming","linux","proton","react","rust","steam","steam-deck","tauri","trainer-launcher","typescript","wine"],"created_at":"2026-06-12T03:00:50.227Z","updated_at":"2026-06-12T03:01:23.666Z","avatar_url":"https://github.com/yandy-r.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CrossHook\n\n[![Download CrossHook](https://img.shields.io/badge/Download-CrossHook_Flatpak-00C853?style=for-the-badge)](https://github.com/yandy-r/crosshook/releases)\n[![GitHub Release](https://img.shields.io/github/v/release/yandy-r/crosshook?style=for-the-badge\u0026color=blue\u0026label=Latest)](https://github.com/yandy-r/crosshook/releases)\n[![License](https://img.shields.io/github/license/yandy-r/crosshook?style=for-the-badge\u0026color=green)](LICENSE)\n[![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20Steam%20Deck-blue?style=for-the-badge\u0026logo=linux)](https://github.com/yandy-r/crosshook)\n\nCrossHook is a native Linux trainer launcher for Steam and Proton games. It runs directly on your\nLinux desktop or Steam Deck -- no WINE needed for CrossHook itself -- and orchestrates trainers,\nmods, and patches that run under the game's own Proton/WINE prefix.\n\nCrossHook also includes an `Install Game` flow inside the Profile panel. It installs Windows games\nthrough direct `proton run`, defaults new prefixes under `~/.local/share/crosshook/prefixes/\u003cslug\u003e`,\nand then returns you to the normal profile editor so you can review the generated profile before\nsaving it.\n\n## Contents\n\n- [Download](#download)\n- [Quick Start](#quick-start)\n- [Launch Modes](#launch-modes)\n- [Features](#features)\n- [Docs](#docs)\n- [Build](#build)\n- [Release Notes](#release-notes)\n- [Contributing](#contributing)\n\n## Download\n\nGet the latest Flatpak bundle from [GitHub Releases](https://github.com/yandy-r/crosshook/releases).\nCurrent releases publish Flatpak bundles only.\n\n```bash\n# Download the .flatpak bundle from the release, then install and run it\nflatpak install --user --reinstall ./CrossHook_*.flatpak\nflatpak run dev.crosshook.CrossHook\n```\n\nThe Flatpak bundle is the supported in-repo distribution package.\n\n## Quick Start\n\n1. Download the Flatpak bundle from the [Releases page](https://github.com/yandy-r/crosshook/releases).\n2. Install or update it: `flatpak install --user --reinstall ./CrossHook_*.flatpak`\n3. Launch it: `flatpak run dev.crosshook.CrossHook`\n4. Select a game from the auto-populated Steam library.\n5. Choose a trainer or mod, pick a launch mode, and hit Launch.\n\nFor the full setup walkthrough, see the [Quickstart guide](docs/getting-started/quickstart.md).\n\nFor Steam/Proton-specific workflow details, see the\n[Steam / Proton trainer workflow](docs/features/steam-proton-trainer-launch.doc.md).\n\n## Launch Modes\n\nCrossHook supports three launch modes depending on how your game and trainer need to run.\n\n### Steam App Launch\n\nLaunches the game through Steam using `steam -applaunch \u003cappid\u003e`, then runs the trainer against the\nsame Proton prefix. By default the trainer is launched from its original directory so stateful\nbundles like Aurora keep one shared install, and profiles can opt into `Copy into prefix` when\nneeded for compatibility. Use this when Steam must own the game launch (DRM, cloud saves, overlay).\n\n### Proton Run\n\nRuns the trainer directly using `proton run \u003ctrainer.exe\u003e` against the game's compatdata prefix.\nUseful when you want to launch a trainer standalone without going through Steam, or when the game is\nalready running.\n\nProfiles can choose whether the trainer runs from its current directory or is copied into the target\nprefix before launch. Exported standalone trainer launchers follow the same setting.\n\nThe same direct Proton path is used by the `Install Game` workflow in the Profile panel. That flow\nwrites the prefix under `~/.local/share/crosshook/prefixes/\u003cslug\u003e` and hands you back a normal\n`GameProfile` for review and save.\n\nProfiles that use `proton_run` also show a `Launch Optimizations` panel in the right column. It uses\na curated v1 option catalog, shows an info tooltip on every visible option, and autosaves checkbox\nchanges only after the profile already exists on disk.\n\n### Native\n\nFor trainers or tools that run natively on Linux without WINE/Proton. CrossHook launches them as\nregular Linux processes alongside the game.\n\n## Features\n\n### Profiles and Launch\n\n- **Steam Library Auto-Populate** -- Discovers installed Steam games, their App IDs, Proton\n  versions, and compatdata paths automatically.\n- **Profile Management** -- Save and load launch configurations per game. Switch between trainer\n  setups instantly.\n- **Profile Rename with Overwrite Protection** -- Rename profiles with launcher cascade and\n  collision prevention.\n- **Profile Duplication** -- Clone profiles with unique name generation.\n- **Pinned Profiles** -- Pin favorite profiles for quick launch access on the Profiles and Launch\n  pages.\n- **Install Game Workflow** -- Install a Windows game from the Profile panel, review the generated\n  profile, and save it explicitly after install.\n- **Update Game Panel** -- Apply patches to Proton prefixes for game updates directly from the\n  profile.\n- **Dry Run / Preview Launch Mode** -- Preview the exact commands CrossHook will execute before\n  actually launching.\n- **Post-Launch Failure Diagnostics** -- Enhanced launch state management with helper log path\n  tracking and failure analysis.\n\n### Launch Configuration\n\n- **Launch Optimizations** -- Adjust curated `proton_run` tweaks with readable labels, per-option\n  info tooltips, and autosave for already-saved profiles.\n- **Extended Launch Optimization Catalog** -- Expanded curated optimization toggles with\n  vendor-specific (AMD, NVIDIA, Intel) options.\n- **Proton Selector** -- Choose which Proton version to use for each trainer, with auto-detection of\n  installed versions.\n- **Compatibility Viewer** -- View game/trainer compatibility information and known working\n  configurations.\n\n### Launcher Export and Community\n\n- **Launcher Export** -- Generate standalone shell scripts and `.desktop` entries from any profile\n  for one-click launching without opening CrossHook.\n- **Stale Launcher Detection** -- Detect when exported launchers are out of sync with the current\n  profile state.\n- **Community Profile Sharing** -- Browse, import, and export launch profiles with other users via\n  Git-based taps.\n- **Community Profile Export** -- Export shareable profiles from the GUI directly to community taps.\n- **Tap Commit Pinning** -- Pin community taps to specific commits with pin/unpin UI for\n  reproducible installs.\n\n### Diagnostics and Health\n\n- **Health Dashboard** -- Profile diagnostics page showing health scores, staleness detection, trend\n  analysis, and sortable metadata columns for all profiles.\n- **Diagnostic Bundle Export** -- Export a diagnostic bundle of system and app state for\n  troubleshooting.\n- **SQLite Metadata Layer** -- Persistent metadata tracking for stable profile identity, operational\n  history (launches, launchers), community catalog, collections, cache, and usage insights.\n\n### UI and Platform\n\n- **Adaptive Deck Layout** -- Responsive layout that adapts to Steam Deck Gaming Mode for\n  comfortable big-picture use.\n- **Gamepad Navigation** -- Full controller and touchscreen support for Steam Deck Gaming Mode.\n- **Console Log Viewer** -- See exactly what commands CrossHook executes, with real-time process\n  output for debugging.\n- **Dark Theme** -- Native dark UI that fits in on Steam Deck and Linux desktops.\n\n## Docs\n\n- [Quickstart guide](docs/getting-started/quickstart.md)\n- [Steam / Proton trainer workflow](docs/features/steam-proton-trainer-launch.doc.md)\n- [Profile duplication](docs/features/profile-duplication.doc.md)\n\n## Build\n\nCrossHook is built with [Tauri v2](https://v2.tauri.app/) (Rust backend + React/TypeScript\nfrontend). Building from source requires Rust, Node.js, and system libraries for WebKitGTK.\n\n### Prerequisites\n\nInstall build dependencies automatically using the included script:\n\n```bash\n# Supports pacman, apt, dnf, and zypper\n./scripts/install-native-build-deps.sh\n```\n\nOr install manually. You need: `cargo`, `npm`, `flatpak`, `flatpak-builder`, and development\nlibraries for GTK3, libsoup3, WebKitGTK 4.1, and OpenSSL. Flatpak packaging also uses ImageMagick\nfor regenerating icons from `assets/*.svg` before bundling.\n\n### Build the Flatpak Bundle\n\n```bash\n./scripts/build-flatpak.sh --rebuild --strict\n```\n\nThe Flatpak helper builds the production Tauri binary, stages runtime helpers and generated icons,\nand produces a `.flatpak` bundle. For Flatpak packaging details, see\n[packaging/flatpak/README.md](packaging/flatpak/README.md).\n\nTo install or update the locally built bundle immediately:\n\n```bash\n./scripts/build-flatpak.sh --rebuild --install --strict\nflatpak run dev.crosshook.CrossHook\n```\n\n### Development\n\n```bash\n./scripts/dev-native.sh\n```\n\nThis starts the Tauri dev server with hot-reload for the React frontend and Rust backend.\n\n### Browser Dev Mode\n\nThe React frontend can also run as a plain Vite dev server at `http://localhost:5173`\nwith all IPC calls served by hand-rolled mock handlers -- no Rust toolchain required.\nStart it with:\n\n```bash\n./scripts/dev-native.sh --browser\n```\n\nThis is an iteration tool, not a parity environment. WebKitGTK (the Tauri WebView) and\nChromium differ in scroll physics, `color-mix()` support, and font rendering, so real\nTauri behavior must always be re-verified with `./scripts/dev-native.sh` (no flag)\nbefore merging UI changes. For security, the server binds loopback only;\n`--host 0.0.0.0` is unsupported by policy.\n\nContributors adding new `#[tauri::command]` handlers should register a matching mock\nin the [mock handler registry](src/crosshook-native/src/lib/mocks/README.md). Production\nRelease builds enforce a `verify:no-mocks` CI sentinel that rejects any bundle\ncontaining mock code -- the feature has zero production surface.\n\n### CI\n\nThe [release](.github/workflows/release.yml) GitHub Actions workflow builds and uploads the Flatpak\nbundle to a GitHub Release on every version tag push (`v*`).\n\n## Release Notes\n\n- Releases publish a **Flatpak** bundle for x86_64 Linux.\n- Flatpak is the supported packaged distribution format for CrossHook.\n- Legacy AppImage-era host data is imported into the Flatpak sandbox on first launch as a one-way\n  compatibility bridge for existing users. This does not mean AppImage remains an active\n  distribution target.\n- User state (profiles, settings) is stored in `~/.config/crosshook/` or the XDG config directory,\n  separate from the application binary.\n- Install prefixes default under `~/.local/share/crosshook/prefixes/\u003cslug\u003e` and are only saved into\n  a profile after review in the Profile panel.\n- macOS support is planned for a future release.\n\n## Contributing\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style,\ncommit conventions, and the pull request process.\n\nFor bugs and feature requests, use the\n[issue templates](https://github.com/yandy-r/crosshook/issues/new/choose). Questions belong in\n[Discussions](https://github.com/yandy-r/crosshook/discussions).\n\n## License\n\nCrossHook is open-source software under the [MIT License](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandy-r%2Fcrosshook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyandy-r%2Fcrosshook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyandy-r%2Fcrosshook/lists"}