A blazing-fast CLI that generates completely random soccer matches on the spot — or run scripted matches with the .tsrc (Tiny Soccer Sim Rust C) language.
Find a file
2026-09-24 20:02:13 -04:00
src Add scripting language capabilities to tssr for setting up soccer games programmatically, add some example scripts in files suffixed .tsrc (tiny soccer sim rust C) 2026-09-24 20:02:13 -04:00
.gitignore Initial Commit 2026-09-24 18:04:07 -04:00
Cargo.lock Initial Commit 2026-09-24 18:04:07 -04:00
Cargo.toml Initial Commit 2026-09-24 18:04:07 -04:00
gnu-bsd-soccer.tsrc Add scripting language capabilities to tssr for setting up soccer games programmatically, add some example scripts in files suffixed .tsrc (tiny soccer sim rust C) 2026-09-24 20:02:13 -04:00
README.md README touchup 2026-09-24 18:04:47 -04:00
test_match.tsrc Add scripting language capabilities to tssr for setting up soccer games programmatically, add some example scripts in files suffixed .tsrc (tiny soccer sim rust C) 2026-09-24 20:02:13 -04:00

tssr — Tiny Soccer Simulator Rust

A blazing-fast CLI that generates completely random, fabricated soccer matches on the spot. Run it, get a match. That's it.

Build

cargo build --release

The binary will be at target/release/tssr.

Usage

./tssr              # Print a unicode table match report
./tssr --json       # Print the same match as JSON

Output

Table mode (default)

╔════════════════════════════════════════╗
║         TSSR MATCH RESULT              ║
╠════════════════════════════════════════╣
║  Man Page City        2 - 1  Libre Pool║
╠════════════════════════════════════════╣
║                                        ║
║  Shots              10           8     ║
║  On Target          4           3      ║
║  Possession        55%         45%     ║
║                                        ║
╠════════════════════════════════════════╣
║  Goals:                                ║
║    Man Page City: Marco Smith (23')    ║
║    Man Page City: Leo Brown (67')      ║
║    Libre Pool: Dan Garcia (45')        ║
╚════════════════════════════════════════╝

JSON mode (--json)

{
  "home": {
    "team": "Man Page City",
    "score": 2,
    "shots": 10,
    "shots_on_target": 4,
    "possession": 55,
    "scorers": [
      {"player": "Marco Smith", "minute": 23},
      {"player": "Leo Brown", "minute": 67}
    ]
  },
  "away": {
    "team": "Libre Pool",
    "score": 1,
    "shots": 8,
    "shots_on_target": 3,
    "possession": 45,
    "scorers": [
      {"player": "Dan Garcia", "minute": 45}
    ]
  }
}

Team Names

All team names are PES-style parodies referencing free software and open source:

  • Man Page City, Libre Pool, ArsenAL, Shellsea, TomThumb FC
  • Real Madread, BarcelON, BayErR, Door Mount, Inter Mission
  • Man Unixited, A-JaX, CellTick, RanGERS, LaZIO, RomaAEM
  • Port OS, BenFICA, Fine Node, AC M1Lan, PSGROOT
  • Free BSD Athletic, Kernel Panic, Tor Valdes, Debian United
  • Arch Lisbon, NixOS City, Fork Enoord, Branchand FC, Merge Conflict

Stats Included

  • Score
  • Shots & shots on target
  • Possession percentage
  • Goal scorers with minute of goal

Performance

  • Single dependency (rand)
  • Release profile uses LTO, single codegen unit, panic=abort, and symbol stripping
  • Designed for sub-second cold compilation and instant execution