Description
TinyGo is a Go compiler intended for use in small places such as microcontrollers, WebAssembly (WASM), and command-line tools.
It reuses libraries used by the Go language tools alongside LLVM to provide an alternative way to compile programs written in the Go programming language.
TinyGo alternatives and similar packages
Based on the "Database" category.
Alternatively, view TinyGo alternatives based on common mentions on social networks and blogs.
-
tidb
TiDB is an open-source, cloud-native, distributed, MySQL-Compatible database for elastic scale and real-time analytics. Try AI-powered Chat2Query free at : https://tidbcloud.com/free-trial -
cockroach
CockroachDB - the open source, cloud-native distributed SQL database. -
Milvus
A cloud-native vector database, storage for next generation AI applications -
vitess
Vitess is a database clustering system for horizontal scaling of MySQL. -
groupcache
groupcache is a caching and cache-filling library, intended as a replacement for memcached in many cases. -
VictoriaMetrics
VictoriaMetrics: fast, cost-effective monitoring solution and time series database -
go-cache
An in-memory key:value store/cache (similar to Memcached) library for Go, suitable for single-machine applications. -
immudb
immudb - immutable database based on zero trust, SQL and Key-Value, tamperproof, data change history -
buntdb
BuntDB is an embeddable, in-memory key/value database for Go with custom indexing and geospatial support -
pREST
PostgreSQL ➕ REST, low-code, simplify and accelerate development, ⚡ instant, realtime, high-performance on any Postgres application, existing or new -
rosedb
🚀 A high performance NoSQL database based on bitcask, supports string, list, hash, set, and sorted set. -
xo
Command line tool to generate idiomatic Go code for SQL databases supporting PostgreSQL, MySQL, SQLite, Oracle, and Microsoft SQL Server -
tiedot
A rudimentary implementation of a basic document (NoSQL) database in Go -
nutsdb
A simple, fast, embeddable, persistent key/value store written in pure Go. It supports fully serializable transactions and many data structures such as list, set, sorted set. -
cache2go
Concurrency-safe Go caching library with expiration capabilities and access counters -
GCache
An in-memory cache library for golang. It supports multiple eviction policies: LRU, LFU, ARC -
gocraft/dbr (database records)
Additions to Go's database/sql for super fast performance and convenience. -
fastcache
Fast thread-safe inmemory cache for big number of entries in Go. Minimizes GC overhead -
CovenantSQL
A decentralized, trusted, high performance, SQL database with blockchain features
Access the most powerful time series database as a service
Do you think we are missing an alternative of TinyGo or a related project?
Popular Comparisons
README
TinyGo - Go compiler for small places
TinyGo is a Go compiler intended for use in small places such as microcontrollers, WebAssembly (Wasm), and command-line tools.
It reuses libraries used by the Go language tools alongside LLVM to provide an alternative way to compile programs written in the Go programming language.
Here is an example program that blinks the built-in LED when run directly on any supported board with onboard LED:
package main
import (
"machine"
"time"
)
func main() {
led := machine.LED
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
for {
led.Low()
time.Sleep(time.Millisecond * 1000)
led.High()
time.Sleep(time.Millisecond * 1000)
}
}
The above program can be compiled and run without modification on an Arduino Uno, an Adafruit ItsyBitsy M0, or any of the supported boards that have a built-in LED, just by setting the correct TinyGo compiler target. For example, this compiles and flashes an Arduino Uno:
tinygo flash -target arduino examples/blinky1
Installation
See the getting started instructions for information on how to install TinyGo, as well as how to run the TinyGo compiler using our Docker container.
Supported boards/targets
You can compile TinyGo programs for microcontrollers, WebAssembly and Linux.
The following 91 microcontroller boards are currently supported:
- Adafruit Circuit Playground Bluefruit
- Adafruit Circuit Playground Express
- Adafruit CLUE
- Adafruit Feather M0
- Adafruit Feather M4
- Adafruit Feather M4 CAN
- Adafruit Feather nRF52840 Express
- Adafruit Feather nRF52840 Sense
- Adafruit Feather RP2040
- Adafruit Feather STM32F405 Express
- Adafruit Grand Central M4
- Adafruit ItsyBitsy M0
- Adafruit ItsyBitsy M4
- Adafruit ItsyBitsy nRF52840
- Adafruit MacroPad RP2040
- Adafruit Matrix Portal M4
- Adafruit Metro M4 Express Airlift
- Adafruit PyBadge
- Adafruit PyGamer
- Adafruit PyPortal
- Adafruit QT Py
- Adafruit QT Py RP2040
- Adafruit Trinket M0
- Adafruit Trinkey QT2040
- Arduino Mega 1280
- Arduino Mega 2560
- Arduino MKR1000
- Arduino MKR WiFi 1010
- Arduino Nano
- Arduino Nano 33 BLE
- Arduino Nano 33 BLE Sense
- Arduino Nano 33 IoT
- Arduino Nano RP2040 Connect
- Arduino Uno
- Arduino Zero
- BBC micro:bit
- BBC micro:bit v2
- blues wireless Swan
- Digispark
- Dragino LoRaWAN GPS Tracker LGT-92
- ESP32 - Core board
- ESP32 - mini32
- ESP32-C3-12f
- ESP8266 - d1mini
- ESP8266 - NodeMCU
- Game Boy Advance
- iLabs Challenger RP2040 LoRa
- M5Stack
- M5Stack Core2
- M5Stamp C3
- Makerdiary nRF52840-MDK
- Makerdiary nRF52840-MDK USB Dongle
- MCH2022 badge
- Microchip SAM E54 Xplained Pro
- nice!nano
- Nintendo Switch
- Nordic Semiconductor PCA10031
- Nordic Semiconductor PCA10040
- Nordic Semiconductor PCA10056
- Nordic Semiconductor pca10059
- Particle Argon
- Particle Boron
- Particle Xenon
- Phytec reel board
- Pimoroni Badger2040
- Pimoroni Tufty2040
- PineTime DevKit
- PJRC Teensy 3.6
- PJRC Teensy 4.0
- PJRC Teensy 4.1
- ProductivityOpen P1AM-100
- Raspberry Pi Pico
- Raytac MDBT50Q-RX Dongle (with TinyUF2 bootloader)
- Seeed Seeeduino XIAO
- Seeed XIAO BLE
- Seeed XIAO ESP32C3
- Seeed XIAO RP2040
- Seeed LoRa-E5 Development Kit
- Seeed Sipeed MAix BiT
- Seeed Wio Terminal
- SiFIve HiFive1 Rev B
- Sparkfun Thing Plus RP2040
- ST Micro "Nucleo" F103RB
- ST Micro "Nucleo" F722ZE
- ST Micro "Nucleo" L031K6
- ST Micro "Nucleo" L432KC
- ST Micro "Nucleo" L552ZE
- ST Micro "Nucleo" WL55JC
- ST Micro STM32F103XX "Bluepill"
- ST Micro STM32F407 "Discovery"
- ST Micro STM32F469 "Discovery"
- X9 Pro smartwatch
- The Things Industries Generic Node Sensor Edition
For more information, see this list of boards. Pull requests for additional support are welcome!
Currently supported features:
For a description of currently supported Go language features, please see https://tinygo.org/lang-support/.
Documentation
Documentation is located on our web site at https://tinygo.org/.
You can find the web site code at https://github.com/tinygo-org/tinygo-site.
Getting help
If you're looking for a more interactive way to discuss TinyGo usage or development, we have a #TinyGo channel on the Gophers Slack.
If you need an invitation for the Gophers Slack, you can generate one here which should arrive fairly quickly (under 1 min): https://invite.slack.golangbridge.org
Contributing
Your contributions are welcome!
Please take a look at our Contributing page on our web site for details.
Project Scope
Goals:
- Have very small binary sizes. Don't pay for what you don't use.
- Support for most common microcontroller boards.
- Be usable on the web using WebAssembly.
- Good CGo support, with no more overhead than a regular function call.
- Support most standard library packages and compile most Go code without modification.
Non-goals:
- Be efficient while using zillions of goroutines. However, good goroutine support is certainly a goal.
- Be as fast as
gc
. However, LLVM will probably be better at optimizing certain things so TinyGo might actually turn out to be faster for number crunching. - Be able to compile every Go program out there.
Why this project exists
We never expected Go to be an embedded language and so its got serious problems...
-- Rob Pike, GopherCon 2014 Opening Keynote
TinyGo is a project to bring Go to microcontrollers and small systems with a single processor core. It is similar to emgo but a major difference is that we want to keep the Go memory model (which implies garbage collection of some sort). Another difference is that TinyGo uses LLVM internally instead of emitting C, which hopefully leads to smaller and more efficient code and certainly leads to more flexibility.
The original reasoning was: if Python can run on microcontrollers, then certainly Go should be able to run on even lower level micros.
License
This project is licensed under the BSD 3-clause license, just like the Go project itself.
Some code has been copied from the LLVM project and is therefore licensed under a variant of the Apache 2.0 license. This has been clearly indicated in the header of these files.
Some code has been copied and/or ported from Paul Stoffregen's Teensy libraries and is therefore licensed under PJRC's license. This has been clearly indicated in the header of these files.
*Note that all licence references and agreements mentioned in the TinyGo README section above
are relevant to that project's source code only.