mmkv
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android & iOS.
2.4.2
18K downloads/mo
#2279 most downloaded on pub.dev
Tencent/MMKV
What this package is like to depend on
Last release 3 days ago
21 Aug 2026
Ships fairly regularly
a new release about every 2 months
Rarely documented
notes for 9 of 44 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
44 releases · first in 2018
7 releases in the last 12 months
see the full history below
Release timeline
44 releases · Oct 2018 to Aug 2026Releases
latest 44-
2.4.221 Aug 2026Release notes
Open source →v2.4.2 / 2026-08-21
This is a hotfix release based on v2.4.1. It adds targeted encrypted-write and backup/restore checks, fixes Kotlin Multiplatform consistency issues, and repairs native package build/link regressions.
Changes for All Platforms
- Fix: Hardened cryptographic random-IV generation, secure key cleanup, encryption-mode changes, and bounded protobuf writes.
- Fix: Prevented self-backup/restore through equivalent directory aliases, fixed uncached backup locking, rejected incomplete restore sources, and handled IDs ending in
.crc. - Fix: Corrected the one-year expiration constant, which previously represented 30 years on Android, iOS/macOS, HarmonyOS NEXT, Flutter, and Go.
- Fix: Made directory walking work with long paths and made
PBUtility.hinclude itsMMBufferdependency directly.
Kotlin Multiplatform
- Fix: Preserved empty byte arrays and UTF-8 string values consistently across supported targets.
- Fix: Aligned key validation and expiration behavior across Android and iOS, including consistent rejection of embedded NUL keys.
iOS/macOS
- Fix: Fixed secure key wiping compilation on Apple platforms (#1675).
HarmonyOS NEXT
- Change: Added the package author email to OHPM metadata.
Flutter
- Fix: Fixed Swift Package Manager builds so Dart FFI entry points remain linked and exported on iOS/macOS (#1676).
Win32
- Fix: Fixed the C bridge build with MSVC and its UTF-8/wide-path boundaries (#1681).
Build
- Change: Added a reusable, guarded cleanup script for generated artifacts.
-
2.4.130 Jul 2026Release notes
Open source →v2.4.1 / 2026-07-30
This is a maintenance release based on v2.4.0. It focuses on data-safety fixes, encrypted-file compatibility, packaging/build cleanup, and experimental Kotlin Multiplatform support for Android and iOS.
Changes for All Platforms
- Fix: Improved MMKV instance lifecycle handling with safer wrapper ownership, native lock teardown, and clarified destructive
close()semantics. - Fix: Fixed an oversized-key corruption bug where keys longer than the internal
uint16_tholder limit could overflow key/value metadata and corrupt subsequent reads. - Fix: Fixed an
expireDurationoverflow bug (#1665). Very large expiration durations are now clamped safely instead of wrapping around. - Fix: Improved encrypted MMKV random-IV upgrade behavior. Existing encrypted files using the older IV format now trigger a full writeback when possible so they are upgraded to the random-IV format.
- Fix: Added safer random-IV reset behavior when clearing memory cache for encrypted instances.
- Fix: Fixed
-Wmissing-braceswarnings in Android, Win32, and POSIX demo code. - Change: Added extra mmap/munmap logging to help diagnose file mapping lifecycle issues.
- Feature: Added a universal C interface (
Core/cbridge) for MMKV Core, with NameSpace support and a pure C demo. The C bridge is also used by the KMP iOS package.
Kotlin Multiplatform
- Experimental: Added Kotlin Multiplatform support for Android and iOS via the Gradle package
com.tencent:mmkv-kmp:2.4.1. The API and artifact layout may change in a future release. - Supported targets: Android,
iosArm64,iosSimulatorArm64, andiosX64. - Android delegates to the native
com.tencent:mmkv:2.4.1AAR. iOS embeds MMKV Core through the C bridge in the published native KLIBs. - Fix: Added platform-parity buffer/state APIs, preserved empty byte arrays on iOS, respected handler notification preferences, and added Android device plus Kotlin/Native smoke tests.
- Fix: Improved MMKV instance lifecycle handling and clarified destructive
close()semantics.
Android
- Fix: Added regression coverage for the expiration overflow issue.
- Fix: Improved Android CMake header-export detection for builds where
ANDROID_ABIis defined, including local Android artifact publication builds.
iOS/macOS
- Feature: Added the static SwiftPM product
MMKVAppExtension-static. - Fix: Excluded the standalone C bridge from the Objective-C++ SwiftPM Core target and gave each wrapper target its own privacy manifest resource.
- Feature: Added
+[MMKV unregisterHandler]as the correctly spelled handler-unregistration API. The previous typo'd+unregiserHandlerremains available for source/binary compatibility and forwards to the new API.
HarmonyOS NEXT
- Change: Cleaned up project signing/build configuration and removed checked-in Hvigor dependency archives.
- Fix: Improved MMKV instance lifecycle handling and clarified destructive
close()semantics. - Change: Prepared the
@tencent/mmkvpackage metadata and documentation for v2.4.1.
Flutter
- Feature: Added Swift Package Manager support for the Apple platform implementation and migrated the iOS/macOS examples to SwiftPM. CocoaPods remains available as a fallback.
- Fix: Improved MMKV instance lifecycle handling and clarified destructive
close()semantics.
POSIX
- Feature: Added a pure C demo for the new C bridge.
- Fix: Added regression coverage for oversized-key rejection and expiration overflow.
Win32
- Fix: Fixed
-Wmissing-braceswarnings in Win32 file handling code.
- Fix: Improved MMKV instance lifecycle handling with safer wrapper ownership, native lock teardown, and clarified destructive
-
2.4.019 Mar 2026Release notes
Open source →v2.4.0 / 2026-03-18 (Breaking Change)
This release introduces a unified
MMKVHandlercallback interface across all platforms, replacing scattered per-callback registration with a single, OO-style handler. It also adds theMMKVConfigall-in-one configuration and several bug fixes.Changes for All Platforms
- Feature: Refactored the callback system into a unified
MMKVHandlerinterface. All callbacks (log redirecting, error handling, content change notification, content loaded notification) are now grouped in a single handler registered viaregisterHandler(). The old per-callbackregisterLogHandler()/registerErrorHandler()/registerContentChangeHandler()/registerContentLoadedHandler()APIs have been removed. - Feature: Added
onMMKVContentLoadSuccessfullycallback, triggered when an MMKV file is loaded/mapped successfully. - Feature: Added
MMKVConfigfor all-in-one instance configuration, supporting all options (mode,cryptKey,aes256,expectedCapacity,enableKeyExpire,expiredInSeconds,enableCompareBeforeSet,recover,itemSizeLimit) in a single struct/class. - Feature: Added
defaultMMKV(config)variant for creating the default instance with full configuration. - Fix: Robust check on encryption mode (#1642).
- Fix: Protect from
deletefile failure on corrupted files. - Fix: Protect from
m_filenot valid forisDiskOfMMAPFileCorrupted(). - Fix: Reduce
absolutePath()calls as much as possible. - Drop old-style actual size downgrade support.
- MMKV must be compiled with C++17.
Android
- Change: Merged
MMKVContentChangeNotificationintoMMKVHandler. The oldMMKVContentChangeNotificationinterface is now@Deprecated. - Fix: Fix
fcntl()OFD lock failure on ashmem (#1637). - Merge ashmem size with
expectedCapacity. - Correctly collect so-symbols.
iOS/macOS
- Feature: Added
getBytes()withstring_viewkey for ObjC++. - Fix: Fixed a memory leak on getting
NameSpaceinstance. - Support Swift Package Manager (#535).
- Fix compile error on
tryAtomicRename().
HarmonyOS NEXT
- Merge ashmem size with
expectedCapacity.
Flutter
- Updated to use the unified
MMKVHandlercallback interface.
Win32
- Fix: Convert log message to UTF-8 for Win32 client.
- Verify all pages for corrupted file detection.
- Feature: Refactored the callback system into a unified
-
2.3.002 Dec 2025Release notes
Open source →v2.3.0 / 2025-12-03 (Breaking Change)
This release is a breaking change and introduces AES-256 encryption for enhanced security.
All Platforms
- Feature: Added AES-256 encryption functionality. To upgrade an existing encrypted MMKV instance to AES-256, first load it using the old key. Then, call the
reKey()method with the new key and set theaes256parameter totrue, e.g.,reKey(newKey, aes256=true). After this, you should use the new key for all future loads of this instance. - Fix: Resolved a crash that occurred when loading an empty file in
ReadOnlymode. - Fix: Added protection against the
weakly_canonical()exception caused by an invalid file path. - Fix: Fixed an issue where the file size could change during multi-process loading.
- Fix: Corrected a bug where a single key could be overridden incorrectly when upgrading from a v1.1.x version.
iOS/macOS/watchOS
- Change: Dropped support for the armv7k architecture on Apple Watch. To adapt, you should add
armv7kto the "Excluded Architectures" setting for your Apple Watch App or Extension target. - Important: Do not upgrade to this version if you need to maintain
armv7ksupport. - Change: Dropped deprecated methods that use the
relativePath:parameter. If you were using these methods, please migrate to those using therootPath:parameter instead.
POSIX
- Change: Dropped support for armv7 architecture.
- Important: Do not upgrade to this version if you need to maintain
armv7support.
- Feature: Added AES-256 encryption functionality. To upgrade an existing encrypted MMKV instance to AES-256, first load it using the old key. Then, call the
-
2.2.425 Sep 2025Release notes
Open source →v2.2.4 / 2025-09-25
This is a hotfix release mainly for iOS/macOS CocoaPods users.
Changes for All platforms
- Improve the performance of MMBuffer a little bit in some cases.
iOS/macOS
- Make MMKV and MMKVCore podspec define modules.
-
2.2.320 Aug 2025Release notes
Open source →v2.2.3 / 2025-08-20
This is a feature release that brings full desktop support to Flutter. It also includes key bug fixes and enhancements for Android and other platforms.
Flutter
- Added Full Desktop Support: MMKV for Flutter now officially supports Windows, macOS, and Linux.
- Example App: The example application has been updated to run on all new desktop platforms.
Android
- Feature: Added
MMKVHandler.getNativeLogHandler()to allow native handling of MMKV logs from C++ code, improving performance. - Fix: Corrected an integer overflow bug where a native memory address exceeding
Long.MAX_VALUEwas misinterpreted as a negative number. - Fix: Prevented potential memory overflow by ensuring JNI local references are deleted after use.
- Fix: Fixed an issue where directories for special relative paths were not being created correctly.
- Enhancement: Improved the thread-safety of the callback handler to prevent crashes.
iOS/macOS
- Fix: Resolved a build error on Apple platforms that occurred when the
MMKV_APPLEflag was not set. - Fix: Addressed a naming conflict in the Swift implementation.
Windows
- Fix: Corrected character encoding issues in the Win32 demo by converting files to UTF-8.
-
2.2.208 May 2025 -
2.2.125 Apr 2025Nothing published for this version
-
2.2.024 Apr 2025Nothing published for this version
-
2.1.106 Mar 2025Nothing published for this version
-
2.1.018 Feb 2025Nothing published for this version
-
2.0.227 Dec 2024Nothing published for this version
-
2.0.125 Oct 2024Nothing published for this version
-
2.0.022 Oct 2024Nothing published for this version
-
1.3.1703 Aug 2026Release notes
Open source →v1.3.17 / 2026-08-03
This is a Long Term Support (LTS) maintenance release.
All Platforms
- Fix: Reject oversized keys before their length can overflow and corrupt MMKV data.
- Fix: Prevent auto-expiration timestamps from overflowing for very large durations.
- Fix: Harden native instance close lifecycle and recursive thread-lock destruction.
-
1.3.1603 Dec 2025Release notes
Open source →v1.3.16 / 2025-12-03
This is a Long Term Support (LTS) release.
All Platforms
- Fix: Fixed an issue where the file size could change during multi-process loading.
- Fix: Corrected a bug where a single key could be overridden incorrectly when upgrading from a v1.1.x version.
Android
- Note: Version v1.3.15 mistakenly handled AIDL and should be considered a temporary, unstable release. If you find yourself on this version, you must upgrade to v1.3.16.
-
1.3.1112 Nov 2024Nothing published for this version
-
1.3.1025 Oct 2024Nothing published for this version
-
1.3.926 Jul 2024Nothing published for this version
-
1.3.812 Jul 2024Nothing published for this version
-
1.3.708 Jul 2024Nothing published for this version
-
1.3.605 Jul 2024Nothing published for this version
-
1.3.524 Apr 2024Nothing published for this version
-
1.3.415 Mar 2024Nothing published for this version
-
1.3.325 Jan 2024Nothing published for this version
-
1.3.220 Nov 2023Nothing published for this version
-
1.3.111 Aug 2023Nothing published for this version
-
1.3.014 Jun 2023Nothing published for this version
-
1.2.1720 Apr 2023Nothing published for this version
-
1.2.1612 Jan 2023Nothing published for this version
-
1.2.1510 Aug 2022Nothing published for this version
-
1.2.1430 Mar 2022Nothing published for this version
-
1.2.1317 Jan 2022Nothing published for this version
-
1.2.1226 Oct 2021Nothing published for this version
-
1.2.1125 Jun 2021Nothing published for this version
-
1.2.1026 May 2021Nothing published for this version
-
1.2.906 May 2021Nothing published for this version
-
1.2.825 Dec 2020Nothing published for this version
-
1.2.727 Nov 2020Nothing published for this version
-
1.2.627 Nov 2020Nothing published for this version
-
0.0.420 Oct 2018Nothing published for this version
-
0.0.314 Oct 2018Nothing published for this version
-
0.0.214 Oct 2018Nothing published for this version
-
0.0.111 Oct 2018Nothing published for this version