A football chart library with
some personality.
Campos is named after Jorge Campos because the goal feels similar: technical quality, obvious character, and no generic defaults. The project came out of wanting football charts that could live inside real product pages, not just as one-off notebook outputs.
Football visualisation has a real frontend gap.
A lot of the best football visualisation craft still lives in Python. That is a strength, not a problem: notebooks and analyst workflows should stay first-class. But product teams still need React components, TypeScript-friendly data contracts, and visuals that can survive navigation, filters, empty states, and export requirements.
Campos exists to bring that level of football-specific care into a production UI library. The aim is not to out-notebook notebook tools. It is to make football surfaces feel native on the web.
Notebook quality, product reality
The quality bar came from analyst work, but the target surface is product UI: docs pages, match hubs, scouting pages, and shareable exports.
Football-first, not generic-chart-first
The library is built around football semantics such as pitch space, formations, provider normalisation, and page composition rather than treating football as a thin theme on top of generic plotting.
The point is not just drawing one good chart. It is building a coherent football surface without sanding off the character.
Campos is opinionated about a few things on purpose. These are the constraints that made the project worth starting in the first place.
The zero-config version should already look like something a real product team could ship.
Provider normalization, pitch coordinates, and page-level football patterns should be explicit parts of the library surface.
Custom visual logic should be expressible in TypeScript callbacks instead of disappearing into a second styling DSL.
Campos owes a lot to the Python football viz ecosystem.
This project did not start from a blank page. A lot of the taste, rigor, and practical lessons came from existing football analysis tools and libraries, especially the Python ones that shaped the modern football-viz workflow.
mplsoccer
A huge reference point for pitch drawing, football-specific chart ergonomics, and the idea that the defaults should already look like football rather than generic plotting.
kloppy
A major influence on adapter thinking: provider seams, coordinate handling, and the discipline of turning raw feeds into stable, reusable football packets.
socceraction
Important for the mental model that football data should move through honest, reusable intermediate products instead of jumping straight from raw feeds to chart-specific shapes.
soccerdata
A reminder that pragmatic data access matters. Some of Campos' narrower adapter surfaces exist because scrape-backed or public-data seams are still useful when they are described honestly.
Campos is not trying to replace those libraries, or to turn Python football analysis into a JavaScript clone. The ambition is narrower: learn from that ecosystem and bring the same level of care to React-first, TypeScript-first product surfaces.
Built by
campos is built by withqwerty.
If you want to follow progress closely, the GitHub repo is the best place to watch the alpha take shape.