MCPcopy Index your code
hub / github.com/davidmonterocrespo24/velxio

github.com/davidmonterocrespo24/velxio @v3.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v3.0.0 ↗ · + Follow
7,883 symbols 25,081 edges 1,041 files 1,813 documented · 23% updated 5d agov3.0.0 · 2026-06-11★ 2,32310 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Velxio: Arduino & Embedded Board Emulator

Live at velxio.dev

A fully local, open-source multi-board emulator. Write Arduino C++ or Python, compile it, and simulate it with real CPU emulation and 48+ interactive electronic components — all running in your browser.

19 boards · 5 CPU architectures: AVR8 (ATmega / ATtiny), ARM Cortex-M0+ (RP2040), RISC-V RV32IMC/EC (ESP32-C3 / CH32V003), Xtensa LX6/LX7 (ESP32 / ESP32-S3 via QEMU), and ARM Cortex-A53 (Raspberry Pi 3 Linux via QEMU).

Visitors Live Demo Docker Image GitHub stars Discord License: AGPLv3 Commercial License


Product Hunt


Support the Project

Velxio is free and open-source. Building and maintaining a full multi-board emulator takes a lot of time — if it saves you time or you enjoy the project, sponsoring me directly helps keep development going.

Platform Link
GitHub Sponsors (preferred) github.com/sponsors/davidmonterocrespo24
PayPal paypal.me/odoonext

Your support helps cover server costs, library maintenance, and frees up time to add new boards, components, and features. Thank you!


Try it now

https://velxio.dev — no installation needed. Open the editor, write your sketch, and simulate directly in the browser.

To self-host with Docker (single command):

docker run -d \
  --name velxio \
  -p 3080:80 \
  -v velxio-data:/app/data \
  -v velxio-arduino-libs:/root/.arduino15 \
  -v velxio-arduino-user-libs:/root/Arduino \
  -v velxio-ccache:/var/cache/ccache \
  -v velxio-build:/var/lib/velxio-build \
  ghcr.io/davidmonterocrespo24/velxio:master

Then open http://localhost:3080. Tail logs any time with docker logs -f velxio.

The named volumes are what make compile times reasonable on subsequent runs — without them, every container restart wipes the ESP-IDF build cache and the first compile after each restart takes 5-7 minutes instead of 5-30 seconds.


Screenshots

Raspberry Pi Pico ADC simulation with Serial Monitor

Raspberry Pi Pico simulation — ADC read test with two potentiometers, Serial Monitor showing live output, and compilation console at the bottom.

ILI9341 TFT display simulation on Arduino Uno

Arduino Uno driving an ILI9341 240×320 TFT display via SPI — rendering a real-time graphics demo using Adafruit_GFX + Adafruit_ILI9341.

Library Manager with full library list

Library Manager loads the full Arduino library index on open — browse and install libraries without typing first.

Component Picker with 48 components

Component Picker showing 48 available components with visual previews, search, and category filters.

Raspberry Pi 3 connected to Arduino on the same canvas

Multi-board simulation — Raspberry Pi 3 and Arduino running simultaneously on the same canvas, connected via serial. Mix different architectures in a single circuit.

ESP32 with HC-SR04 ultrasonic sensor

ESP32 simulation with an HC-SR04 ultrasonic distance sensor — real Xtensa emulation via QEMU with trigger/echo GPIO timing.


Supported Boards

Raspberry Pi Pico Raspberry Pi Pico Raspberry Pi Pico W Raspberry Pi Pico W ESP32 DevKit C ESP32 DevKit C ESP32-S3 ESP32-S3
ESP32-C3 ESP32-C3 Seeed XIAO ESP32-C3 Seeed XIAO ESP32-C3 ESP32-C3 SuperMini ESP32-C3 SuperMini ESP32-CAM ESP32-CAM
Seeed XIAO ESP32-S3 Seeed XIAO ESP32-S3 Arduino Nano ESP32 Arduino Nano ESP32 Raspberry Pi 3B Raspberry Pi 3B Arduino Uno · Nano · Mega 2560 ATtiny85 · Leonardo · Pro Mini (AVR8 / ATmega)
Board CPU Engine Language
Arduino Uno ATmega328p @ 16 MHz avr8js (browser) C++ (Arduino)
Arduino Nano ATmega328p @ 16 MHz avr8js (browser) C++ (Arduino)
Arduino Mega 2560 ATmega2560 @ 16 MHz avr8js (browser) C++ (Arduino)
ATtiny85 ATtiny85 @ 8 MHz (int) / 16 MHz (ext) avr8js (browser) C++ (Arduino)
Arduino Leonardo ATmega32u4 @ 16 MHz avr8js (browser) C++ (Arduino)
Arduino Pro Mini ATmega328p @ 8/16 MHz avr8js (browser) C++ (Arduino)
Raspberry Pi Pico RP2040 @ 133 MHz rp2040js (browser) C++ (Arduino)
Raspberry Pi Pico W RP2040 @ 133 MHz rp2040js (browser) C++ (Arduino)
ESP32 DevKit V1 Xtensa LX6 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
ESP32 DevKit C V4 Xtensa LX6 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
ESP32-S3 Xtensa LX7 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
ESP32-CAM Xtensa LX6 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
Seeed XIAO ESP32-S3 Xtensa LX7 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
Arduino Nano ESP32 Xtensa LX6 @ 240 MHz QEMU lcgamboa (backend) C++ (Arduino)
ESP32-C3 DevKit RISC-V RV32IMC @ 160 MHz QEMU lcgamboa (backend) C++ (Arduino)
Seeed XIAO ESP32-C3 RISC-V RV32IMC @ 160 MHz QEMU lcgamboa (backend) C++ (Arduino)
ESP32-C3 SuperMini RISC-V RV32IMC @ 160 MHz QEMU lcgamboa (backend) C++ (Arduino)
CH32V003 RISC-V RV32EC @ 48 MHz QEMU lcgamboa (backend) C++ (Arduino)
Raspberry Pi 3B ARM Cortex-A53 @ 1.2 GHz QEMU raspi3b (backend) Python

Features

Code Editing

  • Monaco Editor — Full C++ / Python editor with syntax highlighting, autocomplete, minimap, and dark theme
  • Multi-file workspace — create, rename, delete, and switch between multiple .ino / .h / .cpp / .py files
  • Arduino compilation via arduino-cli backend — compile sketches to .hex / .bin files
  • Compile / Run / Stop / Reset toolbar buttons with status messages
  • Compilation console — resizable output panel showing full compiler output, warnings, and errors

Multi-Board Simulation

AVR8 (Arduino Uno / Nano / Mega / ATtiny85 / Leonardo / Pro Mini)

  • Real ATmega328p / ATmega2560 / ATmega32u4 / ATtiny85 emulation at native clock speed via avr8js
  • Full GPIO — PORTB, PORTC, PORTD (Uno/Nano/Mega); all ATtiny85 ports (PB0–PB5)
  • Timer0/Timer1/Timer2millis(), delay(), PWM via analogWrite()
  • USART — full transmit and receive, auto baud-rate detection
  • ADCanalogRead(), voltage injection from potentiometers on canvas
  • SPI — hardware SPI peripheral (ILI9341, SD card, etc.)
  • I2C (TWI) — hardware I2C with virtual device bus
  • ATtiny85 — all 6 I/O pins, USI (Wire), Timer0/Timer1, 10-bit ADC; uses AttinyCore
  • ~60 FPS simulation loop via requestAnimationFrame

RP2040 (Raspberry Pi Pico / Pico W)

  • Real RP2040 emulation at 133 MHz via rp2040js — ARM Cortex-M0+
  • All 30 GPIO pins — input/output, event listeners, pin state injection
  • UART0 + UART1 — serial output in Serial Monitor; Serial input from UI
  • ADC — 12-bit on GPIO 26–29 (A0–A3) + internal temperature sensor (ch4)
  • I2C0 + I2C1 — master mode with virtual device bus (DS1307, TMP102, EEPROM)
  • SPI0 + SPI1 — loopback default; custom handler supported
  • PWM — available on any GPIO pin
  • WFI optimizationdelay() skips ahead in simulation time instead of busy-waiting
  • Oscilloscope — GPIO transition timestamps at ~8 ns resolution
  • Compiled with the earlephilhower arduino-pico core

See docs/RP2040_EMULATION.md for full technical details.

ESP32 / ESP32-S3 (Xtensa QEMU)

  • Real Xtensa LX6/LX7 dual-core emulation via lcgamboa/qemu
  • Full GPIO — all 40 GPIO pins, direction tracking, state callbacks, GPIO32–39 fix
  • UART0/1/2 — multi-UART serial, baud-rate detection
  • ADC — 12-bit on all ADC-capable pins (0–3300 mV injection from potentiometers)
  • I2C — synchronous bus with virtual device response
  • SPI — full-duplex with configurable MISO byte injection
  • RMT / NeoPixel — hardware RMT decoder, WS2812 24-bit GRB frame decoding
  • LEDC/PWM — 16-channel duty cycle readout, LEDC→GPIO mapping, LED brightness
  • WiFi — SLIRP NAT emulation (WiFi.begin("PICSimLabWifi", ""))
  • Requires arduino-esp32 2.0.17 (IDF 4.4.x) — only version compatible with lcgamboa WiFi

See docs/ESP32_EMULATION.md for setup and full technical details.

ESP32-C3 / XIAO-C3 / SuperMini / CH32V003 (RISC-V via QEMU)

  • RV32IMC emulation through QEMU lcgamboa with libqemu-riscv32 and the esp32c3-picsimlab machine — same backend pattern as Xtensa ESP32, different libqemu binary
  • GPIO 0–21 via W1TS/W1TC MMIO registers (ESP32-C3); PB0–PB5 (CH32V003)
  • UART0 serial output in Serial Monitor
  • CH32V003 — RV32EC core at 48 MHz, 16 KB flash, DIP-8 / SOP package — ultra-compact
  • TypeScript ISA layer (RiscVCore.ts, Esp32C3Simulator.ts) is kept as Vitest-only unit-test infrastructure — it cannot handle the 150+ ROM functions ESP-IDF needs and is not the production emulation path

See docs/RISCV_EMULATION.md for full technical details.

Raspberry Pi 3B (QEMU raspi3b)

  • Full BCM2837 emulation via qemu-system-aarch64 -M raspi3b
  • Boots real Raspberry Pi OS (Trixie) — runs Python scripts directly
  • RPi.GPIO shim — drop-in replacement for the GPIO library; sends pin events to the frontend over a text protocol
  • GPIO 0–27 — output and input, event detection, PWM (binary state)
  • Dual serial — ttyAMA0 for user Serial Monitor, ttyAMA1 for GPIO protocol
  • Virtual File System — edit Python scripts in the UI, upload to Pi at boot
  • Multi-board serial bridge — Pi ↔ Arduino serial communication on the same canvas
  • qcow2 overlay — base SD image never modified; session changes are isolated

See docs/RASPBERRYPI3_EMULATION.md for full technical details.

Serial Monitor

  • Live serial output — characters as the sketch/script sends them
  • Auto baud-rate detection — reads hardware registers, no manual configuration needed
  • Send data to the RX pin from the UI
  • Autoscroll with toggle

Component System (48+ Components)

  • 48 electronic components from wokwi-elements
  • Component picker with search, category filters, and live previews
  • Drag-and-drop repositioning on the simulation canvas
  • Component rotation in 90° increments
  • Property dialog — pin roles, Arduino pin assignment, rotate & delete

Wire System

  • Wire creation — click a pin to start, click another pin to connect
  • Orthogonal routing — no diagonal paths
  • 8 signal-type wire colors: Red (VCC), Black (GND), Blue (Analog), Green (Digital), Purple (PWM), Gold (I2C), Orange (SPI), Cyan (USART)
  • Segment-based wire editing — drag segments perpendicular to their orientation

Library Manager

  • Browse and install the full Arduino library index directly from the UI
  • Live search, installed tab, version display

Portable Project Persistence

  • .vlx file format — single-file JSON snapshot of the whole workspace (boards, file groups, components, wires). Download with the Save button, restore with the Open .vlx button. The format is versioned so files round-trip cleanly across versions.
  • Zero server-side state — OSS Velxio has no database, no accounts, no login. Your projects live wherever you keep your .vlx files (local disk, Dropbox, GitHub, Google Drive — your choice).
  • Need accounts, public profiles at /:username, server-side project URLs and admin panels?

Extension points exported contracts — how you extend this code

I2CDevice (Interface)
(no doc) [12 implementers]
frontend/src/simulation/I2CBusManager.ts
SdpcmFrame (Interface)
(no doc)
test/test_Raspberry_Pi_Pico_W/test_code/src/sdpcm.ts
DiagramJson (Interface)
(no doc)
vscode-extension/src/types.ts
ParsedComponent (Interface)
(no doc)
scripts/generate-component-metadata.ts
SolverPort (Interface)
(no doc) [6 implementers]
frontend/src/simulation/spice/ports/SolverPort.ts
CdcFrame (Interface)
(no doc)
test/test_Raspberry_Pi_Pico_W/test_code/src/sdpcm.ts
DiagramPart (Interface)
(no doc)
vscode-extension/src/types.ts
PinManagerLike (Interface)
* Synchronous settle kernel for chip-to-chip bus nets — Phase 2 of the * multi-chip digital bus track (project/multichi [3 …
frontend/src/simulation/customChips/busKernel.ts

Core symbols most depended-on inside this repo

w
called by 999
frontend/src/data/examples-digital.ts
get
called by 778
backend/app/services/boot_images/provider.py
get
called by 536
frontend/src/simulation/parts/PartSimulationRegistry.ts
append
called by 391
frontend/src/store/serialBatcher.ts
getState
called by 369
frontend/src/simulation/spice/CircuitSimulationService.ts
setNet
called by 297
test/test_intel/src/BoardHarness.js
w
called by 295
frontend/src/data/examples-circuits.ts
value
called by 278
frontend/src/velxio-elements/inductor-element.ts

Shape

Function 3,764
Method 3,045
Class 681
Interface 355
Route 37
Enum 1

Languages

TypeScript48%
Python40%
C12%
C++1%

Modules by API surface

frontend/src/simulation/I2CBusManager.ts96 symbols
frontend/src/store/useSimulatorStore.ts78 symbols
test/test_intel/test_8086/8086.c73 symbols
frontend/src/components/customChips/examples/intel/8086.c73 symbols
test/backend/unit/test_i2c_slaves.py68 symbols
frontend/src/simulation/RP2040Simulator.ts60 symbols
backend/app/services/wasm_chip_runtime.py58 symbols
test/backend/unit/test_espidf_compiler.py56 symbols
frontend/src/components/customChips/examples/intel/z80-cpu.c56 symbols
test/multi_board/test_multi_board_integration.py55 symbols
test/esp32/test_mpu6050_emulation.py55 symbols
frontend/src/simulation/customChips/ChipRuntime.ts55 symbols

For agents

$ claude mcp add velxio \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page