Every platform FFmpegKit supported, React Native, Flutter, Android, iOS, macOS, and the web, has a working replacement in 2026. On mobile, the choice comes down to whether you need raw codec access or just standard editing operations; the former means bundling FFmpeg directly via Gradle/SPM, the latter means lighter native-API wrappers. On the web, ffmpeg.wasm runs entirely in the browser but comes with a real performance ceiling. Across all platforms, the path forward is clear, it's just not the same path for everyone.
FFmpegKit didn't just power one app. It was the de facto solution for cross-platform video processing in mobile development for years, a single, well-documented library that abstracted FFmpeg across React Native, Flutter, Android, iOS, and macOS. When it went unmaintained, it didn't just leave a gap in package.json files. It left teams mid-project with no obvious landing spot.
The added wrinkle is that the deprecation didn't happen all at once. react-native-ffmpeg was discontinued first, then ffmpeg-kit-react-native followed. ffmpeg_kit_flutter lingered longer before pub.dev started showing the unmaintained flag. Teams that stayed on older versions kept shipping, until build pipelines broke, Xcode updated, or Gradle changed something. That's the wall most people hit.
The replacements exist. But they're fragmented by platform, and the right answer for a Flutter team looks different from the right answer for someone building a React Native app in an Expo managed workflow. Here's the full breakdown.
Both react-native-ffmpeg and ffmpeg-kit-react-native are gone. If either is still in your package.json, here's what replaces them.
Standard editing (trim, compress, watermark): react-native-video-processing handles trimming and basic editing by calling native platform APIs directly, with no full FFmpeg binary bundled and smaller footprint.
However, note that this package is inactive (last update 2016) and NOT Expo-compatible out of the box.
For Expo managed workflows, the practical recommendation is to offload video processing to a cloud API and return the processed file to the client, as bundling FFmpeg in a managed Expo app introduces native module ejection, build config changes, and binary size issues.
`// Before import { RNFFmpeg } from 'ffmpeg-kit-react-native';
// After import { VideoPlayer, Trimmer } from 'react-native-video-processing';`
Raw codec access or custom filter chains: You're bundling FFmpeg directly. On Android that means Gradle and NDK; on iOS that means SPM or a manual XCFramework. FFmpeg-iOS by kewlbear handles the iOS side, VideoKit-FFmpeg-Android handles Android. It's heavier and takes longer to set up, but it gives you the same level of control you had with FFmpegKit.
Expo managed workflow specifically: expo-video covers playback. For processing, the practical recommendation is to offload to a cloud API and return the processed file to the client. Bundling FFmpeg in a managed Expo app introduces enough complexity, native module ejection, build config changes, binary size, that a server-side approach is almost always cleaner.
ffmpeg_kit_flutter carries the unmaintained flag on pub.dev. The two main replacements depend on how much FFmpeg access you actually need.
Basic editing: tapioca uses AVFoundation on iOS and Mp4Composer on Android. It covers filters, text overlay, and image overlay (note: trimming and compression support is limited/unconfirmed), has a low binary size impact, but is NOT actively maintained, last published version 1.0.6+1 from September 2022. video_manipulation covers similar ground but is iOS-only with no Android implementation, so compare carefully before you commit.
`# pubspec.yaml dependencies: tapioca: ^0.2.0
Full FFmpeg access: The architecture mirrors React Native, FFmpeg-iOS (kewlbear) via SPM on iOS, VideoKit-FFmpeg-Android via Gradle on Android, connected through Flutter's platform channel. It takes setup work, but it's a stable pattern.
Playback only: Flutter's official video_player package and better_player both handle playback without any FFmpeg dependency. If video playback is your only requirement, you don't need FFmpeg at all.