8 releases (breaking)

0.8.0 May 18, 2024
0.7.0 May 5, 2024
0.6.0 Dec 29, 2023
0.5.0 Jun 25, 2023
0.2.0 Apr 13, 2023

#11 in #composable

Download history 112/week @ 2024-02-13 108/week @ 2024-02-20 115/week @ 2024-02-27 25/week @ 2024-03-05 66/week @ 2024-03-12 20/week @ 2024-03-19 68/week @ 2024-03-26 88/week @ 2024-04-02 140/week @ 2024-04-09 149/week @ 2024-04-16 39/week @ 2024-04-23 237/week @ 2024-04-30 45/week @ 2024-05-07 415/week @ 2024-05-14 225/week @ 2024-05-21 31/week @ 2024-05-28

774 downloads per month
Used in 2 crates

Apache-2.0

50KB
1.5K SLoC

Gasket

An opinionated Rust library for building application using data pipeline semantics. It uses a similar approach to the "Actor model", but fine-tuned for heavy, composable data processing.

Why

  • spliting data processing logic into small stages facilitates development (my own experience)
  • stages are easily composable
  • pipelines are a good abstraction for implementing observability
  • robust loops with error handling, backoff retries, etc are ubiquitous and hard to implement correctly
  • traditional async loops hide too much of the complexity, hard to optimice at scale

Goals

  • zero-cost abstraction (sort of)
  • staticly typed stages, dynamic composition of pipeline at runtime
  • developer has full-control over each work unit
  • robust work loop provided by the library
  • error handling out-of-the-box, with different policies (retry, exit, backoff)
  • fully observable out-of-the-box (metrics, traces)
  • multi-thread pipeline, async option inside stage
  • ergonomic pipeline setup
  • back-pressure out-of-the-box
  • hot swap of stages (add / remove)

Status

Current state of the lib is: "only I understand it". I'm experimenting with the api surface, so there are constant breaking changes happening frequently.

Dependencies

~3–5MB
~80K SLoC