7 Days to Vibe

June 2, 2026 · View on GitHub

A BepInEx plugin that drives haptic devices from in-game events in 7 Days to Die. Take a zombie hit, fire a gun, get bitten, level up, survive a blood moon — and feel it.

Two output paths fire in parallel for every event:

  • Intiface / Buttplug — local USB/Bluetooth devices via Intiface Central (vibration, linear/thrust, rotation). ~5 ms latency.
  • XToys — cloud-connected toys (e.g. DG-LAB Coyote e-stim) via an xtoys.app webhook. ~100–500 ms latency.

⚠️ Adult content. This mod integrates with adult haptic hardware. 18+.

The in-game config panel


Features

  • 49 events across 6 categories — Combat, Status Effects, World Events, Activities, Vehicles, Stealth.
  • Per-event tuning — enable/disable, intensity (0–1), duration, pattern (vibrate / pulse), target device slot, and actuator (vibrate / linear / rotate, by index).
  • In-game config panel — open with Insert. Live device status, per-event Test buttons, a colour-coded log tab, and an XToys setup guide. Auto-scales to your resolution.
  • Damage/impact scaling — events like Player Damage, Explosion and Fall Landing scale intensity with how hard you got hit.
  • Two simultaneous outputs — Intiface and XToys both fire; use whichever hardware you have.

Requirements

7 Days to DieTested on V 2.6 (b14). Must be launched without EasyAntiCheat (see below).
BepInEx5.x — x64 (Mono). Not BepInEx 6 / IL2CPP.
Intiface CentralFor local devices. Run it and "Start Server" before launching the game. Optional if you only use XToys.
XToys accountOptional, for cloud devices (e-stim, etc.). Free account at xtoys.app. See XToys setup below.

EasyAntiCheat must be OFF

BepInEx injects a proxy DLL, which EAC blocks (you'll get a 0xc000007b crash). Launch via the game launcher with EasyAntiCheat disabled, or run 7DaysToDie.exe directly with -noeac. The game logs anticheat disabled when you're on the right path.


Install (players)

  1. Install BepInEx 5 (x64 / Mono):
    • Go to the BepInEx releases page and download the latest BepInEx_win_x64_5.4.x.zip. ⚠️ Get the x64, 5.4 build. Not the x86 build, and not BepInEx 6 / IL2CPP — 7 Days to Die is a 64-bit Unity Mono game and needs BepInEx 5 x64.
    • Find your game folder: in Steam, right-click 7 Days to Die → Manage → Browse local files (the folder containing 7DaysToDie.exe, e.g. …\steamapps\common\7 Days To Die\).
    • Extract the zip's contents directly into that folder. When done, winhttp.dll, doorstop_config.ini, and a BepInEx\ folder should sit right next to 7DaysToDie.exe.
    • Launch the game once (without EAC — see above) and quit to the desktop. This first run generates BepInEx\plugins, BepInEx\config, etc. (If those folders don't appear, BepInEx didn't inject — double-check the files are next to the .exe and that you launched the non-EAC executable.)
  2. Download the latest release and copy all of its .dll files into:
    <7 Days To Die>\BepInEx\plugins\
    
    (The plugin ships with its dependencies — Buttplug, the WebSocket connector, etc. They all need to be in plugins/.)
  3. Start Intiface Central and connect your device(s).
  4. Launch the game without EAC, load a save, and press Insert to open the panel.

Settings live in BepInEx/config/com.7daystovibe.haptics.cfg and also in the in-game panel (changes save automatically).


XToys setup (optional — cloud devices)

Intiface covers local USB/Bluetooth toys. XToys adds cloud-connected toys (DG-LAB Coyote e-stim, etc.) and fires in parallel. One-time setup:

  1. Sign in (free) at xtoys.app.
  2. Load the "7 Days to Vibe" script — open xtoys.app/scripts/7dtvibe (or in-app: Add a Block → Scripts → search "7 Days to Vibe"). (Build-your-own alternative: a script with a Private Webhook block + a Generic Output block, plus a Global Trigger action: setIntensitysetVolume on the output with {trigger-intensity}.)
  3. Connect your toy under the script's Generic Output, then press to run the script. Keep the browser tab open while you play.
  4. Get your Private Webhook ID: xtoys.app → menu → your profile, or the script's Settings → "Webhook ID".
  5. In BepInEx/config/com.7daystovibe.haptics.cfg (or the in-game Insert → XToys tab), set:
    [XToys]
    Enabled = true
    WebhookId = <your-webhook-id>
    
  6. Launch the game. Haptic events now fire to both Intiface and XToys.

The plugin sends POST https://webhook.xtoys.app/<id> with {"action":"setIntensity","intensity":0-100}. Expect ~100–500 ms cloud latency (vs Intiface's local <5 ms); short events are auto-padded via XToys.MinDurationMs. Your Webhook ID is a credential — don't share it.


Build (developers)

Requires the .NET SDK and a local copy of the game (for the reference assemblies).

git clone https://github.com/blucrew/7daystovibe.git
cd 7daystovibe
# Point the build at your install:
#   edit <GameDir> in 7DTD_Haptics.csproj
dotnet build

On a successful build, the plugin and all its dependencies are copied straight into <GameDir>\BepInEx\plugins\.

Layout

PathWhat
Plugin.csBepInEx entry point; resilient Harmony patching.
HapticsConfig.csAll config bindings + the per-event EventConfig.
ButtplugManager.csIntiface/Buttplug connection and command dispatch.
XToysManager.csXToys webhook output.
HapticsGUI.cs / HapticsTheme.csIn-game IMGUI panel and its dark-mode theme.
Patches/Harmony patches, one file per event group.
HapticsConfigUI.htmlStandalone browser-based config editor (generates a .cfg).
tools/Helper scripts for finding renamed methods across game versions.

A note on game versions

7 Days to Die renames and moves classes between major versions. Patches are applied one class at a time — if a target method doesn't exist on your version, that single event is skipped (and logged in the panel's Log tab) instead of breaking the whole mod. If an event isn't firing, check the Log tab for a ✗ skipped line and update the method name in the relevant Patches/*.cs file. tools/FindMethods.csx helps locate the new name.


Credits

Built by blucrew. Haptics via Buttplug / Intiface and XToys.

License

GPLv3.