Fork of Short term, has some fixes. Long term, may include a tool to create and edit stock/lifepath/skill/trait data.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
silverwizard b111f67737 Fixed Femme/Homme Fatale cost 2 months ago
src Fixed Femme/Homme Fatale cost 2 months ago
tests Add data for a test stock 1 year ago
.gitignore initial commit 5 years ago Version bump for 3.0.0 release 10 months ago Trolls, Bitter Reminders, cleanup 5 years ago
Dockerfile add spite emotional attribute 5 years ago add spite emotional attribute 5 years ago
Gemfile Merge branch 'main' into born-expansion 10 months ago
Gemfile.lock Merge branch 'main' into born-expansion 10 months ago
LICENSE Initial commit 5 years ago Added Building comments and tools for running without Docker 10 months ago

Charred Gold

This is a fork of Charred Black Below is a partial fork of the original README of Charred Black; especially since there is a departure from some of the original values. The unofficial, online, Burning Wheel Gold (+Codex) character burner. Adapted from Charred. Later adapted from Charred Black

Project Structure

  • Dockerfile and - Container definition files. The dev container has automated reloading if you mount the container's filesystem to the host machine. These mostly serve as examples to launch the app yourself, and are no longer supported. The app uses Sinatra to hope, and you should just be able to bundle install and then run ruby app.rb from the source directory. I will try to publish a SysV initscript soon.
  • src/data - Binaries and data files for lifepaths live here, see dark_elf and wizard directory for well-defined examples
  • src/lib - Ruby scripts for caching, PDF generation, and data loading
  • src/public - Javascript and CSS
  • src/views - HTML templates
  • src/app.rb - The webapp, uses Sinatra


We welcome community contributions, and you are welcome to fork this source code if you want to go your own way. As the maintainer, here's what you can expect from me when I judge contributions.

Do One Thing Well

Charred Gold is a character creation utility. You are welcome to use the data, source code, or character files in the creation of other gaming tools, but let's keep this tool focused on one thing and do it really well.

Stick To Published Material

In order to keep the scope of my maintainership finite, I'm not planning to accept community-made lifepaths et al. for inclusion in this codebase. Each additional data set increases Charred Gold's startup time and memory requirements. The design of your lifepath requirements and emotional attributes may not be supported by the editor, or may be convoluted to implement. Most importantly, deciding to include any community-made content makes me an arbiter of quality, and I'd prefer not to have the Enmity Clause invoked because I rejected someone's homebrew.

The current maintainers of Charred Gold are working on some tooling to allow "easy" creation of new settings, stocks, LPs, and so on. The exact method for handling has not been decided precisely.

Keep It Mostly Stateless

Charred Gold uses an in-memory cache to allow users to upload JSON and then download .char and .pdf files. I don't know how the original Charred handled this, but the tradeoffs of this approach are:

  1. Works as expected without an update to the frontend
  2. PDF generation happens entirely in one process, limiting the amount of futzing you have to do with distributed systems
  3. Because the cache is in memory, you can't scale processes horizontally

The cache has a limited number of keys, and only the first 16kb of data are used, with the aim of making this this app useless for nefarious purposes. The average size of a 4-lifepath character is around 4kb, so this should be more than enough. If you're trying to do something weird and your character file is bigger than this, consider using a pencil and paper.

More guidelines:

  • Only JSON should be stored in the cache.
  • Cached items should be invalidated upon access (by using the delete method to get the data) to restrict the usefulness of this app to bad actors.
  • Only .pdf and .char file formats should be returned as responses when getting data out of the cache. I'll consider other formats on a case-by-case basis: for example, I'd be open to a format which could be used with Roll20.

Contribution Best Practices

Capital Case

No matter what's in the book, always use Capital Case for skills, traits, lifepaths and settings.

  • Path Of Spite Subsetting
  • Never A Moment Of Peace
  • Ages Of The Etharch
  • Reeks Of Alcohol


The word after the hyphen is not capitalized.

  • Rabble-rouser
  • Burden Of The Crown-wise

Lifepath Example

Some notes:

  1. The best way to create new lifepaths is by following the same advice that Burning Wheel gives you: look at something similar that already exists and adapt it.
  2. In the stat block below, you'd get both a mental and physical stat point for taking this lifpath. If you want either/or, use [1, "pm"].
  "Example Setting": {
    "Example Lifepath": {
      "time": 1,
      "res": 1,
      "stat": [
      "skills": [
      "traits": [
      "requires": "",
      "requires_expr": [
      "leads": [
      "key_leads": [
        "Peasant Setting",
        "Villager Setting",
        "City Dweller Setting",
        "Noble Court Subsetting",
        "Servitude And Captive Setting",
        "Outcast Subsetting",
        "Professional Soldier Subsetting",
        "Seafaring Setting",
        "Religious Subsetting"


Requires Ruby 3.1 or better for support.

On Debian or derivatives this requires apt-get install ruby-dev in order to allow eventmachine to work (which is a hard dependency for thin, the webserver we're using for charred.

In order to run in normal use, simply run:

# sudo apt-get install ruby-dev bundler
# bundler install # on some distros this might be bundler3.1
# cd src
# HOST= PORT=7878 RACK_ENV=production ruby app.rb