Git Product home page Git Product logo

esp-homekit-arduino-sdk's Introduction

ESP32 HomeKit Accessory Protocol SDK for Arduino

This library provides the official ESP-IDF HomeKit SDK (#fac2032) for ESP32 devices running the Arduino framework.

Version 2.0.0 is in active development and will be available soon!

Note: This wrapper uses a version of the SDK which can't be used in commercial products due to it not being MFi certified, feel free to use it in your hobby projects though!

Installation

If you're using PlatformIO, update your platformio.ini file's dependancies or use the pio command in the directory containing your platformio.ini file:

pio lib install 'ESP32 HomeKit SDK for Arduino'

The packages uploaded to PlatformIO's repository and used by the Arduino IDE will contain the complete library, as the build script will be run before packaging. You can use the Arduino IDE to install the library by downloading the prebuilt ZIP file in the Releases section.

Usage

At the moment, only a temperature sensor with a default value can be created. I'm in the process of adding the ability to read / write to a sensor, as well as adding all other available sensors.

#include <Arduino.h>
#include <WiFi.h>
#include <ESP32HomeKit.h>

const char *ssid = "ssid";
const char *password = "password";

/*
	This example provides a basic connection to HomeKit.
	You can't read/write values at the moment but it's coming I promise.
*/

void setup()
{
	Serial.begin(9600);

	WiFi.begin(ssid, password);

	while (WiFi.status() != WL_CONNECTED)
	{
		delay(1000);
		Serial.println("Establishing connection to WiFi..");
	}

	Serial.println("Connected to network.");

	HAPAccessory hapAccessory("ESP32 Fan");
	hapAccessory.Setup("EspFan01", "Espressif", "001122334455", "0.0.1", "1.0.0", HAP_ACCESSORY_SENSOR);

	HAPTemperatureSensor hapTemperatureSensor("Temperature", 10.0);
	hapAccessory.AddService(hapTemperatureSensor.Service);

	hapAccessory.Register();
	HAPCore hapCore("111-22-333", "ES32");
	hapCore.Start();
}

void loop()
{
	/* Main loop code */
}

Building From Source

If you want to make edits to the library, run the build.sh script. It will clone the ESP-IDF HomeKit SDK repository, copy the required source files and modify them to work with Arduino's build chain. The modified files aren't commited as I don't think I need to host copies of the SDK's source in this repository, or in a fork, since the changes for the port are minimal.

To Do

  • Add Arduino API wrappers to make it easier to use.
  • [] Add other sensors.
  • [] Better documentation.

License

MIT

esp-homekit-arduino-sdk's People

Contributors

brawrdon avatar tomaculum 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

Watchers

 avatar  avatar  avatar  avatar

esp-homekit-arduino-sdk's Issues

How to change switch state in app?

Hi,
First, thank you for this library!

Can you explain, how to update the value in the HomeKit-App?
My plan is to update the switch state in the app, when a physically button action is detected.
I am not sure, how to run the read-method from e.g. loop(), or am I on the wrong track there?

Thank you!

Includes missing

Hi,

thank you for your work. I waited for a wrapper API to use HomeKit using the Arduino build system.
However, it seems not working as of now.
Apparently, some files are missing.
Here is the PlatformIO build output:

> Executing task: pio run <

Processing nodemcu-32s (platform: espressif32; board: nodemcu-32s; framework: arduino)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/nodemcu-32s.html
PLATFORM: Espressif 32 (2.1.0) > NodeMCU-32S
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
DEBUG: Current (esp-prog) External (esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES: 
 - framework-arduinoespressif32 3.10004.201016 (1.0.4) 
 - tool-esptoolpy 1.30000.201119 (3.0.0) 
 - toolchain-xtensa32 2.50200.80 (5.2.0)
LDF: Library Dependency Finder -> http://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 27 compatible libraries
Scanning dependencies...
Dependency Graph
|-- <ESP32 HomeKit SDK for Arduino> 1.0.0
|-- <EEPROM> 1.0.3
|-- <WiFi> 1.0
|-- <Wire> 1.0.1
|-- <SPI> 1.0
Building in release mode
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_acc.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_bct.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_char.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_controllers.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_char.c:25:33: fatal error: hap_platform_memory.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_database.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_ip_services.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_keystore.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_database.c:28:33: fatal error: hap_platform_memory.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_acc.c:26:33: fatal error: hap_platform_memory.h: No such file or directory
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_bct.c:27:33: fatal error: hap_platform_memory.h: No such file or directory
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_main.c.o
compilation terminated.
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_ip_services.c:25:28: fatal error: json_generator.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_controllers.c:27:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_mdns.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_network_io.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_mdns.c:25:26: fatal error: esp_hap_mdns.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_common.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_setup.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_keystore.c:25:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_verify.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_common.c:27:33: fatal error: esp_hap_pair_common.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pairings.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_main.c:32:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_serv.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_setup_payload.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_verify.c:29:22: fatal error: hkdf-sha.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pairings.c:28:30: fatal error: esp_hap_database.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_network_io.c:29:26: fatal error: byte_convert.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_setup.c:29:20: fatal error: mu_srp.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_wifi.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_serv.c:25:33: fatal error: hap_platform_memory.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_debug.c.o
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_dummy.c.o
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_wifi.c:25:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
Compiling .pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/hexbin.c.o
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_char.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_database.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_bct.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_acc.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_ip_services.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_controllers.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_mdns.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_keystore.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_common.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_main.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_verify.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pairings.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_network_io.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_pair_setup.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_serv.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_wifi.c.o] Error 1
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/hexbin.c:14:20: fatal error: hexbin.h: No such file or directory
compilation terminated.
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/hexbin.c.o] Error 1
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_setup_payload.c:30:20: fatal error: base36.h: No such file or directory
compilation terminated.
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_hap_setup_payload.c.o] Error 1
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_dummy.c:26:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
.pio/libdeps/nodemcu-32s/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_debug.c:27:27: fatal error: esp_mfi_debug.h: No such file or directory
compilation terminated.
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_dummy.c.o] Error 1
*** [.pio/build/nodemcu-32s/lib9f9/ESP32 HomeKit SDK for Arduino/tmp/esp-idf3-homekit-sdk/components/homekit/esp_hap_core/src/esp_mfi_debug.c.o] Error 1
============================================================================================================================================= [FAILED] Took 0.97 seconds =============================================================================================================================================
The terminal process "pio 'run'" terminated with exit code: 1.

What is the purpose of "file[:-2] not in mfi_source" in the build.py script?

@Brawrdon,

First, thank you for publishing the library. I think it will be great help for me and others.

I am working on HomeKit device that will be using the "espidf" framework instead of "arduino". The project is using PlatformIO. I make some changes to the library.json file and build.py script and able to compile my code. In line 32 of the build.py script, there is a check for file[-2] not in mfi_source. What is the purpose of this check? I had to remove this condition to make it to work with the espidf framework and would like to understand what impact it will have with this change. I am planning to eventually migrate to the MFI version of the ESP HomeKit library and not sure if "mfi_source" is needed then.

31:        for file in filenames:
32:            if file.endswith(".c") or file.endswith(".h") and file[:-2] not in mfi_source:
33:                shutil.move(dirpath + "/" + file, "lib/")

Thanks

Can not setup accessory

Unfortunately, I am not able to set up the ESP32 as an acessory because apparently the Setup ID is absent.
Here is the complete log:

Keystore initialised
Accessory is not Paired with any controller
Database initialised. Accessory Device ID: F4:EA:C3:B0:E3:A8
HAP Initialization succeeded. Version : 4.0-bcd30a5
Setup ID absent
Accessory Setup init failed

But I am clearly setting the setup ID.
Here is the code from the setup() function:

void setup() {
    /* ... */

    hap_acc_t *accessory;
    hap_serv_t *service;

    hap_cfg_t hap_cfg;
    hap_get_config(&hap_cfg);
    hap_cfg.unique_param = UNIQUE_NAME;
    hap_set_config(&hap_cfg);

    hap_init(HAP_TRANSPORT_WIFI);

    hap_acc_cfg_t cfg = {
        .name = "HomeAtmo",
        .model = "ESP32",
        .manufacturer = "BME680",
        .serial_num = "13092019",
        .fw_rev = "0.0.1",
        .hw_rev = NULL,
        .pv = "1.1.0",
        .cid = HAP_CID_FAN,
        .identify_routine = identify,
    };

    accessory = hap_acc_create(&cfg);

    uint8_t product_data[] = {'P', 'L', 'A', 'N', 'T', 'K', 'I', 'T'};
    hap_acc_add_product_data(accessory, product_data, sizeof(product_data));

    service = hap_serv_temperature_sensor_create(0.0);
    hap_serv_add_char(service, hap_char_name_create("Temperatur"));
    hap_acc_add_serv(accessory, service);

    hap_add_accessory(accessory);

    hap_set_setup_code("130-92-019");
    hap_set_setup_id("HmAtm");

    hap_start();
}

Thanks. Keep up the great work!

Unable to reconnect my ESP to HomeKit after re-uploading a program

Hello!

The first time I upload a program with HomeKit to an ESP, everything works well and I'm able to connect it with the Home app.
However, if I re-upload a program to that ESP, even if it is the same program, this ESP will never be discovered again even if I remove it from the Home app.

Is there a "discover" mode in the HomeKit API?

Thanks!

External trigger for "static int fan_read ()

Thank you! Everything works perfectly! Could you add a real external trigger for "static int fan_read ()" to the example. I just can't use the callback correctly. Only obtained using a queue in thread_entry.

Version of esp-idf should be used?

I tried using the library with platformio, it compiles flawlessly, and looks like it starts but seems that when it should really start the homekit service it just reboots due to an issue:

WiFi connected
IP address:
192.168.86.71
␛[1;37mKeystore initialised␛[0m
␛[1;37mAccessory is not Paired with any controller␛[0m
␛[1;37mDatabase initialised. Accessory Device ID: XXXXXXXX4␛[0m
␛[1;37mHAP Initialization succeeded. Version : 4.0-040b0f3␛[0m
Guru Meditation Error: Core  1 panic'ed (LoadProhibited). Exception was unhandled.
Core 1 register dump:
PC      : 0x400da935  PS      : 0x00060830  A0      : 0x800daa64  A1      : 0x3ffdc640
A2      : 0x3ffb00d0  A3      : 0x3ffe7408  A4      : 0x3ffe711c  A5      : 0x3ffdc9ac
A6      : 0x00000041  A7      : 0x00000067  A8      : 0x800da935  A9      : 0x3ffdc620
A10     : 0x00000000  A11     : 0x3f4d01f0  A12     : 0x0000000c  A13     : 0x3ffdc2a0
A14     : 0x00000002  A15     : 0x3ffdc4a0  SAR     : 0x00000010  EXCCAUSE: 0x0000001c
EXCVADDR: 0x00000010  LBEG    : 0x40098c49  LEND    : 0x40098c6d  LCOUNT  : 0x800dd61e

I suspect is because of the esp-idf version, which I was using:
https://github.com/espressif/arduino-esp32.git#idf-release/v4.0

Great library btw, it's the only one compiling so far

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.