NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #2774 most downloaded on pub.dev
A Flutter camera plugin for desktop platforms (Linux, macOS, Windows). Implements camera_platform_interface for easy integration with the standard camera package.
Last release 13 days ago
25 Sep 2026
Release timing varies
gaps range from 9 days to 3 months
Nearly every release is documented
notes for 29 of 30 stable releases
Nothing withdrawn
no release was ever pulled
7 months old
30 releases · first in 2026
One column per month.
Breaking: image stream frames on Linux and Windows are now BGRA, matching their reported ImageFormatGroup.bgra8888, macOS, and camera on iOS (#9, #11,
ImageFormatGroup.bgra8888, macOS, and camera on iOS (#9, #11, thanks @wantroba for the report). They were previously RGBA while still reported as bgra8888 (only format.raw said 'RGBA'), so code written for iOS/macOS saw red and blue swapped. Migration: remove any Linux/Windows RGBA workaround, such as choosing BGRA only when Platform.isMacOS, or ChannelOrder.rgba / ChannelOrder.rgb with numChannels: 4 in package:image. Decode every desktop platform as BGRA (or, to support both 1.x and 2.x, treat the frame as RGBA only when format.raw == 'RGBA'), using planes[0].bytesPerRow as the row stride.startImageStream was still in flight: the stop was sent with the camera id in place of the real stream handle (which could release another stream's handle), and the FFI poller then started anyway and polled forever.Lock2D pitch being read in reverse row order, and make the plain Lock fallback honor the preview stream's stride instead of assuming tightly packed rows. The ARGB32 preview type now requests an explicit top-down stride instead of inheriting the camera-native format's.gst_element_request_pad_simple is unavailable (#10, thanks @wantroba).Fix macOS ignoring the requested ResolutionPreset: frames and the preview always arrived at the camera's native format, 1920x1080 on a MacBook Pro cam
ResolutionPreset: frames and the preview always arrived at the camera's native format, 1920x1080 on a MacBook Pro camera, because macOS kept the device's active format whatever the session preset. The plugin now selects the smallest native format that covers the preset, holds it through session start, and asks the output for the preset's exact size: low 320x240, medium 640x480, high and veryHigh 1280x720, ultraHigh and max 1920x1080. Apps requesting low, medium or high on macOS now receive smaller frames than before.stopImageStream rather than only on dispose, and disposing a camera whose image stream is still subscribed no longer leaves its poll timer running.Fix Linux preview Internal data stream error (not-negotiated) on cameras that do not expose MJPEG, such as NV12/YUYV-only USB webcams. The MJPEG fast-
Internal data stream error (not-negotiated) on cameras that do not expose MJPEG, such as NV12/YUYV-only USB webcams. The MJPEG fast-path added in 1.1.7 was selected whenever its pipeline merely parsed, but gst_parse_launch succeeds even when the camera cannot produce MJPEG, so the intended raw-capture fallback never ran and initialization failed at PLAYING. The plugin now probes the V4L2 device (both MJPEG and JPEG pixel formats) for the target resolution before choosing the MJPEG path, and otherwise uses the always-safe raw capture path. The MJPEG pipeline pins only the resolution and lets the camera's native frame rate float, with videorate adapting it to the requested fps, so requesting a frame rate the camera does not expose natively in MJPEG no longer breaks negotiation.Speed up Windows camera initialization by completing initialize() as soon as the preview starts instead of blocking until the first camera frame arriv
initialize() as soon as the preview starts instead of blocking until the first camera frame arrives. On a typical webcam this returns control to the app in roughly 250 ms rather than about 2 seconds. The preview fills in as frames arrive, and a watchdog reports a cameraError if no frames are received within 8 seconds.CAMERA_DESKTOP_LOG environment variable to any value other than 0 to capture a trace when reporting an issue. This also removes the logging overhead that slowed camera initialization, most noticeably with a debugger or IDE attached.Fix Windows use-after-free crashes on camera dispose: guard the preview texture against in-flight preview samples, and defer destroying the texture un
UnregisterTexture completes (its raster-thread pixel-buffer callback could otherwise run after the texture was freed) (#4)Fix Windows crash after camera dispose by marshalling platform channel messages to the platform thread
not-negotiated error on common USB webcams (#5, thanks @jvnonce)x264enc (#5, thanks @jvnonce)Fix Swift compiler warnings: remove unused variables in DeviceEnumerator, PhotoHandler, RecordHandler, and CameraSession
Fix SPM integration by adding missing FlutterFramework dependency to iOS and macOS Package.swift
Remove debug logging from image stream pause/resume and video recording completion
Fix Windows build failure (C4819 / C2220) on hosts with a non-UTF-8 system code page (e.g. CP936 on Simplified Chinese Windows) by compiling the plugi
/utf-8 under MSVC (#2)Fix macOS build failure on Xcode 26+ by removing unavailable AVCaptureSessionInterruptionReasonKey (re-introduced in 1.1.1)
AVCaptureSessionInterruptionReasonKey (re-introduced in 1.1.1)wchar_t to char conversion in debug loggingAdd comprehensive diagnostic logging across all platforms (Linux, macOS, Windows)
Add PipeWire camera portal support for Flatpak sandbox compatibility on Linux
pipewiresrc instead of v4l2srcorg.freedesktop.portal.Camera D-Bus interfaceGstDeviceMonitorFix macOS build failure on Xcode 26+ by removing unavailable AVCaptureSessionInterruptionReasonKey (iOS-only API)
AVCaptureSessionInterruptionReasonKey (iOS-only API)Fix camera initialization failure on Intel Macs by selecting session preset after device discovery using device.supportsSessionPreset() with automatic
device.supportsSessionPreset() with automatic fallback (1080p → 720p → high → medium)canAddInput/canAddOutput failures return a FlutterError instead of silently skipping, preventing blank-screen timeoutsAVCaptureSessionRuntimeError, WasInterrupted, and InterruptionEnded notifications and forward to Dart via cameraErrorbytesPerRow instead of actual value from CVPixelBufferFix Xcode build warnings by declaring PrivacyInfo.xcprivacy as a resource bundle in iOS and macOS podspecs
Fixes #1: conflict with camera_android and camera_avfoundation dependencies
Fix macOS Swift Package Manager compatibility
Fix hot restart FFI crash by replacing NativeCallable with polling
Fix macOS use-after-free crash during engine teardown by making dispose synchronous/idempotent and guarding FFI callbacks
Fix xcprivacy build warnings by declaring resource_bundles in iOS and macOS podspecs
First stable release of camera_desktop
First stable release of camera_desktop
AVCaptureSession, AVAssetWriter). Preview via CVPixelBuffer textures, H.264/AAC recording, native mirror support.IMFCaptureEngine) with Direct3D 11 texture rendering. H.264/AAC recording via IMFSinkWriter.v4l2src → videoconvert → appsink pipeline). H.264/AAC recording with automatic encoder selection, native mirror via videoflip.getPlatformCapabilities()Migrate Windows implementation to IMFCaptureEngine
Update example app to show settings panel
Nothing published for this version
* Fix C linkage on Linux
FFI-based image stream for reduced memory copies (3→2 per frame)
* Performance improvements
Add setMirror API and built-in camera sorting for DeviceEnumerator
Linux camera support via GStreamer + V4L2.
camera_platform_interface compliance.Your coding agent can read these notes before it upgrades. Set up the MCP server →