dotnet-charon 2026.2.1

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

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
2026.2.1 118 3/27/2026
2026.1.2 177 1/16/2026
2025.4.7 157 12/30/2025
2025.4.4 273 11/23/2025
2025.4.2 317 10/13/2025
2025.4.1 322 8/19/2025
2025.3.3 354 5/26/2025
2025.2.2 226 4/25/2025
2025.1.6 662 3/25/2025
2025.1.1 283 3/3/2025
Loading failed

# 2026.2.1
Date: Friday, March 27, 2026
## General
- Changed `ToolsVersion` format to use a version range instead of the exact app version, allowing a wider compatibility window between tools and data files.
## CLI
- Added game data tool version detection across all modes (CLI, UI, MCP) to prevent opening newer game data files with outdated tools.
## Game Data Editing
- Fixed empty translation notes being saved as an empty object `{}` instead of `null`.
## MCP
- Fixed an invalid tool name that caused the MCP server to fail on startup.
## User Interface
- Fixed cases where the UI was not updated when metadata changed (e.g., schema or property renames).
- Fixed machine translation not translating nested documents when the "Translate Text" action is used.
## Web Application
- Added DeepL as a translation provider, replacing Google Translate.
- Added last update time tracking for User, Workspace, and Project entities to detect stale accounts.
# 2026.2.0
Date: Monday, March 23, 2026
## CLI
- Added MCP server mode for the Charon CLI tool. Use `charon MCP` to run in stdio MCP mode. Discover available tools and resources with `npx @modelcontextprotocol/inspector`.
## MCP
- Added tools:
- Data: data_get_metadata, data_get_schema_as_json_schema, data_examine, data_export, data_export_to_file, data_import, data_import_from_file, data_backup, data_backup_to_file, data_restore, data_restore_from_file, data_validate, data_create, data_update, data_delete, data_find_by_id, data_list, data_search, data_create_patch, data_apply_patch, data_create_patch_to_file, data_apply_patch_from_file
- Localization: i18n_get_languages, i18n_add_language, i18n_export, i18n_export_to_file, i18n_import, i18n_import_from_file
- Discovery: data_find_files
- Code Generation: generate_csharp_code, generate_typescript_code, generate_uecpp_code, generate_haxe_code
- Added resources:
- enum_data_type, enum_import_mode, enum_export_mode, enum_validation_options, enum_schema_type, enum_id_generator_type, enum_bulk_change_status
- languages
- Added prompts:
- getting_started, creating_documents, creating_documents_multiple, editing_documents, editing_documents_multiple, importing_documents, replacing_whole_document_collection, deleting_documents_multiple, localization, code_generation, database_parameter
## Game Data Editing
- Fixed an issue where subscription updates from Stripe were occasionally missed, causing the subscription state to become stale.
## Code Generation
- Added support for Member/List initializer expressions in formulas for C# and TypeScript. The Unreal Engine C++ generator already includes this support.
- Added formula parameter and return type remapping for non-C# targets. For example, `string` is automatically replaced with `FString` in Unreal Engine C++ generated code.
- Added typed accessors for `vector2/3/4` fields in Unreal Engine C++ generated code. Field values can now be accessed using native types (`FVector2D`, `FVector`, `FVector4`) instead of unparsed `FString`. For example, a `Text` field with a `vector2` editor will generate an additional `FVector2D GetParsedPosition()` accessor method.
- Added formula support to the Unreal Engine C++ code generator. A class with an `Invoke` method is now generated for each formula type.
- Fixed `x is Type` expressions incorrectly returning `true` for `null` and `Object` in TypeScript generated code.
- Fixed private field names in Unreal Engine C++ generated code to start with a capital letter. Private caching fields on `UClass`-derived classes now include a `UPROPERTY` attribute to maintain valid object references.
- Fixed unsafe code execution in TypeScript formula code by forbidding `Function` constructor, `eval()`, prototype walking, `Reflect`, and similar mechanisms.
## Project
- Updated icons for project and package.
## User Interface
- Redesigned the schema deletion dialog to hide empty lists when deleting an empty or unused schema.
- Added support for copying and pasting documents directly from the table using `Ctrl/Cmd+C` and `Ctrl/Cmd+V`.
- Added recent document pinning. Pinned documents no longer decay and are always displayed first in the list.
- Added a notification for UI extension load errors, which fires when extensions are broken, incompatible, or conflict with each other.
- Added UI services to custom extension actions, enabling progress dialogs and snackbar action notifications. The Dashboard "New Schema" button now includes its first extension point in the menu.
- Fixed cases where the UI was not updated when metadata changed (e.g., schema or property renames).