Skip to content

JanPlazovnik/forza-udp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forza UDP

Demo

Real-time web dashboard for Forza Motorsport. Receives UDP telemetry from the game and displays it in a browser: tachometer, G-force, tire temps, driver inputs, and lap timing.

Quick Start

Docker (recommended)

docker build -t forza-telemetry .
docker run -p 3000:3000 -p 41234:41234/udp forza-telemetry

Open http://localhost:3000.

Build from source

Requires Go and Node.js.

make run

This builds the frontend, embeds it into the Go binary, and starts the server.

Forza Setup

  1. In-game, open Settings → HUD and Gameplay (FM8) or Settings → Gameplay & HUD (FH5)
  2. Scroll to the Data Out section and enable it
  3. Set Data Out IP Address to your machine's local IP
    • Windows: run ipconfig and look for your IPv4 address
    • Linux/macOS: run ip a or ifconfig
  4. Set Data Out Port to 41234
  5. Set Data Out Packet Format to Car Dash
  6. Apply and start a session. The dashboard will show CONNECTED once packets arrive

When running via Docker, Forza must target the host machine's IP address, not localhost.

Configuration

Variable Default Description
API_PORT 3000 HTTP and WebSocket port
TELEMETRY_PORT 41234 UDP port for incoming Forza data
API_PORT=8080 TELEMETRY_PORT=41234 ./server

Known Issues

  • Lap times reset when you pause, rewind, or hit a loading screen. Forza zeroes out the timing fields during these, so whatever you had is gone.

Project Structure Note

The web/ and static/ directories are a bit unconventional. web/ is the Vue frontend, static/ is a Go package that just embeds the built output so the server can serve it as a single binary. It's not the cleanest setup but I wanted to keep everything in one repo without a separate deployment step, and this was the best approach I could come up with. Open to better ideas.

Development

Run the Go server and Vite dev server separately for hot reload:

# terminal 1 - Go server (WebSocket + UDP)
go run ./cmd/server/

# terminal 2 - Vite dev server (http://localhost:5173)
cd web && npm run dev

Vite proxies /ws to the Go server automatically.

About

Forza Telemetry server and client for all Forza and Forza Motorsport games.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors