Skip to content

chore: release v8.0.0#153

Merged
1313 merged 1 commit into
mainfrom
release-plz-2026-06-18T21-19-30Z
Jun 19, 2026
Merged

chore: release v8.0.0#153
1313 merged 1 commit into
mainfrom
release-plz-2026-06-18T21-19-30Z

Conversation

@1313

@1313 1313 commented Jun 18, 2026

Copy link
Copy Markdown
Collaborator

🤖 New release

  • screencapturekit: 7.0.1 -> 8.0.0 (✓ API compatible changes)
Changelog

8.0.0 - 2026-06-19

Added

  • (async) implement futures::Stream for AsyncSCStream and recording events
  • (async) multi-output AsyncSCStream (capture A/V from one stream)
  • (async) [breaking] propagate stop errors in AsyncSCStream; consolidate stop delegate
  • (async) [breaking] make AsyncSCStream lifecycle methods truly async

Fixed

  • (stream) surface failed output-handler registration instead of dropping it silently

Other

  • (deps-dev) raise bitflags cap to <2.14 (fixes fresh-resolve to 2.13.0)
  • (readme) update for v8 async API
  • (examples) add audio+video multi-output showcase; apply rustfmt
  • restore Recall.ai sponsor banner and update v6 references to v7

Changed

  • [breaking] AsyncSCStream::start_capture, stop_capture, update_configuration,
    and update_content_filter are now genuinely async: they return a
    StreamControlFuture (resolving to Result<(), SCError>) that you .await,
    instead of blocking the calling thread on a condition variable. Awaiting them
    parks the task via its Waker and resumes from the Swift completion callback,
    so they no longer stall single-threaded/current-thread executors. This makes
    the async surface fully waker-based and consistent with the underlying Swift
    Task { try await … } entry points.

    Migration: add .await (e.g. stream.start_capture().await?). For a
    blocking call, use the synchronous SCStream directly via
    stream.inner().start_capture().

  • AsyncSCStream now installs a stream delegate so that when ScreenCaptureKit
    stops the stream with an error (display disconnected, permission revoked, …)
    the sample iterator is closed — next().await resolves to None instead of
    pending forever — and the error is recorded (see take_error). AsyncSCStream::new
    likewise no longer silently swallows a failed output-handler registration: it
    closes the stream and records the error.

  • The stream engine now dispatches a single canonical stop callback,
    SCStreamDelegateTrait::did_stop_with_error, on an error stop. It no longer
    also calls stream_did_stop for the same event (the previous behavior fired
    both). StreamCallbacks::on_stop keeps working (it is now driven by
    did_stop_with_error).

Added

  • async_api::StreamControlFuture — the Send future returned by the
    AsyncSCStream lifecycle methods.
  • AsyncSCStream::take_error — returns the SCError that stopped the stream,
    if any, after next() reports the iterator closed.
  • Multi-output async capture: AsyncSCStream::add_output_type registers an
    additional output type (e.g. add audio to a screen stream), and
    AsyncSCStream::next_typed / try_next_typed (plus the NextSampleTyped
    future) yield each sample together with its SCStreamOutputType so audio and
    video can be captured from one stream and told apart.
  • futures::Stream integration (enabled by the async feature, via a new
    optional futures-core dependency): AsyncSCStream::frames /
    frames_typed and AsyncSCRecordingOutput::events return
    futures_core::Streams (SampleStream, TypedSampleStream,
    RecordingEventStream) so captures plug into the StreamExt combinator
    ecosystem (map, filter, take, for_each, collect, …).

Deprecated

  • SCStreamDelegateTrait::stream_did_stopScreenCaptureKit only reports
    stops via did_stop_with_error, which is now the single source of truth;
    the engine no longer invokes stream_did_stop. Implement did_stop_with_error
    instead.


This PR was generated with release-plz.

@1313 1313 changed the title chore: release v7.0.2 chore: release v8.0.0 Jun 19, 2026
@1313 1313 force-pushed the release-plz-2026-06-18T21-19-30Z branch 3 times, most recently from 1e45f38 to 096f026 Compare June 19, 2026 06:18
@1313 1313 force-pushed the release-plz-2026-06-18T21-19-30Z branch from 096f026 to 31a21c5 Compare June 19, 2026 06:29
@1313 1313 merged commit dbeaed0 into main Jun 19, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant