Code Monkey home page Code Monkey logo

android-customtabs's People

Contributors

luongvo avatar saschpe 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  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

android-customtabs's Issues

WebView Activity NullPointerException on loadUrl()

This is from Firebase Crashlytics:

Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'void android.webkit.WebView.loadUrl(java.lang.String)' on a null object reference at saschpe.android.customtabs.WebViewActivity.onCreate() at android.app.Activity.performCreate(Activity.java:6876) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1135) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3206) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) at android.app.ActivityThread.access$1100(ActivityThread.java:221) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) at android.os.Handler.dispatchMessage(Handler.java:102) at android.os.Looper.loop(Looper.java:158) at android.app.ActivityThread.main(ActivityThread.java:7225) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)

It's happened multiple times across different devices like and mostly Xiaomi(~33%).
70% of crashes occurred on Android 9.

And it's All written codes to interact with customTab:

val customTabsIntent: CustomTabsIntent? = CustomTabsIntent.Builder()
            .setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary))
            .setShowTitle(true)
            .build()

        CustomTabsHelper.addKeepAliveExtra(context, customTabsIntent!!.intent)

        CustomTabsHelper.openCustomTab(
            context, customTabsIntent,
            Uri.parse(uri),
            WebViewFallback()
        )

Downloads broken

It is currently not possible to download from the sonatype URL, a directory listing denied error appears.

Fatal Exception: java.lang.SecurityException - Binder invocation to an incorrect interface

Hi! I see a lot of crashes on start of my app via Crashlytics. They are similar but crashed in different activity on app start.

Fatal Exception: java.lang.SecurityException Binder invocation to an incorrect interface
android.os.Parcel.readException (Parcel.java:1959) android.os.Parcel.readException (Parcel.java:1905) android.support.customtabs.ICustomTabsService$Stub$Proxy.warmup (ICustomTabsService.java:294) androidx.browser.customtabs.CustomTabsClient.warmup (CustomTabsClient.java:176) **saschpe.android.customtabs.CustomTabsHelper$bindCustomTabsService$myConnection$1.onCustomTabsServiceConnected (CustomTabsHelper.java:2)** androidx.browser.customtabs.CustomTabsServiceConnection.onServiceConnected (CustomTabsServiceConnection.java:57) android.app.LoadedApk$ServiceDispatcher.doConnected (LoadedApk.java:1656) android.app.LoadedApk$ServiceDispatcher$RunConnection.run (LoadedApk.java:1685) android.os.Handler.handleCallback (Handler.java:789) android.os.Handler.dispatchMessage (Handler.java:98) android.os.Looper.loop (Looper.java:164) android.app.ActivityThread.main (ActivityThread.java:6938) java.lang.reflect.Method.invoke (Method.java) com.android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.java:327) com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1374)
Right now i think remove warm up feature. I hope it solve this crash right now.
Top of crashed vendors - Samsung (S10, a6, a50, s9), OnePlus, Nokia, Xiaomi, Huawei.

Program type already present: android.support.v4.app.INotificationSideChannel

Hello,
I can not compile my project after integrate this library. please help to see what's going wrong.
It always throws this exception:

AGPBI: {"kind":"error","text":"Program type already present: android.support.v4.app.INotificationSideChannel","sources":[{}],"tool":"D8"}
:app:transformDexArchiveWithExternalLibsDexMergerForDebug FAILED

Here is my gradle:

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "abc.xyz.com
```"
        minSdkVersion 24
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    dataBinding {
        enabled = true
    }
    lintOptions {
        disable 'RestrictedApi'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation project(path: ':BindingRecyclerView')
    implementation project(path: ':data')
    implementation project(path: ':domain')

    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:design:28.0.0'
    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'

    kapt "com.android.databinding:compiler:3.1.4"

    implementation 'com.google.dagger:dagger:2.17'
    kapt 'com.google.dagger:dagger-compiler:2.17'

    implementation 'io.reactivex.rxjava2:rxjava:2.2.2'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation "com.jakewharton.rxrelay2:rxrelay:2.0.0"

    implementation 'com.github.bumptech.glide:glide:4.8.0'
    kapt 'com.github.bumptech.glide:compiler:4.8.0'

    implementation('saschpe.android:customtabs:2.0.0')

    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

Using customTabsSession when building the CustomTabsIntent

Hey there,

I noticed that when we're building the CustomTabsIntent, we're not passing in a session when CustomTabsIntent.Builder can take a CustomTabsSession.

Are we still getting the full benefits of the warmup without passing in the session?

Thanks

First

Hi, I think chrome custom tabs works well already and I thought, in it's default use case, if the tabs aren't supported it goes back to a regular browser intent.

Anyways, If you are going to make an api on an api, I have some requests. I always wanted to be able to tap on the address bar to change URL, is that possible? And can you put a demo on play store?

Support package visibility on API level 30+

Android R introduces a new concept called package visibility which affects how apps can discover other apps (mainly through calls to resolveActivity() and queryIntentActivities().

This library uses the latter, meaning for apps targeting API level 30+ the library stops working.

There are a few possible ways to fix this:

  1. Ask developers to add the following code snippet to their manifest:

    <intent>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="https" />
    </intent>

    I tested this and it works (although I didn't test the case where there is no custom tabs enabled browser on the device).

  2. Alternatively ask developers to add the following queries tag to their manifest. According to the docs this should work as well, but I didn't test it.

  3. Declare one of the aforementioned queries element in this library's manifest. According to the documentation this should have the same effect as (1), but spares the developers using this library the effort to add the tag manually.

  4. Additionally or alternatively (the docs are not very clear on this) use the FLAG_ACTIVITY_REQUIRE_NON_BROWSER or FFLAG_ACTIVITY_REQUIRE_DEFAULT intent flag when querying for apps.

Hiding the title bar

Hi there,
Is it possible in any way to hide the title bar? I want to have a somewhat native feel to the app. I read your code and there are no options to do so.

Best,
T

Migrate away from jcenter/bintray

As bintray/jcenter etc. are being closed down and will only serve artifacts until early 2022 now would be a great time to migrate artifacts to e.g. maven central.

Update

Please update custom tabs to 28+ version.

Thank you very much for your effort!!! 👍

Proguard is weak

Hello everyone. Thanks for creating this awesome library.
I faced some unusual problem. Proguard doesn't obfuscate code as I expect.
I reviewed [https://github.com/saschpe/android-customtabs/blob/master/customtabs/proguard-rules.pro](Proguard rules) in the library and it looks like that this rule is too generic
-keep public class * { public protected *; }
This rule forces Proguard to keep all classes with public and protected fields.
Thanks for help.

IllegalArgumentException | Service not registered: saschpe.android.customtabs.CustomTabsHelper

Fatal Exception: java.lang.RuntimeException: Unable to pause activity : java.lang.IllegalArgumentException: Service not registered: saschpe.android.customtabs.CustomTabsHelper$1@dca9585
at android.app.LoadedApk.forgetServiceDispatcher(LoadedApk.java:1339)
at android.app.ContextImpl.unbindService(ContextImpl.java:1500)
at android.content.ContextWrapper.unbindService(ContextWrapper.java:649)
at saschpe.android.customtabs.CustomTabsHelper.unbindCustomTabsService(SourceFile:88)
at saschpe.android.customtabs.CustomTabsActivityLifecycleCallbacks.onActivityPaused(SourceFile:42)
at android.app.Application.dispatchActivityPaused(Application.java:254)
at android.app.Activity.onPause(Activity.java:1606)
at android.support.v4.app.FragmentActivity.onPause(FragmentActivity.java:402)
at android.app.Activity.performPause(Activity.java:6883)
at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1455)
at android.app.ActivityThread.performPauseActivityIfNeeded(ActivityThread.java:3889)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3866)
at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3834)
at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3808)
at android.app.ActivityThread.-wrap16(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1573)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6334)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)

Press the Close button of CustomTab to exit the application

Hello. Thanks for the wonderful library!

If you open a web page with CustomTab and close Customtab with the close button, the application will end.

The desired action is to return to the activity that opened the app's web page after pressing the close button.

Is there any way?

Android resource linking failed

it gives an error when add "compile 'saschpe.android:customtabs:2.0.0'" to gradle

Android resource linking failed
Output:  warn: removing resource com.kksal55.pregnancydaybyday:string/saati without required default value.
D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values-v28\values-v28.xml:7: error: resource android:attr/dialogCornerRadius not found.
D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values-v28\values-v28.xml:11: error: resource android:attr/dialogCornerRadius not found.
D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3512: error: resource android:attr/fontVariationSettings not found.
D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\incremental\mergeDebugResources\merged.dir\values\values.xml:3512: error: resource android:attr/ttcIndex not found.
error: failed linking references.

Command: C:\Users\koksa\.gradle\caches\transforms-1\files-1.1\aapt2-3.2.1-4818971-windows.jar\e31d5f6c0dd91c1ba7689e28307e3bdd\aapt2-3.2.1-4818971-windows\aapt2.exe link -I\
        C:\sdk\sdk\platforms\android-27\android.jar\
        --manifest\
        D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\ınstant_run_merged_manıfests\debug\processDebugManifest\instant-run\AndroidManifest.xml\
        -o\
        D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\processed_res\debug\processDebugResources\out\resources-debug.ap_\
        -R\
        @D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\incremental\processDebugResources\resources-list-for-resources-debug.ap_.txt\
        --auto-add-overlay\
        --java\
        D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\generated\not_namespaced_r_class_sources\debug\processDebugResources\r\
        --custom-package\
        com.kksal55.pregnancydaybyday\
        -0\
        apk\
        --preferred-density\
        420dpi\
        --output-text-symbols\
        D:\Belgelerim\AndroidStudioProjects\yenidogantakip\app\build\intermediates\symbols\debug\R.txt\
        --no-version-vectors
Daemon:  AAPT2 aapt2-3.2.1-4818971-windows Daemon #0

Question: does CustomTabsIntent support setPackageName()?

Was working on a piece of code and I was under the impression that CustomTabsIntent could setPackageName() using customTabsIntent.intent.setPackageName("com.google.android.youtube"). Can anyone confirm if I am missing something... I had to put it in this form because I could setPackageName but it wouldn't work.

  Intent intent = null;
                    try {
                        intent = new Intent(Intent.ACTION_VIEW);
                        intent.setPackage("com.google.android.youtube");
                        intent.setData(Uri.parse(url));
                        startActivity(intent);
                    } catch (ActivityNotFoundException e) {
                        CustomTabsIntent customTabsIntent = new CustomTabsIntent
                                .Builder()
                                .addDefaultShareMenuItem()
                                .setToolbarColor(view.getContext().getResources().getColor(R.color.colorPrimary))
                                .setShowTitle(true)
                                //  .setCloseButtonIcon(backArrow)
                                .build();

                        // This is optional but recommended
                        CustomTabsHelper.addKeepAliveExtra(view.getContext(), customTabsIntent.intent);

                        // This is where the magic happens...
                        CustomTabsHelper.openCustomTab(view.getContext(), customTabsIntent,
                                Uri.parse(url),
                                new WebViewFallback());
                    }

Manifest merger failed

hey , thanks in advance i want to use your library but i getting this version when try to sync gradle

Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.1.0) from [com.android.support:design:26.1.0] AndroidManifest.xml:28:13-35
is also present at [com.android.support:customtabs:26.0.2] AndroidManifest.xml:25:13-35 value=(26.0.2).
Suggestion: add 'tools:replace="android:value"' to element at AndroidManifest.xml:26:9-28:38 to override.

App crashes when using WebViewActivity to open a hyperlink without title

My prod app got this crash when using WebViewActivity.

Fatal Exception: java.lang.NullPointerException
       at android.text.SpannableString.(SpannableString.java:30)
       at saschpe.android.customtabs.WebViewActivity.a(SourceFile:138)
       at saschpe.android.customtabs.WebViewActivity.a(SourceFile:37)
       at saschpe.android.customtabs.WebViewActivity$1.onPageFinished(SourceFile:119)
       at android.webkit.CallbackProxy.handleMessage(CallbackProxy.java:447)
       at android.os.Handler.dispatchMessage(Handler.java:99)
       at android.os.Looper.loop(Looper.java:155)
       at android.app.ActivityThread.main(ActivityThread.java:5559)
       at java.lang.reflect.Method.invokeNative(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1074)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:841)
       at dalvik.system.NativeStart.main(NativeStart.java)

NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference

java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference
	at com.android.webview.chromium.WebViewContentsClientAdapter.getDefaultVideoPoster(WebViewContentsClientAdapter.java:1142)
	at org.chromium.android_webview.DefaultVideoPosterRequestHandler$1.run(DefaultVideoPosterRequestHandler.java:39)
	...

This is a bug in chromium and can be worked around as described here
Please add the CustomChromeClient with the workaround to the library

NoSuchFieldError: No static field web_view of type I in class

Fatal Exception: java.lang.NoSuchFieldError: No static field web_view of type I in class Lsaschpe/android/customtabs/R$id; or its superclasses (declaration of 'saschpe.android.customtabs.R$id' appears in base.apk!classes4.dex)
at saschpe.android.customtabs.WebViewActivity.onCreate + 59(WebViewActivity.java:59)
at android.app.Activity.performCreate + 7224(Activity.java:7224)
at android.app.Activity.performCreate + 7213(Activity.java:7213)
at android.app.Instrumentation.callActivityOnCreate + 1272(Instrumentation.java:1272)
at android.app.ActivityThread.performLaunchActivity + 2926(ActivityThread.java:2926)
at android.app.ActivityThread.handleLaunchActivity + 3081(ActivityThread.java:3081)
at android.app.servertransaction.LaunchActivityItem.execute + 78(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks + 108(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute + 68(TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage + 1831(ActivityThread.java:1831)
at android.os.Handler.dispatchMessage + 106(Handler.java:106)
at android.os.Looper.loop + 201(Looper.java:201)
at android.app.ActivityThread.main + 6810(ActivityThread.java:6810)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 547(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main + 873(ZygoteInit.java:873)

CustomTabsActivityLifecycleCallbacks for applications with multiple activites

Hello,

I'd like to register the CustomTabsActivityLifecycleCallbacks, but my application has two activities, one is the splash screen and one is the main activity. Is there a way that this callback can only do operations on a specified activity? I'd like to only use this for our main activity.

Thanks for the awesome library!

Requires AppCompat Theme

This library needs your app to use an AppCompat theme.

03-27 11:01:53.902 25851 25851 E AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.atwebviewtest/saschpe.android.customtabs.WebViewActivity}: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread.-wrap11(Unknown Source:0)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:164)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:6494)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.support.v7.app.AppCompatDelegateImplV9.createSubDecor(AppCompatDelegateImplV9.java:354)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.support.v7.app.AppCompatDelegateImplV9.ensureSubDecor(AppCompatDelegateImplV9.java:323)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at saschpe.android.customtabs.WebViewActivity.onCreate(SourceFile:43)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:7000)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:6991)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1214)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731)
03-27 11:01:53.902 25851 25851 E AndroidRuntime: 	... 9 more

This can be fixed by changing your theme to <application android:theme="@style/Theme.AppCompat[.*]">, but it is not ideal.

Cheers!
Joshua

Compiling against android P always causes fallback to webview

I'm not sure what has changed, but the same logic that was previously working to open url in a chrome tab no longer works. Compiling against android P may be the culprit. That, or chrome has updated their package name (which is less likely).

The culprit seems to be the following:

// Now packagesSupportingCustomTabs contains all apps that can handle both VIEW intents
// and service calls.
    if (packagesSupportingCustomTabs.isEmpty()) {
        packageNameToUse = null;

Looks like there are no packages supporting custom tabs generated from this chunk of code:

List<String> packagesSupportingCustomTabs = new ArrayList<>();
        for (ResolveInfo info : resolvedActivityList) {
            Intent serviceIntent = new Intent();
            serviceIntent.setAction(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION);
            serviceIntent.setPackage(info.activityInfo.packageName);
            if (pm.resolveService(serviceIntent, 0) != null) {
                packagesSupportingCustomTabs.add(info.activityInfo.packageName);
            }
        }

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.