TourBillon
TourBillon is free software (distributed under the LPG license) that helps you organize tournaments using the Swiss system, for teams of one or more player(s). It was originally built for the game of Billon, but can be used for any Swiss-system tournament.
With TourBillon you can:
- register the teams and their players,
- automatically pair teams round after round (draw),
- enter the scores of each match,
- follow the live ranking, including on a big screen in the room,
- browse the history of past editions, player by player.
📦 Installation
TourBillon is published on PyPI under the name tourbillon-app. If you only
want to run the application, install it with pip:
pip install tourbillon-app
Then start the application:
tourbillon
🚀 Getting started
Open your web browser. Three interfaces are available:
| Interface | Address | What it is for |
|---|---|---|
| Admin | http://localhost:8000/admin | Register teams, run the draws, enter scores, view rankings. |
| Display | http://localhost:8000/display | Read-only live rankings and current round for the big screen (projector). |
| History | http://localhost:8000/history | Player statistics year after year, across every saved tournament. |
🏆 A typical tournament
- Open the Admin interface and register every team and its players.
- Launch the first draw to pair the teams for round 1.
- Play the matches, then enter each score in the Admin interface.
- Launch the next draw, and repeat for every round (usually 5 to 6).
- Show the Display interface on the big screen so everyone can follow the live ranking and see who plays where.
- After the event, use the History interface to review player performances across the years.
Your tournaments are saved automatically and remain compatible with the files from previous editions.
📊 How the ranking works
Teams are paired with opponents who have a similar score, never play the same opponent twice, and are never eliminated. Teams are ranked first by the number of games won; in case of a tie, the total number of points decides. The winner is the team with the most games won (then the most points) across all rounds.
For 32 to 64 teams, it is recommended to play between 5 and 6 rounds.
🛠️ Developer mode
Developer mode needs Python, Poetry, Node.js, and npm. On macOS, you can install them step by step as follows.
📦 Installation
1. Install Python
TourBillon requires Python 3.10 or higher. Check whether it is already installed:
python3 --version
If it is missing or too old, install it with Homebrew:
brew install python
or download it from python.org.
2. Install Poetry
Poetry is used to install the Python dependencies and run the project from the source tree:
pip install poetry
poetry --version
3. Install Node.js and npm
Node.js (which bundles npm) is needed to build the web interface. Check if it
is installed:
node --version
npm --version
If the command is not found, or reports a version below 18, install it using one of the options below.
Option A — Homebrew
# Install Homebrew if you don't have it yet
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Install Node.js (includes npm)
brew install node
# Verify the installation
node --version
npm --version
Option B — official installer
Download the macOS .pkg installer from nodejs.org
(choose the LTS version) and follow the graphical installer. It installs
both node and npm.
After installation, make sure
node --versionreports 18 or higher.
4. Install TourBillon from source
From the TourBillon folder, install the backend dependencies with Poetry:
poetry install
Then build the web interface:
cd tourbillon-ui
npm install
npm run build
cd ..
5. Start the application
poetry run tourbillon
🏗️ Build the packages
The frontend must be built once beforehand, then bundled into the Python
package via a dedicated script, before running Poetry's build. This keeps
the resulting wheel a portable py3-none-any package:
poetry run python scripts/build-ui.py
poetry build
To build the Windows executable locally (on Windows, with the build
dependency group installed):
poetry install --with build
poetry run python scripts/build-ui.py
poetry run pyinstaller scripts/build-exe.spec --noconfirm
All packages are generated in the dist/ folder. To inspect
the build artifacts before publishing, list that directory:
ls dist/
Publishing a new release
Publishing is automated: pushing a Git tag X.Y.Z triggers the
publish.yml workflow, which builds the
frontend, builds the package, and uploads it to PyPI using
Trusted Publishing (OIDC, no
token to manage). In parallel, it also builds a standalone Windows
executable with PyInstaller (no Python
installation required on the target machine). Both the PyPI artifacts
(sdist + wheel) and the Windows executable are then attached to the matching
GitHub release.
poetry version <X.Y.Z>
git add pyproject.toml
git commit -m "Bump version to $(poetry version -s)"
git tag "$(poetry version -s)"
git push && git push --tags
The workflow refuses to publish if the tag does not match the version in
pyproject.toml.
v6.0.0
- Make TourBillon compatible with Python >= 3.10
- Full rework of the UI using Vue.js
- Remove cli interface
- Remove wxPython dependecy
Metadata
Release files for tourbillon-app 6.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tourbillon_app-6.0.0.tar.gz | 200.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tourbillon_app-6.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 406.2 kB
Release files / tourbillon_app-6.0.0.tar.gz
| Download URL | tourbillon_app-6.0.0.tar.gz |
|---|---|
| Size | 200.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
acb2c465a41cdea9d0c1267a48c33aeba4e4cbddec56da39b279dc248812cab7
|
|
BLAKE2b-256 checksum How to use checksums |
a20a072b196500170b0158e81d780a30eb64372a1ff878a146fb4c7f0608d595
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency logRelease files / tourbillon_app-6.0.0-py3-none-any.whl
| Download URL | tourbillon_app-6.0.0-py3-none-any.whl |
|---|---|
| Size | 205.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d71fc4bf2e941998468a308f05bf11f865e4e829f653b23bc01bad3545f3842f
|
|
BLAKE2b-256 checksum How to use checksums |
b1af2c1ff4b9135ce4fb3f4c2bd65d6841f866d06c4425e5e42f7b0ebac30475
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 30, 2026.
Transparency log