Built by people who have stared at a 4GL trace for a living
Observation, not interception. Host-account privilege model. Structured audit you can hand to a reviewer. YAML control plane. Operator tooling for the call that comes at 2am.
Append-only JSON Lines audit — ten event types, byte-for-byte replay
Host-account auth — drop privilege, exec the 4GL as the user
YAML control plane — schema-validated, hot-reload safe
Reconnect window — browser drops, runtime survives
If you run Informix 4GL applications in production, you already know the two paths on offer. Rewrite the application — open-ended scope, new bugs, new edge cases, no guarantee the rewrite ever reaches parity. Wrap it in a screen-scraper — fragile, opaque, owned by a vendor whose roadmap is not yours. Neither path keeps the runtime you trust at the centre of the picture. Nexus does.
Observation, not interception
The daemon launches the 4GL under a PTY the same way a terminal session would. A reader thread drains the master side, the Informix-4GL adapter decodes the byte stream into screen transitions, and those transitions become frame deltas the browser paints. The 4GL never knows it is not talking to a terminal. There is no shim in the runtime path. The 4GL binary on disk is the 4GL binary that runs.
Privilege model you can defend in a review
The daemon authenticates the user against the host account database
(PAM-ready; a devfile backend ships for development), then forks,
drops privilege to the authenticated user, opens the PTY, and execs
the 4GL inside that user’s normal shell environment. The
parent process never holds elevated privilege beyond the moment it
needs to. Existing UNIX permissions gate access exactly as they
would for an ssh login.
Audit that survives an auditor
Every observed transition, every forwarded keystroke, every policy
decision, every authentication outcome, every session lifecycle
event lands in an append-only JSON Lines record stream — ten
distinct event types covering the full session lifecycle. Audit
failures are fail-stop by default: if the sink is unreachable,
sessions stop accepting input until either the sink recovers or the
operator explicitly authorises degraded operation. The shipped
gs-replay tool reconstructs any audited session
byte-for-byte — no “approximate” replay, no missing
keystrokes, no off-by-one transitions.
Reconnect without losing context
Operator-configurable reconnect window: if the browser drops the WSS but the daemon survives, the 4GL process keeps running and the daemon buffers observed output. The user reopens the tab, replays the buffer, and resumes live observation. Daemon death is the boundary — there is no daemon-to-daemon session migration and no attempt at one, because the 4GL process state is not portable across hosts. Availability comes from running multiple independent daemons; sessions are sticky to the daemon that created them.
YAML control plane, no surprise services
Daemon network bindings, TLS material paths, ciphersuite policy, authentication backend, adapter selection and version pin, per- application launch parameters, policy hook chains, audit sink configuration, reconnect window, session admission limits, logging verbosity — all in YAML, all validated on load. A daemon refuses a configuration that fails schema validation; the previous configuration stays live. CLI flags override YAML for ad-hoc overrides.
Operator tooling — when the call comes at 2am
UI Designer
Per-screen label rename, hide unused fields and menu options, drag-reorder commands, free-position fields on a CSS grid with R/C/W numeric inputs. Output is operator-pasteable form_overrides: YAML. Live preview reflects every edit.
Theme editor
Colour and font customisation with live preview, applied per-deployment via a YAML chrome: block. Save & Apply persists across browser reloads; Revert restores the daemon-supplied default cleanly.
Debug console
Bottom-anchored panel capturing WebSocket state, auto-sync screen transitions, message classification, dispatch events, and runtime warnings. YAML-tunable buffer size with hot-reload. Operator copies a transcript directly into a support ticket.
What you don’t have to do
You don’t have to recompile the 4GL. You don’t have to patch the runtime. You don’t have to migrate your schema. You don’t have to introduce a new database, queue, cache, or coordination service. You don’t have to change how host accounts work. The platform’s value is in what it preserves; the runtime stays where it is.