Skip to content

v0.1.0 — First Release

Choose a tag to compare

@kolkov kolkov released this 17 May 09:21
· 8 commits to main since this release
df08c56

compose v0.1.0

First release of gogpu/compose — Pure Go multi-process composition library.

Highlights

  • Unix socket transport — cross-platform (Linux, macOS, Windows AF_UNIX)
  • Wire protocol v1 — 64-byte fixed header, cache-line aligned, zero-alloc encode/decode
  • LZ4 compression — 2.9 GB/s, 99.6% compression on GUI pixels
  • Pull-based flow control — Wayland frame callback pattern, adaptive rate reduction
  • Hot-plug — modules connect/disconnect/crash without compositor restart
  • Public APIcompose.Listen(), compose.Dial(), Frame, functional options

Metrics

Metric Value
Total LOC ~9,000
Tests 220+
Coverage ~98%
Packages 6 (1 public + 5 internal)
Lint (30+ linters) 0 issues
CI Ubuntu + macOS + Windows
Dependencies 1 (pierrec/lz4/v4)

Quick Start

// Compositor
srv, _ := compose.Listen("/tmp/compose.sock")
srv.OnFrame(func(f compose.Frame) { /* blit pixels */ })

// Module
client, _ := compose.Dial("/tmp/compose.sock", compose.WithName("clock"))
client.PublishFrame(compose.Frame{Pixels: rgba, Width: 400, Height: 120})

Architecture

compose/                    # Public API (13 symbols)
└── internal/
    ├── protocol/           # Wire format (100% coverage)
    ├── codec/              # Raw + LZ4 (97% coverage)
    ├── conn/               # Module lifecycle (98.9% coverage)
    ├── flow/               # Pacing (100% coverage)
    └── transport/socket/   # Unix sockets (95.1% coverage)

What's Next

  • Phase 2: Reference examples (compositor + clock + notification binaries)
  • Phase 3: Shared memory transport (zero-copy, triple-buffer)
  • Phase 4: Delta frames, compression negotiation