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.

- 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.

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

Library
-
Version has been updated:
gradle.properties:nitea_versionbumped 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.javarewritten:- sends the new
X-Nitea-*headers (protocol, mod, owner, timestamp, signature, proof of work); - 429: pauses sending for as long as
Retry-Aftersays; - 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.
- sends the new
-
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).
- finds which Nitea version a mod was built with, by reading the Nitea jar it bundles (NeoForge/Forge Jar-in-Jar, Fabric include, or
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;
initnever 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
compatFixturetask: saves the current release's jar for future compatibility tests; -PupdateApirewrites the API snapshot.
Tests
ApiCompatibilityTest: every public signature ever released still exists. One snapshot per version inresources/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: newerror(...)level.internal/Json.java: newreadLong(...).- 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]