Velxio: an open-source Arduino & RP2040 emulator running entirely in the browser

Hi everyone,

I've been working on a project called Velxio: an open-source Arduino and RP2040 emulator that runs entirely in the browser.

The goal is to provide a fully open environment where you can write Arduino sketches, compile them, and simulate circuits without installing anything locally.

Velxio combines several open-source building blocks to create a complete development and simulation environment.

Core architecture:

• MCU emulation using open-source engines like avr8js (for AVR/Arduino boards) and rp2040js (for Raspberry Pi Pico).
• Compilation using arduino-cli.
• Monaco Editor (the same editor used in VS Code).
• A circuit editor with interactive components mapped to GPIO, SPI, I2C, UART and ADC.

Unlike most online simulators, Velxio is fully open source and designed to be self-hostable.

The project is still evolving, but it already supports:

• Arduino Uno, Nano and Mega (AVR8)
• Raspberry Pi Pico (RP2040)
• 40+ interactive components (LEDs, buttons, LCD, sensors, etc.)
• Serial monitor with real-time RX/TX
• Library manager and example gallery

One of the areas I'm currently working on is improving simulation realism, for example:

• floating inputs
• missing resistors
• current limits and component damage
• more realistic electrical behavior

Velxio is not a fork of Wokwi. Some open-source libraries used in the ecosystem (like avr8js or component UI libraries) are shared across projects, but the platform itself is developed independently and is fully open source.

My goal is to explore how far a browser-based microcontroller emulator can go and to build something useful for education, experimentation and prototyping.

I'd love feedback from embedded developers and makers.

GitHub:

Website:
https://www.producthunt.com/products/velxio

Thanks everyone for the interest!

A quick update on what I'm currently working on:

• Improving the wiring system so signals actually propagate through wires.
• Adding more realistic electrical behavior (floating inputs, current limits).
• Expanding the component library.

If anyone has ideas for components or peripherals that would be useful, I'd love to hear them.

You can check some of my libraries on GitHub.

Very interesting!
I'm going to review them to integrate them into the system

Update, May 2026: Velxio 2.0 + 2.5 shipped

Hi everyone, a lot has happened since the initial post so I wanted to share a full update here.


What's new in 2.0, 19 boards across 5 CPU architectures

The original release supported Arduino Uno, Nano, Mega and Raspberry Pi Pico. Version 2.0 added:

Board Architecture Emulation
Raspberry Pi Pico W RP2040 Cortex-M0+ Browser (rp2040js)
ATtiny85 AVR Browser (avr8js)
ESP32 DevKit V1, DevKit C V4, ESP32-CAM, Wemos Lolin32 Lite Xtensa LX6 QEMU backend
ESP32-S3 DevKit, XIAO ESP32-S3, Arduino Nano ESP32 Xtensa LX7 QEMU backend
ESP32-C3, XIAO ESP32-C3, ESP32-C3 SuperMini RISC-V RV32IMC QEMU backend
Raspberry Pi 3B ARM64 Cortex-A53 QEMU backend, runs real Linux

MicroPython is supported on all ESP32 and Pico boards. WiFi and BLE status are simulated. You can put multiple boards on the same canvas, two Arduinos talking over SPI, an ESP32 paired with a Pico, Arduino sending serial to a Pi 3 running Python, etc.


What's new in 2.5, ngspice SPICE co-simulation

This is the bigger one. Most Arduino simulators (online or offline) only simulate the microcontroller, LEDs light up because the code says they should, not because the circuit actually passes enough current. Velxio 2.5 adds real analog circuit simulation via ngspice compiled to WebAssembly, running on the same canvas as your firmware.

What that means concretely:

  • analogRead() returns the actual SPICE-solved node voltage from your op-amp or sensor circuit, not a hardcoded value
  • LED brightness scales with computed current through the real resistor
  • A BJT transistor switch actually saturates and cuts off based on base current
  • Drop a capacitor across your power rail and watch the voltage ripple on the scope

The solve runs at ~60Hz using Modified Nodal Analysis (full non-linear, not a linear approximation). GPIO pins drive SPICE nets as voltage sources. ADC inputs read back the solved voltages. The ngspice WASM module loads lazily on first use so it doesn't affect startup time if you're only doing digital work.

New analog components added (100+):

  • Passives: resistors (13 presets + custom), capacitors (ceramic + electrolytic), inductors, potentiometer, LDR, NTC thermistor
  • Semiconductors: 5 BJTs (2N2222, 2N3055, 2N3906, BC547, BC557), 4 MOSFETs (2N7000, IRF540, IRF9540, FQP27P06), 5 op-amps (LM358, LM741, TL072, LM324), diodes (1N4148, 1N4007, 1N5817, Zener), optocouplers (4N25, PC817)
  • Logic & ICs: AND, OR, NAND, NOR, XOR, NOT gates, 74HC-series DIP-14 packages, D/T/JK flip-flops, L293D H-bridge, relay (SPDT with flyback diode)
  • Instruments: ammeter, voltmeter, oscilloscope (multi-channel, captures digital and analog together), signal generator (sine, square, DC)

40 new pre-built examples: voltage dividers, RC filters, op-amp amplifiers, rectifiers, transistor switches, Darlington pairs, H-bridges, photodiode+transimpedance pipelines, NTC thermistor bridges, Arduino-controlled MOSFET motor drivers.




Architecture summary

  • AVR, RP2040, RISC-V, browser emulation (avr8js, rp2040js, custom TS core)
  • ESP32 Xtensa, Raspberry Pi 3, backend QEMU
  • Analog, ngspice-WASM (lazy-loaded, browser, no server)
  • Compilation, real arduino-cli
  • Frontend, React + Vite. Backend, FastAPI
  • Self-hostable via a single Docker container, no account needed

Still fully open source under AGPLv3.

Live demo: https://velxio.dev

Happy to answer questions about the emulation architecture or the SPICE integration