PitchHut logo
cross.stream
Local-first event streaming for hackers & tinkerers
Pitch

Single binary event stream store. Append frames, replay history, react in real time. Stateful actors build materialized views as events flow. Compose everything through Nushell pipelines.

  • Actors, services, actions
  • Content-addressed storage
  • P2P sync via iroh
  • No infrastructure — just xs serve ./store

Written in Rust. Nushell-native.

Description

An event streaming store for personal, local-first use. Think of an event like a frame in a movie — a small package on a timeline. xs records these frames in strict order, append-only, so they can be replayed or reacted to later.

Single binary. File-based store. UNIX socket API. No cloud.

"hello" | .append greeting
.cat -f | each { print ($in | table -e) }

Core primitives

Event Store. Append-only stream with structured metadata on each frame. Content-addressable storage (CAS) for binary and large blobs, automatic deduplication.

Actors. Stateful processors that react to incoming frames — transform, trigger, fan-out. Use Nushell's generate contract to carry state and emit materialized views:

r#'{
  run: {|frame, sum = 0|
    if $frame.topic != "sale" { return {next: $sum} }
    let sum = $sum + ($frame.meta.amount | into float)
    {out: {total: $sum}, next: $sum}
  }
  return_options: { suffix: ".total", ttl: "last:1" }
}'# | .append revenue.register

Services. Long-running processes that continuously pull data from files, APIs, websockets, serial devices, or sensors into the stream.

Actions. On-demand, stateless operations. Request/response semantics for RPC-style calls or streaming data back to the caller.

Why cross.stream

  • Single binary, no infrastructure. Storage engine, HTTP API, CAS, indexing — all embedded. brew install cablehead/tap/cross-stream and go.
  • Nushell-native. First-class .cat, .append, .last, .get commands. Write actors and services in Nushell with structured pipelines. Also works with any POSIX shell via the xs CLI.
  • P2P ready. QUIC-based transport via iroh for exposing and accessing streams across machines.

Who it's for

Developers who want event sourcing without Kafka. Local automation, reactive pipelines, LLM orchestration (gpt2099.nu), or as the embedded store behind http-nu.

0 comments

No comments yet.

Sign in to be the first to comment.