A fully offline Android reader for the Jargon File — the hacker culture dictionary that gave the word "hacker" its original meaning.
- Browse 2,300+ entries alphabetically, with a fast-scroll index
- Instant search across terms and definitions
- Tap any cross-referenced term to jump straight to it
- Favorite entries and filter down to just those
- "Surprise me" with a random entry
- Zero permissions, zero network access — the dictionary ships inside the app; nothing ever leaves the device
- JDK 21 (install via SDKMAN:
sdk install java 21.0.5-tem) - Android SDK with platform API 36 and build-tools 36+ (install via Android Studio or
sdkmanager)
git clone https://github.com/AnalogGhost/jargon.git
cd jargon
echo "sdk.dir=$HOME/Android/Sdk" > local.properties
./gradlew assembleDebugAPK: app/build/outputs/apk/debug/app-debug.apk
./gradlew testadb install app/build/outputs/apk/debug/app-debug.apkUse the Docker build script to produce an unsigned APK in the same environment F-Droid uses:
bash docker-build.shAPK: app/build/outputs/apk/foss/release/app-foss-release-unsigned.apk
F-Droid builds from source and applies its own signature. Build from the tagged commit before making any further commits.
CI runs this script twice on every push and fails if the two builds don't produce byte-identical output — see .github/workflows/ci.yml.
./gradlew assembleFossReleaseProduces the same unsigned, minified APK, but from your host toolchain rather than F-Droid's exact build environment — fine for a quick smoke test, not for verifying reproducibility. See FDROID_PUBLISHING.md for the full submission process.
- Generate a keystore (one-time):
keytool -genkeypair -v \
-keystore ~/jargon-release.jks \
-alias jargon \
-keyalg RSA -keysize 4096 \
-validity 10000- Add to
local.properties(this file is gitignored — never commit it):
sdk.dir=/home/YOUR_USER/Android/Sdk
storeFile=/home/YOUR_USER/jargon-release.jks
storePassword=YOUR_STORE_PASS
keyAlias=jargon
keyPassword=YOUR_KEY_PASS- Build —
./gradlew assembleFossReleasenow signs automatically oncestoreFileis set:
./gradlew assembleFossReleaseAPK: app/build/outputs/apk/foss/release/app-foss-release.apk (no -unsigned suffix once signed). Rename to app-release.apk when attaching to a GitHub release — that's the filename Binaries: in the F-Droid metadata expects. F-Droid's own copy is always signed independently with their key, this signature is only for the GitHub-hosted binary.
./gradlew bundlePlayReleaseAAB: app/build/outputs/bundle/playRelease/app-play-release.aab, signed the same way once storeFile is set in local.properties. Unlike the foss flavor, play keeps AGP's SDK Index dependency metadata and ART baseline profiles — both are useful on Play, and only the F-Droid flavor needs to strip them for reproducibility/scanner reasons.
Entries are parsed from the Jargon File community edition (a continuation of the file originally compiled by Eric S. Raymond and Guy L. Steele). The upstream source is pinned in tools/jargon-source/ and parsed into app/src/main/assets/jargon.json by tools/build_jargon_json.py — nothing is fetched over the network at build time.
The content itself has been essentially frozen since Raymond's last substantive revision (version 4.4.7, December 29, 2003); the community-edition repo mostly just re-hosts that snapshot, with only a single, non-content bugfix commit since 2021. Refreshing the pin is a rare, manual, occasional check rather than a routine sync — see tools/jargon-source/SOURCE.md.
app/src/main/kotlin/com/hackerapps/jargon/
├── data/
│ ├── DictionaryEntry.kt # Entry model
│ ├── DictionaryRepository.kt # Loads jargon.json from assets
│ ├── FavoritesRepository.kt # DataStore-backed favorite ids
│ └── EntryFilters.kt # Search / favorites-filter / term lookup
└── ui/
├── MainActivity.kt
├── JargonNavHost.kt
├── JargonViewModel.kt
├── EntryListScreen.kt # Browse, search, alphabet scrubber
├── EntryDetailScreen.kt # Definition, favorite toggle
├── LinkedText.kt # Tappable cross-reference rendering
├── AboutScreen.kt
└── theme/
tools/
├── build_jargon_json.py # Upstream DocBook XML -> jargon.json
└── jargon-source/ # Pinned upstream source + its license
This repository carries two licenses, covering two different things:
- App source code — GPL-3.0-or-later. Copyright (C) 2026 Matt Brown. 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, or (at your option) any later version. Full text: LICENSE.
- Dictionary content (
app/src/main/assets/jargon.json,tools/jargon-source/) — CC BY-SA 4.0, from the Jargon File community edition. Full text:tools/jargon-source/UPSTREAM-LICENSE.txt.
Both are credited in-app on the About screen.