Skip to content

v2: clean-sheet rewrite — Go client + multiplexed protocol #11

@bradgessler

Description

@bradgessler

Clean-sheet v2 of Terminalwire. No backwards compatibility with v1 (install base is small).

North stars

  • Go thin client (Tebako is no longer maintained; Go gives static cross-compiled binaries + easy distribution + goroutines that fit a multiplexed protocol).
  • Ruby/Rails server stays Ruby, but behind a framework-agnostic adapter.
  • Conformance-harness-first: the protocol test harness is the keystone, built before the client or any server. Protocol-level TDD.

Settled design decisions

  • One WebSocket connection, multiplexed with stream_id + type per frame (SSH-channel model). Not separate sockets.
  • stdout/stderr are one-way streamed frames (no per-write ack) — kills the per-line round trip that's the real stdio bottleneck. stdin stays request/response. Large transfers chunked.
  • Versioned + capability-negotiated handshake from the first commit (clean-sheet on v1 ≠ skip forward-compat for v2).
  • Consent-based entitlements: server declares what it wants, client prompts the user once, client enforces.
  • Structured errors that don't tear down the connection; heartbeats for liveness.
  • Sans-IO protocol core (pure state machine, no sockets/clock) so one corpus validates client + multiple servers, and tests are fast and precise (deterministic).

Licensing

  • v2 is proprietary/closed-source (reverted from AGPL).
  • Test harness follows the SQLite/TH3 model, two-tier: spec open + a "starter" corpus open; the exhaustive adversarial/fuzz/security harness closed. Built internal + fast now, kept accurate/precise.

Workstreams tracked as sub-issues below, in priority order.

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking epic / parent issuev2Terminalwire v2 clean-sheet rewrite

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions