Giter Club home page Giter Club logo

androidnetworktools's Introduction

Android Network Tools image

Android Arsenal CircleCI

Disappointed by the lack of good network apis in android / java I developed a collection of handy networking tools for everyday android development.

  • Port Scanning
  • Subnet Device Finder (discovers devices on local network)
  • Ping
  • Wake-On-Lan
  • & More :)

General info

The javadoc should provide all information needed to understand the methods, but if not feel free to add a issue in github and I'll address any questions! :)

Support

If you love what I'm doing with Android Network Tools and my other projects, you can now support my work directly! By buying me a coffee ☕, you're not just fueling my caffeine needs – you're helping me dedicate more time to developing and improving these open source projects. Every coffee counts and brings more innovation to the cybersecurity world. Thank you for your support – it means the world to me and the open source community!

Sample app

The sample app is published on Google Play & F-Droid to allow you to quickly and easier test the library. Enjoy! And please do feedback to us if your tests produce different results.

Get it on F-Droid Get it on Google Play

Usage

Add as dependency

This library is not yet released in Maven Central, until then you can add as a library module or use JitPack.io

add remote maven url

    repositories {
        maven {
            url "https://jitpack.io"
        }
    }

then add a library dependency. Remember to check for latest release here

    dependencies {
        compile 'com.github.stealthcopter:AndroidNetworkTools:0.4.5.3'
    }

Add permission

Requires internet permission (obviously...)

  <uses-permission android:name="android.permission.INTERNET" />

Port Scanning

A simple java based TCP / UDP port scanner, fast and easy to use. By default it will try and guess the best timeout and threads to use while scanning depending on if the address looks like localhost, local network or remote. You can override these yourself by calling setNoThreads() and setTimeoutMillis()

    // Synchronously
    ArrayList<Integer> openPorts = PortScan.onAddress("192.168.0.1").setMethodUDP().setPort(21).doScan();

    // Asynchronously
    PortScan.onAddress("192.168.0.1").setTimeOutMillis(1000).setPortsAll().setMethodTCP().doScan(new PortScan.PortListener() {
      @Override
      public void onResult(int portNo, boolean open) {
        if (open) // Stub: found open port
      }

      @Override
      public void onFinished(ArrayList<Integer> openPorts) {
        // Stub: Finished scanning
      }
    });

Subnet Devices

Finds devices that respond to ping that are on the same subnet as the current device. You can set the timeout for the ping with setTimeOutMillis() [default 2500] and the number of threads with setNoThreads() [default 255]

    // Asynchronously
    SubnetDevices.fromLocalAddress().findDevices(new SubnetDevices.OnSubnetDeviceFound() {
        @Override
        public void onDeviceFound(Device device) {
            // Stub: Found subnet device
        }

        @Override
        public void onFinished(ArrayList<Device> devicesFound) {
            // Stub: Finished scanning
        }
    });

Ping

Uses the native ping binary if available on the device (some devices come without it) and falls back to a TCP request on port 7 (echo request) if not.

     // Synchronously 
     PingResult pingResult = Ping.onAddress("192.168.0.1").setTimeOutMillis(1000).doPing();
     
     // Asynchronously
     Ping.onAddress("192.168.0.1").setTimeOutMillis(1000).setTimes(5).doPing(new Ping.PingListener() {
      @Override
      public void onResult(PingResult pingResult) {
        ...
      }
    });

Note: If we do have to fall back to using TCP port 7 (the java way) to detect devices we will find significantly less than with the native ping binary. If this is an issue you could consider adding a ping binary to your application or device so that it is always available.

Note: If you want a more advanced portscanner you should consider compiling nmap into your project and using that instead.

Wake-On-Lan

Sends a Wake-on-Lan packet to the IP / MAC address

      String ipAddress = "192.168.0.1";
      String macAddress = "01:23:45:67:89:ab";
      WakeOnLan.sendWakeOnLan(ipAddress, macAddress);

Misc

Other useful methods:

      // Get a MAC Address from an IP address in the ARP Cache
      String ipAddress = "192.168.0.1";
      String macAddress = ARPInfo.getMacFromArpCache(ipAddress);

Building

It's a standard gradle project.

Contributing

I welcome pull requests, issues and feedback.

  • Fork it
  • Create your feature branch (git checkout -b my-new-feature)
  • Commit your changes (git commit -am 'Added some feature')
  • Push to the branch (git push origin my-new-feature)
  • Create new Pull Request

androidnetworktools's People

Contributors

alamusitl avatar atrate avatar benju69 avatar leofernandesmo avatar osemenovboyarka avatar poussinou avatar stealthcopter 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  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

androidnetworktools's Issues

Null Pointer Excepion on PortScan

Here in this line sometimes i get NPE - cannot set boolean

public void cancel() {
        this.cancelled = true;
    }

i suggest to fix it by :

public void cancel() {
try {
        this.cancelled = true;
} catch (Exception ignored) {
}
    }

HTC Ping error

Dear friend, first of all thanks for this amazing library and sorry for my english.

After many tests with lot off devices i found a problem with Htc M9. When i make a ping request it's always return 0 and in PingResult error is always failed.

there are some examples from my logs :

PingResult{ia=speedtest.hyperhosting.gr/31.22.112.100, isReachable=false, error='failed, exit = 1', timeTaken=0.0, fullString='null', result='null'}

PingResult{ia=speedtest.hyperhosting.gr/31.22.112.100, isReachable=false, error='failed, exit = 1', timeTaken=0.0, fullString='null', result='null'}

PingResult{ia=speedtest.gr-ix.gr/62.217.126.171, isReachable=false, error='failed, exit = 1', timeTaken=0.0, fullString='null', result='null'}

PingResult{ia=speedtest.gr-ix.gr/62.217.126.171, isReachable=false, error='failed, exit = 1', timeTaken=0.0, fullString='null', result='null'}

So my question is if it's library bug or something going wrong with my code.
Thanks in advance.

Subnet Devices : Outofmemory error and illegal access error

Java.lang.IllegalAccessError while clicking on find subnet Devices button

java.lang.0utOfMemoryError:
at java.lang.Thread.nativeCreate (Native Method:0)
at java.lang.Thread.start (Thread.java:730)
at java.util.concurrent.ThreadPoolExecutor.addWorker
(ThreadPooIExecutor.java:941)
at java.util.concurrent.ThreadPoolExecutor.execute (Thread PoolExecutor.java:1 348)

It is working fine in my device, but some of my active users are getting both of the above errors in subnet Devices, please help

Attach APK to releases?

Would you mind attaching the corresponding .apk file to each release on the releases/ page – for folks who cannot or do not want to use Playstore? Thanks in advance!

Multiple ip has same MAC address.

When I use ARPInfo.getAllIPAndMACAddressesInARPCache() line, it returns me some IP and mac but there is one mac address which is same for 4 different ip. when I run "apr -a" in cmd it give me different mac that above code and cmd give me unique mac addresses.

Is It possible get info about Bytes , Icmp_seq ?

Is It possible with the library to get info about Bytes , Icmp_seq as below?
Thanks a lot

PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.022 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.027 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.029 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.030 ms

Still maintained?

Hi @stealthcopter – I'm just wondering, with the last commit being from 8/2018 and issues are left unanswered: are you still maintaining this project? Not complaining, just informal asking 😉 If you "gave up" on it, it would be good to have a clear statement on the fact (best "on the front-page", i.e. in the Readme) and maybe have the repo archived (which can be undone any time).

Thanks!

The application does not see the ip devices in the local wifi network

Hi!
Your library is amazing! But unfortunately it does not work correctly on some devices. For example, on such phones as Samsung Galaxy A5 (Android 8.0) and Samsung Galaxy A6 (Android 8.0), the library finds only the ip of the router in the wifi network, but it cann`t find other devices. Thus, for example, an application like this https://play.google.com/store/apps/details?id=com.overlook.android.fing&hl=ru the ip of other devices on the network finds. Wi fi network operates in the 2.4 kHz range. Please tell me what could be the problem!

I use library version 0.4.0

Redundant tags in library manifest

Hi, thanks for great library.

I've faced issues, while attaching you library:
1/ Support library in my project conflicted with version, added in library and I had to exclude it - you should make support library dependency provided instead of compile

2/ Manifest merger fails on allowBackup attribute. Probably, you should remove application tag from library manifest completely.
Error as follows:

Error:Execution failed for task ':app:processNormalGoogleTrueDebugManifest'.
> Manifest merger failed : Attribute application@allowBackup value=(false) from AndroidManifest.xml:27:9-36
  	is also present at [com.github.stealthcopter:AndroidNetworkTools:0.1.2] AndroidManifest.xml:14:9-35 value=(true).
  	Suggestion: add 'tools:replace="android:allowBackup"' to <application> element at AndroidManifest.xml:16:5-34:19 to override.

Latest APK broken

Package Metadata are broken for the latest release:

CRITICAL: Failed to get apk signature
ERROR: Package matching failed: invalid literal for int() with base 10: ''
INFO: Line was: package: name='com.stealthcotper.networktools' versionCode='' versionName='' platformBuildVersionName=''

Could you please check and fix? versionCode as well as versionName are empty.

Connectivity status

Hi Matthew,
do you think that the Ping utility could be used as connection availability utility? Do you see any downside? Thank you.

Native ping java Process streams not closed

Hi,

In the PingNative::ping method, the process' input/output/error streams are not closed after completion.

While using this library in Android API level 23 (Marshmallow), it was leading to a spike in number of pipe file descriptors, eventually crashing the user App as the number of FDs were exceeding the allowed limit per process, if GC was not invoked at that instant. However, I did not face the same issue in Android API level 28 (Oreo).

NullPointerException v3.08

I found a bug

Device Tested Google Pixel 2 XL (taimen), 4096MB RAM, Android 8.1

java.lang.NullPointerException:
at libcore.io.BlockGuardOs.close (BlockGuardOs.java:91)
at java.net.Inet6AddressImpl.icmpEcho (Inet6AddressImpl.java:270)
at java.net.Inet6AddressImpl.isReachable (Inet6AddressImpl.java:186)
at java.net.InetAddress.isReachable (InetAddress.java:478)
at java.net.InetAddress.isReachable (InetAddress.java:436)
at com.stealthcopter.networktools.ping.PingTools.doJavaPing (PingTools.java:71)
at com.stealthcopter.networktools.ping.PingTools.doPing (PingTools.java:42)
at com.stealthcopter.networktools.Ping$1.run (Ping.java:131)
at java.lang.Thread.run (Thread.java:764)

Subnet Scanner not showing all the devices.

Hello thanks for this great library first off. I have noticed that Subnet/LAN Scanner is not showing all the devices. I think this is happening because when it pings the IPs with NATIVE ping some type of devices may returns : no answer yet for icmp_seq from native terminal ,but this types show be added as online devices because they just don't accepts ping , but they are there ....
Sorry for my low English hope to be fixed soon.

i think you should check the output of Ping Process and if they returns timeout its ok they are right there 👍

Pattern M = Pattern.compile("(^[\\d]+) bytes from ([^:]+): icmp_seq=([^ ]+) ttl=([\\d]+) time=([^ ]+) ms");
                                Matcher MM = M.matcher(readData);
                                // TimeOut
                                Pattern M6 = Pattern.compile("^no answer yet for icmp_seq=([\\d]+)");
                                Matcher MM6 = M6.matcher(readData);

Typo in readme

Hi,

Just to signal you that there is a typo in the title of the readme
Andorid Network Tools
Should be
Android Network Tools

Regards,
Djavan

java.net.UnknownHostException: Unable to resolve host "https://www.app.com": No address associated with hostname

My url is unknownhost but it is reachable url.

12-21 09:40:41.296 17597-17597/? W/System.err: java.net.UnknownHostException: Unable to resolve host "https://www.app.com": No address associated with hostname
12-21 09:40:41.299 17597-17597/? W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:125)
12-21 09:40:41.302 17597-17597/? W/System.err: at java.net.Inet6AddressImpl.lookupAllHostAddr(Inet6AddressImpl.java:74)
12-21 09:40:41.303 17597-17597/? W/System.err: at java.net.InetAddress.getByName(InetAddress.java:708)
12-21 09:40:41.305 17597-17597/? W/System.err: at com.stealthcopter.networktools.PortScan.onAddress(PortScan.java:58)
12-21 09:40:41.307 17597-17597/? W/System.err: at com.chat.android.runmode.RunModeConfigurator.getPing(RunModeConfigurator.java:135)
12-21 09:40:41.309 17597-17597/? W/System.err: at com.chat.android.runmode.RunModeConfigurator.controlIps(RunModeConfigurator.java:92)
12-21 09:40:41.311 17597-17597/? W/System.err: at com.chat.android.runmode.RunModeConfigurator.(RunModeConfigurator.java:53)
12-21 09:40:41.313 17597-17597/? W/System.err: at com.chat.android.MyApplication.onCreate(MyApplication.java:197)
12-21 09:40:41.315 17597-17597/? W/System.err: at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1032)
12-21 09:40:41.316 17597-17597/? W/System.err: at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5876)
12-21 09:40:41.318 17597-17597/? W/System.err: at android.app.ActivityThread.-wrap3(ActivityThread.java)
12-21 09:40:41.320 17597-17597/? W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1699)
12-21 09:40:41.322 17597-17597/? W/System.err: at android.os.Handler.dispatchMessage(Handler.java:102)
12-21 09:40:41.323 17597-17597/? W/System.err: at android.os.Looper.loop(Looper.java:154)
12-21 09:40:41.324 17597-17597/? W/System.err: at android.app.ActivityThread.main(ActivityThread.java:6682)
12-21 09:40:41.324 17597-17597/? W/System.err: at java.lang.reflect.Method.invoke(Native Method)
12-21 09:40:41.325 17597-17597/? W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
12-21 09:40:41.326 17597-17597/? W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
12-21 09:40:41.327 17597-17597/? W/System.err: Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
12-21 09:40:41.328 17597-17597/? W/System.err: at libcore.io.Posix.android_getaddrinfo(Native Method)
12-21 09:40:41.328 17597-17597/? W/System.err: at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
12-21 09:40:41.329 17597-17597/? W/System.err: at java.net.Inet6AddressImpl.lookupHostByName(Inet6AddressImpl.java:106)
12-21 09:40:41.329 17597-17597/? W/System.err: ... 17 more

Timeout when host unreachable

Hello! There is how I start pinging

Ping.onAddress(domain).setDelayMillis(500).setTimeOutMillis(500).setTimes(999999999).doPing(pingListener)

It worked fine with specified timings when host is reachable. But when I disable ICMP on my server (for test purposes) the code start working incorrectly. At least TimeOutMillis or DelayMillis reached up to 10 seconds (I don't know how to define which timing is wrong).
Is it intentional behavior or may be I missed something?

Connection error

unable to access 'https://github.com/stealthcopter/AndroidNetworkTools.git/': Failed to connect to github.com port 443: Connection refused

also, when import using gradle:

Could not resolve com.github.stealthcopter:AndroidNetworkTools:0.3.8

any ideas?

PortScan() blocked UI thread and caused Progress Dialog is stopped and hang

Hi all,

I have implemented PortScan() function successfully.

However, it will block my Progress Dialog when running PortScan() function, whereby my Progress Dialog is called before PortScan() function.

The Progress Dialog is stopped and hang half way until the PortScan() is executed completely.

Is there any way to prevent blocking of my Progress Dialog when running PortScan() function?

Thanks.

My Source Code:

// Find Port Number Asynchronously
PortScan.onAddress("192.168.1.11").setTimeOutMillis(500).setPortsAll().setMethodTCP().doScan(object:

    PortScan.PortListener {
        override fun onResult(portNum:Int, open:Boolean) {
            if (open) {
                // Found new open port
            }
        }

        override fun onFinished(openPorts:ArrayList<Int>) {
            // Finished Scanning
            if(openPorts.isEmpty()) {

            }
            else {

            }
        }
    }
)

why the library ignore my setTimeOutMillis value?

Hello, I set the setTimeOutMillis but the library seems to ignore my short value.

PortScan.onAddress(ipAddress).setTimeOutMillis(100).setPort(Integer.valueOf(editPortNumberString)).doScan(new PortScan.PortListener() { ...

NetworkOnMainThreadException on Ping

I'm using the ping with url.But give me a NetworkOnMainThreadException.

Here's the code:

private void doPing() {
    try {
        Ping.onAddress("www.baidu.com").setTimeOutMillis(1000).setTimes(5).doPing(new Ping.PingListener() {
            @Override
            public void onResult(PingResult pingResult) {
                Log.e(TAG, "onResult: " + pingResult.toString());
            }

            @Override
            public void onFinished(PingStats pingStats) {
                Log.e(TAG, "onFinished: " + pingStats.toString());
            }
        });
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Synchronously single port scan setTimeOutMillis does not work

I am trying to scan a single port synchronously with:

ArrayList<Integer> openPorts = PortScan
                        .onAddress("address")
                        .setTimeOutMillis(1000)
                        .setPort(4000)
                        .doScan();

If the port to scan is closed/down this call hangs for multiple minutes and does not time out after 1000ms like expected.

Version: 0.2.1

ping command timeout and ttl arguments error ?

in the PingNative.java code

runtime.exec(pingCommand + " -c 1 -w " + timeoutSeconds + " -w" + ttl + " " + address);

maybe below is the right code?

-W + timeoutSeconds
-t" + ttl

Device Info:

  1. 天天模拟器 Android 4.4.4
  2. ZUK Z2 Android 7.1.2

Ping command help:

root@hlteuc:/ # ping
Usage: ping [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
[-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
[-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
[-w deadline] [-W timeout] [hop1 ...] destination

getting FileNotFoundException in library

W/System.err: java.io.FileNotFoundException: /proc/net/arp: open failed: EMFILE (Too many open files)
at libcore.io.IoBridge.open(IoBridge.java:452)
at java.io.FileInputStream.(FileInputStream.java:76)
at java.io.FileInputStream.(FileInputStream.java:103)
at java.io.FileReader.(FileReader.java:66)
at com.stealthcopter.networktools.ARPInfo.getLinesInARPCache(ARPInfo.java:126)
at com.stealthcopter.networktools.ARPInfo.getMACFromIPAddress(ARPInfo.java:38)
at com.stealthcopter.networktools.SubnetDevices$SubnetDeviceFinderRunnable.run(SubnetDevices.java:183)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: open failed: EMFILE (Too many open files)
07-30 11:42:51.902 8612-8750/com.test.ping W/System.err: at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:438)
... 9 more
07-30 11:42:52.091 8612-8844/com.test.ping W/art: Large object allocation failed: ashmem_create_region failed for 'large object space allocation': Too many open files

Library pings hostname instead of IP

Because of calling getHostName() instead of getHostAddress() on this line, ping will always try to use hostname instead of ip, even if user intended to ping IP directly.

It's not an issue if you parse ip from String input, however, if you try to perform ping of InetAddress object, obtained from NSLookup (it will contain hostname), actual address will depend on DNS in case of native ping.
And ping result will report actually requested ip, because it's conutructed before actual ping.

I'm not sure if it's completely fine to just replace getHostName() with getHostAddress(), because it can lead to different results as native ping, if user pings hostname.

As for java ping, this seems to be not an issue.

Detect Internet connection

Hi,
I am using your library to detect whether there is an Internet connection.

On some situations, the Mobile Data is enabled, but my app cannot connect to the Internet, the PingResult returns isReachable=true four fifths probability.

eg: on MIUI ROM, forbidden network through Network Control app.

Devices names not showing

Hi, I'm using this library to get list of devices connected to the router... it is giving me the list of IP addresses and mac addresses but not the device or at least vendor names.. I understand it is router specific also that some routers do not allow this information. But can you please add some methods to get device or vendor names? Thanks

PingStats: Why averageTimeTaken is multiplied by 100?

public PingStats(InetAddress ia, long noPings, long packetsLost, float totalTimeTaken, float minTimeTaken, float maxTimeTaken){
this.ia=ia;
this.noPings = noPings;
this.packetsLost = packetsLost;
this.averageTimeTaken = (100.0f * totalTimeTaken) / noPings;
this.minTimeTaken = minTimeTaken;
this.maxTimeTaken = maxTimeTaken;
}

In result:

noPings=5, packetsLost=0, averageTimeTaken=17738.74, minTimeTaken=166.108, maxTimeTaken=211.687

运行报错

Failed to resolve: com.github.stealthcopter:AndroidNetworkTools:0.3.0

Gradle project sync failed

Hello ,
As per you recommendation when i use this
compile 'com.github.stealthcopter:AndroidNetworkTools:0.1.2' in dependencies of build.gradle i have gradle project sync failed .
What is the possible solution to use your library please .
Thanks
Jitendra

gradle project sync failed -ping

UI thread blocked when find local devices in subnet

Hi @stealthcopter , when I am using your iib to scan devices inside local network, it blocked the ui thread, make the app not responding. Can you deal with it?

SubnetDevices.fromLocalAddress().findDevices(object : SubnetDevices.OnSubnetDeviceFound {
            override fun onDeviceFound(device: Device) {
            }
            override fun onFinished(devicesFound: java.util.ArrayList<Device>) {
            }

Looking forward to hearing from you.
Thanks a lot!

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.