Development

TypeScript, React 19, zod, webpack, vitest and pnpm (Node 22.12 or newer). See Testing for tests and CI, and AGENTS.md in the repository root for contributor and agent guidance.

Tasks

Task pnpm equivalent Purpose
task install pnpm install --frozen-lockfile Reproducible installation
task dev pnpm dev Standalone app with Webpack hot reload
task dev:overwolf pnpm dev:overwolf Watch the Overwolf development build
task dev:gateway pnpm dev:gateway Local webhook gateway with a mock Kick on port 5190
task build:dev pnpm build:dev All apps, unminified with source maps
task build pnpm build All apps, minified without source maps
task build:overwolf pnpm build:overwolf Unpacked Overwolf app only
task package:overwolf pnpm package:overwolf Production Overwolf build and OPK archive
task build:standalone pnpm build:standalone Standalone app and server only
task build:gateway pnpm build:gateway Webhook gateway server only
task start pnpm start Serve the built standalone app on loopback
task start:gateway pnpm start:gateway Run the built gateway (needs its environment)
task gateway:docker docker build -f apps/gateway/… Build the gateway container image
task gateway:deploy az deployment group create … Deploy the gateway to Azure Container Apps
task companion pnpm kick:companion Run the self-hosted Kick companion
task catalog:sync pnpm catalog:sync Refresh bundled games and manifest allowlists
task check pnpm check Type-check, tests, and formatting check
task test pnpm test Unit and loopback protocol integration tests

Builds type-check before Webpack transpiles. Development and production builds replace the same output folders; run the desired build before distributing.

Deployables

Deployable Source Output Docs
Overwolf package apps/overwolf dist/overwolf Overwolf app
Standalone / local apps/standalone dist/standalone Local server
Webhook gateway apps/gateway dist/gateway/server.cjs Webhook gateway
Kick companion apps/kick-companion Runs from source Kick companion
Desktop app (future) apps/desktop, later Not yet implemented An Electron shell around packages/ui is planned
  • dist/overwolf: unpacked Overwolf app, including its manifest and assets.
  • dist/stream-pulse.opk: normal-compression ZIP of the Overwolf build, created by pnpm package:overwolf or task package:overwolf.
  • dist/standalone: the browser UI plus server.cjs, a compiled Node.js server that needs no production dependencies.
  • dist/gateway/server.cjs: the self-contained gateway server, also packaged by apps/gateway/Dockerfile.

Set TWITCH_CLIENT_ID at build time to bundle a Twitch Client ID; see Twitch. Set STREAM_PULSE_GATEWAY_URL to bundle the default webhook gateway URL; development builds default to the local gateway.

Source layout

apps/
  overwolf/        Overwolf manifest, background controller and GEP provider
  standalone/      Browser entry point and compiled Node.js server
  gateway/         Webhook gateway service, Dockerfile and Azure Bicep (infra/)
  kick-companion/  Self-hosted Kick companion (alternative to the gateway)
packages/
  core/            Schemas, routing, transports, sources, accounts, Kick/Twitch/YouTube,
                   gateway client, controller; data/ holds the bundled GEP catalog
  ui/              Shared React configuration UI, Control board and Event Lab
  node-kit/        Shared Node.js helpers: local endpoints, Streamer.bot relay,
                   webhook delivery, companion pairing and the Kick provider
scripts/           Catalog sync and manifest schema
tests/             Unit, protocol integration, and manifest tests
docs/              This documentation site, including design plans
webpack.config.cjs Builds every app (`--env app=<name>` selects one)

Documentation

This site is built with Jekyll from docs/, with a local theme matching the public website. Documentation site describes the Docker build, preview and GHCR publishing workflow. Design plans remain in the repository but are excluded from the public site.

To preview locally with Ruby 3.3 and Bundler:

cd docs
bundle install
bundle exec jekyll serve

Each page needs front matter with a title, and parent for pages inside a category. Link between pages with relative .md paths.