Giter Club home page Giter Club logo

usbasp's Introduction

usbasp improved

WCID compliant, HID UART support

This USBasp firmware is based on a fork by Ralph Doncaster. Original fork readme can be found at README_nerdralph.md.

Features

  • From version 1.07 a default SCK clock of 1.5Mhz and automatic SCK slowing if target does not respond. PORTD is left as input, so this firmware also works with USBISP modules. ( nerdralph )
  • From version 1.08 the firmware is WCID compliant, meaning it should work on Windows without any driver or .inf install.
  • From version 1.09 a ( reliable at 9600 Baud, with 120ms - 160ms intervals for higher speeds see note at UART HID protocol ) UART HID implementation is added for debugging purposes. USBasp will appear as a composite device with a WINUSB interface and a HID interface.
  • From version 1.10 USBasp WCID switch to Microsoft OS 2.0 Descriptors. It seems that it play better with USB 3.0 ports.
  • From version 1.11 USBasp supports updating it's serial number ( see USBaspHIDUART utility ) and also adds support for the AT89S51/2 ICs.

Avrdude

Avrdude v7+ official windows binary from avrdudes/avrdude uses libwinusb instead of libusb, which doesn't support composite devices as this firmware implements. Please use the unofficial build using mingw64 ( avrdude-v7.2_mingw64 ) from mcuee repo.

UART GUI Client

From release v0.7.0, the libUSBUARTTerminal supports this firmware's HID UART implementation.

UART HID protocol

Note: There is a small 128 byte ring buffer for both Tx and Rx. That means you can use higher baud rates ( i.e. 115200 ) if the message length is smaller than 128 bytes and the transmit / receive interval is 160 ms or higher.

Serial Data

V-USB implementation uses 8 byte size input and output interrupt reports.

The last byte ( 8th ) has special meaning. Its serial data or its the serial bytes count. If its value is greater than 7 then its serial data. If the value is 7 or smaller then its the serial data count and the remaining bytes are ignored.

Input Reports ( USBasp -> USB PC ) or Output Reports ( USB PC -> USBasp)

i.e.

0x55,0x34,0x00,0x00,0x00,0x00,0x00,0x02 -> Actual serial bytes 2 : 0x55,0x34

0x00,0x34,0x00,0x66,0x32,0x36,0x00,0x04 -> Actual serial bytes 4 : 0x00,0x34,0x00,0x66

0x00,0xC3,0x34,0x55,0x32,0xF3,0x00,0xAB -> Actual serial bytes 8 ( 8th byte > 7 ) : 0x00,0xC3,0x34,0x55,0x32,0xF3,0x00,0xAB
UART Configuration

The USBasp's UART configuration uses an 8 byte size feature report, with the following format.

Byte 0 Byte 1 Byte 2 Byte 3 Byte 4 - 7 RO
Prescaler Low Byte Prescaler High Byte See UART Flags Unused USBasp Capabilities

To setup and enable the UART, send a feature set report, with the prescaler in the first two bytes and the parity, data bit, stop bit flags at the third byte ( see UART Flags ). The fourth byte is ignored.

To disable the UART, send a feature set report, with the prescaler bytes as zero.

Note: The UART is disabled by default, if read or write is detected for do to not interfere with those functions.

USBaspHIDUART utility

The USBaspHIDUART is a simple console utility, used for testing the HID UART implementation.

This is the help page ( USBaspHIDUART.exe -h ) :

USBaspHIDUART -h

USBasp HIDUART Test App

 -l  List USBasp HID devices
 -i  Select USBasp index ( default 0 )
 -b  Set Baud ( default 9600 )
 -c  Set USBasp Crystal Hz ( default 12 MHz or 12000000 Hz )
 -s  Select USBasp with serial number.
     4 Digits numeric only i.e. 3456, 2222, etc ).
 -u  Serial Number to update ( 4 Digits numeric only i.e. 3456, 2222, etc ).
     Use with index -i when more than one USBasp are connected.
 -r  Continuous read input
 -w  Interactive send output

examples

Read from USBasp at index 0 with 4800 baud
 USBaspHIDUART -b 4800 -r

Interactive write to USBasp at index 1 with 9600 baud
 USBaspHIDUART -i 1 -w

Interactive write to USBasp with serial number 1111 with 9600 baud
 USBaspHIDUART -s 1111 -w

Read from USBasp with 20 MHz crystal at index 1 with 19200 baud
 USBaspHIDUART -i 1 -b 19200 -c 20000000 -r

Read from USBasp with 20 MHz crystal and with serial number 2345 with 19200 baud
 USBaspHIDUART -s 2345 -b 19200 -c 20000000 -r

Update the first found USBasp's serial number with 3456
 USBaspHIDUART -u 3456

Update the USBasp's at index 3 serial number with 3456
 USBaspHIDUART -i 3 -u 3456
Build from source

Building USBaspHIDUART from source is very straightforward :

Note: You'll need FreePascal 3.0.4 and higher installed.

( it's always better to build in another directory )

Windows

<pathtocloneddir>\utility\USBaspHIDUART>mkdir build
<pathtocloneddir>\utility\USBaspHIDUART>cd build
<pathtocloneddir>\utility\USBaspHIDUART\build>fpc.exe -MObjFPC -FU. -Fu..\hidapi.pas ..\USBaspHIDUART.pas -o.\USBaspHIDUART.exe

Linux \ FreeBSD

<pathtocloneddir>\utility\USBaspHIDUART>mkdir build
<pathtocloneddir>\utility\USBaspHIDUART>cd build
<pathtocloneddir>\utility\USBaspHIDUART\build>fpc.exe -MObjFPC -FU. -Fu../ -Fu../hidapi.pas -dUseCThreads ../USBaspHIDUART.pas -o./USBaspHIDUART

usbasp's People

Contributors

dioannidis avatar landfillbaby avatar nerdralph 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

usbasp's Issues

Which hex to flash?

Hi @dioannidis and contributors

I would like to ask you an extremely noobish question.

I am about to update the firmware from a generic USBasp based on the ATMEGA8A

According to the Readme.txt file (which seems to be a copy/dragged version from the original file from Thomas Fischl) I should flash the file:

usbasp.atmega8.2011-05-28.hex

However, what confuses me is the date from this file: xxxxx.2011-05-28

Has this precompiled version been modified to the latest modifications described in this fork? In other words, does this hex file offer the improvements described here? If so, why not update the file naming convention to the most recent date?

Otherwise, please point me to the right file to be flashed.

Apologies if I am missing something obvious

Thanks

USBaspHIDUART static linking

The serial is not updated on my installation.

Perhaps 'hiblib' too old ?

Can you build the USBaspHIDUART with this lib in your code ?

https://github.com/libusb/hidapi/blob/master/BUILD.md#embedding-hidapi-directly-into-your-source-tree

:~/bin> USBaspHIDUART -u 3456

Enumerating USBasp HIDUART (Hid Api Library Version : 0.9.0_or_older )
-----------
USBasp List index : 0

Type : 16C0 05DC
Path : 0002:000d:01
Serial number : ????
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 1


Updating USBasp Serial Number ... Done .


Enumerating USBasp HIDUART (Hid Api Library Version : 0.9.0_or_older )
-----------
USBasp List index : 0

Type : 16C0 05DC
Path : 0002:000d:01
Serial number : ????
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 1

Error in read after entering PE with slow clocks

With firmware 1.11

random read somewhere !

between computer and usbasp
or
between usbasp and device programmed

avrdude: auto set sck period (because given equals null)
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x000307
avrdude: Expected signature for ATmega8 is 1E 93 07
         Double check chip, or use -F to override this check.

avrdude done.  Thank you.

some read:
avrdude: Device signature = 0x010103
avrdude: Device signature = 0x013505
avrdude: Device signature = 0x00032f

Going back to fisch 1.05 and everything is ok.

flashed main.hex, windows happy, avrdude NOT

it seems

from MASTER

PS D:\Downloads\avrdude-v6.3.1.1-windows> .\avrdude.exe -c usbasp -p m328p -t
avrdude.exe: error: could not find USB device with vid=0x16c0 pid=0x5dc vendor='www.fischl.de' product='USBasp'

but if i do a

PS D:\Downloads\avrdude-v6.3.1.1-windows> .\avrdude.exe -c usbasp-clone -p m328p -t

its happy

in your fw, did vendor='www.fischl.de' product='USBasp' change?

oh yes, the "www." is missing from vendor

i see you trimmed it off in a commit while back, remember why?
i think it would be better with it

thanks
mitch

UART retaining state after ISP commands finished

Currently, if, during uart is opened, a ISP read / write command issued, then the uart closes as to not interfere with ISP.

I wanted the uart to return to open state its previous state ( to closed if it was closed or to open if it was opened ), after the ISP commands finished. So, I've implemented ( not uploaded yet ) one more hid interface for monitoring, which report the device state . With this information I can reopen the uart if it was opened before the ISP commands started.

The label lblMonitor is the current USBasp state, the extra hid interface reports.

This is a nice improvement as well. Thanks.

Originally posted by @mcuee in #11 (comment)

Can't get it working with win10

Works perfect across the table on linux, but no matter what I try it won't work with windows (tried with avrdude 7.0 and 7.2_mingw64.zip)

In device manager it's listed under USB Devices as USBasp and is using the winusb.sys driver and USBaspHIDUART.exe sees it connected:

Enumerating USBasp HIDUART (Hid Api Library Version : 0.12.0 )
-----------
USBasp List index : 0

Type : 16C0 05DC
Path : \\?\HID#VID_16C0&PID_05DC&MI_01#8&69f9ab7&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Serial number : 0000
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 1

-----------
USBasp List index : 1

Type : 16C0 05DC
Path : \\?\HID#VID_16C0&PID_05DC&MI_02#8&2a76d879&0&0000#{4d1e55b2-f16f-11cf-88cb-001111000030}
Serial number : 0000
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 2

But avrdude fails at avrdude usbasp_transmit():

avrdude: Version 7.2
         Using Port                    : USB
         Using Programmer              : usbasp
         Setting bit clk period        : 10.0
avrdude: seen device from vendor >www.fischl.de<
avrdude: seen product >USBasp<
avrdude: input file attiny85.ino.hex auto detected as Intel Hex
         AVR Part                      : ATtiny85
         Chip Erase delay              : 400000 us
         RESET disposition             : possible i/o
         Serial program mode           : yes
         Parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         PollIndex                     : 3
...

         Programmer Type : usbasp
         Description     : USBasp, http://www.fischl.de/usbasp/
avrdude: usbasp_initialize()
avrdude: usbasp_transmit("USBASP_FUNC_GETCAPABILITIES", 0x00, 0x00, 0x00, 0x00)
avrdude usbasp_transmit() [usbasp.c:365] OS error: No such file or directory
avrdude: usbasp_spi_set_sck_period(5e-06)
avrdude: try to set SCK period to 5e-06 s (= 200000 Hz)
avrdude: connected USBasp is not cabable of 3 MHz SCK
avrdude: set SCK frequency to 187500 Hz
avrdude: usbasp_transmit("USBASP_FUNC_SETISPSCK", 0x09, 0x00, 0x00, 0x00)
avrdude usbasp_transmit() [usbasp.c:365] OS error: No such file or directory
avrdude usbasp_spi_set_sck_period() [usbasp.c:979] error: cannot set sck period; please check for usbasp firmware update
avrdude: usbasp_transmit("USBASP_FUNC_CONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude usbasp_transmit() [usbasp.c:365] OS error: No such file or directory
avrdude: usbasp_program_enable()
avrdude: usbasp_transmit("USBASP_FUNC_ENABLEPROG", 0x00, 0x00, 0x00, 0x00)
avrdude usbasp_transmit() [usbasp.c:365] OS error: No such file or directory
avrdude usbasp_spi_program_enable() [usbasp.c:734] error: program enable: target does not answer (0x00)
avrdude main() [main.c:1301] error: initialization failed, rc=-1
        - double check the connections and try again
        - use -B to set lower the bit clock frequency, e.g. -B 125kHz
        - use -F to override this check
avrdude: usbasp_close()
avrdude: usbasp_transmit("USBASP_FUNC_DISCONNECT", 0x00, 0x00, 0x00, 0x00)
avrdude usbasp_transmit() [usbasp.c:365] OS error: No such file or directory
avrdude done.  Thank you.

Changing the -B parameter affects nothing.

Use in Linux

Any idea if this firmware works in Linux?
Would it also need a custom avrdude that supports composite devices or something similar?
Any special options that would be needed, like a specific -P ?
If not, any suggestions for a branch which does work under Linux? :)

question: compatibility esp8266

Hello there, I was looking at the code and I was wondering if this can be migrated to esp8266, I have noticed some references to the avr compiler, very few, but if you mind pointing which files would be modified, maybe I can give it a try to port it to the esp.

Thanks!

UART USBasp

Hey.

I would like to thank you for the work.

I don't know if I'm doing something wrong but I couldn't make the UART work through the USBasp Terminal.

Is he already active?

Can you tell me how to send instructions to configure and an example?

I don't have much knowledge on this subject.

Thank you very much.

Found no UART support in sources

First of all v1.08 is a great update on USBasp firmware!!!
As I use a little different hardware than fischls board, I had to change the led ports, clock, pins of USB, Interrupt, ... and so I had to compile the project from the source. As expected the bcdDevice is 1.08 and the WinUSB support works perfect but I cannot find any hint to uart support in the sources published (May, 6th 2021) on https://github.com/dioannidis/usbasp.
On https://electronoobs.io/project/491# you told us that the sources already include WinUSB AND UART support.
If I'm looking at the wrong places, please give me any hint where I can find the described sources (with WinUSB and UART support) of this great project.

Multiple USBasps devices detection problem and MS OS 2.0 Descriptors

AFAIU, the issue is with the container id . The parent device, in composite devices, needs a container id on device level to "bind" all the functions together . I'm thinking to make a utility for patching serial AND container id ( which is a guid / uuid in fact ) of the hex file, before flashing it, for those who can't build the firmware from source .

This will be a good improvement.

Not so sure if you can add a feature report to update this in run-time (I have PICKit 2 which does that with a -n command).

Originally posted by @mcuee in #11 (comment)

Build issue on Fedora 32

I'm attempting to build from source on a Fedora 32 system (64 bit).

For this task, I have installed:
avr-binutils-2.35-3.fc32.x86_64.rpm
avr-gcc-10.2.0-1.fc32.x86_64.rpm
avr-libc-2.0.0-10.fc32.noarch

cd into the firmware directory and type "make main.hex" results in most files compiling to object files. The link step errors out with:

avr-gcc -Wall -Wextra -Os -Iusbdrv -I. -mmcu=atmega8 -o main.bin usbdrv/usbdrv.o usbdrv/usbdrvasm.o usbdrv/oddebug.o isp.o clock.o tpi.o main.o -Wl,-Map,main.map
/usr/lib/gcc/avr/10.2.0/../../../../avr/bin/ld: main.o:(.bss+0x1): multiple definition of `ispTransmit'; isp.o:(.bss+0x2): first defined here
collect2: error: ld returned 1 exit status
make: *** [Makefile:61: main.bin] Error 1

ispTransmit seems to be a function pointer and I don't see anywhere in the code where it's defined, but two places where it's assigned.

The short solution I performed was to remove the definition of the variable from isp.h and move it to isp.c. I also added a copy to main.c, but marked that one as 'extern'. At that point everything compiled smoothly and resulted in a binary. I'm not sure if that's how you want this fixed, so I didn't make a pull request.

usbasp v1.11 atmega8 not working under Linux

using: Ubuntu-22.04, with avrdude 6.3-20171130

Flashed one usbasp (atmega8) with another usbasp (v1.02), this went fine,
When I plug this new usbasp-1.11 into an USB port I get this:


lsusb -d 16c0:05dc -v

Bus 001 Device 066: ID 16c0:05dc Van Ooijen Technische Informatica shared ID for use with libusb
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0         8
  idVendor           0x16c0 Van Ooijen Technische Informatica
  idProduct          0x05dc shared ID for use with libusb
  bcdDevice            1.11
  iManufacturer           1 www.fischl.de
  iProduct                2 USBasp
  iSerial                 3 0000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0012
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0x80
      (Bus Powered)
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              2 USBasp
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x0021
  bNumDeviceCaps          1
  Platform Device Capability:
    bLength                28
    bDescriptorType        16
    bDevCapabilityType      5
    bReserved               0
    PlatformCapabilityUUID    {d8dd60df-4589-4cc7-9cd2-659d9e648a9f}
    CapabilityData[0]    0x00
    CapabilityData[1]    0x00
    CapabilityData[2]    0x03
    CapabilityData[3]    0x06
    CapabilityData[4]    0x9e
    CapabilityData[5]    0x00
    CapabilityData[6]    0x5d
    CapabilityData[7]    0x00
Device Status:     0x0000
  (Bus Powered)

so the USB side seems to work.

Now using the newly flashed usbasp (v1.11) to flash the other (v1.02) I get

make flash
avrdude -c usbasp -p atmega8 -P usb -U flash:w:main.hex:i -U eeprom:w:main.eep.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9307 (probably m8)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "main.hex"
avrdude: writing flash (3940 bytes):

Writing |                                                    | 0% 0.00savrdude: error: usbasp_transmit: error sending control message: Value too large for defined data type
avrdude: error: wrong count at writing ffffffff
Writing | ################################################## | 100% 3.44s

avrdude: 3940 bytes of flash written
avrdude: verifying flash memory against main.hex:
avrdude: load data flash data from input file main.hex:
avrdude: input file main.hex contains 3940 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.22s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
         0x00 != 0x9b
avrdude: verification error; content mismatch

avrdude: safemode: Fuses OK (E:FF, H:D9, L:9F)

avrdude done.  Thank you.

make: *** [Makefile:97: flash] Error 

UPS - now I have two dysfunctional usbasp devices ;-(

The output of make without arguments is:


 make
Usage: make                same as make help
       make help           same as make
       make main.hex       create main.hex
       make clean          remove redundant data
       make disasm         disasm main
       make flash          upload main.hex into flash
       make fuses          program fuses
       make avrdude        test avrdude
Current values:
       TARGET=atmega8
       LFUSE=0xDF
       HFUSE=0xC9
       CLOCK=12000000
       TPI=Off
       HIDUART=Off
       ISP=usbasp
       PORT=usb

So I checkout v1.08 (commit 8f4beb0 by Nerd Ralph - Mar 24 2021)
This works as expected, and fixes my initial problem which was reading atmega2560 with an usbasp.

If you discover what was wrong I would be happy to give it a try.

Best Regards StorePeter

bin files current?

The readme.md mentions prebuilt bin files are in bin, but those files seem to be from the original commit and not updated recently.

Are they current?

Corrupted firmware binaries in 1.11 pre Release assets

Hi
I flashed v1.11 USBasp_ATMega8_12MHz_TPI_HIDUART_SNWRITE.hex
succesfully, with fuses and the result is

mai 06 17:31:30  kernel: usb 2-1.5: new full-speed USB device number 16 using ehci-pci
mai 06 17:31:30  kernel: usb 2-1.5: device descriptor read/64, error -32
mai 06 17:31:30  kernel: usb 2-1.5: device descriptor read/64, error -32

after some trial with fuses, back to fisch 

mai 06 19:19:52 : usb 2-1.5: new low-speed USB device number 51 using ehci-pci
mai 06 19:19:52 : usb 2-1.5: New USB device found, idVendor=16c0, idProduct=05dc, bcdDevice= 1.05
mai 06 19:19:52 : usb 2-1.5: New USB device strings: Mfr=1, Product=2, SerialNumber=0
mai 06 19:19:52 : usb 2-1.5: Product: USBasp
.....

Common causes says some clocking problem here.
The device is the common thing from aliexpress, based on atmega8.

Note:
it is an absolute waste of time to make the user 'build' the final binary to flash the atmega.

On the raspberry I used to flash , I did not go beyond apt-get install gcc-avc when compiler started complaining about fatal error: avr/io.h:
Just no point. Not the goal.

Simply try to put result of your compiler in 'bin/firmware', with explicit names for variants mega8 maga88.
Remove confusing crap (2007 ?? 2009 ??? 2011???)

keep fitsch.hex with the correct name (v1.5.hex= no; v1.05.hex = yes)

and try to find the USB problem ;)

Thank you

Firmware version 1.11 problem with ATtiny13A

Interesting I have issues with ATtiny13A using the 1.11 FW (no problem with ATmega328PB, ATmega32A and ATmega8A).

I can reproduce the issue under Ubuntu Linux 20.04 and Windows 11. The ATtiny13A breakout board seems to be okay as I tested it with other programmers as well.

mcuee@UbuntuSwift3:~/build/avr/avrdude_bin$ ./USBaspHIDUART -u 111

Enumerating USBasp HIDUART (Hid Api Library Version : 0.14.0 )
-----------
USBasp List index : 0

Type : 16C0 05DC
Path : 3-1:1.1
Serial number : 3456
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 1


Updating USBasp Serial Number ... Done .


Enumerating USBasp HIDUART (Hid Api Library Version : 0.14.0 )
-----------
USBasp List index : 0

Type : 16C0 05DC
Path : 3-1:1.1
Serial number : 0111
Manufacturer  : www.fischl.de
Product       : USBasp
Release       : 1.11
Interface     : 1
mcuee@UbuntuSwift3:~/build/avr/avrdude_bin$ ./avrdude -c usbasp -p t13a
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x000107
avrdude error: expected signature for ATtiny13A is 1E 90 07
        double check chip or use -F to override this check

avrdude done.  Thank you.

mcuee@UbuntuSwift3:~/build/avr/avrdude_bin$ ./avrdude -c usbasp -p t13a -B10
avrdude: set SCK frequency to 93750 Hz
avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e0306
avrdude error: expected signature for ATtiny13A is 1E 90 07
        double check chip or use -F to override this check

avrdude done.  Thank you.

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.