GithubHelp home page GithubHelp logo

Comments (5)

notkmhn avatar notkmhn commented on September 24, 2024

@btsimonh so I couldn't pull the exact schema for this device since it's just the app partition without config section. If you have the dpid schema or can pull it from the server that'd be great for others who wanna use this on stock firmware. If you have the factory config data (uuid + auth_key), check out the profile-building/pull_active_response.py script which has some comments with how it works.

In any case, since it seems like a very similar device to the Avatar ASL04 backlight you posted, I've reused the schema for it. Please also check if the stock firmware works correctly with this dpid schema when just detached from cloud.

Its PR is #53

from tuya-cloudcutter.

troy-f avatar troy-f commented on September 24, 2024

bump, did this profile cause the device to show an A- ap after the exploit ran?

from tuya-cloudcutter.

btsimonh avatar btsimonh commented on September 24, 2024

Bought another of these yesterday.
(successful) Exploit log below.

device appeared as 'wlan0' in my router.

Will now try to OpenBeken it....
@notkmhn - Once I have openbeken on, I may be able to pull the config section if it still exists; although it's never seen the app or the cloud? What flash address is the config?

Click to expand log ``` Successfully built docker image [?] Select the brand of your device: Calex Arlec Avatar Ayococr > Calex CASENL CLOUDY_BAY DIY Euarne Fcmila Feit FLSNT Gosund Helloify

[?] Select the article number of your device: Holland-LED-Strip-900023.1
E27-A60-RGBCCT-429004.1-v2.0

Holland-LED-Strip-900023.1
UK-900018.1-v1.0

==> Toggle Tuya device's power off and on again 6 times, with ~1 sec pauses in between, to enable AP mode. Repeat if your device's SSID doesn't show up within ~30 seconds. For smart plugs long press the reset button on the device for about 5 seconds. See https://support.tuya.com/en/help/_detail/K9hut3w10nby8 for more information.
Wiping NetworkManager configs
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Found access point name: "SmartLife-BD20", trying to connect..
Device 'wlan0' successfully activated with '4e905258-7741-4d01-bd1e-011717604924'.
Connected to access point.
Waiting 1 sec to allow device to set itself up..
Running initial exploit toolchain..
Exploit run, saved device config to!
output=/work/configured-devices/reDRgL8mdMWJ.deviceconfig
Saved device config in /work/configured-devices/reDRgL8mdMWJ.deviceconfig
==> Turn the device off and on again once. Repeat 6 more times if your device's SSID doesn't show up within ~5 seconds. For smart plugs long press the reset button on the device for about 5 seconds. See https://support.tuya.com/en/help/_detail/K9hut3w10nby8 for more information.
Wiping NetworkManager configs
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Found access point name: "SmartLife-BD20", trying to connect..
Error: Connection activation failed: (53) The Wi-Fi network could not be found.
Wiping NetworkManager configs
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Scanning for "A-" "Geeni-" "GRID-" "iHome-" "LDV SMART+-" "Merkury-" "Nexxt Home-" "SL-CreeLighting-" "SL-FLSNT-" "SmartLife-" "TreatLife-SL-" SSID...
Found access point name: "A-BD20", trying to connect..
Device 'wlan0' successfully activated with '742b3353-c388-4d8b-9644-526408fa4fee'.
Connected to access point.
Configured device to connect to 'cloudcutterflash'
Device is connecting to 'cloudcutterflash' access point. Passphrase for the AP is 'abcdabcd' (without ')
Cutting device off from cloud..
==> Wait for 20-30 seconds for the device to connect to 'cloudcutterflash'. This script will then show the activation requests sent by the device, and tell you whether local activation was successful.
Using WLAN adapter: wlan0
Oct 9 07:56:21 dnsmasq[15]: started, version 2.80 cachesize 150
Oct 9 07:56:21 dnsmasq[15]: compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify dumpfile
Oct 9 07:56:21 dnsmasq-dhcp[15]: DHCP, IP range 10.42.42.10 -- 10.42.42.40, lease time 12h
Oct 9 07:56:21 dnsmasq-dhcp[15]: DHCP, sockets bound exclusively to interface wlan0
Oct 9 07:56:21 dnsmasq[15]: read /etc/hosts - 5 addresses
Configuration file: /dev/stdin
wlan0: Could not connect to kernel driver
Using interface wlan0 with hwaddr b8:27:eb:b9:38:a0 and ssid "cloudcutterflash"
wlan0: interface state UNINITIALIZED->ENABLED
wlan0: AP-ENABLED
Oct 9 07:56:25 dnsmasq-dhcp[15]: 1881913091 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:25 dnsmasq-dhcp[15]: 1881913091 client provides name: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPDISCOVER(wlan0) 50:8a:06:7b:bd:20
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 tags: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPOFFER(wlan0) 10.42.42.24 50:8a:06:7b:bd:20
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 next server: 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 1 option: 53 message-type 2
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 58 T1 6h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 client provides name: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPDISCOVER(wlan0) 50:8a:06:7b:bd:20
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 tags: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPOFFER(wlan0) 10.42.42.24 50:8a:06:7b:bd:20
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 next server: 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 1 option: 53 message-type 2
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 58 T1 6h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 client provides name: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPREQUEST(wlan0) 10.42.42.24 50:8a:06:7b:bd:20
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 tags: wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 DHCPACK(wlan0) 10.42.42.24 50:8a:06:7b:bd:20 wlan0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 next server: 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 1 option: 53 message-type 5
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 58 T1 6h
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:28 dnsmasq-dhcp[15]: 1881913091 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:29 dnsmasq[15]: query[A] h3.iot-dns.com from 10.42.42.24
Oct 9 07:56:29 dnsmasq[15]: config h3.iot-dns.com is 10.42.42.1
Oct 9 07:56:37 dnsmasq-dhcp[15]: 396177513 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:37 dnsmasq-dhcp[15]: 396177513 client provides name: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPDISCOVER(wlan0) 84:e3:42:48:7e:32
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 tags: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPOFFER(wlan0) 10.42.42.17 84:e3:42:48:7e:32
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 next server: 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 1 option: 53 message-type 2
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 58 T1 6h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 client provides name: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPDISCOVER(wlan0) 84:e3:42:48:7e:32
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 tags: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPOFFER(wlan0) 10.42.42.17 84:e3:42:48:7e:32
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 next server: 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 1 option: 53 message-type 2
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 58 T1 6h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 available DHCP range: 10.42.42.10 -- 10.42.42.40
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 client provides name: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPREQUEST(wlan0) 10.42.42.17 84:e3:42:48:7e:32
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 tags: wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 DHCPACK(wlan0) 10.42.42.17 84:e3:42:48:7e:32 wlan0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 requested options: 1:netmask, 3:router, 28:broadcast, 6:dns-server
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 next server: 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 1 option: 53 message-type 5
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 54 server-identifier 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 51 lease-time 12h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 58 T1 6h
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 59 T2 10h30m
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 1 netmask 255.255.255.0
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 28 broadcast 10.42.42.255
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 3 router 10.42.42.1
Oct 9 07:56:40 dnsmasq-dhcp[15]: 396177513 sent size: 4 option: 6 dns-server 10.42.42.1
Oct 9 07:56:48 dnsmasq[15]: query[A] h3.iot-dns.com from 10.42.42.24
Oct 9 07:56:48 dnsmasq[15]: config h3.iot-dns.com is 10.42.42.1
Using PSK v1 - Received PSK ID version 01
[I 221009 07:56:48 web:2239] 200 POST /v1/url_config (10.42.42.24) 5.95ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.active&et=1&t=81&uuid=reDRgL8mdMWJ&v=4.4&sign=73d250a5c6fda45e8af6d97d255f0a1d
[LOG] ==== Client request body ===
{'token': 'AAAAAA', 'softVer': '1.1.6', 'productKey': 'keyqwsdet7drnvue', 'protocolVer': '2.2', 'baselineVer': '40.00', 'productKeyStr': 'keyqwsdet7drnvue', 'hid': '508a067bbd20', 'modules': '[{"type":9,"softVer":"1.1.6","online":true}]', 'devAttribute': 515, 'cadVer': '1.0.2', 'cdVer': '1.0.0', 'options': '{"isFK":true}', 't': 81}
[LOG] ==== End client request body ===
tuya.device.active - response: {'result': {'schema': '[{"type":"obj","mode":"rw","property":{"type":"bool"},"id":20},{"mode":"rw","property":{"range":["white","colour","scene","music"],"type":"enum"},"id":21,"type":"obj"},{"mode":"rw","property":{"type":"string","maxlen":255},"id":24,"type":"obj"},{"mode":"rw","property":{"type":"string","maxlen":255},"id":25,"type":"obj"},{"type":"obj","mode":"rw","property":{"min":0,"max":86400,"scale":0,"step":1,"type":"value"},"id":26},{"mode":"wr","property":{"type":"string","maxlen":255},"id":27,"type":"obj"},{"mode":"wr","property":{"type":"string","maxlen":255},"id":28,"type":"obj"}]', 'devId': 'FxGRwY7BLeqOFfVABzXy', 'resetFactory': False, 'timeZone': '+02:00', 'capability': 1025, 'secKey': 'eXxgrnvsqDmicGKp', 'stdTimeZone': '+01:00', 'schemaId': '00000209tu', 'dstIntervals': [[1648342800, 1667091600], [1679792400, 1698541200], [1711846800, 1729990800], [1743296400, 1761440400], [1774746000, 1792890000]], 'localKey': '2EiJ28ReFLQr16xV'}, 't': 1665302208, 'success': True}
[I 221009 07:56:48 web:2239] 200 POST /d.json?a=tuya.device.active&et=1&t=81&uuid=reDRgL8mdMWJ&v=4.4&sign=73d250a5c6fda45e8af6d97d255f0a1d (10.42.42.24) 17.52ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.dynamic.config.get&devId=FxGRwY7BLeqOFfVABzXy&et=1&t=1665302208&v=1.0&sign=c3962c5b3d919d670a4d7da14cc94feb
[LOG] ==== Client request body ===
{'t': 1665302208}
[LOG] ==== End client request body ===
tuya.device.dynamic.config.get - response: {'result': {'ackId': '0-0', 'validTime': 1800, 'time': 1665302209, 'config': {'stdTimeZone': '+01:00', 'dstIntervals': [[1648342800, 1667091600], [1679792400, 1698541200]]}}, 't': 1665302209, 'success': True}
[I 221009 07:56:49 web:2239] 200 POST /d.json?a=tuya.device.dynamic.config.get&devId=FxGRwY7BLeqOFfVABzXy&et=1&t=1665302208&v=1.0&sign=c3962c5b3d919d670a4d7da14cc94feb (10.42.42.24) 18.71ms
[LOG] Client request PATH: /d.json - QS: a=tuya.device.uuid.pskkey.get&et=1&t=1665302211&uuid=reDRgL8mdMWJ&v=1.0&sign=5eb4b39a2541682e0f5cfb3c8578310a
[LOG] ==== Client request body ===
{'t': 1665302211}
[LOG] ==== End client request body ===
tuya.device.uuid.pskkey.get - response: {'result': {'pskKey': ''}, 't': 1665302212, 'success': True}
[I 221009 07:56:52 web:2239] 200 POST /d.json?a=tuya.device.uuid.pskkey.get&et=1&t=1665302211&uuid=reDRgL8mdMWJ&v=1.0&sign=5eb4b39a2541682e0f5cfb3c8578310a (10.42.42.24) 9.77ms
device_id='FxGRwY7BLeqOFfVABzXy', ip='10.42.42.24', local_key='2EiJ28ReFLQr16xV'
Device should be successfully onboarded on WiFi AP!

</details>

from tuya-cloudcutter.

Cossid avatar Cossid commented on September 24, 2024

This post has been tagged as new-dump-needed and has had no response. This issue is being closed as stale. To re-open this issue, please provide a new dump following the guildines in the device dumps section of the Readme.

from tuya-cloudcutter.

spanner3003 avatar spanner3003 commented on September 24, 2024

I'm not sure where to put these file that a pulled off the Calex smart multi color LED strip I brought from tesco years ago but i used esphome-kickstarter and UPK2ESPHome grab for kickstarter option hope they are helpful.
Merkury EW003 LED Strip - schema ID 000002hqnb.json
Merkury EW003 Smart LED Strip Storage Data.json
This is the box they came in:
Calex-smart-LED-strip-bk7231t-v1 1 6

from tuya-cloudcutter.

Related Issues (20)

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.