<!-- LOGO -->
<h1>
<p align="center">
  <a href="https://cablehead.github.io/xs/">
    <img src="https://github.com/user-attachments/assets/f0c019ad-885d-4837-b72b-ef6ff1f85c0f" alt="Logo">
  </a>
  <br><br>
  cross.stream
</h1>
  <p align="center">
    Local-first event streaming for building reactive workflows and automation.
    <br />
    <a href="#about">About</a>
    ·
    <a href="https://cablehead.github.io/xs/">Documentation</a>
    ·
    <a href="https://discord.com/invite/YNbScHBHrh">Connect</a>
    ·
    <a href="#built-with-">Built with</a>
  </p>
</p>

<p align="center">
  <a href="https://github.com/cablehead/xs/actions/workflows/ci.yml">
    <img src="https://github.com/cablehead/xs/actions/workflows/ci.yml/badge.svg" alt="CI">
  </a>
  <a href="https://discord.com/invite/YNbScHBHrh">
    <img src="https://img.shields.io/discord/1182364431435436042?logo=discord" alt="Discord">
  </a>
  <a href="https://crates.io/crates/cross-stream">
    <img src="https://img.shields.io/crates/v/cross-stream.svg" alt="Crates">
  </a>
  <a href="https://docs.rs/cross-stream">
    <img src="https://docs.rs/cross-stream/badge.svg" alt="Docs.rs">
  </a>
</p>

## What's an event streaming store?

If you think of an "event" like a frame in a movie—a small package on a
timeline—an event streaming store is a database designed to record these frames
in strict order, append-only, so they can be replayed or reacted to later.

For example, you might append a frame every time a message is
[posted in a specific Discord channel](examples/discord-bot). You can then
[`.cat`](https://cablehead.github.io/xs/reference/xs-nu/#cat) the stream to
review all captured messages, and—if you're in a
[Nushell](https://www.nushell.sh) session—use pipelines to filter, aggregate, or
process them with a CLI tool.

## Quick Start

See the
[installation guide](https://cablehead.github.io/xs/getting-started/installation/)
to get started.

## Features

- **Reactive Workflows**: Build actors that automatically respond to events as
  they flow through the stream
- **CLI Integration**: Turn any command-line tool into a streaming component
  with services
- **Nushell Native**: First-class integration with Nushell for powerful data
  processing pipelines
- **Real-time Streaming**: Subscribe to live event feeds and build responsive
  applications
- **Content Addressable**: Efficient storage and deduplication of large payloads
- **Local-first**: Your data stays on your machine, no cloud dependencies
  required

## Connect

Join our [Discord](https://discord.com/invite/YNbScHBHrh) to ask questions or
share ideas.

## Built with 🙏💚

- [fjall](https://github.com/fjall-rs/fjall): for indexing and metadata
- [cacache](https://github.com/zkat/cacache-rs): for content (CAS)
- [hyper](https://hyper.rs/guides/1/server/echo/): provides an HTTP/1.1 API over
  a local Unix domain socket for subscriptions, etc.
- [Nushell](https://www.nushell.sh): for scripting and
  [interop](https://utopia.rosano.ca/interoperable-visions/)
- [iroh](https://www.iroh.computer): QUIC-based P2P transport for exposing and
  accessing streams
