Skip to content

Protocol

Rezi communicates between its TypeScript core and the Zireael C engine through two binary formats: ZRDL (drawlists) and ZREV (event batches). Both formats cross a strict ABI boundary -- the core builds drawlists and the engine consumes them; the engine produces event batches and the core parses them.

Data flow

sequenceDiagram
    participant Core as TypeScript Core
    participant Engine as Zireael Engine

    Core->>Engine: ZRDL drawlist (render commands)
    Engine->>Core: ZREV event batch (input events)

    Note over Core: view(state) -> VNode tree -> layout -> drawlist
    Note over Engine: terminal I/O, cursor, damage

The core's rendering pipeline produces a ZRDL binary every frame. The engine parses that binary, executes the draw commands against the terminal, and sends back input events as ZREV batches.

Binary format principles

All Rezi binary formats share the following properties:

  • Little-endian byte order. All multi-byte integers are stored least-significant byte first.
  • 4-byte alignment. All section offsets, section sizes, and the total buffer size are 4-byte aligned. Padding bytes are explicitly zeroed.
  • Versioned. Each format begins with a magic number and version field. The engine rejects unknown versions.
  • Validated strictly. Both the builder (TypeScript side) and the engine (C side) validate the buffer independently. Malformed input is never silently accepted.

Format summary

Format Magic bytes Description Direction
ZRDL 0x4C44525A (ZRDL) Drawlist: rendering commands, strings, blobs Core -> Engine
ZREV 0x5645525A (ZREV) Event batch: keyboard/mouse/resize events Engine -> Core

Both magic values are encoded as little-endian u32 constants.

Sub-pages

Page Topic
Drawlists (ZRDL) Header layout, command opcodes, string/blob tables, style encoding
Cursor SET_CURSOR command and cursor state management
Versioning ABI version pins, drawlist/event versions, Unicode pin, compatibility
Safety rules Validation patterns, cap enforcement, error types, sticky errors
Event batches (ZREV) Event batch format and parsing
ABI pins Exported constants and version numbers