Skip to main content

File formats

Talesmith stores everything as plain files so projects work with version control. This page lists every format, its extension, what it holds and where it lives, and the rules all the JSON formats share.

Formats​

FileWhat it holdsWhere it livesReference
.tsceneA scene: its environment and entities with their componentsAnywhere under assets/, usually assets/scenes/Scenes and prefabs
.tprefabA reusable group of entitiesUsually assets/prefabs/Scenes and prefabs
.metaAn asset's guid, importer and import settingsNext to every asset file and folderMeta files
assets.index.jsonThe .meta data of every shipped asset, in one fileThe root of an exported game's asset folderMeta files
.tparticlesA particle preset: emitter settings and modulesUsually assets/particles/Particle presets
.tmaterialA blend mode, a shader and its parametersAnywhere under assets/Materials and shaders
.tshaderA shader's SkSL and SPIR-V sourcesNext to its .sksl and .spv filesMaterials and shaders
.tatlasTextures to pack into one sprite atlasAnywhere under assets/Sprite atlases
.tlocTranslated strings by key and languageAnywhere under assets/Localization tables
.hexyA tile map in the Hexy editor's formatUsually assets/maps/Hexy maps
.tlightingA lighting preset: ambient light and lighting qualityassets/lighting/Scenes and prefabs
game.jsonTitle, window, renderer, start scene and frame pacingassets/config/Project configuration
input.jsonInput actions and their bindingsassets/config/Project configuration
physics.jsonDefault gravity, layer names and the collision matrixassets/config/Project configuration
plugin.jsonA plugin's manifestEach plugin's folder under assets/plugins/Plugin files
plugins.jsonWhich plugins are on or off, and their settingsassets/config/Plugin files
build.jsonA project's export settingsThe project folder, next to assets/Launcher and content packs
launcher.jsonWhich game folder an exported player runsNext to an exported game's executableLauncher and content packs
content.tspackAn exported game's packed, compressed assetsThe exported game folderLauncher and content packs

Images (.png, .jpg, .jpeg, .webp, .bmp, .gif, .ico), fonts (.ttf, .otf, .ttc), sounds (.wav, .ogg) and scripts (.cs) are ordinary files; their settings live in their .meta files. Editor state that is not part of the game, such as the layout and caches, lives in <project>/.talesmith/ and is not described here.

Shared rules​

The JSON formats follow the same conventions, so a value looks the same in every file:

ValueWritten asExample
Property namescamelCase"ambientIntensity"
Enum valuescamelCase strings; reading ignores case"additive", "vector"
Guids32 hexadecimal digits without dashes; reading accepts any form .NET parses"0bc97c948d6e484b9513f621244aeccd"
Vectors[x, y][256, 672]
Rectangles[x, y, width, height][-32, -32, 5120, 1024]
Colors"#RRGGBB", or "#AARRGGBB" when not opaque; reading also accepts "#RGB""#FFB25A", "#70FFC860"
CurvesA list of keys { "time", "value", "inTangent", "outTangent", "interpolation" }; zero tangents and the default interpolation are left out[{ "time": 0, "value": 1 }]
GradientsA list of stops { "position", "color" }[{ "position": 0, "color": "#FFFFFF" }]
AnglesRadians, clockwise1.9477875
  • Guids instead of paths. Files refer to other assets by the guid in the asset's .meta file, so assets can move and be renamed without breaking references. A few fields also accept a path relative to the file, noted on each page.
  • Comments and trailing commas. Readers skip // and /* */ comments and accept trailing commas, so hand-edited files can carry notes, as the samples' game.json files do. Two formats are stricter: .tparticles and .tlighting files must be plain JSON. When the editor saves a file it writes it again from its data, so comments in that file are lost.
  • Versions. Formats with a "version" field are at version 1. A file with a newer version than the running Talesmith understands fails to load with a message that says so, rather than loading partly. Scene and prefab documents run registered migrations when they are older than the current version.
  • Forward compatibility. Scenes, prefabs and Hexy maps keep fields and components they do not know and write them back unchanged, so a file opened by an older Talesmith, or with a plugin switched off, does not lose data. Particle presets keep modules of unknown types, but drop unknown fields elsewhere.
  • Missing values use defaults. Every field is optional unless a page says otherwise; a missing field takes the default listed on its page. The editor usually writes every field.
  • Atomic writes. The engine and editor write files through AtomicFile: a hidden temporary file is written and flushed, then replaces the target in one step, so a crash never leaves a half-written file.