Library

actor-framework 1.2.0

Version1.2.0
Stars★ 3,437
Released2026-09-25

An Open Source Implementation of the Actor Model in C++

Release notes

### Changed

- We have replaced the actor clock implementation that the actor system uses to
  delay and schedule messages. The new implementation is much more efficient,
  outperforming the previous version by an order of magnitude. It is worth
  noting that this is a purely internal change and does not affect the API.

### Added

- Requests that use the new `mail` API now support `as_single` for turning the
  response handle into a `flow::single` object.
- The class `caf::async::consumer_resource<T>` now has a new member
  function `consume_on` that allows actors to consume data from the resource
  without having to use a flow.
- The class `caf::async::producer_resource<T>` now has a new member function
  `produce_on` that allows actors to produce data without having to use a flow.
  This is the symmetric counterpart to `consume_on` on `consumer_resource<T>`
  and should only be used when flows are not suitable for the use case at hand.
- The class `caf::net::ssl::context` now includes `set_cipher_list()` for
  configuring the cipher list used by the SSL/TLS backend.
- The class `caf::net::ssl::context` now has new `backend()` and
  `backend_name()` functions to query which SSL/TLS library is in use and
  `backend_version()` to retrieve the backend-specific version number.
  Currently, only OpenSSL is supported as a backend implementation in CAF, but
  the API has been designed to prepare for different backends in the future.
- The classes `caf::net::lp::client_factory` and
  `caf::net::web_socket::client_factory` now have a new member function
  `start_with` that allows starting a connection with custom buffers. This
  enables users to provide their own `async::consumer_resource` and
  `async::producer_resource` instances instead of having the factory create them
  automatically.

### Fixed

- Add a missing implementation for `caf::version::check_abi_compatibility`.
- Fix a deadlock when disposing an monitor action while it is running (#2169).
- Fix a resource leak where sockets were not closed on error, e.g., when an HTTP
  server rejects an incoming request at the protocol level (#2212).
- Fix a build error when passing a TCP accept socket to the high-level DSL for
  starting an HTTP server.
- Fix a bug in the HTTP server implementation with the `max-connections` setting
  that caused CAF to reject all incoming connections after reaching the limit
  even after some connections had already been closed (#2227).
- Fix a bug in the network stack of CAF that could lead to inconsistent state if
  the OS re-uses a socket ID too quickly after closing a socket.
- Fix case-sensitive HTTP header field name comparisons in the WebSocket client
  handshake validation. HTTP header names are case-insensitive according to the
  standard, so servers responding with lowercase headers like `upgrade` instead
  of `Upgrade` were incorrectly rejected.
- Fix an indexing bug when using `message_builder::append_tuple`.
- Fix handling of fixture management in the unit test framework. Previously, CAF
  would create a new instance of the fixture before destroying the previous
  instance. This could lead to surprising results if a fixture has globally
  visible side effects in its constructor or destructor. By always deleting the
  previous fixture instance before creating a new one, we ensure that only one
  fixture instance exists at any time.
- Fix an issue during connection cleanup that caused CAF to send a repeated
  close frame on WebSocket connections.
- Fix a bug in actor shells when calling `quit` (#2299).
- Include the port number in the `Host` header field when making HTTP requests
  to non-standard ports (#2309).
- When running an HTTP server, CAF now recognizes the `Expect: 100-continue`
  HTTP header field and responds to it accordingly.
- Fix integer encoding of the `CAF_VERSION` macro (#2350).
- Fix a rare crash when creating a flow from an SPSC buffer via
  `from_resourc…

Share this resource


Discovered 2026-09-25 Source GitHub Archive 2026-09 →