Open Meet Display
An open JSON message format that lets any meet program drive any scoreboard, video board, broadcast graphic, or announcer screen.
Without a shared format, every display product needs its own connector for each meet program. An OMD message says what one board should show now, with every value already formatted. Receiving it takes a small HTTP server and a loop over the rows, and one receiver works with any meet program that sends it. For track and field, cross country, and road races.
How it works
Every message is the whole board
A message replaces what its board shows: a start list, results, team scores, an announcement, or a blank board. There are no patches to merge and nothing to fall out of step.
Every value is ready to print
Places, marks, names, and wind arrive as display text. A board needs no sport rules to show them.
Start with one kind
A board that only shows results is a complete receiver: it accepts the other kinds and changes nothing. New kinds and fields in a later 1.x never break it.
Before it sends, the meet program asks your receiver with a GET which versions it reads,
then posts each message to it over HTTP, on the same computer or the local network. WebSocket and
watched-folder transports are planned; the messages will be the same. The running race clock is
not part of OMD: it comes from the timing system on its own channel.
What a message looks like
{
"omd": { "version": "1.0", "kind": "results",
"generator": { "id": "2t", "name": "2Timer" }, … },
"meet": { "name": "District Schools Championship", "sport": "tf-outdoor", … },
"display": { "target": "main", "mode": "replace" },
"event": { "name": "Girls 100 Meter Dash", "round_label": "Prelims", "section_name": "Heat 2",
"wind": "+1.4", … },
"results": {
"rows": [
{ "place": "1", "bib": "127", "participant_name": "Siti Hajar Binti Osman",
"team": { "name": "Eastgate College", "short_name": "EGC" }, "result": "12.31", … },
{ "place": "2", "bib": "412", "participant_name": "Priya Devi Subramaniam",
"team": { "name": "Lakeview Academy", "short_name": "LVA" }, "result": "12.44", … }
]
}
} Trimmed: see the complete messages. A receiver reads omd.kind, then draws the rows of the block with that name, top to bottom.
Where you fit
Scoreboards and LED boards
Show start lists and results from any meet program that sends OMD, with one receiver.
Start hereBroadcast and stream graphics
Turn the same messages into lower thirds and full-screen results for a live stream.
Start hereMeet-management software
Send one format to every display product. You page the rows and format the names; the board draws them.
Start hereRead, build, and test
Read
Specification
The messages, the HTTP transport and the probe, security, versioning, and a checklist.
Examples
One complete message per kind, ready to send to your receiver with curl.
Field reference
Every field in every message and in the probe reply, as tables.
Build
Integration prompt
A prompt for a coding assistant: build a receiver for your board or graphics.
llms.txt
An index of the raw specification, schemas, and examples, pinned to this version, for a coding assistant to read.
JSON Schema
Validate what you receive, or what you send, with any JSON Schema validator.
Reference receiver
One Node.js file with no dependencies that answers like a correct receiver and records every message.
Test
Test page
Probe your receiver and send it every example and conformance fixture from your browser.
Conformance tests
Every rule as a test with a pass condition, for receivers and producers.
Checker
One Node.js file that checks a message or a probe reply and names the test each problem fails.
To test end to end, send from 2Timer, which is free with no account: add your receiver to a meet's scoreboard connections (see Sending from 2Timer).
Versions and license
This is version 1.0, which 2Timer sends at meets today. A minor version only adds
and only a major breaks, so a receiver built on 1.0 reads every 1.x message. Every message
names its version in omd.version, and your receiver lists the versions it reads
when asked. The specification is licensed CC BY 4.0; the schemas, examples, reference
receiver, checker, and integration prompt are public domain (CC0).
Started by 2Timer, the first producer, and shaped by the display products that receive it. It uses the same names, versions, and replies as its sibling, Open Meet Exchange, which moves whole meets between entry, timing, and results sites. Building a receiver? Write to [email protected] and we will help you test it.
