CichlidMC

Cichlid

A flexible and lightweight Java mod-loader for Minecraft, built from the ground-up.

⚠️ Notice

Cichlid is currently in an alpha state. It's not complete, and there's a lot of rough edges. It's not recommended for new players or modders right now.

Even this website is basically a placeholder right now. It's mostly oriented towards those who are already modders. More will come in the future, but as always, things take time, and time is limited.

If you're still interested, feel free to try it out. If you need some help or have feedback, please let us know on Discord!

So, what is it?

Cichlid is a brand-new mod-loader for Minecraft, built from the ground-up. It takes a lot of inspiration from existing projects though. There's a lot that's already been done right, but just as much has room for improvement.

Seriously? Another mod loader?

Hello! TropheusJ, the creator of Cichlid, speaking (well, typing).

Yes! Another loader. (Sorry).

Cichlid was created out of a desire for something better. Existing loaders are functional, sure. Most people would even argue that one is good and the other is bad. Even I have my preference, but it's pick-your-poison. There's a lot that I am dissatisfied with on both the Fabric and Neoforge sides. Things that are effectively impossible to change at this point.

I could just go on with my life and deal with it, but I have an opportunity to make modding more enjoyable. For myself, and maybe others too. I feel like not trying would be foolish. And so, behold. Cichlid.

My main goal with this project is to improve the modding experience. Even if that's done by salvaging it for parts later down the line, I'd consider it a success.

- TropheusJ

Cool. What makes it special?

Philosophy

Lightweight

Cichlid will always be lightweight and unintrusive. It should never get it your way while developing, and it should be nearly invisible when no mods are installed.

Embrace Vanilla

Cichlid embraces vanilla's designs. APIs should be additive, extending what's already there, not replacing it.

Keep Moving Forward

Cichlid doesn't hold on to the past.

There will never be an official "LTS" modding version. The main supported version will always be the newest one.

No component of Cichlid is set in stone. If drastic changes would improve the project, they'll be made.

Actual Features

Java Agent

Cichlid is a Java Agent. If you're unaware, the Java Agent API is Java's officially supported method of modifying ("instrumenting") existing Java programs. It has everything you need for a mod loader, without commiting atrocities against classloaders.

Standalone Cichlid is capable of loading on every version of Minecraft, although the tooling for mods isn't quite there yet. It's barely even tied to Minecraft, it would be pretty trivial to disconnect it in a fork. It's also nearly futureproof, with the only problem being Java version bumps.

First-class Mojmap

Sorry Fabric, point for Neoforge. Yarn should've been dropped years ago.

Mojmap is king in the Cichlid ecosystem. Mods are compiled to it, Cichlid remaps the game to it, and it's all that's currently supported by CichlidGradle.

It's planned but low priority for it to be possible to use different mappings in development environments. Parchment support is high priority.

Brand-new Gradle plugin

CichlidGradle is Cichlid's Gradle plugin for mod development. It's been designed from the ground-up using modern Gradle best practices. It's fully configuration cache compatible, does no work during configuration, and probably won't deal psychic damage as you use it.

Loader Plugins

Plot twist: Cichlid doesn't actually load mods*. Cichlid loads plugins, which load mods.

Plugins fully determine how each file in the mods folder is handled, and can also find mods outside of it. Plugin that loads datapacks as mods? Sure. Plugin that compiles source code? Why not. Plugin that loads groovy scripts? If you insist.

*it does have a built-in plugin for standard mods, don't worry

Conditional Dependencies

Mods and plugins can finally have dependencies only apply in certain cases. Some examples include a client-side dependency, or an incompatibility that only triggers when a 3rd mod is not present.

FlexVer

Cichlid uses FlexVer by unascribed, which is a flexible SemVer-compatible versioning scheme. It lets mods and plugins declare their versions however they want, while still producing reasonable comparisons.

Introducing Sushi

Sushi is a bytecode transformation framework built from the ground-up.

Sushi is data-driven, extensible, and flexible. It's designed to be a replacement for Mixin (+Extras) that maintains the compatibility and flexibility while allowing for new opportunities, such as...

Source-visible Transformations

Disclaimer: this is still WIP as of writing this, but it's actively in development.

Sushi was primarily created so bytecode transformations can be safely applied to source code in development environments, finally bringing transforming up to par with patching.

Transformers from both your own project and its libraries will be visible in Minecraft sources.

That's great and all, how do I use it

If you're a player, you probably shouldn't. There's still a lot of work before Cichlid is ready for the average mod user. And there's no mods for it yet anyway, so...

If you're a modder, you're welcome to give it a try if interested. There's no template mod yet, but you can see a sample in the CichlidGradle root project. Join us on Discord if you want further information.

BlanketCon 25

Cichlid was first revealed to the public at BlanketCon 25. The recording can be found here, if you'd prefer a video explaining it.