View Source Changelog



  • Specify the order in which state fields will be printed in the error logs. #614
  • Fix clock selection #626
  • Log messages in the default handle_info implementation #680
  • Fix typespecs in Membrane.UtilitySupervisor #681
  • Improve callback return types and group actions types #702
  • Add crash_reason to handle_crash_group_down/3 callback context in bins and pipelines. #720


  • Introduce :remove_link action in pipelines and bins.
  • Add children groups - a mechanism that allows refering to multiple children with a single identifier.
  • Rename remove_child action into remove_children and allow for removing a children group with a single action.
  • Add an ability to spawn anonymous children.
  • Replace Membrane.Time.round_to_<unit_name> with Membrane.Time.as_<unit_name>/2 with second argument equal :round. Rename Membrane.Time.round_to_timebase to Membrane.Time.divide_by_timebase/2. #494
  • Remove :playback action. Introduce :setup action. #496
  • Add Membrane.Testing.Pipeline.get_child_pid/2. #497
  • Make callback contexts to be maps. #504
  • All Membrane Elements can be compatible till now on - pads working in :pull mode, handling different demand_units, can be now linked.
  • Output pads working in :pull mode should have their demand_unit specified. If case it's not available, it's assumed that the pad handles demands in both :bytes and :buffers units.
  • Rename callbacks handle_process/4 and handle_write/4 to handle_buffer/4 in #506
  • The flow control of the pad is now set with a single :flow_control option instead of :mode and :demand_mode options.
  • Remove _t suffix from types #509
  • Implement automatic demands in Membrane Sinks and Endpoints. #512
  • Add handle_child_pad_removed/4 callback in Bins and Pipelines. #513
  • Introduce support for crash groups in Bins. #521
  • Remove assert_pipeline_play/2 from Membrane.Testing.Assertions. #528
  • Make sure enumerable with all elements being Membrane.Buffer.t(), passed as :output parameter for Membrane.Testing.Source won't get rewrapped in Membrane.Buffer.t() struct.
  • Implement Membrane.Debug.Filter and Membrane.Debug.Sink. #552
  • Add :pause_auto_demand and :resume_auto_demand actions. #586
  • Send :end_of_stream, even if it is not preceded by :start_of_stream. #557
  • Fix process leak in starting clocks. #594
  • Add child exit reason to the supervisor exit reason. #595
  • Remove default implementation of start_/2, start_link/2 and terminate/2 in modules using Membrane.Pipeline. #598
  • Remove callback Membrane.Element.WithInputPads.handle_buffers_batch/4. #601
  • Sort component state fields in the error logs in the order from the most to the least important. #614


  • Separate elementname and pad arguments in handle_element{start, end}_of_stream signature #219
  • Refine communication between parent and its children #270
  • Add handle_call/3 callback in the pipeline, as well as a :reply and :reply_to actions. Rename handle_other/3 callback into handle_info/3 #334
  • Add Membrane.FilterAggregator that allows to run multiple filters sequentially within one process. #355
  • Log info about element's playback state change as debug, not as debug_verbose. #430
  • Rename Membrane.Time.to_<unit name>/1 into Membrane.Time.round_to_<unit name>/1 to indicate that the result will be rounded. Make Membrane.Time.<plural unit name>/1 accept %Ratio{} as an argument. Add Membrane.Time.round_to_timebase function.
  • New spec action syntax - the structure of pipeline is now defined with the use of Membrane.ChildrenSpec
  • Rename :caps to :stream_format.
  • Use Elixir patterns as :accepted_format in pad definition.
  • Delete :ok from tuples returned from callbacks.
  • Remove :type from specs passed to def_options/1 macro in bins and elements.
  • Add Membrane.Testing.MockResourceGuard.



  • Automatic demands #313
  • Stop forwarding notifications by default in bins #358
  • More fine-grained control over emitted metrics #365

### PRs not influencing public API:

  • Added log metadata when reporting init in telemetry #376
  • Fix generation of pad documentation inside an element #377
  • Leaving static pads unlinked and transiting to a playback state other than :stopped will result in runtime error (previously only a warning was printed out). #389
  • It is possible now to assert on crash group down when using Testing.Pipeline. #391


  • Fixed PadAdded spec #359

PRs not influencing public API:

  • Prevent internal testing notifications from reaching pipeline module #350
  • Fix unknown node error on distribution changes #352
  • Add new type of element, Membrane.Endpoint #382


  • allow telemetry in version 1.0 only #347

PRs not influencing public API:

  • fix action enforcing CHANGELOG update with PR #345
  • Release membrane_core v0.8.1 #348


Release notes:

  • PTS and DTS timestamps were added to Membrane.Buffer structure explicitly. Timestamps should no longer live in Membrane.Buffer.metadata field #335.

PRs not influencing public API:

  • add CHANGELOG update verification #340
  • action enforcing changelog fix #342
  • bump version to 0.8.0 #344