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
Filters Audio filters (7 processors), structural video filters (Pixel Perfect, CRT Scanlines, NTSC Composite), and color effects (Warm, Greyscale, NES Colors); availability by renderer; shader architecture
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
Localization Language files, Steam language detection, CJK font fallback
Steam Deck Automatic adjustments (menu scale, audio default), input latency fix, publishing requirements, known differences from Windows

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.