Kinvey SDK Download

Version 3.12.4 - Feb 12, 2019
We recommend you use our CDN to include the latest version.
or download the library directly


Want to see how the rest of your backend is evolving? Check out the timeline.

Our SDKs are now open source! If you'd like to contribute code, suggest improvements or just take a look at how things work, check out the source on github.

Notice: Starting with our 4.0.0 release we no longer support AngularJS. This platform has been deprecated and we recommend you use Angular.

- Feb 12, 2019

  • Fixed: Prevent duplicate Live Service messages after a reconnection is made to PubNub. #389

- Nov 2, 2018

  • Enhancement: Allow loginWithMIC() to work properly when viewing a NativeScript application with the NativeScript Preview App. #377
  • Fixed: Use default AuthorizationGrant if null is provded to loginWithMIC(). #372
  • Fixed: Merge _socialIdentity properly with response from /me endpoint. #374 #375
  • Fixed: Return the correct error message if Files.findById() is called without a file id. #373

- Oct 4, 2018

  • Fixed: Mobile Identity Connect now works on Microsoft Edge and IE browsers. #364

- Oct 3, 2018

  • Fixed: Send custom properties to the backend using the x-kinvey-custom-request-properties header when creating an entity. #360

- Sep 20, 2018

  • Fixed: Update rxjs to 6.x. #353
  • Enhancement: Add new defice info header. #343

- Aug 2, 2018

  • Fixed: Return response from backend when calling datastore.find(). #342
  • Enhancement: Updated rxjs to 6.x. #340

- Jul 25, 2018

  • Fixed: The error returned from the server when Kinvey.Files.downloadByUrl() fails is now thrown properly. #333
  • Fixed: An error is not thrown when trying to upload a file and no metadata is provided. #334
  • Changed: A query is not longer accepted to push a subset of items to the backend. #331

- Jul 9, 2018

  • Fixed: Use correct Authorization header value when sending a request to refresh a MIC access token. #315
  • Fixed: Queue network requests while in the middle of refreshing a MIC access token. This prevents other requests from invalidating the newly refreshed access token. #321

- Jun 29, 2018

  • Enhancement: Calculate and validate file size before uploading the file. Any size provided to Files.upload() will be overridden with the size calculated by the SDK. #313
  • Fixed: Remove _kmd.local property on an entity before it is send to the backend. _kmd.local is a property created by the SDK used to track if an entity was created using the SDK. #310
  • Fixed: The active user will no longer be removed if local storage is being used to cache data loaded with the DataStore and the cache is cleared. #311

- Jun 15, 2018

  • Enhancement: Add support to handle Mobile Identity Connect OAuth errors in redirectUri response. #307

- Jun 1, 2018

  • Fixed: When calling to update the active users data, any data that was deleted since the last call will also be removed from the active user stored on the device. #299
  • Fixed: Any error thrown in the onNext function while using an observable will cause the onError function to be called with the thrown error. The subscriber will also be unsubscribed from the observable. #302

- May 23, 2018

  • Enhancement: Add support for Server Side Delta Set. #270
var datastore = $kinvey.DataStore.collection('books');

// Turn on for datastore instance
datastore.useDeltaSet = true; // Default is false

// Pass options.useDeltaSet to override datastore default for a pull() request.
// It will use value of datastore.useDeltaSet as default.
var promise = datastore.pull(query, { useDeltaSet: true });

// Pass options.useDeltaSet to override datastore default for a pull() request.
// It will use value of datastore.useDeltaSet as default.
var promise = datastore.find(query, { useDeltaSet: true });

- May 4, 2018

  • Enhancement: Add validation that checks if a redirectUri provided to mic.login() is a string. If the redirectUri is not a string then an Error will be thrown. #283
  • Fixed: Add support for kinveyFileTTL and kinveyFileTLS query parameters for KinveyFile references on a DataStore collection. #289
var dataStore = Kinvey.DataStore.collection('pets');
dataStore.findById('3f583e9f-d064-4a25-a953-6cf0a3dc2ff1', { kinveyFileTTL: 3600, kinveyFileTLS: true })
  .subscribe(function(pet) {
        "_id": "3f583e9f-d064-4a25-a953-6cf0a3dc2ff1",
        "_acl": {...},
        "dogName": "Bob",
        "furColor": "brown with black spots",
        "pawPrintPicture": {
          "_type": "KinveyFile",
          "_id": "325620e4-93dd-4a26-9f84-8a5e62c0db11",
          "_filename": "bobsPawPrint.png",
          "_acl": { ... },
          "_downloadURL": <Google Cloud Storage download URL>,
          "_expiresAt": "2018-06-18T23:07:23.394Z"
  }, function(error) {
    // ...

- Mar 29, 2018

  • Enhancement: Previously, a datastore instance would implicitly push pending entity changes before performing a request that would overwrite the local entity changes. This change removes the implicit push and will instead return an error stating that there are entities that need to be synced before you complete the action. #276
  • Enhancement: You can now provide a instanceId as a config option to init(). This will setup the backend and Mobile Identity Connect API urls to use your instanceId properly. #278
app.config(['$kinveyProvider', function($kinveyProvider) {
    appKey: '<appKey>',
    appSecret: '<appSecret>'
    instanceId: '<my-subdomain>'
  • Fixed: Check that a value is an object before calling Object.keys() in Query.isSupportedOffline(). #245
  • Fixed: Use es6-promise for promises in live service related files instead of native promises. #272

- Mar 13, 2018

  • Enhancement: The default API version used by Mobile Identity Connect is now v3. #259 #268

  • Enhancement: Auto Pagination Support. #260

The Kinvey backend imposes a limit of 10,000 entities on data requests. If your app needs to pull a larger number of entities to the cache, you can request the SDK to "auto-paginate". The SDK will then retrieve the entire set of entities page by page. This feature only applies to Cache and Sync stores.

var dataStore = $kinvey.DataStore.collection('books', Kinvey.DataStoreType.Sync);

//Pull the entire collection page by page.
var promise = dataStore.pull(null, { autoPagination: true })
  .then(function onSuccess(count) {
    // "count" represents the number of entities retrieved
  }).catch(function onError(error) {
    // ...

Breaking change: Previously, DataStore.pull() returned an array of the retrieved entities. With this release, the response of pull has changed to the count of retrieved entities.

If you need the array of entities retrieved by a pull in your app, you should call find after the pull has completed.

  • Fixed: The authorization header for Mobile Identity Connect token requests now uses the long-form OAuth Client ID. This fix is only relevant to apps that use multiple auth providers. A detailed discussion on OAuth Client IDs can be found in the Mobile Identity Connect guide. #263

- Feb 26, 2018

  • Enhancement: We've restructured our class hierarchy for working with data, to facilitate future performance improvements.
  • Enhancement: CacheStore methods create() and update() can now handle more concurrent requests.
  • Enhancement: CacheStore.delete() method now applies the same query both locally and against the backend, instead of making separate "by-id" requests for entities found in the cache.
  • Enhancement: The clear() method for a CacheStore or SyncStore now clears the sync queue.
  • Enhancement: Sync items found for entities which are no longer present in cache will be cleared when a sync push is performed to prevent errors.
  • Enhancement: Improved the throttling of requests when doing a sync push.
  • Fixed: Database connections to WebSQL are now cached. #241
  • Fixed: Some browsers don't support Number.isNaN() so we added a polyfill. #243
  • Fixed: Update typescript definitions to allow anonymouse user signup. #242
  • Fixed: Export LiveServiceFacade instead of LiveService. #254

- Feb 9, 2018

  • Use correct config property for setting storage providers #228
  • _id field not returned when specifying fields for a query #233

- Jan 26, 2018

  • Enhancement: You can now specify which storage provider to use to cache data. See the code snippet below for an example. #213
app.config(['$kinveyProvider', function($kinveyProvider) {
    var Kinvey = $kinveyProvider.$get();
    appKey: '<appKey>',
    appSecret: '<appSecret>'
    storage: Kinvey.StorageProvider.WebSQL // or [Kinvey.StorageProvider.WebSQL, Kinvey.StorageProvider.IndexedDB]

// Possible Values
enum StorageProvider {
  • Enhancement: You can now use a datastore to perform actions on a subset of data in a collection without providing a query each time to match that subset of data. See the code snippet below for an example. #220
var datastore = $kinvey.DataStore.collection('books', $kinvey.DataStore.Sync, { tag: 'Kinvey' }); // Tag the datastore
var query = new $kinvey.Query().equalTo('author', 'Kinvey');
  .then(function() {
    return datastore.find().toPromise();
  .then(function(books) {
    // all of these books have Kinvey as their author
  • Fixed: Correctly sort entities that have a null or undefined value for the sort field. #205
  • Fixed: Add polyfill for Object.prototype.assign(). #225

- Jan 12, 2018

Full Changelog
- Fixed: Subscribe for messages sent to user's personal collections channel #172 - Fixed: Allow null and undefined values to be used in a equal and notEqual query #201 - Fixed: Remove fileds when processing query after sorting data #202

- Dec 14, 2017

Full Changelog
- Improvement: Use PubNub 4.19.0 rather then our custom fork. #193 - Improvement: We have updated the TypeScript definitions to support custom properties on a User instance. #183 - Improvement: Adopt a mono repo style repository. This change has no impact on the SDK output. It restructures our codebase to make releases and open source contributions easier. #171 ## 3.8.1 (2017-08-25) Full Changelog

- Sep 24, 2017

  • Imporvement: Live Service is now EA (Early Adopter) for our Angular SDK. Please check our Live Service Guide.
  • Bugfix: Support mutiple MIC providers in a single app.
  • Bugfix: Data was not correctly synced with the backend when using the LocalStorageAdapter and SessionStorageAdapter.

- Aug 25, 2017

  • Fixed: $kinvey.initialize() fixed to resolve with either an instance of $kinvey.User or null.

- Aug 24, 2017

  • Added: Requests are logged using loglevel. Please refer to the Troubleshooting Guide for more information.
  • Added: Support for multiple MIC providers in a single app. The SDK adds a micId to the client_id value when it makes a request to authenticate with Mobile Identity Connect.
  • Added: Replace native node modules with npm packages.
  • Fixed: In previous SDK versions, the active user was read and stored asychronously using the storage adapter used to cache data loaded from the datastore. This caused us to make the initialization of the SDK asychronous to read the active user from storage. Some SDK environments do not work well with an asynchronous initialization process. To fix this problem each SDK can now override the storage location to make this process work correctly for that particular SDK. The Angular SDK will store the active user in LocalStorage.
  • Fixed: Default to removing a user with hard equal to false. Please refer to the User Guide for more information.
  • Fixed: Throw any errors encountered when trying to load a storage adapter use to cache data loaded with a data store.
  • Deprecated: $kinvey.initialize() has been deprecated. Please use $kinveyProvider.init() instead. kinveyProvider.init() does not return a promise.

Warning If you start using $kinveyProvider.init() and have been using $kinvey.initialize() you will not have an active user anymore. You will need to migrate the active user to the new storage location by continuing to use $kinvey.initialize(). After the active user has been migrated you can replace $kinvey.initialize() with $kinveyProvider.init(). You can also just logout using $kinvey.User.logout() and ask the user to login again.

// --------------------------------------------------
// Example code snippet on how to migrate active user.
// ---------------------------------------------------

var initialized = false;

var app = angular.module('myApp', ['kinvey']);
app.config(['$kinveyProvider', function($kinveyProvider) {
    appKey: '<appKey>',
    appSecret: '<appSecret>'
}]);['$kinvey', '$rootScope', '$location', function($kinvey, $rootScope, $location) {
  initialized = $kinvey.User.getActiveUser() instanceof $kinvey.User;
  $rootScope.$on('$locationChangeStart', function(event, newUrl) {
    if (initialized === false) {
      event.preventDefault(); // Stop the location change

      // Initialize Kinvey
        appKey: '<appKey>',
        appSecret: '<appSecret>'
      }).then(function() {
        initialized = true;
        $location.path($location.url(newUrl).hash); // Go to the page
      }).catch(function(error) {
        // ...

- Aug 1, 2017

  • Fixed: Typo in bower.json

- Jul 8, 2017

  • Fixed: Allow special characters ('.', '$', '~', '>', '<', '!', '@') to be in the _id for an entity. #134
  • Fixed: Import es6-promise to prevent Promise Undefiend errors on environments that do not have a native promise implementation. #135
  • Fixed: Errors will now show the message property properly when logging errors to the console. #136
  • Fixed: Added a try/catch around openDatabase(). This allows any errors thrown when opening a new database connection to WebSQL be caught and used to reject the pending promise. #17

- Jun 30, 2017

  • Changed: https: will automatically be used when a custom hostname is missing a protocol. #129
  • Fixed: Prevent the active user from being null for a short period of time when setting the active user. #128

- Apr 27, 2017

  • Added: usePopupClass() as a static function to the User class for registering a popup class to be used for MIC authentication.
  • Added: operation property to results returned when pushing sync items to the backend. The property either be equal to $kinvey.SyncOperation.Create, $kinvey.SyncOperation.Update, or $kinvey.SyncOperation.Delete.
var store = $kinvey.DataStore.collection('books', $kinvey.DataStoreType.Sync);
var query = new $kinvey.Query().equalTo('title', 'Kinvey');
  .then(function(response) {
    // response.count contains the count of books removed matching the query
    return store.push();
  .then(function(results) {
    // Results is an array of responses from the pushing the sync items.
    // Each result object now contains an operation set to $kinvey.SyncOperation.Delete
  • Changed: restore() static function on the User class to throw an error whenever it is called. This function required the master secret for an application. We strongly advise not to do this in your application.
  • Changed: All toJSON() functions have now been replaced by toPlainObject(). The returned result is the exact same.
  • Changed: save(), create(), and update() on datastore instances to no longer accept an array of entities. See the example below to see how to save an array of entities.
var books = [{ name: 'book1' }, { name: 'book2' }];
var store = $kinvey.DataStore.collection('books');
var promises = [];

// Loop through each of the books and save them one by one.
// You can now reference a book easily in the event an error
// occurs when saving a book.
books.forEach(function(book) {
  var promise =
    .catch(function(error) {
      console.log('Error saving book ' +;

// Using a third party library wait for all the promises to complete
  .then(function(books) {
    // ...
  • Changed: remove() and removeById() on datastore instances to now return the count of entities removed and not the actual entity removed.
var store = $kinvey.DataStore.collection('books');

// Remove books using a query
var query = new $kinvey.Query().equalTo('title', 'Kinvey');
  .then(function(response) {
    // response.count contains the count of books removed matching the query

// Remove a book using an id
  .then(function(response) {
    // response.count will equal 1 if the book was removed or 0 if the book was not removed
  • Removed: init() static function on $kinvey namespace. This was deprecated with v3.3.3.
  • Removed: baseUrl, protocol, and host properties on a client instance. These were deprecated with v3.0.0.
  • Removed: syncCount() and purge() on CacheStore and SyncStore instances. These were deprecated with v3.2.0.
  • Removed Kinvey.Users and Kinvey.UserStore. These were deprecated with v3.2.0.

- Apr 13, 2017

  • Share active user information with 1.x SDK. Just use version 3.4.5 to share active user information. No changes are needed to your 3.x application.
  • Use query to push a subset of sync entities to the backend. #120
  • Add more tests for query. #121
  • Allow multiple sync push operations to be in progress at the same time for difference collections.. Only one sync push operation is allowed to be in progress for the same collection. This fixes an issue caused with #117 that only allowed one sync push operation to be in progress regardless of the collection. #123

- Mar 27, 2017

  • Don't perform a sync push operation while one is already in progress. #117
  • Use tls: true by default when fetching files. #118
  • Catch a NotFoundError thrown when trying to store an active user in the cache. #119
  • Close IndexedDB connection before deleting database. This fixes an issue that prevented a user from being logged out on IE. #14

- Mar 16, 2017

  • Clone body of CacheRequest. #112
  • Add back es6-promise. #113
  • Add method to remove user by id. #114

- Feb 24, 2017

  • Correctly refresh MIC sessions. #104
  • Add missing error objects. #105
  • Fixed a bug that prevented files from being uploaded to GCS. #106
  • Add more unit tests for user logout. #110

- Feb 9, 2017

  • Refactor source to export all modules, expose Rack API, and to clean up code. #94 and #10
  • Remove password hash from stored user object. #102
  • Fix errors with using Kinvey.ACL on an entity that does not contain an _acl property. #103
  • Fix issues with push notifications. #8 and #9

- Jan 25, 2017

  • Fix a bug that causes a TypeError when unregistering a device for push notifications. Add push notification unit tests. #6
  • Add User.lookup() API to perform user discovery. #96
  • Fix a bug that causes any requests sent to the backend after updating a user to respond with a 401 status code. #101

- Jan 12, 2017

  • Prevent popup from being shown to allow an application to store 10mb of data with WebSQL when it hasn't stored more then 5mb of data. #7
  • Increase the size of a WebSQL database as needed. #8
  • Improved test coverage. #92
  • Fixed a bug that would produce a TypeError for a failed login or any network request that resulted in an InvalidCredentialsError #95

- Dec 16, 2016

  • Added error.kinveyRequestId as a property to error objects. This property is set to the X-Kinvey-Request-Id header value of a Kinvey API response. It is undefined by default. #84
  • Added a global get/set default timeout property on the client. The library sets the default timeout to a value of 60 seconds. You can change this value by passing a default timeout when you initialize the SDK. #85
  appKey: '<appKey>',
  appSecret: '<appSecret>',
  defaultTimeout: 30000 // 30 seconds in ms
  • Delta fetch requests now works with queries. #83
  • Fixed a check with instanceof in Mobile Identity Connect that caused a TypeError to be thrown. #87
  • Entities will now be persisted when calling store.sync on a data store instance. #88
  • Fixed issues that caused inconsistencies with Error objects. #89
  • Sort, limit, and skip now work correctly when querying the local cache. #90

- Dec 3, 2016

  • Bugfix: Add missing semicolon in aggregation count function.
  • Enhancement: Update aggregation processing.

- Dec 2, 2016

  • Bugfix: Aggregations have been fixed. See Aggregation Guide to learn how to use aggregations.
  • Bugfix: user._socialIdentity properties returned from the network are no longer removed on a succesful login.
  • Bugfix: Fixed a typo in the NetworkStore.

- Nov 22, 2016

  • Enhancement: All error objects are exposed on the Kinvey namespace. See Troubleshooting Guide for more information.
  • Bugfix: Fix name property on Error objects.
  • Bugfix: Merge user._socialIdentity properties when using an identity to login a user with the response from a login request.
  • Bugfix: Do not disconnect identities on a user logout.
  • Bugfix: Support private browser mode for Chrome, Firefox, and Safari.
  • Deprecated: $kinvey.initialize should be used instead of $kinveyProvider.init.
var initialized = false;
var app = angular.module('myApp', ['kinvey']);['$kinvey', '$rootScope', '$location', function($kinvey, $rootScope, $location) {
  $rootScope.$on('$locationChangeStart', function(event, newUrl) {
    if (initialized === false) {
      event.preventDefault(); // Stop the location change

      // Initialize Kinvey
        appKey: '<appKey>',
        appSecret: '<appSecret>'
      }).then(function() {
        initialized = true;
        $location..path($location.url(newUrl).hash); // Go to the page
      }).catch(function(error) {
          // ...

- Nov 22, 2016

  • Bugfix: Fix a bug that prevents a user from registering for push notifications.
  • Bugfix: Unregister the phonegap-plugin-push properly.

- Oct 26, 2016

  • Bugfix: Import UserStore from correct path. Kinvey.UserStore is now not undefined.
  • Bugfix: Add missing group function to data stores.
  • Bugfix: Fix typo of CacheRequest in Push module.

- Oct 7, 2016

  • Enhancement: Default apiHostname protocol to https: if one is not provided.
  • Bugfix: Make default timeout for network requests 10 seconds.
  • Bugfix: Prevent delta fetch from loading all entities when they are not needed.
  • Bugfix: Fixed bug that prevented a device from being registered and unregistered for push notifications.

- Sep 23, 2016

  • Bugfix: Don't send a DELETE request to the backend when calling clear() on a CacheStore or SyncStore instance to clear the local cache.
  • Bugfix: Allow a the credentials for a user to be provided as an object to $kinvey.User.login().
  • Bugfix: Use { field: <value> } format when serializing a query that contains an equalTo expression.
  • Bugfix: Fix a bug that prevented a popup from being opened when trying to login with $kinvey.User.loginWithMIC().
  • Deprecated: forgotUsername(), verifyEmail(), and resetPassword() instance functions on the $kinvey.User class. You should now use the static version of each function.

- Sep 12, 2016

  • Bugfix: Fixed bug that prevented logout of a user.

- Aug 12, 2016

  • Bugfix: Send correct X-Kinvey-Device-Information header format.
  • Bugfix: Update the cache to represent the state of the backend correctly when a sync pull is performed.
  • Bugfix: Expose the Acl class on the Kinvey namespace.

- Aug 3, 2016

- Jul 29, 2016

  • API Change: Deprecated connectWithIdentity() function on the User class. Use connectIdentity() instead. Please refer to the Social Identities Guide on how to connect a user to social identities.
  • Bugfix: Fixed a bug that would cause DataStore errors when connecting a user to a social identity.

- Jul 11, 2016

  • Bugfix: Store results from a pull in the cache.
  • Bugfix: Return server generated _id when creating entities.
  • Enhancement: Make file uploads resumable.
  • Enhancement: Make Kinvey.Promise accessible as a property on the Kinvey namespace.
  • Enhancement: Release version 3.0.0
  • API Change: To get an instance of DataStore you now have to call the collection() function instead of getInstance()
var store = $kinvey.DataStore.collection('myCollection');

- Jun 28, 2016

  • Bugfix: Use a promise polyfill to support browsers that don't have a native promise.
  • Bugfix: Don't throw an unexpected error when performing a find with a query on the CacheStore.
  • Bugfix: Fix an error with user logout.
  • Bugfix: Don't send an empty array back on sync completion.
  • Enhancment: Update IndexedDB, WebSQL, and Web Storage adapters.

- Jun 13, 2016

  • Bugfix: Listen for loadstart event on popups to capture redirect when using MIC login for url that results in a 404.
  • Bugfix: Provide a way to change the MIC hostname.
  • Bugfix: Fix issues when downloading files.
  • Bugfix: Make resetPassword() on the User class a static function that does not require an active user.
  • Bugfix: Add try/catch block to MIC to catch errors when trying to access popup urls that are cross domain.
  • Bugfix: Don't use indexeddbshim as not all browsers support WebSQL (e.g., Firefox)

- Jun 7, 2016

  • Bugfix: Improve error message when a sync failure occurs.
  • Bugfix: Check that a query is able to be run loccaly before it is processed.
  • Bugfix: Do not remove entity data when a sync failure occurs.
  • Bugfix: Add isEmailVerified() to the User class.
  • Bugfix: Check that global.device is not undefined.

- May 26, 2016

  • Bugfix: Fixed query syntax bug for filtering data.
  • Bugfix: Added more information to MIC error to help debug.
  • Enhancement: Added the ability to set a global app version.

- May 23, 2016

  • Bugfix: Allow a database to be created again after it is deleted.
  • Enhancement: Add back DataStoreType.Cache.
  • Enhancement: Implemented the observable pattern for data store fetch APIs. See the example below and refer to the dev center fetching guide for how to use this new API pattern.
var store = $kinvey.DataStore.getInstance('books');
store.find().subscribe(function(books) {
  // ...
}, function(error) {
  // ...
}, function() {
  // completed

- May 21, 2016

  • Bugfix: Swap the AngularHttpMiddleware class with the correct default http middleware class.

- May 20, 2016

  • Bugfix: RAPID is not compatible with DeltaFetch. Turn delta fetch off by default.
  • Bugfix: Fix issues related to the FileStore.
  • Bugfix: Fixed race condition when saving an array of entities to the cache.
  • Enhancement: Clear the database after user logout.

- Apr 22, 2016

  • Fixed a bug with push that prevented registration on iOS devices.

- Apr 20, 2016

  • Fixed push from being able to be registered on iOS devices.
  • Fixed sync bug that prevented entities from being added to the sync table to be synced at a later time.

- Apr 19, 2016

  • Fixed unknown provider $http.
  • Fixed push from being able to be registered on Android devices.
  • Fixed a bug that did not close popups in web browsers.

- Mar 29, 2016

  • Added adapters for http, popup, and device.

- Feb 24, 2016

  • Fixed a bug that caused the library to be exported incorrectly.

- Feb 22, 2016

  • Fixed a bug that prevented a user from being able to login with Mobile Identity Connect.
  • Fixed a bug that prevented entities from being updated.

- Feb 18, 2016

  • Fixed bug that would resolve promise when using incorrect credentials to login a user.
  • Fixed a bug that would remove entities locally on a device but not on the network.
  • Fixed a bug that would not allow items to be saved to the device locally.

- Feb 17, 2016

  • Bug fixes.

- Feb 3, 2016

  • Initial release.

Download Older Versions

We recommend using the latest version.

Version Download Date
3.12.4 Download Feb 12, 2019
3.12.2 Download Nov 2, 2018
3.12.1 Download Oct 4, 2018
3.12.0 Download Oct 3, 2018
3.11.7 Download Sep 20, 2018
3.11.6 Download Aug 2, 2018
3.11.5 Download Jul 25, 2018
3.11.4 Download Jul 9, 2018
3.11.3 Download Jun 29, 2018
3.11.2 Download Jun 15, 2018
3.11.1 Download Jun 1, 2018
3.11.0 Download May 23, 2018
3.10.3 Download May 4, 2018
3.10.2 Download Mar 29, 2018
3.10.1 Download Mar 13, 2018
3.10.0 Download Feb 26, 2018
3.9.10 Download Feb 9, 2018
3.9.9 Download Jan 26, 2018
3.9.6 Download Jan 12, 2018
3.9.3 Download Dec 14, 2017
3.9.0 Download Sep 24, 2017
3.8.1 Download Aug 25, 2017
3.8.0 Download Aug 24, 2017
3.5.3 Download Aug 1, 2017
3.5.2 Download Jul 8, 2017
3.5.1 Download Jun 30, 2017
3.5.0 Download Apr 27, 2017
3.4.5 Download Apr 13, 2017
3.4.4 Download Mar 27, 2017
3.4.2 Download Mar 16, 2017
3.4.1 Download Feb 24, 2017
3.4.0 Download Feb 9, 2017
3.3.5 Download Jan 25, 2017
3.3.4 Download Jan 12, 2017
3.3.3 Download Dec 16, 2016
3.3.2 Download Dec 3, 2016
3.3.1 Download Dec 2, 2016
3.3.0 Download Nov 22, 2016
3.2.3 Download Nov 22, 2016
3.2.2 Download Oct 26, 2016
3.2.1 Download Oct 7, 2016
3.2.0 Download Sep 23, 2016
3.1.0 Download Sep 12, 2016
3.0.3 Download Aug 12, 2016
3.0.2 Download Aug 3, 2016
3.0.1 Download Jul 29, 2016
3.0.0 Download Jul 11, 2016
3.0.0-beta.28 Download Jun 28, 2016
3.0.0-beta.27 Download Jun 13, 2016
3.0.0-beta.26 Download Jun 7, 2016
3.0.0-beta.25 Download May 26, 2016
3.0.0-beta.24 Download May 23, 2016
3.0.0-beta.23 Download May 21, 2016
3.0.0-beta.22 Download May 20, 2016
3.0.0-beta.18 Download Apr 22, 2016
3.0.0-beta.17 Download Apr 20, 2016
3.0.0-beta.16 Download Apr 19, 2016
3.0.0-beta.12 Download Mar 29, 2016
3.0.0-beta.8 Download Feb 24, 2016
3.0.0-beta.7 Download Feb 22, 2016
3.0.0-beta.6 Download Feb 18, 2016
3.0.0-beta.5 Download Feb 17, 2016
3.0.0-beta.4 Download Feb 3, 2016