Open source · self-hosted · plugin-based

Telemetry your team runs itself.

Pacenote is a sim racing telemetry server and client. Your team runs the server, drivers pair a client, laps arrive, and plugins do the rest: coaching, a voice, charts. One binary, your database, your budget.

  • v0.2.0
  • Linux · macOS · Windows
  • GPL-3.0
  • Any simulator, via plugins
Lap 7 · practicespeedthrottlebrake

A telemetry trace of one lap: speed, throttle and brake plotted against distance, with seven corners marked. Turn 4 is highlighted with the cue “Brake twenty metres later”.

T1T2T3T4T5T6T7T4 · brake 20 m later

Quick start

Three commands and a browser.

The server needs PostgreSQL 15 or newer and a host name. Nothing else: no runtime, no package manager, no container unless you want one. On first run it prints a one-time token and waits for you at /setup.

Full getting-started guide
curl -LO https://github.com/Pacenote-Sim/server/releases/download/v0.2.0/pacenote-ce_0.2.0_linux_amd64.zip
unzip pacenote-ce_0.2.0_linux_amd64.zip
./pacenote-server
# Open http://your-server:8080/setup and type the token it printed

Other platforms and checksums on the release page.

Why

Your budget, in your hands.

Telemetry, coaching and a race engineer's voice should not come as a subscription with a price you do not control. Pacenote puts every cost where you can see it.

No subscription

The server, the client and the protocol are free software under the GPL. Run them for your team for as long as you like, on hardware you already have.

Pay vendors directly, if at all

Anything that calls an outside service is a plugin. It runs on your own account, tells you where it sends data before you enable it, shows what each call cost, and stops at the daily cap you set.

Your data stays in your database

Every lap, stint and trace lives in a database you run. Back it up like any other. Credentials are sealed with a key only your server holds, so a copy of the database carries nothing usable.

How it works

From the sim to the server and back before the next corner.

The client measures. The server stores and tells its plugins. A plugin answers. Its client half plays the answer while the lap is still being driven.

01

Simulator

The game publishes its state while it runs. Pacenote reads it through a source plugin, so any simulator can be added.

02runs on the rig

Client

One program beside the sim. It measures every lap and corner as it is driven and sends them to your team’s server.

03you host it

Server

One binary your team runs, with its own database. Drivers pair a client, laps arrive, the panel shows where the time went.

04any licence

Plugins

Separate programs told when a lap or stint finishes: coaching, a voice, charts. Each says what it calls and what it may spend.

And back. A plugin's client half, a companion, runs inside the client: it posts the lap, gets the coach's lines, and plays them before the next corner.

Sim-agnostic by design

A simulator is a plugin. iRacing is the first; adding another means writing one reader, not changing the client or the server.

The server builds the client

The operator ticks the plugins they want and the server produces one installer with its own address inside. A driver installs one file and pairs it with a code. No settings to copy around.

Plugins cannot take the server down

A server plugin is a separate process talking to the server over a local channel. One that crashes does not take the server with it; one that is slow is skipped at its deadline. The server names no vendor and holds no credential for one.

Plugins

Add what your team needs. Leave out what it does not.

Everything beyond storing laps is a plugin, and the operator chooses which ones run. Each is free software you install yourself, with no fee attached to it.

Race engineer

Server + client

Coaches your drivers from their own laps: a line for the corner ahead, the radio in a race, a debrief with setup changes after the stint. Runs on your own language-model key.

Voice

Server + client

Speaks the engineer’s lines so a driver hears them before the corner, not after. Runs on your own voice-vendor key, and a line spoken once is never paid for twice.

Visual telemetry

Server + client

Draws every lap as it was driven: speed, revs, throttle and brake against distance, sectors marked, the circuit alongside. Overlay laps to compare drivers. Calls nothing outside your machine and costs nothing to run.

iRacing

Simulator source

Reads iRacing while it runs and turns it into laps and corners the client understands. Other simulators are added the same way, without touching the client.

On the server

A server plugin runs beside the server as its own program. It is told when a lap or stint finishes, can keep its own pages and data, and only ever borrows a credential for one call. If it crashes, the server keeps running.

On the rig

A client plugin is compiled into the client your server builds. A source reads one simulator. A companion is the client half of a server plugin: it sends laps, plays what comes back, and shows a page in the client window.

Yours to license

Both plugin contracts are Apache-2.0, and the client carries a plugin exception to its GPL. A plugin depends on the contract, never on the server or the client, and may be licensed however its author likes, open or closed.

Write your own

A server plugin is a small Go program.

Put the binary and its manifest in a folder under the server's plugin directory and pressLook for new plugins in the panel. The contract is small and documented, and it is not tied to Go: the message format is published for other languages too.

package main

import (
	"context"

	"github.com/pacenote-sim/plugin"
)

type mine struct{}

func (mine) Settings(context.Context) ([]plugin.Setting, error) { return nil, nil }
func (mine) Notify(context.Context, plugin.Event) (plugin.Usage, error) {
	return plugin.Usage{}, nil
}

func main() { plugin.Serve(mine{}) }

Community

Early, open, and built in public.

The server has tagged releases. The client and the plugins build from source today. Issues and pull requests are welcome on any repository.

Licences

ModuleLicence
serverGPL-3.0-or-later
clientGPL-3.0 + plugin exception
protocolGPL-3.0 + plugin exception
plugin (server contract)Apache-2.0
clientplugin (client contract)Apache-2.0

Run it for anything, including commercially. Change it and run your changed copy. Hand a changed copy to someone else and you hand over your changes on the same terms. Your plugins are yours: the client and protocol carry a plugin exception, so a client built with your plugin can ship under your plugin's licence.