Giter VIP home page Giter VIP logo

usb3sun's Introduction

usb3sun

usb3sun is an adapter that allows you to connect USB keyboards and mice to the Sun 8-pin mini-DIN interface.

see also:

note: this repo uses submodules! clone with --recursive, or if you forgot to do that:

$ git submodule update --init --recursive

documentation

what’s new

rev B0 allows for debug logging (and the new debug cli) without disabling the sun keyboard interface, and fixes some minor bugs that happen when resetting the adapter.

new in firmware 2.0:

  • support for NeXTSTEP and Plan 9, which require the mouse to run at 1200 baud
  • configurable mouse baud rate — 9600 (default), 4800, 2400, or 1200 baud
  • debug cli over UART_RX, allowing you to automate keyboard and mouse inputs

as of firmware 1.5, usb3sun can now reprogram your idprom with just a few keystrokes, making it easier to boot your workstation with a dead nvram battery!

hardware features

usb3sun includes an audible buzzer to emulate the bell and click functions that would normally be included with a Sun keyboard.

usb3sun also emulates the power key in two ways:

  • soft power key (Right Ctrl+P)
    • sends the power key scancodes (30h/B0h)
    • can turn on your workstation (only when usb3sun is powered externally)
  • onboard power button (near the display)
    • doesn’t send any scancodes
    • can turn on your workstation (even when not powered externally)

usb3sun has an oled display that shows:

  • keyboard led indicators (caps, compose, scroll, num)
  • visual buzzer (click, bell)
  • the settings menu

usb3sun has an onboard reset button in case the firmware gets stuck, and a 0.1″ debug header (pins available as an option) that allows you to power the adapter externally for flashing or debugging.

firmware features

usb3sun has persistent settings for:

  • forcing click mode (no/off/on)
  • click duration (5–100 ms)
  • mouse baud rate (for NeXTSTEP and Plan 9)
  • your hostid

features planned for a future firmware version:

  • settings for bell/click tone frequency
  • led indicators on your USB keyboard itself

release notes

firmware ?.? (????-??-??)

  • added experimental support for leds on your usb keyboard — led updates are not yet reliable, and currently has bugs that can cause usb devices to stop responding

pcb rev B0 (2024-05-25)

  • this board requires firmware 2.0 or newer
  • #2 — fixed a limitation where the workstation drops you into an ok prompt when resetting the adapter
  • #11 — fixed a bug where the adapter can hang until power cycled after being reset, especially when reset frequently
  • #10 — added support for logging over UART_TX/UART_RX without disabling the sun keyboard interface
  • reworked component layout and routing for sun interfaces and led indicators — none of the user-facing component locations have changed
  • replaced transistors Q1 through Q4 (2N7000) with dual transistors Q1 and Q3 (2N7002DW)
  • removed solder jumpers JP1 and JP2, which were added in rev A2 in case of errata

firmware 2.0 (2024-05-02)

  • pio_pkg_list.txt = dependency tree at time of release
  • added support for adapters with pcb rev B0 — these use pinout v2, while older revs use pinout v1
  • added a mouse baud setting that can be set to 9600 baud (default), 4800, 2400, or 1200 baud
    • this adds support for NeXTSTEP and Plan 9, which require the mouse to run at a lower baud rate (#8)
  • you can now choose whether to save or discard settings changes when you close the menu
    • this change was made as part of a workaround for usb devices that malfunction when saving settings (#14); if you have any affected devices, hold Shift while pressing Enter to reboot the adapter after saving settings
  • the displayed version number can now include uncommitted and/or unreleased changes (2.0+ / 2.0+1 / 2.0+1+)
  • several other improvements to the user interface
    • you can now close the menu by pressing Esc
    • the menu now automatically closes after Reprogram idprom and Wipe idprom (AAh)
    • the menu now shows four menu items, rather than three menu items and the version number
    • Click duration now beeps to preview your changes, regardless of whether clicks are enabled
    • Reprogram idprom now tells you what hostid is being programmed into your idprom
  • updated our usb host stack, making usb devices enumerate faster
  • added support for logging over UART_TX/UART_RX without disabling the sun keyboard interface (#10)
    • this feature requires pcb rev B0 or newer, due to the pinout changes required
    • please report any regressions with the buzzer or sun mouse interface; the buzzer had to be moved from pio to hardware pwm, and the sun mouse had to be moved from hardware uart to pio
  • added a debug cli over UART_RX — this lets you press keys and move the mouse without a usb keyboard or mouse
  • the firmware can now be built as a normal program for linux, thanks to a new hardware abstraction layer; as a result:
    • added an interactive demo (run-demo.sh) that can be used to play with or develop the user interface
    • added a test suite (run-tests.sh) for the setup and pinout routines, sun keyboard interface (reset sequence), buzzer (click and bell), settings (reads, writes, upgrades), and menu (confirm-save, hostid, i/o)
    • we can catch some memory access violations with dynamic analysis by AddressSanitizer (asan)
  • added some build tests (run-build-tests.sh) to catch compile errors with custom build flags
  • fixed some potential future compatibility issues in the settings formats (variable-width integer types and variable struct padding)
    • your existing settings in their v1 formats will be upgraded automatically
  • fixed a compile error when debug logging was enabled (PICOPROBE_ENABLE, now known as DEBUG_OVER_UART)
  • fixed all compile warnings under -Wall with the current toolchains for pico and linux (via nix-shell)
  • fixed incorrect debug log output for report id, usage, and usage page when enumerating usb hid devices
  • fixed missing newline in debug log output when reporting ErrorRollOver inputs from usb keyboards
  • fixed missing newline in UHID_VERBOSE output when reporting inputs from non-boot-protocol usb devices
  • removed the splash screen from debug logging — this significantly slowed down the setup routine
  • removed the fake sun emulation feature — this wasn’t too useful, and was broken by the pinout changes
  • several changes to config.h
    • added DEBUG_OVER_CDC to disable logging over usb cdc
    • added UHID_LED_ENABLE to opt into experimental usb hid led support
    • added UHID_LED_TEST to blink leds on all usb keyboards
    • added pin definitions PINOUT_V2_PIN, KTX_ENABLE, DISPLAY_ENABLE, DEBUG_UART, SUNK_UART_V1, SUNK_UART_V2, and SUNM_UART_V1
    • removed SUNM_BAUD in favour of the new menu setting
    • renamed PICOPROBE_ENABLE to DEBUG_OVER_UART
    • renamed PICOPROBE_BAUD to DEBUG_UART_BAUD
    • renamed PICOPROBE_TX to DEBUG_UART_TX
    • renamed PICOPROBE_RX to DEBUG_UART_RX
    • SUN_KTX, SUN_KRX, SUN_MTX, and SUN_MRX were split into pinout v1 and v2 variants
    • DEBUG_OVER_UART no longer disables logging over usb cdc (see DEBUG_OVER_CDC)
    • SUNK_ENABLE was moved to platformio.ini, and takes precedence over DEBUG_OVER_UART in pinout v1
    • SUNM_ENABLE was moved to platformio.ini

pcb rev A3 (2023-10-15)

  • fixed the inconsistent and excessive brightness of the led indicators (D2, D3)
  • fixed a bug where the VBUS indicator led (D2) can be dimly lit without VBUS being connected
  • changed J1 from UJ2-ADH-W1-TH to the compatible USB-U267-BWS due to stock shortage
  • cleaned up unused kicad libraries, and checked in libraries that were missing from the repo

firmware 1.5 (2023-07-18)

  • pio_pkg_list.txt = dependency tree at time of release
  • added a macro to reprogram your idprom — this makes it easier to boot your workstation with a dead nvram battery
  • added a macro to wipe your idprom — this makes your idprom contents invalid, as if you had a dead nvram battery
  • added a hostid setting — this sets the hostid used when reprogramming your idprom
  • changed behaviour of builtin led to turn on at the very start of setup — this may help troubleshoot problems with CDC serial port initialisation

firmware 1.4 (2023-07-17)

  • pio_pkg_list.txt = dependency tree at time of release
  • fixed a serious bug where opening the settings menu can make the adapter start releasing keys at the wrong times
  • fixed a serious bug where special key bindings (Right Ctrl) can get stuck down if Right Ctrl is released early
  • you can now press special key bindings (Right Ctrl) together with other modifiers (e.g. Shift+Undo for Redo)
  • improved performance of keyboard processing — this reduces the latency of key presses by up to 90 µs

you should update your firmware if you have any of the following symptoms:

  • modifiers like Shift stop working after closing the settings menu
  • modifiers like Shift appear to have a delayed effect after closing the settings menu
  • when a key gets stuck down, it remains stuck even after pressing and releasing another key

you can also work around these bugs by resetting the adapter.

firmware 1.3 (2023-07-16)

  • pio_pkg_list.txt = dependency tree at time of release
  • added firmware version to display — this replaces the logo, which became a bit redundant
  • added marquee display for long menu items — this fixes a bug where they would wrap in an unreadable way

pcb rev A2 (2023-06-30)

  • added usb-c port J4 — this makes firmware updates much easier, and makes it possible to debug the sun keyboard and mouse interfaces simultaneously
  • added polyfuse F3 after power supply switches — this protects the adapter under more fault conditions, in addition to faults in the downstream usb ports
  • changed led resistors R12 and R13 from 200R to 1K — this reduces the luminous intensity from ~80% down to ~10% relative to 20mA
  • changed tactile switches SW1 and SW2 from TS-1187A-C-H-B to TS-1187A-B-A-B — this reduces the extended parts fee with jlcpcb

firmware 1.2 (2023-06-11)

  • pio_pkg_list.txt = dependency tree at time of release
  • added audible usb plug/unplug notifications
  • added persistence for settings — including click duration!
  • added “force click” setting — this replaces the old disable/enable click option in the settings menu, which toggled the same state as the host machine, with an independent override
  • changed the initial click mode state to off
  • changed the initial led indicator states to off
  • fixed theoretical(?) race condition in buzzer management
  • fixed errors in the README bindings table

pcb rev A1 (2023-05-10)

  • added display mechanical support — committed later in 74b367a12600d
  • added tactile switches for reset and hard power key
  • added header pins for debug logging over UART0
  • added mounting holes for display mechanical support
  • added LED indicators for VBUS and VSUN
  • improved enclosure compatibility by moving mini-din beyond bottom edge
  • improved ground plane islands by stitching vias
  • made all corner mounting holes padded on both sides — previously this was only the case for the hole connected to GNDPWR, but not the other three

firmware 1.1 (2023-05-06)

  • pio_pkg_list.txt = dependency tree at time of release
  • fixed regressions due to dependency updates
  • fixed panic when combining PICOPROBE_ENABLE and CFG_TINYUSB_DEBUG
  • changed default DISPLAY_ROTATION to 0 — this better suits pcb rev A0 than the old value, and is equally suitable for the breadboard prototype
  • changed debug/upload protocols to cmsis-dap — this fixes compatibility with new picoprobe firmware
  • pinned sensitive dependencies to reduce future breakage — note that not all dependencies are pinned yet (platformio/platformio-core#4613), but see above for known-good dependency tree

pcb rev A0 (2023-04-28)

  • initial release

firmware 1.0 (2023-01-08)

  • initial release

usb3sun's People

Contributors

ar1a avatar delan 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

usb3sun's Issues

writing settings can cause usb devices to malfunction

  • affects pcb rev A3 and firmware 1.5
  • affects Microsoft Wheel Mouse Optical 1.1A (045E:0040)
    • writing settings has a >20% chance of causing malfunction
    • red led goes dim, mouse spews reports until disconnected
  • probably due to suspending interrupts and pausing the other core when writing to flash
    • same failure if you replace Settings::write impl with just noInterrupts() + sleep_ms(5) + interrupts()

support debug logging without disabling sun keyboard

unlike logging to usb cdc, logging to the debug header allows us to debug usb problems (CFG_TUSB_DEBUG), but this requires three uarts and the rp2040 only has two, so we currently disable the sun keyboard when doing so. wouldn’t it be nice if the debug header (tx + rx, but rx unused so far) could work without disabling the sun keyboard (tx + rx) or mouse (tx only)?

the good news is, SerialPIO allows us to set up a third uart, freeing up one of the hardware uarts for debugging. the docs say SoftwareSerial (and SerialPIO?) don’t support inverted mode, which are needed for the sun interfaces, but thankfully this is not (or no longer?) true.

to avoid running out of pio resources when beeping, we would need to go back to using analogWrite (hardware pwm) instead of tone (pio) for the buzzer (reverting 8922fe6), but that’s ok.

the bad news is, there seems to be no way to actually do this without pcb changes. here are our requirements:

  • usb tx needs 1/4 sm and 22/32 instructions (usb_tx.pio)
  • usb rx needs 2/4 sm and 31/32 instructions (usb_rx.pio)
  • SerialPIO tx needs 1/4 sm and 6/32 instructions (pio_tx_inv, pio_tx_inv_program_instructions)
  • SerialPIO rx needs 1/4 sm and 7/32 instructions (pio_rx_inv, pio_rx_inv_program_instructions)
  • UART_TX wired to pin 0 (valid for UART0 or SerialPIO)
  • UART_RX wired to pin 1 (valid for UART0 or SerialPIO)
  • INT_KTX wired to pin 12 (valid for UART0 or SerialPIO)
  • INT_KRX wired to pin 13 (valid for UART0 or SerialPIO)
  • INT_MTX wired to pin 8 (valid for UART1 or SerialPIO)
  • debug console needs to be on a hardware UART?

if we move sun mouse tx to SerialPIO (and bump pio_cfg.sm_tx etc accordingly), both the sun and usb interfaces still work, and this frees up hardware UART1! but UART1 is not allowed on pins 0 + 1 (UART_TX + UART_RX).

if we move sun keyboard tx and rx to SerialPIO (and bump pio_cfg.sm_tx etc accordingly), we are guaranteed to run out of pio instruction space for usb, because 6+7+min(22,31)>32 and min(6,7)+max(22,31)>32.

if we move sun keyboard tx only to SerialPIO (and bump pio_cfg.sm_tx etc accordingly), we can free up hardware UART0 tx for debug logging! believe it or not, UART0 can be set to tx on pin 0 (UART_TX) and rx on pin 13 (INT_KRX)! but sharing it with the sun keyboard like this means we need to log at 1200 baud, which not only would need a modified picoprobe firmware, but is also extremely slow: it takes 80(!) seconds to boot usb3sun with all debug logging on.

so we have three options, unless there’s some way to run the debug console over SerialPIO:

  1. move sun mouse to SerialPIO, rewire UART_TX + UART_RX to pins valid for UART1
  2. move sun mouse to SerialPIO, move sun keyboard to UART1, rewire sun keyboard to pins valid for UART1
  3. do nothing, at least until we need a new pcb rev for some other reason

Support non-US keyboard layouts

If I'm reading the code correctly, there currently is no support for non-US keyboard layouts. Do you have any hints as to how that could be implemented, or do you have plans to do so yourself? I'm guessing that different SelBindings would be required for each national variant. Would it be best to have a complete table for each layout or instead have a list of patches describing the differences to the US layout?

adapter can hang until power cycled after being reset

when resetting the adapter, the firmware can start getting stuck in Adafruit_SSD1306::begin or the initial Adafruit_SSD1306::display (pico led on), until the adapter is power cycled. this is especially likely to happen if you mash the reset button several times in quick succession. stack trace:

image

our 4pin i2c display (U2) doesn’t expose RES#, so we need to switch U2.VCC externally.

1209:2303 Atreus (Keyboardio version) keyboard with Kaleidoscope

reported by Anthony Sorace in http://a.9srv.net/reports/usb3sun.html

The behavior for the Apple keyboard is odd. The usb3sun makes no beep on connect, but makes the standard beep on disconnect. If a different (working) keyboard is attached, it behaves normally. If the Apple keyboard is re-attached, though, the usb3sun seems hung: no connections from any keyboard are recognized, and no beep is emited on disconnecting the Apple keyboard. A reset using the on-board button restores normal function. This keyboard is known to function normally with other non-Apple hardware (it was used to type this report while connected to a Raspberry Pi running Plan 9).

Notably, the Keyboardio Atreus does not exhibit this behavior; the usb3sun beeps on connect/disconnect as for the working keyboards.

plan 9 /dev/usb/ctl:

ep12.0 enabled control rw speed full maxpkt 64 pollival 0 samplesz 0 hz 0 hub 4 port 3 rootport 1 addr 15 busy
239 csp 0x0102ef csp 0x000202 csp 0x00000a csp 0x000003 csp 0x000003 csp 0x010103 vid 0x1209 did 0x2303 Keyboardio Atreus xhci
ep12.6 enabled interrupt r speed full maxpkt 64 pollival 1 samplesz 0 hz 0 hub 4 port 3 rootport 1 addr 15 busy

regressions when upgrading Adafruit TinyUSB Library to 3.1.0

  • usb3sun d59f48b
  • Microsoft Wired Keyboard 600 (045E:0750)

Adafruit TinyUSB Library

status of other patches with 3.1.0

  • tinyusb1.patch is definitely no longer required
  • tinyusb2.patch seems to no longer be required?
    • we should bisect and figure out why
    • 2.2.2 = required
    • 2.2.3 = not required
  • we need to update debug1.patchdebug1.patch.txt
    • #include <Arduino.h> in Adafruit_TinyUSB.h now yields “undefined reference to _ZN17Adafruit_USBD_CDC16getInstanceCountEv”
    • moving the declaration to the local Adafruit_TinyUSB_API.h in .pio doesn’t work, we need to patch the copy in ~/.platformio/packages/framework-arduinopico
    • using HardwareSerial in declaration now yields “'HardwareSerial' does not name a type” due to circular include
  • we now need debug3.patch.txt
    git -C ~/.platformio/packages/framework-arduinopico apply $PWD/debug3.patch

05AC:024F Apple Magic Keyboard with Numeric Keypad (model A1243)

reported by Anthony Sorace in http://a.9srv.net/reports/usb3sun.html

The behavior for the Apple keyboard is odd. The usb3sun makes no beep on connect, but makes the standard beep on disconnect. If a different (working) keyboard is attached, it behaves normally. If the Apple keyboard is re-attached, though, the usb3sun seems hung: no connections from any keyboard are recognized, and no beep is emited on disconnecting the Apple keyboard. A reset using the on-board button restores normal function. This keyboard is known to function normally with other non-Apple hardware (it was used to type this report while connected to a Raspberry Pi running Plan 9).

Notably, the Keyboardio Atreus does not exhibit this behavior; the usb3sun beeps on connect/disconnect as for the working keyboards.

plan 9 /dev/usb/ctl:

ep9.0 enabled control rw speed high maxpkt 64 pollival 0 samplesz 0 hz 0 hub 4 port 3 rootport 1 addr 7 busy
hub csp 0x010009 ports 3 ’Apple, Inc.’ ’Keyboard Hub’ xhci
ep10.0 enabled control rw speed low maxpkt 8 pollival 0 samplesz 0 hz 0 hub 7 port 2 rootport 1 addr 8 busy
hid csp 0x010103 csp 0x000003 vid 0x05ac did 0x024f ’Apple Inc.’ ’Apple Keyboard’ xhci
ep10.1 enabled interrupt r speed low maxpkt 8 pollival 10 samplesz 0 hz 0 hub 7 port 2 rootport 1 addr 8 busy

NeXTSTEP and Plan 9 do not tolerate running mouse at 9600 baud

Solaris and Linux can run the mouse at 9600 baud, but on NeXTSTEP and Plan 9, the pointer will misbehave.

  • NeXTSTEP 3.3 (found during development) works at 1200 baud
  • Plan 9 (reported by Anthony Sorace) may work at 2400 baud?

if you encounter problems with the mouse pointer moving erratically, try one of these:

update: firmware 2.0 has a mouse baud setting!

3367:1903 Endgame Gear XM1r mouse

buttons only (16-bit dx/dy, no boot protocol)

$ sudo lsusb -vd 3367:1903
Bus 005 Device 002: ID 3367:1903 EndGameGear XM1 Gaming Mouse
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            0 
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x3367 
  idProduct          0x1903 
  bcdDevice            2.00
  iManufacturer           1 EndGameGear
  iProduct                2 XM1 Gaming Mouse
  iSerial                 3 0000000000000000
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0054
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          2 XM1 Gaming Mouse
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      1 Boot Interface Subclass
      bInterfaceProtocol      2 Mouse
      iInterface              5 HID Device
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      67
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0008  1x 8 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              5 HID Device
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength     158
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x82  EP 2 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0015  1x 21 bytes
        bInterval               1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         3 Human Interface Device
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 
      iInterface              5 HID Device
        HID Device Descriptor:
          bLength                 9
          bDescriptorType        33
          bcdHID               1.11
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
          wDescriptorLength      38
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x83  EP 3 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0040  1x 64 bytes
        bInterval               1
Device Status:     0x0001
  Self Powered

17EF:6019 Lenovo MSU1175 mouse

Hey,

I have two Lenovo mice of the same type (MSU1175) which are not working when I start my SPARCstation IPX. If I unplug and re-plug them, they work. I hear one confirmation tone when the adapter initially starts - Would I head two separate tones for keyboard and mouse if they'd both be recognized upon power-up?

I have suspected that the problem might be a startup-up timing issue, but adding a second of delay in setup() or loop() did not solve the issue.

On one occasion, I found that only the mouse was enumerated, but not the keyboard: I re-plugged the usb3sun with both USB devices connected and heard one device confirmation tone. The keyboard did not work, however. When I unplugged and re-plugged it, it worked.

Does enumeration of both the mouse and keyboard at startup usually work, or is this a known issue?

Thanks,
Hans

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.