Well, we go into a bit more detail in the blog post (2nd link above). But essentially there are a lot of custom features that focus on time, specifically time-series data. Also, the stream context feature is quite different, allowing you to send different types of data (time series, events, binary, etc) in one ordered stream, bound to one partition. Regarding Faust specifically, the big difference is in the approach to stateful processing. Faust basically copies Kafka's native KafkaStream's architecture, where state is stored in topics - our library, on the other hand, avoids this by using a K8s persistence volume (shared in a stateful set) to persist state and manage state checkpointing.