Getting Started with Datapacks
A datapack is a folder you create that the game loads automatically to add new content. You write structured JSON files that describe what you want to add β no code required.
Step 1 β Choose a Pack Name
Your pack name is a short, lowercase, no-spaces identifier that becomes the namespace for every registry key you create.
Good examples: stellar_forge, deep_space_mod, nova_pack
Rules: lowercase alphanumeric and underscores only. No spaces, hyphens, or special characters. Must match the datapack folder name exactly.
Step 2 β Create the Folder Structure
At minimum, your datapack folder looks like this:
mypack/
βββ assets/
β βββ languages/
β βββ en_US.json β Required: at least one language file
βββ data/ β Only add sub-folders for content you are adding
βββ manifest.json β Required: registers your pack
See the Folder Structure Reference for the complete tree.
Step 3 β Write manifest.json
The manifest is the first file the game reads. It declares your pack name, version, and every category of content you are registering. See the Manifest Reference.
Step 4 β Write a Language File
Even if you only support one language, you must have en_US.json. This is the base language all others fall back to. See the Localization Guide.
Step 5 β Add Your Content
| Want to add⦠| Guide |
|---|---|
| Raw materials (ores, ingots, alloys, circuits, crystals) | Materials Guide |
| Wearable gear for players | Personal Equipment Guide |
| Ship components | Ship Equipment Guide |
| Crafting formulas | Recipes Guide |
| Enemy units | Hostiles Guide |
| Enemy encounter rooms | Rooms Guide |
| Full dungeon runs | Dungeons Guide |
| Skill trees | Skills Guide |
| Quests | Quests Guide |
Key Concepts
Registry Keys
Every object in the game is addressed by a dot-separated registry key:
<namespace>.<packname>.<group>.<id>
For example: items.materials.mypack.ores.iron, enemies.mypack.pirate.raider_frigate. The namespace prefix varies by content type β see the Naming & IDs page for the full table.
Translation Keys
JSON data files never contain raw display text. Instead, fields like displayName and description store a registry key that the game resolves against the active language file at runtime:
"displayName": "items.materials.mypack.ores.iron"
Different languages show different text for the same item without changing the item JSON file.
Sub-Folders Are Optional
The game scans recursively inside each mandatory top-level folder. You can organize files into whatever sub-folder structure makes sense for your pack.