-
zelnet v0.9.5 Stable
released this
2026-07-01 13:54:19 +00:00 | 70 commits to trunk since this releaseAdded
- Unit test for
host.zig'sfmtEpoch— asserts a Unix epoch renders to the expected
timestamp string, covering the leap-year and 1-based day-of-month accounting so the
calendar math can't silently regress.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Unit test for
-
zelnet v0.9.4 Stable
released this
2026-07-01 08:37:19 +00:00 | 82 commits to trunk since this releaseAdded
- Free-roaming cursor: ↑↓←→ now move the on-screen cursor one cell (clamped) on a
field-less display — grid games like Number Munchers — and new--playverbs
up/down/left/right+csr <row> <col>drive it headless. The cursor position is
already reported to the host on AID, so RPGRTNCSRLOCreads the landed cell. Form
screens (nfields>0) keep Tab/field navigation. - Background colors via reverse-image: a
DSPATR(RI) COLOR(x)field now renders as a
FILLED colored cell (the color as an ANSI background + contrasting foreground), not just
a foreground tint. Enables filled grid cells / highlighted tiles.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
- Free-roaming cursor: ↑↓←→ now move the on-screen cursor one cell (clamped) on a
-
zelnet v0.9.3 Stable
released this
2026-06-30 15:51:32 +00:00 | 84 commits to trunk since this releaseFixed
--record: the asciicast now positions each row with an absolute cursor move (ESC[r;1H) and
disables autowrap, instead of emitting full-width rows followed by a newline. An 80-column row
autowrapped in the player's terminal and the trailing newline then doubled every line, scrolling
the screen so only the bottom ~12 rows survived. Frames now render the full 24×80 panel, matching
the live GUI.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
zelnet v0.9.2 Stable
released this
2026-06-30 14:22:42 +00:00 | 86 commits to trunk since this releaseAdded
--record <file>(with--play): write an asciicast v2 recording of the driven 5250 panels —
the source for the release pipeline's greenscreen video. Each driven screen is one frame with
synthetic ~1.5 s timing so playback is watchable even though the drive runs in milliseconds; the ANSI
render is captured verbatim (colour preserved, ESC hand-escaped). Validated on the full PARTMNT drive
(18 frames). Covered by awriteJsonEscapedunit test.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
zelnet v0.9.1 Stable
released this
2026-06-30 13:22:06 +00:00 | 88 commits to trunk since this releaseAdded
refute <text>: the negative twin ofexpectin the--play(5250) /--drive(3270)
golden-screen harness — fail if the (undesirable) text is on screen. Closes the other half of
behavior testing: assert the bad thing didn't happen (no stale row after a delete, no silent
overwrite/create, an error actually shown) — not just that the good thing did. Same self-verifying
non-zero exit, in bothdrive5250anddrive3270; covered by ascreenContainsunit test.
Removed
- The legacy
izname is gone.izwas folded intozelnetin 0.9.0; this drops the remaining
IZ_*environment aliases — use theZELNET_*equivalents (ZELNET_USER,ZELNET_PW,
ZELNET_HOST,ZELNET_ALLOW_PLAINTEXT). The password-level floorIZ_MIN_PWLVLis renamed to
ZELNET_MIN_PWLVL, and themake iz-*helper targets are renamed tomake host-*.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
zelnet v0.9.0 Stable
released this
2026-06-30 08:53:07 +00:00 | 95 commits to trunk since this releaseAdded
--play <script>: a scripted, headless TN5250 driver — the golden-screen TEST HARNESS for
greenscreen apps. Signs on (envZELNET_USER/ZELNET_PW), advances past any break-message screen
to the main menu, then runs a semicolon-separated script against the live panels:typeinto a
field, send an AID (enter/pf <n>), andexpect <text>/dump. Everyexpectis a
self-verifying gate, so a script exits non-zero on the first mismatch — greenscreen behavior is
now a CI gate (CALL a program, drive itsEXFMTpanels, assert the rendered data), not just
compile-success. The TN5250 twin of--drive(3270), built on the already-headless Session that
loginproves out — no TTY. Verbs:dump | expect | type | typepw | tab | backtab | home | field <n> | enter | pf <n>. Proven end-to-end driving therpg-inventoryPARTMNTmaintenance
panel on pub400 (CHAIN found + miss).src export <lib>: a first-class source extractor (the "reverse deploy") — pull a library's
source members off the box into a local Git layout (<out>/<srcfile>/<member>.<type>). For each
source file it lists the members (file server),CPYTOSTMFs each to an IFS temp (EBCDIC → CCSID
1208 UTF-8, LF) via the command server, fetches it, sniffs the source type (PFILE(→lf,
DSPSIZ→dspf, else pf;QRPGLESRC→rpgle), and writes it — reusing one file + one command
connection for the whole sweep (no fork-per-member). Folds the provenextract.shinto the
binary; the import primitive of IBMI-IMPORT.md. Flags:--out <dir>,--srcfiles A,B,
--filter PART*. Proven by round-trip onrpg-inventory(box → Git, 5/5 byte-identical).
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
zelnet v0.8.2 Stable
released this
2026-06-30 02:34:06 +00:00 | 100 commits to trunk since this releaseFixed
- 5250: an Insert-Cursor / Move-Cursor order no longer moves the buffer write address. IC/MC
position only the displayed cursor (carried via the field model); treating them like
Set-Buffer-Address meant any display data the host emitted after an IC in the same
Write-To-Display painted at the wrong cell — and desynced the painted screen from the
input-field model. Now a no-op for the write cursor, matching the 3270 path.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- 5250: an Insert-Cursor / Move-Cursor order no longer moves the buffer write address. IC/MC
-
zelnet v0.8.1 Stable
released this
2026-06-29 16:19:02 +00:00 | 118 commits to trunk since this releaseChanged
- Internal: the host-server connect helpers (
signOn/fileConnect/dbConnect) are now
non-optional — they exit non-zero on failure instead of returning null, removing 17 unreachable
orelse returnbranches left by the v0.8.0 consolidation (they implied a misleading
silent-success-on-null path).
Tests
- Regression guard for the CI compile gate:
runCommandreturns false on a non-zero CL RC (a
failedCRTBNDRPG/etc.) and true on RC 0 — the behaviourzelnet cmd "…" || failrelies on,
previously unexercised. isVerbcoverage: the seven host verbs route to the host dispatcher;term/ bare-host /--flags
fall through to the terminal — the v0.8.0 router's foundation now has tests.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Internal: the host-server connect helpers (
-
zelnet v0.8.0 Stable
released this
2026-06-29 14:12:04 +00:00 | 119 commits to trunk since this releaseChanged
- Single binary + subcommands. The IBM i Host Server tool
izis folded intozelnet
as subcommands:zelnet cmd "<CL>",zelnet sql,zelnet ifs {ls,get,put,mkdir,rm,mv,stat},
zelnet dq,zelnet xfer,zelnet auth,zelnet pgm. The terminal iszelnet term
(and barezelnet <host>still connects). One install, one--help, shared
connection/credential/TLS flags — aimed at driving IBM i (and mainframe) CI/CD from a
single tool. - Host-verb credentials now read
ZELNET_USER/ZELNET_PW/ZELNET_HOSTfirst (theIZ_*
names remain as fallbacks);--no-verify/--self-signedare now accepted on the host
verbs too (previously terminal-only).
Fixed
- CI-gate correctness: every host verb now exits non-zero on failure. Previously a
failedcmd/sql/ifs/… printed the error but exited 0, sozelnet cmd "…" || fail
could never fire — a broken IBM i compile (or any host op) looked green. A CL escape, a
connect/auth failure, or an op error now sets a non-zero exit code.
Removed
- The standalone
izbinary (and its packaging entry). Everything it did is now
zelnet <verb>; the.pkg/.deb/.rpm/ tarballs install a singlezelnet.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Single binary + subcommands. The IBM i Host Server tool
-
zelnet v0.7.5 Stable
released this
2026-06-29 12:46:39 +00:00 | 120 commits to trunk since this releaseChanged
- Build/release: the macOS GUI
.appand a.pkginstaller (which dropszelnet.app
into/Applicationsand thezelnet+izCLIs into/usr/local/bin) are now produced by the
CI pipeline itself. The GUI build had previously been deferred and silently skipped — the build
key could not read the private macOS SDK, so every prior release shipped without a.app. Both
artifacts are universal (arm64 + x86_64) and unsigned (Gatekeeper → right-click → Open, or
xattr -dr com.apple.quarantine, on first launch). No source changes vs 0.7.4.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Build/release: the macOS GUI