Yes. Velxio is free and open-source under the GNU AGPLv3 license. A commercial license is available for proprietary integrations.
Does Velxio work offline?
-
The simulation engine — including the SPICE analog solver and all browser-side CPU emulators (AVR8, RP2040, RISC-V) — runs entirely in the browser. Compilation requires the local arduino-cli backend. Self-hosted deployments work fully offline once running.
+
The SPICE analog solver and the browser-side CPU emulators (AVR8 via avr8js, RP2040 via rp2040js) run entirely in the browser. Xtensa and RISC-V boards (ESP32 / ESP32-S3 / ESP32-C3 / CH32V003) and Raspberry Pi 3 Linux run through QEMU lcgamboa, which is bundled in the self-hosted Docker image. Compilation requires the local arduino-cli backend. Self-hosted deployments work fully offline once running.
Can Velxio simulate analog circuits like SPICE?
Yes. Velxio 2.5 includes real-time SPICE analog simulation via ngspice compiled to WebAssembly. It runs full Modified Nodal Analysis on every tick — non-linear devices (diodes, BJTs, MOSFETs, op-amps with saturation) behave like real silicon, not idealised models.
Can I co-simulate Arduino code with an analog circuit?
@@ -399,7 +399,7 @@
Hardware timers (Timer0/1/2) with PWM, CTC, and overflow interrupts
10-bit ADC, full USART0 (TX/RX), SPI, I2C
RP2040 dual-core ARM Cortex-M0+ via rp2040js
-
RISC-V RV32IMC (ESP32-C3) emulation in browser
+
RISC-V RV32IMC (ESP32-C3) emulation via QEMU lcgamboa
diff --git a/frontend/src/data/examples.ts b/frontend/src/data/examples.ts
index 791c4cbb..d1f0a9d2 100644
--- a/frontend/src/data/examples.ts
+++ b/frontend/src/data/examples.ts
@@ -3626,18 +3626,18 @@ void loop() {
],
},
- // ─── ESP32-C3 (RISC-V browser emulator) Examples ──────────────────────────
+ // ─── ESP32-C3 (RISC-V via QEMU lcgamboa) Examples ─────────────────────────
{
id: 'c3-blink',
title: 'ESP32-C3: Blink LED',
description:
- 'Blink an LED on GPIO 8 of the ESP32-C3. Runs entirely in the browser via the RISC-V emulator — no backend needed.',
+ 'Blink an LED on GPIO 8 of the ESP32-C3. Runs through the QEMU lcgamboa backend (libqemu-riscv32) at 160 MHz.',
category: 'basics',
difficulty: 'beginner',
boardType: 'esp32-c3',
boardFilter: 'esp32-c3',
code: `// ESP32-C3 — Blink LED on GPIO 8
-// Runs in-browser via RV32IMC emulator (Esp32C3Simulator)
+// Runs via QEMU libqemu-riscv32 (esp32c3-picsimlab machine)
#define LED_PIN 8
@@ -3696,7 +3696,7 @@ void setup() {
Serial.begin(115200);
delay(200);
Serial.println("=== ESP32-C3 Serial Demo ===");
- Serial.println("RV32IMC @ 160 MHz — browser emulator");
+ Serial.println("RV32IMC @ 160 MHz — QEMU libqemu-riscv32");
Serial.println();
}
diff --git a/frontend/src/pages/AboutPage.tsx b/frontend/src/pages/AboutPage.tsx
index df5e0513..cedab358 100644
--- a/frontend/src/pages/AboutPage.tsx
+++ b/frontend/src/pages/AboutPage.tsx
@@ -155,10 +155,10 @@ export const AboutPage: React.FC = () => {
-
RISC-V In-Browser
+
RISC-V via QEMU
- ESP32-C3 and CH32V003 run on a custom RV32IMC core written in TypeScript — entirely
- client-side, no QEMU.
+ ESP32-C3 (DevKit, XIAO, SuperMini) and CH32V003 are emulated through the QEMU
+ lcgamboa fork with libqemu-riscv32, the same backend pattern as Xtensa ESP32.
- Browser-native RV32IMC emulation for ESP32-C3 — no backend server required, compiled
- to WebAssembly, runs at 160 MHz.
+ RV32IMC emulation for ESP32-C3 at 160 MHz via the QEMU lcgamboa fork
+ (libqemu-riscv32, esp32c3-picsimlab machine).
- ESP32-C3, XIAO ESP32-C3, and C3 SuperMini boards use a RISC-V RV32IMC core
- running at 160 MHz. Velxio emulates them entirely in the browser, no backend, no QEMU, no
- WebAssembly pipeline. The emulator is written in pure TypeScript and runs at real-time speeds.
+ ESP32-C3, XIAO ESP32-C3, and C3 SuperMini boards run on the RISC-V RV32IMC
+ architecture at 160 MHz. Velxio emulates them through the same QEMU-based backend as the
+ Xtensa ESP32 family, using libqemu-riscv32 with the esp32c3-picsimlab
+ machine target. A separate TypeScript ISA implementation lives in the repo for unit-testing
+ RV32IMC instruction decoding, but it is not the production emulation path.
- Note: This section applies only to ESP32 and{' '}
- ESP32-S3 (Xtensa). For ESP32-C3, XIAO ESP32-C3, and C3 SuperMini (RISC-V),
- see RISC-V Emulation (ESP32-C3) in the sidebar, those boards run entirely in
- the browser.
+ Note: This section applies to ESP32,{' '}
+ ESP32-S3 (Xtensa) and ESP32-C3 (RISC-V) — they all share
+ the same QEMU lcgamboa pipeline, just with different libqemu binaries and machine targets.
+ See RISC-V Emulation (ESP32-C3) for the C3-specific differences.
How It Works
diff --git a/frontend/src/pages/ElectronicsSimulatorPage.tsx b/frontend/src/pages/ElectronicsSimulatorPage.tsx
index 861a6260..98658b85 100644
--- a/frontend/src/pages/ElectronicsSimulatorPage.tsx
+++ b/frontend/src/pages/ElectronicsSimulatorPage.tsx
@@ -25,7 +25,7 @@ const FAQ_ITEMS = [
},
{
q: 'Do I need to install anything?',
- a: 'No. Open velxio.dev in any modern browser and start. Compilation of Arduino sketches uses the cloud arduino-cli backend, but the SPICE solver and AVR / RP2040 / RISC-V emulators all run locally in your browser.',
+ a: 'No. Open velxio.dev in any modern browser and start. The SPICE solver and the AVR / RP2040 emulators run locally in your browser; Xtensa and RISC-V boards (ESP32, ESP32-C3, CH32V003) plus Raspberry Pi 3 Linux run through QEMU lcgamboa, bundled in the Docker image. Compilation of Arduino sketches uses the cloud arduino-cli backend.',
},
{
q: 'Is it good for teaching electronics?',
diff --git a/frontend/src/pages/Esp32C3SimulatorPage.tsx b/frontend/src/pages/Esp32C3SimulatorPage.tsx
index 85d58bb5..2838921f 100644
--- a/frontend/src/pages/Esp32C3SimulatorPage.tsx
+++ b/frontend/src/pages/Esp32C3SimulatorPage.tsx
@@ -45,7 +45,7 @@ const JSON_LD: object[] = [
applicationCategory: 'DeveloperApplication',
operatingSystem: 'Any (browser-based)',
description:
- 'Free online ESP32-C3 RISC-V simulator. Browser-native RV32IMC emulation at 160 MHz — no backend, no install. Simulate ESP32-C3 DevKit, XIAO ESP32-C3, SuperMini, and CH32V003.',
+ 'Free online ESP32-C3 RISC-V simulator. RV32IMC emulation at 160 MHz via the QEMU lcgamboa backend (libqemu-riscv32). Simulate ESP32-C3 DevKit, XIAO ESP32-C3, SuperMini, and CH32V003.',
url: 'https://velxio.dev/esp32-c3-simulator',
offers: { '@type': 'Offer', price: '0', priceCurrency: 'USD' },
author: { '@type': 'Person', name: 'David Montero Crespo' },
@@ -90,11 +90,12 @@ export const Esp32C3SimulatorPage: React.FC = () => {
Free ESP32-C3 Simulator
- RISC-V Emulation — Runs in Your Browser
+ RISC-V Emulation via QEMU
- Simulate ESP32-C3 and CH32V003 RISC-V code directly in your browser — no QEMU backend,
- no install. RV32IMC at 160 MHz with 48+ interactive components.
+ Simulate ESP32-C3 and CH32V003 RISC-V code via the QEMU lcgamboa backend
+ (libqemu-riscv32, esp32c3-picsimlab machine). RV32IMC at 160 MHz with 48+ interactive
+ components.
- Velxio emulates RISC-V microcontrollers natively in the browser using WebAssembly — the
- fastest simulation path available, no server round-trip.
+ Velxio emulates RISC-V microcontrollers through the QEMU lcgamboa fork — the same
+ backend pattern used for Xtensa ESP32 / ESP32-S3, with libqemu-riscv32 instead of
+ libqemu-xtensa.
- Single-core RISC-V RV32IMC at 160 MHz. Browser-native emulation — no QEMU needed.{' '}
+ Single-core RISC-V RV32IMC at 160 MHz, emulated via the same QEMU backend as Xtensa
+ ESP32 (libqemu-riscv32, esp32c3-picsimlab machine).{' '}
Learn more →
diff --git a/frontend/src/pages/LandingPage.tsx b/frontend/src/pages/LandingPage.tsx
index bbd7a9ee..def018f5 100644
--- a/frontend/src/pages/LandingPage.tsx
+++ b/frontend/src/pages/LandingPage.tsx
@@ -583,7 +583,7 @@ const features = [
{
icon: ,
title: '5 Emulation Engines',
- desc: 'AVR8 (ATmega328P, ATmega2560, ATtiny85), RP2040 (ARM Cortex-M0+), RV32IMC (ESP32-C3 in-browser), Xtensa LX6/LX7 (ESP32 via QEMU), and ARM Cortex-A53 (Raspberry Pi 3 Linux).',
+ desc: 'AVR8 (ATmega328P, ATmega2560, ATtiny85), RP2040 (ARM Cortex-M0+), RV32IMC (ESP32-C3, CH32V003 via QEMU), Xtensa LX6/LX7 (ESP32 via QEMU), and ARM Cortex-A53 (Raspberry Pi 3 Linux).',
},
{
icon: ,
@@ -779,7 +779,7 @@ export const LandingPage: React.FC = () => {
name: 'Does Velxio work offline?',
acceptedAnswer: {
'@type': 'Answer',
- text: 'The SPICE solver and the AVR / RP2040 / RISC-V CPU emulators all run in your browser. Compilation of Arduino sketches requires the arduino-cli backend. Self-hosted Docker deployments work fully offline once running.',
+ text: 'The SPICE solver and the AVR / RP2040 CPU emulators run in your browser. Xtensa and RISC-V boards (ESP32, ESP32-S3, ESP32-C3, CH32V003) and Raspberry Pi 3 Linux run through QEMU lcgamboa, bundled in the Docker image. Compilation of Arduino sketches requires the arduino-cli backend. Self-hosted Docker deployments work fully offline once running.',
},
},
{
@@ -1016,14 +1016,14 @@ export const LandingPage: React.FC = () => {
- QEMU-based Xtensa and ARM emulation. Browser-native RISC-V. Cycle-accurate AVR8 via
- avr8js. Real firmware execution, not approximations.
+ QEMU-based Xtensa, RISC-V and ARM emulation. Cycle-accurate AVR8 via avr8js. Real
+ firmware execution, not approximations.
diff --git a/frontend/src/seoRoutes.ts b/frontend/src/seoRoutes.ts
index d85ca25d..16ef1b3f 100644
--- a/frontend/src/seoRoutes.ts
+++ b/frontend/src/seoRoutes.ts
@@ -43,7 +43,7 @@ export const SEO_ROUTES: SeoRoute[] = [
title:
'Velxio — Free Online Circuit & Arduino Simulator | SPICE · ESP32 · RP2040 · ATtiny85 · Custom Chips',
description:
- 'Velxio is a free, open-source online circuit simulator. Real-time SPICE analog simulation (ngspice-WASM) wired to 19 boards: Arduino Uno/Mega/ATtiny85 (AVR8), ESP32 (Xtensa QEMU), ESP32-C3/CH32V003 (RISC-V), Raspberry Pi Pico (RP2040), Raspberry Pi 3 (Linux). Build custom chips in C/Rust. 100+ components, oscilloscope, voltmeter, ammeter — no cloud.',
+ 'Velxio is a free, open-source online circuit simulator. Real-time SPICE analog simulation (ngspice-WASM) wired to 19 boards: Arduino Uno/Mega/ATtiny85 (AVR8), ESP32 (Xtensa QEMU), ESP32-C3/CH32V003 (RISC-V via QEMU libqemu-riscv32), Raspberry Pi Pico (RP2040), Raspberry Pi 3 (Linux). Build custom chips in C/Rust. 100+ components, oscilloscope, voltmeter, ammeter — no cloud.',
url: `${DOMAIN}/`,
},
},
@@ -343,9 +343,9 @@ export const SEO_ROUTES: SeoRoute[] = [
priority: 0.85,
changefreq: 'monthly',
seoMeta: {
- title: 'Free ESP32-C3 & RISC-V Simulator — Browser-Native Emulation | Velxio',
+ title: 'Free ESP32-C3 & RISC-V Simulator — QEMU Emulation | Velxio',
description:
- 'Simulate ESP32-C3 RISC-V code directly in your browser — no backend needed. RV32IMC at 160 MHz, 48+ components, Serial Monitor. Also supports CH32V003. Free and open-source.',
+ 'Simulate ESP32-C3 RISC-V code via the QEMU lcgamboa backend (libqemu-riscv32) at 160 MHz. 48+ components, Serial Monitor. Also supports CH32V003. Free and open-source.',
url: `${DOMAIN}/esp32-c3-simulator`,
},
},