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 .nes ROM 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.