Skip to content

Documentation

github-actions[bot] edited this page Oct 16, 2026 · 5 revisions

MicroCS documentation

New here? Read the main README first: it shows the two ways to use MicroCS (a library inside your firmware, or the whole firmware as a C# REPL).

Guide What you will find
🧭 Step-by-step guides from nothing to C# on your board: PC, ESP32, ESP32-C3 + OLED, Raspberry Pi Pico, STM32, Arduino, Zephyr
🚀 Getting started build, first script, simulator, REPL, precompiling, embedding — in 10 minutes
🔌 Hardware API GPIO, UART, I²C, SPI, ADC, DAC, PWM, timers, I²S, QSPI, CAN, watchdog, RTC; interrupts; writing a board table
💤 Power management cooperative sleep, wake-input selection, light/deep sleep, shutdown; per-port capabilities and Studio/recovery precautions
🎛️ Peripheral configuration GpioConfig, SpiConfig, UartConfig …: pins, pulls, drive strength, filters, board options; what each board supports; implementing it in a port
⚡ DMA DmaBuffer, SPI.WriteAsync & co., DmaTransfer, memory DMA; ordering and lifetime rules; per-board support; implementing it in a port
📶 Wi-Fi & networking Wifi (station, soft AP, scan, events, static IP, saved networks), ESP-NOW, NTP, mDNS, ping, TcpClient / TcpListener / UdpClient, Http + HTTPS, Json; ESP32 setup; the --sim radio
🔵 Bluetooth LE opt-in Ble: advertising and beacons, scanning, GATT server (BleService) and client (BleConnection), pairing / bonding, BleUart; ESP32 NimBLE, Pico W BTstack, Zephyr, ArduinoBLE; the --sim radio
🖥️ U8g2 displays optional C# U8g2 / U8x8 on olikraus' u8g2: turning it on in each build, choosing displays and fonts, fonts from files, the whole API, the --oled simulator
🧩 Device drivers the driver registry, the built-in ws2812 (LedStrip) and servo (Servo) drivers and their backends, writing your own, turning drivers off
⚙️ Configuration the project config header mcs_user_config.h, -D options, profiles, precedence, per build system
🧭 Porting & build systems Make, CMake, ESP-IDF, Zephyr, PlatformIO, Arduino, CubeIDE/Keil/IAR; the vendor ports; new chips
📟 Standalone firmware mcs_runtime, the REPL, boot sequence, upload protocol, mcs_remote.py
🔧 Embedding the C API: VMs, running code, C bindings, calling scripts, limits, GC rules
🧩 Language the supported C# subset, feature by feature, and every known difference from .NET
📚 Standard library generated reference of every class and member a script can call
💾 Filesystem VFS mounts, RAM / POSIX / TinyFS / LittleFS / YAFFS2 backends, flash ports, File / Directory / Path
⏱️ Scheduler startup / once / periodic jobs, jobs.cfg
🧵 Threads optional real OS threads: FreeRTOS / Zephyr / POSIX, second core, Channel
🪫 Small MCUs running in 24–64 KB of RAM: profiles, execute-in-place images, GC tuning, measured results
📊 Performance benchmarks, Cortex-M footprint, memory findings — with commands to reproduce
🏗️ Architecture pipeline, VM, GC, modules, invariants for contributors
🧱 Bytecode .mcsb image format, loader validation, full instruction set
🛡️ Security what the sandbox guarantees and what it does not
🧪 Testing test matrix, port checks, fuzzing, sanitizers, .NET parity, adding tests

Port guides: STM32 · ESP32 · RP2040/RP2350 · Zephyr · Arduino · examples: examples/

The same pages are on the wiki (published from this folder on every push to main by tools/wiki_sync.py; edit them here).

Project history: CHANGELOG · Contributing

Clone this wiki locally