NEShim Documentation
NEShim is a Windows shell that wraps the BizHawk NES emulation core and exposes Steam SDK integration, allowing NES games to be published on Steam as native Windows applications — with achievements, overlay support, Steam Input, save states, and a configurable front-end UI — without modifying the ROM.
Documentation
| Page | What it covers |
|---|---|
| Configuration reference | Every field in config.json, with types, defaults, and examples |
| Achievement system | How to define memory-watch triggers, encode them, and seal the config |
| Publishing guide | Step-by-step checklist for packaging a game for Steam release |
| Architecture | Internals: thread model, subsystem design, patterns, how to extend |
| Input system | Keyboard remapping, XInput, Steam Input, hotkeys, and the VDF file |
Requirements
- Windows 10 or later (x64)
- .NET 9 runtime (bundled in self-contained publish)
- Steam client — required for achievements and overlay; the emulator runs without it but Steam features are silently disabled
steam_api64.dll— the native Steamworks SDK DLL. Use the copy bundled inside the Steamworks.NET 2025.163.0 release zip — it is matched to the wrapper version. Must be placed alongside the executable. Not included in the repository (Valve SDK license). Games deployed through Steam receive it automatically via the Steam depot.- A
.nesROM file
Quick start (publishers)
Place config.json alongside the executable and set romPath at minimum:
{
"romPath": "mygame.nes",
"windowTitle": "My Game"
}
Everything else has sensible defaults. See the configuration reference for the full list.
Quick start (developers / contributors)
# Build the full solution
dotnet build NEShim/NEShim.sln
# Run tests
dotnet test NEShim/NEShim.Tests/NEShim.Tests.csproj
# Publish the game (self-contained, win-x64)
dotnet publish NEShim/NEShim/NEShim.csproj -c Release -r win-x64 --self-contained true -o publish/NEShim
# Publish the achievement sealer tool
dotnet publish NEShim/NEShim.SealAchievements/NEShim.SealAchievements.csproj -c Release -r win-x64 --self-contained true -o publish/SealAchievements
After publishing, copy steam_api64.dll from the Steamworks.NET GitHub release zip into the output directory alongside the exe — it is not included in the repository. See the publishing guide for details.
See the architecture guide for a detailed walkthrough of the codebase.