Logo

For builders, streamers, and wonderfully overbuilt tables

Make the Table Answer Back

Tavern Scribe turns campaign moments into signals your room, stream, or automation can react to. Fire signed webhooks for the full event catalog, or start with our public ESP32 project and make a shared natural 20 light the room before the cheer dies down.

Open-source PlatformIO firmware, a documented SignalR client, captive-portal setup, reconnect handling, and relay effects for natural 20s and natural 1s.

An ESP32 board imagined as an enchanted tabletop artifact with violet glowing traces
Open sourceLive dice pathSigned webhooks

Keep the table you love

Screens are an on-ramp, not the table.

Use as much or as little Tavern Scribe as fits the group. The signal can begin with a character page, character-sheet roll, party chat, a VTT map, or a session event while the actual adventure stays around minis, paper, and friends.

A physical table with digital character sheets

Players keep sheets on a phone or laptop and share rolls into party chat. The live starter can react to those roll messages while minis and terrain remain center stage.

A VTT-enhanced room

Put maps, tokens, dice, and chat on the shared screen. Webhooks can turn captured campaign events into lighting, sound, notifications, or a completely custom service.

An actual-play production

Translate crits, kills, session state, and published story artifacts into OBS overlays, soundboard cues, clip markers, or audience-facing effects.

The technical primitives

One moment. Two ways to react.

Tavern Scribe captures the meaning once, then gives builders a durable automation path and a low-latency table path. Pick the transport that matches the job.

01 · Capture

A table moment

A shared roll, kill, level-up, loot claim, map-zone trigger, session transition, recap, or newspaper becomes a named campaign event.

02 · Record

A consistent receipt

The event spine gives that moment an id, type, timestamp, campaign context, and event-specific data.

03A · Stable rail

Signed webhook

Filtered JSON delivery to a public HTTPS endpoint, with test sends, retries, delivery history, and replay.

03B · Live starter

SignalR dice stream

The public ESP32 example joins party chat and reacts to shared natural-20 and natural-1 roll messages with minimal delay.

Webhooks · available now

The dependable way to automate a campaign.

Add a public HTTPS endpoint in Campaign Settings, select only the moments your rig needs, reveal the signing secret once, and send a test before game night. Tavern Scribe signs every body with HMAC-SHA256 and keeps the delivery trail visible.

  • Stable camelCase JSON envelope with event, campaign, session, actor, and data fields
  • Per-subscription event filters and example payloads
  • Retry schedule, failure visibility, manual replay, and automatic endpoint protection
  • Works with n8n, Make, Zapier webhook triggers, secure Home Assistant relays, or your own service
Start a Campaign
dice.natural_20signed JSON
{
  "id": "evt_…",
  "type": "dice.natural_20",
  "createdAt": "2026-08-25T…Z",
  "apiVersion": "2026-08-01",
  "campaign": { "id": "…", "name": "The Amber Court" },
  "session": { "id": "…" },
  "actor": { "characterId": "…" },
  "data": {
    "name": "Elyra Dawnwhisper",
    "expression": "1d20+7",
    "total": 27
  }
}
Header: X-TavernScribe-Signature: t=…,v1=…

Current webhook catalog

dice.natural_20dice.natural_1combat.enemy_killedcharacter.diedcharacter.revivedkill.confirmedparty.level_uploot.claimedmember.joinedmap.zone_triggeredsession.recording_startedsession.table_startedsession.table_endedsession.processing_completerecap.publishednewspaper.published
Tavern Scribe's virtual tabletop with character tokens on a dungeon map

A token crosses a zone. The zone emits the named event. Only the device keys and webhook subscriptions the DM selected receive it.

Live SignalR starter · public on GitHub

Flash a board. Join the table. Roll a 20.

The public loji-gaming/tavern-scribe-live-embeded repository is a working PlatformIO example, not a mockup. It handles Wi-Fi setup, the SignalR JSON handshake, receive-only device authentication, keepalive, reconnects, custom-event parsing, and two non-blocking relay effects.

Builder note: create a receive-only device key under Campaign Settings, save it when it is shown, and revoke that key if the hardware leaves your control. No player login belongs in the firmware.
Browse the Code on GitHub

What would your table do?

Build the part only your group would invent.

The primitives stay plain so the result can get strange. Make one lamp blink, orchestrate a streaming rig, or give a model castle opinions about the party's choices.

The room takes the hit

Gold for a crit. Red for a natural 1. A crypt zone dims the room and wakes the fog.

The story finds its cue

Land a sting on the killing blow, ring a bell on level-up, or change the soundscape as a scene turns.

The stream knows why

Drive overlays, scene changes, clip markers, chat posts, or a custom audience interaction from named events.

The starter rig

About $25 between the roll and the light.

The reference project targets an ESP32 and two relay outputs. These are ordinary search links, not affiliate recommendations.

Mains voltage is not a cantrip. Keep relay projects low-voltage — 12V LEDs are plenty dramatic — unless you are qualified for wall-power work.

Questions before initiative

The honest integration FAQ.

Do I need a virtual tabletop at my physical table?

No. Keep the minis, map, and physical dice. Players can still open Tavern Scribe character sheets, party chat, or the VTT on a phone or laptop. A DM can attach named events to VTT zones while character-sheet and chat activity continues to feed built-in webhook events without turning the session into a screen-first game.

What is the difference between webhooks and the live connection?

Webhooks are the durable automation rail: Tavern Scribe sends signed JSON to a public HTTPS receiver with retries, tests, delivery history, and replay. The receive-only live socket is the lower-latency path for embedded devices. A named custom event can be routed to selected webhooks, scoped live devices, or both.

Which events can webhooks deliver today?

The current catalog includes natural 20s and 1s, enemy kills, character death and revival, confirmed kills, level-ups, loot claims, new members, map-zone triggers, session lifecycle events, completed processing, and published recaps and newspapers. You choose the event types for each endpoint.

What does the ESP32 starter receive live?

It receives only the named custom events enabled for its scoped device key. Built-in events such as natural 20s, kills, and published recaps remain available through signed webhooks; they are not silently copied onto the device socket. This keeps the embedded contract narrow and intentional.

Can this work with n8n, Make, Zapier, or Home Assistant?

Yes, through standard webhook triggers or your own HTTPS service. The destination must be publicly reachable over HTTPS; private and local-network addresses are deliberately blocked. For a local Home Assistant installation, use a secure public relay or tunnel rather than exposing the LAN directly.

How are embedded devices authenticated?

A campaign DM creates a long-running tsdk_ device key under Integrations. The plaintext is shown once, only a SHA-256 digest is stored, and the key is campaign-bound, receive-only, independently revocable, audience-scoped, and optionally limited to selected event names. It cannot invoke campaign APIs or impersonate a user.

Roll for tinkering

Give the next great table moment somewhere to go.

Start with one shared roll and one light. The same foundation can grow into the automation, prop, or production system your campaign deserves.

Building something unusual? Show us in Discord. The stranger the prop, the better.