- Dart 72.3%
- C++ 13.7%
- CMake 10.7%
- Swift 1.3%
- HTML 0.9%
- Other 1%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| android | ||
| assets | ||
| deploy | ||
| ios | ||
| lib | ||
| linux | ||
| macos | ||
| test | ||
| web | ||
| windows | ||
| .dockerignore | ||
| .gitignore | ||
| .metadata | ||
| analysis_options.yaml | ||
| INSTALL.md | ||
| pubspec.lock | ||
| pubspec.yaml | ||
| README.md | ||
| WEB_HOSTING.md | ||
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.
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
.aabwith Play Console. - iOS 15+ — download the unsigned
.ipaand 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.zipor 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
- A completed 9×9 grid is filled with randomized backtracking.
- Cells are removed in random order.
- After each removal a bitmask-based solution counter checks that the puzzle still has exactly one solution. If not, the clue is put back.
- 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
- Latest release: https://git.emilyh.de/Emily/InfiniteSudoku/releases/latest
- Installation guide: INSTALL.md
- Version:
1.2.0+3 - Web self-hosting: WEB_HOSTING.md
License
Private project. All rights reserved unless stated otherwise.