GithubHelp home page GithubHelp logo

chimpkit3's Introduction

ChimpKit 3.1.1

ChimpKit is an API wrapper for the MailChimp API 2.0.

##Requirements

A MailChimp account and API key. You can see your API keys here.

ChimpKit includes uses ARC. If your project doesn't use ARC, you can enable it per file using the -fobjc-arc compiler flag under "Build Phases" and "Compile Sources" on your project's target in Xcode.

##Installation

There are two ways to add ChimpKit to your project:

Using Cocoapods:

pod 'ChimpKit'

Or using Git submodules. Add ChimpKit as a submodule of your git repository by doing something like:

cd myrepo
git submodule add https://github.com/mailchimp/ChimpKit3.git Libs/ChimpKit

Now add ChimpKit to your project by dragging the everything in the ChimpKit3 directory into your project.

##Usage

First, set an API key:

[[ChimpKit sharedKit] setApiKey:apiKey];

You can now make requests. For example, here's how to subscribe an email address:

Using a block:

NSDictionary *params = @{@"id": listId, @"email": @{@"email": @"[email protected]"}, @"merge_vars": @{@"FNAME": @"Freddie", @"LName":@"von Chimpenheimer"}};
[[ChimpKit sharedKit] callApiMethod:@"lists/subscribe" withParams:params andCompletionHandler:^(ChimpKitRequest *request, NSError *error) {
    NSLog(@"HTTP Status Code: %d", request.response.statusCode);
    NSLog(@"Response String: %@", request.responseString);

    if (error) {
        //Handle connection error
        NSLog(@"Error, %@", error);
        dispatch_async(dispatch_get_main_queue(), ^{
            //Update UI here
        });
    } else {
        NSError *parseError = nil;
        id response = [NSJSONSerialization JSONObjectWithData:request.responseData
                                                      options:0
                                                        error:&parseError];
        if ([response isKindOfClass:[NSDictionary class]]) {
            id email = [response objectForKey:@"email"];
            if ([email isKindOfClass:[NSString class]]) {
                //Successfully subscribed email address
                dispatch_async(dispatch_get_main_queue(), ^{
                    //Update UI here
                });
            }
        }
    }
}];

Using the delegate pattern:

NSDictionary *params = @{@"id": listId, @"email": @{@"email": @"[email protected]"}, @"merge_vars": @{@"FNAME": @"Freddie", @"LName":@"von Chimpenheimer"}};
[[ChimpKit sharedKit] callApiMethod:@"lists/subscribe" withParams:params andDelegate:self];

And implement the ChimpKitRequestDelegate protocol:

- (void)ckRequestSucceeded:(ChimpKitRequest *)aRequest {
    NSLog(@"HTTP Status Code: %d", aRequest.response.statusCode);
    NSLog(@"Response String: %@", aRequest.responseString);

    NSError *parseError = nil;
    id response = [NSJSONSerialization JSONObjectWithData:request.responseData
                                                  options:0
                                                    error:&parseError];
    if ([response isKindOfClass:[NSDictionary class]]) {
        id email = [response objectForKey:@"email"];
        if ([email isKindOfClass:[NSString class]]) {
            //Successfully subscribed email address
            dispatch_async(dispatch_get_main_queue(), ^{
                //Update UI here
            });
        }
    }
}

- (void)ckRequestFailed:(ChimpKitRequest *)aRequest andError:(NSError *)anError {
    //Handle connection error
    NSLog(@"Error, %@", anError);
    dispatch_async(dispatch_get_main_queue(), ^{
        //Update UI here
    });
}

Calling other API endpoints works similarly. Read the API documentation for details.

###Blocks and delegate methods can be called from a background queue

The examples above use dispatch_async to call back onto the main queue after parsing the response. If you've set shouldUseBackgroundThread to YES then ChimpKit will call your block from a background queue so you can parse the JSON response with low impact on interface responsiveness. You should dispatch_* back to the main queue before updating your UI as shown above. You can enable this behavior like so:

[[ChimpKit sharedKit] setShouldUseBackgroundThread:YES];

Controlling Timeout

ChimpKit defaults to a 10 second timeout. You can change that (globally) to 30 seconds like so:

[[ChimpKit sharedKit] setTimeoutInterval:30.0f];

MailChimp now supports OAuth2 and so does ChimpKit:

An example of logging in via OAuth is provided in the sample application. See ViewController.m.

##Copyrights

  • Copyright (c) 2010-2014 The Rocket Science Group. Please see LICENSE.txt for details.
  • MailChimp (c) 2001-2014 The Rocket Science Group.

chimpkit3's People

Contributors

amro avatar drewconner avatar kylef avatar zachorr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chimpkit3's Issues

iOS 6 Support

Is there a reason why ChimpKit does't support iOS 6? I know it's a shrinking user base, but I have some users that aren't able to upgrade yet. I was just wondering if you were using iOS 7-only calls somewhere, or if it was an arbitrary decision.

Double Opt In

When I add a member to a list using this api, it requires a second confirmation to make sure they want to get added (double opt-in). Is there a way to make it single opt in?

Subscription data

In CKSubscribeAlertView it should be [params setValue:@{@"email":textField.text} forKey:@"email"]; instead of [params setValue:textField.text forKey:@"email"];.

Also note that the response is not handled correctly (the server does not return 'true')

Success:
{"email":"<email_address>","euid":"1e248ecc86","leid":"116078909"}

Error:
{"status":"error","code":-100,"name":"ValidationError","error":"An email address must contain a single @"}

Not Writing First Name

Hi,

Currently, I am using the following code:

ChimpKit.sharedKit().apiKey = "******************"
let merge_vars = [
"FNAME" : "Test",
"LNAME" : "Name"
]
let params:[NSObject : AnyObject] = ["id": "
", "email": ["email": "[email protected]"], "merge_vars": merge_vars, "double_optin": false]
ChimpKit.sharedKit().callApiMethod("lists/subscribe", withParams: params, andCompletionHandler: {(response, data, error) -> Void in
if let httpResponse = response as? NSHTTPURLResponse {
ALPLogInfo("MailChimp reponse status code: (httpResponse.statusCode)")
}
})

It works as desired, except that the first name is being left blank. The last name and email are writing ok, any thoughts on why the first name is being left blank?

Thanks

ChimpKitSampleApp crashes on attempts to subscribe

Main Thread Checker: UI API called on a background thread: -[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]
PID: 54674, TID: 1742462, Thread name: (none), Queue name: NSOperationQueue 0x60400002bee0 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4 ChimpKitSampleApp 0x00000001076cccaf -[CKSubscribeAlertView showSubscribeError] + 127
5 ChimpKitSampleApp 0x00000001076cd22f __55-[CKSubscribeAlertView alertView:clickedButtonAtIndex:]_block_invoke + 479
6 ChimpKitSampleApp 0x00000001076c8789 -[ChimpKit URLSession:task:didCompleteWithError:] + 553
7 CFNetwork 0x000000010e31e437 __51-[NSURLSession delegate_task:didCompleteWithError:]_block_invoke.207 + 80
8 Foundation 0x000000010a2a0363 NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK + 7
9 Foundation 0x000000010a2a01ca -[NSBlockOperation main] + 68
10 Foundation 0x000000010a29e6b2 -[__NSOperationInternal _start:] + 766
11 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
12 libdispatch.dylib 0x000000010d457e14 _dispatch_block_invoke_direct + 592
13 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
14 libdispatch.dylib 0x000000010d457e14 _dispatch_block_invoke_direct + 592
15 libdispatch.dylib 0x000000010d457ba4 dispatch_block_perform + 109
16 Foundation 0x000000010a29a75b __NSOQSchedule_f + 337
17 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
18 libdispatch.dylib 0x000000010d458b35 _dispatch_continuation_pop + 967
19 libdispatch.dylib 0x000000010d456fb0 _dispatch_async_redirect_invoke + 780
20 libdispatch.dylib 0x000000010d45e3c8 _dispatch_root_queue_drain + 664
21 libdispatch.dylib 0x000000010d45e0d2 _dispatch_worker_thread3 + 132
22 libsystem_pthread.dylib 0x000000010d97d169 _pthread_wqthread + 1387
23 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
2018-04-30 00:17:46.155415+0200 ChimpKitSampleApp[54674:1742462] [reports] Main Thread Checker: UI API called on a background thread: -[UIAlertView initWithTitle:message:delegate:cancelButtonTitle:otherButtonTitles:]
PID: 54674, TID: 1742462, Thread name: (none), Queue name: NSOperationQueue 0x60400002bee0 (QOS: UNSPECIFIED), QoS: 0
Backtrace:
4 ChimpKitSampleApp 0x00000001076cccaf -[CKSubscribeAlertView showSubscribeError] + 127
5 ChimpKitSampleApp 0x00000001076cd22f __55-[CKSubscribeAlertView alertView:clickedButtonAtIndex:]_block_invoke + 479
6 ChimpKitSampleApp 0x00000001076c8789 -[ChimpKit URLSession:task:didCompleteWithError:] + 553
7 CFNetwork 0x000000010e31e437 __51-[NSURLSession delegate_task:didCompleteWithError:]_block_invoke.207 + 80
8 Foundation 0x000000010a2a0363 NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK + 7
9 Foundation 0x000000010a2a01ca -[NSBlockOperation main] + 68
10 Foundation 0x000000010a29e6b2 -[__NSOperationInternal _start:] + 766
11 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
12 libdispatch.dylib 0x000000010d457e14 _dispatch_block_invoke_direct + 592
13 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
14 libdispatch.dylib 0x000000010d457e14 _dispatch_block_invoke_direct + 592
15 libdispatch.dylib 0x000000010d457ba4 dispatch_block_perform + 109
16 Foundation 0x000000010a29a75b __NSOQSchedule_f + 337
17 libdispatch.dylib 0x000000010d452848 _dispatch_client_callout + 8
18 libdispatch.dylib 0x000000010d458b35 _dispatch_continuation_pop + 967
19 libdispatch.dylib 0x000000010d456fb0 _dispatch_async_redirect_invoke + 780
20 libdispatch.dylib 0x000000010d45e3c8 _dispatch_root_queue_drain + 664
21 libdispatch.dylib 0x000000010d45e0d2 _dispatch_worker_thread3 + 132
22 libsystem_pthread.dylib 0x000000010d97d169 _pthread_wqthread + 1387
23 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
2018-04-30 00:17:52.062559+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x000000010819eb0f -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2290
5 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
6 UIKit 0x00000001087a24d3 -[_UILabelLayer layoutSublayers] + 55
7 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
8 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
9 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
10 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
11 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
12 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
13 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
14 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)
2018-04-30 00:17:52.064032+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x000000010819eb0f -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2290
5 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
6 UIKit 0x00000001087a24d3 -[_UILabelLayer layoutSublayers] + 55
7 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
8 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
9 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
10 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
11 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
12 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
13 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
14 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)
2018-04-30 00:17:52.065252+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x000000010819eb0f -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2290
5 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
6 UIKit 0x00000001087a24d3 -[_UILabelLayer layoutSublayers] + 55
7 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
8 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
9 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
10 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
11 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
12 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
13 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
14 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)
2018-04-30 00:17:52.066496+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x0000000108189c17 -[UIView(Hierarchy) layoutSubviews] + 272
5 UIKit 0x0000000108dfab59 -[_UIDimmingKnockoutBackdropView layoutSubviews] + 48
6 UIKit 0x000000010819e808 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1515
7 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
8 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
9 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
10 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
11 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
12 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
13 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
14 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
15 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)
2018-04-30 00:17:52.067406+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x000000010819e09e -[UIView(CALayerDelegate) _wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:] + 167
5 UIKit 0x000000010819e848 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1579
6 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
7 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
8 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
9 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
10 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
11 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
12 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
13 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
14 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)
2018-04-30 00:17:52.068232+0200 ChimpKitSampleApp[54674:1742462] This application is modifying the autolayout engine from a background thread after the engine was accessed from the main thread. This can lead to engine corruption and weird crashes.
Stack:(
0 Foundation 0x000000010a4acdf7 _AssertAutolayoutOnAllowedThreadsOnly + 77
1 Foundation 0x000000010a4acaba -[NSISEngine _optimizeWithoutRebuilding] + 61
2 Foundation 0x000000010a2bd639 -[NSISEngine optimize] + 108
3 Foundation 0x000000010a4aa01d -[NSISEngine performPendingChangeNotifications] + 84
4 UIKit 0x000000010819eb0f -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 2290
5 QuartzCore 0x0000000107ac161a -[CALayer layoutSublayers] + 177
6 QuartzCore 0x0000000107ac582b _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395
7 QuartzCore 0x0000000107a4c29f _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 343
8 QuartzCore 0x0000000107a79940 _ZN2CA11Transaction6commitEv + 568
9 QuartzCore 0x0000000107a7a005 _ZN2CA11Transaction14release_threadEPv + 213
10 libsystem_pthread.dylib 0x000000010d97f1aa _pthread_tsd_cleanup + 534
11 libsystem_pthread.dylib 0x000000010d97eee9 _pthread_exit + 79
12 libsystem_pthread.dylib 0x000000010d97d24b _pthread_wqthread + 1613
13 libsystem_pthread.dylib 0x000000010d97cbe9 start_wqthread + 13
)

DRUtil.h import error?

The Sample Code when run says it cannot find DRUtil.h.

What is that and what do we do to include it so the sample code runs?

UIAlertView Deprecated, use UIAlertController under iOS 8 with extra fields

The current ChimpKit uses UIAlertView, which is great for iOS 7, but iOS 8 introduced UIAlertController. ChimpKit should check for iOS 8 and use the new class, which also provides the ability to add more than one text field. It would be great opportunity to have the user supply FirstName / LastName in addition to email address.

Invalid email address crashes app

When an invalid email address is entered in your CKSubscribeAlertView, the app crashes.

File: CKSubscribeAlertView.m
Line of error: 84

[errorAlertView show];

Thank you,

CKScanViewController uses camera, requires NSCameraUsageDescription in Info.plist

When using ChimpKit via cocoa pods , app submission detects camera usage in CKScanViewController and requires the app's Info.plist to have NSCameraUsageDescription:

Missing Info.plist key - This app attempts to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSCameraUsageDescription key with a string value explaining to the user how the app uses this data.

Can you make CKScanViewController an optional subspec?

Static Analyzer warnings for debug-only variable "responseString"

When running the static analyzer, two errors show up:

Pods/ChimpKit/ChimpKit3/Helper Objects/CKSubscribeAlertView.m:103:20: Value stored to 'responseString' during its initialization is never read
Pods/ChimpKit/ChimpKit3/Helper Objects/CKAuthViewController.m:243:14: Value stored to 'responseString' during its initialization is never read

Consider moving the NSLog inside the "if (kCKDebug)" in the following code: (same issue in both places)

NSString *responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
if (kCKDebug) NSLog(@"Response String: %@", responseString);

Many projects strive to build with zero warnings, including the static analyzer. This should be a quick fix and will make it easier for developers to maintain "zero warning" build policies.

Double Opt In

When I add a member to a list using this api, it requires a second confirmation to make sure they want to get added (double opt-in). Is there a way to make it single opt in?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.