X3270: Because Paying a Subscription to Emulate a 1970s Terminal is Absurd
Sometimes the best way to deal with the frustration of the modern world—whether it's Maltese guided-tour scammers or the bureaucratic rot of modern tech companies—is to just sit down, open your editor, and build something that works exactly the way it is supposed to.
As I mentioned in my recent posts about COBOL and the mainframe ecosystem, I love the rigid, predictable logic of z/OS. But there is a glaring problem when you try to interface with that beautiful, ancient beast from a modern Mac.
If you work with IBM Mainframes on macOS, you have probably noticed a maddening reality: every halfway-decent TN3270 terminal client costs money. Sometimes a lot of money. We are talking 100+ for software that essentially emulates a text terminal from the 1970s. One popular commercial option even charges a recurring subscription just so you can type on a green screen. That is peak modern software absurdity.
There are a handful of free alternatives, but they are all fundamentally broken in one way or another. They either require Java (which is slow, ugly, and a perpetual security nightmare), run inside an X11 wrapper (no thanks), or are just straight-up abandonware that hasn't been touched in a decade and breaks every time Apple pushes a macOS update.
I was tired of paying for the privilege of doing my job. So, I built my own.
Enter X3270: Respecting the Hardware
I am excited to release X3270—a free, open-source TN3270/TN3270E terminal emulator for macOS (Apple Silicon and Intel).
It is built from scratch. No bloated cross-platform frameworks. No Electron garbage. It is written entirely in C++ and Objective-C++, utilizing native Cocoa for the UI, CoreText for pixel-perfect glyph metrics, and OpenSSL for TLS.
It took a weekend of intense frustration and a lot of reading through ancient, dusty IBM architecture manuals, but the result is a clean, lightning-fast, free terminal that actually feels like it belongs on a Mac.
The Features That Actually Matter
I didn't just build a basic telnet client. I built this to actually get work done on z/OS, z/VM, and z/VSE.
X3270 supports the TN3270E protocol with automatic fallback to classic TN3270, handling both plain Telnet and implicit TLS 1.2+ encrypted connections. It faithfully emulates an IBM 3278 Model 2 screen (24x80) with a native green-on-black phosphor UI, complete with a 600ms cursor blink. It also supports standard EBCDIC code pages like CP037 (US), CP500 (International), and CP1047 (Open Systems).
Most importantly, it fully responds to the IBM Structured Field Read Partition Query. If you work in this space, you know exactly why this matters: without this specific handshake, the mainframe simply refuses to render ISPF menus. X3270 handles it flawlessly, so your TSO and ISPF sessions work out of the box.
Because Macs lack a dedicated 3270 keyboard, I mapped the essentials intuitively. Your standard F1–F12 keys map directly to PF1–PF12, and adding Shift gets you PF13–PF24. The Option key combined with 1, 2, or 3 triggers your PA keys. Return is your standard AID Enter, while Escape resets and unlocks the keyboard. You can also easily toggle insert mode, erase to the end of a field, and navigate using the arrow keys exactly as you would expect on a real terminal.
Getting Started
If you want to stop paying rent to connect to your mainframe, you can grab the pre-built DMG directly from the GitHub Releases page. Every push to the main branch automatically builds and publishes a new DMG via GitHub Actions.
Just download the DMG, drag the app to your Applications folder, and you are good to go. Because the app is currently unsigned, you will just need to right-click it and select "Open" on the first launch to bypass macOS Gatekeeper.
When you launch it, the Connect dialog opens automatically. Just punch in your host IP, your port (like 623 for plain or 992 for TLS), check the SSL box if needed, and hit connect. You will be instantly greeted by the logon screen.
The Bottom Line
Software like this shouldn't be hidden behind a paywall, and it shouldn't require installing a massive Java runtime environment. It’s an emulator for a grid of text.
If you want to inspect the C++ backend, compile it yourself using CMake, or tweak the UI, the source is fully available in the repository (X3270 - Free Download).
X3270 is released under the MIT License. It is completely free, and it always will be. Go download it, connect to your partition, and let's keep the mainframe spirit alive without the corporate bloat.
Written by Swen Kalski, 2026. IBM, z/OS, ISPF, and 3270 are trademarks of IBM Corporation. This project is not affiliated with or endorsed by IBM.