NOTE: If you're having issues with installing or updating packages - see github.com/termux/termux-packages/wiki/Package-Management
NOTE: Updates over Google Play is currently halted due to technical reasons. In the meantime, see github.com/termux/termux-app#installation for alternative installation sources.
Termux combines powerful terminal emulation with an extensive Linux package collection.
• Enjoy the bash and zsh shells.
• Manage files with nnn and edit them with nano, vim or emacs.
• Access servers over ssh.
• Develop in C with clang, make and gdb.
• Use the python console as a pocket calculator.
• Check out projects with git.
• Run text-based games with frotz.
At first start a small base system is downloaded - desired packages can then be installed using the apt package manager. Access the built-in help by long-pressing anywhere on the terminal and selecting the Help menu option to learn more.
Want to read the wiki?
Want to ask questions, report bugs or give feedback?
Want to join the Termux IRC chat?
#termux on freenode
- Allow users to directly open URL links in terminal transcript when clicked or tapped. The user can add
termux.propertiesfile to enable opening of URL links in terminal transcript when clicked or tapped. The default value is
termux-reload-settingscommand will also update the behaviour instantaneously if changed. Implemented by @trygveaa in #2146. (
- Allow users to disable auto capitalization of extra keys text. The user can add
termux.propertiesfile to disable auto capitalization of extra keys text for both normal and popup buttons. The default value is
termux-reload-settingscommand will also update the behaviour instantaneously if changed. (
- Allow users to adjust terminal horizontal and vertical margin. The
terminal-margin-horizontalkey can be used to adjust the terminal left/right margin and the
terminal-margin-verticalcan be used to adjust the terminal top/bottom margin. This will also affect drawer. The user can set an integer value between
dpunits. The default value is still
3for horizontal and
0for vertical margin. So adding an entry like
termux.propertiesfile will allow users to set a horizontal margin of
10dp. After updating the value, either restart termux or run
termux-reload-settingsfor changes to take effect.
This was added since for some users text on edges would not be shown on the screen or they had screen protectors/cases that covered screen edges (Of course, that would require fixing every single app and android system UI itself, so kinda stupid to use). Moreover, horizontal margin of like
10dpmay be helpful with peek-and-slide for people having gesture navigation enabled on android
10+since they won't be to touch at exactly the edge of the screen to trigger peek (#1325).
- Allow users to disable hardware keyboard shortcuts. The user can add
termux.propertiesfile to disable hardware keyboard shortcuts. The default value is
termux-reload-settingscommand will also update the behaviour instantaneously if changed. Note that for
ctrl+alt+pto work, you need to unset
shortcut.rename-session = ctrl + n. wiki.termux.com/wiki/Terminal_Settings. Closes #1825. (
android.permission.PACKAGE_USAGE_STATSpermission. The permission can be granted from
Usage Access. Closes #2269. (
TERMUX_API_VERSIONto termux shell environment. This can be used to check if
Termux:APIis installed and enabled for cases where users try to run
termux-apicommands and it hangs. (
TERMUX_APP_PIDto termux shell environment.
TERMUX_IS_DEBUGGABLE_BUILDenv variable will be set to
1if termux APK is a debuggable APK and
0otherwise. Note that the
dev_keystore.jksshipped with termux app and plugin source code can also be used to create a release APK even though its mainly used for Github Debug Builds, in which case value will be
TERMUX_APK_RELEASEwill be set to
GOOGLE_PLAY_STOREdepending on release type. It will be set to
UNKNOWNif signed with a custom key.
TERMUX_APP_PIDwill be set to the process of the main app process of the termux app package (
com.termux), assuming its running when shell is started, like for
termux-float. This variable is included since
pidof com.termuxdoes not return anything for release builds. It does work for debug builds and over adb/root. However, you still won't be able to get additional process info with
ps, like that of threads, even with the pid and will need to use adb/root. However,
kill $TERMUX_APP_PIDwill work from
These variables can be used by termux devs and users for custom logic in future depending on release type.
- Add support for
- ! Convert
extra-keysto agnosticism by moving them to
termux-sharedlibrary so that they can be imported and used by other apps for their own needs as long as they comply with GPLv3 license. Almost everything is customizable and has no dependency on termux specific logic. (
- Add support for
extra-keys. Closes #1038. (
- Add support for
extra-keysfor pasting text from clipboard. (
- Add support to long hold on
FNto lock those control keys. They will not be released when you press another key and will only be released by pressing the respective control key again. Closes #2049, Closes #1861.
- Add support for
com.termux.RUN_COMMAND_BACKGROUND_CUSTOM_LOG_LEVEL. Check the commit and termux/termux-tasker#custom-log-level for details. (
- Add warning that hax support is not provided and asking questions will likely result in issue automatically closed or even ban. (
- Add warning reports with (partial) screenshots of error reports instead of text will likely be automatically closed/deleted. (
termux-apilog level settings in termux app settings. (
termux-floatlog level settings in termux app settings. (
termux-widgetlog level settings in termux app settings. (
TermuxUtils.isTermuxAppInstalled()function can be used by external apps to check if termux app is installed and enabled. The
TermuxUtils.isTermuxAppAccessible()function can be used by termux plugin apps to check if termux app is installed, enabled, accessible as per
TERMUX_PREFIX_DIR_PATHis accessible and has read, write and execute permission. (
- Bootstrap error and report issue (optionally) will contain primary termux files
Users have been reporting issues with bootstrap installation (and
loginfile access) failure on email and github but "most" have been useless since they don't follow instructions to debug the issue and report back. The real reason may depend on device. One could be that
/data/data/com.termuxdoes not exist on the device in which case termux won't work on the device, at least without root. Other reasons could be wrong ownership or selinux context, selinux denials or attempting to install on external sd card (as reported by a user) where likely files dir was different from
This commit will save dev and possibly user time and automatically generate the required info to debug such issues. The
lscommand will generate
statinfo for all the major termux directories and files so that existence or ownership issues can be shown. It will also run
logcatcommand to take a dump (last
3000lines) in case other failures are being logged, like selinux denials as per
avcentries. It will also show if app is installed on external sd card. This info will automatically be shown on bootstrap install failure report.
Moreover, users can generate termux files
logcatdump manually too with terminal's long hold options menu
Report Issueoption and selecting
YESin the prompt shown to add debug info. This can be helpful for reporting and debugging other issues. If the report generated is too large, then
Save To Fileoption in context menu (3 dots on top right) of
ReportActivitycan be used and the file viewed/shared instead.
Users must post complete report (optionally without sensitive info) when reporting issues, instead of (partial) screenshots which won't be accepted anymore.
There has been some design changes in android 11 for
/data/user/0directory. You can check javadoc for
- ! Added support to save reports to files and fixed large reports generating
ReportActivitywas started with a large report, i.e a few hundred
KB, like for terminal transcript or other command output, the activity start would fail. To solve the issue, if the serialized size of the ReportInfo info object is above
100KB), it will be saved to a file in a cache directory
/data/data/com.termux/cache/report_activityas a serialized object and loaded when activity is started. Now these large reports can't be copied or shared with other apps since that would again result in
ShareUtilsautomatically truncates the data (now from end) to
100KBlength so that the exception doesn't occur. So now a
Save To Fileoption has been added in context menu (3 dots on top right) of
ReportActivityso that large or small reports can be saved to a file if needed. They will be save in root of
/storage/emulated/0or whatever is the default public external storage directory. The filename would depend on type of report. The storage permissions will be asked if missing. On android
11, if you get permission denied errors even after granting permission, disable permission and grant it again. To solve privacy issues of report being saved to public storage since it may contain private info, an option for custom path will be added in future. The default directory is public storage instead of termux home since its easily accessible via all file managers or from pc. Instructing amateur users to get files via
SAFfrom termux home is not something I wanna take on.
Another issue is that
ReportActivityitself may not be able to show the entire report since Android may throw
OutOfMemoryErrorexceptions if device memory is low. To solve this issue,
ReportActivitywill truncate the report to
1MBfrom end that's shown to the user. It will add a header showing that report was truncated. To view the full report, the user will have to use the
Save To Fileoption and view the file in an external app or on pc that supports opening large files. The
QuickEditapp on Android has been a reliable one in my experience that supports large files, although it has max row/column limits too at a few hundred thousand, depending on android version.
Despite all this,
OutOfMemoryErrorexceptions could still be thrown if you try to view too large a report, like a few MB, since original report + the truncated report is still held in memory by the app and will consume
2-3times memory when saving. It's fun coding for android, right?
The terminal transcript will not be truncated anymore that's generated via
Report Issueoption in terminal.
TextIOActivitycan be used to edit or view text based on various config options defined by
monospacefont and horizontal scrolling for editing scripts, etc. Current max text limit is
95KB, which can be increased in future. (
- Add constants for launcher activities of termux plugins. (
Theme.MaterialComponents.DayNight.TermuxPrimaryActivitytheme can be used by activities for day and night mode. (
- ! Support for delete intent for Notification.Builder in NotificationUtils. (
- ! Only allow
allow-external-appsis set to true. The
xdg-opencommands will now silently fail if value is not set to
true. An error notification will be added in future versions. The caller app like
QuickEditmay still show a flash error. Check termux/termux-tasker#allow-external-apps-property-optional on info on how to change the value. (
- Move to semantic versioning for app and library versions and add commit hash and
githubto APK file names and add support for
TERMUX_SPLIT_APKS_FOR_RELEASE_BUILDSenvironmental variable in
RELEASE_TAGvariable will not be used anymore since it may conflict with possibly other variables used by users. The
TERMUX_SPLIT_APKS_FOR_DEBUG_BUILDScan be set to
0to disable building split APKs which may be helpful for users building termux on device considering they will extra space and build time. Instructions for building are at termux/termux-packages#7227 (comment).
export TERMUX_SPLIT_APKS_FOR_DEBUG_BUILDS=0 ./gradlew assembleDebug
The APK will be found at
Note that F-Droid uses algorithm at gitlab.com/fdroid/fdroidserver/-/blob/2.1a0/fdroidserver/build.py#L746 to automatically detect built APKs, so ensure any modifications to location or file name are compliant. Auto updates are detected by
checkupdatesbot at gitlab.com/fdroid/fdroidserver/-/blob/master/fdroidserver/checkupdates.py
termux-widgettoken synchronously to the
SharedPreferencesfile on creation. Attempt to solve termux/termux-widget#16. (
- ! Do not wait for the user to press enter for failed terminal session commands if plugin expects the result back. (
- Make sure full path is included in
shrinkResourcesfor testing reproducible builds. (
- Ensure bootstrap installation creates prefix and prefix staging directory before extraction. (
- Ensure termux files directory is accessible before bootstrap installation and provide better info when running as secondary user/profile. Related issue #2168. (
- Add selinux context info to termux files info of debug output. (
- Use multi-process SharedPrefernces for log level of plugin apps. Since termux-app runs in a separate process from other apps, if a user sets log level in termux settings, then it would require exiting the
termux-appcompletely since android caches
SharedPreferncesin memory and only writes to the file on app exit. Now updated value will be instantly written to the file so that plugins can directly read at startup. If plugins are already running, they would need to be restarted since usually log levels are loaded at startup. (
extra-keysbutton will toggle instead of just opening. (
- Renamed typo
- Set default cursor color to white. (
- Use millisecond timestamps for reports. (
- Add gemini to the list of url regex protocols. Implemented by @the-blank-x in #2217. (
- Convert issue templates to forms. (
- Bump bootstrap to
- Update LICENSE.md. (
TermuxFileReceiverActivityincorrect handling of intent extras. Closes #2247. (
- Fix terminal cursor blinker not stopping when typing a character in non-gboard keyboards. (
- Fix extra-keys shift key not uppercasing for all soft keyboards and added docs for keyboard key characters mapping. (
FNextra key is read by the terminal. (
- Use default values if
termux.propertiesvalues are empty. (
NullPointerExceptionwhen running bell/vibrate on Samsung devices on android 8 and handled deprecated code
Apparently occurs on only Samsung android 8 devices and there is no fix for vibrator except catching the exception so that app doesn't crash. (
Stdinvalue not being logged for background execution commands. (
- Prevent new plugin error or crash notifications overriding content of old ones. (
RunCommandServicenotification not being cleared if an error was raised. (
- Fix issue where wrong IME inputType would be set if termux was returned to from another app with text input view mode selected. (
extra-keysrepeatable input from getting stuck in some cases. Related issue #2156. (
- Fix calculation of row number for selection and URL clicking. Implemented by @trygveaa in #2146. (
- Ensure failsafe session can still be opened if files directory is not accessible and fix comment. (
- Fix bootstrap checksum check if it contained leading zeros. (
- Fix markdown link generation. (
- Fix permissions for
- Invert text color under block cursor. Implemented in #2228. Related issue #219. (
- Revert "Changed: Bump compileSdkVersion to 31" commit
296ee60d. We do not need to bump to
compileSdkVersion31 currently, since I have decided not to bump
1.0.0-alpha10or higher currently, since it has changed APIs and ViewUtils will break. Moreover, bumping compileSdkVersion to 31 requires openjdk 11 in build environment, which will break Jitpack library build and possibly still F-Droid as well, unless changes are made. (
- Fix Discord badge. Implemented by @wmcbtech30 in #2199. (
- Update urls to https. Implemented by @TotalCaesar659 in #2190. (
Latest: 0.118.0 on April 12, 2022
Latest: 0.118.0 on April 12, 2022
Latest: 0.118.0 on February 16, 2022
Latest: 0.118.0 on April 12, 2022
Latest: 0.118.0 on April 12, 2022
Uploaded:April 12, 2022 at 7:35AM UTC
File size:28.5 MB