Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

Added

  • Per-endpoint feature flags for the built-in web endpoints: web_stats_enabled, web_graph_enabled, web_router_enabled, web_tables_enabled and web_metrics_enabled. Previously debug was the only control, and it enabled the statistics and graph endpoints together, while /router and /table could not be turned off at all — even though /table serves table data over HTTP. The statistics and graph flags take their default from debug, so behaviour is unchanged unless you set them.

  • New /performance/ endpoint (web_metrics_enabled, off by default) returning throughput, latency percentiles, consumer lag and table statistics as JSON. Consumer lag and latency percentiles are computed here — Monitor tracks read and log-end offsets but never derives lag, and keeps raw latency deques rather than summaries. Needs no extra dependency, and is independent of both debug and faust.sensors.prometheus. Custom frameworks can expose the same payload with faust.sensors.metrics.performance_metrics().

  • Framework-neutral web servers: App.web_server() accepts any mode.Service as a replacement for the legacy faust.web/aiohttp stack. The custom server starts after table recovery and obeys web_enabled/--without-web.

  • faust.contrib.asgi: co-host any ASGI application with the worker, in one process and one event loop. faust_lifespan() runs Faust from an ASGI lifespan; FaustLifespanMiddleware supplies lifespan support to Django and other ASGI applications without a lifespan hook; serve_asgi() installs the ASGI app as the worker’s only web server. New faust[asgi] extra; faust[fastapi] adds FastAPI as well.

  • faust.contrib.opentelemetry: OpenTelemetry tracing. setup_opentelemetry() continues a trace from Kafka message headers into your agents — the hop opentelemetry-instrumentation-aiokafka cannot bridge, because Faust’s consumer runs in its own thread. FastAPI apps are instrumented automatically when an SDK is configured. New faust[opentelemetry] extra.

  • New userguide page: FastAPI and other ASGI applications.

Fixed

  • Faust apps no longer resolve an event loop when agents, tables or the transport are declared at import time. Previously that pinned the app to a loop that was never run, so starting it from asyncio.run() — as uvicorn does — failed with “Please create objects with the same loop as running with” or “Task … got Future … attached to a different loop” (#322, #435, #448).

  • faust[aerospike] installed nothing: requirements/extras/aerospike.txt shipped without the matching BUNDLES entry in setup.py, despite being advertised in the README. A new test guards both directions of that mapping.

  • agent.test_context() records what a yielding agent yields even when its function is not itself an async-generator function — a callable object with an async-generator __call__, or a function returning an async generator. Previously the wrapper classified the agent with inspect.isasyncgenfunction(), which is False for both shapes, so they were treated as never yielding and agent.results was filled with the values sent in rather than the values yielded. Nothing raised, so tests kept passing while asserting against their own input.

  • Every Kafka rebalance failed when opentracing was not installed. The no-op stand-in Faust falls back to gave its spans no tracer, but traced_from_parent_span starts a child span from parent.tracer, so on_partitions_revoked and on_partitions_assigned both raised AttributeError. Because on_rebalance_start() had already run, the app was left mid-rebalance rather than crashing outright, surfacing as agents that timed out and stalled. The stand-in now matches the real library across the surface Faust uses, and a new parity test guards it.

  • traced_from_parent_span() no longer assumes the parent span it is given has a tracer. A span is whatever the configured tracer hands back, and starting a child from parent.tracer breaks on any that carries none — as the no-op stand-in’s did before the fix above (#786). Tracing is instrumentation, so it now runs the wrapped function untraced rather than failing its caller.

Changed

  • The examples/fastapi/ directory is now examples/fastapi_project/. The old name shadowed the real fastapi package when running the sibling examples/fastapi_example.py, so neither example could be run as documented.

v0.12.1 - 2026-07-19

Compare with v0.12.0

Packaging-only patch release. v0.12.0’s wheels published to PyPI, but its source distribution was rejected under PEP 625; this release fixes the sdist filename so the full set of artifacts publishes.

Fixed

  • Build the source distribution with python -m build and a PEP 625-compliant (normalized) filename — faust_streaming-<version>.tar.gz instead of the legacy faust-streaming-<version>.tar.gz that PyPI now rejects (#712).

v0.12.0 - 2026-07-19

Compare with v0.11.3

Added

  • Re-add the confluent-kafka transport driver (confluent://, install with the faust[ckafka] extra), rewritten and tested against the released confluent-kafka API.

  • Support Python 3.13 and 3.14 (tested with and without the Cython extensions).

  • on_clear handlers on (Global)Table and ChangeloggedSet (#645).

  • Live-broker integration test harness: CI now starts a real Kafka broker and round-trips messages through both the aiokafka and confluent-kafka client libraries (#706).

Changed

  • Dropped support for Python 3.8 and 3.9 (#650); the minimum supported version is now Python 3.10.

  • Replaced the unmaintained aredis with redis-py for the Redis store and leader (#635).

  • Support recent aiokafka releases: handle 0.13.0 removing the api_version parameter (#674), and guard aiokafka metadata/admin calls by the negotiated protocol-API version while keeping the Faust partition assignor for changelog tables (#682).

  • Modernize CI and wheel building: updated wheel runners, Windows wheels, a refreshed cibuildwheel, and an updated test matrix (#690).

  • Pin black/isort and update the click constraint for reproducible CI (#677, #680).

Fixed

  • Fix release-artifact upload/download for upload-artifact@v4 (#684).

Dependencies

  • Runs on the maintained mode fork mode-streaming >= 0.4.0.

  • aiokafka >= 0.10.0, now compatible with recent aiokafka releases (0.13.x / 0.14.x) — see #674 and #682.

  • Adds confluent-kafka >= 2.0.0, required by the optional faust[ckafka] transport driver.

  • The faust[cchardet] extra now uses the maintained faust-cchardet fork in place of the unmaintained cchardet.

v0.8.10 - 2022-09-14

Compare with v0.8.9

Changed

  • Change aioeventlet extension to faust-aioeventlet

  • Update versioning of click>=6.7,<8.2

v0.8.9 - 2022-09-04

Compare with v0.8.8

Added

  • Add improvements to documentation (#351) (2091326 by William Barnhart).

  • Added aerospike to stores (#350) (ba000ee by William Barnhart).

  • Add aerospike docs (#348) (3680bbd by William Barnhart).

  • Add noqa: b024 to base classes to pass lint check (#344) (7648c6e by William Barnhart).

  • Address topics.py error in #175 by callling message.message (#342) (76f720a by William Barnhart).

Changed

  • Change version to 0.8.9 in preparaion of next release (6475f8c by William Barnhart).

Fixed

  • Fix running make develop and restore pre-commit tool (#145) (85534ec by Taybin Rutkin).

v0.8.8 - 2022-08-15

Compare with v0.8.7

Added

  • Adding intervaltree to manage gaps in topics to prevent oom (#282) (1e7be3a by Vikram Patki).

v0.8.7 - 2022-08-11

Compare with v0.8.6

Added

  • Add dist.yml for uploading builds to pypi (#338) (79d672c by William Barnhart).

Fixed

  • Fix recovery of partitions for large volume writes (#335) (5a2ba13 by William Barnhart). Related issues/PRs: #333

Removed

  • Remove a broken link in readme.md (#332) (9eb770a by Sefa Degirmenci).

v0.8.6 - 2022-07-19

Compare with v0.8.5

Added

  • Add method to rocksdb for backing up partitions (#304) (0bb2685 by William Barnhart).

Fixed

  • Fixed filter not acking filtered out messages. (#208) (a887571 by Matthew Drago).

  • Fix twisted link in readme.md (#309) (49574b2 by William Barnhart).

  • Fix flake warning with bound loop var (#326) (1e9d4a5 by William Barnhart).

v0.8.5 - 2022-06-02

Compare with v0.8.4

Added

  • Add support for additional sentry tags and arguments (#285) (c230076 by Ran K).

  • Added connections_max_idle_ms for consumer and producer (#281) (84302f5 by Magnus Zotterman).

  • Added metadata_max_age_ms option for both consumer and producer (#279) (3b7f079 by Roman).

Fixed

  • Fix readme typos (#308) (26ff8fc by William Barnhart).

  • Fix user guide create channel example to run (#299) (f52b783 by Robbie Palmer).

  • Fix (#287) (ed026a0 by ameen-orca).

  • Fix: rewrite non enabled unit tests (#272) (d15d349 by Christoph Brand).

  • Fix aiohttp threadedproducer driver python36, add unit tests (#277) (784bee7 by Christoph Brand).

v0.8.4 - 2022-02-25

Compare with v0.8.2

Fixed

  • Fix: producer send pending check with threads (#270) (4e32327 by Christoph Brand).

  • Fix name_prefix usage (#266) (ea8be8c by Julien Surloppe).

v0.8.2 - 2022-02-04

Compare with v0.8.1

Fixed

  • Fix errors in seek when flow is not active (#264) (a313821 by Vikram Patki).

v0.8.1 - 2022-01-19

Compare with v0.8.0

v0.8.0 - 2022-01-11

Compare with v0.7.9

v0.7.9 - 2022-01-07

Compare with v0.7.8

Fixed

  • Fix condition to delete old table keys (#251) (a0e9a31 by Dima Kovalchuk).

v0.7.8 - 2021-12-18

Compare with v0.7.7

v0.7.7 - 2021-12-17

Compare with v0.7.6

Fixed

  • Fix race conditions on rebalance (#241) (6f3c783 by Vikram Patki).

v0.7.6 - 2021-12-15

Compare with v0.7.5

Removed

  • Remove wait_first and extra log (#240) (6e5c301 by ekerstens).

v0.7.5 - 2021-12-14

Compare with v0.7.4

v0.7.4 - 2021-12-13

Compare with v0.7.3

Fixed

  • Fix race condition when buffers are full (#237) (7d861dc by Vikram Patki). Related issues/PRs: #166

v0.7.3 - 2021-12-10

Compare with v0.7.2

v0.7.2 - 2021-12-10

Compare with v0.7.1

v0.7.1 - 2021-12-10

Compare with v0.7.0

v0.7.0 - 2021-12-03

Compare with v0.6.14

v0.6.14 - 2021-11-30

Compare with v0.6.13

Fixed

  • Fix for out of order events (#228) (7e3c60c by Vikram Patki).

  • Fix flake8 (#227) (3caf810 by ekerstens).

  • Fixed the hello world example (02afc3c by Luís Braga).

v0.6.13 - 2021-11-29

Compare with v0.6.12

v0.6.12 - 2021-11-18

Compare with v0.6.11

Added

  • Add default to external_topic_distribution (#222) (23c2d90 by Stegallo).

v0.6.11 - 2021-11-17

Compare with v0.6.10

Added

  • Add all partitions of global tables as active in order to let them recover in the beginning (#213) (60a8696 by aoberegg).

Fixed

  • Fix recovery._resume_streams (#217) (e3bd128 by ekerstens).

  • Fix worker default web_host to be none (#210) (41200e4 by Ran K).

Removed

  • Remove outdated colorclass library (#204) (9385c81 by Taybin Rutkin).

v0.6.10 - 2021-10-21

Compare with v0.6.9

Added

  • Adding new feature to retry on aerospike runtime exceptions issue#202 (#203) (868d7a4 by Vikram Patki).

Fixed

  • Fix canonical url when setting either port of host from the cli (#196) (808312b by Ran K).

  • Fixes #197 (#198) (3959268 by David Parker).

  • Fix routing method #188 (#191) (835f37e by Ondřej Chmelař).

  • Fix for reassign table keys faust-streaming#171 (#174) (c1a6b0e by Philipp Jaschke).

  • Fix for #121 (#168) (fe343c0 by Taybin Rutkin).

  • Fix markdown formatting in changelog (727987b by Taybin Rutkin).

  • Fix lint warning (e80829c by Taybin Rutkin).

v0.6.9 - 2021-07-06

Compare with v0.6.8

Fixed

  • Fix error messages in faust app #166 (b06e579 by Vikram Patki 24489).

v0.6.8 - 2021-06-29

Compare with v0.6.7

Fixed

  • Fix for consumer errors in app #166 (#167) (761713b by Vikram Patki).

  • Fixed a few small mistakes in streams userguide (#161) (c45a464 by Dongkuo Ma).

v0.6.7 - 2021-06-07

Compare with v0.6.6

v0.6.6 - 2021-06-03

Compare with v0.6.5

Fixed

  • Fix string formatting error when logging slow processing (#156) (e71145c by Erik Forsberg). Related issues/PRs: #153

  • Fix record instances deserialize properly when returned by agent.ask (#152) (df0856f by tarbaig).

v0.6.5 - 2021-05-14

Compare with v0.6.4

Added

  • Adding replication factor to the leader topic (#150) (7ab0647 by Vikram Patki).

Fixed

  • Fix tests directory name in makefile (#134) (1a5c431 by Taybin Rutkin).

v0.6.4 - 2021-04-26

Compare with v0.6.3

Fixed

  • Fix rocksdb for use with global tables or tables that use_partitioner (#130) (ec3ac3e by aoberegg).

v0.6.3 - 2021-04-06

Compare with v0.6.2

Added

  • Adding changelog (72c59b7 by Vikram Patki 24489).

Fixed

v0.6.2 - 2021-03-12

Compare with v0.6.1

Added

  • Add app_name to prometheus metrics (#120) (e0010f7 by Alexey Kuzyashin).

v0.6.1 - 2021-02-28

Compare with v0.6.0

Fixed

  • Fix scan options (#117) (750e3ad by Vikram Patki).

  • Fix iterating over keys when changelog topic is set. (#106) (7d29cad by aoberegg).

  • Fix race (out of order) in flushing topics (wrong state is stored in changelog) (#112) (a841a0e by trauter).

  • Fix agents with multiple topics (#116) (70e5516 by Stevan Milic).

v0.6.0 - 2021-02-25

Compare with v0.5.2

Fixed

  • Fix table rebalance issue (#110) (cd136ad by Bob Haddleton).

v0.5.2 - 2021-02-19

Compare with v0.5.1

Fixed

  • Fix extra parameter (#101) (#109) (d3f28bd by Bob Haddleton).

v0.5.1 - 2021-02-18

Compare with v0.5.0

v0.5.0 - 2021-02-18

Compare with v0.4.7

v0.4.7 - 2021-02-10

Compare with v0.4.6

Added

  • Adding changelog for release (4f7735d by Vikram Patki 24489).

Fixed

  • Fix ipv6 address case in server_list function (#66) (05c0ff9 by Damien Nadé).

  • Fix commit exceptions (#94) (#95) (5e799c2 by Bob Haddleton).

v0.4.6 - 2021-01-29

Compare with v0.4.5

Fixed

  • Fixing race conditions in opening rocksdb (#90) (f51a850 by Vikram Patki).

  • Fix dropped messages when topic backpressure is enabled (#88) (#89) (5263720 by Bob Haddleton).

v0.4.5 - 2021-01-28

Compare with v0.4.3

Added

  • Adding performance improvement for getters (#87) (d4392d5 by Vikram Patki).

v0.4.3 - 2021-01-26

Compare with v0.4.2

v0.4.2 - 2021-01-21

Compare with v0.4.1

Added

  • Adding threaded producer (#68) (fda7e52 by Vikram Patki).

v0.4.1 - 2021-01-15

Compare with 0.4.0

Added

  • Add web_ssl_context to allow internal web server to support https (#69) (fcb6b18 by Bob Haddleton).

Fixed

  • Fix for outdated sensors after rebalancing (#72) (0a4d059 by krzysieksulejczak).

0.4.0 - 2020-12-22

Compare with v0.4.0

Changed

  • Change requirements from mode to mode-streaming (#65) (e239534 by Thomas Sarboni).

v0.4.0 - 2020-12-18

Compare with v0.3.1

Added

  • Add backpressure to slow stream processing to avoid filing up the buffer (#55) (ccaf0a7 by Vikram Patki).

Fixed

  • Fix for writebatch when not in recovery for standby writes (#56) (979ca5a by Vikram Patki).

  • Fix for rebalance exception causing recovery to crash (#57) (8d6758f by Vikram Patki).

v0.3.1 - 2020-12-07

Compare with v0.3.0

Fixed

  • Fix recovery issue in transaction and reprocessing message in consumer (#49) (be1e6db by Vikram Patki).

v0.3.0 - 2020-11-24

Compare with v0.2.2

v0.2.2 - 2020-11-20

Compare with v0.2.1

Fixed

  • Fix for canceled from mode (#42) (1131106 by Vikram Patki).

  • Fixed ack for tombstones in cython-stream (#39) (41d3e6b by trauter).

  • Fix commited offset is always behind the real offset by 1 (#33) (18230a7 by Vikram Patki).

  • Fix(aiokafka): release all fetch waiters (#32) (9fe472f by Vikram Patki).

  • Fix commited offset is always behind the real offset by 1 (361b09d by Maxim Musayev).

  • Fix(aiokafka): release all fetch waiters (8cd7ad4 by Bob Haddleton).

  • Fix: readme updated (7493b6e by marcosschroh).

v0.2.1 - 2020-11-13

Compare with v0.2.0

Fixed

v0.2.0 - 2020-11-11

Compare with v0.1.1

v0.1.1 - 2020-11-11

Compare with v0.1.0rc6

Fixed

  • Fixed recovery hang (107142c by Vikram Patki 24489).

  • Fix: web bind to should be 0.0.0.0 instead of localhost (ea9a322 by marcosschroh).

v0.1.0rc6 - 2020-11-10

Compare with v0.1.0rc5

Fixed

  • Fixed recovery hang (1f3111a by Vikram Patki 24489).

v0.1.0rc5 - 2020-11-09

Compare with v0.1.0rc3-2

Fixed

  • Fixed recovery hang (40ea0b0 by Vikram Patki 24489).

v0.1.0rc3-2 - 2020-11-08

Compare with v0.1.0

Fixed

  • Fixed recovery hang (7902e02 by Vikram Patki 24489).

  • Fixed recovery hang and undefined set_close method in aiokafka (06755bc by Vikram Patki 24489).

  • Fix: manifest and setup.py fixed. close #20 (d34b084 by marcosschroh).

  • Fix: codecov added (2caf669 by marcosschroh).

  • Fixed typo (774e36d by Vikram Patki 24489).

v0.1.0 - 2020-11-04

Compare with first commit

Added

  • First release of faust fork

  • Replaced robinhood-aiokafka with aiokafka

  • Implemented transaction support with aiokafka instead of using the the MultiTXNProducer in the robinhood-aiokafka version. Note that this new transaction implementation will create a producer for each kafka group/partition pair