Skip to content

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

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    epicTracking epic / parent issuev2Terminalwire v2 clean-sheet rewrite

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions