This document summarizes:
- the current Elemental driver state
- the version ranges that can be claimed now
- upstream findings about Fabric, Forge, OptiFine, and CleanroomMC
- a recommended execution plan for the next driver families
It is intended as a working architecture reference, not as a release guarantee.
| Family / Driver | Catalog | Inspect | Install | Load Installed | Launch | Notes |
|---|---|---|---|---|---|---|
| Vanilla | Yes | Yes | Yes | Yes | Yes | Current primary complete driver, smoke-verified on representative release anchors |
| Fabric-like | Yes | Yes | Yes | Yes | Yes | Shared flavor-aware profile family now drives multiple loader variants |
| Fabric | Yes | Yes | Yes | Yes | Yes | Modern Fabric mainline implemented and smoke-verified on representative anchors |
| LegacyFabric | Yes | Yes | Yes | Yes | Yes | End-to-end flow is working and smoke-verified on a representative legacy anchor |
| Babric | Yes | Yes | Yes | Yes | Yes | End-to-end flow is working and smoke-verified on a representative beta anchor |
| Quilt | Yes | Yes | Yes | Yes | Yes | Independent fabric-like driver implemented and smoke-verified on a representative anchor |
| Forge | Yes | Yes | Yes | Yes | Yes | Installer-family driver now reaches a verified modern launch anchor |
| NeoForge | Yes | Yes | Yes | Yes | Yes | Installer-family driver now reaches a verified modern launch anchor; catalog game-version grouping remains heuristic, but now covers both pre-2026 and year-based naming |
| CleanroomMC | Yes | Yes | Yes | Yes | Yes | Installer-family driver is implemented and smoke-verified on a 1.12.2 / 0.5.8-alpha anchor |
| LiteLoader | Yes | Yes | Yes | Yes | Yes | Direct profiled version_json driver is implemented against official metadata and verified on a representative 1.7.10 runtime anchor |
| Rift | Yes | Yes | Yes | Yes | Yes | Direct profiled version_json driver is implemented against official release jars and verified on a representative 1.13.2 runtime anchor |
| OptiFine | No | No | No | No | No | Not started |
The current workspace has already passed end-to-end smoke validation on the following anchor versions.
These anchors should be read as verified points inside the support range, not as the entire range by themselves.
| Family / Driver | Verified anchors | Notes |
|---|---|---|
| Vanilla | 1.8.9, 1.12.2, 1.16.5, 1.20.1 |
Covers old minecraftArguments flow and the modern arguments flow in the current workspace |
| Fabric | 1.14.4, 1.16.5, 1.20.1 |
Confirms the modern Fabric profile flow across early, mid, and current supported release lines |
| LegacyFabric | 1.13.2 |
Confirms the flavor-aware family path on the modern edge of the LegacyFabric-supported band |
| Babric | b1.7.3 |
Confirms the flavor-aware family path on a representative beta-era Babric anchor |
| Quilt | 1.20.1 |
Confirms a second independent fabric-like driver on the shared profile-driven substrate |
| Forge | 1.12.2 / 14.23.5.2860, 1.20.1 / 47.3.1 |
Confirms the installer-family pipeline across a classic legacy-era anchor and a modern Forge anchor |
| NeoForge | 1.21.1 / 21.1.199 |
Confirms the installer-family pipeline on a modern NeoForge anchor; catalog grouping is still version-name heuristic, but it now covers both pre-2026 and year-based naming |
| CleanroomMC | 1.12.2 / 0.5.8-alpha |
Confirms the installer-family pipeline on a Java 25-era Cleanroom anchor after legacy runtime cleanup |
| Rift | 1.13.2 / 1.0.4-106 |
Confirms the direct profiled version_json path on the official release-channel 1.13.2 build lineage |
| LiteLoader | 1.7.10 / 1.7.10_04 |
Confirms that a LaunchWrapper-era tweaker loader can still launch through the direct profiled version_json path |
Rolling targets such as the latest release, latest snapshot, and latest stable loader should still be treated as recurring regression checks rather than one-time milestones.
These are the ranges I would claim today based on the current code, upstream docs, and the verified smoke anchors above.
| Family / Driver | Range to claim now | Confidence | Why |
|---|---|---|---|
| Vanilla | 1.8.9+ release line, including modern mainline releases |
High | The current workspace now has successful smoke anchors on 1.8.9, 1.12.2, 1.16.5, and 1.20.1, covering both legacy and modern launch argument paths |
| Vanilla | current snapshot line | Medium-High | Modern version_json handling is in place, but latest snapshot should continue to be treated as a rolling regression target |
| Vanilla | 1.6.1 to 1.7.x |
Medium | The builder now supports legacy JVM and game argument handling, but this older band still lacks the same smoke coverage as 1.8.9+ |
| Vanilla | <1.6 |
Do not claim | Current metadata assumptions still lean on modern Piston-style fields |
| Fabric | modern official Fabric line, practically 1.14.4+ |
High | The current workspace has successful smoke anchors on 1.14.4, 1.16.5, and 1.20.1, and the implementation consumes official Fabric profile metadata |
| LegacyFabric | 1.13.2 verified, broader range not claimed yet |
Medium | The current workspace now has an end-to-end verified anchor on 1.13.2, but older LegacyFabric-supported releases and snapshots still need systematic smoke coverage |
| Babric | b1.7.3 verified, broader range not claimed yet |
Medium | The current workspace now has an end-to-end verified anchor on b1.7.3, but broader Babric-supported beta coverage still needs systematic smoke coverage |
| Quilt | 1.20.1 verified, broader range not claimed yet |
Medium | The current workspace now has an end-to-end verified anchor on 1.20.1, but broader Quilt-supported version coverage still needs systematic smoke coverage |
| Forge | 1.12.2 / 14.23.5.2860 and 1.20.1 / 47.3.1 verified, broader range not claimed yet |
High | The installer-family pipeline now has verified anchors on both a classic 1.12.2 generation and a modern 1.20.1 generation, but broader Forge coverage still needs systematic validation |
| NeoForge | 1.21.1 / 21.1.199 verified, broader range not claimed yet |
High | The installer-family pipeline now has a verified modern NeoForge anchor, but broader NeoForge coverage still needs systematic validation and catalog grouping still relies on version-name heuristics rather than upstream truth |
| CleanroomMC | 1.12.2 / 0.5.8-alpha verified, broader range not claimed yet |
High | The installer-family pipeline now has a verified Cleanroom anchor on the only currently targeted Minecraft line, but broader Cleanroom release coverage and companion-pack semantics still need systematic validation |
| Rift | 1.13.2 / 1.0.4-106 verified, broader official release line not claimed yet |
Medium | The direct profiled driver now derives metadata from official release jars, normalizes their embedded launcher profiles, and has one real runtime anchor, but the 1.13 side still needs the same level of validation |
| LiteLoader | 1.7.10 / 1.7.10_04 verified, broader line not claimed yet |
Medium | The direct profiled driver now proves that a tweaker-era LiteLoader build can be expressed on the existing profile substrate, but later LiteLoader generations still need runtime coverage |
Confirmed:
- Fabric officially supports most snapshots from
18w43b+and releases1.14+. - Fabric installation is profile-oriented. The official installer creates a new launcher version/profile.
- Fabric Meta provides launcher-facing metadata endpoints such as profile JSON and related version endpoints.
Relevant sources:
- Fabric FAQ: https://wiki.fabricmc.net/faq:user
- Fabric install docs: https://wiki.fabricmc.net/install
- Fabric third-party launcher flow: https://wiki.fabricmc.net/player:tutorials:third-party:prism
Architecture implication:
- Fabric belongs in a
fabric-likeorversion_json-derivedfamily. - It should not be modeled as an installer-first family like modern Forge.
Confirmed:
forge-install-bootstrapperexists specifically to automate Forge installer execution after Forge removed the--installClientCLI path.- The project explicitly describes itself as supporting installer automation for any version that still ships an installer since
1.5.2.
Relevant source:
- Forge install bootstrapper: https://github.com/Steve-xmh/forge-install-bootstrapper
Architecture implication:
- Forge is installer-driven.
- It should be modeled as an
installer family, not as a plainversion_jsonfamily member. - Elemental can now safely claim one classic Forge anchor and one modern Forge anchor, but should still avoid broader range claims until more installer generations are validated.
Confirmed:
optifine-installeris not just a metadata downloader.- Its documented flow is instance-mutating:
- copy Minecraft version
- install OptiFine library
- install LaunchWrapper library for newer branches
- update version JSON
- update launcher state files
- The project explicitly claims coverage for almost all
1.7.2+OptiFine versions.
Relevant source:
- OptiFine installer: https://github.com/Steve-xmh/optifine-installer
Architecture implication:
- OptiFine should not be treated as a normal top-level driver first.
- It is better modeled as an addon or patch-installer family.
Confirmed:
- Cleanroom targets
1.12.2 on Java 25+. - Cleanroom defines:
CleanroomLoaderas a continuation and revamp of ForgeModLoaderCleanroom Minecraftas a continuation and revamp of MinecraftForgeFoundationas a LaunchWrapper replacement
- Official launcher guidance prefers MultiMC-based launchers and MMC instance import.
- Standard launchers are supported through a relauncher or installer path.
- Cleanroom can also relaunch from a Forge
1.12.2instance.
Relevant sources:
- Cleanroom README: https://github.com/CleanroomMC/Cleanroom
- Cleanroom client install docs: https://cleanroommc.com/wiki/end-user-guide/installation/install-client
Architecture implication:
- Cleanroom is not
fabric-like. - Its published installer artifact fits naturally into the
installerfamily. - The current workspace now treats Cleanroom as an installer-family driver on the
1.12.2line, while MMC import semantics and wider companion-pack handling remain future work.
The following names were provided as useful family indicators, but I did not successfully open public repository pages or READMEs for them during this research pass:
loomboot4rlegacyboot4rcleanboot4ranvilboot4rspzboot4r
They are still useful as architecture hints, but any statement about them in this document should be treated as family inference rather than directly confirmed repository evidence.
Elemental should not keep growing as a flat list of unrelated drivers.
The cleaner long-term model is:
| Layer | Responsibility |
|---|---|
Driver |
User-facing distribution semantics and instance lifecycle |
Family |
Shared install/boot protocol for a group of drivers |
Core |
Storage, layout, runtime, launch primitives, downloader integration |
Recommended families:
| Family | Examples | Character |
|---|---|---|
version_json family |
Vanilla, Rift, LiteLoader | Modern and direct-profile-driven install and launch, including launcher-profile derivatives and legacy tweaker profiles that still compile down to explicit metadata |
fabric-like family |
Fabric, LegacyFabric, Babric, Quilt | Profile-driven or version-json-derived boot |
installer family |
Forge, NeoForge, CleanroomMC | Installer protocol and materialization, including legacy-derived installer distributions |
reserved legacy family |
none yet | Only introduce this if a future loader requires relaunch, bootstrap indirection, or library mutation that cannot be represented as direct metadata |
addon family |
OptiFine, OptiFabric | Patch or addon semantics layered on top of a base driver |
Yes, but not as a single universal Driver::uninstall() operation.
The pattern used by other launchers is usually:
- remove a component
- change loader version
- switch back to Vanilla
- repair or reinstall the instance
instead of exposing one abstract "uninstall driver" action.
Prism models loaders as components in the instance version page.
Confirmed behavior:
- users can change the version
- change the load order
- remove components
Relevant sources:
- Prism version page: https://prismlauncher.org/wiki/help-pages/instance-version/
- Prism instance architecture: https://www.mintlify.com/PrismLauncher/PrismLauncher/development/architecture/instance-management
Implication:
- Prism treats loader removal as component graph editing, not as a driver-level uninstall method
ATLauncher exposes loader version change operations, not a generic uninstall abstraction.
Relevant source:
- ATLauncher updating mod loader version: https://wiki.atlauncher.com/guides/updating-mod-loader-version/
Implication:
- the model is "change the loader version" rather than "call uninstall on the loader"
CurseForge exposes modloader version selection inside profile options.
Relevant source:
- CurseForge support article: https://support.curseforge.com/support/solutions/articles/9000230030-changing-the-mod-loader-version-of-a-modpack-or-custom-profile
Implication:
- the product model is configuration change, not a generic uninstall protocol
Modrinth exposes installation-state operations such as:
- switch between vanilla and modded
- change game version
- repair installation
- reinstall
- unlink modpack
Relevant source:
- Modrinth content management overhaul: https://modrinth.com/news/article/content-management-overhaul/
Implication:
- the model is installation mutation and repair, not a single uninstall verb
Elemental should support loader removal and rollback behaviors, but the API should be framed as instance installation mutation.
Recommended operations:
| Operation | Meaning |
|---|---|
change_loader |
change loader version inside the same family |
remove_loader |
convert an instance back to Vanilla or remove the active loader layer |
repair_installation |
reinstall missing or invalid launcher artifacts without changing the instance identity |
reinstall |
rebuild the installed state for the current driver or family |
Family semantics are too different:
fabric-likeloaders behave more like removable components or profile overlaysinstallerfamilies such as Forge are closer to re-materialization than clean uninstalllegacyfamilies may involve tweakers, relaunchers, or jar-era patch flowsaddonfamilies such as OptiFine are even less suitable as top-level uninstall targets
Because of this, a single trait method like:
async fn uninstall(&self, instance: &Instance) -> Result<()>would likely become a leaky abstraction.
- support loader removal
- do not model it as a universal driver trait method
- model it as explicit instance installation mutation capabilities
Goal:
- replace guessed support ranges with real smoke validation
Work:
- Vanilla smoke matrix:
1.8.9✅1.12.2✅1.16.5✅1.20.1✅- latest release as a rolling regression target
- latest snapshot as a rolling regression target
- Fabric smoke matrix:
1.14.4✅1.16.5✅1.20.1✅- latest stable loader as a rolling regression target
Output:
- validated support table
- issue list for broken ranges
Current status:
- anchor-version smoke validation is complete for the currently targeted Vanilla and Fabric release points
- Phase 1 is good enough to unblock Phase 2 work
- latest release, latest snapshot, and latest stable loader should continue to be exercised as recurring checks
Goal:
- make the second family real, not just Fabric-only
Work:
- stabilize modern Fabric with real runtime validation
- finish the
fabric-likefamily substrate so flavor semantics stay aligned with the real upstream ecosystems - keep Modern Fabric green under recurring regression checks
- keep LegacyFabric green after the
1.13.2verified anchor - continue active runtime validation for:
- Babric
- implement Quilt as an independent fabric-like driver
- verify Quilt on at least one representative stable anchor
Why this phase matters:
- it proves the family abstraction is real
- it forces the API to support multiple profile-driven loaders without collapsing back into Fabric-specific logic
Current status:
- Modern Fabric is stable on the currently verified release anchors
- LegacyFabric now has a verified end-to-end anchor at
1.13.2 - Babric now has a verified end-to-end anchor at
b1.7.3 - Quilt now has a verified end-to-end anchor at
1.20.1 - the
fabric-likefamily is now real enough to stop being a Fabric-only abstraction - Phase 2 is now good enough to stop being the active roadmap bottleneck
Goal:
- support installer-driven loaders without pretending they are just metadata variants
Work:
- define installer-family substrate
- support:
- installer metadata extraction
- artifact materialization
- state tracking
- instance output
- implement Forge install flow first
- follow with NeoForge
Why this phase matters:
- modern Forge is one of the strongest proofs that not everything belongs in
version_json
Current status:
- the installer-family substrate exists
- Forge has verified launch anchors at
1.12.2 / 14.23.5.2860and1.20.1 / 47.3.1 - NeoForge has a verified launch anchor at
1.21.1 / 21.1.199 - CleanroomMC has a verified launch anchor at
1.12.2 / 0.5.8-alpha - NeoForge catalog grouping still uses version-name heuristics rather than upstream truth, but it now recognizes both pre-2026 and year-based naming
- broader Forge, NeoForge, and Cleanroom coverage is still unclaimed until more installer generations are smoke-validated
- Phase 3 is now good enough to stop being the primary roadmap milestone; the remaining work is wider coverage, not missing family substrate
Goal:
- keep older tweaker-era loaders on the direct profiled path unless a future target proves that a new family is unavoidable
Work:
- keep Rift green on the verified
1.13.2 / 1.0.4-106anchor and add the1.13 / 1.0.4-105companion check - keep LiteLoader green on the verified
1.7.10 / 1.7.10_04anchor and add one later-generation runtime anchor before claiming a wider line - continue extracting only the shared direct-profiled pieces that genuinely reduce duplication between Vanilla, Rift, and LiteLoader
- introduce a separate
legacyfamily only if a future target truly needs:- relaunch flows
- bootstrap indirection beyond an embedded launcher profile
- library or bootstrap mutation that the current profile pipeline cannot model
Why this phase matters:
- it proves that old LaunchWrapper or tweaker-era loaders do not automatically require a new substrate if their boot semantics can still be normalized into explicit metadata
Current status:
- Rift is now implemented as a direct profiled
version_jsondriver with a verified1.13.2 / 1.0.4-106runtime anchor - LiteLoader is now implemented as a direct profiled
version_jsondriver with a verified1.7.10 / 1.7.10_04runtime anchor - no separate
legacyfamily is justified by the current workspace state
Goal:
- keep Cleanroom green on the current installer-family path while deciding whether it needs a second distribution path beyond installer materialization
Work:
- keep the
1.12.2installer-driven path healthy under recurring regression checks - validate more Cleanroom releases when stable installer artifacts are available
- decide whether MMC instance import should be added as a secondary path instead of a prerequisite
- model companion pieces such as Fugue and Scalar explicitly if they prove necessary for wider pack compatibility
Why this phase matters:
- Cleanroom proves that installer-family drivers can still need substantial legacy runtime cleanup without becoming a fake top-level family of their own
Current status:
- a
CleanroomDrivernow exists on top of the installer-family substrate 1.12.2 / 0.5.8-alphais smoke-verified with Java 25- broader Cleanroom release coverage and wider pack semantics are still unclaimed
Goal:
- support patch-like or overlay-like systems without polluting top-level driver semantics
Work:
- define addon or patch-installer layer
- start with OptiFine
- then consider OptiFabric or other overlays
Why this phase matters:
- it avoids turning every patch system into a fake top-level driver
Goal:
- expose the kernel once family boundaries are stable
Work:
- CLI after at least three families have one production-grade target each
- GUI after the CLI and install model settle
Why this phase should be late:
- building UI too early freezes unstable API and family boundaries
The next concrete milestone should be to broaden verified coverage around the new direct profiled legacy-era drivers, then return to installer-family breadth instead of inventing a new family boundary too early.
Recommended first slice:
- verify the
1.13 / 1.0.4-105side of the official Rift line end-to-end through catalog, inspect, install, load-installed, and launch - add one later-generation LiteLoader runtime anchor beyond
1.7.10 / 1.7.10_04 - keep both drivers on the direct profiled path unless a new target exposes a real semantic gap
- only reopen the dedicated
legacyfamily question if those broader checks fail for substrate reasons rather than for ordinary driver bugs
Not part of the first slice:
- broad Rift range claims
- broad LiteLoader range claims
- addon layering such as OptiFine
- CLI or GUI work
Success criteria:
- Rift has both sides of the official release line runtime-verified
- LiteLoader has more than one runtime-verified generation
- any later
legacyfamily work is justified by real unmet semantics rather than by loader era naming - the existing
fabric-like, directversion_json, andinstallerpaths remain stable while coverage is broadened
If only one direction should be chosen next, the order should be:
- broaden Rift runtime coverage on the existing direct profiled path
- broaden LiteLoader runtime coverage on the existing direct profiled path
- broaden installer-family coverage for Forge, NeoForge, and CleanroomMC
- add the
addonfamily starting with OptiFine - ecosystem features such as skins, profiles, and account polish
- CLI or GUI
Reason:
fabric-likeandinstallerare now real enough to stop being the immediate proof target- Rift and LiteLoader both proved to be direct profiled drivers rather than forced new families
- broader runtime coverage is now more valuable than inventing another substrate
addonwork will be easier once the newly proven direct-profiled legacy path has a little more depth- the current strongest differentiator in Elemental is still the launcher kernel architecture, not front-end packaging
The current Elemental kernel is already in a strong position:
Storage + Layoutsurvived intactcoreis no longer bound to Mojang-specific world assumptionsVanillais a usable mainline driverFabricis attached as the second real family-backed driver- the installer family now hosts verified Forge, NeoForge, and Cleanroom anchors
- Rift and LiteLoader now both exist as verified direct profiled
version_jsondrivers over older launcher ecosystems
The next milestone is not UI polish.
The next milestone is no longer proving that fabric-like, direct profiled version_json, or installer can exist.
Those lines are already real enough in the current workspace.
The next milestone is extending verified coverage on the new direct profiled legacy-era path, then broadening installer-family coverage without inventing unnecessary extra layers.
After that, the natural order is:
- broaden installer-family coverage
- keep the direct profiled legacy path green while expanding its coverage
- then add
addon
That is the step that turns it from a modern launcher SDK into a broader launcher kernel without inventing unnecessary family layers.