Skip to content

v1.21.0 — EFL Cup + FA Cup, and two ESPN sweep dedupe fixes

Choose a tag to compare

@Jacob-Lasky Jacob-Lasky released this 26 Aug 19:57
· 8 commits to main since this release
85384f6

English domestic cups: EFL Cup (Carabao Cup) and FA Cup

Two new sources, both off by default, backed by ESPN's keyless site API. Turn them on under Sport Sources in the plugin settings.

Reported as "Tottenham v Charlton in the EFL Cup is on today, but I don't see it in my top matchups." The game was carried on six-plus channels in the guide and the matcher never went looking for it, because no cup fixture had ever entered the pipeline.

Why ESPN and not Football-Data.org

Football-Data.org gates every domestic cup behind a paid plan. Verified against the live API on 2026-08-26:

code=FLC  Football League Cup  plan=TIER_THREE   -> HTTP 403
code=FAC  FA Cup               plan=TIER_TWO
code=PL   Premier League       plan=TIER_ONE     -> 200, 4 matches

Same key for both, so it is plan scope and not a bad key or a rate-limit. FD.org's free tier is exactly 12 competitions (PL, ELC, CL, EC, FL1, BL1, SA, DED, PPL, PD, BSA, WC) and no cup of any country is among them. Adding one as a COMPETITIONS entry would 403 on every refresh and contribute zero games silently.

How cup ties are scored

Rounds come from ESPN's per-event season.slug. Both cups publish 8 ordered rounds, and the maps are per-competition because the two overlap by name at different depths: the FA Cup's fourth round is its round of 32, the EFL Cup's is its round of 16.

Early rounds get a new low CUP_* stage band ramping to just under the shared quarterfinal score, so a second-round tie sorts below a marquee league game while a cup final sorts at the top. Quarterfinal onward reuses the existing knockout bands.

No importance simulation and no ranks, both deliberate. A cup has no league table; simulating the bracket instead needs the whole bracket, which ESPN publishes a day at a time; and the EFL Cup semifinal is two legs while every other round is single-leg. Ranks stay unset because that is what makes giant-killing score correctly: rank points are only awarded when a rank is present, so a Premier League side drawn against a League One side gets no penalty for being lopsided.

No favorites gate, unlike the friendlies sources. A friendly is an exhibition whose only claim to a slot is the favorite signal; a cup tie has real elimination stakes, and a quarterfinal between two clubs you do not follow is a genuine top matchup.

Also in this release

  • The per-day ESPN scoreboard sweep is now shared between the friendlies and cup sources, and two dedupe bugs in it are fixed. Both affected friendlies before this release:
    • the event id was claimed before the drop filters ran, so a stale finished copy in the overlapping lookback bucket could consume the id and silently suppress the live copy, dropping a real fixture from the guide;
    • a missing event id was itself used as a dedupe key, so the first id-less fixture claimed the slot for every later one.
  • The tournament-stage line in the EPG description no longer leaks the internal stage name: SEMI_FINALS rendered as "semi finals" and now reads "Semifinal".

Note on versioning

1.20.1 was never published as a release, so this jumps the listing from 1.20.0 to 1.21.0. That version's change (match identity no longer depending on kickoff time, across eleven sources) is included here. No retroactive tag is being backfilled, since nobody installs from one.

Full detail in CHANGELOG.md.