dotnet-charon
2025.0.0
dotnet tool install --global dotnet-charon --version 2025.0.0
dotnet new tool-manifest # if you are setting up this repo dotnet tool install --local dotnet-charon --version 2025.0.0
#tool dotnet:?package=dotnet-charon&version=2025.0.0
nuke :add-package dotnet-charon --version 2025.0.0
Charon - Game Data Editor
Documentation • Discord • Website • Changelog • Issues
Plugins
Standalone
How to start with custom game engine → C# • 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 | Versions 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. |
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.