OpenDartboard is a hobby-friendly, fully FOSS toolkit for building an automatic steel-tip dart–scoring station at home or in a bar.
- Headless Scorer — Use a Raspberry Pi Zero 2 W with 3 cameras to detect darts and output scores in standard notation (
T20,S5,D12, …) via a easy to consume WebSocket API. - Computer Vision — Includes a lightweight OpenCV detector to run efficiently on a Pi Zero 2 W or build your own detector via a Custom Detector plugin.
The goal: drop-in freedom for home tinkerers or bar owners who want "Automatic darts scoring" without closed hardware, subscriptions, or vendor lock-in.
- Quick Start
- Recommended Clients
- Project Status & Roadmap
- Tech Stack
- Hardware Reference
- Development Environment
- API Documentation
- Custom Detectors
- Contributing
# 1 Flash MicroSD with Rasbperi Pi Imager (https://www.raspberrypi.com/software/) | Image: Raspberry Pi OS Lite (64-bit)
# 1.1 - set hostname to `opendartboard`.
# 1.2 - set username as `pi`, and any password.
# 1.3 - set Wi-Fi name and password.
# 1.2 - enable SSH in services.
# 1.4 - Flash MicroSD - once complete power on Raspberry Pi
# 1.5 - Connect to it with terminal/cmd using SSH:
ssh pi@opendartboard.local
# 2. Update the package lists
sudo apt-get update
# 3. Download & install the latest .deb release
wget https://github.com/OpenDartboard/OpenDartboard/releases/download/v0.1.3/opendartboard_0.1.3-1_arm64.deb
sudo apt install -y ./opendartboard_0.1.3-1_arm64.deb
# 4. Run it and Watch the scores
opendartboard --autocamsTip: Need a quick debug dashboard? Run
debug.opendartboard.orgin any modern browser to see the score output, camera feeds, calibrations images, and more.
🚧 We are working on a set of official clients to make it easier to use OpenDartboard. These will be available for various platforms, and will allow you to view scores, play, manage settings, and more.
- **Web**: [COMMING SOON] - A web client for viewing scores and managing settings.
- **Android**: [COMMING SOON] - A native Android app to connect to your OpenDartboard server.
- **iOS**: [COMMING SOON] - An iOS app to connect to your OpenDartboard server.
- **Tablet**: [COMMING SOON] - A tablet client for viewing scores and managing settings.
- **Windows**: [COMMING SOON] - A Windows client for viewing scores and managing settings.
- **Linux**: [COMMING SOON] - A Linux client for viewing scores and managing settings.
- **macOS**: [COMMING SOON] - A macOS client for viewing scores and managing settings.
- **TV's**: [COMMING SOON] - A TV client for viewing scores on your big screen.For now, you can try out the Debug Dashboard or integrate with your own applications using the WebSocket API.
| Phase | Target | Status (ETA) |
|---|---|---|
| Packaging | Debian package (.deb) for easy installation -- | ✅ released |
| Development | Docker‑based dev environment for consistent builds | ✅ ready |
| MVP | Basic Auto‑calibration via OpenCV | ✅ done |
| CI/CD | Basic CI pipelines & tagged releases | ✅ live |
| MMR | Scoring via OpenCV (geometry_detector) |
🚧 WIP |
| API | WebSocket API for real‑time score streaming | ✅ v0.1 |
| Polish | Improved accuracy & self‑calibration | 🗓 T.B.D. |
| Layer | Tech | Notes |
|---|---|---|
| Computer Vision | OpenCV |
INT8‑optimised model for ARM |
| Runtime | C++ | High‑performance dart detection |
| API | WebSocket · JSON |
Real‑time score streaming on 13520 |
| Infrastructure | systemd · udev |
Robust auto‑start & camera hot‑swap |
| Development | Docker · Debian Bullseye |
Reproducible builds |
| Distribution | .deb package |
CI‑checked, one‑command install |
| Item | Minimum spec | Example |
|---|---|---|
| SBC | Raspberry Pi Zero 2 W (+ self-powered USB 2 hub) | Waveshare USB HUB HAT (B) |
| Cameras (×3) | USB 2.0 webcams outputting MJPEG @ 1280x720 30 fps | HBVCAM OV2710 100° |
| Lighting | 360° LED ring | DIY SmartLite 12 V LED 6000 K |
| Power | 5 V / 3 A PSU | Any USB PD brick + adapter |
# Clone repository
git clone https://github.com/OpenDartboard/OpenDartboard.git
cd OpenDartboard
# Build the dev image (once)
docker compose build opendartboard
# Open an interactive shell with everything mounted
# Run `$env:PWD = (Get-Location).Path` #FOR WINDOWS
docker compose run --rm --service-ports opendartboard /bin/bash
# Builds and installs binary
make build
# Run the binary with mocks
opendartboard --debug --cams mocks/cam_1.mp4,mocks/cam_2.mp4,mocks/cam_3.mp4 --width 1280 --height 720See docs/api.md for the full WebSocket specification & client examples.
Want to experiment with your own CV pipeline? Check out docs/detectors.md for implementation guides and examples.
Pull requests are welcome — but please open an issue first so we can discuss design & approach. 🎯