Note: This package is based on the original get_storage package by Jonny Borges, with additional features and improvements including WebAssembly support.
A fast, extra light and synchronous key-value in memory, which backs up data to disk at each operation. It is written entirely in Dart and easily integrates with Get framework of Flutter.
Supports Android, iOS, Web, Mac, Linux, and fuchsia and Windows**. Can store String, int, double, Map and List
GetStorage now fully supports WebAssembly compilation for Flutter web apps! This enables:
- Up to 3x faster execution compared to JavaScript compilation
- Better memory efficiency and performance
- Future-proof compatibility with WebAssembly-first Flutter web
# Build your Flutter web app with WebAssembly support
flutter build web --release --wasmThe package automatically uses WebAssembly-compatible storage implementation when compiled with WASM, while maintaining full compatibility with regular JavaScript builds.
dependencies:
get_storage_wasm:
You can install packages from the command line:
with Flutter:
$ flutter packages getThis package (get_storage_wasm) is based on the original get_storage package created by Jonny Borges.
- β WebAssembly (WASM) Support - Full compatibility with Flutter's WASM compilation
- β Enhanced Performance - Optimized for modern Flutter versions
- β Updated Dependencies - Compatible with latest Flutter and Dart versions
- β Improved Documentation - Better examples and usage guides
- Original package: get_storage by Jonny Borges
- Maintained by: lcw99
Now in your Dart code, you can use:
import 'package:get_storage_wasm/get_storage_wasm.dart';main() async {
await GetStorage.init();
runApp(App());
}final box = GetStorage();box.write('quote', 'GetX is the best');print(box.read('quote'));
// out: GetX is the best
box.remove('quote');Function? disposeListen;
disposeListen = box.listen((){
print('box changed');
});disposeListen?.call();box.listenKey('key', (value){
print('new key is $value');
});box.erase();If you want to create different containers, simply give it a name. You can listen to specific containers, and also delete them.
GetStorage g = GetStorage('MyStorage');await GetStorage.init('MyStorage');class MyPref {
static final _otherBox = () => GetStorage('MyPref');
final username = ''.val('username');
final age = 0.val('age');
final price = 1000.val('price', getBox: _otherBox);
// or
final username2 = ReadWriteValue('username', '');
final age2 = ReadWriteValue('age', 0);
final price2 = ReadWriteValue('price', '', _otherBox);
}
...
void updateAge() {
final age = 0.val('age');
// or
final age = ReadWriteValue('age', 0, () => box);
// or
final age = Get.find<MyPref>().age;
age.val = 1; // will save to box
final realAge = age.val; // will read from box
}GetStorage is not fast, it is absurdly fast for being memory-based. All of his operations are instantaneous. A backup of each operation is placed in a Container on the disk. Each container has its own file.
Persistent key/value storage for Android, iOS, Web, Linux, Mac and Fuchsia and Windows, that combines fast memory access with persistent storage. Optimized for WebAssembly when building Flutter web apps with --wasm flag for enhanced performance.
A database. Get is super compact to offer you a solution ultra-light, high-speed read/write storage to work synchronously. If you want to store data persistently on disk with immediate memory access, use it, if you want a database, with indexing and specific disk storage tools, there are incredible solutions that are already available, like Hive and Sqflite/Moor.
As soon as you declare "write" the file is immediately written in memory and can now be accessed immediately with box.read(). You can also wait for the callback that it was written to disk using await box.write().
- simple Maps storage.
- cache of http requests
- storage of simple user information.
- simple and persistent state storage
- any situation you currently use sharedPreferences.
- you need indexes.
- when you need to always check if the file was written to the storage disk before starting another operation (storage in memory is done instantly and can be read instantly with box.read(), and the backup to disk is done in the background. To make sure the backup is complete, you can use await, but if you need to call await all the time, it makes no sense you are using memory storage).


