dotnet-charon
2025.4.1
dotnet tool install --global dotnet-charon --version 2025.4.1
dotnet new tool-manifest
dotnet tool install --local dotnet-charon --version 2025.4.1
#tool dotnet:?package=dotnet-charon&version=2025.4.1
nuke :add-package dotnet-charon --version 2025.4.1
Charon - Game Data Editor
Documentation • Discord • Website • Changelog • Issues
Plugins
[Unity Asset Store] [Unity OpenUPM] [Unreal Engine Marketplace]
Standalone
How to start with custom game engine → C# • 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:
- The
dotnet
runtime installed. - Either Unity [Asset] [OpenUPM], the Unreal Engine plugin, or the standalone tool, which you can install globally using the command:
dotnet tool install dotnet-charon --global
Once set up, follow these steps:
- Create an empty
gamedata.json
file or usedotnet charon INIT gamedata.json
command. - Launch the Charon tool by running:
This command starts an HTTP server and automatically opens the Charon UI in your default web browser.dotnet charon gamedata.json
- 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 | 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. 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. |
This package has no dependencies.
# 2025.4.1
Date: Monday, August 18, 2025
## Game Data Editing
- Fixed the language list in the empty project template—now defaults to English only.
- Fixed an issue where Reference Collection values were incorrectly marked as invalid when saving complex documents.
## Code Generation
- Added clearer "Getting Started" instructions to `.tt` template files.
## User Interface
- Slightly updated styles for document collection fields.
- Added `pathFilter` and `localOnly` parameters for Reference and Reference Collection input fields.
- Newly created local (unsaved) documents are now available for selection in Reference and Reference Collection dropdown lists.
- Changed document selection from row-click to checkboxes, improving usability on touch and non-keyboard/mouse devices.
- Implemented infinite scrolling (lazy loading) in the document grid, allowing large tables to load as you scroll. *(Note: not full virtual scrolling—rows are appended during scrolling)*.
- Moved the error indicator from the top of the form to the footer bar.
- Disabled promotional and release notes pop-ups for users who haven’t completed the tutorial.
- Fixed the clear action for the `LocalizedText` data type—now removes all language variants, not just the primary language text.
- Hid the "None" option from button toggle fields when the property is required and cannot have a null value.
- Added subscription expiration indication to the **Workspace / Subscription** page.
- Disabled Schema-related buttons when schema editing is not available.
- Disabled unavailable data type options when creating an Id property.
- Discarding changes on a new document now permanently deletes it instead of leaving behind a stub.
- Hid AI-related buttons when no AI token is available in the subscription package.
## Web Application
- Fixed an issue preventing password resets for OAuth2 users without an initial password. Passwords are now properly assigned in these cases.
- Added subscription expiration date indication to the **Workspace / Subscription** page. Also visually highlighted when a subscription has been downgraded to the Free plan and its associated limits.