Infinite Sudoku – endless, uniquely solvable puzzles generated on-device with Flutter.
  • Dart 72.3%
  • C++ 13.7%
  • CMake 10.7%
  • Swift 1.3%
  • HTML 0.9%
  • Other 1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-11-04 09:00:37 +01:00
android Add release signing, launch screens and installation guide 2026-11-03 23:42:46 +01:00
assets Build Infinite Sudoku Flutter app 2026-11-03 23:14:16 +01:00
deploy Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
ios Add release signing, launch screens and installation guide 2026-11-03 23:42:46 +01:00
lib Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
linux Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
macos Add macOS support and prepare 1.1.0 release 2026-11-04 08:39:03 +01:00
test Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
web Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
windows Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
.dockerignore Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
.gitignore Add release signing, launch screens and installation guide 2026-11-03 23:42:46 +01:00
.metadata Build Infinite Sudoku Flutter app 2026-11-03 23:14:16 +01:00
analysis_options.yaml Build Infinite Sudoku Flutter app 2026-11-03 23:14:16 +01:00
INSTALL.md Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
pubspec.lock Build Infinite Sudoku Flutter app 2026-11-03 23:14:16 +01:00
pubspec.yaml Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
README.md Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00
WEB_HOSTING.md Add keyboard controls, desktop ports and web hosting 2026-11-04 09:00:37 +01:00

Infinite Sudoku

A polished, fully playable Sudoku app for iOS, Android, macOS, Windows, Linux, and the web built with Flutter. Every puzzle is generated on-device from a fresh random seed and verified to have exactly one solution — so the supply of puzzles is effectively endless.

Infinite Sudoku icon

Download & install

Get the latest build from the Releases page.

  • Android 7.0+ — download InfiniteSudoku-1.2.0-android.apk, allow installation from unknown sources, and open it. The APK is a universal, release-signed build.
  • Android / Google Play — use the .aab with Play Console.
  • iOS 15+ — download the unsigned .ipa and sign it with Sideloadly/AltStore, or build from source with Xcode.
  • macOS 12+ — download the universal DMG, drag Infinite Sudoku into Applications, and use Open Anyway in Privacy & Security on first launch.
  • Web — download InfiniteSudoku-1.2.0-web.zip or build from source, then serve the static files. See WEB_HOSTING.md.
  • Windows / Linux — build from source with the native toolchain. See INSTALL.md.

See INSTALL.md for step-by-step Android, iOS, macOS, Windows, Linux, web, ADB, Xcode, Gatekeeper, checksum and release-signing instructions.

Features

  • Infinite puzzles — randomized grid generation plus clue removal with a uniqueness check. No puzzle library, no network required.
  • Five difficulties — Easy, Medium, Hard, Expert and Evil, each with its own clue-count target.
  • Complete gameplay — pencil notes, undo/redo, erase, hints, mistake counting, duplicate highlighting, matching-number highlighting and row/column/box highlighting.
  • Keyboard controls — digits, arrow-key selection, Backspace, notes, hint, pause, undo and redo on desktop and web.
  • Timer and pause — pause hides the board; the timer stops while paused or when the app goes into the background.
  • Resume anywhere — the current game, notes and elapsed time are saved automatically and can be continued from the home screen.
  • Statistics — games started, puzzles solved and best time per difficulty.
  • Light and dark themes — follows the system by default, with manual overrides in Settings.
  • Responsive layout — phone portrait, phone landscape, tablet, desktop and browser window layouts.
  • Haptics and accessibility — subtle feedback plus semantic labels on every board cell and number key.

Getting started

Requirements: Flutter 3.47+ (Dart 3.13+), Xcode 27+ for iOS and macOS builds, JDK 17 and Android SDK 36 for Android builds, Visual Studio 2022 for Windows, and GTK 3 development packages for Linux.

flutter pub get
flutter run

Build

# Android APK (universal, installable)
flutter build apk --release

# Android app bundle for Play Store
flutter build appbundle --release

# iOS IPA (requires macOS + Xcode + an Apple signing identity)
flutter build ipa --release

# macOS app (ad-hoc signed without a Developer ID)
flutter build macos --release

# Windows (run on Windows)
flutter build windows --release

# Linux (run on Linux)
flutter build linux --release

# Web static build
flutter build web --release

Android release signing is read from android/key.properties (ignored by Git). If that file is absent, the project falls back to debug signing so local release builds still work. See INSTALL.md for details.

Test and analyze

flutter analyze
flutter test

Keyboard shortcuts

Key Action
1–9 / numpad Enter a digit
Arrow keys Move selection
Backspace / Delete Erase
N Toggle notes
H Hint
P Pause / resume
Ctrl+Z / Cmd+Z Undo
Ctrl+Shift+Z / Cmd+Shift+Z Redo
Ctrl+Y Redo (Windows/Linux)

Keyboard shortcuts work on macOS, Windows, Linux, and web.

How puzzle generation works

  1. A completed 9×9 grid is filled with randomized backtracking.
  2. Cells are removed in random order.
  3. After each removal a bitmask-based solution counter checks that the puzzle still has exactly one solution. If not, the clue is put back.
  4. Generation runs in a background isolate so the UI stays responsive.

Because both the solved grid and the removal order are random, each new game is a different puzzle. The generator is deterministic for a given seed, which is shown in-game as the puzzle ID.

Project structure

lib/
  core/
    difficulty.dart        difficulty presets and clue targets
    sudoku_solver.dart     bitmask solver, solution counter, validation
    sudoku_puzzle.dart     immutable puzzle model + generator
  models/
    game_controller.dart   game state, moves, notes, hints, undo/redo
    game_stats.dart        per-difficulty statistics
    app_settings.dart      persisted user preferences
  services/
    puzzle_service.dart    background-isolate generation
    storage_service.dart   SharedPreferences persistence
  screens/
    home_screen.dart       menu, continue card, difficulty picker, stats
    game_screen.dart       board, timer, controls, win flow
  widgets/
    sudoku_board.dart      responsive 9×9 board with notes rendering
    game_controls.dart     number pad, actions, status pills
    game_keyboard_shortcuts.dart desktop/web keyboard controls
    settings_sheet.dart    theme and gameplay settings
    win_dialog.dart        completion summary
    loading_overlay.dart   generation/pause overlay
  theme/
    app_theme.dart         Material 3 light/dark themes
  utils/
    format.dart            time formatting helpers
test/
  sudoku_solver_test.dart  solver + generator uniqueness tests
  game_controller_test.dart game logic, undo, serialization tests
  game_screen_test.dart    gameplay, layout and keyboard tests
  widget_test.dart         home screen and settings smoke tests
deploy/
  Dockerfile              Flutter web build + Nginx image
  nginx.conf              SPA/cache/MIME config
  Caddyfile               automatic-HTTPS example
WEB_HOSTING.md            self-hosting guide

Release

License

Private project. All rights reserved unless stated otherwise.