compere vs. plain Elo libraries

“Plain Elo library” here means small Python packages whose entire purpose is computing the Elo update — e.g. elote, multielo, and the many gist-sized implementations on PyPI. Compere uses the same Elo math, but the rest of the package is doing something different.

Dimensioncompereplain Elo libraries
Elo update Standard formula, K = 32 default, initial rating 1500. Standard formula, parameters vary by library.
Pair selection UCB1 multi-armed bandit (default) or similarity-based pairing. Not provided. The caller decides which pair to compare.
Persistence SQLAlchemy — SQLite by default, PostgreSQL when needed. None. State lives in memory or whatever the caller wires up.
HTTP API FastAPI server, 11 endpoints, interactive /docs. None. Library only.
Auth / rate limiting Optional JWT auth and request rate limiting, both off by default. Not in scope.
Deployment Dockerfile + docker-compose in repo. N/A — libraries do not self-deploy.
License MIT. Varies (usually MIT or BSD).
Library use Supported. Import create_entity, create_comparison, get_ratings from compere.modules. The primary mode.

When you should pick a plain Elo library

You already know which pairs you want to compare. You have an existing data store. You want the Elo update and nothing else. In that situation, importing a 200-line library is the right move. Compere would be over-served.

When compere is the right tool

You are running a pairwise comparison study and you do not already know which pairs to ask about — that is what the UCB module is for. Or you want an HTTP-addressable service so a frontend (or several frontends) can hit it without re-implementing comparison bookkeeping. Or you want a single Docker container that handles entities, comparisons, pair selection, and ratings as one cohesive thing.

What we are not claiming

We are not claiming a better Elo update. The math is the math; we did not invent it. We are claiming a useful packaging of it for a specific workflow (pairwise studies where pair selection is the bottleneck). If your workflow is different, your tool is different.