Skip to content

Releases: compio-rs/compio

v0.19.0-rc.1

23 Apr 11:38
1cc6f1a

Choose a tag to compare

v0.19.0-rc.1 Pre-release
Pre-release

We made huge progresses in this release. 160 PRs have been merged. Please refer to the sections below for a migration guide.

What's Changed

  • compio-buf
    • IoBufMut::ensure_init (#884)
  • compio-io
    • Ancillary IO (#730, #734, #737, #795, #843)
    • The managed IO traits have been refactored (#820)
    • Multishot IO (#732)
    • Framed IO updates (#749, #752)
    • AsyncStream has been refactored (#874)
    • Duplex forwarding for BufReader/BufWriter (#695)
  • compio-driver
    • OpCode refactor: remove the usages of Pin and introduce the Control API (#753, #803, #804, #859)
    • Multishot IO: ReadMulti, RecvMulti, RecvFromMulti, RecvMsgMulti, AcceptMulti (#748, #715, #747, #842)
    • Zero-copy IO: SendZc, SendMsgZc (#754, #755)
    • More POSIX ops: Bind, Listen, Pipe (#806, #807)
    • BufferPool refactor (#820, #854)
    • Fd registering (#718)
    • Public APIs exposes rustix types (#876)
  • compio-executor: this is a new low-level crate to replace async-task. It is not exported from the monocrate.
  • compio-runtime
    • The mod event has been removed (#707)
    • AsyncFd & PollFd have been moved to compio-runtime (#662)
    • Runtime::submit_multi (#743, #830)
    • Future combinator (#665, #825)
  • compio-fs
    • Dir support (#703)
    • Multishot IO (#830)
  • compio-net
    • All send* methods pass MSG_NOSIGNAL now (#835)
    • *Listener::incoming: a Stream to accept incoming connections forever (#747, #759)
    • TcpSocket & UnixSocket: new socket types for convenience (#817)
    • Multishot IO (#830, #838)
    • Socket state support (experimental): *Stream::sock_nonempty to indicate whether there's more data internally to read. Only available on io-uring (#861)
  • compio-signal
    • This crate becomes runtime-agnostic (#797)
    • The signalfd-based implementation has been removed (#794)
  • compio-tls
    • LazyConfigAcceptor for rustls (#686)
    • futures traits compatibility (#868, #874)
  • compio-ws
    • futures traits compatibility (#875)

Migration guide

  • compio-io
    • The managed IO traits don't allow associating the buffer pool types now. The implementors are required to manage their buffer pool implicitly.
    • AsyncStream require the inner stream to implement Splittable now. It is true for socket streams and pipes. TLS and WebSocket streams are futures-compatible already and don't need to be wrapped inside AsyncStream.
  • compio-driver
    • Each OpCode is associated with a Control type, which keeps the references to the fields inside the opcode. It will be dropped after the opcode being completed, and before the opcode being unboxed and returned to the user. The Control type is usually just (), or a custom struct containing typically SysSlice, cmsg, or aiocb. The implementor should fill it inside OpCode::init. The driver ensures that the address of the control instance doesn't change, so that it is able to store self-references.
    • Proactor is always !Send now. Please ensure you're using it in a single thread.
    • Some public APIs require rustix types instead of raw primitives or libc types.
    • About multishot opcodes, please refer to SubmitMulti in compio-runtime for a correct usage.
  • compio-runtime
    • Event has been removed. Please use AsyncFlag from the crate synchrony.
    • There's no spawn_unchecked at all. No alternative for this unsafe method.
  • compio-fs
    • On Unix, pipe::anonymous is async now.
    • File doesn't implement AsyncReadMultiAt because io-uring doesn't support it.
  • compio-net
    • SocketOpts has been removed. Use TcpSocket or UnixSocket instead.
    • send_zerocopy is not always faster than send. Please profile your use case for an efficient strategy.
  • compio-tls
    • TlsStream & MaybeTlsStream are futures-compatible now.
  • compio-ws
    • It's runtime-agnostic by default now. The compio-related functionalities need connect feature to be enabled.
    • WebSocketStream is futures-compatible now.

New Contributors

Full Changelog: v0.18.0...v0.19.0-rc.1

v0.18.0

29 Jan 15:01
da39e71

Choose a tag to compare

Generated by Copilot

compio

Breaking Changes

  • Split fs and net out of the runtime feature; enable them explicitly. (#564)
  • split now uses synchrony semantics. (#640)

Features

  • Add the first runtime future combinator with_personality. (#639)

compio-driver

Breaking Changes

  • Enable full io_uring fallback path. (#656)
  • Make OpCode an unsafe trait; implementors must uphold explicit safety invariants. (#650)
  • Make OpCode::cancel safe (API contract change). (#575)

Features

  • io_uring personality APIs (register_personality, set_personality, with_personality, etc.). (#630)
  • Poll driver multi‑fd support (enables splice readiness across multiple fds). (#623)
  • Add splice op in driver (including stub support and kernel‑version checks). (#609)
  • Add truncate‑file support across drivers. (#611)
  • Fill all supported statx fields for accurate metadata. (#625)
  • Distinguish Read/Write vs Recv/Send and add socket flags support. (#567)
  • Add stable PollOpCode/IourOpCode aliases for downstream implementors. (#566)
  • Use stat64 on gnulinux for large‑file correctness. (#597)

compio-runtime

Breaking Changes

  • Refactor submit future: submit() now yields a Submit future that submits on first poll; use submit(op).with_extra(). (#632)

Features

  • Add with_personality future combinator. (#639)
  • Expose named submit future types. (#615, #614)

compio-fs

Features

  • Add Linux/Android splice API and tests. (#635)
  • Add truncate‑file API support. (#611)
  • Use stat64 where available for correct metadata. (#597)

compio-net

Breaking Changes

  • Replace TcpOpts with SocketOpts across all sockets; APIs now take &SocketOpts. (#573)

Features

  • Distinguish Read/Write vs Recv/Send and support socket flags. (#567)

compio-io

Breaking Changes

  • Framed now supports generic buffers (trait bounds and usage changes). (#642)
  • split uses synchrony semantics. (#640)
  • Enable fallible frame extraction for Framed. (#631)

Features

  • Add reserve/reserve_exact for IoBufMut. (#578)

compio-buf

Breaking Changes

  • Generic buffer support for Framed (compatibility changes). (#642)

Features

  • Add reserve/reserve_exact for IoBufMut. (#578)
  • Make BufResult compatible with more Result types. (#569)

compio-quic

Breaking Changes

  • Redesign QUIC IO APIs. (#593)

Features

  • Sync recent changes from quinn-udp. (#592)

compio-ws

Breaking Changes

  • Adopt SocketOpts changes from compio-net. (#573)

compio-process

Breaking Changes

  • Submit future refactor impacts runtime integration. (#632)

compio-dispatcher

Features

  • Use synchrony for driver/quic dispatcher path. (#628)

New Contributors

Full Changelog: v0.17.0...v0.18.0

v0.17.0

01 Dec 08:44
5006cc5

Choose a tag to compare

What's Changed

Notable breaking changes

  • aws-lc-rs related features are deprecated and removed by @George-Miao in #521
  • All crates have been updated to edition 2024.
  • Some methods of compio-ws has been removed to match the signature of tungstenite

New Contributors

Full Changelog: v0.16.1...v0.17.0

v0.16.1

16 Nov 07:48
78afba6

Choose a tag to compare

What's Changed

  • compio-driver
    • feat: Socket op fallbacks to blocking if the kernel doesn't support it #507
  • compio-io
    • fix: Framed won't stop reading if underlying IO returns Ok(0) #497
    • fix: AsyncStream is unsound #499
    • feat: make SyncStream growable #501 #509
  • compio-runtime
  • compio-tls
    • fix: the rustls adapter hangs #499
  • compio-ws
    • feat: new crate for websocket #501

New Contributors

Full Changelog: v0.16.0...v0.16.1

v0.16.0

06 Sep 14:03

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.15.0...v0.16.0

v0.15.0

22 Jun 08:11
828060b

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.14.0...v0.15.0

v0.14.0

27 May 02:40
f64cfd5

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.13.1...v0.14.0

v0.13.1

25 Nov 07:08

Choose a tag to compare

What's Changed

Full Changelog: v0.13.0...v0.13.1

v0.13.0

21 Nov 16:17
3628b0f

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.12.0...v0.13.0

v0.12.0

20 Sep 15:13
5cf46a9

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.11.0...v0.12.0