An open-source GitHub client for Android that reads and writes: browse repositories and code, edit files with real commits, publish releases, review and merge pull requests, follow builds and get your notifications on the phone.
This is a modernized fork of OpenHub by ThirtyDegreesRay, based on the maintained fork by yxj-github-437. All credit for the original app goes to them; see Credits.
- Android 17 ready: targets API 37, edge-to-edge, predictive back gesture.
- Sign in with a personal access token, so the app works without its own OAuth App. Browser login (OAuth) is still there when the build has one.
- GitHub Actions for any repository: workflow runs with their status, artifacts with download buttons, filter by workflow, and starting workflows by hand in your own repositories.
- Releases: open the latest release directly, Latest / Pre-release badges, file sizes and download counts, Install / Open / Share right from the download notification.
- Release notifications: follow any repository and get a notification when a new release comes out, with an adjustable check interval.
- Gists: your gists and anyone else's, with formatted Markdown and highlighted code. Create gists (public or secret), add, edit, rename and delete files, star, fork and delete them; read, write, edit and delete comments.
- Built-in downloader that works on Wi-Fi, mobile data, roaming and VPN and resumes after a lost connection.
- Wide tables and code blocks in READMEs scroll sideways.
- A scroll-to-top button on long lists and an animated logo in the side menu.
- Help inside the app that explains every screen and setting, written for people who are new to GitHub.
- New app icon, a fixed toolbar and readable dialogs in dark themes.
- Up-to-date libraries throughout (RxJava 3, Retrofit 3, AndroidX, Material 1.14) and no more dependencies on JCenter or the old support library.
- Uses the current GitHub REST API version (2026-03-10) for every request.
- Login with a personal access token or with the browser (OAuth); multiple accounts: switch, add or log out from the side menu of any screen
- A saved sign-in is never removed by itself: when GitHub stops accepting it, the app asks you to sign in again and keeps the account
- GitHub notifications on the phone (optional): Mark as read, Mark as done, Unsubscribe, and why each notification came
- Releases of all your starred repositories in one list, newest first, with New badges and download buttons; it can be the start page
- Built-in updater with an on/off switch; GitHub links from other apps open in the app
(repositories, also
.gitlinks, files, folders, wiki pages, issues, pull requests, releases, profiles and their repositories, stars, followers and following) - The side menu on every screen (≡ always at the top left, Back right next to it), to jump anywhere without pressing Back many times
- Matrix rain side menu: slowly falling green characters behind your account and down the edges of the menu, with an animated "Welcome to OpenHub"; or the plain theme color
- Settings, About and Help in the same Matrix look: the rain behind a large decoding title, an almost black screen on dark themes; settings in groups with colored icons
- Every other screen gets a black Matrix top bar with the rain and a title that decodes letter by letter (My Profile, repository names over up to three lines)
- Modern rounded buttons that sink a little when pressed; readable hints and labels in dark themes; a new theme or accent color reaches every open screen
- About shows the SHA-256 of the APK's signing certificate (tap to copy), checks for updates and links to private security reports
- App icon to choose: Matrix, Classic, Cosmic or Outline
- Searchable in-app help that explains every screen, written for people new to GitHub; its feature tiles jump to the matching section
- Light, dark and AMOLED dark themes, many accent colors, colored or plain side menu icons
- Markdown rendering and code highlighting, with images in comments and posts
- Offline mode (cached pages); Clear cache in the settings
- Trending repositories for all languages, by day, week or month
- GitHub collections and featured topics
- Search repositories and users, with a search history (× forgets one search, or clear all)
- Bookmarks and a trace of what you viewed (swipe to remove, or clear the trace)
- Pull down to reload on every screen that shows GitHub data (repository, profile, files, pull requests, discussions, releases, logs and more); lists also update themselves when you come back to them
- Launcher shortcuts
- Option to skip loading images on mobile data
- Create repositories (README, .gitignore templates and your own lines, license); repository settings (also pull requests on or off and who may create them), transfer, archive and delete
- Branches: browse their files, create, rename, delete, restore, and branch protection
- Tags: every tag with its commit, date and release; find by name, browse the files of a tag, compare with the tag before it, download its source code, make a release from it, delete tags
- Rulesets for branches and tags: create, edit, switch on and off, delete, the history of a ruleset with restore, bypass for admins, and converting branch protection into a ruleset; the rules that apply to a branch
- Compare two branches or tags: commits ahead and behind, changed files and diffs, and a pull request from there
- Create, upload, edit, rename and delete files as real commits, to the branch you choose or a new branch with a pull request; files shared from other apps can be committed to a folder of a repository; submodules open the repository they point to
- History of a file or folder, and blame: who last changed each line and when, with age colors
- Search code in a repository, with the matches marked; file name search where GitHub's code search has nothing
- Repository info, README (with a pencil to edit it), files, commits, activity, branches and tags
- Star, watch and fork; Sync fork like on github.com: how far a fork branch is ahead of and behind the original, update it (fast-forward or merge commit) or discard its own commits, help with the workflows GitHub keeps off in a new fork, and Contribute a pull request to the original
- Releases: create, edit, publish and delete, upload APKs and zips (also by sharing from other apps such as Termux), rename and delete files, Latest and Pre-release badges, file sizes and download counts; downloads are checked against GitHub's SHA-256
- SHA256SUMS file for a release (for
sha256sum -c), written from GitHub's checksums - Clean up old releases: keep the newest one, 3 or 5 and delete the rest, with their tags
- Release notifications for any repository
- GitHub Actions: workflow runs with their jobs and steps, job logs (folded groups, errors marked, find, next error, download), re-run (all, failed or one job, with debug logging) and cancel, artifacts (download, or unpack and add their files to a release in a few taps), starting workflows by hand (the new run opens right away), and a notification when a run finishes, with buttons to download its artifacts
- Workflows: enable and disable them, show their runs, open their files; caches: storage used, sorted lists, delete one or all
- Security: Dependabot, code scanning and secret scanning alerts with details (for Dependabot also your version, CVSS 4.0 and 3.x scores, the EPSS exploit chance); dismiss, close and reopen them; admins turn Dependabot alerts and security updates, secret scanning, push protection and private vulnerability reporting on or off
- Deploy keys: add (paste the key or pick a .pub file; private keys are refused on the phone) and delete, with SHA256 fingerprints and when each key was last used
- Webhooks: how the last delivery went, turn off and on, ping, delete; recent deliveries with the receiver's answer and the payload, and redeliver
- Secrets: add, update and delete the secrets of Actions, Dependabot and environments; values are encrypted on the phone as GitHub requires
- Actions variables of the repository and of environments: add, edit, rename, copy and delete
- Discussions: read, comment and reply, upvote, mark the answer, start discussions, vote in polls, close (resolved, outdated, duplicate) and reopen
- Download source code
- Your private, public, forked and starred repositories
- Wiki pages rendered in the app, with links between pages, the wiki's contents and its recent changes; links in a README to files and wiki pages open in the app, and its table of contents jumps to the section
- List, conversation with reviews and checks, commits and files
- Open pull requests (also from forks), edit, close and reopen, draft and ready
- Merge, squash or rebase with GitHub's asynchronous merge (also into a merge queue, with bypass of the rules when you may); delete and restore the branch
- Archive and unarchive pull requests (triage access or higher), with an Archived tab
- Stacked pull requests: the stack in the list and on the pull request, with links to every pull request in it; merging takes the open ones below along
- A blocked merge lists what the base branch asks for: the rules of its rulesets and branch protection, approvals so far, and unresolved conversations
- Line-by-line review of the diff: comment on one or several lines, suggest changes, reply, edit and delete your comments
- Commit suggestions from a review, one by one or several as one commit, with their authors as co-authors
- Pending reviews: collect line comments and replies to threads and send them as one review (Comment, Approve or Request changes)
- Resolve and unresolve conversations
- Issues with comments and events; create, edit, close and reopen; issue lists show only issues (pull requests have their own list)
- Sub-issues: the parent, progress, add an existing or a new issue, reorder, remove
- Relationships: blocked by, blocking and relates to
- Issue types and issue fields (organization repositories)
- Issue templates (Markdown templates and issue forms) when creating an issue
- Labels, assignees and milestone for people with triage or write access
- Milestones: open and closed, due dates and progress, their issues; create, edit, close, reopen and delete
- Comments with a Markdown editor and preview
- Manage labels in your own repositories
- Your created, assigned and mentioned issues
- Commit details, changed files and diffs
- Profile, followers, following and organizations
- Public repositories, starred repositories, gists and activity
- Follow and unfollow
- Organization repositories, activity and members
OpenHub talks only to GitHub: no ads, no analytics, no servers of its own.
- Your token stays on the phone, encrypted. It is stored with AES-256-GCM using a key of the Android Keystore, which never leaves the phone. A copied database is useless without that key.
- The token goes only to
api.github.com. File links, images and web pages never get it, whatever address they point to; each account's token is bound to its own HTTP client. - Not in backups. Accounts and tokens are excluded from Android backups and from phone-to-phone transfers; settings are kept.
- Short-lived browser sign-in. A browser sign-in token lasts 8 hours and renews itself with a refresh token, which is encrypted the same way; if GitHub refuses the renewal, the app asks you to sign in again (one notification when it is in the background).
- Browser sign-in uses a one-time
statethat must come back unchanged and PKCE (S256), so another app cannot push its own sign-in into OpenHub; the client secret and the code travel in the request body, never in a URL. - Log out deletes the token and the cached GitHub pages; a browser sign-in token is also revoked at GitHub. Personal access tokens are revoked by you on github.com.
- Least privilege: Create token ticks every permission OpenHub can use; untick
delete_repoorworkflowif you do not need them, or use a fine-grained token limited to some repositories. - Encrypted connections only. No plain HTTP; only the system's certificate authorities are trusted (user-installed certificates are not), and the token is never sent over a connection that is not HTTPS.
- Web views cannot read files or other apps' content; exported screens accept only what
they need. Files shared to OpenHub must come from other apps (
content://), so no app can make OpenHub upload its own private files.
Found a security problem? Please report it privately, see SECURITY.md.
Android 8.0 (API 26) or newer.
APKs are on the Releases page. The app id is
io.github.nikakvo.openhub, so it installs next to the original OpenHub.
Official APKs are signed with this certificate (SHA-256):
5e:99:44:a9:e7:ed:01:1d:83:5b:9a:6f:10:ce:e1:49:6d:88:26:f3:e5:7d:9a:b5:38:6d:ef:d6:d4:d9:98:7e
Check a downloaded APK with apksigner verify --print-certs OpenHub-<version>.apk
(Android SDK build-tools): the "SHA-256 digest" must be the same, without the colons.
You need JDK 17 and the Android SDK (platform 37). Then:
./gradlew assembleNormalDebugUnit tests: ./gradlew testNormalDebugUnitTest. GitHub Actions runs them and a debug build on every push and pull request (see the Tests badge above).
The APK ends up in app/build/outputs/apk/normal/debug/. There are two flavors that only
differ in the app name: normal ("OpenHub") and fullName ("OpenHub for GitHub").
Without an OAuth App the app offers token login only. To enable "Login with browser",
create an OAuth App at https://github.com/settings/developers with the callback URL
openhub://login and put its keys in local.properties (not tracked by git):
openhub_client_id=your_client_id
openhub_client_secret=your_client_secretThe APKs on the Releases page are signed with the project's own key, and Android only
installs an update that carries the same signature. Your own release builds are signed
with the debug key unless a keystore is configured, so they always install (as a
different app signature: uninstall the official APK first). To sign with your own key, either add sign_path, store_password,
key_alias and key_password to local.properties, or use build.sh:
KEYSTORE=~/keys/my.jks KEY_ALIAS=mykey OUT_DIR=~/apk ./build.shbuild.sh reads the passwords from a file next to the keystore with the same name and the
.env extension (KEYSTORE_PASSWORD=... and KEY_PASSWORD=..., chmod 600) or asks for
them, passes them to Gradle as environment variables, builds the normal release and
copies the APK to OUT_DIR as OpenHub-<version>.apk (test versions with a -
suffix also get a timestamp). Use
FLAVOR=FullName for the other flavor.
Never commit keys or passwords: public.properties is in git and must stay empty.
- ThirtyDegreesRay created OpenHub.
- yxj-github-437 kept it alive and updated; this fork starts from that work.
- Kosh: some code comes from FastHub.
- Room The SQLite object mapping library of Android Jetpack.
- EventBus Android optimized event bus that simplifies communication between Activities, Fragments, Threads, Services, etc.
- RxJava A library for composing asynchronous and event-based programs using observable sequences for the Java VM.
- RxAndroid RxJava bindings for Android.
- Retrofit Type-safe HTTP client for Android and Java by Square, Inc.
- Dagger A fast dependency injector for Android and Java.
- Glide An image loading and caching library for Android focused on smooth scrolling.
- code-prettify An embeddable script that makes source-code snippets in HTML prettier.
- DataAutoAccess A simple way to access android bundle data.
- CircleImageView A circular ImageView for Android.
- Toasty The usual Toast, but with steroids 💪.
- GitHub-Trending Scrapes GitHub's Trending Pages.
- Markwon Markdown for Android (and commonmark-java underneath).
- jsoup Java HTML Parser, with best of DOM, CSS, and jquery.
- OctoDroid This application provides access to GitHub and lets you stay connected with your network.
- FastHub FastHub the ultimate GitHub client for Android.
- highlight Highlight code in WebView.
- highlightjs-line-numbers.js Display code line number with highlightjs.
Order by commit time. The translations were removed in this fork (it is English only), but the work that went into them is still credited here.
- moriel5 - Hebrew translation
- Henry2o1o, squeezer11, ropaha - German translation
- Edfgdz - Testing and suggest
- pzhlkj6612 - Improve the translation of Chinese readme
- hiteshnayak305 - Hindi translation
- KcNirvana - Portuguese translation
- sclickk - Improve English translation
- Zazsona - Add AMOLED theme
- Aqueminivan - Improve the translation of English readme
- XF-zhjnc - Fix bugs
- fergthh - Spanish translation
- chiyi4488 - Traditional Chinese translation
- left4j - Russian translation
- TheParanoik - Polish translation
- X1nto - Georgian translation
- MerkeX - Italian translation
- Vistaus - Dutch translation
- pkubanek - Czech translation
- LouisUnnoficial - Portuguese(Brazil) translation
GPL-3.0, like the original. See LICENSE.
ThirtyDegreesRay:
Copyright (C) 2017 ThirtyDegreesRay. Licensed under the GPL-3.0. (See the LICENSE file for the whole license text.)
Changes in this fork:
Copyright (C) 2026 Tears Burn (nikakvo). Licensed under the GPL-3.0.
Kosh (13 files contain code copied from FastHub):
Copyright (C) 2017 Kosh. Licensed under the GPL-3.0 license. (See the LICENSE file for the whole license text.)
