├── .gitignore ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Patricio Whittingslow 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # awesome-tinygo 2 | A curated list of awesome TinyGo projects. Inspired by [awesome-go](https://github.com/avelino/awesome-go). 3 | 4 | **Contributing**: 5 | 6 | * **Issues**. Please add which category you believe fits it best along with the following markdown: 7 | ```markdown 8 | * []() - 9 | ``` 10 | 11 | * **Pull requests** There are no guidelines or requirements one has to meet to be added though it would be desirable the project be original. 12 | 13 | * [Awesome TinyGo](#awesome-tinygo) 14 | - [Code Editing](#code-editing) 15 | - [Continuous Integration](#continuous-integration) 16 | - [Display Hardware](#display-hardware) 17 | - [Embedded Systems](#embedded-systems) 18 | - [General use](#general-use) 19 | - [Protocol implementations](#protocol-implementations) 20 | - [Instrumentation and control with sensors and actuators](#instrumentation-and-control-with-sensors-and-actuators) 21 | - [Encoders](#encoders) 22 | - [Gaming](#gaming) 23 | - [WebAssembly](#webassembly) 24 | - [WebSockets](#websockets) 25 | - [DOM Manipulation](#dom-manipulation) 26 | - [WASI and WASM Unknown](#wasi-and-wasm-unknown) 27 | - [Wireless Communication](#wireless-communication) 28 | 29 | * [Awesome TinyGo Creations](#awesome-tinygo-creations) 30 | 31 | * [Awesome Libraries](#awesome-libraries) 32 | 33 | * [Resources](#resources) 34 | - [Websites](#websites) 35 | - [TinyGo Community](#tinygo-community) 36 | - [Tutorials](#tutorials) 37 | 38 | 39 | # Awesome TinyGo 40 | 41 | ## Code Editing 42 | * [VSCode](https://github.com/tinygo-org/vscode-tinygo) - TinyGo support for Visual Studio Code. 43 | * [Goland](https://plugins.jetbrains.com/plugin/16915-tinygo) - TinyGo support for Goland. 44 | * [Vim](https://github.com/sago35/tinygo.vim) - TinyGo support for Vim/NeoVim. 45 | * [bash/zsh/clink](https://github.com/sago35/tinygo-autocmpl) - Adds bash/zsh/clink auto-completion to TinyGo. 46 | * [Display Simulator](https://github.com/sago35/tinydisplay) - `tinydisplay` is a tiny display for TinyGo development. 47 | 48 | ## Continuous Integration 49 | * [setup-tinygo](https://github.com/marketplace/actions/setup-tinygo) - Sets up a TinyGo environment for GitHub Actions. 50 | * [TinyHCI](https://github.com/tinygo-org/tinyhci) - Test actual hardware connections for microcontrollers. It is intended to provide smoke test implementations that exercise the basic functionality for each kind of hardware interface for each supported microcontroller. 51 | 52 | ## Display Hardware 53 | * [TinyDraw](https://github.com/tinygo-org/tinydraw) - Draw primitives on TinyGo displays. It is heavily based on the Adafruit GFX library. 54 | * [TinyFont](https://github.com/tinygo-org/tinyfont) - Font/text package for TinyGo displays. It is heavily based on Adafruit's GFX library. 55 | * [TinyTerm](https://github.com/tinygo-org/tinyterm) - A minimal terminal for TinyGo devices supporting 256-color ANSI escape codes. 56 | * [SSD1306 font](https://github.com/Nondzu/ssd1306_font) - Lite SSD1306 OLED font library using TinyGo. 57 | 58 | 59 | 60 | ## Embedded Systems 61 | 62 | ### General use 63 | * [bouncer](https://github.com/eyelight/bouncer) - bouncer is a button input handler library supporting press-lengths of different durations, and debouncing. 64 | * [fat](https://github.com/soypat/fat) - Filesystem implementation using the File Allocation Table in pure Go. 65 | * [go-maquina](https://github.com/soypat/go-maquina) - Finite State Machine (FSM) implementation with simplicity and maintainability in mind using Go generics. 66 | * [go-pico](https://github.com/djthorpe/go-pico) - Raspberry Pi RP2040 Pico SDK for golang. 67 | * [mm-go](https://github.com/joetifa2003/mm-go) - Generic manual memory management for golang. 68 | * [periph/devices](https://github.com/periph/devices) - Device drivers. 69 | * [pio](https://github.com/tinygo-org/pio) - Programmable I/O API for RP2040/RP2350 using TinyGo 70 | * [schedule](https://github.com/soypat/schedule) - Event-loop scheduling library for synchronizing actions over long periods of time. 71 | * [tinyfs](https://github.com/tinygo-org/tinyfs) - Embedded filesystems for TinyGo like FATfs and LittleFS on microcontrollers. 72 | * [TinyGo Drivers](https://github.com/tinygo-org/drivers) - Provides a collection of hardware drivers for devices such as sensors and displays that can be used together with TinyGo. 73 | * [tinymath](https://github.com/orsinium-labs/tinymath) - The fastest and smallest Go math library for constrained environments, like microcontrollers or WebAssembly. 74 | * [tinytest](https://github.com/orsinium-labs/tinytest) - The only assertion library that works with TinyGo 75 | 76 | ### Protocol implementations 77 | * [achicken](https://github.com/soypat/achicken) - Dead-simple serial protocol with CRC for small projects. 78 | * [ether-swtch](https://github.com/soypat/ether-swtch) - Low level Ethernet/IP/TCP/HTTP stack marshaller/unmarshaller for use in tiny places. 79 | * [go-bthome](https://github.com/hybridgroup/go-bthome) - Minimal package for creating and parsing BTHome service data using Go/TinyGo. 80 | * [go-canard](https://github.com/soypat/go-canard) - CAN/OpenCyphal implementation in pure Go. Port of libcanard. 81 | * [go-cayenne-lib](https://github.com/TheThingsNetwork/go-cayenne-lib) - CayenneLPP in Go 82 | * [gomavlib](https://github.com/bluenviron/gomavlib) - Mavlink protocol (2.0 and 1.0) implementation in Go for control and instrumentation of autonomous vehicles. 83 | * [mlkem768](https://github.com/FiloSottile/mlkem768) - Quantum-resistant key encapsulation method ML-KEM (formerly known as Kyber) implementation in Go. 84 | * [natiu-mqtt](https://github.com/soypat/natiu-mqtt) - A dead-simple, extensible MQTT implementation well suited for embedded systems. 85 | * [peamodbus](https://github.com/soypat/peamodbus) - Fault tolerant, TCP modbus implementation in Go that just works. Apt for embedded systems. 86 | * [peasocket](https://github.com/soypat/peasocket) - Dead-simple, extensible websocket implementation in Go. 87 | * [seqs](https://github.com/soypat/seqs) - Networking library for use on microcontrollers. Basically a more featureful LWIP. 88 | * [tiny-sproto](https://github.com/soypat/tiny-sproto) - A simple Point-to-Point Protocol implementation written in Go. 89 | 90 | ### Instrumentation and control with sensors and actuators 91 | * [fusion](https://github.com/aykevl/fusion) - Sensor fusion algorithms (gyroscope/accelerometer) implemented in pure Go. 92 | * [magcal](https://github.com/ysoldak/magcal) - (Magical) Magnetometer Calibration 93 | * [pctl](https://github.com/brandondube/pctl) - "process control" is a package for industrial control in Go. Filtering and control theory algorithms. 94 | 95 | ## Encoders 96 | * [jsony](https://github.com/orsinium-labs/jsony) - A blazing fast and safe Go package for serializing JSON 97 | * [protobuf-go-lite](https://github.com/aperturerobotics/protobuf-go-lite) - Reflection-free Protobuf for Go. 98 | 99 | ## Gaming 100 | * [firefly-go](https://github.com/firefly-zero/firefly-go) - Go SDK for making Firefly Zero games 101 | * [Flapy Boot](https://github.com/bjatkin/flappy-boot) - clone of flappy bird for the GBA written using TinyGo. 102 | * [gonx](https://github.com/racerxdl/gonx) - Wrapper around libnx for developing Nintendo Switch programs using TinyGo. 103 | * [Hunt the Wumpus](https://github.com/smittytone/pi-pico-go.git) - Handheld gaming powered by the Raspberry Pi Pico and TinyGo. 104 | * [koebiten](https://github.com/sago35/koebiten) - Koebiten is a 2D game engine that runs on TinyGo. It’s inspired by Ebitengine and is characterized by its simple API. 105 | * [tinygba](https://github.com/tinygo-org/tinygba) - Tools and helpers for developing GBA programs using TinyGo. 106 | * [wasm4go](https://github.com/orsinium-labs/wasm4go) - Framework for making WASM-4 games with Go (and TinyGo). 107 | 108 | ## WebAssembly 109 | 110 | ### DOM Manipulation 111 | * [TinyDom](https://github.com/Nerzal/tinydom) - DOM manipulation library. For use in WASM 112 | * [GoUI](https://github.com/goui-org/goui) - A web framework for making user interfaces 113 | 114 | ### WebSockets 115 | * [TinyWebSocket](https://github.com/Nerzal/tinywebsocket) - Wraps the `syscall/js` api to provide a better developer experience, while being compilable by TinyGo 116 | 117 | ### WASI and WASM Unknown 118 | * [go-modules](https://github.com/bytecodealliance/go-modules) - WebAssembly, WASI, and Component Model tools for Go 119 | * [wasmCV](https://github.com/wasmvision/go-wasmcv) - Go bindings for wasmCV computer vision interfaces using WebAssembly. 120 | * [wypes](https://github.com/orsinium-labs/wypes) - Go library to define type-safe host functions in wazero and other WebAssembly runtimes. 121 | 122 | ## Wireless Communication 123 | * [Go Bluetooth](https://github.com/tinygo-org/bluetooth) - Go Bluetooth is a cross-platform package for using Bluetooth Low Energy hardware from the Go programming language. 124 | * [lorawan](https://github.com/tinygo-org/drivers/tree/release/lora/lorawan) - LoRaWAN implementation for embedded devices using TinyGo. 125 | 126 | # Awesome TinyGo Creations 127 | **Hardware and software implementations** 128 | * [Arduino Mega Programmer](https://github.com/Gustavomurta/Arduino_Mega_Programmer) - Read ROMs, EPROM, Flash of older computers such as a Commodore C128 ROM chip. 129 | * [LED Cube](https://github.com/tinygo-org/things/tree/master/ledcube) - 6x32x32 LED cube, inspired by a LED cube I've seen at CCC and the SquareWave Dot cube. 130 | * [HeadTracker](https://github.com/ysoldak/HeadTracker) - Bluetooth DIY Head Tracker, for Nano 33 BLE and XIAO BLE Sense boards. 131 | * [RC PWM to RGB LED](https://github.com/ysoldak/pwm-ws2812) - WS2812 LED strip color and brightness control with two RC PWM channels 132 | * [USB HID Keyboard firmware for TinyGo](https://github.com/sago35/tinygo-keyboard) - keyboard firmware for tinygo 133 | * [Gopherbot](https://github.com/hybridgroup/gopherbot) - A robotic gopher plushie that you can code using TinyGo 134 | * [Gobadge](https://github.com/tinygo-org/gobadge) - TinyGo powered badge using Adafruit Pybadge Hardware 135 | * [TinyGlobo](https://github.com/hybridgroup/tinyglobo) - A pico balloon floats into the great big world, towing a RP2040 Pico programmed with TinyGo using LoraWAN to communicate along the way. 136 | * [FPV Combat Gadget](https://github.com/ysoldak/fpvc-gadget) - [FPV Combat](https://fpv-combat.com/) configurator with display and a rotary encoder (multi-level menu system with input), runs on XIAO. 137 | * [gopher-board](https://github.com/sat0ken/gopher-board) - Original board with Gopher design for Waveshare RP2040-Zero and XIAO. 138 | * [gopher.pretty](https://github.com/sat0ken/gopher.pretty) - Kicad footprint file of Gopher design. Lets you make your own board. 139 | * [go-haystack](https://github.com/hybridgroup/go-haystack) - Track personal Bluetooth devices via Apple's "Find My" network using OpenHaystack and Macless-Haystack with tools written in Go/TinyGo. No Apple hardware required! 140 | * [wasmVision](https://github.com/wasmvision/wasmvision) - wasmVision gets you going with computer vision using WebAssembly with processors written using TinyGo/Rust/C. 141 | 142 | 143 | # Awesome Libraries 144 | **Packages that make life easier or more awesome in TinyGo** 145 | * [`cbor`](https://github.com/fxamacker/cbor) - Library for encoding and decoding Concise Binary Object Representation data and Sequences (RFC8949). 146 | * [`cereal`](https://github.com/soypat/cereal) - All-you-need serial device tooling integrating bugst, goburrow, tarm and sers serial libraries. 147 | * [`float16`](https://github.com/x448/float16) - IEEE 754 half-precision floating-point format (binary16) library. 148 | * [`godsp`](https://github.com/goccmack/godsp) - Basic digital signal processing functions using the discrete wavelet transform (DWT). 149 | * [`lap`](https://github.com/soypat/lap) - Extremely lightweight linear algebra package similar to gonum. 150 | * [`math32`](https://github.com/chewxy/math32) - 32bit math functions in pure Go. 151 | * [`mathgl`](https://github.com/go-gl/mathgl) - A pure Go 3D math library. 152 | * [`tvd`](https://github.com/soypat/tvd) - Total Variation Denoising filter ideal for capturing edge transitions. 153 | * [`u-root`](https://github.com/u-root/u-root) - Go versions of many standard Linux tools, such as ls, cp, or shutdown among other awesome OS stuff. 154 | 155 | # Resources 156 | 157 | ## Websites 158 | 159 | ### TinyGo Community 160 | 161 | * [TinyGopher Worldmap](https://getethermap.org/m/tinygophers) - Locate Tinygophers all over the world! 162 | ### Tutorials 163 | 164 | * [Blinky tutorial](https://github.com/tinygo-org/tinygo-site/blob/379c887947063e08bc9547a034b7ced68ab30628/content/getting-started/blinky.md) - A tutorial to get familiar with TinyGo basics. 165 | --------------------------------------------------------------------------------