TrimKit.GameSettings

October 8, 2025 ยท View on GitHub

A lightweight and generic JSON-based settings manager for small games or C# applications. Designed for simplicity, low and ease of use.

Features

  • Strongly typed via generics (GameSettings<T>).
  • Automatically populates settings on initialization.
  • Gracefully handles corrupt or invalid data (auto-resets to defaults).

Installation

Use provided nuget package or download the source.

NuGet

:wrench: dotnet add package TrimKit.GameSettings

Quick start

Define your settings class - any public fields or properties will be serialized:

public class MySettings
{
    public string Name = "Player";
    public bool Fullscreen = true;
    public float Volume = 0.8f;
    public Difficulty Difficulty = Difficulty.Normal;
}

Initialize settings object. It will automatically load existing settings from the disk or populate default values if it couldn't.

var settings = new GameSettings<MySettings>("MyAwesomeGame");

And then, just use it!

// read values using static typing
var temp = settings.Values.Fullscreen;

// modify values
settings.Values.Volume = 0.5f;
settings.Values.Name = "UserX";

// save settings to file at any time
settings.Save();

// or load from file
settings.Load();

// reset to defaults
settings.ResetToDefaults();

API Overview

Method / PropertyDescription
string SettingsDirectoryPathFull path to the settings folder inside AppData.
string SettingsFilePathFull path to the JSON file.
T ValuesThe current settings object instance.
void Save()Saves settings to disk (atomic write).
void Load()Loads from disk; resets and overwrites if corrupted.
void ResetToDefaults()Reinitializes settings with default values.

Changes

  • v1.0 - Initial release.

TrimKit Collection

This library is part of the TrimKit collection - a set of small, focused C# libraries that make game development more enjoyable by reducing the need for boilerplate code and providing simple reusable building blocks that can be dropped into any project.

Each module is independent and can be used standalone or combined with others for a complete lightweight foundation.

Contribution

Contributions are welcome!

You can start with submitting an issue on GitHub.

License

This library is released under the MIT License.