// open source
Open source
Tools we wrote and publish under the MIT licence, then code that someone else's maintainers reviewed and merged. Every merged row links to the pull request, so you can read the diff and the review yourself.
01 Tools we publish
Command line tools we built for our own site and then made general. Each has a page with the install command, sample output and what it can't check.
- answer-engine-benchmarkAsks four AI engines your buyers' questions, three times each, and counts how often the answers cite your site.Python 3.10 or later, MIT
- answer-crawler-checkFails your build when robots.txt blocks an AI answer crawler from any page in your sitemap.Node.js 20 or later, MIT
- one-hopChecks a redirect map after a site move. Every old URL must reach its new URL in one permanent redirect.Python 3.10 or later, MIT
02 Fixes in other projects
Fixes and small features in libraries other people maintain. Most are in calendar, scheduling, GPS and sports data code.
| Project | What we changed | Pull request |
|---|---|---|
| akornatskyy/scheduler | HTTP request templates keep their values. | #1341 merged 28 Sept |
| Alek050/databallpy | Saving a game keeps player IDs that mix numbers and text. | #398 merged 16 Sept |
| American-Soccer-Analysis/itscalledsoccer | Brought back the stadium ID and stadium name filters. | #298 merged 19 Sept |
| andrewRowlinson/mplsoccer | Zone statistics handle an empty selection of events. | #126 merged 14 Sept |
| betcode-org/betfair | Added the in-play service call for scores and broadcast data. | #623 merged 4 Sept |
| chris48s/arcgis2geojson | Features with a null geometry survive the conversion. | #120 merged 21 Sept |
| cwendt94/espn-api | The league endpoint is kept when a fallback request fails. | #702 merged 14 Sept |
| developmentseed/geojson-pydantic | Fixed validation of numeric feature IDs. | #205 merged 21 Sept |
| diegoscarabelli/garmin-health-data | Verification fails when SQLite reports an integrity error. | #99 merged 20 Sept |
| Drarig29/brackets-manager.js | Fixed mutation events for custom storage adapters. | #253 merged 20 Sept |
| flohoss/gocron | Shutdown waits for job cancellation to finish before it returns. | #59 merged 28 Sept |
| franc6/ics_calendar | Year offsets work without a month offset. | #283 merged 25 Sept |
| github/explore | Wrote the curated page for the tennis topic. | #5355 merged 4 Sept |
| gkjohnson/three-geojson | Fixed material groups in merged line geometry. | #38 merged 26 Sept |
| henriquepgomide/caRtola | Fixed loading the market dataset through fsspec. | #134 merged 21 Sept |
| henrygd/ncaa-api | Fixed caching of GraphQL scoreboard errors. | #44 merged 17 Sept |
| Hexagon/croner | Fixed exhausted schedules that use startAt and an interval. | #390 merged 27 Sept |
| home-screens/home-screens | Discards display prefetch responses that are no longer valid. | #61 merged 17 Sept |
| hugoj0s3/NaturalCron | Occurrence results keep their UTC kind. | #8 merged 25 Sept |
| ical-org/ical.net | Copying a calendar keeps its parameters. | #987 merged 28 Sept |
| ical4j/ical4j | Recurrence counts hold with repeated selectors, and the candidate dedup code is shared. | #907 merged 25 Sept#912 merged 26 Sept |
| icalendar/icalendar | Fixed the transition onsets of generated time zones. | #326 merged 25 Sept |
| jenetics/jpx | Handles GPX byte-order marks and XML encodings. | #194 merged 18 Sept |
| jovandeginste/workout-tracker | The dashboard is served at the configured web root. | #868 merged 16 Sept |
| krelltunez/dayGLANCE | Fixed weekly recurrence limits after fast-forwarding. | #1699 merged 17 Sept |
| libical/libical | Fixed explicit local times in forward time zone gaps. | #1427 merged 25 Sept |
| mapdraw/mapdraw | Importing a geometry collection skips malformed members. | #38 merged 20 Sept |
| martineastwood/penaltyblog | The FBRef scraper keeps HTTP errors and retries on rate limits. | #46 merged 13 Sept |
| mkuthan/garmin-workouts | Consecutive workout steps are kept. | #136 merged 14 Sept |
| muktihari/fit | Combining activities of different sports keeps every session. | #644 merged 15 Sept |
| nestjs/schedule | A job named __proto__ keeps its name. | #2380 merged 28 Sept |
| onury/tasktimer | Task dispatch stops after an interrupted tick. | #62 merged 28 Sept |
| OzzyCzech/icalparser | Fixed numeric recurrence filters. | #88 merged 27 Sept |
| PremoWeb/chadburn | Rejected job schedules are logged. | #133 merged 28 Sept |
| rapkin/osm2geojson | GeometryCollections convert to GeoJSON features. | #62 merged 21 Sept |
| Raruto/leaflet-elevation | Fixed marker heights on tracks below sea level. | #310 merged 18 Sept |
| SauceLLC/sauce4strava | Restored the earliest athlete history values for older activities. | #252 merged 21 Sept |
| sebbo2002/ical-generator | Temporal dates convert to the requested time zone. | #793 merged 28 Sept |
| shep-ai/shep | Kimi Code support, fixes from a full repo review, Windows native builds in CI, and a SQLite close on worker exit. | #876 merged 21 Sept#878 merged 22 Sept#880 merged 22 Sept#882 merged 22 Sept |
| solioanalytics/open-fpl-solver | Fixed false boolean values in command-line options. | #65 merged 15 Sept |
| Songmu/ecschedule | Cluster templates resolve before tracking IDs fall back to a default. | #322 merged 28 Sept |
| sports-alliance/sports-lib | GPX route links export in schema order. | #136 merged 14 Sept |
| sportsdataverse/sportsdataverse-py | The scoreboard cache picks its TTL from the query dates. | #487 merged 14 Sept |
| timschneeb/KomootGPX | Custom filenames keep the tour time. | #44 merged 14 Sept |
| tkrajina/gpxpy | Interpolation distance holds at repeated endpoints. | #301 merged 26 Sept |
| tmcw/geojson-flatten | Flattening collections no longer copies in quadratic time. | #108 merged 21 Sept |
| twpayne/go-geom | The WKB geometry wrappers accept SQL NULL. | #273 merged 22 Sept |
| umap-project/umap | Team pages hide deleted and blocked maps. | #3496 merged 21 Sept |
| wavded/ogr2ogr | Errors on the input stream reach the caller. | #118 merged 22 Sept |
| whatadewitt/yahoo-fantasy-sports-api | League collections keep their scoreboard weeks. | #136 merged 22 Sept |
| withastro/docs | A write-up on moving from WordPress to Astro and redirecting every old URL. | #14611 merged 25 Sept |
| yihong0618/running_page | Missing GPS points stay intact, and the frontend shows earlier routes. | #1149 merged 23 Sept |
03 Live Tennis API integrations
We built Live Tennis API. These pull requests put tennis data into tools other people run: a watch app, a Kodi add-on, workflow blueprints, agent frameworks. Each one went through that project's own review.
| Project | What we added | Pull request |
|---|---|---|
| avalos010/sportsbook-odds-comparer | A tennis group in the fallback sports list. | #5 merged 18 Aug |
| braedonsaunders/homerun | A live tennis match-state feed for Polymarket tennis markets. | #320 merged 21 Aug |
| Cog-Creators/Red-Index | Listed our Red-DiscordBot tennis cog in the cog index. | #187 merged 24 Jul |
| davila7/claude-code-templates | The Live Tennis API MCP server as a template. | #813 merged 20 Aug |
| deepset-ai/haystack-integrations | The Live Tennis API integration page for Haystack. | #556 merged 13 Aug |
| duckdb/community-extensions | A livetennis extension with scores, fixtures and player search as SQL table functions. | #2507 merged 18 Aug |
| elizaOS/eliza | Registry entry for our elizaOS tennis plugin. | #23503 merged 21 Aug |
| enescingoz/awesome-n8n-templates | An n8n template that posts new live matches to Discord. | #192 merged 18 Aug |
| erikw/tmux-powerline | A tennis segment with cached free-tier score snapshots. | #520 merged 20 Sept |
| espanso/hub | A live tennis scores package. | #238 merged 25 Aug |
| espruino/BangleApps | A live tennis scores app for the Bangle.js 2 watch, then readable error messages on screen. | #4316 merged 16 Aug#4320 merged 17 Aug |
| Flow-Launcher/Flow.Launcher.PluginsManifest | Added our Live Tennis plugin to the plugin manifest. | #714 merged 6 Aug |
| glanceapp/community-widgets | A live tennis matches widget. | #299 merged 3 Sept |
| jparise/vesta | A live tennis scores example for the Vestaboard client. | #259 merged 22 Aug |
| kestra-io/blueprints | Two blueprints, a daily fixtures run and a live scores window. | #269 merged 25 Sept |
| langchain-ai/docs | The Live Tennis API integration docs page. | #5122 merged 7 Aug |
| langchain4j/langchain4j-community | A Live Tennis API tool integration for LangChain4j. | #782 merged 13 Sept |
| langgenius/dify-plugins | The Live Tennis API plugin for Dify, and three updates since. | #2747 merged 23 Jul#2773 merged 28 Jul#2808 merged 3 Aug#2834 merged 7 Aug |
| lissy93/dashy | A live tennis widget. | #2263 merged 22 Jul |
| logseq/marketplace | Listed our Tennis Capture plugin in the marketplace. | #891 merged 17 Aug |
| matryer/xbar-plugins | Moved the live tennis plugin from scraping to the API, then set a refresh that fits the free quota. | #2187 merged 31 Jul#2190 merged 20 Aug |
| maubot/plugins.maubot.xyz | Listed our livetennis plugin for Matrix. | #88 merged 17 Sept |
| mbordash/DRADIS | An observe-only scout for live tennis event state. | #7 merged 16 Aug |
| meltano/hub | Added our Singer tap, tap-livetennisapi, to the hub. | #2312 merged 25 Aug |
| NangoHQ/nango | Nango support for the Live Tennis API. | #6910 merged 13 Aug |
| polybar/polybar-scripts | Linked our polybar tennis scores script from the user repos list. | #471 merged 16 Aug |
| tronbyt/apps | A Live Tennis app with Challenger and ITF scores. | #700 merged 13 Sept |
| usetrmnl/plugins | Listed our TRMNL live tennis plugin in the community section. | #132 merged 16 Aug |
| vincenzo-afk/SPORTS | A Live Tennis API sports provider. | #12 merged 12 Sept |
| weechat/scripts | tennis.py, with live scores and ATP and WTA rankings on demand. | #614 merged 12 Sept |
| xbmc/repo-scripts | The Kodi add-on script.livetennisscores, version 1.0.0. | #2892 merged 15 Sept |
| zed-industries/extensions | The Live Tennis MCP server as a Zed extension, then its v0.2.0 update. | #6945 merged 27 Jul#7254 merged 19 Aug |
04 Our public repositories
The livetennisapi organisation on GitHub holds 57 public repositories. They are grouped here by what they are for.
Client libraries
- livetennisapi-js JavaScript and TypeScript
- livetennisapi-python Python
- livetennisapi-go Go
- livetennisapi-php PHP
- livetennisapi-dotnet .NET
- livetennisapi-dart Dart and Flutter
- livetennisapi-swift Swift
- livetennisapi-laravel Laravel package
AI agents and MCP
- livetennisapi-mcp MCP server
- livetennisapi-ai Vercel AI SDK tools
- langchain-livetennis LangChain
- llama-index-tools-livetennisapi LlamaIndex
- livetennisapi-haystack Haystack
- livetennisapi-dify-plugin Dify
- livetennisapi-codex-plugin Codex
- gemini-cli-livetennis Gemini CLI
- zed-livetennis-mcp Zed
- elizaos-plugin-livetennis elizaOS
Spec, data and measurement
- openapi OpenAPI 3.1 spec
- livetennisapi-data Point-by-point dataset for research
- tennis-archive-sample One ATP season, CC BY 4.0
- tennis-api-benchmark Response time and availability method
- latency-bench Score latency against market repricing
- duckdb-livetennis DuckDB extension
- tap-livetennisapi Singer and Meltano tap
- n8n-nodes-livetennisapi n8n node
- node-red-contrib-livetennis Node-RED nodes
Prediction market tooling
- polymarket-tennis Polymarket tennis toolkit, observe only
- livetennisapi-starter-python Starter kit, Python
- livetennisapi-starter-node Starter kit, Node
- livetennisapi-starter-go Starter kit, Go
- simmer-tennis-live-gate Match-state gate for Simmer
- oddsharvester-tennis-live OddsHarvester companion
- vibe-trading-livetennis Vibe-Trading data loader
Apps, widgets and plugins
- ha-livetennis Home Assistant
- MMM-LiveTennis MagicMirror
- livetennisapi-vscode VS Code
- obsidian-live-tennis Obsidian
- logseq-live-tennis Logseq
- livetennis-tui Terminal app
- livetennis-marimo marimo notebook
- script.livetennisscores Kodi
- StreamController-LiveTennis StreamController
- companion-module-livetennisapi Bitfocus Companion
- Flow.Launcher.Plugin.LiveTennis Flow Launcher
- livetennis-redbot Red-DiscordBot
- maubot-livetennis Maubot for Matrix
- slack-machine-livetennis Slack
- nonebot-plugin-livetennis NoneBot2
- huginn_live_tennis_agent Huginn
- trmnl-live-tennis TRMNL
- inkycal-tennis Inkycal
- inkypi-live-tennis InkyPi
- scriptable-live-tennis Scriptable for iOS
- uebersicht-live-tennis Übersicht
- polybar-tennis-scores polybar
- remote-data-blocks-livetennis WordPress Remote Data Blocks
05 How this list is made
The rows come from a GitHub search for pull requests by our account that were merged, run on 29 September 2026. Pull requests to our own repositories are not counted.
26 more merged pull requests only add Live Tennis API to a directory or an "awesome" list. They are left out, because a line in a list is not code.
There are no star counts on this page. They change every day and we would rather not print a number that is wrong by next week.