Skip to content

Releases: maynetee/MTT

MTT Tournament Director 1.1.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 07:16

Tournaments without payouts and a currency that can be changed at any time.

Downloads

  • macOS (Apple silicon and Intel): .dmg (universal)
  • Windows (x64): -setup.exe installer or .msi
  • Linux (x64): .AppImage, .deb or .rpm

These builds are not code-signed yet: see Download and install.

Added

  • Tournaments without payouts, for a freeroll for points, a league night or a practice event:
    untick “This tournament pays prizes” in the new-tournament form or in Settings. Nobody is
    then in the money: no places paid, no bubble, no Payouts or Deal tab, no money line or payout
    ladder on the TV display and no prize column in the exports. Buy-ins and the prize pool can
    still be tracked, and prizes can be turned back on at any time unless the payouts are locked
    (#86).

Changed

  • The currency can be changed after the first entry, to fix a wrong choice or the sample
    tournament's: amounts keep their value (100.00 EUR becomes 100.00 USD), nothing is converted,
    and they keep the decimals they were recorded with, even in a currency that usually has
    fewer (#87).

Full changelog: v1.0.0...v1.1.0

MTT Tournament Director 1.0.0

Choose a tag to compare

@github-actions github-actions released this 24 Sep 06:16

The first public release of MTT Tournament Director: a free, open-source director for live poker tournaments on macOS, Windows and Linux, and in the browser at https://maynetee.github.io/MTT/.

Downloads

  • macOS (Apple silicon and Intel): .dmg (universal)
  • Windows (x64): -setup.exe installer or .msi
  • Linux (x64): .AppImage, .deb or .rpm

These builds are not code-signed yet. The README explains how to open them the first time: Download and install.

The first public release. The prototype imported at the start of the project becomes a
tournament director for live events: every rule now lives in one Rust core shared by the desktop
app and the browser demo, money and payouts are handled end to end, and the app speaks English
and French.

Added

  • Money tracking, off by default: a currency, a buy-in split into prize and fee, a guarantee, the
    prize pool, fees and overlay. Every entry records the price it paid, so editing the buy-in
    never rewrites history (#53).
  • Re-entries, rebuys and add-ons, each with its price, chips, limit per player and window,
    recorded from the players screen (#54).
  • Payouts: places paid as a share of the entries or a fixed number, a curve with an adjustable
    first-place share, custom percentages or custom amounts, rounding, a minimum cash, locking,
    and prizes shared by tied players. The ranking exports gain a prize column (#55).
  • ICM and chip-chop deal calculator once 20 players or fewer are left, with an optional amount
    left to play for, and recording the agreed deal (#56).
  • French translation, with French poker vocabulary, typography and number, money and time
    formats. The language follows the system or the choice made in Preferences, and every open
    window switches at once (#52).
  • Level sounds generated by the app for a new level, the start and the end of a break, and a
    one-minute warning, with sound, volume and the window that plays in Preferences (#45).
  • Keyboard shortcuts for the clock, undo and redo, the tabs, the display window and full screen,
    and an overlay that lists them with the keys of the platform (#44).
  • Several tournaments: duplicate one without its players, the most recently changed first,
    and a search field and status filter past eight tournaments (#43).
  • A one-click sample tournament in progress, with 36 fictional players, for trying every
    screen (#50).
  • Structure presets (Turbo, Regular, Deepstack) generated from the starting stack, with big
    blind antes, breaks and color-ups, and a preview of the duration and the average stack in
    big blinds (#49).
  • A dealer button per table with the next blinds, and a Moves tab that guides the floor through
    the final table, table breaks and balancing moves, then lists the moves to announce in large
    type, to copy or print (#47).
  • Players eliminated in the same hand, ranked by their starting stacks or tied (#48).
  • Undo and redo of every action, labelled with what they undo or redo.
  • Confirmation before destructive actions, errors shown as translated notifications, and an
    Undo offered right after an elimination (#42).
  • Light and dark themes drawn from the new app icon (#33, #41).
  • Late registration until the end of a play level (optionally through the following break),
    for a set playing time, or until closed by hand, with overtime and warnings when the
    structure runs out.
  • Import of the tournament left by the previous version of the app, read-only (#32).
  • The browser demo, built for GitHub Pages, with a notice that its tournaments stay in the
    browser (#40).
  • Desktop installers for macOS (universal), Windows and Linux, built from a version tag into a
    draft release (#39).
  • Continuous integration for the front end and the Rust workspace (#24), front-end unit tests
    with Vitest (#25), and end-to-end tests of the browser demo with Playwright and of the desktop
    app through WebDriver (#51).
  • An MIT license (#37), an English README with screenshots and a demo (#38, #58), an
    architecture guide (#57), a contributing guide, issue and pull request templates, and this
    changelog.

Changed

  • Every tournament rule moved into mtt-core, a pure and deterministic Rust crate: each
    command records one event, and the state is rebuilt by replaying them, which gives undo and
    redo (#27).
  • The clock is stored as the time its level ends instead of being written every second, so it
    never drifts, survives a restart and never blocks undo (#28).
  • The desktop app stores each tournament as an event log in SQLite and runs the core behind
    Tauri commands (#2, #5, #6).
  • The browser demo runs the same core compiled to WebAssembly instead of its own TypeScript
    rules, which are removed (#4, #29).
  • Migrated to Tauri 2 (#30).
  • Renamed to MTT Tournament Director, with the bundle identifier com.maynetee.mtt and the
    version read from package.json (#32).
  • The TV display is rebuilt for a screen across the room: a 16:9 stage around the time left,
    the prize pool and a payout ladder, and a look of its own for pause, break, last level,
    overtime and the winner. The scrolling ranking is gone (#46).
  • New interface: an app shell with a live clock in the header, tabs grouped by use, and
    screens rebuilt on shared components (#41).
  • The Inter font, which the stylesheet asked for but nothing loaded, is bundled with the app
    (#34).
  • The PDF export loads on demand, taking the main bundle from 646 kB to 226 kB (#35).
  • Front-end tooling upgraded to Vite 8, React Router 7 and Node 24, with the type check part of
    the build (#23, #25); the Rust toolchain is pinned; stale files removed (#26).

Fixed

  • The ranking listed eliminated players first while the tournament was running, on screen and
    in the CSV and PDF exports (#1).
  • Saving the structure failed in the browser demo and in the desktop app (#2).
  • Cmd/Ctrl+Z in a text field undid the last tournament action (#3).
  • The browser demo's clock ran twice as fast with the display window open (#4).
  • Undo could not go back past an automatic level change while the clock was running (#5).
  • The clock thread raced with commands and drifted (#6).
  • Pausing the clock showed BREAK on the display and hid the blinds (#7).
  • The display announced the bubble one elimination late (#8).
  • A player could be seated at a closed table (#9).
  • The PDF export crashed on names outside WinAnsi, such as "Łukasz" (#10).
  • The level label lost focus on every keystroke in the setup screen (#11).
  • Seats left counted eliminated players and closed tables (#12).
  • The default seat to revive a player at was an occupied seat (#13).
  • A finished tournament went back to running and the winner kept an Eliminate button (#14).
  • Level numbers on the clock and the display counted breaks (#15).
  • The late registration level was 0-based and counted breaks (#16).
  • Choosing a seat bypassed the close of late registration (#17).
  • The structure ended at 800/1600 with the clock stuck at 00:00: the last level now continues in
    overtime, and the app warns before the structure runs out (#18).
  • Balancing moved the player in seat 1 instead of the player due for the big blind (#19).
  • Breaking a table did not balance the remaining tables (#20).
  • The blind structure was not validated (#21).
  • The fullscreen display window had no way out: moving the mouse shows an exit button, Esc
    closes it, and opening it again brings the open window to the front (#22).
  • Export file names could be invalid on Windows or macOS, and browser downloads could be
    cancelled.

Security

  • Each desktop window gets only the permissions it uses: the display window can read a
    tournament but change nothing, and every command needs an explicit permission (#31).
  • A Content Security Policy in the desktop app and the browser demo: scripts, fonts and
    connections only from the app itself (#31).
  • The web view has no file system access: exports go through a native save dialog, and only
    CSV and PDF files are written (#30).
  • CSV fields are escaped, and fields that would start a spreadsheet formula are neutralized.
  • The import from the previous version opens its database read-only (#32).
  • Release builds ignore MTT_DATA_DIR and MTT_LEGACY_DB, which exist for development and
    tests.
  • Every npm audit finding fixed, the test-only dependencies included (#36).