{"id":51197495,"url":"https://github.com/electronicwave/elemental","last_synced_at":"2026-06-27T22:00:37.873Z","repository":{"id":291220284,"uuid":"976903186","full_name":"ElectronicWave/Elemental","owner":"ElectronicWave","description":"Elemental is a Modern Minecraft Launcher SDK⚛","archived":false,"fork":false,"pushed_at":"2026-06-26T02:52:12.000Z","size":866,"stargazers_count":10,"open_issues_count":9,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-27T06:08:30.735Z","etag":null,"topics":["cross-platform","fabricmc","forge","minecraft","minecraft-launcher","minecraft-launcher-core","quiltmc","rust"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/elemental-kit","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ElectronicWave.png","metadata":{"files":{"readme":"README.md","changelog":null,"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":null,"dco":null,"cla":null}},"created_at":"2025-05-03T01:21:49.000Z","updated_at":"2026-06-26T02:52:14.000Z","dependencies_parsed_at":"2025-07-14T08:48:09.870Z","dependency_job_id":"9631fa9b-79d7-4a93-b028-97b7c8faab27","html_url":"https://github.com/ElectronicWave/Elemental","commit_stats":null,"previous_names":["electronicwave/elemental"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ElectronicWave/Elemental","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElectronicWave%2FElemental","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElectronicWave%2FElemental/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElectronicWave%2FElemental/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElectronicWave%2FElemental/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ElectronicWave","download_url":"https://codeload.github.com/ElectronicWave/Elemental/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ElectronicWave%2FElemental/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34869004,"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-27T02:00:06.362Z","response_time":126,"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":["cross-platform","fabricmc","forge","minecraft","minecraft-launcher","minecraft-launcher-core","quiltmc","rust"],"created_at":"2026-06-27T22:00:34.504Z","updated_at":"2026-06-27T22:00:37.863Z","avatar_url":"https://github.com/ElectronicWave.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Elemental\n\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/893a020791bf486a9ef80f67729dc2f4)](https://app.codacy.com/gh/ElectronicWave/Elemental/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/ElectronicWave/Elemental)\n\n[![Contributors][contributors-shield]][contributors-url]\n[![Forks][forks-shield]][forks-url]\n[![Stargazers][stars-shield]][stars-url]\n[![Issues][issues-shield]][issues-url]\n[![License][license-shield]][license-url]\n\nElemental is a Modern Minecraft Launcher SDK⚛\n\n## Support Matrix\n\n| Family / Driver | Catalog | Inspect | Install | Load Installed | Launch |\n| --------------- | ------- | ------- | ------- | -------------- | ------ |\n| Vanilla         | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Fabric-like     | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Fabric          | ✅       | ✅       | ✅       | ✅              | ✅      |\n| LegacyFabric    | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Babric          | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Quilt           | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Forge           | ✅       | ✅       | ✅       | ✅              | ✅      |\n| NeoForge        | ✅       | ✅       | ✅       | ✅              | ✅      |\n| CleanroomMC     | ✅       | ✅       | ✅       | ✅              | ✅      |\n| Rift            | ✅       | ✅       | ✅       | ✅              | ✅      |\n| LiteLoader      | ✅       | ✅       | ✅       | ✅              | ✅      |\n\nDevelopment is actively in progress. The matrix reflects the current workspace state rather than a stability guarantee. Verified anchors and current range claims live in [ROADMAP.md](ROADMAP.md).\n\n## Why Elemental\n\n- It treats Minecraft distributions as real families instead of flattening everything into one fake `version.json` model. Vanilla, Fabric-like loaders, direct profiled legacy-era loaders such as Rift and LiteLoader, and installer-driven ecosystems such as Forge, NeoForge, and Cleanroom all land on intentional substrates instead of collapsing into special-case flags.\n- `Storage` + `Layout` make paths a typed capability, not stringly-typed launcher glue. Game roots, instances, libraries, assets, and version artifacts are resolved through explicit resource models, which keeps alternative layouts and migration work possible without hardcoding one `.minecraft` shape.\n- The instance lifecycle is explicit and product-friendly. Elemental separates catalog, inspect, install, load-installed, and launch so a launcher can discover local state, reopen prepared instances, and build launch commands without rerunning the whole install path every time.\n- Runtime handling is part of the kernel, not scattered around app code. The core can validate an explicit Java executable against the required major version or resolve a compatible local runtime automatically, which matters once old and new distributions coexist in the same launcher.\n- Older tweaker-era loaders do not automatically force a new kernel family. Rift and LiteLoader now run on the direct profiled `version_json` path, which keeps the boot surface smaller until a future target proves otherwise.\n- Installer-driven ecosystems are first-class. Forge, NeoForge, and now Cleanroom run on a shared installer-family flow with family-specific merge and runtime behavior, so the SDK can support legacy-derived installers without pretending they are just metadata overlays.\n- The workspace is split for reuse instead of forcing one monolith:\n  - `schema` for protocol types\n  - `core` for storage, runtime, and launch primitives\n  - `infra` for downloading and archive work\n  - `driver` for catalogs, families, and distribution logic\n  - `shared` for persisted state helpers\n\n## Workspace Layout\n\n- `crates/schema`: Pure protocol and serialization types\n- `crates/core`: Launcher domain logic, storage, runtime lookup, and launch primitives\n- `crates/infra`: Downloader and execution reports\n- `crates/driver`: Distribution and driver-specific logic\n- `crates/object`: Shared typed object pool\n- `crates/shared`: Versioned persisted loader, profile, and store utilities\n- `crates/elemental`: Re-export facade crate\n- `crates/demo`: End-to-end example\n\n## Quick Start\n\nIf you just want to verify the current end-to-end example inside this repository:\n\n```bash\ncargo run -p demo\n```\n\nThe current default demo prepares and launches a Fabric instance.\n\nLoader-specific demo entry points are also available, including `cargo run -p demo -- cleanroom --help`, `cargo run -p demo -- rift --help`, and `cargo run -p demo -- liteloader --help`.\n\nThe default demo settings live in [crates/demo/src/main.rs](crates/demo/src/main.rs).\n\n## Use The Library Crates Directly\n\nThis is the smallest end-to-end flow using the library crates directly.\n\n### Dependencies\n\n```toml\n[dependencies]\nanyhow = \"1\"\ntokio = { version = \"1\", features = [\"macros\", \"process\", \"rt-multi-thread\"] }\nelemental = { package = \"elemental-kit\", version = \"0.1\" }\n```\n\n### 1. Fetch Catalog Data\n\n```rust\nuse anyhow::Result;\nuse elemental::{driver::drivers::vanilla::catalog::VanillaCatalog, launcher::Launcher};\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c()\u003e {\n    let launcher = Launcher::builder().build();\n    let data = launcher.catalog(VanillaCatalog::with_defaults()).await?;\n    println!(\"Data: {:#?}\", data);\n\n    Ok(())\n}\n```\n\n## 2. Prepare and Launch\n\nIf you want to launch a version that is already fully prepared on disk without downloading anything,\nload it from storage first and then launch it.\n\n```rust\nuse anyhow::Result;\nuse elemental::{\n    core::auth::authorizers::offline::OfflineAuthorizer,\n    launcher::{DriverSpec, LaunchOptions, Launcher, PrepareInstanceRequest, VanillaSpec},\n};\n\n// Extracting native should use multi-thread runtime to avoid blocking the async flow, but the rest of the work is single-thread-friendly so the default runtime is fine for most of the flow.\n#[tokio::main(flavor = \"multi_thread\")]\nasync fn main() -\u003e Result\u003c()\u003e {\n    let launcher = Launcher::builder().build();\n    let prepared = launcher\n        .prepare_instance(PrepareInstanceRequest {\n            instance_name: \"Vanilla\".to_string(),\n            driver: DriverSpec::Vanilla(VanillaSpec {\n                game_version: \"1.20.1\".into(),\n            }),\n        })\n        .await?;\n\n    let mut instance = launcher\n        .launch_prepared_instance(\n            \u0026prepared,\n            OfflineAuthorizer {\n                username: \"Vanilla123\".to_string(),\n            },\n            \u0026LaunchOptions::default(),\n        )\n        .await?;\n    let exit_code = instance.child.wait().await?;\n    println!(\"Exited with code: {exit_code}\");\n    Ok(())\n}\n```\n\n## 3. Inspect, Load, and Launch\n\n```rust\nuse anyhow::Result;\nuse elemental::{\n    core::auth::authorizers::offline::OfflineAuthorizer,\n    launcher::{LaunchOptions, Launcher},\n};\n\n// Extracting native should use multi-thread runtime to avoid blocking the async flow, but the rest of the work is single-thread-friendly so the default runtime is fine for most of the flow.\n#[tokio::main(flavor = \"multi_thread\")]\nasync fn main() -\u003e Result\u003c()\u003e {\n    let launcher = Launcher::builder().build();\n    // Find all instances in the storage and print them out\n    let instances = launcher.inspect_instances().await?;\n    println!(\"Instances: {:#?}\", instances);\n    let instance = launcher\n        .inspect_instance(\"MyNeoForge-1.21.1\".into())\n        .await?;\n    println!(\"Instance: {:#?}\", instance);\n    if let Some(instance) = instance {\n        let prepared = launcher.load_instance(instance).await?;\n        let mut instance = launcher\n            .launch_prepared_instance(\n                \u0026prepared,\n                OfflineAuthorizer {\n                    username: \"Fox\".into(),\n                },\n                \u0026LaunchOptions::default(),\n            )\n            .await?;\n        let exit = instance.child.wait().await?;\n        println!(\"Instance exited with: {exit}\");\n    }\n    Ok(())\n}\n```\n\n## Notes\n\n- This example assumes you already have a compatible local Java runtime.\n- Elemental now auto-selects a local runtime using the Minecraft version metadata.\n- Runtime discovery uses sources such as the Windows registry, `PATH`, package-manager locations, and `JAVA_HOME`.\n- The example uses offline auth on purpose so the minimal flow stays easy to run.\n- If you want a complete runnable reference from this repository, [crates/demo/src/main.rs](crates/demo/src/main.rs) is the best starting point.\n\n## Credits\n\n- [MultiMC](https://multimc.org/)\n- [Prism Launcher](https://prismlauncher.org/)\n- [XMCL](https://xmcl.app/)\n\n\u003c!-- LINKS --\u003e\n[contributors-shield]: https://img.shields.io/github/contributors/ElectronicWave/Elemental.svg?style=for-the-badge\n[contributors-url]: https://github.com/ElectronicWave/Elemental/graphs/contributors\n[forks-shield]: https://img.shields.io/github/forks/ElectronicWave/Elemental.svg?style=for-the-badge\n[forks-url]: https://github.com/ElectronicWave/Elemental/network/members\n[stars-shield]: https://img.shields.io/github/stars/ElectronicWave/Elemental.svg?style=for-the-badge\n[stars-url]: https://github.com/ElectronicWave/Elemental/stargazers\n[issues-shield]: https://img.shields.io/github/issues/ElectronicWave/Elemental.svg?style=for-the-badge\n[issues-url]: https://github.com/ElectronicWave/Elemental/issues\n[license-shield]: https://img.shields.io/github/license/ElectronicWave/Elemental.svg?style=for-the-badge\n[license-url]: https://github.com/ElectronicWave/Elemental/blob/master/LICENSE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectronicwave%2Felemental","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Felectronicwave%2Felemental","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Felectronicwave%2Felemental/lists"}