Track your plugin performances!

Library 路 1.1.0pyrogenous

Changelog

A new update of Nitea has been released. Please, read the changelog to see what have been modified or added!

馃帀 A new update of Nitea has been released

This new update features new features as well as edits to previously added features.

What has been added?

Platform

  • You can now link your GitHub mod repo to keep track of the releases of your mod. Be sure to correctly identify every release with a version tag. In order to use the features that will be explained below (2, 3), it will be mandatory to link the repository.

Screenshot 2026-09-26 122352.png

  • You can now track your mod performances between updates. You will be able to study how your mod improved since your last update, analyzing the difference in issues reports.

Screenshot 2026-09-26 120506.png

  • The performances page features also a ranking system of your mod releases, which shows what release has** performed the best**

Screenshot 2026-09-26 122449.png

Library

  • Version has been updated: gradle.properties: nitea_version bumped from 0.3.0 to 0.4.0. Ensure that you update your mod dependencies.

  • Request signing and proof of work

    • New internal/Signer.java:

      • signs every request with HMAC-SHA256 over method, path, timestamp, mod ID, owner class and a hash of the body, keyed with the SHA-256 of the SDK key;
      • adds a proof of work (the server says how many bits it wants; the library refuses more than 24).
    • internal/Transport.java rewritten:

      • sends the new X-Nitea-* headers (protocol, mod, owner, timestamp, signature, proof of work);
      • 429: pauses sending for as long as Retry-After says;
      • 428 (more proof of work) and 400 clock_skew: corrects and resends right away;
      • 401 (bad key), 403 (key of another mod, or blocked project), 426 (Nitea too old): turns Nitea off for that mod until the next launch and logs why.

Kill switch for old mods

  • New internal/Compat.java:
    • finds which Nitea version a mod was built with, by reading the Nitea jar it bundles (NeoForge/Forge Jar-in-Jar, Fabric include, or fabric.mod.json);
    • counts how many versions that is behind the one running; the supported window is 5 (SUPPORTED_LINES).
  • Nitea.init:
    • a mod more than 5 versions behind still starts, but gets a client that does nothing, isn't registered, and logs an error telling its author to update;
    • init never throws anymore: if Nitea fails to start, the mod gets a do-nothing client;
    • it also warns when the mod was built with a newer Nitea than the one the game loaded.

Build

  • core/build.gradle:
    • tests now run on JDK 25, because 0.2.0 was built for Java 25; the library itself still targets Java 8;
    • new compatFixture task: saves the current release's jar for future compatibility tests;
    • -PupdateApi rewrites the API snapshot.

Tests

  • ApiCompatibilityTest: every public signature ever released still exists. One snapshot per version in resources/api/ (0.2, 0.3, 0.4).
  • LegacyCompatibilityTest, using the real 0.2.0 and 0.3.0 jars I built from your tags:
    • a test mod is compiled against each old jar, then run on the new Nitea, and its events must arrive signed;
    • an old copy and the new one in the same game share consent, installation ID, the mod list and error attribution.
  • CompatTest: version detection from mod jars, the version arithmetic, and the kill switch (a mod 6 versions behind is off, 5 behind stays on).
  • ProtocolTest: signing, proof of work, and each server answer. It uses the same test vector as the website, so both sides must compute the same bytes.
  • Helpers: TestApi (a fake server that checks signatures), Javac, ApiSurface, Fixtures.

What has been modified?

Platform

  • Fixed landing page, where user avatar wasn't shown even if logged in. Now it shows the PfP, ensuring an hassle-free auth revalidation flow.
  • Fixed some bugs affecting the authentication flow
  • Fixed appearance, making the UI more attractive.

Library

  • NiteaClient:
    • a new internal constructor that takes the reason Nitea is off for the mod;
    • it passes the owner class to Transport;
    • it warns when no owner(...) is set.
  • internal/Log.java: new error(...) level.
  • internal/Json.java: new readLong(...).
  • No public method was added, removed or changed. The API snapshot is identical to 0.2 and 0.3.

The documentation has been generated following the new/edited features.

Feel free to reach to us if anything isn't working the proper way at [email protected]