dotnet-charon 2025.0.0

dotnet tool install --global dotnet-charon --version 2025.0.0                
This package contains a .NET tool you can call from the shell/command line.
dotnet new tool-manifest # if you are setting up this repo
dotnet tool install --local dotnet-charon --version 2025.0.0                
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=dotnet-charon&version=2025.0.0                
nuke :add-package dotnet-charon --version 2025.0.0                

Charon - Game Data Editor

DocumentationDiscordWebsiteChangelogIssues

Plugins

Unity Unreal Engine

Standalone

How to start with custom game engineC#TypeScript

Summary

Charon is a powerful game development tool that streamlines the game development process. It provides a structured approach to designing and modeling game data, with automatic source code generation that reduces the load on programmers and eliminates human errors. Charon also offers support for working with text in multiple languages, with easy loading and unloading of translated text.

With Charon, game developers can focus on creating engaging gameplay experiences without worrying about the technical details of managing game data. It is available in three deployment variants, including a standalone/offline application, web application, Unity and Unreal Engine plugins.

What is Charon

It is a .NET Core console application that can be used as a command-line tool for performing CRUD operations with your game data, or as an HTTP Server to provide a UI for modeling and editing your game data. There are plugins for Unity and Unreal Engine that provide a more integrated experience while using Charon.
As with any .NET application, it can be launched as is on Windows and via Mono/Dotnet on macOS and Linux.

How it works

You create an empty gamedata.json file when launching the Charon.exe application, which acts as an HTTP server. You edit your game data in the UI, then generate source code for your game engine. With this source code, you load gamedata.json into your game and use it in a safe and structured manner.

C# Code Example

using System.IO;

using var fileStream = File.OpenRead("gamedata.json"); // or .gdjs
var gameData = new GameData(fileStream, new Formatters.GameDataLoadOptions { Format = Formatters.Format.Json });

var heroes = gameData.Heroes.AsList // -> IReadOnlyList<Hero>
// or
var heroById = gameData.AllHeroes.Find("Arbalest"); // -> Hero | null

C++ Code Example

#include "UGameData.h"

TSoftObjectPtr<UGameData> GameDataPtr = TEXT("/Game/Content/GameData");
auto GameData = GameDataPtr.LoadSynchronous(); // -> UGameData*

auto Heroes = GameData->Heroes; // -> TMap<FString,UHero*>
auto HeroById = GameData->Heroes.Find(TEXT("Arbalest")); // -> UHero**

TypeScript Code Example

import { GameData } from './game.data';
import { Formatters } from './formatters';

// Node.js
import { readFileSync } from 'fs';
const gameDataStream = readFileSync(gameDataFilePath);

// Blob or File
const gameDataStream = gameDataFileBlob.arrayBuffer();

// XMLHttpRequest (XHR)
// gameDataRequest.responseType -> "arraybuffer"
const gameDataStream = gameDataRequest.response;

const gameData = new GameData(gameDataStream, {
  format: Formatters.GameDataFormat.Json
});

let heroes = gameData.heroes; // -> readonly Hero[]
let hero = gameData.heroesAll.find("Arbalest"); // -> Hero | undefined

Haxe Code Example

import GameData;
import Formatters;
import haxe.io.Path;
sys.io.File;

var input = File.read("RpgGameData.gdjs"); // or .json
var options = new GameDataLoadOptions();
options.format = GameDataFormat.Json;
var gameData = new GameData(input, options);

var allHeroes = gameData.heroesAll.list // -> ReadOnlyArray<Hero>
var heroById = gameData.heroesAll.get("Arbalest"); // -> Hero

License

  • Generated Code - MIT
  • Plugins:
    • Unreal Engine - MIT
    • Unity - Unity Asset Store License
  • Charon - CC BY-ND - can freely use and can redistribute, as long as it is passed along unchanged and in whole.
Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

Version Downloads Last updated
2025.0.0 97 1/30/2025

# 2025.1.1
- Default deployment is changed from .NET Framework Tool package to `dotnet tool` Nuget package.
Now to install and run Charon CLI it is require only two commands `dotnet tool install -global dotnet-charon` and `charon ...`.
- New JSON/BSON/MessagePack formatters implementation cause less memory garbage and perform faster.
- Overall performance is better with .NET Core runtime because it has memory and performance optimizations in contrast to .NET Framework.
- XML format has been discontinued.
- Option to use build-in T4 transform tool via CLI command `GENERATE TEXT` is removed. Use `dotnet-t4` tool, see https://github.com/mono/t4 project documentation for details.
- Added language IDs (BCP-47) in addition to names in `Project -> Internationalization` section.
- Fixed limited resources allowance (AI Tokens, Machine Translation) rolling at the end of the months.
- BREAKING CHANGE: Export now will not longer auto-include containing schemas for exported schema list. So if schema is embedded in another one, you need explicitly specify root schema to export.
- Export mode Extraction is now same as Normal, and Normal always export valid document graph without broken references.
- BREAKING CHANGE: Primary translation language text now always go as first member in JSON/Message Pack/XLSX formatted data and rest in alphabetical order. Before it was alphabetical order of language ids (BCP-47).
- Changed order of collections in `Collections` field of game data. Now `Project Settings`, `Schemas`, goes first and rest in alphabetical order.
- XSLX spreadsheet no longer hide Id column if values is auto-generated.
- Added document count validation for `Component`/`Settings` schema type. Now it will warn if wrong number of documents are present for these schema types.
- Added option to hide schema in left-side menu in UI. This option is hidden behind `Actions -> Advanced Options` toggle.
- Schema name `SchemaPropertyType` is now reserved and can't be used for you schemas.
- Added next/previous navigation buttons to document form UI. Allowing navigation within document collection without roundtrip to document list.
- Add additional create button to document form UI at `Actions -> Create`. Allowing creation of new document without roundtrip to document list.
- Added view mode `Form/Layout/Json` switch for document form to right bottom corner. Layout view move available only for schemas.
- Added option to rearrange or group schema properties on the form.
- Added CLI command `charon <filename>` to quickstart application passing only one file name as first parameter. It will start HTTP server with default parameters and open UI in default OS browser.
- Added CLI command `charon INIT <filename>` to create/initialize empty game data file.