Super Fast Cross Platform Database for Flutter & Web Apps

Overview

Isar Database

🚧 Alpha version - Use with care. 🚧

Quickstart β€’ Documentation β€’ Sample Apps β€’ Support & Ideas β€’ Pub.dev

Isar [ee-zahr]:

  1. River in Bavaria, Germany.
  2. Database that will make your life easier.

Features

  • πŸ’™ Made for Flutter. Easy to use - zero configuration
  • πŸš€ Highly scalable from hundreds to hundreds of thousands of records
  • πŸ”Ž Full-text search. Make searching fast and fun
  • πŸ“± Multiplatform. iOS, Android, Desktop and the web (soonβ„’)
  • πŸ§ͺ ACID semantics. Rely on consistency
  • ⏱ Asynchronous. Parallel query operations & multi-isolate support
  • πŸ’ƒ Static typing. Compile-time checked and autocompleted queries
  • πŸ”’ Strong encryption. Optional authenticated AES-256 GCM encryption

1. Add to pubspec.yaml

dependencies:
  isar: 0.4.0
  isar_flutter_libs: 0.4.0 # contains the binaries
  isar_connect: 0.4.0 # if you want to use the Isar Inspector

dev_dependencies:
  isar_generator: 0.4.0
  build_runner: any

2. Define a Collection

@Collection()
class Post {
  int? id; // auto increment id

  @Index(indexType: IndexType.words) // Search index
  String title;

  Links<Comment> comments; // Link to other collection
}

3. Open an instance

final isar = await openIsar();

Isar Inspector

The Isar Inspector allows you to inspect the Isar instances & collections of your app in real time. You can execute queries, switch between instances and sort the data.

CRUD operations

All basic crud operations are available via the IsarCollection.

final newPost = Post()
  ..title = 'Amazing new database'
  ..comments = ['First'];

await isar.writeTxn((isar) {
  await isar.posts.put(newPost); // insert
});

final existingPost = await isar.get(newPost.id!); // get

await isar.writeTxn((isar) {
  await isar.posts.delete(existingPost.id!); // delete
});

Queries

Isar has a powerful query language that allows you to make use of your indexes, filter distinct objects, use complex and() and or() groups and sort the results.

final isar = await openIsar();

final databasePosts = isar.posts
  .where()
  .titleWordBeginsWith('DaTAb') // use case insensitive search index
  .limit(10)
  .findAll()

final postsWithFirstCommentOrTitle = isar.posts
  .where()
  .filter()
  .commentsAnyEqualTo('first', caseSensitive: false)
  .or()
  .titleEqualTo('first')
  .findAll();

Links

You can easily define relationships between objects. In Isar they are called links and backlinks:

@IsarCollection()
class Teacher {
    int? id;

    String subject;

    @Backlink(to: 'teacher')
    final students = IsarLinks<Student>();
}

@IsarCollection()
class Student {
    int? id;

    String name;

    final teacher = IsarLink<Teacher>();
}

Watchers

With Isar, you can watch Collections, Objects, or Queries. A watcher is notified after a transaction commits successfully and the target actually changes. Watchers can be lazy and not reload the data or they can be non-lazy and fetch new results in the background.

Stream<void> collectionStream = isar.posts.watchLazy;

Stream<List<Post>> queryStream = databasePosts.watch();

queryStream.listen((newResult) {
  // do UI updates
})

License

Copyright 2021 Simon Leier

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • 32-bit devices: Unhandled Exception: IsarError: Cannot open Environment

    32-bit devices: Unhandled Exception: IsarError: Cannot open Environment

    Steps to Reproduce Got an exception when trying to run isar.open

    E/flutter ( 7883): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: IsarError: Cannot open Environment
    E/flutter ( 7883):
    

    Code sample

     var dbPath = (await getApplicationDocumentsDirectory()).path;
          
    final isar = await Isar.open(
      schemas: [dbSchema],
      directory: dbPath,
    );
    

    Version

    • Platform: Android 11
    • Flutter version: 2.8.1
    • Isar version: 2.0.0-dev.0
    • Isar Generator version: 2.0.0-dev.0
    bug 
    opened by zexross 65
  • Should Isar switch to LMDB

    Should Isar switch to LMDB

    As you probably know, Isar depends on libmdbx, a fork of LMDB.

    It is more actively developed, more feature rich and a little bit faster but developed in Russia.

    GitHub removed the author and repository from its platform. It is now hosted on a Russian alternative.

    To be clear: The license of the project is not the problem and we can continue using it without issues. The question is: do we want to. The attitude of the author is cause of concern: https://github.com/isar/isar/issues/187#issuecomment-1102835419

    The alternative is switching to LMDB. Both databases are completely incompatible and apps in production would need to take care of data migration.

    Please use this issue to state your opinion. We will follow the majority.

    enhancement 
    opened by simc 31
  • Crash on iOS first launch. EXC_BAD_ACCESS

    Crash on iOS first launch. EXC_BAD_ACCESS

    Steps to Reproduce

    • Fresh install on iOS device.
    • Start app.
    • When initializing Isar the app crashes.
    • Restart app, Isar initializes OK and app runs.
    • Same code on Android phones does not encounter the same error.
    flutter: ╔════════════════════════════════════════╗
    flutter: β•‘          ISAR CONNECT STARTED          β•‘
    flutter: β•Ÿβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•’
    flutter: β•‘ Open the Isar Inspector and enter the  β•‘
    flutter: β•‘ following URL to connect:              β•‘
    flutter: β•Ÿβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β•’
    flutter: β•‘   ws://127.0.0.1:63430[/XuI7i1fZSD4]()=   β•‘
    flutter: β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•
    * thread #24, stop reason = EXC_BAD_ACCESS (code=1, address=0x10cccc000)
        frame #0: 0x00000001c9401934 libsystem_platform.dylib`_platform_memset + 36
    libsystem_platform.dylib`_platform_memset:
    ->  0x1c9401934 <+36>: stnp   x1, x1, [x0]
        0x1c9401938 <+40>: stnp   x1, x1, [x0, #0x10]
        0x1c940193c <+44>: stnp   x1, x1, [x0, #0x20]
        0x1c9401940 <+48>: stnp   x1, x1, [x0, #0x30]
    Target 0: (Runner) stopped.
    Lost connection to device.
    

    Code sample

      final schemas = [LineSchema, PointSchema];
      final isar = await Isar.open(
        schemas: schemas,
        directory: d.path,
        relaxedDurability: false,
        inspector: kDebugMode,
      );
    
    

    Version

    • Platform: iOS: 14.8.1 (iPhone 7), iOS 15.2.1 (iPhone SE 2nd generation), 14.8.1 (iPhone SE 2nd generation)
    • Flutter version: 2.8.1
    • Isar version: 2.1.4
    • Isar Generator version: 2.1.4
    bug 
    opened by spatialbits 31
  • Failed to load dynamic library

    Failed to load dynamic library

    Hi, unable to load the library on windows. I am getting:

    flutter: Invalid argument(s): Failed to load dynamic library (126)
    [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: IsarError: Could not initialize IsarCore library. If you create a Flutter app, make sure to add isar_flutter_libs to your dependencies. Isar does not support 32-bit processors so make sure that your device / emulator has a 64-bit processor.
    #0      initializeIsarCore
    package:isar/…/native/isar_core.dart:56
    #1      openIsar
    package:isardb/isar.g.dart:39
    

    Version

    • Platform: Android, Windows 64 bit,
    • Flutter version: [2.0.4]
    • Isar version: [0.2.0]
    • Isar flutter lib version: [0.2.0]
    • Isar Generator version: [0.2.0]

    Should I download the library manually? if yes what path should it be on windows.

    documentation 
    opened by Aljabri-Salman 30
  • IsarError: Could not initialize IsarCore library -- not the 32-bit issue

    IsarError: Could not initialize IsarCore library -- not the 32-bit issue

    Steps to Reproduce Hello,

    I'm building a macos app and I'm getting the following basic error (details are below) - IsarError: Could not initialize IsarCore library.

    I've read the following issue and discussion which report a similar error but cannot figure out how to resolve this:

    • https://github.com/isar/isar/issues/48
    • https://github.com/isar/isar/discussions/101

    This is NOT related to the 32-bit issue.

    pubspec.yaml:

    name: api
    description: A Dart API Client for the Builder API.
    version: 1.0.0+1
    
    environment:
      sdk: '>=2.17.0-222.0.dev <3.0.0'
    
    dependencies:
      flutter:
        sdk: flutter
      flutter_lints: ^1.0.0
      http: ^0.13.0
      json_annotation: ^4.4.0
      path_provider: ^2.0.9
      flutter_secure_storage: ^5.0.2
      isar: ^2.2.1
      isar_flutter_libs: 2.2.1 # contains the binaries
    
    dev_dependencies:
      flutter_test:
        sdk: flutter
      isar_generator: 2.2.1
      build_runner: ^2.1.8
    

    Imports:

    import 'package:isar/isar.dart';
    import 'package:path_provider/path_provider.dart';
    

    Code:

        final dir = await getApplicationSupportDirectory(); // path_provider package
        final isar = await Isar.open(
          schemas: [UserSchema],
          directory: dir.path,
          inspector: true, // if you want to enable the inspector for debug builds
        );
    

    Error:

    Exception has occurred.
    IsarError (IsarError: Could not initialize IsarCore library. If you create a Flutter app, make sure to add isar_flutter_libs to your dependencies.)
    

    Debug console:

    flutter: Invalid argument(s): Failed to load dynamic library 'libisar.dylib': dlopen(libisar.dylib, 1): no suitable image found.  Did find:
    	[/Users/me/Documents/Projects/the_thing/thing_desktop/build/macos/Build/Products/Debug/thing_desktop.app/Contents/MacOS/../Frameworks/isar_flutter_libs.framework/Resources/libisar.dylib](): code signature in ([/Users/me/Documents/Projects/the_thing/thing_desktop/build/macos/Build/Products/Debug/thing_desktop.app/Contents/MacOS/../Frameworks/isar_flutter_libs.framework/Resources/libisar.dylib]()) not valid for use in process using Library Validation: mapped file has no cdhash, completely unsigned? Code has to be at least ad-hoc signed.
    [ERROR:flutter[/lib/ui/ui_dart_state.cc]()(198)] Unhandled Exception: IsarError: Could not initialize IsarCore library. If you create a Flutter app, make sure to add isar_flutter_libs to your dependencies.
    

    Version

    • Platform: Mac, 11.6.4
    • Flutter version: 2.10.3
    • Isar version: ^2.2.1
    • Isar Generator version: 2.2.1

    More:

    % flutter doctor -v
    [βœ“] Flutter (Channel stable, 2.10.3, on macOS 11.6.4 20G417 darwin-x64, locale en-US)
        β€’ Flutter version 2.10.3 at /Users/me/development/flutter
        β€’ Upstream repository https://github.com/flutter/flutter.git
        β€’ Framework revision 7e9793dee1 (5 weeks ago), 2022-03-02 11:23:12 -0600
        β€’ Engine revision bd539267b4
        β€’ Dart version 2.16.1
        β€’ DevTools version 2.9.2
    
    [βœ“] Android toolchain - develop for Android devices (Android SDK version 32.1.0-rc1)
        β€’ Android SDK at /Users/me/Library/Android/sdk
        β€’ Platform android-32, build-tools 32.1.0-rc1
        β€’ Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
        β€’ Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
        β€’ All Android licenses accepted.
    
    [βœ“] Xcode - develop for iOS and macOS (Xcode 13.2.1)
        β€’ Xcode at /Applications/Xcode.app/Contents/Developer
        β€’ CocoaPods version 1.11.3
    
    [βœ“] Chrome - develop for the web
        β€’ Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
    
    [βœ“] Android Studio (version 2021.1)
        β€’ Android Studio at /Applications/Android Studio.app/Contents
        β€’ Flutter plugin can be installed from:
          πŸ”¨ https://plugins.jetbrains.com/plugin/9212-flutter
        β€’ Dart plugin can be installed from:
          πŸ”¨ https://plugins.jetbrains.com/plugin/6351-dart
        β€’ Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
    
    [βœ“] VS Code (version 1.66.1)
        β€’ VS Code at /Applications/Visual Studio Code.app/Contents
        β€’ Flutter extension version 3.38.1
    
    [βœ“] Connected device (2 available)
        β€’ macOS (desktop) β€’ macos  β€’ darwin-x64     β€’ macOS 11.6.4 20G417 darwin-x64
        β€’ Chrome (web)    β€’ chrome β€’ web-javascript β€’ Google Chrome 100.0.4896.75
    
    [βœ“] HTTP Host Availability
        β€’ All required HTTP hosts are available
    
    β€’ No issues found!
    

    Please let me know how to resolve this.

    And just to confirm, does Isar support Mac, Windows and Linux or is it best to use Hive for now?

    Also, I got the same errors when running flutter channel master (2.13.0-0.0.pre.429).

    Thank you!

    needs investigation area:core 
    opened by holdenhinkle 29
  • IsarError: Cannot open Environment: MdbxError (75): Value too large for defined data type

    IsarError: Cannot open Environment: MdbxError (75): Value too large for defined data type

    Steps to Reproduce Isar fails to open and throws the exception IsarError: Cannot open Environment: MdbxError (75): Value too large for defined data type. Apologies if I'm missing on something, I'm new to Isar, but I followed the documentation. Code snippet below.

    Code sample

    Future<void> main() async
    {  
      await runZonedGuarded(() async
      {
         final dir = await getApplicationSupportDirectory();
    
         final isar = await Isar.open(
          [TestSchema],
          name: 'default',
          directory: dir.path,
        );    
        runApp(Application(isar:isar));
      }, (error, stackTrace) {
        FirebaseCrashlytics.instance.recordError(error, stackTrace, fatal: true);
      });
    }
    
    @Collection()
    class Test
    {
      //tried changing that to Isar.autoIncrement, didn't help
      final id = Isar.minId; 
    
      @Index(unique: true)
      late String messageId;
    
      late int timestamp;
    
      String? title;
    
      String? body;
    }
    

    Version

    • Platform: Android
    • Flutter version: 3.0.5
    • Isar version: 3.0.0-dev.10
    • Isar Generator version: 3.0.0-dev.10
    needs investigation area:core 
    opened by 1N50MN14 26
  • Create TODO.md

    Create TODO.md

    If you want to post a TODO.md, I'd be happy to put some time into this and the other Isar libraries.

    I presume that Isar is meant to be "Hive 2.0", essentially Dart bindings to lmdb?

    opened by AKushWarrior 21
  • Windows build - Lost connection with device

    Windows build - Lost connection with device

    It appears as though storing a string over 7500 characters long (an encoded json string in this case) silently crashes Windows builds. The only message logged is "Lost connection with device".

    needs investigation needs more info area:core 
    opened by nelchael730 20
  • IsarError: Object Instance of 'Product' has no id and can therefore not be linked.

    IsarError: Object Instance of 'Product' has no id and can therefore not be linked.

    Steps to Reproduce I saw a ticket with the same issue as mine just got solved and closed, but I couldn't make it work in my case. I have two model ShoppingList and Product, and I try to add a product to a specific shopping list and get an error.

    Code sample shopping_list.dart

    import 'package:isar/isar.dart';
    
    import 'product.dart';
    
    part 'shopping_list.g.dart';
    
    @Collection()
    class ShoppingList {
      int id = Isar.autoIncrement;
      late String name;
      late DateTime dateAdded;
      final products = IsarLinks<Product>();
    
      ShoppingList(this.name, this.dateAdded);
    }
    

    product.dart

    import 'package:isar/isar.dart';
    
    part 'product.g.dart';
    
    @Collection()
    class Product {
      int id = Isar.autoIncrement;
      late String? itemCode;
      late String? itemType;
      late String? itemName;
      late String? manufacturerName;
      late String? manufactureCountry;
      late String? manufacturerItemDescription;
      late String? unitQty;
      late String? quantity;
      late String? unitOfMeasure;
      late bool? bIsWeighted;
      late String? qtyInPackage;
      late double? itemPrice;
      late double? unitOfMeasurePrice;
      late bool? allowDiscount;
      late String? itemStatus;
      late String? itemId;
      int cartQuantity = 1;
    
      Product(
          this.itemCode,
          this.itemType,
          this.itemName,
          this.manufacturerName,
          this.manufactureCountry,
          this.manufacturerItemDescription,
          this.unitQty,
          this.quantity,
          this.unitOfMeasure,
          this.bIsWeighted,
          this.qtyInPackage,
          this.itemPrice,
          this.unitOfMeasurePrice,
          this.allowDiscount,
          this.itemStatus,
          this.itemId,
          this.cartQuantity);
    
      Product.fromJson(dynamic json) {
        itemCode = json['itemCode'];
        itemType = json['itemType'];
        itemName = json['itemName'];
        manufacturerName = json['manufacturerName'];
        manufactureCountry = json['manufactureCountry'];
        manufacturerItemDescription = json['manufacturerItemDescription'];
        unitQty = json['unitQty'];
        quantity = json['quantity'];
        unitOfMeasure = json['unitOfMeasure'];
        bIsWeighted = json['bIsWeighted'];
        qtyInPackage = json['qtyInPackage'];
        itemPrice = double.tryParse(json['itemPrice'].toString());
        unitOfMeasurePrice = double.tryParse(json['unitOfMeasurePrice'].toString());
        allowDiscount = json['allowDiscount'];
        itemStatus = json['itemStatus'];
        itemId = json['itemId'];
      }
    
      Map<String, dynamic> toJson() {
        final map = <String, dynamic>{};
        map['itemCode'] = itemCode;
        map['itemType'] = itemType;
        map['itemName'] = itemName;
        map['manufacturerName'] = manufacturerName;
        map['manufactureCountry'] = manufactureCountry;
        map['manufacturerItemDescription'] = manufacturerItemDescription;
        map['unitQty'] = unitQty;
        map['quantity'] = quantity;
        map['unitOfMeasure'] = unitOfMeasure;
        map['bIsWeighted'] = bIsWeighted;
        map['qtyInPackage'] = qtyInPackage;
        map['itemPrice'] = itemPrice;
        map['unitOfMeasurePrice'] = unitOfMeasurePrice;
        map['allowDiscount'] = allowDiscount;
        map['itemStatus'] = itemStatus;
        map['itemId'] = itemId;
        return map;
      }
    
      @override
      bool operator ==(Object other) =>
          identical(this, other) ||
          other is Product &&
              runtimeType == other.runtimeType &&
              itemCode == other.itemCode;
    
      @override
      int get hashCode => itemCode.hashCode;
    }
    

    main.dart

      void addProductToShoppingList(int shoppingListId, Product product) async {
        final shoppingList = await _isar.shoppingLists.get(shoppingListId);
        await shoppingList!.products.load();
    
        shoppingList.products.add(product);
    
        await _isar.writeTxn(() async {
          await _isar.shoppingLists.put(shoppingList);
          await shoppingList.products.save();
        });
      }
    

    Version

    • Platform: iOS
    • Flutter version: 3.0.4
    • Isar version: 3.0.0-dev.5
    • Isar Generator version: 3.0.0-dev.5
    needs investigation area:dart 
    opened by CripyIce 20
  • After using database for a while with iOS device app crashes and won't start

    After using database for a while with iOS device app crashes and won't start

    Steps to Reproduce

    After working with a physical device and writing and reading to the database iOS app crashes with the following error and won't start again giving the same error. The only way to make it work again is doing flutter clean reinstalling pub and launching again (using Android Studio). Once I fix the error with flutter clean and I do several hot reloads it starts crashing again.

    * thread #9, name = 'io.flutter.1.ui', stop reason = EXC_BAD_ACCESS (code=2, address=0x1900000041)
        frame #0: 0x0000000101925e6c isar_flutter_libs`isar::filter::get_property::h4341207f261f3829 + 156
    isar_flutter_libs`isar::filter::get_property::h4341207f261f3829:
    ->  0x101925e6c <+156>: ldr    x9, [x8, #0x10]
        0x101925e70 <+160>: cmp    x9, x3
        0x101925e74 <+164>: b.hi   0x101925e48               ; <+120>
        0x101925e78 <+168>: mov    w0, #0x18
    Target 0: (Runner) stopped.
    

    Code sample

    @collection
    class FooDbModel {
      Id id = Isar.autoIncrement;
      late String email;
      late int fooAmount;
      bool firstFoo = false;
      List<BazDbModel> cats = [];
    
      toDomain() {
        return Foo(
          email: email,
          fooAmount: fooAmount,
          firstFoo: firstFoo,
          baz: baz.map((c) => c.toDomain()).toList(),
        );
      }
    }
    
    @embedded
    class BazDbModel {
      String? name;
      @Enumerated(EnumType.name)
      BazGender? gender;
      bool? knowsBirthdate;
      DateTime? birthdate;
      double? weight;
      @Enumerated(EnumType.name)
      BazWeightRange? weightRange;
    
      Cat toDomain() {
        return Baz(
          name: name,
          gender: gender,
          knowsBirthdate: knowsBirthdate,
          birthdate: birthdate,
          weight: weight,
          weightRange: weightRange,
        );
      }
    }
    
    // repository
      @override
      Future<Foo?> getByEmail(String email) async {
        FooDbModel? foo = await _db
            .collection<FooDbModel>()
            .filter()
            .emailEqualTo(email)
            .findFirst();
        return foo?.toDomain();
      }
    

    Details

    • Platform: iPhone 14 Pro Max
    • Flutter version: 3.3.4
    • Isar version: 3.0.2

    • [x] I searched for similar issues already
    • [x] I filled the details section with the exact device model and version
    • [x] I am able to provide a reproducible example
    needs more info 
    opened by hazzo 19
  • feat: add linux platform support

    feat: add linux platform support

    Signed-off-by: Ayush P Gupta [email protected]

    This PR aims to add linux host support for running isar inspector. Currently only macos support is added.

    Note- Linux app releases isnt configured yet.

    opened by apgapg 18
  • The embedded list object has a fixed list length

    The embedded list object has a fixed list length

    Steps to Reproduce

    Hi, the embedded list object has a fixed list length, how to make it a list with no fixed length, because when I try to add a new item(object.embeddedObjectList.add(embeddedObject)), I have this error : UnsupportedError (Unsupported operation: Cannot add to a fixed-length list)

    Code sample

    @collection
    class UserEntity {
      Id id;
      @Index(type: IndexType.value)
      String? username;
    
      List<AttendanceEntityEmbedded> attendancesEmbedded;
    
      UserEntity({
        required this.id,
        this.username,
        this.attendancesEmbedded = const [],
      });
    }
    
    

    Details

    • Platform: emulator-5554 β€’ android-x86 β€’ Android 10 (API 29) (emulator)
    • Flutter version: 3.3.2
    • Isar version: 3.0.5

    • [x] I searched for similar issues already
    • [x] I filled the details section with the exact device model and version
    • [x] I am able to provide a reproducible example
    opened by mandreshope 0
  • build(deps-dev): bump @vuepress/plugin-shiki from 2.0.0-beta.53 to 2.0.0-beta.60 in /docs

    build(deps-dev): bump @vuepress/plugin-shiki from 2.0.0-beta.53 to 2.0.0-beta.60 in /docs

    Bumps @vuepress/plugin-shiki from 2.0.0-beta.53 to 2.0.0-beta.60.

    Release notes

    Sourced from @​vuepress/plugin-shiki's releases.

    v2.0.0-beta.60

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.59

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.58

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.57

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.56

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.55

    Please refer to CHANGELOG.md for details.

    v2.0.0-beta.54

    Please refer to CHANGELOG.md for details.

    Changelog

    Sourced from @​vuepress/plugin-shiki's changelog.

    2.0.0-beta.60 (2022-12-28)

    Bug Fixes

    • markdown: avoid extracting headers in nested blocks by bumping mdit-vue (close #1201) (ecd3716)
    • theme-default: fix word breaking (close #1209) (#1210) (1e7761f)
    • theme-default: preserve url params when switching language (#1211) (941b2fe)

    Features

    • client: improve default head title resolver (c688270)
    • plugin-docsearch: add injectStyles option (close #948) (#1208) (34fb6c2)

    2.0.0-beta.59 (2022-12-14)

    Bug Fixes

    • bundler-webpack: fix order of extensionAlias (close #1082) (28eeb9b)

    2.0.0-beta.58 (2022-12-10)

    Bug Fixes

    • bundler-webpack: avoid duplicated style preload (e484a55)
    • bundler-webpack: fix module identifier matching (9d8d645)
    • bundler-webpack: partially fix ssr dependencies issue (83e7b6c)

    2.0.0-beta.57 (2022-12-09)

    Bug Fixes

    Build System

    • bump to vite 4 and rollup 3 (5fac2e6)

    ... (truncated)

    Commits
    • 5f3bbee build: publish v2.0.0-beta.60
    • 34fb6c2 feat(plugin-docsearch): add injectStyles option (close #948) (#1208)
    • 941b2fe fix(theme-default): preserve url params when switching language (#1211)
    • 666257a build: bump dependencies
    • 1e7761f fix(theme-default): fix word breaking (close #1209) (#1210)
    • bba63ea docs: add PR template
    • 5ea3425 build: bump dependencies
    • ecd3716 fix(markdown): avoid extracting headers in nested blocks by bumping mdit-vue ...
    • c688270 feat(client): improve default head title resolver
    • 480886d build: publish v2.0.0-beta.59
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • build(deps-dev): bump vuepress from 2.0.0-beta.53 to 2.0.0-beta.60 in /docs

    build(deps-dev): bump vuepress from 2.0.0-beta.53 to 2.0.0-beta.60 in /docs

    Bumps vuepress from 2.0.0-beta.53 to 2.0.0-beta.60.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • build(deps-dev): bump broadcast-channel from 4.18.1 to 4.19.1 in /packages/isar_web

    build(deps-dev): bump broadcast-channel from 4.18.1 to 4.19.1 in /packages/isar_web

    Bumps broadcast-channel from 4.18.1 to 4.19.1.

    Changelog

    Sourced from broadcast-channel's changelog.

    CHANGELOG

    X.X.X (comming soon)

    4.19.0 (28 December 2022)

    • Updated dependencies
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies javascript 
    opened by dependabot[bot] 1
  • build(deps): bump kotlin_version from 1.7.21 to 1.8.0 in /packages/isar_test/android

    build(deps): bump kotlin_version from 1.7.21 to 1.8.0 in /packages/isar_test/android

    Bumps kotlin_version from 1.7.21 to 1.8.0. Updates kotlin-gradle-plugin from 1.7.21 to 1.8.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Updates kotlin-stdlib-jdk7 from 1.7.21 to 1.8.0

    Release notes

    Sourced from kotlin-stdlib-jdk7's releases.

    Kotlin 1.8.0

    Changelog

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib-jdk7's changelog.

    1.8.0

    Analysis API

    • KT-50255 Analysis API: Implement standalone mode for the Analysis API

    Analysis API. FIR

    • KT-54292 Symbol Light classes: implement PsiVariable.computeConstantValue for light field
    • KT-54293 Analysis API: fix constructor symbol creation when its accessed via type alias

    Android

    • KT-53342 TCS: New AndroidSourceSet layout for multiplatform
    • KT-53013 Increase AGP compile version in KGP to 4.1.3
    • KT-54013 Report error when using deprecated Kotlin Android Extensions compiler plugin
    • KT-53709 MPP, Android SSL2: Conflicting warnings for androidTest/kotlin source set folder

    Backend. Native. Debug

    • KT-53561 Invalid LLVM module: "inlinable function call in a function with debug info must have a !dbg location"

    Compiler

    New Features

    • KT-52817 Add @JvmSerializableLambda annotation to keep old behavior of non-invokedynamic lambdas
    • KT-54460 Implementation of non-local break and continue
    • KT-53916 Support Xcode 14 and new Objective-C frameworks in Kotlin/Native compiler
    • KT-32208 Generate method annotations into bytecode for suspend lambdas (on invokeSuspend)
    • KT-53438 Introduce a way to get SourceDebugExtension attribute value via JVMTI for profiler and coverage

    Performance Improvements

    • KT-53347 Get rid of excess allocations in parser
    • KT-53689 JVM: Optimize equality on class literals
    • KT-53119 Improve String Concatenation Lowering

    Fixes

    • KT-53465 Unnecessary checkcast to array of reified type is not optimized since Kotlin 1.6.20
    • KT-49658 NI: False negative TYPE_MISMATCH on nullable type with when
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-43493 NI: False negative: no compilation error "Operator '==' cannot be applied to 'Long' and 'Int'" is reported in builder inference lambdas
    • KT-54393 Change in behavior from 1.7.10 to 1.7.20 for java field override.
    • KT-55357 IllegalStateException when reading a class that delegates to a Java class with a definitely-not-null type with a flexible upper bound
    • KT-55068 Kotlin Gradle DSL: No mapping for symbol: VALUE_PARAMETER SCRIPT_IMPLICIT_RECEIVER on JVM IR backend
    • KT-51284 SAM conversion doesn't work if method has context receivers
    • KT-48532 Remove old JVM backend
    • KT-55065 Kotlin Gradle DSL: Reflection cannot find class data for lambda, produced by JVM IR backend

    ... (truncated)

    Commits
    • da1a843 Add ChangeLog for 1.8.0-RC2
    • d325cf8 Call additional publishToMavenLocal in maven build scripts and enable info
    • 0403d70 Don't leave Gradle daemons after build scripts
    • 52b225d Fix task module-name is not propagated to compiler arguments
    • d40ebc3 Specify versions-maven-plugin version explicitly
    • 2e829ed Fix version parsing crash on Gradle rich version string
    • f603c0e Scripting, IR: fix capturing of implicit receiver
    • 06cbf8f Scripting, tests: enable custom script tests with IR
    • d61cef0 Fix deserialization exception for DNN types from Java
    • ea33e72 JVM IR: script is a valid container for local delegated properties
    • Additional commits viewable in compare view

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies java 
    opened by dependabot[bot] 1
  • replace suppressing rules for static analysis with ignore_for_file: type=lint

    replace suppressing rules for static analysis with ignore_for_file: type=lint

    Hello, I'm using the bloc pattern with the recommended very_good_analysis. This results in many linting warnings with isars generated files such as "Document all public members.", "Cascade consecutive method invocations on the same reference.", and so on. This gets especially frustrating when you keep making changes to your models.

    A simple solution would be to replace the generated rules with "// ignore_for_file: type=lint" which would remove linting from the generated files all together.

    • Isar version: 3.0.5
    enhancement 
    opened by DennisSchm 0
Releases(3.0.6-dev.0)
Owner
Isar Database
Super Fast Cross Platform Database for Flutter & Web Apps
Isar Database
NETCoreSync is a database synchronization framework where each client's local offline database

NETCoreSync NETCoreSync is a database synchronization framework where each client's local offline database (on each client's multiple devices) can be

Aldy J 65 Oct 31, 2022
A fast and space efficient library to deal with data in Dart, Flutter and the web.

Dart Data Dart Data is a fast and space efficient library to deal with data in Dart, Flutter and the web. As of today this mostly includes data struct

Lukas Renggli 14 Nov 4, 2022
Fast math typesetting for the web.

KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the web. Fast: KaTeX renders its math synchronously and doesn't need to refl

KaTeX 16.1k Jan 8, 2023
Flutter Web application having splash screen and providing Web view Using web view packege.

Webview with Splash Screen in Flutter Flutter Web View With Splash Screen. Subscribe Our YouTube Channel. Visit Website Demo OutPut ?? Links Getting S

Habib ullah 1 Dec 7, 2021
A super simple l10n tool with auto translations via GoogleSheet.

Flutter Translation Sheet Generator [fts] Command line application to make your l10n super fast. Compose your strings in yaml/json format and use Goog

Roi Peker 33 Oct 24, 2022
Super easy mood tracking app to demonstrate use of the Firebase Local Emulator Suite

Mood Tracker Example App in Flutter This is a simple example app showing how to use Cloud Functions and the Firebase Local Emulator inside a Flutter a

Andrea Bizzotto 8 Oct 14, 2022
A simple, cross-platform password manager created with Flutter.

PassMan PassMan Logo Β© 2021 by Yash Ahir is licensed under CC BY-NC 4.0 A simple, cross-platform password manager created with Flutter. How to run thi

Yash Ahir 19 Dec 14, 2022
This is the new version of my Task app "Tasko" which was done in Java. She is now in Flutter for the HotReload and the native Cross-Platform.

tasko_rem The Tasko App is now compatible on iOS, Android and others distribution, because it's made with Flutter ✨ You can now add task, check them o

Scythe 12 May 2, 2022
A cross-platform (Android/Windows/macOS/Linux) USB plugin for Flutter

quick_usb A cross-platform (Android/Windows/macOS/Linux) USB plugin for Flutter Usage List devices List devices with additional description Get device

Woodemi Co., Ltd 39 Oct 1, 2022
Cross platform application for iOS and Android using Google's SDK Flutter.

scout Cross platform application for iOS and Android using Google's SDK Flutter. Launch screen for the application. The menu for selecting cookies. Cu

null 0 Nov 9, 2021
The Fuse Wallet is a cross platform Ethereum wallet written in Dart and built on Flutter.

Fuse Wallet The Fuse Wallet is a cross platform Ethereum wallet written in Dart and built on Flutter. It's runninng on the Fuse network, but can be pl

null 4 Nov 9, 2022
A cross platform application written in flutter to help people stick to their routines and achieve their goals

Scheduler Scheduler is a cross platform application written in flutter to help people stick to their routines and achieve their goals. Our service inc

Sidheshwar S 3 Jan 21, 2022
A Cross Platform Piano made with Flutter

flutter_piano A Crossplatform Midi Piano built with Flutter.dev This application runs on both iOS and Android. This runs a custom crossplatform midi s

Rody Davis 380 Dec 14, 2022
A cross platform todo list app using flutter and dart programming language

Flutter Todos A cross platform todo list app using flutter and dart programming language. In this application, I used SQLite3 to persist data. The app

Mahmud Ahsan 61 Dec 29, 2022
Quiz App is cross-platform mobile app, that allows you to test your knowledge on various technologies through quizzes. It's built with Flutter & Dart

Quiz App is cross-platform mobile app, that allows you to test your knowledge on various technologies through quizzes. It's built with Flutter & Dart

RΓ©gis 6 Sep 19, 2022
Cross-platform GitHub client in Flutter and BLoC clean architecture

FlutterHub Cross-platform GitHub client in Flutter and BLoC clean architecture. SwiftHub - Swift version is available Try Web version Get Started To g

Khoren Markosyan 36 Nov 12, 2022
A fully cross-platform wrap of the Matomo tracking client for Flutter, using the Matomo API.

A fully cross-platform wrap of the Matomo tracking client for Flutter, using the Matomo Tracking API.

Floating Dartists 12 Jan 8, 2023
Relive is a cross-platform application that can be used both in Android/IOS and it is made using Flutter

?? Introduction Relive is a cross-platform application that can be used both in Android/IOS and it is made using Flutter. It aims to solve the mental

Akshat Tripathi 14 Nov 4, 2022