• v2.11.5 5509d1163d

    Emily released this 2026-11-07 03:37:54 +01:00 | 12 commits to main since this release

    Universal Gaming 2.11.5

    Bug-fix release.

    Sudoku

    • A saved game per difficulty. An Easy game and an Expert game can now be
      paused independently; the difficulty screen shows a Continue card for each
      saved slot. Existing single-slot saves are migrated automatically, and backups
      keep the slots apart (sudoku-easy, sudoku-expert, ...).

    Solitaire

    • New deals are checked for solvability. Klondike, Classic Solitaire and
      FreeCell deals are verified with a bounded solver while they are generated; a
      deal that cannot be proven winnable within the budget is thrown away and
      replaced, so a new game can actually be finished.
    • Drawing stacks show how many cards are left — the stock and the waste carry
      a permanent counter, so Klondike and Spider no longer leave you guessing.

    Chess

    • Move history as a drop-down list with one move per line: move number,
      figure, from → to squares, the captured figure, and +/# markers.
    • Fallen figures are listed under the history, split by side.
    • White figures reuse the filled glyph set and are painted white with a dark
      outline, so both sides share one consistent shape.
    • Chess sessions are saved after every move, so a crash or a kill never loses
      a running game.
    • Pending online challenges show up in the news sheet in the main menu, with
      Accept and Decline, instead of waiting for you to open the chess lobby.

    Checks

    • flutter analyze: clean
    • flutter test --concurrency=1: 279 tests pass

    Downloads

    Platform File
    Android UniversalGaming-2.11.5-android.apk
    Android (Play) UniversalGaming-2.11.5-android.aab
    iOS (unsigned) UniversalGaming-2.11.5-ios-unsigned.ipa
    macOS UniversalGaming-2.11.5-macos.dmg
    Linux x86_64 UniversalGaming-2.11.5-linux-x86_64.AppImage
    Web UniversalGaming-2.11.5-web.zip

    SHA256SUMS-2.11.5.txt lists the checksums of every asset.

    Downloads
  • v2.11.4 47fe8e0061

    Emily released this 2026-11-07 01:56:03 +01:00 | 15 commits to main since this release

    Universal Gaming 2.11.4

    Main menu

    • Game cards show a green Continue badge when that game has an unfinished game, including saved Sudoku and Killer Sudoku boards. The badge appears as soon as you leave a game.

    Keyboard

    • Escape now closes the open sheet, dialog or popup menu, and otherwise goes back one screen: a game returns to the main menu, and Sudoku returns to difficulty selection.

    Solitaire

    • Selecting a card is instant. The card widget resolved taps through a double-tap recogniser, so every single tap waited 300 ms for the double-tap timeout before the selection showed. Taps are now timed by hand, so the highlight lands on the next frame and double-tap auto-move still works.
    • Fanned columns now show the suit next to the rank in the corner, so a covered card still shows its colour. Previously the suit sat under the rank and disappeared behind the card below.

    Linux

    • First AppImage release: UniversalGaming-2.11.4-linux-x86_64.AppImage is a single self-contained file, no install step and no root. Run it with chmod +x and launch; use --appimage-extract-and-run if FUSE 2 is unavailable. Built on Arch Linux (needs glibc 2.39 or newer).
    • tools/package_appimage.sh reproduces the AppImage from a flutter build linux --release.

    Windows

    • No prebuilt Windows binary in this release: Flutter can only produce Windows executables on a Windows host. The Windows runner is configured and builds from source with flutter build windows --release (see INSTALL.md).

    Compatibility

    • Works with Universal Gaming Backend 1.4.0 or newer (1.5.0 for save backups).
    • Version 2.11.4+23.
    • 269 app tests pass; flutter analyze is clean.
    Downloads
  • v2.11.3 0d6d16eb90

    Emily released this 2026-11-07 01:16:26 +01:00 | 16 commits to main since this release

    Universal Gaming 2.11.3

    Mahjong animation

    • Matching a pair no longer makes the board twitch. The tiles are now keyed by their board position, so removing a pair can't push the remaining tiles into each other's widgets and animate their borders and shadows between unrelated tiles.
    • A matched pair now fades and shrinks away over 190 ms, so a match reads as a deliberate removal instead of two tiles snapping out of existence.

    Mahjong solvability

    • Every new Mahjong deal is now verified before you see it: the generator replays its own removal order against the freshly dealt board, and if the board would not clear it deals again (falling back to the deterministic order if needed).
    • So a fresh puzzle always has a solution — hint and undo can't strand you in an unwinnable board.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0 or newer (1.5.0 for save backups).
    • Version 2.11.3+22.
    • 265 app tests pass; flutter analyze is clean.
    Downloads
  • v2.11.2 d7edeec6df

    Emily released this 2026-11-06 23:25:48 +01:00 | 17 commits to main since this release

    Universal Gaming 2.11.2

    Minesweeper

    • The Expert board is now the classic 30 wide × 16 tall field. It used to be stored as 30 rows by 16 columns, which drew a tall, narrow board.
    • The field rotates to match the screen: 30 columns across in landscape, 16 across in portrait, so no sideways scrolling is needed either way.
    • The subtitle describes the grid exactly as it is drawn (for example 16×30 in landscape).

    Chess

    • Four computer strengths: Easy, Medium, Hard and Expert. Pick one with the brain button in the header; Easy is deliberately beatable, Expert searches four plies deep.
    • The current strength is shown in the subtitle and saved with your session, so a resumed game keeps the same opponent.

    Chess layout

    • On wide screens the move history now sits beside the board as a scrollable panel, with a button to open the full-size list. Narrow phones keep the sheet.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0 or newer (1.5.0 for save backups).
    • Version 2.11.2+21.
    • 262 app tests pass; flutter analyze is clean.
    Downloads
  • v2.11.1 b51d41bbfb

    Emily released this 2026-11-06 22:42:32 +01:00 | 18 commits to main since this release

    Universal Gaming 2.11.1

    A bug-fix release focused on keeping your progress and on the solitaire games.

    Games now resume where you left off

    • Minesweeper, Mahjong, Klondike, Classic Solitaire, Spider, FreeCell, Pyramid, TriPeaks and offline Chess save unfinished games automatically when you leave the screen or background the app.
    • Reopening a game continues the same board, timer and move count.
    • Finished games clear their save, so you always start fresh after a win or loss.
    • Unfinished games are included in account save backups, so restoring a backup on another device restores games in progress, not just Sudoku.

    Solitaire fixes

    • Every Pyramid and TriPeaks deal is now solvable. Deals are constructed from a valid clearing sequence instead of being random.
    • Cards can be dragged onto a pile in Klondike, Spider and FreeCell; tapping still works exactly as before.
    • Tall piles stay on screen: the tableau fan tightens as a column grows instead of running past the bottom.
    • Pyramid pairs still remove both cards, and a playable pair is never reported as game over.

    Mahjong

    • Deals are no longer pre-sorted. The board is built from a random valid removal order, so matching tiles are scattered instead of mirrored row by row. Every deal remains solvable.

    Minesweeper

    • Wide fields (Intermediate, Expert) rotate in portrait so the board fits the screen without sideways scrolling.

    Interface

    • The How to play sheet closes with a downward swipe and a new X button.
    • Main-menu cards show a chip listing each game's subdivisions, such as difficulties, suit counts and chess modes.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0 or newer (1.5.0 for save backups).
    • Version 2.11.1+20.
    • 258 app tests pass; flutter analyze is clean.
    Downloads
  • v2.11.0 0569e7464b

    Emily released this 2026-11-05 15:21:35 +01:00 | 19 commits to main since this release

    Universal Gaming 2.11.0

    Pyramid pair fix

    • Pairing two pyramid cards that add up to 13 (for example a Queen and an Ace) now removes both cards. Previously only the card you tapped last left the pyramid, so the first card stayed behind and the board looked half-cleared.
    • Undo restores both cards of such a pair in one step.
    • The game no longer reports Game over while two exposed pyramid cards can still be paired with an empty stock.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0 or newer (1.5.0 for save backups).
    • Version 2.11.0+19.
    • 248 app tests pass; flutter analyze is clean.
    Downloads
  • v2.10.0 5bf5bd3e95

    Emily released this 2026-11-05 10:13:56 +01:00 | 20 commits to main since this release

    Universal Gaming 2.10.0

    Save backups on your account server

    • Saved Sudoku and Killer Sudoku games can now be stored on your account server and restored on another device.
    • Open Account → Save backups and use Back up now or Restore (restoring asks for confirmation because it replaces the saved games on the device).
    • New saves are uploaded automatically a few seconds after a game is saved, as long as the server is reachable.
    • Saves are always written locally first, so a failed or offline backup never loses progress.
    • The server stores each save as an opaque JSON document per game (max 32 kB); unknown game ids from newer builds are ignored.
    • Servers without the feature show This server does not support save backups and the app keeps using local saves.
    • Disable it server-side with SAVE_BACKUP_ENABLED=false.

    Minesweeper flag button

    • The bottom bar now has a Flag mode toggle, so flags no longer require a long press or right-click.
    • In flag mode taps place and remove flags; tap the button again to return to revealing. Long press and right-click keep working.
    • The in-app help sheet documents the new control.

    Chess board grid

    • Fixed the chess board rendering without its checkerboard: the square colour collapsed to zero size, so only pieces, highlights and coordinates were drawn.
    • The light/dark squares, selection highlight and check highlight now fill their cells.

    Compatibility

    • Requires Universal Gaming Backend 1.5.0 for save backups; everything else works with 1.4.0.
    • Version 2.10.0+18.
    • 245 app tests pass; flutter analyze is clean.
    Downloads
  • v2.9.0 66d0269856

    Emily released this 2026-11-04 23:02:59 +01:00 | 22 commits to main since this release

    Universal Gaming 2.9.0

    Discord Rich Presence

    • Desktop builds (macOS, Windows and Linux) can now show the game you are playing on Discord.
    • Presence includes the current game, difficulty or mode, a move count/progress line and a live elapsed play-time counter.
    • Paused games show Paused and the frozen play time.
    • Updates are throttled and connection failures are silent, so Discord never affects gameplay.
    • Toggle it under Settings → Integrations → Discord Rich Presence.
    • Discord is only contacted when a game is open. Web, Android and iOS builds compile without the desktop IPC dependency.

    Enabling it

    Rich Presence needs a Discord application ID at build time:

    flutter build macos --release --dart-define=DISCORD_CLIENT_ID=your-application-id
    

    Create an application in the Discord Developer Portal and use its Application ID. The Discord application name is shown as the activity title. If no ID is supplied, the feature stays disabled and the setting explains how to enable it.

    macOS note

    This build disables the macOS App Sandbox so the app can connect to Discord's local IPC socket. It is not intended for the Mac App Store.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0.
    • Version 2.9.0+17.
    • 233 app tests pass; flutter analyze is clean.
    Downloads
  • v2.8.1 708638a408

    Emily released this 2026-11-04 22:34:03 +01:00 | 23 commits to main since this release

    Universal Gaming 2.8.1

    E-mail verification status

    • The E-mail status label in Account settings now refreshes automatically when the screen opens.
    • It also refreshes when the app resumes, for example after confirming the address in a browser.
    • A verified address now changes from Not confirmed to Verified without tapping Refresh.
    • The manual Refresh button still works.

    Compatibility

    • Works with Universal Gaming Backend 1.4.0.
    • Version 2.8.1+16.
    Downloads
  • v2.8.0 dd97420187

    Emily released this 2026-11-04 21:55:36 +01:00 | 24 commits to main since this release

    Universal Gaming 2.8.0

    Landscape and playfields

    • Fixed landscape sizing and positioning across all games.
    • Short landscape windows now use compact headers and hide redundant bottom bars, so the playfield gets the space.
    • Raised the maximum board, card and tile sizes on tablets, desktops and large windows.
    • Chess and Sudoku boards are noticeably larger on wide screens.

    Input

    • Text input dialogs (rename, e-mail, delete account) confirm with Enter.
    • The account server URL field also saves with Enter.

    Accounts

    • Added Forgot password? for accounts with an assigned and confirmed e-mail.
    • Reset links are one-time, expire after 30 minutes and sign out all existing sessions.
    • Deep links to https://games.emilyh.de/account?reset=… open the reset form in the app.

    E-mail

    • Fixed tls_validate_record_header:wrong version number when SMTP_SECURE=true was used on a STARTTLS port.
    • SMTP TLS mode is now inferred from the port; 465 uses implicit TLS, 25/587/2525 use STARTTLS.
    • SMTP_SECURE and SMTP_REQUIRE_TLS can still be set explicitly.

    Backend compatibility

    • Works with Universal Gaming Backend 1.4.0.
    • Version 2.8.0+15.
    Downloads