a3270
An x3270-aligned IBM 3270 mainframe terminal emulator for Android, written in Kotlin using Jetpack Compose and powered by the lib3270j protocol engine from j3270. Designed for mobile access to IBM z/OS, z/VM, CMS, and TSO systems over TN3270 and TN3270E.
🔗 Repositories
- a3270 (Android App): https://git.hugfreevikings.wtf/rudi/a3270
- j3270 (Desktop App &
lib3270jCore Library): https://git.hugfreevikings.wtf/rudi/j3270
a3270 relies on the shared 3270 protocol library (lib3270j) provided by the j3270 repository.
🚀 Quick Download & Install
Latest Standalone APK
You can download ready-to-install Android APKs directly from releases or CI builds:
- Download Latest Tagged Release (
a3270.apk) - Latest Nightly CI Artifacts (Download under the latest successful workflow run)
Installing a3270
To install the APK on a connected Android device or emulator via adb:
adb install -r a3270.apk
✨ Features
- Modern Jetpack Compose UI: Responsive, touch-optimized 3270 terminal screen rendering.
- TN3270 & TN3270E Protocol Support: RFC 2355 compliant state machine, negotiation, Device-Type query, and SSL/TLS encryption via
lib3270j. - On-Screen Function Key Bar: Quick-access touch bar for PF1–PF24, PA1–PA3, Enter, Clear, Reset, and Attn keys.
- IND$FILE File Transfer: Full mobile UI for CUT and DFT (DDM) high-speed structured field file transfers with ASCII/binary translation, CRLF handling, and recfm/lrecl formatting for TSO, VM/CMS, and CICS.
- OIA Status Line: Real-time Operator Information Area displaying connection state, keyboard lock, insert mode, cursor row/col, and LU name.
- Host Profile Storage: Save and manage multiple mainframe connection profiles with custom ports, models, and SSL/TLS options.
- Background Session Persistence: Android foreground service keeps your terminal session alive when multitasking.
- Terminal Models:
- Model 2 (24x80)
- Model 3 (32x80)
- Model 4 (43x80)
- Model 5 (27x132)
🛠️ Building from Source
Prerequisites
- Java Development Kit (JDK): JDK 17 or JDK 21
- Android SDK: API 34 platforms and build-tools (
ANDROID_HOMEorANDROID_SDK_ROOTset)
1. Clone Repositories Side-by-Side
For the easiest setup, clone both j3270 and a3270 into the same parent folder:
git clone https://git.hugfreevikings.wtf/rudi/j3270.git
git clone https://git.hugfreevikings.wtf/rudi/a3270.git
cd a3270
Note: If
j3270is located in another directory, specify its location via theJ3270_DIRenvironment variable:export J3270_DIR=/path/to/j3270or via Gradle property:
./gradlew assembleDebug -Pj3270Dir=/path/to/j3270
2. Build the Debug APK
Using the helper script:
./build.sh
Or using Gradle Wrapper directly:
./gradlew assembleDebug
The compiled APK will be generated at:
build/outputs/apk/debug/a3270-debug.apk
📜 Acknowledgements
- j3270 — Desktop emulator and
lib3270jprotocol engine - x3270 — Reference C implementation and protocol specifications
- Antigravity
- Claude Opus 4.6
- Gemini 3.1 Pro
- Gemini 3.7 Flash
- Gemma4 12B and 26B
- GPT-OSS 120B
- Qwen3 4B and 32B