GBX.NET 2.3.0-nightly.20251123.cee286e5

GBX.NET

NuGet Discord

A general purpose library for Gbx files - data from Nadeo games like Trackmania or Shootmania, written in C#/.NET. It supports high performance serialization and deserialization of 400+ Gbx classes.

For more details, see the main README.

Framework support

Due to the recently paced evolution of .NET, framework support has been limited only to a few ones compared to GBX.NET 1:

  • .NET 9
  • .NET 8
  • .NET 6
  • .NET Standard 2.0

You can still use GBX.NET 2 on the old .NET Framework, but the performance of the library could be degraded.

Usage

These examples expect you to have <ImplicitUsings>enable</ImplicitUsings>. If this does not work for you, add using System.Linq; at the top.

Map information

Additional package GBX.NET.LZO is required in this example.

using GBX.NET;
using GBX.NET.Engines.Game;
using GBX.NET.LZO;

Gbx.LZO = new Lzo();

var map = Gbx.ParseNode<CGameCtnChallenge>("Path/To/My.Map.Gbx");

foreach (var block in map.GetBlocks().GroupBy(x => x.Name))
{
    Console.WriteLine($"{block.Key}: {block.Count()}");
}

Map information from Gbx header

using GBX.NET;
using GBX.NET.Engines.Game;
using GBX.NET.LZO;

var map = Gbx.ParseHeaderNode<CGameCtnChallenge>("Path/To/My.Map.Gbx");

Console.WriteLine(map.MapName);
Console.WriteLine(map.Xml);

Header contains a lot less information than the full node.

Modify and save a map

using GBX.NET;
using GBX.NET.Engines.Game;
using GBX.NET.LZO;

Gbx.LZO = new Lzo();

var gbx = Gbx.Parse<CGameCtnChallenge>("Path/To/My.Map.Gbx");
var map = gbx.Node; // See Clarity section for more info

map.MapName = "My new map name";

gbx.Save("Path/To/MyNew.Map.Gbx");

The trick here is that the Gbx properties are saved in the gbx object variable (Gbx class).

If you were to go with ParseNode in this case, this would not work for TMF and older games, but it is still possible if you specify the Gbx parameters in the Save method:

map.Save("Path/To/MyNew.Map.Gbx", new()
{
    PackDescVersion = 2 // Latest known PackDesc version in TMF
});

For TMS or TMN ESWC, you would have to specify ClassIdRemapMode for example:

map.Save("Path/To/MyNew.Map.Gbx", new()
{
    ClassIdRemapMode = ClassIdRemapMode.Id2006
    PackDescVersion = 1
});

These save parameters depend on the game of choice, but since Trackmania 2, this does not matter.

Processing multiple Gbx types

Additional package GBX.NET.LZO is required in this example.

This example shows how you can retrieve ghost objects from multiple different types of Gbx:

using GBX.NET;
using GBX.NET.Engines.Game;
using GBX.NET.LZO;

Gbx.LZO = new Lzo();

var node = Gbx.ParseNode("Path/To/My.Gbx");

var ghost = node switch
{
    CGameCtnReplayRecord replay => replay.GetGhosts().FirstOrDefault(),
    CGameCtnMediaClip clip => clip.GetGhosts().FirstOrDefault(),
    CGameCtnGhost g => g,
    _ => null
};

if (ghost is null)
{
    Console.WriteLine("This Gbx file does not have any ghost.");
}
else
{
    Console.WriteLine("Time: {0}", ghost.RaceTime);
}

Using pattern matching with non-generic Parse methods is a safer approach (no exceptions on different Gbx types), but less trim-friendly.

Read a large amount of replay metadata quickly

In case you only need the most basic information about many of the most common Gbx files (maps, replays, items, ...), do not read the full Gbx file, but only the header part. It is a great performance benefit for disk scans.

using GBX.NET;
using GBX.NET.Engines.Game;

foreach (var filePath in Directory.EnumerateFiles("Path/To/My/Directory", "*.Replay.Gbx", SearchOption.AllDirectories))
{
    try
    {
        DisplayBasicReplayInfo(filePath);
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Gbx exception occurred {Path.GetFileName(filePath)}: {ex}");
    }
}

void DisplayBasicReplayInfo(string filePath)
{
    var nodeHeader = Gbx.ParseHeaderNode(filePath);

    if (nodeHeader is CGameCtnReplayRecord replay)
    {
        Console.WriteLine($"{replay.MapInfo}: {replay.Time}");
    }
}

File types

Some of the common types to start with (a lot more are supported):

Latest extension Class Can read Can write Other extension/s
Map.Gbx CGameCtnChallenge Yes Yes Challenge.Gbx
Replay.Gbx CGameCtnReplayRecord Yes No
Ghost.Gbx CGameCtnGhost Yes Yes
Clip.Gbx CGameCtnMediaClip Yes Yes
Item.Gbx CGameItemModel Yes Yes Block.Gbx
Mat.Gbx CPlugMaterialUserInst Yes Yes
Mesh.Gbx CPlugSolid2Model Yes Yes
Shape.Gbx CPlugSurface Yes Yes
Macroblock.Gbx CGameCtnMacroBlockInfo Yes Yes
LightMapCache.Gbx CHmsLightMapCache No No
SystemConfig.Gbx CSystemConfig Yes Yes
FidCache.Gbx CMwRefBuffer Yes Yes
Profile.Gbx CGamePlayerProfile Up to TMF Up to TMF
Scores.Gbx CGamePlayerScore No No

Supported games

Many essential Gbx files from many games are supported:

  • Trackmania (2020), December 2024 update
  • ManiaPlanet 4(.1), TM2/SM
  • Trackmania Turbo
  • ManiaPlanet 3, TM2/SM
  • ManiaPlanet 2, TM2/SM
  • ManiaPlanet 1, TM2
  • TrackMania Forever, Nations/United
  • Virtual Skipper 5
  • TrackMania United
  • TrackMania Nations ESWC
  • TrackMania Sunrise eXtreme
  • TrackMania Original
  • TrackMania Sunrise
  • TrackMania Power Up
  • TrackMania (1.0)

License

GBX.NET library (this package) is MIT Licensed.

However, if you would use GBX.NET.LZO package with it (which is usually required), you'd need to follow the GNU GPL v3 License. See License section on the main README for more details.

Special thanks

Without these people, this project wouldn't be what it is today (ordered by impact):

  • Stefan Baumann (Solux)
  • Melissa (Miss)
  • florenzius
  • Kim
  • tilman
  • schadocalex
  • James Romeril
  • frolad (Juice)
  • Mika Kuijpers (TheMrMiku)
  • donadigo

And many thanks to every bug reporter!

Showing the top 20 packages that depend on GBX.NET.

Packages Downloads
GBX.NET.LZO
An LZO compression plugin for GBX.NET to allow de/serialization of compressed Gbx bodies. This official implementation uses lzo 2.10 from NativeSharpLzo and minilzo 2.06 port by zzattack.
204
GBX.NET.Tool
Base library for creating rich tools for different environments with GBX.NET.
174
GBX.NET.Imaging.SkiaSharp
Provides extensions for image handling in GBX.NET (Google's Skia with SkiaSharp).
153
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
133
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
125
GBX.NET.Hashing
Hashing features (CRC32) for GBX.NET 2.
123
GBX.NET.Tool
Base library for creating rich tools for different environments with GBX.NET.
119
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
114
GBX.NET.PAK
Support for reading Pak (NadeoPak) package files, integrated with GBX.NET.
112
GBX.NET.PAK
Support for reading Pak (NadeoPak) package files, integrated with GBX.NET.
111
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
110
GBX.NET.Tool
Base library for creating rich tools for different environments with GBX.NET.
110
GBX.NET.Tool
Base library for creating rich tools for different environments with GBX.NET.
109
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
107
GBX.NET.PAK
Support for reading Pak (NadeoPak) package files, integrated with GBX.NET.
107
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
106
GBX.NET.PAK
Support for reading Pak (NadeoPak) package files, integrated with GBX.NET.
106
GBX.NET.ZLib
Support for zlib compressed parts of Gbx, integrated with GBX.NET. This official implementation uses Iconic.Zlib.Netstandard.
105
GBX.NET.Tool
Base library for creating rich tools for different environments with GBX.NET.
102

Version Downloads Last updated
2.3.4 7 02/19/2026
2.3.4-nightly.20260222.c2c53972 1 02/22/2026
2.3.4-nightly.20260221.c2c53972 1 02/21/2026
2.3.4-nightly.20260220.cb4c2544 3 02/20/2026
2.3.3 21 02/06/2026
2.3.3-nightly.20260218.c61de90a 8 02/18/2026
2.3.3-nightly.20260217.c61de90a 9 02/17/2026
2.3.3-nightly.20260216.cb860944 10 02/16/2026
2.3.3-nightly.20260215.c79ed6f5 10 02/15/2026
2.3.3-nightly.20260214.c9dda661 10 02/14/2026
2.3.3-nightly.20260213.c24fcba4 13 02/13/2026
2.3.3-nightly.20260212.c24fcba4 15 02/12/2026
2.3.3-nightly.20260211.c24fcba4 16 02/11/2026
2.3.3-nightly.20260210.c24fcba4 12 02/10/2026
2.3.3-nightly.20260209.c24fcba4 13 02/09/2026
2.3.3-nightly.20260208.cb9e7d37 12 02/08/2026
2.3.3-nightly.20260207.cb9e7d37 12 02/07/2026
2.3.3-nightly.20260206.c876e805 15 02/06/2026
2.3.3-nightly.20260205.c876e805 11 02/05/2026
2.3.2 35 01/31/2026
2.3.2-nightly.20260204.c36b2750 20 02/04/2026
2.3.2-nightly.20260203.ce70bca8 13 02/03/2026
2.3.2-nightly.20260202.c5155b72 15 02/02/2026
2.3.2-nightly.20260201.c08e9cf0 15 02/01/2026
2.3.2-nightly.20260131.ca3d31a1 19 01/31/2026
2.3.2-nightly.20260130.c71043e7 21 01/30/2026
2.3.2-nightly.20260129.cab73d6a 17 01/29/2026
2.3.1 25 01/28/2026
2.3.0 54 01/06/2026
2.3.0-nightly.20260128.cca24500 15 01/28/2026
2.3.0-nightly.20260127.c901462b 19 01/27/2026
2.3.0-nightly.20260126.c901462b 17 01/26/2026
2.3.0-nightly.20260125.c901462b 16 01/25/2026
2.3.0-nightly.20260124.c901462b 17 01/24/2026
2.3.0-nightly.20260123.c901462b 20 01/23/2026
2.3.0-nightly.20260122.c7a55df5 19 01/22/2026
2.3.0-nightly.20260121.c7a55df5 16 01/21/2026
2.3.0-nightly.20260120.c7a55df5 22 01/20/2026
2.3.0-nightly.20260119.c7a55df5 21 01/19/2026
2.3.0-nightly.20260118.c7a55df5 19 01/18/2026
2.3.0-nightly.20260117.c7a55df5 22 01/17/2026
2.3.0-nightly.20260116.c90625c0 23 01/16/2026
2.3.0-nightly.20260115.c90625c0 20 01/15/2026
2.3.0-nightly.20260114.c90625c0 23 01/14/2026
2.3.0-nightly.20260113.cbc80995 28 01/13/2026
2.3.0-nightly.20260112.cacd11b1 24 01/12/2026
2.3.0-nightly.20260111.cacd11b1 29 01/11/2026
2.3.0-nightly.20260110.cacd11b1 23 01/10/2026
2.3.0-nightly.20260109.cb7e37fc 29 01/09/2026
2.3.0-nightly.20260108.c8bc1866 26 01/08/2026
2.3.0-nightly.20260107.c8bc1866 23 01/07/2026
2.3.0-nightly.20260106.c02413cc 25 01/06/2026
2.3.0-nightly.20260105.c02413cc 27 01/05/2026
2.3.0-nightly.20260104.cf04ebd8 21 01/04/2026
2.3.0-nightly.20260103.c4dfc285 23 01/03/2026
2.3.0-nightly.20260102.c4dfc285 25 01/02/2026
2.3.0-nightly.20260101.c4dfc285 33 01/01/2026
2.3.0-nightly.20251231.c4dfc285 36 12/31/2025
2.3.0-nightly.20251230.c4dfc285 28 12/30/2025
2.3.0-nightly.20251229.c4dfc285 33 12/29/2025
2.3.0-nightly.20251228.c4dfc285 28 12/28/2025
2.3.0-nightly.20251227.c4dfc285 31 12/27/2025
2.3.0-nightly.20251226.c4dfc285 35 12/26/2025
2.3.0-nightly.20251225.c4dfc285 32 12/25/2025
2.3.0-nightly.20251224.c4dfc285 35 12/24/2025
2.3.0-nightly.20251223.c4dfc285 28 12/23/2025
2.3.0-nightly.20251222.c5e605d0 35 12/22/2025
2.3.0-nightly.20251221.c5e605d0 34 12/21/2025
2.3.0-nightly.20251220.c5e605d0 38 12/20/2025
2.3.0-nightly.20251219.c5e605d0 37 12/19/2025
2.3.0-nightly.20251218.c5e605d0 40 12/18/2025
2.3.0-nightly.20251217.cf86955d 39 12/17/2025
2.3.0-nightly.20251216.c7d5e6b0 35 12/16/2025
2.3.0-nightly.20251215.cdd724b7 44 12/15/2025
2.3.0-nightly.20251215.c7d5e6b0 56 12/15/2025
2.3.0-nightly.20251214.cb34438e 40 12/14/2025
2.3.0-nightly.20251214.c8b776c7 39 12/14/2025
2.3.0-nightly.20251214.c2b1ee1f 48 12/14/2025
2.3.0-nightly.20251213.c8b776c7 34 12/13/2025
2.3.0-nightly.20251212.c8b776c7 41 12/12/2025
2.3.0-nightly.20251211.c8b776c7 39 12/11/2025
2.3.0-nightly.20251210.c8b776c7 37 12/10/2025
2.3.0-nightly.20251209.c7a2121c 37 12/09/2025
2.3.0-nightly.20251208.c7a2121c 39 12/08/2025
2.3.0-nightly.20251207.c7a2121c 28 12/07/2025
2.3.0-nightly.20251206.c7a2121c 45 12/06/2025
2.3.0-nightly.20251205.c7a2121c 41 12/05/2025
2.3.0-nightly.20251204.c7a2121c 33 12/04/2025
2.3.0-nightly.20251203.c7a2121c 50 12/03/2025
2.3.0-nightly.20251202.c7a2121c 40 12/02/2025
2.3.0-nightly.20251201.c7952f69 36 12/01/2025
2.3.0-nightly.20251130.cee286e5 42 11/30/2025
2.3.0-nightly.20251129.cee286e5 56 11/29/2025
2.3.0-nightly.20251128.cee286e5 47 11/28/2025
2.3.0-nightly.20251127.cee286e5 47 11/27/2025
2.3.0-nightly.20251126.cee286e5 44 11/26/2025
2.3.0-nightly.20251125.cee286e5 40 11/25/2025
2.3.0-nightly.20251124.cee286e5 74 11/24/2025
2.3.0-nightly.20251123.cee286e5 67 11/23/2025
2.3.0-nightly.20251122.cee286e5 74 11/22/2025
2.3.0-nightly.20251121.cee286e5 57 11/21/2025
2.3.0-nightly.20251120.cee286e5 70 11/20/2025
2.3.0-nightly.20251119.cee286e5 81 11/19/2025
2.3.0-nightly.20251118.cee286e5 81 11/18/2025
2.3.0-nightly.20251117.cee286e5 75 11/17/2025
2.3.0-nightly.20251116.cd6cbb8f 64 11/16/2025
2.3.0-nightly.20251115.cd6cbb8f 46 11/15/2025
2.3.0-nightly.20251114.cd6cbb8f 33 11/14/2025
2.2.2 206 09/12/2025
2.2.2-nightly.20251113.cc7ee0c7 57 11/13/2025
2.2.2-nightly.20251112.cc7ee0c7 41 11/12/2025
2.2.2-nightly.20251111.cc7ee0c7 49 11/11/2025
2.2.2-nightly.20251110.cc7ee0c7 65 11/10/2025
2.2.2-nightly.20251109.cc7ee0c7 59 11/09/2025
2.2.2-nightly.20251108.cc7ee0c7 56 11/08/2025
2.2.2-nightly.20251107.cc7ee0c7 52 11/07/2025
2.2.2-nightly.20251106.cc7ee0c7 52 11/06/2025
2.2.2-nightly.20251105.cc7ee0c7 59 11/05/2025
2.2.2-nightly.20251104.cc7ee0c7 46 11/04/2025
2.2.2-nightly.20251103.cc7ee0c7 59 11/03/2025
2.2.2-nightly.20251102.c43def11 60 11/02/2025
2.2.2-nightly.20251101.c43def11 48 11/01/2025
2.2.2-nightly.20251031.c43def11 63 10/31/2025
2.2.2-nightly.20251030.c43def11 63 10/30/2025
2.2.2-nightly.20251029.c43def11 72 10/29/2025
2.2.2-nightly.20251028.ce6a6ed6 74 10/28/2025
2.2.2-nightly.20251027.ce6a6ed6 49 10/27/2025
2.2.2-nightly.20251026.ce6a6ed6 66 10/26/2025
2.2.2-nightly.20251025.ce6a6ed6 67 10/25/2025
2.2.2-nightly.20251024.ce6a6ed6 62 10/24/2025
2.2.2-nightly.20251023.ce6a6ed6 70 10/23/2025
2.2.2-nightly.20251022.ce6a6ed6 64 10/22/2025
2.2.2-nightly.20251021.ce6a6ed6 65 10/21/2025
2.2.2-nightly.20251020.cd56d4a7 65 10/20/2025
2.2.2-nightly.20251019.cf7d66e0 69 10/19/2025
2.2.2-nightly.20251018.cf7d66e0 58 10/18/2025
2.2.2-nightly.20251017.c5a52eb9 69 10/17/2025
2.2.2-nightly.20251016.c5a52eb9 66 10/16/2025
2.2.2-nightly.20251015.c5a52eb9 58 10/15/2025
2.2.2-nightly.20251014.c5a52eb9 56 10/14/2025
2.2.2-nightly.20251013.c5a52eb9 59 10/13/2025
2.2.2-nightly.20251012.c5a52eb9 68 10/12/2025
2.2.2-nightly.20251011.c5a52eb9 72 10/11/2025
2.2.2-nightly.20251010.c5a52eb9 59 10/10/2025
2.2.2-nightly.20251009.c5a52eb9 68 10/09/2025
2.2.2-nightly.20251008.c5a52eb9 69 10/08/2025
2.2.2-nightly.20251007.c55d6ba0 57 10/07/2025
2.2.2-nightly.20251006.c55d6ba0 76 10/06/2025
2.2.2-nightly.20251005.c2c8c81e 73 10/05/2025
2.2.2-nightly.20251004.c2c8c81e 81 10/04/2025
2.2.2-nightly.20251003.cce76ab7 64 10/03/2025
2.2.2-nightly.20251002.cce76ab7 78 10/02/2025
2.2.2-nightly.20251001.cce76ab7 79 10/01/2025
2.2.2-nightly.20250930.cce76ab7 76 09/30/2025
2.2.2-nightly.20250929.cce76ab7 61 09/29/2025
2.2.2-nightly.20250928.cce76ab7 67 09/28/2025
2.2.2-nightly.20250927.cce76ab7 68 09/27/2025
2.2.2-nightly.20250926.cce76ab7 49 09/26/2025
2.2.2-nightly.20250925.cce76ab7 81 09/25/2025
2.2.2-nightly.20250924.cce76ab7 61 09/24/2025
2.2.2-nightly.20250923.cce76ab7 80 09/23/2025
2.2.2-nightly.20250922.cce76ab7 81 09/22/2025
2.2.2-nightly.20250921.cce76ab7 83 09/21/2025
2.2.2-nightly.20250920.cce76ab7 82 09/20/2025
2.2.2-nightly.20250919.cce76ab7 56 09/19/2025
2.2.2-nightly.20250918.cce76ab7 51 09/18/2025
2.2.2-nightly.20250917.cce76ab7 60 09/17/2025
2.2.2-nightly.20250916.cce76ab7 61 09/16/2025
2.2.2-nightly.20250915.cce76ab7 52 09/15/2025
2.2.2-nightly.20250914.cce76ab7 88 09/14/2025
2.2.2-nightly.20250913.cce76ab7 68 09/13/2025
2.2.2-nightly.20250912.cba11d3c 59 09/12/2025
2.2.2-nightly.20250911.cba11d3c 62 09/11/2025
2.2.2-nightly.20250910.cba11d3c 66 09/10/2025
2.2.2-nightly.20250909.cba11d3c 80 09/09/2025
2.2.2-nightly.20250908.cba11d3c 73 09/08/2025
2.2.2-nightly.20250907.cba11d3c 77 09/07/2025
2.2.2-nightly.20250906.cba11d3c 75 09/06/2025
2.2.2-nightly.20250905.cba11d3c 87 09/05/2025
2.2.2-nightly.20250904.cba11d3c 91 09/04/2025
2.2.2-nightly.20250903.cba11d3c 95 09/03/2025
2.2.2-nightly.20250902.cba11d3c 89 09/02/2025
2.2.2-nightly.20250901.cba11d3c 93 09/01/2025
2.2.2-nightly.20250831.cba11d3c 90 08/31/2025
2.2.2-nightly.20250830.cba11d3c 79 08/30/2025
2.2.2-nightly.20250829.cba11d3c 61 08/29/2025
2.2.2-nightly.20250828.cde940d2 77 08/28/2025
2.2.2-nightly.20250827.c8257ead 89 08/27/2025
2.2.1-nightly.20250826.c1aa6590 97 08/26/2025
2.2.1-nightly.20250825.c3a861aa 86 08/25/2025
2.2.1-nightly.20250824.c3a861aa 93 08/24/2025
2.2.1-nightly.20250823.c3a861aa 83 08/23/2025
2.2.1-nightly.20250822.c3a861aa 60 08/22/2025
2.2.1-nightly.20250821.c3a861aa 95 08/21/2025
2.2.1-nightly.20250820.c3a861aa 54 08/20/2025
2.2.1-nightly.20250819.c3a861aa 59 08/19/2025
2.2.1-nightly.20250818.c5bbab68 81 08/18/2025
2.2.1-nightly.20250817.ce814990 66 08/17/2025
2.2.1-nightly.20250817.c6817f0a 86 08/17/2025
2.2.1-nightly.20250816.c6817f0a 59 08/16/2025
2.2.1-nightly.20250815.c6817f0a 100 08/15/2025
2.2.1-nightly.20250814.c6817f0a 60 08/14/2025
2.2.1-nightly.20250813.c6817f0a 100 08/13/2025
2.2.1-nightly.20250812.c6817f0a 93 08/12/2025
2.2.1-nightly.20250811.c6817f0a 53 08/11/2025
2.2.1-nightly.20250810.c6817f0a 65 08/10/2025
2.2.1-nightly.20250809.c6817f0a 56 08/09/2025
2.2.1-nightly.20250808.c6817f0a 68 08/08/2025
2.2.1-nightly.20250807.c6817f0a 56 08/07/2025
2.2.1-nightly.20250806.c6817f0a 53 08/06/2025
2.2.1-nightly.20250805.c6817f0a 57 08/05/2025
2.2.1-nightly.20250804.c6817f0a 127 08/04/2025
2.2.1-nightly.20250803.c6817f0a 89 08/03/2025
2.2.1-nightly.20250802.c6817f0a 73 08/02/2025
2.2.1-nightly.20250801.c6817f0a 59 08/01/2025
2.2.1-nightly.20250731.c6817f0a 68 07/31/2025
2.2.1-nightly.20250730.c6817f0a 94 07/30/2025
2.2.1-nightly.20250729.c6817f0a 73 07/29/2025
2.2.1-nightly.20250728.ca7f9be8 85 07/28/2025
2.2.1-nightly.20250727.cd7b47aa 71 07/27/2025
2.2.1-nightly.20250726.cd7b47aa 82 07/26/2025
2.2.1-nightly.20250725.cd7b47aa 73 07/25/2025
2.2.1-nightly.20250724.cd7b47aa 93 07/24/2025
2.2.1-nightly.20250723.cd7b47aa 92 07/23/2025
2.2.1-nightly.20250722.cd7b47aa 80 07/22/2025
2.2.1-nightly.20250721.cd7b47aa 98 07/21/2025