atomvm_gleam
Typed Gleam wrappers for AtomVM
v0.7.0-beta.0 —
peripherals, networking, crypto, AtomGL
display, and AtomVM WASM / emscripten browser APIs.
Package version tracks the matching AtomVM pre-release (0.7.0-beta.0). APIs
may still shift until AtomVM ships a stable 0.7.0.
Requirements
- Gleam
>= 1.18.1 - AtomVM
v0.7.0-beta.0(orrelease-0.7at a compatible revision) - Erlang/OTP 26+ for the Gleam compile toolchain (OTP 27+ recommended)
[dependencies]
atomvm_gleam = ">= 0.7.0-beta.0 and < 0.8.0"
Supported modules
Coverage against AtomVM v0.7.0-beta.0 / release-0.7 libs (avm_esp32,
avm_rp2, avm_network, avm_emscripten, eavmlib, estdlib), plus AtomGL
and atomvm_websocket_client.
| Gleam module | Upstream | Status |
|---|---|---|
atomvm_gleam/gpio |
gpio (ESP32 + RP2) |
Full public API, including Pico WL pins and set_function |
atomvm_gleam/i2c |
i2c |
Full public API |
atomvm_gleam/spi |
spi |
Full public API |
atomvm_gleam/uart |
uart |
Full public API (+ usb_serial_jtag_name) |
atomvm_gleam/usb_cdc |
usb_cdc (ESP32 / RP2 / STM32) |
Full public API |
atomvm_gleam/ledc |
ledc |
Full public API (timers, channels, fade, duty/freq) |
atomvm_gleam/adc |
esp_adc |
Full public API (resource + pin convenience paths) |
atomvm_gleam/esp_dac |
esp_dac |
Public oneshot API (new_channel, output, delete) |
atomvm_gleam/esp |
esp |
Full public API (NVS, sleep, partitions incl. mmap, RTC, mount, WDT, MAC, timer_get_time) |
atomvm_gleam/pico |
pico |
Full public API (CYW43 GPIO + RTC) |
atomvm_gleam/network |
network |
Full public API (STA/AP, wait helpers, scan, RSSI/status, SNTP/mDNS config) |
atomvm_gleam/http |
ahttp_client |
Full public API (connect/request/stream/recv/close) |
atomvm_gleam/http_server |
http_server |
Full public API |
atomvm_gleam/mdns |
mdns |
Responder lifecycle + DNS parse/serialize helpers |
atomvm_gleam/ssl |
ssl |
Client API (start/stop/connect/send/recv/close) |
atomvm_gleam/console |
console |
Full public API (start, puts/puts_to, print/print_err, flush/flush_handle) |
atomvm_gleam/atomvm |
atomvm |
Platform, AVM packs, random, POSIX I/O (incl. termios), subprocess, get_creation |
atomvm_gleam/avm_pubsub |
avm_pubsub |
Full public API (start/start_named, publish, sub/unsub) |
atomvm_gleam/crypto |
crypto |
Hash, MAC, AEAD, streaming cipher, PBKDF2, ECDH/EdDH, sign/verify, strong_rand_bytes |
atomvm_gleam/json |
json |
encode/decode (+ /2//3), streaming decode, fine-grained encode helpers (default encoder/decoders) |
atomvm_gleam/display |
AtomGL display port |
open / update / font register/deregister |
atomvm_gleam/websocket |
atomvm_websocket_client |
ESP-IDF port: open / send text|binary / close |
atomvm_gleam/emscripten |
avm_emscripten emscripten |
JS interop + HTML5 callbacks (register_* / register_*_with / register_*_with_user_data) |
atomvm_gleam/emscripten_websocket |
avm_emscripten websocket |
Browser WebSocket NIF (full public API) |
Import as atomvm_gleam/<module>, e.g. import atomvm_gleam/gpio.
Two WebSocket modules
| Gleam module | Platform | Upstream |
|---|---|---|
atomvm_gleam/websocket |
ESP-IDF (and images that include the port driver) | atomvm_websocket_client |
atomvm_gleam/emscripten_websocket |
Emscripten / browser only | AtomVM avm_emscripten Erlang module websocket |
They are not interchangeable: different message shapes, APIs, and platforms.
Check atomvm.platform() (or emscripten_websocket.is_supported()) before calling
the browser NIF on mixed-target builds.
AtomVM WASM / emscripten
AtomVM can run as WebAssembly in the browser or under Node. Gleam code for that
target is still compiled for the Erlang BEAM and loaded by AtomVM WASM —
use @external(erlang, ...) FFI as elsewhere in this package. Gleam’s JavaScript
backend is a different toolchain and is not used here.
Upstream docs (prefer release-0.7):
- Getting Started — WebAssembly
- Build instructions — emscripten
- API:
emscripten,websocket(underavm_emscripten)
Browser hosting note (high level): AtomVM’s web build uses SharedArrayBuffer,
so pages must be served from localhost or HTTPS with COOP/COEP headers
(Cross-Origin-Opener-Policy: same-origin and
Cross-Origin-Embedder-Policy: require-corp). See the AtomVM getting-started
guide for hosting options; this package does not document a full deploy tutorial.
Known gaps vs AtomVM 0.7
Public AtomVM-facing modules targeted by this package are wrapped. Remaining intentional omissions:
| Area | Notes |
|---|---|
atomvm |
Deprecated rand_bytes/1 omitted — use crypto.strong_rand_bytes |
json |
Custom OTP encoder funs / custom decoder callback maps — not expressible cleanly in Gleam; default encoder/decoders are provided |
Intentionally out of scope for this package:
- OTP/estdlib staples (
gen_server,gen_tcp,lists, …) — use Gleam /gleam_erlang - Platform-internal HALs (
gpio_hal,i2c_hal, …), alisp, JIT,esp32devmode,epmd
Development
gleam format
gleam build
Agent / contribution conventions: AGENTS.md.