dotnet-charon 2025.4.7

dotnet tool install --global dotnet-charon --version 2025.4.7
                    
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.4.7
                    
This package contains a .NET tool you can call from the shell/command line.
#tool dotnet:?package=dotnet-charon&version=2025.4.7
                    
nuke :add-package dotnet-charon --version 2025.4.7
                    

Charon - Game Data Editor

DocumentationDiscordWebsiteChangelogIssues

Plugins

[Unity Asset Store] [Unity OpenUPM] [Unreal Engine Marketplace]

Standalone

How to start with custom game engineC#TypeScript

Summary

Charon is a powerful data-driven game development tool designed to streamline the creation and management of static game data within Unity. It allows both developers and game designers to efficiently model and edit game entities such as characters, items, missions, quests, and more, directly within the Unity environment. Charon simplifies the process of data manipulation, offering a user-friendly interface and automatic source code generation, which significantly reduces development time and minimizes manual coding 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.

Why Choose Charon?

Charon replaces traditional spreadsheets or config files with an in-game database, offering a structured and efficient way to manage game data. It allows developers to focus on creating engaging gameplay experiences without worrying about the technical details of data management.

Is It Free?

The offline version, CLI and plugins are completely free and have no restrictions. They are distributed under a free license and allow you to distribute tools along with the game for modding games.

The online version, which allows working in large teams on shared game data, requires a subscription.

What is Charon

It is a .NET 8 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, macOS and Linux and via dotnet.

How it works

To get started with Charon, you’ll need the following:

Once set up, follow these steps:

  • Create an empty gamedata.json file or use dotnet charon INIT gamedata.json command.
  • Launch the Charon tool by running:
    dotnet charon gamedata.json
    
    This command starts an HTTP server and automatically opens the Charon UI in your default web browser.
  • Use the intuitive web-based UI to design and edit your game data.
  • After editing, utilize Charon’s source code generator to produce engine-specific source code for your game data.
  • Integrate the generated source code into your game project. This allows you to load the gamedata.json file into your game in a structured and type-safe way, ensuring seamless and error-free data usage.

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.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.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.4.7 45 12/30/2025
2025.4.4 211 11/23/2025
2025.4.2 268 10/13/2025
2025.4.1 271 8/19/2025
2025.3.3 311 5/26/2025
2025.2.2 181 4/25/2025
2025.1.6 616 3/25/2025
2025.1.1 238 3/3/2025

# 2025.4.7
Date: Tuesday, December 30, 2025
## Code Generation
- Fixed an issue in the Unreal Engine C++ generator where an incorrect logger name was used, resulting in a compilation error.
## User Interface
- Added support for pasting multiple numeric values separated by spaces or commas into Vector2, Vector3, Vector4, and Rectangle input fields.
# 2025.4.6
Date: Sunday, December 21, 2025
## Game Data Editing
- Fixed an issue where the ID generator could occasionally produce `0` as a document identifier. While technically valid, this value is not recommended and is now avoided.
## User Interface
- Added a soft red background to visually indicate invalid cells in document tables.
- Fixed an issue where newly created table documents using custom identifiers disappeared after a successful save and only reappeared after a refresh.
- Replaced the separate **Save with Errors** dialog with a progressive **Save → Save Anyway** workflow. The option to save with errors on the first click is still available by holding the `Shift` key while clicking **Save**.
- Updated required text fields in newly created documents to initialize as `null` instead of empty strings, ensuring they are correctly reported as validation errors when left unfilled.
- Improved search relevance calculation and result sorting to favor exact matches and shorter results.
# 2025.4.5
Date: Thursday, December 11, 2025
## CLI
- Removed network interface enumeration from the log file header initialization, which previously could introduce startup delays.
## Game Data Editing
- Added detection of Perforce and PlasticSCM version control systems for the offline/standalone editor.
- Updated the extension manager to select the latest available version between local sources and NPM packages, rather than prioritizing the local version.
## Code Generation
- Added support for reusing existing Unreal Engine C++ documents when re-importing game data.
- Enabled the use of commas (,) to separate constant definitions for supported languages (C++ and C#).
- Relocated Unreal Engine C++ `#define` constants from the top of each file into the module declaration.
- Refactored document merge code generation to produce many smaller functions per document type rather than a single large merge function.
## User Interface
- Added the `app-version` meta tag and the `data-app-version` attribute to the HTML document’s `<body>` element.
# 2025.4.4
Date: Sunday, November 23, 2025
## Game Data Editing
- Fixed an issue where re-uploading the same file through a UI extension resulted in an HTTP 500 error.
## User Interface
- Added a dedicated expand/collapse button to the side menu to make the menu state easier to control and avoid confusion when restoring the expanded view.
- Implemented additional safeguards when loading invalid or malformed metadata (e.g., schemas or properties) to improve UI resilience.
- Resolved an issue where the `Shift + D` shortcut triggered document duplication while typing capital “D”. The table row duplication shortcut has been updated to `Ctrl + Shift + D`.
# 2025.4.3
Date: Wednesday, November 19, 2025
## General
feature: added generated code version defines into UE C++ generated code, so API version could be detected in pre-processor.
fii: updated app data paths on MacOS and Linux to use user's home directory instead of shared directory..
## CLI
fix(cli): fixed empty `--defineConstants ""` parameter results as #define False in generated code.
## Game Data Editing
feature(ds): allowed removal of referenced schemas. This will has cascading effect of deleting related properties and some data related to deleted schema. UI now is also showing what will be deleted.
feature(ds): introduced new `Schema` type - Tagged Union.
fix(ds): fixed display text generation for references when template from referenced schema is ignored.
fix(ds): foxed that extension folder not being scanned for extensions if it doesn't exists at application start, event when Re-Check button is pressed.
fix(ds): Saving documents with self-references via temporary ID (e.g. _ID_RANDOM_NUMBER) sometimes fails due to Broken reference error.
## REST
chore: Updated some ErrorCode enums in REST API for naming consistency.
## Code Generation
feature(gen): added fast RevisionHash implementation to generated UE C++ code. Original one was based on reflection.
feature(gen): added stubs for Lua, C++, Rust languages
fix(gen): disabled document id-based enums generation  for `Settings` documents because there only one instance of them.
## User Interface
feature(ui): added SHIFT + D for document duplication hotkey in table UI.
feature(ui): added "Upload NPM Package" button to "Project Settings -> Extensions" tab for Unity Plugin/Unreal Plugin/Standalone versions of editor. It would allow to upload NPM package to local extensions directory for debugging/development purposes.
Also added drop-down suggestion list from local NPM packages when picking which UI Extension package to use in "Project Settings -> Extensions" tab.
feature(ui): added auto-focus on first editable field after sub-document addition in Document Form.
feature(ui): added new relevance sorting for document search result based in exact match, partial match and Levenshtein distance scores.
feature(ui): added skeleton loading blocks instead of spinning progress loaders.
feature(ui): added Subscription Expired notification  and quick option to Renew.
feature(ui): disable Schema's menu visibility field when it is not applicable due Schema's type. For example for Component or Union schemas.
feature(ui): made possible to collapse/expand side menu to free up space. Also side menu goes into 'show over content'  mode when screen is too small.
fix(ui): added local document lookup to reference validator, this will fix false "broken reference" error messages.
fix(ui): disabled CSS animations in Unreal Engine plugin and prefer-reduced-motion devices
fix(ui): ensures that values of `ValueControl`s  are always right type (defined by associated `SchemaProperty` definition). This mostly affect UI extensions and make their development easier by guaranteeing right value types.
fix(ui): failed to discard changes containing Date values due to faulty equality implementation.
fix(ui): faulty uniqueness validation error due to invalid Id comparison of Schemas with Pick List typed ids
fix(ui): fixed asset list being stretched by huge preview images
fix(ui): fixed asset list now better positioned for a fields in rightmost side of the screen (no more cropping).
fix(ui): fixed case when validation errors being displayed even before control being touched first.
fix(ui): fixed document order is not preserved in collection due to JS object is not preserving numeric key order.
fix(ui): fixed document search not properly handles Pick List/Multi-Pick List based Ids.
fix(ui): fixed duplicate document entries in `Reference Collection` dropdown list.
fix(ui): fixed issue when some ids in embedded documents not being marked as read-only and allowing editing.  Changing ids of existing documents is not supported behaviour.
fix(ui): fixed some advanced fields of Schema not being hidden in basic mode (Display Text Template, Editor etc.)
fix(ui): highlight invalid non-empty fields in new documents. Empty ones still wait for first interaction before being validated.
fix(ui): in some cases validation error is not being shown in new documents (typically after page reload).
fix(ui): make sure JSON error properly displayed for new/exists document. Sometimes it is not reported.
fix(ui): make sure only actual local documents is displayed then Reference/Reference Colleciton field display list of available documents. This stop displaying ghosts of removed local documents when picking document to reference.