• v0.9.5 2023f454e7

    zelnet v0.9.5 Stable

    gitea_admin released this 2026-07-01 13:54:19 +00:00 | 70 commits to trunk since this release

    Added

    • Unit test for host.zig's fmtEpoch — 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
  • v0.9.4 91af5a6429

    zelnet v0.9.4 Stable

    gitea_admin released this 2026-07-01 08:37:19 +00:00 | 82 commits to trunk since this release

    Added

    • Free-roaming cursor: ↑↓←→ now move the on-screen cursor one cell (clamped) on a
      field-less display — grid games like Number Munchers — and new --play verbs
      up/down/left/right + csr <row> <col> drive it headless. The cursor position is
      already reported to the host on AID, so RPG RTNCSRLOC reads 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
  • v0.9.3 514075a4e3

    zelnet v0.9.3 Stable

    gitea_admin released this 2026-06-30 15:51:32 +00:00 | 84 commits to trunk since this release

    Fixed

    • --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
  • v0.9.2 1502c877a8

    zelnet v0.9.2 Stable

    gitea_admin released this 2026-06-30 14:22:42 +00:00 | 86 commits to trunk since this release

    Added

    • --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 a writeJsonEscaped unit test.
    Downloads
  • v0.9.1 b63280febc

    zelnet v0.9.1 Stable

    gitea_admin released this 2026-06-30 13:22:06 +00:00 | 88 commits to trunk since this release

    Added

    • refute <text>: the negative twin of expect in 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 both drive5250 and drive3270; covered by a screenContains unit test.

    Removed

    • The legacy iz name is gone. iz was folded into zelnet in 0.9.0; this drops the remaining
      IZ_* environment aliases — use the ZELNET_* equivalents (ZELNET_USER, ZELNET_PW,
      ZELNET_HOST, ZELNET_ALLOW_PLAINTEXT). The password-level floor IZ_MIN_PWLVL is renamed to
      ZELNET_MIN_PWLVL, and the make iz-* helper targets are renamed to make host-*.
    Downloads
  • v0.9.0 a5c2297d15

    zelnet v0.9.0 Stable

    gitea_admin released this 2026-06-30 08:53:07 +00:00 | 95 commits to trunk since this release

    Added

    • --play <script>: a scripted, headless TN5250 driver — the golden-screen TEST HARNESS for
      greenscreen apps. Signs on (env ZELNET_USER/ZELNET_PW), advances past any break-message screen
      to the main menu, then runs a semicolon-separated script against the live panels: type into a
      field, send an AID (enter / pf <n>), and expect <text> / dump. Every expect is 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 its EXFMT panels, assert the rendered data), not just
      compile-success. The TN5250 twin of --drive (3270), built on the already-headless Session that
      login proves out — no TTY. Verbs: dump | expect | type | typepw | tab | backtab | home | field <n> | enter | pf <n>. Proven end-to-end driving the rpg-inventory PARTMNT maintenance
      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 proven extract.sh into the
      binary; the import primitive of IBMI-IMPORT.md. Flags: --out <dir>, --srcfiles A,B,
      --filter PART*. Proven by round-trip on rpg-inventory (box → Git, 5/5 byte-identical).
    Downloads
  • v0.8.2 ea2029eeae

    zelnet v0.8.2 Stable

    gitea_admin released this 2026-06-30 02:34:06 +00:00 | 100 commits to trunk since this release

    Fixed

    • 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
  • v0.8.1 6018d82f5b

    zelnet v0.8.1 Stable

    gitea_admin released this 2026-06-29 16:19:02 +00:00 | 118 commits to trunk since this release

    Changed

    • 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 return branches left by the v0.8.0 consolidation (they implied a misleading
      silent-success-on-null path).

    Tests

    • Regression guard for the CI compile gate: runCommand returns false on a non-zero CL RC (a
      failed CRTBNDRPG/etc.) and true on RC 0 — the behaviour zelnet cmd "…" || fail relies on,
      previously unexercised.
    • isVerb coverage: 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
  • v0.8.0 3db3df2783

    zelnet v0.8.0 Stable

    gitea_admin released this 2026-06-29 14:12:04 +00:00 | 119 commits to trunk since this release

    Changed

    • Single binary + subcommands. The IBM i Host Server tool iz is folded into zelnet
      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 is zelnet term
      (and bare zelnet <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_HOST first (the IZ_*
      names remain as fallbacks); --no-verify / --self-signed are 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
      failed cmd/sql/ifs/… printed the error but exited 0, so zelnet 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 iz binary (and its packaging entry). Everything it did is now
      zelnet <verb>; the .pkg / .deb / .rpm / tarballs install a single zelnet.
    Downloads
  • v0.7.5 7c4455a6cb

    zelnet v0.7.5 Stable

    gitea_admin released this 2026-06-29 12:46:39 +00:00 | 120 commits to trunk since this release

    Changed

    • Build/release: the macOS GUI .app and a .pkg installer (which drops zelnet.app
      into /Applications and the zelnet + iz CLIs 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