{"id":37752942,"url":"https://github.com/vxpm/lazuli","last_synced_at":"2026-03-02T03:09:12.239Z","repository":{"id":313836796,"uuid":"1039194518","full_name":"vxpm/lazuli","owner":"vxpm","description":"GameCube emulator","archived":false,"fork":false,"pushed_at":"2026-03-02T01:34:00.000Z","size":17880,"stargazers_count":228,"open_issues_count":7,"forks_count":3,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-02T01:59:19.167Z","etag":null,"topics":["emulation","emulator","gamecube","rust"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vxpm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"licenses/GPL-3.0-only.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-16T17:20:51.000Z","updated_at":"2026-03-01T23:27:23.000Z","dependencies_parsed_at":"2025-09-25T16:27:55.345Z","dependency_job_id":"24d1209a-9688-42f4-8fcc-ca9b98c6fe71","html_url":"https://github.com/vxpm/lazuli","commit_stats":null,"previous_names":["vxpm/hemisphere","vxpm/lazuli"],"tags_count":40,"template":false,"template_full_name":null,"purl":"pkg:github/vxpm/lazuli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vxpm%2Flazuli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vxpm%2Flazuli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vxpm%2Flazuli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vxpm%2Flazuli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vxpm","download_url":"https://codeload.github.com/vxpm/lazuli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vxpm%2Flazuli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29991312,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-02T01:47:34.672Z","status":"online","status_checked_at":"2026-03-02T02:00:07.342Z","response_time":60,"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":["emulation","emulator","gamecube","rust"],"created_at":"2026-01-16T14:25:06.789Z","updated_at":"2026-03-02T03:09:12.234Z","avatar_url":"https://github.com/vxpm.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg width=\"128\" height=\"128\" alt=\"lazuli\" src=\"./resources/logo_256.png\" /\u003e\n    \u003cbr\u003e\n    \u003ch1\u003eLazuli\u003c/h1\u003e\n\u003c/div\u003e\n\n\u003cimg src=\"./resources/screenshots/sunshine.webp\" width=\"23%\"\u003e\u003c/img\u003e \n\u003cimg src=\"./resources/screenshots/luigi.webp\" width=\"23%\"\u003e\u003c/img\u003e \n\u003cimg src=\"./resources/screenshots/mparty.webp\" width=\"23%\"\u003e\u003c/img\u003e \n\u003cimg src=\"./resources/screenshots/wario.webp\" width=\"23%\"\u003e\u003c/img\u003e \n\nA work-in-progress GameCube emulator :)\n\n- [Status](#status)\n- [Building](#building)\n- [Usage](#usage)\n- [Contributing](#contributing)\n- [Random Q\u0026A](#random-qa)\n- [Licensing](#licensing)\n\n# Status\n\n`lazuli` is still very much a toy, but it's able to boot multiple commercial games and lots of\nhomebrew. Here's a very small list of games that are frequently tested and go in game with decent graphics:\n\n- Super Mario Sunshine\n- Luigi's Mansion\n- The Legend of Zelda: The Wind Waker\n- Crash Bandicoot: The Wrath of Cortex\n- WarioWare, Inc.: Mega Party Game$!\n\nIt's worth noting that these are _not_ the only games that work. Other games might or might not work,\nmost are untested.\n\nOn a more technical note, here's what `lazuli` currently offers:\n\n- `cranelift` based PowerPC JIT compiler\n- `cranelift` based JIT vertex parser compiler\n- DSP LLE interpreter\n- `wgpu` based renderer backend\n- `cpal` based audio backend\n- `wesl` based shader generator/compiler\n- IPL HLE used to boot games without an IPL ROM\n- A very simple UI for debugging\n\nPerformance is okayish. The biggest bottleneck _by far_ is the DSP LLE interpreter. A JIT is planned,\nbut not before most bugs in the interpreter are fixed (audio works fine in some games, and is completely\nbroken in others - mostly ones that use ADPCM).\n\n# Building\n\nTo build lazuli, you'll need the latest nightly rust toolchain (which can be obtained through `rustup`)\nand the `just` command runner.\n\nFirst, run `just ipl-hle build` to build the ipl-hle binary, which is embedded into the lazuli executable.\nThis should generate `ipl-hle.dol` inside a `local/` directory in the workspace.\n\nThen, build the main lazuli app by executing `cargo build` (with any optional flags you might want,\nsuch as `--release`). This should produce an `app` executable inside `target/chosen_profile`.\n\n# Usage\n\n## Obtaining Lazuli\n\nYou can obtain a `lazuli` executable from the [releases tab](https://github.com/vxpm/lazuli/releases)\nor by building it yourself. `lazuli` supports Linux and Windows as first-class OSes, with macOS being \nsupported on a best-effort basis.\n\n### Running on macOS\n\nIf you have built lazuli yourself, you are ready to go. But if you have grabbed one of the nightly\nreleases, you need to extract the zip file to your desired folder and remove it from quarantine:\n\n```sh\nxattr -d com.apple.quarantine lazuli\n```\n\n## Running a game\n\nOnce you have a `lazuli` executable (either by building it or by grabbing one of the nightly releases),\nyou can run it in the terminal with a path to the ROM you want to run (supports `.iso` and `.rvz`):\n\n```sh\nlazuli --rom path/to/gamecube/game.iso\n```\n\nYou do not need an IPL ROM (the \"bios\") to run games, as game loading is HLEd by `lazuli`. However,\nsome games might use IPL's embedded font (in which case the game might not even boot without it).\nTo pass an IPL:\n\n```sh\nlazuli --ipl path/to/ipl.bin --rom path/to/gamecube/game.iso\n```\n\nYou can also pass `--ipl-lle` to skip the high-level emulation of the IPL (IPL-HLE) and instead\nuse the provided IPL ROM to boot. This will take you to the system menu, from where you can boot \nthe game.\n\nFor more CLI options, `--help` is your friend.\n\n## Inputs\n\nBoth gamepads and keyboard input are supported. When a gamepad is detected, it is automatically set\nas the active input source - otherwise, the keyboard will be used. Mappings cannot be customized yet.\n\nKeyboard Mappings:\n- Left Analog: W A S D\n- Right Analog (C): H J K L\n- A B: B N\n- X Y: C V\n- Z: R\n- Start: Space\n- D-Pad: Arrows\n- Left Trigger: Q/T\n- Right Trigger: E/Y\n\n## Debugging\n\nThe UI has many features that are useful for debugging. With it, you can set breakpoints, watch memory\nvariables, analyze call stacks and more. To open windows, click the `view` button in the top-left corner\nof the screen (it's in the top bar).\n\n# Contributing\n\nContributions are very welcome! You do not need to be an expert on the GameCube's internals to contribute,\nthere's multiple other ways you could help:\n\n- Improving UI\n- Optimizing performance\n- Fixing bugs\n- Documenting stuff\n- And more!\n\nIf you're interested, **please** read [the contribution guidelines](./CONTRIBUTING.md) before getting\nstarted.\n\n# Random Q\u0026A\n\nHere's some random questions and their answers. I'd call this a FAQ but no one has ever asked these\nquestions so I'm not sure it would be appropriate :p\n\n## Is there any reason I should use this over Dolphin?\n\nNo, not yet. Dolphin is a thousand times more mature and what you should use if you want to actually\nplay games.\n\n## Is this a reimplementation of Dolphin in Rust?\n\nNo, this is built from the ground up. No dolphin code is reused/stolen/whatever.\n\n## Does this support Wii?\n\nNot yet. It's a long-term goal, since the Wii is very similar to the GameCube. There's currently no\ninfrastructure for it, though.\n\n## What is `hemisphere`?\n\nThe old name of this project. I renamed it to `lazuli` because it's cute.\n\n# Licensing\n\nMost of the emulator is licensed under GPLv3, but some library crates are licensed under MIT instead.\nCheck the `license` property of the `Cargo.toml` of each crate to verify it's license. The license\ntext can be found under the `licenses/` directory.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvxpm%2Flazuli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvxpm%2Flazuli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvxpm%2Flazuli/lists"}