Getting Started
This guide walks you through setting up DINOForge for development or mod authoring.
Prerequisites
- .NET 8 SDK or later
- Node.js 20+ (for docs only)
- Diplomacy is Not an Option (Steam)
- Git
Install BepInEx and DINOForge
DINOForge requires the modified BepInEx 5 with Unity ECS support from Nexus Mods. Standard BepInEx from GitHub will not work — this game requires a custom-forked winhttp.dll (Doorstop) that enables loading multiple assemblies from the ecs_plugins/ directory, which is how Unity ECS plugins are bootstrapped. The fork was created by devopsdinosaur specifically for this game.
One required boot.config fix
After installing BepInEx, edit <GameRoot>/Diplomacy is Not an Option_Data/boot.config and ensure it contains:
single-instance=0This disables Unity's native single-instance enforcement (the empty single-instance= value it ships with causes "Another instance is running" fatal errors on relaunch).
Option A: Automated Installer (Recommended for Users)
DINOForge includes a GUI installer that handles BepInEx and DINOForge setup automatically.
- Download the latest DINOForge installer from Releases
- Run
DINOForge.Installer.exe - Select your DINO game installation directory
- The installer will:
- Download and install the modified BepInEx 5 (ECS fork) from Nexus Mods
- Apply the
boot.configfix - Install DINOForge Runtime and example packs
- Verify the installation
- Launch the game and verify mods load (F10 to open mod menu)
Option B: Manual Installation (For Developers)
- Download BepInEx 5 with Unity ECS Support from Nexus Mods (version
5.4.23.2-ecs) - Extract into your DINO game directory (where the
.exelives) - Apply the boot.config fix (see above)
- Verify the folder structure:
GameRoot/
winhttp.dll # Modified Doorstop (ECS multi-assembly fork)
doorstop_config.ini
Diplomacy is Not an Option_Data/
boot.config # Must contain: single-instance=0
BepInEx/
ecs_plugins/ # DINOForge.Runtime.dll goes here
plugins/ # Standard mono plugins (unused by DINOForge)
config/- Launch the game once to let BepInEx initialize, then close it.
- Copy the built
DINOForge.Runtime.dlltoBepInEx/ecs_plugins/
Clone and Build
git clone https://github.com/KooshaPari/Dino.git
cd DinoBuild the solution:
dotnet build src/DINOForge.slnRun tests to verify everything works:
dotnet test src/DINOForge.sln --verbosity normalProject Structure
DINOForge/
src/
Runtime/ # BepInEx plugin — bootstrap, ECS detection, hooks
Bridge/ # ECS bridge: component mapping, stat modifiers
HotReload/ # Hot reload bridge
UI/ # Mod menu (F10), settings panel
SDK/ # Public mod API — registries, schemas, pack loaders
Assets/ # Asset service, addressables catalog
Dependencies/ # Dependency resolver
HotReload/ # Pack file watcher
Models/ # Content data models
Registry/ # Generic registry with conflict detection
Universe/ # Universe Bible system
Validation/ # Schema validation (NJsonSchema)
Bridge/
Protocol/ # JSON-RPC message types, IGameBridge
Client/ # Out-of-process game client
Domains/
Warfare/ # Factions, doctrines, combat, waves
Economy/ # Rates, trade, balance
Scenario/ # Scripting, conditions
UI/ # HUD injection, menus
Tools/
Cli/ # dinoforge CLI
McpServer/ # MCP server for Claude Code
PackCompiler/ # Pack compiler (validate, build)
DumpTools/ # Entity dump analysis (Spectre.Console)
Installer/ # BepInEx + DINOForge installer
Tests/ # Unit tests (xUnit + FluentAssertions)
Integration/ # Integration tests
packs/ # Content packs (6 example packs)
schemas/ # JSON/YAML schema definitions (17 schemas)
docs/ # This documentation siteLoad a Pack
Once built, the Runtime DLL goes into BepInEx/ecs_plugins/:
BepInEx/ecs_plugins/DINOForge.Runtime.dllContent packs live in a packs/ directory relative to the game root. The runtime discovers and loads them at boot.
Next Steps
- Quick Start — Create your first pack in 5 minutes
- Creating Packs — Full pack authoring guide
- Architecture — Understand the layered design