Repository navigation
Documentation
github-actions[bot] edited this page Oct 16, 2026
·
5 revisions
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
Generated from the MicroCS repository - edit the files there, not in the wiki.
Start here
Step-by-step guides
- Guides
- Guide PC Simulator
- Guide ESP32
- Guide ESP32 C3 OLED
- Guide Raspberry Pi Pico
- Guide STM32
- Guide Arduino
- Guide Zephyr
- Guide Peripheral Settings
- Guide DMA
Hardware
- Hardware API
- Power Management
- Bluetooth LE
- Peripheral Configuration
- DMA
- Device Drivers
- Wi Fi and Networking
- U8g2 Displays
- Filesystem
- Threads
- Scheduler
Ports
- Porting and Build Systems
- Port ESP32
- Port RP2040 RP2350
- Port STM32
- Port STM32 Firmware
- Port Zephyr
- Port Arduino
C# and the runtime
Embedding and tuning
Internals
Project