Okay, yes, the project will be back online on September 24th, 2026 – that’s tomorrow. In short, the first version will be released. We will be changing the release system. You probably won’t read this message.
The release system will change drastically, as will the application’s interface and functionality. Much code will be deleted, minimum system requirements will be reduced, and the graphical interface will be greatly improved.
Kali Linux Terminal for Android
A real, open-source Kali Linux terminal emulator for Android. Runs the full Kali Linux environment via proot — no root required. Supports apt, sudo, and every terminal command in the world.
| Developer | Asotn |
| GitHub | https://github.com/Asotn |
| Source | https://github.com/Asotn/VoidTerm-source |
| Version | 26.2 |
| s.pi@outlook.sa | |
| License | GPL-3.0 |
| F-Droid | Ready |
| Min SDK | Android 8.0 (API 26) |
| Architectures | arm64-v8a, armeabi-v7a, x86_64, x86 |
VoidTerm is not a fake terminal. It is a real application with:
./files -0 & permission and it immediately opens the storage permission dialog _ __ _ _ ____ _ _
| |/ /__ _| (_) _ \ _ __ ___ (_) __| |
| ' // _` | | | | | | '__/ _ \| |/ _` |
| . \ (_| | | | |_| | | | (_) | | (_| |
|_|\_\__,_|_|_|____/|_| \___/|_|\__,_|
Kali Linux Terminal for Android
Developer : github.com/Asotn | s.pi@outlook.sa
Version : 26.2 | License: GPL-3.0
Type voidterm-help for usage, or start with apt install
# Clone the repository
git clone https://github.com/Asotn/VoidTerm-source
cd VoidTerm
# Build debug APK
./gradlew assembleDebug
# Build release APK (unsigned)
./gradlew assembleRelease
# The APK is at:
# app/build/outputs/apk/debug/app-debug.apk
# app/build/outputs/apk/release/app-release-unsigned.apk
# Generate keystore (one time)
keytool -genkey -v -keystore voidterm.jks \
-alias voidterm -keyalg RSA -keysize 2048 -validity 10000
# Sign the APK
apksigner sign \
--ks voidterm.jks \
--ks-key-alias voidterm \
--out voidterm-release.apk \
app/build/outputs/apk/release/app-release-unsigned.apk
VoidTerm/
├── app/
│ ├── build.gradle # App build config (NDK, dependencies)
│ ├── proguard-rules.pro
│ └── src/main/
│ ├── AndroidManifest.xml # Permissions, activities, services
│ ├── assets/
│ │ ├── bin/ # proot + busybox binaries (add before build)
│ │ └── scripts/
│ │ └── bootstrap.sh # First-run Kali environment setup
│ ├── cpp/ # C/C++ native engine
│ │ ├── CMakeLists.txt
│ │ ├── terminal/
│ │ │ ├── pty_manager.c/h # PTY creation, fork/exec, I/O
│ │ │ ├── escape_parser.c/h # ANSI/VT100 escape code parser
│ │ │ ├── vt100.c/h # VT100 screen buffer emulator
│ │ │ ├── io_buffer.c/h # Lock-free ring buffer
│ │ │ └── process_runner.c/h # Shell process execution
│ │ ├── shell/
│ │ │ ├── command_tokenizer.c/h # Shell command tokenizer
│ │ │ ├── history_manager.c/h # Command history (persistent)
│ │ │ ├── alias_engine.c/h # Alias expansion
│ │ │ └── env_manager.c/h # Environment variable store
│ │ ├── package/
│ │ │ ├── apt_wrapper.c/h # apt-get wrapper with progress parsing
│ │ │ ├── dpkg_helper.c/h # dpkg database queries
│ │ │ └── repo_manager.c/h # APT repository management
│ │ ├── crypto/
│ │ │ ├── sha256.c/h # SHA-256 (package verification)
│ │ │ ├── md5.c/h # MD5 (legacy apt checksums)
│ │ │ └── pgp_verify.c/h # PGP signature verification
│ │ ├── net/
│ │ │ ├── http_client.c/h # HTTP download with progress
│ │ │ └── progress_tracker.c/h # Multi-file download tracking
│ │ ├── fs/
│ │ │ ├── fs_utils.c/h # File/directory operations
│ │ │ ├── path_resolver.c/h # Guest/host path translation
│ │ │ └── permission_helper.c/h # Filesystem permission checks
│ │ └── jni/
│ │ ├── jni_bridge.cpp # Main JNI bridge (PTY)
│ │ ├── terminal_jni.cpp # VT100, history, alias JNI
│ │ ├── package_jni.cpp # APT, dpkg, repo JNI
│ │ └── fs_jni.cpp # FS, path, crypto JNI
│ ├── java/com/asotn/voidterm/
│ │ ├── VoidTermApp.java # Application class, notification channels
│ │ ├── engine/
│ │ │ ├── NativeTerminal.java # JNI wrapper for C terminal engine
│ │ │ └── PackageEngine.java # APT/dpkg Java interface
│ │ ├── terminal/
│ │ │ ├── TerminalSession.java # Shell session lifecycle + I/O threads
│ │ │ └── CommandProcessor.java # Built-in command interception
│ │ ├── service/
│ │ │ ├── PackageService.java # Foreground service for downloads
│ │ │ ├── BootstrapService.java # First-run rootfs download + setup
│ │ │ └── BootReceiver.java # Boot broadcast receiver
│ │ ├── ui/
│ │ │ ├── TerminalActivity.java # Main terminal screen
│ │ │ ├── SettingsActivity.java # Settings screen
│ │ │ ├── AboutActivity.java # About screen
│ │ │ └── PackageInstallActivity.java
│ │ └── utils/
│ │ ├── AppPreferences.java # SharedPreferences wrapper
│ │ ├── EnvironmentManager.java # Path constants, env builder
│ │ └── NativeFs.java # JNI wrapper for fs/crypto
│ └── res/
│ ├── layout/ # Pure black XML layouts
│ ├── values/ # Strings, colors, themes, arrays
│ ├── drawable/ # Vector icons (terminal prompt style)
│ ├── menu/ # Options menu (Ctrl-C, clear, etc.)
│ └── xml/ # Preferences, file_paths, backup rules
├── metadata/ # F-Droid metadata
├── fastlane/ # Store metadata
├── .github/workflows/build.yml # GitHub Actions CI
├── build.gradle # Root build config
├── settings.gradle
├── gradle.properties
├── gradlew / gradlew.bat
├── LICENSE # GPL-3.0
├── CHANGELOG.md
└── README.md
Before building, place pre-compiled static binaries for the target architecture in:
app/src/main/assets/bin/proot
app/src/main/assets/bin/busybox
You can obtain them from:
These are not included in the repository due to binary file policies. The bootstrap process extracts them on first run.
| Command | Description |
|---|---|
apt update |
Update package lists from Kali repos |
apt install <pkg> |
Install a Kali Linux package |
apt remove <pkg> |
Remove a package |
apt search <term> |
Search for packages |
apt upgrade |
Upgrade installed packages |
sudo <cmd> |
Run as root (already root in proot) |
./files -0 & permission |
Grant file access permission |
clear |
Clear the terminal screen |
voidterm-help |
Show built-in help |
voidterm-about |
Show developer info |
exit |
Close the terminal |
All standard Unix/Linux commands are supported. This is a real bash shell.
VoidTerm shows download progress in the status bar even when the app is minimized:
Notification permission is requested on first launch.
VoidTerm is built to be fully F-Droid compatible:
metadata/ directoryPull requests are welcome. Please follow the existing code style and include tests where applicable.
Issues: https://github.com/Asotn/VoidTerm-source/issues
VoidTerm - Kali Linux Terminal for Android
Copyright (C) 2024 Asotn <s.pi@outlook.sa>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
See LICENSE for the full text.