elo v0.6.1

// minecraft instance manager

           /$$          
          | $$          
  /$$$$$$ | $$  /$$$$$$ 
 /$$__  $$| $$ /$$__  $$
| $$$$$$$$| $$| $$  \ $$
| $$_____/| $$| $$  | $$
|  $$$$$$$| $$|  $$$$$$/
 \_______/|__/ \______/ 
                        

Every setup gets
its own folder.

Most launchers don't manage modpacks — vanilla, Legacy Launcher, Shiginima just point at one .minecraft. Prism, PolyMC, MultiMC use profiles. Elo works at the content layer: points your .minecraft at different mod sets. Switching is a relink, not a multi-GB copy. No launcher lock-in.

install

curl -fsSL https://github.com/3nderXP/elo/releases/latest/download/install.sh | bash

Needs bash, curl and jq. Never asks for sudo, never touches your package manager, and never writes to .minecraft before you tell it to.

3nderXP/elo GPL-3.0 linux, macos >data lives in ~/.elo

elo 80×24
v0.6.1

Active instance: cool-mine

elo

↑↓ move↵ selectesc back

type a command — this terminal is live

This is the real menu, and the real output it produces. Type elo, press enter, and drive it with the arrow keys.

A launcher manages the game. Elo manages what is inside the folder.

Two different jobs. Elo never installs Java, picks versions, or manages launcher profiles. It works on the content your launcher already reads.

Works with your launcher
Most launchers don't manage modpacks — vanilla, Legacy Launcher, Shiginima just point at one folder. Prism, PolyMC, MultiMC use profiles. Elo works at the content layer, so you keep your launcher and just swap folder contents. Your .minecraft stays put; only folders inside become links.
Owns content, nothing else
Mods, resource packs, shaders, config and saves. Java, Minecraft versions, accounts and the game itself stay entirely your launcher's business.
Switching is a relink
Changing setups moves five symlinks. No copying, no duplicated worlds, no waiting on gigabytes to finish duplicating.
Knows if a file is still original
Every managed file is verified by SHA-512, so a mod you edited by hand is reported as modified instead of being silently replaced.
Refuses instead of overwriting
A name collision, an unknown symlink or a mismatched hash stops the command and tells you what it found.
Same engine, two front-ends
The guided menu and the command line call the same handlers, with the same checks and the same exit codes.

Or script it

The menu isn't a separate product. Every entry is a real command, so anything you click also fits in a cron, modpack script, or Makefile.

session bash
$ elo init --minecraft-path "$HOME/.minecraft"
$ elo instances create cool-mine --version 1.21.1 --loader fabric
$ elo addons install cool-mine sodium
$ elo instances activate cool-mine
$ elo status

Commands that change something ask first. --yes is the deliberate opt-out for automation, and --dry-run shows you the whole plan before a single file is written.

Relink, don't copy

Elo keeps every setup under ~/.elo. The active one appears inside your .minecraft via links Elo created and owns.

~/.elo/instances/

~/.elo/
├── config.conf
├── state.conf
├── backups/original/
└── instances/
    └── cool-mine/
        ├── instance.conf
        ├── addons.conf
        ├── mods/
        ├── resourcepacks/
        ├── shaderpacks/
        └── config/

~/.minecraft/

~/.minecraft/
├── mods           → cool-mine/mods
├── resourcepacks  → cool-mine/…
├── shaderpacks    → cool-mine/…
├── config         → cool-mine/…
└── saves          → cool-mine/…

# originals moved once to
# backups/original/
  1. createPick a name, a Minecraft version and a loader: fabric, neoforge, forge, quilt or vanilla. Or import a .mrpack you already have.
  2. activateSafe mode moves your real folders into the backup once, then puts links in their place.
  3. switchChanging the active instance only moves links. Nothing is copied between instances.
  4. resetRemoves Elo's links and hands your originals back. A link that does not match what Elo created is never deleted.

Your Minecraft folder is your data

Elo never destroys what it can't put back. Every destructive path has a reversible counterpart, and the reversible one runs by default.

  • Your original folders are moved aside once, and never overwritten.
  • Symlinks Elo does not own are reported, never removed.
  • Every managed addon is verified by SHA-512 before it is reused and before it is removed.
  • A file that already exists with a different hash stops the install as a collision, instead of being overwritten.
  • Removing a modified file requires you to name it explicitly with --file.
  • Commands that change something ask first. --yes is the only way past that, and you have to type it.
  • uninstall --purge refuses paths like / and $HOME.
  • Uninstalling keeps ~/.elo by default, so your instances survive.
elo status — what every managed folder is doing right now
elo status linked
Minecraft: ~/.minecraft
Active instance: cool-mine

FOLDER           LINK                 ORIGINAL     STATE
mods             cool-mine          absent       ok
resourcepacks    cool-mine          absent       ok
shaderpacks      cool-mine          absent       ok
config           cool-mine          backed_up    ok
saves            cool-mine          backed_up    ok

Five managed folders, each one accounted for. backed_up means your original data is still in ~/.elo/backups/original, ready for elo instances reset. The interactive menu renders the same table through Gum, where a folder can also come back as broken link, divergent link, missing link, instance mismatch, external symlink, real directory or unmanaged.

Bring your own Minecraft folder

Elo doesn't install Minecraft, Java, loaders, or launcher profiles. Set up the version and loader you want, then point Elo at it.

systems
Linux and macOS. Native Windows is not supported.
dependencies
bash curl jq tar sha256sum or shasum. Gum is downloaded privately by the installer and removed with Elo.
install path
~/.local/share/elo for releases, ~/.local/bin/elo for the command.
minecraft — linux
~/.minecraft
minecraft — macos
~/Library/Application Support/minecraft
providers
Modrinth, the only one so far. One .minecraft directory at a time.

If ~/.local/bin is not in your PATH, add export PATH="$HOME/.local/bin:$PATH" to your shell configuration, then run elo --help to confirm.

Quick answers

Do I have to replace my launcher?

No, and that is the point. Most launchers don't manage modpacks — the vanilla launcher, Legacy Launcher, Shiginima and others just point at one .minecraft. Prism, PolyMC and MultiMC do, but via profiles. Elo works at the content layer: it points your existing .minecraft at different mod sets, so switching between a heavy modpack and a clean world is a relink, not a multi-GB copy. No launcher lock-in, no profile migration.

What happens to the mods folder I already have?

On first activation in safe mode, your real folders are moved to ~/.elo/backups/original and replaced with links that Elo owns. The backup happens at most once and is never overwritten. elo instances reset puts everything back.

A file with that name already exists. Will it be overwritten?

No. If the existing file has exactly the expected name and SHA-512 hash, Elo reuses and records it. Otherwise the install stops with collision. Run elo addons list <instance> and decide explicitly.

Something looks wrong. Where do I start?

Run elo status. It reports missing, broken, divergent and externally managed links. Use elo instances reset only after reading that diagnosis.

Can I use it in scripts?

Yes. Commands are grouped and stable, --dry-run previews any change and --yes enables deliberate automation. Output is human-oriented; there is no JSON mode.

Does it need root?

No. The installer never uses sudo and never changes your system package manager. Update and uninstall work without privileges.

Point at your folder and go

install

curl -fsSL https://github.com/3nderXP/elo/releases/latest/download/install.sh | bash

Then run elo init --minecraft-path "$HOME/.minecraft" followed by elo. On macOS use "$HOME/Library/Application Support/minecraft".