Contributing to Eden involves a few conventions you should follow before opening your first pull request — from getting a Git account, to adding license headers, to optimizing assets. This page walks through each step so your contribution lands cleanly.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/eden-emulator/mirror/llms.txt
Use this file to discover all available pages before exploring further.
Getting a Git account
Eden’s primary repository lives at git.eden-emu.dev. Registration is closed by default to limit spam, so you must email a request. Valid reasons to request access include:- You want to implement a specific feature or fix a specific bug.
- You have experience in a relevant area (Vulkan, macOS, audio, etc.) and want to contribute.
- You can provide insight or review on a particular subsystem.
Write your request email
Use exactly this format:Requests that are blank, generic, or appear automated will be filtered automatically.
Send the email
Email crueter@crueter.xyz with the subject and body above.
Submitting patches by email
If you prefer not to request an account, Eden also accepts email patches:Prepare your branch
Make your changes on a clean copy of
master and commit with a descriptive message following the PR naming conventions.Email the patch
Send it to eden@eden-emu.dev with the subject:Attach the
.patch file. Include both bracketed prefixes or your email may be missed.License headers
All commits must include proper SPDX license header accreditation in every source file you create or modify.If the work is licensed or vendored from another project, you may omit license headers. If you want to retain authorship attribution, you may add it — but the code may later be brought under Eden’s general attribution. Run
.ci/license-header.sh -h for full usage details.IDE setup
VSCode
Copy the following to.vscode/settings.json in your repository root, then install CMake Tools from the extensions marketplace:
Build speedup
If your build drive is an HDD, building in RAM (a ramdisk) dramatically reduces build times. You need approximately 4–8 GB of RAM headroom for a full build with debug symbols.Assets and large files
Before committing any binary asset, optimize it to keep the repository lean:| File type | Tool |
|---|---|
| PNG | optipng |
| SVG | svgo |
| OGG | OptiVorbis |
| Video | ffmpeg — re-encode as AV1 |
Adding new settings
Before adding a setting, ask yourself:- Does toggling this setting make a significant, observable difference?
- Can the correct value be auto-detected instead?
- Default must work. The majority of games and hardware must function correctly with the default value selected, unless the setting significantly degrades performance.
- Debug settings must be off by default. Never ship a debug feature enabled.
- Provide reasonable bounds. A VRAM limit setting should never allow 0 as a valid value.
- Keep descriptions short. If a setting “does a lot”, consider splitting it. Avoid padding like “recommended for most users and games” — use “(recommended)” instead.
- Avoid writing speed qualifiers redundantly. If an option is labeled “High accuracy”, that already implies it may be slower. Writing “High (Slow)” is redundant.
- Use
tr("Setting:")for field-type settings andtr("Setting")for boolean/checkmark settings. See Microsoft’s colon usage guide.
Description writing examples
Avoid redundant qualifiers
Avoid redundant qualifiers
| Verbose | Concise |
|---|---|
| ”negatively affecting image quality" | "degrading image quality" |
| "this may cause some glitches or crashes in some games" | "this may cause soft-crashes" |
| "FIFO Relaxed is similar to FIFO […]" | "FIFO Relaxed […]” — the name implies similarity |
| ”but may also reduce performance in some cases" | "but may degrade performance" |
| "it can […] in some cases" | "it can […]” — “may” already implies probability |
Speed and accuracy labels
Speed and accuracy labels
If an option is an accuracy setting, writing “High” is sufficient — it implies slower. Do not write “High (Slow)” unless performance impact is the primary distinguishing factor and it clearly degrades performance for a given use case.