A modernized Android port of NetHack 3.6.7, built for touchscreens and physical gamepads. This is a personal, in-development project meant to scratch a personal itch, so expect rough edges.
Releases (APK downloads) are posted on the GitHub releases page.
Requires Android 13 or later.
This port is built around a few firm ideas:
- Touch and gamepad first. A physical keyboard or mouse should never be required for gameplay. Navigation, commands, and menus all work through touch gestures or a physical gamepad. The soft keyboard only appears for text entry.
- Native Android experience. This port tries to create a gaming experience that feels natural and not like a soft keyboard bolted onto a terminal-native game. In this way it borrows a lot from my work on NetHackDS.
- Radical configurability. NetHack is a deep game. The interface must accommodate diverse playstyles rather than enforcing a single correct way to play.
- Always fullscreen and immersive. It's a game. There's no good reason to give up screen real estate.
Like the original project this is based on, this port supports tapping to control as well as a widget overlay system allowing for deep customization:
portrait-touch-mode.mp4
Orientation-specific layouts allow for unique portrait and landscape layouts.
landscape-touch-mode.mp4
In truth the reason this port exists is because I wanted something I could play on my Ayn Thor, so this port includes first-class support for dual-screen devices and gamepads:
dual-screen-gamepad.mp4
The overlay system is designed to allow the user to relocate nearly any on-screen element, allowing for deep customization:
overlay-editor.mp4
The port follows a thick native, thin wrapper model:
- The vanilla NetHack 3.6.7 engine compiles to a native shared library (
libnethack.so) via the Android NDK. The core game logic is untouched. - A thin JNI bridge (
sys/android/winandroid.c) connects the engine to the Java UI layer by implementing NetHack's standardwindow_procsinterface. - The UI is implemented by ForkFront-DS, a dedicated Android
library that lives in
sys/android/forkfront/as a Git submodule. It handles rendering, input, menus, dialogs, and settings.
For a deeper dive, see the docs in DEVEL/:
- Port Overview — strategy and directory structure
- Architecture — data flow and component layers
- Build Guide — full prerequisites and troubleshooting
Requirements: JDK 17, Android SDK 34, NDK 21.4.7075529.
cd sys/android
./gradlew assembleDebugThe resulting APK is at sys/android/app/build/outputs/apk/debug/app-debug.apk.
See DEVEL/android-port-build.md for full setup instructions.
This project is a hard fork of NetHack-Android by gurrhack, which provided the original native bridge and build system for NetHack 3.6.7 on Android. The UI library, ForkFront, is similarly a hard fork of gurrhack's ForkFront-Android. Both forks diverge substantially in architecture and design philosophy, and while it could not exist without all that previous hard work, I've opted to deviate pretty substantially without a focus on contributing back to the original (now fairly quiet) project.
NetHack itself is the work of the NetHack Dev Team and a long line of
contributors stretching back to 1987. See README.NetHack for the original
upstream README.
See CONTRIBUTING.md. The ForkFront submodule has its own CONTRIBUTING.md with the same conventions.