NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #3143 most downloaded on crates.io
Rust bindings for GStreamer
Last release 16 days ago
21 Sep 2026
Ships fairly regularly
a new release about every 5 weeks
Nearly every release is documented
notes for 58 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
12 years old
128 releases · first in 2015
Store 1.19 as plugin version when building plugins with v1_20. Otherwise plugins fail to load with GStreamer versions below 1.20.0.
v1_20. Otherwise
plugins fail to load with GStreamer versions below 1.20.0.gst::Element::request_pad_simple() to actually show
up.…of request_pad() and in accordance with the deprecation in GStreamer 1.20.
#[repr(transparent)] where it is more correct and remove unneeded
#[repr(C)] annotations.gst::Message Debug impl.gst_rtsp_server::RTSPServer::attach() is fallible.gst::ElementFactoryListType is a proper bitflags type now instead of
generic u64.gst::PluginFeature::load() returns the same type as the one passed in.gst::PromiseFuture can no longer be freed while still
in scope.GError**s in subclassing code if they're not NULL.gst_player::PlayerVideoRenderer.gst::PARAM_FLAG_CONTROLLABLE and related bindings.gst_video::VideoOrientation and VideoOrientationMethod bindings.gst_check::Harness::pull_until_eos() bindings.ges::TransitionClip and OperationClip.gst_gl::GLMemory and related APIs.gst_gl::GLFilter and gst_gl::BaseSrc.gst::TagList::remove().gst::CapsFeatures and gst::Structure API based on glib::Quarks instead
of strings.gst_video::VideoFilter.gst_app::LeakyType,
gst_video::VideoDecoderRequestSyncPointFlags,
gst_rtp::RTPHeaderExtension, gst_audio::AudioLevelMeta,
gst_webrtc::WebRTCKind and various other new flags/enum types.gst_rtsp_server::RTSPMountPoints.gst_app::AppSink and AppSrc inherit from
gst_base::BaseSink and BaseSrc to avoid exposing API that is meant for
subclasses to applications.gst_app::AppSrc and AppSink signals that are also covered by the
callbacks. The callbacks are more flexible and have lower overhead.gst_base::BaseSink and BaseTransform
properties.gst_ prefix.get_ prefix anymore and GObject property
accessors don't include the _property_ part in the middle of their
function names anymore. Applications developers should use
fix-getters-calls to ease
migration of their applications.
Use fix-getters-def if you also
want your get functions definition to comply with the API standards applied
in this release.gst::ClockID bindings are refactored to use different types for
single-shot and periodic clock ids, which makes misuse harder.gst::ProxyPad extension trait uses trait functions instead of associated
functions now for usability reasons.Result<gst::FlowSuccess, gst::FlowError> for overriding flow returns
from pad probes.gst_video::VideoInfo::align() returns a Result instead of a bool.() in gst_sdp APIs.Display impl for gst::ClockTime provides better human-readable strings.gst::Element::link_filtered() and link_pads_filtered() takes a
non-optional caps now. That's easier to use and for not providing caps the
non-filtered variants of the functions exist.gst::Element::get_request_pad() is replaced by request_pad_simple() as a
simpler version of request_pad() and in accordance with the deprecation in
GStreamer 1.20.gst::ClockTime and APIs working on it were changed to make possibility of
using GST_CLOCK_TIME_NONE expressed in the type system.
Option<gst::ClockTime> can be None while gst::ClockTime is always a
valid time.One column per quarter.
Usage of the logging system with a GStreamer library with the logging system compiled out does not crash any longer.
gst_video::VideoTimeCode API when converting between
validated and unvalidated timecodes.gst::Element::get_current_state() and get_pending_state() convenience APIs.gst_audio::AudioConverterConfig for setting the configuration on e.g. the
audiomixer element. The low-level AudioConverter API is still not
included in the bindings.Make sure to use $crate in more macros to allow them to work without anything special in scope already.
$crate in more macros to allow them to work without
anything special in scope already.Display impl.Debug impl for gst_video::VideoTimeCode to print the correct type
name.v1_18.PadProbeReturn::Handled for events.EventRef::get_structure_mut() getter that allows changing the events'
structures.PhantomData markers and use repr(transparent) instead
of repr(C) where it is more correct.Correctly implement ExactSizeIterator on the AudioFormat and VideoFormat iterators. Previously they returned the overall size instead of the remaining
ExactSizeIterator on the AudioFormat and
VideoFormat iterators. Previously they returned the overall size instead
of the remaining size, and they didn't implement Iterator::size_hint().ExactSizeIterator on the buffer gst::Meta iterator. The
overall length is not known easily and the implementation would've simply
panicked in the past.gst::ClockID::wait_async_stream() for async integration for clock waiting.From / TryFrom impls for converting between gst::ClockTime and
std::time::Duration.Reset vfuncs if calling BaseTransformClass::configure() multiple times.
BaseTransformClass::configure() multiple times.gst::debug_remove_default_log_function() to actually remove the
default log function.gst_video::VideoFrame /
VideoFrameRef.gst::Pad::ProbeInfo code. This reduces
the code generated for each pad probe considerably.Use correct pointer for the plane data in gst_audio::AudioBuffer.
gst_audio::AudioBuffer.gst::GhostPad convenience constructors that take a target pad, similar
to the ones that existed in 0.15 and before.gst::parse_bin_from_description_with_name that allows setting a name
for the created bin without having to use unsafe code in application code.Allow calling gst::DebugCategory::new() before gst::init() again.
gst::DebugCategory::new() before gst::init() again.Updated bindings to 1.17.2, adding experimental 1.18 support. This can be opted-in via the "v1_18" feature flag but there might still be API changes i
gst::MemoryRef::dump() for dumping contents of a memory.gst::Bus::stream() instead of a custom constructor on the BusStream.Seqnum, GroupId and MetaSeqnum. These are
now proper wrapper types instead of plain integers, which makes misuse
harder.TryFrom impls for conversion between glib::DateTime and
gst::DateTime.get_allocator() functions to gst_base::{Aggregator, BaseTransform, BaseSrc}, and allow overriding BaseSrc::alloc().gst_base::PushSrc.gst::BufferCursor API that allows to handle a buffer as Read,
Write and Seek and accesses the underlying memories of the buffer
individually without mapping them all together.gst::Plugin::get_plugin_name().gst_video::VideoAFDMeta and VideoBarMeta.gst_audio::AudioFormat and
gst_video::VideoFormat.gst_video::VideoSink.gst::Pad can be constructed via the builder pattern and gst::PadBuilder
now, which allows to safely set the pad functions and various other fields
during construction. The PadBuilder works on any gst::Pad subclass and
also has special support for GhostPads by allowing to set pad functions of
the proxy pad.gst::Message, gst::Event and gst::Query type constructors are now on
the specific target type instead of various new_XXX() functions on the
basic type. E.g. gst::message::Eos::new().gst_audio::AudioSrc/Sink::reset().gst_base::BaseParse::stop().gst::Element::post_message().gst::BufferList::foreach() and foreach_mut().gst::Buffer::foreach_meta() and foreach_meta_mut().glib::Object as target object for logging instead of just
gst::Object.gst_pbutils::EncodingContainerProfile. They
are supposed to be used only with the other encoding profiles.&'static str for various gst::StructureRef functions where the
string is backed by a glib::Quark.gst::DateTime functions to actually return Options.gst::Pad getrange
function, allow passing one in into get_range() and pull_range() and
provide the corresponding API on gst_base::BaseSrc too.Decoder base classes is optional and can return
None.gst_video::ValidVideoTimeCode::add_interval() always returns a valid
timecode again.gst::Promise with None and also handle that correctly
in the callback. This is allowed by the API.gst::init().gst::Pad function setters are marked unsafe now as changing the functions
is not thread-safe.gst::Object::set_name() as changing the name after construction
generally causes problems and is potentially unsafe.gst::Pad::set_pad_template() as changing the pad template after
construction is generally unsafe.gst::Pad::stream_lock() borrows the pad now instead of taking a new
reference.Jitter and Buffer queries were removed from the bindings.
These are not implemented in C and only have a type registered.LAST, NONE variants of enums and flags were removed as these
only make sense in C.NonZeroU64/U32 for various ID types to allow further optimizations.thiserror crate for deriving error types.lazy_static to once_cell.gst::Caps::append() from taking
the object by value to modifying it internally. This makes them easier to
use and only applies to functions that are defined on the non-reference type
and take ownership of the values passed in.mem::ManuallyDrop instead of mem::forget() everywhere.mem::transmute() calls with safer alternatives.gst:StreamCollection API was changed to the builder pattern for
construction as the collection must not be changed after construction.gst::ProxyPad default functions are plain functions on ProxyPad now
instead of trait functions to allow easier usage of them.TryFrom impls.gst_video::VideoMeta::add() returns a Result now instead of panicking.new_with_XXX() and new_from_XXX()
to the more idiomatic with_XXX() and from_XXX().gst::GstRc type
anymore, instead everything is directly implemented on the concrete types.
As part of this the gst::MiniObject trait was also removed as it was
unneeded now.Allow multiple filter types per process with gst::Iterator::filter().
gst::Iterator::filter().VideoInfo is valid when creating a VideoFrame.NULL pointer when getting the format
from an invalid VideoInfo or AudioInfo.VideoFrameRefs.gst::ProtectionMeta, gst_video::VideoAffineTransformationMeta,
VideoCropMeta and VideoRegionOfInterestMeta bindings.gst_rtp::RTPBuffer methods.gst_audio::audio_buffer_truncate(), AudioMeta and AudioBuffer
bindings.Assert that the data passed to VideoCaptionMeta::add() is not empty.
VideoCaptionMeta::add() is not empty.Stream / Sink adapters. This would keep them alive unnecessarily
and would prevent the Stream / Sink to ever "finish" on its own.None reply in the change function of gst::Promise.
This is apparently valid. For backwards compatibility reasons this is
currently replaced with an empty structure but in 0.16 the API will
explicitly handle None.gst::Stream::debug() and gst::StreamCollection::debug() for converting
into a structured string with the actual contents of each.gst::Structure::from_iter() and gst::Caps::from_iter() to create
structures/caps from iterators.gst::Event support for getting/setting the gst::Stream in the
StreamStart event.gst_video::calculate_display_ratio() and ::guess_framerate().gst::CapsFeatures in gst_video.TryFrom/From impls for converting between gst::Structure and
gst_video::VideoConverterConfig.glib::Value trait impls for SDPMessage, StructureRef,
CapsFeatureRef and all borrowed variants of miniobjects to be able to
work with the borrowed, non-owned variants when handling glib::Values.Revert: Allow logging any glib::Object and not just gst::Object. This broke API in subtle ways and needs to wait until 0.16
glib::Object and not just gst::Object. This
broke API in subtle ways and needs to wait until 0.16% in log output with %% to prevent accidental C formattingBufferRef::peek_memory_mut() to give a mutable reference to a given memorygst_audio::AudioClippingMetagst::Plugin::get_plugin_name() was addedgst::Element::get_current_clock_time() and
`gst::Element::get_current_running_time() helper functionsgst::State and StateChange API for calculating next/previous state and
convert from/to the components of a state changemem::ManuallyDrop instead of mem::forget everywhereAllow logging any glib::Object and not just gst::Object
glib::Object and not just gst::ObjectRTSPMedia::take_pipeline()GMutex guards for the remainder of the function and warn if they're
directly droppedCaps::fixate()BaseTransform::prepare_output_buffer() subclassing supportRTSPServer, RTSPClient, RTSPMedia and RTSPMediaFactory subclassing
supportappsrc/appsink callbacks by posting an error message
instead of killing the processUniqueFlowCombiner::clear() should take a mutable reference.
UniqueFlowCombiner::clear() should take a mutable reference.AudioStreamAlign doesn't require mutable references for getters anymore.gst_video_info_set_format() and
gst_video_info_align() with GStreamer < 1.11.1 as it returned void back
then. We'd otherwise use some random value.VideoInfo::align() is available since 1.8.AppSrc, AppSink callbacks and Bus sync
handler. Before 1.16.3 this was not thread-safe and caused crashes. When
running with older versions changing them causes a panic now and unsetting
the bus sync handler has not effect. With newer versions it works correctly.Clone impls for BufferPoolConfig and PlayerConfig.VideoConverter bindings.Futures variant for gst::Promise constructor.Futures variant for gst_video::convert_sample_async().submit_input_buffer(), generate_output(), before_transform(),
copy_metadata() and transform_meta() virtual method support for
BaseTransform.AppSink Stream adapter and AppSrc Sink adapter for integrating
both into Rust async contexts.VideoFrame / VideoFrameRef functions to
allow usage in more generic contexts.Fix another race condition in the gst::Bus Stream that could cause it to not wake up although a message is available.
gst::Bus Stream that could cause it to
not wake up although a message is available.Use static inner lifetime for VideoCodecState so that it can be stored safely on the heap.
VideoCodecState<Readable> so that it can be
stored safely on the heap.BinFlags on gst::Bin.gst::Caps::builder_full() for building caps with multiple structures
conveniently.gst::Element::call_async_future() for asynchronously spawning a closure
and returning a Future for awaiting its return value.PadFlags on gst::Pad now provide the correct
behaviour.gst::Bus Stream to close a
small race condition that could cause it to not be woken up.gst::ChildProxy implementers do not have to provide child_added() and
child_removed() functions anymore but these are optional now.Debug impls for various generic types where to Debug
impl should not depend on their type parameters also implementing Debug.StructureRef::get_optional() for returning None if the field does not exist instead of Err
StructureRef::get_optional() for returning None if the field does not
exist instead of Errgstreamer-rtp library, mostly RTPBufferPreset, TagSetter, Clock, SystemClock subclassesTypefind::get_length()BaseSrcImpl::get_times()AudioSink and AudioSrcSend/Sync impl for various typesVideoEncoder/VideoDecoder proxy_getcaps() can't return Noneis_video_overlay_prepare_window_handle_message() functionFnMut for the appsink callbacks instead of FnPromise change function returns the actual reply to the promise now
instead of just passing the promise itselfIterator::filter()BinImpl::add() takes ownership of floating referencesDeviceImpl::create_element() preserves floating flagBinImpl::remove() takes a strong reference of the element now as the last
reference might be owned by the bin and otherwise we would potentially have
a use-after-free afterwardsBaseParseFrame and VideoCodecFrame take a &mut self now for various
functions that actually change the frameNone to VideoEncoder::finish_frame()to_string() methods were moved into the Display trait impl and
for some types to_str() was added to return a &'static strSample constructor uses the builder pattern nowVideoMeta::add_full() is simplified and requires parametersBasetransformImpl::set_caps() returns a Result instead of boolOption now as these can be
None in practice although not allowed by the SDP specOptions were changed to return Results if
None actually signalled an error instead of just a missing valueSupport subclassing of gst::Device, gst::DeviceProvider, gst_audio::AudioDecoder and ::AudioEncoder
gst::Device, gst::DeviceProvider,
gst_audio::AudioDecoder and ::AudioEncoderElement::set_clock and ::provide_clock virtual methodsElementClass::add_metadata was addedgst_video::VideoDecoder and ::VideoEncoder got support for get_caps,
negotiate, src/sink_query/event and the drain virtual methodsElement::num_pads, ::num_src_pads and ::num_sink_pads functionsgst_video::VideoDecoder and ::VideoEncoder got get_allocator bindingsgst::Iterator implements IntoIterator now for providing
std::iter::Iterator<Item=<Result<T, IteratorError>> adapter#[macro_use] but
explicit importsDebug for gst::Iterator to allow it for any T
instead of T: DebugDevice::create_element has correct reference count handling nowNotNegotiated in the video codec base classes if setting the output
state fails instead of ErrorBindings for adding/removing custom log functions
calculate_linear_regression()Element::release_pad() virtual method implementationsBuffer::unset_flags() for unsetting specific buffer flags
Buffer::unset_flags() for unsetting specific buffer flagsVideoBufferFlags flags type and VideoBufferExt::set_video_flags(),
unset_video_flags() and get_video_flags() for working with video buffer
flags from safe code.gst_video::VideoBufferFlags.Various new WebRTC enum types from 1.14.1/1.16.0
VideoInfo by using
gst_video_info_set_interlaced_format() instead of the generic function.gst::format succeed again now.Debug impls for VideoFormatInfo and AudioFormatInfo now print all the
details of the format instead of only the name, and the Debug impls for
VideoInfo and AudioInfo also print the format now.Bindings for setting/getting TagScope on a TagList
GLSyncMeta.TagScope on a TagListGLDisplayWayland and GLDisplayX11 in addition to the
already existing GLDisplayEGLBus::pop_filtered() and related functionsObject, Element, Bin, Pipeline and
Plugin flagsVideoCaptionMetaDebug impl of Buffer now also shows the metas of the buffersPadProbeInfo for overriding the return valueVideoDecoder and VideoEncoder, including subclassing
supportMemory, Allocator and VideoBufferPoolVideoFormatInfo::pack and ::unpack for format conversionBaseParse, including subclassing supportClockTimeVideoInfo::align()SDPMessage and SDPMedia bindings were completely rewritten as they
were broken before and caused crashes in various usages. As part of this
there's also some more convenience API available on these types, like
iterators for example, and API to modify the SDPMedia contained in a
SDPMessage.std::futureProxyPad default functions moved to an extension trait instead of plain
functions on ProxyPad, making them more in sync with the default Pad
functionsClockTime do overflow checks
now and replace the result with the NONE value on overflowTryFrom/TryInto traits are used in various places now instead of the
previous ad-hoc implementations of them.gst::Rank now instead of an arbitrary u32DeviceAdded/DeviceRemoved message getters are transfer full so we don't
need to take an additional reference that would be leaked.AppSink callbacks are correctly marked as Send instead of Send+Sync,
allowing a wider range of closures to be used for them.PadProbeReturn::Handled return values from pad probes more
correctly.ToOwned::to_owned() on miniobjects has to create copies instead of
only increasing the reference count. Otherwise it was possible to create
multiple mutable and immutable references to the same object at the same
time.URIHandler::set_uri does not accept None anymore as this is not allowed
by the C function.TypeFindProbability and Rank work correctly nowDisplay implementations were fixed to not cause a stack overflow
due to infinite recursion anymore::to_string() functions don't take ownership of C strings anymore
that they do not own, which caused double frees beforeSubclassing infrastructure was moved directly into the bindings, making the gst-plugin crate deprecated. This involves many API changes but generally…
gst-plugin crate deprecated. This involves many API
changes but generally cleans up code and makes it more flexible.
Take a look at the gst-plugins-rs crate for various examples.CapsFeatures and MetaParentBufferMeta, VideoMetaandVideoOverlayCompositionMeta`VideoOverlayComposition and VideoOverlayRectangleVideoTimeCodeNetAddressMetaUniqueFlowCombiner and UniqueAdapter wrappers that make use of
the Rust compile-time mutability checks and expose more API in a safe
way, and as a side-effect implement Sync and Send nowBus::add_watch_local() and gst_video::convert_frame_async_local() that
allows to use a closure that does not implement Send but can only be
called from the thread owning the main context.Allocation Querypbutils functions for codec descriptionsTagList::iter() for iterating over all tags while getting a single
value per tag. The old ::iter_tag_list() function was renamed to
::iter_generic() and still provides access to each value for a tagBus::iter() and Bus::iter_timed() iterators around the
corresponding ::pop*() functionsVideoColorimetry to access its fieldsDebug impls for various missing types.Value can also handle Buffer nowtypefind, multiqueue and
dynamic padsgst::FlowReturn or other "combined" enums
were changed to return split enums like Result<gst::FlowSuccess, gst::FlowError> to allow usage of the standard Rust error handling.bool or Option<_> were
changed to return a Result<_, glib::BoolError> or
Result<_, gst::LoggableError> or Result<_, gst::ErrorMessage> for
better integration with Rust's error handling infrastructure.bool were changed to return ().MiniObject subclasses are now newtype wrappers around the
underlying GstRc<FooRef> wrapper. This does not change the
API in any breaking way for the current usages, but allows
MiniObjects to also be implemented in other crates and
makes sure rustdoc places the documentation in the right places.BinExt extension trait was renamed to GstBinExt to prevent
conflicts with gtk::Bin if both are importedBuffer::from_slice() can't possible return Nonegst::tag::Album is the album tag now instead of artist sortname0 for the channel mask corresponding to negative
AudioChannelPositions.PartialOrd and related traits are implemented via pointer equality on
ClockId instead of using the compare function. Two clock ids with the same
timestamp are not necessarily the same.Option<_>.clippy warningsPTP clock constructor actually creates a PTP instead of NTP clock
Bindings for the GStreamer SDP and WebRTC libraries
Build with NLL/two-phase borrows
gst::Bus's sync handler must unref every message if gst::BusSyncReply::Drop is returned, otherwise they are all leaked
gst::Bus's sync handler must unref every message if
gst::BusSyncReply::Drop is returned, otherwise they are all leakedgst::Caps::subtract() does not leak its arguments anymore
gst::Caps::subtract() does not leak its arguments anymoregst::Caps::get_structure() gracefully returns None if the index
is out of bounds instead of a g_return_val_if_fail()gst::Structure::new() has to give away ownership of the info structure
but didn't. For 0.11 we internally copy, in 0.12 it will take the info
structure by valuegst::Bus::remove_watch() is now available to remove a bus watch again
gst::Bus::remove_watch() is now available to remove a bus watch againfmt::Debug impls for AudioInfo and VideoInfo were addedfmt::Debug impls for mini objects also print the pointer value now to make
it easier to track them in debug logsPlayerVisualization has accessors for the name and description fields now,
without which there is no sensible way to use them or to set a player
visualizationWork-around various floating reference handling changes between 1.12 and 1.14 to be able to run with both versions without memory leaks or other refer
Fix Structure::to_string() to not run into an infinite recursion but call the method on the contained StructureRef instead of on itself
Updated everything to GStreamer 1.14.0
Fix building of messages with custom fields for types that don't have a GstStructure
Deprecated Sample::get_info() in favour of ::get_structure()
Memory leak of the tag list in Toc::merge_tags()
Export FlowError/FlowSuccess, ClockError/ClockSuccess, PadLinkError/PadLinkSuccess too
FlowError/FlowSuccess, ClockError/ClockSuccess,
PadLinkError/PadLinkSuccess tooBindings for (outputting to) the GStreamer logging system
Pad functions to override pad behaviour, and pad task
functionsStaticCaps and StaticPadTemplatedeep-notify signal on ObjectError/Warning/Info Messages and posting them
from an element with context information (file, line, module, etc.) similar
to the C GST_ELEMENT_ERROR macroMessages/Events during constructionAsRef<[u8]> or
AsMut<[u8]>Read trait on AdapterElement, and all children
of a BinCaps and Structures in addition to the existing functionsAppSrc/AppSink implement BaseSrc/BaseSink and URIHandlerStackTraceFlags are only available since 1.12NSRunLoop running on the main thread in all
examples and tutorials, to be able to show a window or anything elseClockTime is now a wrapper around Option<u64> to handle the
CLOCK_TIME_NONE case better. This wrapper implements all the arithmetic
and other traits as needed and ensures that no accidental calculations with
CLOCK_TIME_NONE can happenDuration/Position/Convert queries or
Seek events now return a FormatValue type. This contains the actual
Format together with the value and does any required conversions. This
also makes it harder to accidentally mix e.g. values in bytes and timePadProbeId does not implement Clone/Copy anymoreError/Warning/Info Messages can only be created with specific kinds of
glib::Error now. Using arbitrary ones does not workIterator bindings were completely rewritten and provide the item type as a
generic type parameter now, greatly simplifying its usageglib::Values are now glib::SendValue instead, e.g. in Caps and
Structures, as their content must be possible to send to different threads
safelyMessage::get_src() can return NoneNone as Caps in AppSrc/AppSinkInto<Option<&str>> to be used as a pad namecopy() from GstRc directly to MiniObjectFlowReturn, PadLinkReturn, StateChangeReturn) now
implement an into_result() function that splits them into a Result with
the good and bad cases. Also mark them as #[must_use] to make it harder to
accidentally ignore errors.Error traitfailure crate for error handling now, cleaning up the
error handling code quite a bitImplement StaticType of BufferRef instead of Buffer. Buffer aka GstRc already implements StaticType if BufferRef does, and without this it was not pos
Implement Send+Sync for Query, Message and Event, and their corresponding Ref types.
Initial release of the autogenerated GStreamer bindings. Older versions (< 0.8.0) of the bindings can be found here. The API of the two is incompatibl
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →