[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-106259":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":22,"hasPages":22,"topics":24,"createdAt":10,"pushedAt":27,"updatedAt":28,"readmeContent":29,"aiSummary":10,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":30,"discoverSource":31},106259,"gta5mobile-android","bytarch\u002Fgta5mobile-android","bytarch","GTA-5-Android Launcher Source-Code BytArch Port","",null,"Rust",55,13,6,33,0,2,4,8,49.74,"GNU General Public License v3.0",false,"main",[25,26],"gta-v-launcher","gta-v-port","2026-10-22 22:36:16","2026-11-02 14:22:45","# BytArch GTA-V\n\nA native port of the GTA V web build. The game ships as WebAssembly; this throws\nthe browser layer away and runs the same `game.wasm` as an ordinary native app —\n[wasmtime](https:\u002F\u002Fwasmtime.dev) for the code, [wgpu](https:\u002F\u002Fwgpu.rs) on Vulkan\nfor Android and Metal on Apple platforms.\n\nUnofficial. No game content is included: you bring your own copy of the web\nport's data.\n\n- **Android (working target)** — ARM64, Android 10+, Vulkan. See below.\n- **iOS \u002F macOS** — Metal, JIT on macOS, AOT on iOS. Build scripts at the bottom.\n\n## Android\n\n**Download:** [BytArch GTA-V for Android 0.1.12-patch](https:\u002F\u002Fgithub.com\u002Fbytarch\u002Fgta5mobile-android\u002Freleases\u002Ftag\u002Fandroid-0.1.12-patch)\n- `BytArch-GTA-V-android-0.1.12-patch-debug.apk`, arm64-v8a, Android 10+, debug\n  signed (sideloading only). Sideload it, or `adb install -r` over an older copy.\n\nPush to `main` and GitHub Actions builds an APK; the `Muguet-Android-arm64-debug`\nartifact appears on the completed run. Locally: `sh make-android.sh` or\n`.\\make-android.ps1`, output at\n`android\u002Fapp\u002Fbuild\u002Foutputs\u002Fapk\u002Fdebug\u002Fapp-debug.apk`.\n\n### Game data\n\nThe launcher never downloads game files. Point it at data you already have, in\neither form — the layout is the folder holding `data\u002F` and `b\u002F\u003Cbuild>\u002F`:\n\n```\ndata\u002Fmanifest.json\nb\u002F\u003Cbuild>\u002Fshaders\u002Findex.json\nb\u002F\u003Cbuild>\u002Fgame.wasm        (only for the native wasm2c engine)\n```\n\n- **Use a game files folder** — pick a folder that already holds `data\u002F` and\n  `b\u002F`. It is used where it lies, so nothing is copied and no free space is\n  needed. The game folder does not have to be the picked one: the launcher\n  looks inside what you picked, so the release folder (`GrandV-assets`, which\n  holds `mirror\u002Fplaygta5.com\u002Fdata\u002F` and `...\u002Fb\u002F`) works as it is.\n- **Import game ZIP** — pick a `.zip` of the same tree. It is extracted into app\n  storage, which needs free space for the archive and the extracted data alike.\n  A wrapper folder inside the archive is stripped, so the release ZIP works too.\n\nThe folder must be on internal storage (`\u002Fstorage\u002Femulated\u002F0\u002F...`). Android\nhands an app a folder permission but still refuses to `open()` files another app\nowns, which is exactly what data copied over by a downloader or torrent app\nlooks like — so the launcher offers **Grant file access** (\"All files access\")\nwhen that happens.\n\n### Graphics\n\nEvery graphics knob the web launcher exposes is in the launcher, under\n**Graphics**, with the same names, plus Low \u002F Engine default \u002F Max presets.\nThey are sent to the engine as arguments rather than written into the save file,\nbecause the engine rewrites its own settings on every save.\n\nTexture, reflection, water, particle and grass quality; scenery, pedestrian and\nvehicle detail; city density; variety; post FX; motion blur; depth of field;\nshadow quality and softness; ambient occlusion; render distance; fog volumes;\nparticle and long shadows; loading ahead; distant lights.\n\nFor Wasmtime black-screen reports, two independent switches are available\nunder Graphics:\n\n- **Force software clip distances** emulates clipping in the fragment stage.\n  Adreno devices get this automatically: their Vulkan driver loses the device\n  on hardware clip distances, which is what left the world black.\n- **Decode BC textures on CPU** tests the existing decompression fallback even\n  when the GPU advertises native BC support. This uses more memory.\n\nExport logs for each run. The logs record the selected diagnostics, GPU driver,\npipeline creation failures and device-loss reason.\n\n**Low (phone default)** turns shadows off entirely, pins detail to the floor and\npulls the render distance to 500 m. Measured on a Dimensity 8000, pinning LOD\nalone cut draw calls from 2082 to 579 per frame; shadow and reflection passes\naccount for most of the rest.\n\n### Multiplayer\n\nMultiplayer uses the Grand-V relay — the same transport as the web version, so\na room can be shared with browser players. In the launcher: enable\n**Multiplayer**, then fill in the relay address (`ws:\u002F\u002Fhost:8012\u002Frelay`), the\nroom name, and the access code from whoever is hosting. Plain `ws:\u002F\u002F` for now, no\nTLS.\n\nThe relay carries pose only: position, rotation and model at 20 Hz. Rooms hold\ntwo players. That is the whole protocol — see `src\u002Frelay.rs` for the client and\n[bytarch\u002FGrand-V-Android-Port](https:\u002F\u002Fgithub.com\u002Fbytarch\u002FGrand-V-Android-Port)\nfor the server.\n\n### Native engine core\n\nA separate build path compiles the upstream\n[gta5-ios-port](https:\u002F\u002Fgithub.com\u002Fkevinerikjs\u002Fgta5-ios-port) engine core with\nwasm2c, running `game.wasm` as native ARM64 C instead of interpreting it. It is\nnot the default build, and it is still the rougher of the two.\n\nGraphics go through the same wgpu renderer as the wasmtime path: the engine\ncore's graphics worker hands its command ring to `muguet_gpu_start` in the Rust\nlibrary, and the engine's own futex (wait on the ring head, wake the producer)\nis registered with the renderer, so the ring protocol is the one the browser's\nwgpu worker speaks. The renderer is resolved with `dlsym`, so the engine core\nnever links against it and a build without the renderer still boots (headless).\n\n## Building for Apple platforms\n\nmacOS:\n\n```\n.\u002Fmake-app.sh\n```\n\ngives `build\u002FMuguet.app`.\n\niOS:\n\n```\nTEAM=\u003Cyour team id> .\u002Fmake-ios.sh game.zip --install\n```\n\n`--ipa` produces `build\u002FMuguet.ipa`. With a free account add `FREE=1` plus a\n`BUNDLE_ID` of your own. Install through AltStore; Sideloadly and SideStore are\nknown to be problematic.\n\n### Requirements\n\nApple Silicon Mac, macOS 14+, Rust toolchain, Xcode 26+. For iOS also\n`rustup toolchain install 1.98.1`, `rustup target add aarch64-apple-ios\n--toolchain 1.98.1`, `xcodegen` (`brew install xcodegen`), an Apple developer\naccount, and a device on iOS 15+ with ideally 8 GB of RAM.\n\n## Limitations\n\n- ARM64 only on Android, Vulkan required, Android 10+.\n- First launch compiles the game and takes several minutes; early stutter is\n  mostly loading from storage.\n- The native wasm2c engine renders through the same wgpu renderer, but it is\n  pinned to game build `8b0b5899ed` (wasm sha256 `11ca8d2c…`): a newer web\n  build of the game needs the wasm2c pins re-checked first.\n- Multiplayer is two-player pose replication over a relay you do not host.\n- iOS needs the increased memory limit entitlement; the minimap does not show;\n  story missions are single player only.\n\n## Repository layout\n\n```\nsrc\u002F            the port itself: engine host, graphics, audio, input, netcode\nandroid\u002F        Gradle app, the Java launcher UI, NDK build\napp\u002F            native wasm2c engine core (work in progress)\nios\u002F, launcher\u002F iOS and macOS shells\nvendor\u002F         patched wgpu-core and the wasm2c bridge\n```\n\n## Reporting bugs\n\n- Issue tracker: https:\u002F\u002Fgithub.com\u002Fbytarch\u002Fgta5mobile-android\u002Fissues\n- Direct contact: https:\u002F\u002Fx.com\u002FMikeJohndlvl\n\nThe launcher has both links at the bottom of its screen. Include your phone\nmodel, Android version and Vulkan driver, plus the exported logs from the\n`Export logs` button when the crash is not reproducible.\n\n## Legal\n\nThis repository contains no game assets. Users supply their own copy of the\nweb port's data, and this project neither hosts nor distributes it.\n\nContributions welcome.\n","2026-11-03 04:31:27","CREATED_QUERY"]