You just finished a close match. Three sets, a couple of tiebreaks, a few shots that felt different. But by the time you grab water, the details are already fading. RacketScore keeps all of it, right from your wrist.

Racket Score main menu Sport selection screen Won by screen Match result screen Player stats table

Everything at a glance #

Open the dashboard and you immediately see where you stand. Win rate, play time, serve percentage, return wins. Your recent matches are right there with full scores and tags. Set weekly goals and track them without opening a spreadsheet.

Let someone else watch the score #

While you play, the live scoreboard streams the match to any browser. Friends waiting for the next court, your coach at home, or just your phone on the bench. Big, clean numbers that update in real time, point by point.

Every match, saved and searchable #

Scroll through your match history and filter by sport, player, location, or tags. Every match card shows the score, duration, sport type, and who played. Tap into any match for point-by-point detail, swing data, and serve stats.

Pin every court on the map #

GPS tags each match automatically. Over time, you build a map of every place you've played, from your local club to that court you found on vacation. Tap any pin to see what happened there.

Find out what's actually working #

Do you win more in shorter matches or longer ones? What's your win rate when your heart rate stays low? How do you stack up against a specific opponent across serve %, return %, clutch moments, and tiebreaks? Pick any two players and compare them side by side.

Track how your game evolves #

Shot power trends over weeks, intensity patterns across matches, error breakdowns for both sides. These aren't numbers you check once. They're the kind of thing that changes how you warm up, how you train, and which shots you trust in a tight game.

One app, six sports

Padel Tennis Pickleball Badminton Squash Table Tennis

Each sport has its own scoring rules, serve logic, and game modes built in. Golden point, advantage, timed matches, Americano, best of 3 or 5, you set it up once and it just works. Connect watches with your playing partners over ANT+ and everyone stays in sync, no phone required. Every match is saved as a native Garmin activity.

Using the app #

Open RacketScore from your watch activity list. The main menu has four sections: Games to start or resume a match, Records to browse past matches, Statistics for your career totals, and Settings to configure everything.

Starting a match

1
Go to Games and pick a saved game mode, or select Add New to create one.
2
Choose your sport and configure the rules for that sport (see game setup below).
3
Review the config summary, then select who serves first. The match begins.

Joining another player's match

If someone on the court is already hosting a match with ANT+ sharing enabled, you can join their game instead of starting your own. Select Join Game from the Games menu (only visible on watches with ANT+ support), enter the same pairing code as the host, and your watch connects automatically. You see the live score update in real time but cannot control scoring. That stays with the host. Your own fitness data (heart rate, calories, swings) is still tracked independently on your watch.

Buttons during the match

DownScore a point for your team.
UpScore a point for the opponent.
Start/StopPause the match. From the pause menu you can save, discard, or change the serving player.
BackUndo the last point.
Long-press UpOpen the in-game menu: change server, colors, font size, data fields, tap to score.

When the match ends, choose Save & Continue to start another match in the same activity, Save to finish, or Discard to throw it away.

Game setup #

Each game mode stores its own rules. These are configured when you create or edit a game mode, not in the global settings.

Padel & Tennis: Standard
Deuce Rule
What happens when a game reaches deuce. Golden Point: next point wins. Silver Point: one advantage each, then golden point. Advantage: classic deuce, play until someone leads by two.
Sets
How many sets to play: Best of 3, Best of 5, Pro Set (first to 9 games), or Unlimited.
Tiebreak
Tiebreak format when a set is level: 7-point, 10-point, or none. Only shown for Best of 3 and Best of 5.
Padel & Tennis: Mex/Americano
Point Limit
When the game ends: after a fixed total of points, when someone reaches a target, after a set time, or never (you stop manually).
Serve Interval
How often the serve rotates between players.
Badminton, Squash & Pickleball
Points per Game
The number of points needed to win a game (e.g. 11, 15, or 21 depending on the sport).
Games to Win
Best of 3 or Best of 5.
Table Tennis
Games to Win
Best of 3 or Best of 5.

All settings, explained #

Global settings are under Settings in the main menu. Display options are also accessible mid-match via long-press Up.

Sport & Defaults
Activity Type
The default sport used when creating a new game. You can also turn on "Ask Before Game" to have the app prompt you each time.
Team Mode
Singles (1v1) or Doubles (2v2).
Display
Font Size
Small or Medium for data field labels on the scoreboard. Use Medium if the text feels too small on your watch.
Data Fields
The four corners of the scoreboard can each show a different stat: heart rate, calories, battery, swings, power output, and more. Set any corner to None to hide it.
Set Details
Show or hide the game-by-game set breakdown on the scoreboard. On by default.
Colors
Set colors for your team, the opponent, and data fields. 11 preset themes are also available.
Activity Recording
Activity Recording
Records the match as a Garmin fitness activity, the same way a run or ride is logged. On by default. Turn it off if you don't want the match saved as a workout.
Reuse Activity
Keeps one Garmin activity running across multiple back-to-back matches. Useful if you play several games in a session and want them grouped together.
GPS Location
Captures your location at match start. Used for the match map on the web dashboard. Optional.
Controls & Detection
Change Server
Reassign the serving player mid-match. Available from the in-game menu (long-press Up) and the pause menu. In singles shows P1 and P3; in doubles shows P1–P4 with team labels. The rotation sequence continues correctly from the new server.
Tap to Score
Score a point by tapping the screen. Automatically enabled on touchscreen watches. Turn it off if you prefer buttons only.
Swing Sensitivity
How easily a racket swing is detected. Set to Low if you're getting false counts, or High if real swings aren't being picked up. Default is Medium. Works on either wrist, no difference between left and right hand.
Multiplayer (ANT+)
Sharing
Turns ANT+ wireless sharing on or off. When on, everyone on the court can see the live score on their own Garmin watch in real time. No phone needed.
Pairing Code
A number from 1 to 20. The host and everyone joining must use the same code to connect. Change it if you're on a busy court and other watches are interfering.
Cloud Sync
Sync Now
Manually sends any unsynced matches to your server. Matches also sync automatically after each game when a connection is available.
Pair with Server
Links your watch to your web dashboard. Tap this, then scan the QR code shown in your dashboard settings to connect. The server address can be set as an IP address directly on the watch, or as a full URL (e.g. https://api-example.com) via the RacketScore settings in the Garmin Connect IQ app on your phone, useful for cloud-hosted setups.
Live Sync
Streams the score to a browser in real time while you play. Anyone with the link can follow the match live. Requires a server connection.
Server Config
Where your server is: IP address or domain name, port, and HTTP or HTTPS. Can be set directly on the watch or via the Connect IQ app on your phone. Switch between the two anytime from this menu.
Reset Password
Generates a new 6-digit pairing password. Use this if the watch lost its connection and needs to re-pair.
Backup to Cloud
Sends all local match data to your server as a backup snapshot.
Restore from Cloud
Loads a previously saved backup from your server back onto the watch.
Data & History
Point Reasons
Track the reason for each point: net, wall, or a regular winner. Off by default. Turn it on if you want more detail in your match stats.
Keep Records
How many matches are stored locally on the watch. Default is 15. Once you exceed the limit, the oldest are removed. Matches already synced to your server are never lost.
Clear App Data
Resets all data and settings to their defaults. Your server connection password and sync configuration are kept.
Self Host (Docker) #

The web dashboard and API run as Docker containers on your own server or home machine. Pre-built images are published to the GitHub Container Registry, no build step needed.

Available images

  • ghcr.io/francudina/racketscore-api:latest ↗ link
  • ghcr.io/francudina/racketscore-web:latest ↗ link

Prerequisites

  • Docker and Docker Compose installed

1. Create docker-compose.yml

name: racketscore services: db: container_name: racketscore-db image: postgres:alpine environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} PGDATA: /data/postgres POSTGRES_INITDB_ARGS: --encoding=UTF-8 ports: - "${POSTGRES_PORT:-5432}:5432" volumes: - pgdata:/data/postgres restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 start_period: 10s api: image: ghcr.io/francudina/racketscore-api:${APP_VERSION:-latest} container_name: racketscore-api restart: unless-stopped environment: DATABASE_URL: "postgresql+asyncpg://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/${POSTGRES_DB}" POSTGRES_SCHEMA: ${POSTGRES_SCHEMA} JWT_SECRET_KEY: ${JWT_SECRET_KEY} RESET_SECRET_KEY: ${RESET_SECRET_KEY} ports: - "${API_PORT:-8741}:8741" depends_on: db: condition: service_healthy healthcheck: test: ["CMD-SHELL", "python -c 'import urllib.request; urllib.request.urlopen(\"http://localhost:8741/health\")'"] interval: 10s timeout: 5s retries: 3 start_period: 15s web: image: ghcr.io/francudina/racketscore-web:${APP_VERSION:-latest} container_name: racketscore-web restart: unless-stopped ports: - "${WEB_PORT:-3847}:80" depends_on: api: condition: service_healthy volumes: pgdata:

2. Create .env

Create a .env file in the same directory:

# Ports API_PORT=8741 WEB_PORT=3847 # Database POSTGRES_USER=racketscore POSTGRES_PASSWORD=change-me-use-a-strong-password POSTGRES_DB=racketscore POSTGRES_PORT=5432 POSTGRES_SCHEMA=racketscore # Security - generate your own secrets! JWT_SECRET_KEY=change-me-in-production-use-a-real-secret RESET_SECRET_KEY=change-me-in-production-use-a-real-secret # App version (matches git tag, e.g. 1.0.0, or "latest") APP_VERSION=latest

Change at minimum: POSTGRES_PASSWORD, JWT_SECRET_KEY, and RESET_SECRET_KEY. Generate secrets with openssl rand -hex 32.

3. Start

docker compose up -d

The web UI is available at http://localhost:3847 (or your configured WEB_PORT). The API runs on port 8741, which is the address you configure on the watch for syncing. Default password is admin; you'll be prompted to change it on first login.

Updating

docker compose pull docker compose up -d

Watch → Server connectivity

The watch syncs over HTTP to your server's IP and port 8741. Make sure:

  • The watch and server are on the same Wi-Fi network, or
  • The server is reachable over the internet (port forwarded / VPN / public IP)

You can find the correct IP addresses in Settings → Watch Connection inside the web dashboard.

What's new #
v1.0.8 May 20, 2026
Change Server
  • Change Server is now available directly from the in-game menu (long-press UP) and the pause menu, no need to pause and re-enter settings
  • Doubles shows P1–P4 with "(our team)" / "(their team)" labels; singles shows only P1 and P3
  • Changing the server mid-match preserves correct rotation order, e.g. starting with P3 gives P3 > P1 > P4 > P2
  • Server change syncs instantly to the paired joiner watch via ANT+ and to the cloud
Bug Fixes
  • Fixed score display in the 3rd set of a best-of-3 showing 1, 2, 3 instead of 15, 30, 40 after a 1:1 set split
  • Super tiebreak now defaults to off; previously defaulted to 10-point which silently triggered for all best-of-3 matches
  • Super tiebreak set score now records correctly (e.g. 7:4) instead of always showing 1:0
  • Match now ends correctly after winning a super tiebreak
  • Tiebreak menu relabelled: "Full Set" (was "No"), "7-Point" and "10-Point" with "in final set" subtitle for clarity
  • Removed "Resume Later" from the pause menu
New Devices
  • Forerunner® 170 / 170 Music
  • Forerunner® 70
v1.0.7 May 13, 2026
Mobile Live Scoreboard
  • Fullscreen scoreboard redesigned for portrait mode: scores stack vertically with team names above and below
  • Landscape mode no longer cuts off scores on mobile
Watch Pairing
  • Pairing error messages are now more specific: "Add device in web app first" vs "Wrong password"
  • Live sync stops retrying automatically when the server returns an auth error
  • Changing the server URL now clears the paired state so re-pairing is required
  • Clear All Data correctly resets the paired state while keeping the server address
Player Assignment
  • Singles matches now allow assigning players to opponent slots (P3 and P4) in Player Statistics
v1.0.6 May 3, 2026
Server Config
  • Server Config now shows the active server address, phone URL or IP depending on selected config source
v1.0.5 May 3, 2026
Server Config
  • Server URL can now be configured from the Connect IQ app on your phone
  • Supports full URLs including domain names, ideal for cloud-hosted setups
  • Switch between phone and watch config source anytime from Settings > Cloud Sync > Server Config > URL Config
v1.0.4 May 3, 2026
Server Config
  • Added HTTP/HTTPS protocol toggle in Settings > Cloud Sync > Server Config
  • Fixes "Invalid URL" error when pairing with public internet servers
v1.0.3 May 3, 2026
Bug Fixes
  • Fixed server sync pairing failing with "wrong password" on self-hosted setups
  • Sync endpoints no longer require dashboard authentication, allowing the watch to pair directly using its device password
New Devices
  • D2™ Mach 2 Pro
v1.0.2 Apr 1, 2026
Display
  • New Font Size setting, choose between Small and Medium for all gameplay labels
  • Available from both the in-game menu (long-press UP) and main Settings
Colors
  • Black added as a color option for data fields
New Devices
  • Descent™ G2
  • Descent™ Mk3 43mm / Mk3i 43mm
  • Descent™ Mk3i 51mm
  • Approach® S50
  • Approach® S70 42mm
  • Approach® S70 47mm
v1.0.1 Mar 27, 2026
App Themes
  • 11 preset color themes available in Settings > Colors > Themes
  • Long-press UP during gameplay for quick theme switching
  • Optimized for MIP displays
Bug Fixes
  • Fixed incorrect scoring for the Silver Point deuce rule in Padel and Tennis
v1.0.0 Mar 10, 2026
Scoring
  • Full scoring for Padel, Tennis, Pickleball, Badminton, Squash and Table Tennis
  • Each sport uses correct rules, point system and game structure
  • Golden Point mode for padel
  • Tiebreak support
  • Singles and doubles
  • Undo last point at any time
Multiplayer
  • Host a match and share the live score with every player on the court
  • Everyone sees the score update in real time on their own watch
  • Vibration alerts on every game and set won
Swing Analytics
  • Automatic swing detection on every shot
  • Measures G-Force and estimates Power output in Watts per swing
  • View average and peak values in the post-match summary
  • Track whether your hitting is improving over time
Live Scores
  • Follow any active match in real time from a browser
  • See live score, current game, set progress and physical stats as they update
  • No need to be on the court
Connection
  • Live score streaming and match sync require a Bluetooth connection between your watch and your phone via the Garmin Connect app
  • Multiplayer scoring between watches uses ANT+ directly and does not require a phone
Match History
  • Every match saved with full detail
  • Set scores, point by point history, serve and return win rates, heart rate, calories, play time, swing count and power data
  • Filter and browse past matches by sport, result, date and more
Player Profiles
  • Create player profiles and link them to Garmin devices
  • Track individual performance over time
  • Compare stats between players and sessions
Performance Stats
  • Win rate trends, serve and return win percentages, error analysis, fitness trends, power over time and intensity charts
  • Filterable by sport, date range, result and team mode
Goals
  • Set weekly or monthly targets for matches played, win rate, play time, calories, power and more
  • Track progress directly from the dashboard
Dashboard
  • Add the stat tiles and goals that matter to you
  • Reorder and arrange sections to suit how you review your data
Backups
  • Create full database snapshots directly from settings and restore them at any time
  • Device backups store match data uploaded from your Garmin watch and can be restored individually
  • Never lose your match history