Skip to content

Releases: aether-framework/aether-mixins

🚀 Aether Mixins v0.1.0 — Initial Release

11 Sep 10:12

Choose a tag to compare

🚀 Aether Mixins v0.1.0 — Initial Release

Aether Mixins is a lightweight, safe bytecode weaving framework for the JVM.
It provides both load-time (agent) and in-app runtime weaving with a clean, annotation-driven API.


🎯 Highlights in v0.1.0

  • Agent & In-App Weaving
    • Run with -javaagent or wire the runtime pipeline programmatically.
  • Annotation API (MVP)
    • @Mixin, @Inject(HEAD|TAIL), @Redirect(...).
  • ASM-backed weaver
    • Precise, deterministic bytecode edits with frame recomputation when configured.
  • Refmap + YAML config
    • Symbolic targeting via JSON refmaps; simple mixins.yml session config.
  • Safety-first runtime
    • Safe-mode (skip failing patches), structured diagnostics, predictable ordering.
  • Annotation Processor
    • Generates refmap JSON and a minimal mixins.yml directly at compile time.

📦 Installation

Tip

All Aether artifacts are available on Maven Central — no extra repository required.

Maven

<dependency>
    <groupId>de.splatgames.aether</groupId>
    <artifactId>aether-mixins-runtime</artifactId>
    <version>0.1.0</version>
</dependency>

Optional components

<!-- Annotations only -->
<dependency>
    <groupId>de.splatgames.aether</groupId>
    <artifactId>aether-mixins-core</artifactId>
    <version>0.1.0</version>
    <scope>provided</scope>
</dependency>

<!-- Compile-time refmap generation -->
<dependency>
    <groupId>de.splatgames.aether</groupId>
    <artifactId>aether-mixins-processor</artifactId>
    <version>0.1.0</version>
    <scope>provided</scope>
</dependency>

Gradle (Groovy)

dependencies {
    implementation 'de.splatgames.aether:aether-mixins-runtime:0.1.0'
    // Optional:
    compileOnly   'de.splatgames.aether:aether-mixins-core:0.1.0'
    annotationProcessor 'de.splatgames.aether:aether-mixins-processor:0.1.0'
}

Gradle (Kotlin)

dependencies {
    implementation("de.splatgames.aether:aether-mixins-runtime:0.1.0")
    // Optional:
    compileOnly("de.splatgames.aether:aether-mixins-core:0.1.0")
    annotationProcessor("de.splatgames.aether:aether-mixins-processor:0.1.0")
}

ℹ️ The agent JAR is used at runtime via -javaagent (see below). You do not need to depend on it in your app classpath.


🧰 Usage

1) Run with the Java Agent

java \
  -javaagent:/path/to/aether-mixins-agent-0.1.0.jar \
  -Daether.mixins.config=/path/to/mixins.yml \
  -jar yourapp.jar

2) Minimal mixins.yml

version: 1
mixins:
  - name: core
    files:
      - mixins/app.refmap.json
runtime:
  safe_mode: true
  verify_frames: strict

3) Compile-time refmap generation (optional)

Use the annotation processor to auto-generate a refmap and a minimal mixins.yml from your
@Mixin, @Inject, and @Redirect declarations.


📝 Changelog

New in 0.1.0

  • 🎉 Initial release with end-to-end pipeline:
    • Agent & in-app runtime
    • @Inject(HEAD|TAIL) and @Redirect
    • ASM-backed weaving & optional frame recomputation
    • Refmap + YAML session configuration
    • Safe-mode & structured diagnostics
    • Annotation processor for refmap/mixins.yml generation

🗺️ Roadmap (next)

  • 0.2.x

    • Replace MVP shortcuts with richer injection logic
    • Conflict handling improvements & prioritization
    • Expanded @At support, @ModifyArg / @ModifyVar
    • Tooling polish and better diagnostics
  • 0.3.x

    • Hot-reload (dev), mapping adapters, more sample projects

📜 License

MIT — see LICENSE.