[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74917":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":25,"hasPages":23,"topics":26,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":33,"trendingCount":16,"starSnapshotCount":16,"syncStatus":34,"lastSyncTime":35,"discoverSource":36},74917,"velxio","davidmonterocrespo24\u002Fvelxio","davidmonterocrespo24","Emulate Arduino, ESP32 & Raspberry Pi. in your browser. Write code, compile, and run on 19 real boards — Arduino Uno, ESP32, ESP32-C3, Raspberry Pi Pico, Raspberry Pi 3, and more. No hardware, no cloud, no limits.. Discord: https:\u002F\u002Fdiscord.gg\u002F3mARjJrh4E","https:\u002F\u002Fvelxio.dev",null,"TypeScript",2154,200,16,18,0,31,77,218,93,108.91,"Other",false,"master",true,[27,28,29,30],"arduino","esp32","simulation","wokwi","2026-06-12 04:01:16","# Velxio: Arduino & Embedded Board Emulator\n\n**Live at [velxio.dev](https:\u002F\u002Fvelxio.dev)**\n\nA 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.\n\n**19 boards &middot; 5 CPU architectures**: AVR8 (ATmega \u002F ATtiny), ARM Cortex-M0+ (RP2040), RISC-V RV32IMC\u002FEC (ESP32-C3 \u002F CH32V003), Xtensa LX6\u002FLX7 (ESP32 \u002F ESP32-S3 via QEMU), and ARM Cortex-A53 (Raspberry Pi 3 Linux via QEMU).\n\n![Visitors](https:\u002F\u002Fvisitor-badge.laobi.icu\u002Fbadge?page_id=davidmonterocrespo24\u002Fvelxio)\n[![Live Demo](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLive%20Demo-velxio.dev-007acc?style=for-the-badge)](https:\u002F\u002Fvelxio.dev)\n[![Docker Image](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-ghcr.io%2Fdavidmonterocrespo24%2Fvelxio-2496ED?style=for-the-badge&logo=docker&logoColor=white)](https:\u002F\u002Fgithub.com\u002Fdavidmonterocrespo24\u002Fvelxio\u002Fpkgs\u002Fcontainer\u002Fvelxio)\n[![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fdavidmonterocrespo24\u002Fvelxio?style=for-the-badge)](https:\u002F\u002Fgithub.com\u002Fdavidmonterocrespo24\u002Fvelxio\u002Fstargazers)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDiscord-Join%20Community-5865F2?style=for-the-badge&logo=discord&logoColor=white)](https:\u002F\u002Fdiscord.gg\u002F3mARjJrh4E)\n[![License: AGPLv3](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-AGPL%20v3-blue?style=for-the-badge)](LICENSE)\n[![Commercial License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCommercial%20License-Available-green?style=for-the-badge)](COMMERCIAL_LICENSE.md)\n\n---\n\n[![Product Hunt](https:\u002F\u002Fapi.producthunt.com\u002Fwidgets\u002Fembed-image\u002Fv1\u002Ffeatured.svg?post_id=1092514&theme=dark&t=1772998619179)](https:\u002F\u002Fwww.producthunt.com\u002Fproducts\u002Fvelxio)\n\n---\n\n## Support the Project\n\nVelxio 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.\n\n| Platform | Link |\n| --- | --- |\n| **GitHub Sponsors** (preferred) | [github.com\u002Fsponsors\u002Fdavidmonterocrespo24](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fdavidmonterocrespo24) |\n| **PayPal** | [paypal.me\u002Fodoonext](https:\u002F\u002Fpaypal.me\u002Fodoonext) |\n\nYour support helps cover server costs, library maintenance, and frees up time to add new boards, components, and features. Thank you!\n\n---\n\n## Try it now\n\n**[https:\u002F\u002Fvelxio.dev](https:\u002F\u002Fvelxio.dev)** — no installation needed. Open the editor, write your sketch, and simulate directly in the browser.\n\nTo self-host with Docker (single command):\n\n```bash\ndocker run -d -p 3080:80 \\\n  -v velxio-data:\u002Fapp\u002Fdata \\\n  -v velxio-arduino-libs:\u002Froot\u002F.arduino15 \\\n  -v velxio-arduino-user-libs:\u002Froot\u002FArduino \\\n  -v velxio-ccache:\u002Fvar\u002Fcache\u002Fccache \\\n  -v velxio-build:\u002Fvar\u002Flib\u002Fvelxio-build \\\n  ghcr.io\u002Fdavidmonterocrespo24\u002Fvelxio:master\n```\n\nThen open \u003Chttp:\u002F\u002Flocalhost:3080>.\n\nThe named volumes are what make compile times reasonable on subsequent\nruns — without them, every container restart wipes the ESP-IDF build\ncache and the first compile after each restart takes 5-7 minutes\ninstead of 5-30 seconds.\n\n---\n\n## Screenshots\n\n![Raspberry Pi Pico ADC simulation with Serial Monitor](docs\u002Fimg1.png)\n\nRaspberry Pi Pico simulation — ADC read test with two potentiometers, Serial Monitor showing live output, and compilation console at the bottom.\n\n![ILI9341 TFT display simulation on Arduino Uno](docs\u002Fimg2.png)\n\nArduino Uno driving an ILI9341 240×320 TFT display via SPI — rendering a real-time graphics demo using Adafruit_GFX + Adafruit_ILI9341.\n\n![Library Manager with full library list](docs\u002Fimg3.png)\n\nLibrary Manager loads the full Arduino library index on open — browse and install libraries without typing first.\n\n![Component Picker with 48 components](docs\u002Fimg4.png)\n\nComponent Picker showing 48 available components with visual previews, search, and category filters.\n\n![Raspberry Pi 3 connected to Arduino on the same canvas](docs\u002Fimg5.png)\n\nMulti-board simulation — Raspberry Pi 3 and Arduino running simultaneously on the same canvas, connected via serial. Mix different architectures in a single circuit.\n\n![ESP32 with HC-SR04 ultrasonic sensor](docs\u002Fimg6.png)\n\nESP32 simulation with an HC-SR04 ultrasonic distance sensor — real Xtensa emulation via QEMU with trigger\u002Fecho GPIO timing.\n\n---\n\n## Supported Boards\n\n\u003Ctable>\n\u003Ctr>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fpi-pico.png\" width=\"140\" alt=\"Raspberry Pi Pico\"\u002F>\u003Cbr\u002F>\u003Cb>Raspberry Pi Pico\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fpi-pico-w.png\" width=\"140\" alt=\"Raspberry Pi Pico W\"\u002F>\u003Cbr\u002F>\u003Cb>Raspberry Pi Pico W\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fesp32-devkit-c-v4.png\" width=\"140\" alt=\"ESP32 DevKit C\"\u002F>\u003Cbr\u002F>\u003Cb>ESP32 DevKit C\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fesp32-s3.png\" width=\"140\" alt=\"ESP32-S3\"\u002F>\u003Cbr\u002F>\u003Cb>ESP32-S3\u003C\u002Fb>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fesp32-c3.png\" width=\"140\" alt=\"ESP32-C3\"\u002F>\u003Cbr\u002F>\u003Cb>ESP32-C3\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fxiao-esp32-c3.png\" width=\"140\" alt=\"Seeed XIAO ESP32-C3\"\u002F>\u003Cbr\u002F>\u003Cb>Seeed XIAO ESP32-C3\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fesp32c3-supermini.png\" width=\"140\" alt=\"ESP32-C3 SuperMini\"\u002F>\u003Cbr\u002F>\u003Cb>ESP32-C3 SuperMini\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fesp32-cam.png\" width=\"140\" alt=\"ESP32-CAM\"\u002F>\u003Cbr\u002F>\u003Cb>ESP32-CAM\u003C\u002Fb>\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Fxiao-esp32-s3.png\" width=\"140\" alt=\"Seeed XIAO ESP32-S3\"\u002F>\u003Cbr\u002F>\u003Cb>Seeed XIAO ESP32-S3\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002Farduino-nano-esp32.png\" width=\"140\" alt=\"Arduino Nano ESP32\"\u002F>\u003Cbr\u002F>\u003Cb>Arduino Nano ESP32\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">\u003Cimg src=\"docs\u002Fimg\u002Fboards\u002FRaspberry_Pi_3.png\" width=\"140\" alt=\"Raspberry Pi 3B\"\u002F>\u003Cbr\u002F>\u003Cb>Raspberry Pi 3B\u003C\u002Fb>\u003C\u002Ftd>\n  \u003Ctd align=\"center\">Arduino Uno &middot; Nano &middot; Mega 2560\u003Cbr\u002F>ATtiny85 &middot; Leonardo &middot; Pro Mini\u003Cbr\u002F>(AVR8 \u002F ATmega)\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n| Board | CPU | Engine | Language |\n| ----- | --- | ------ | -------- |\n| **Arduino Uno** | ATmega328p @ 16 MHz | avr8js (browser) | C++ (Arduino) |\n| **Arduino Nano** | ATmega328p @ 16 MHz | avr8js (browser) | C++ (Arduino) |\n| **Arduino Mega 2560** | ATmega2560 @ 16 MHz | avr8js (browser) | C++ (Arduino) |\n| **ATtiny85** | ATtiny85 @ 8 MHz (int) \u002F 16 MHz (ext) | avr8js (browser) | C++ (Arduino) |\n| **Arduino Leonardo** | ATmega32u4 @ 16 MHz | avr8js (browser) | C++ (Arduino) |\n| **Arduino Pro Mini** | ATmega328p @ 8\u002F16 MHz | avr8js (browser) | C++ (Arduino) |\n| **Raspberry Pi Pico** | RP2040 @ 133 MHz | rp2040js (browser) | C++ (Arduino) |\n| **Raspberry Pi Pico W** | RP2040 @ 133 MHz | rp2040js (browser) | C++ (Arduino) |\n| **ESP32 DevKit V1** | Xtensa LX6 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **ESP32 DevKit C V4** | Xtensa LX6 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **ESP32-S3** | Xtensa LX7 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **ESP32-CAM** | Xtensa LX6 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **Seeed XIAO ESP32-S3** | Xtensa LX7 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **Arduino Nano ESP32** | Xtensa LX6 @ 240 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **ESP32-C3 DevKit** | RISC-V RV32IMC @ 160 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **Seeed XIAO ESP32-C3** | RISC-V RV32IMC @ 160 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **ESP32-C3 SuperMini** | RISC-V RV32IMC @ 160 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **CH32V003** | RISC-V RV32EC @ 48 MHz | QEMU lcgamboa (backend) | C++ (Arduino) |\n| **Raspberry Pi 3B** | ARM Cortex-A53 @ 1.2 GHz | QEMU raspi3b (backend) | Python |\n\n---\n\n## Features\n\n### Code Editing\n\n- **Monaco Editor** — Full C++ \u002F Python editor with syntax highlighting, autocomplete, minimap, and dark theme\n- **Multi-file workspace** — create, rename, delete, and switch between multiple `.ino` \u002F `.h` \u002F `.cpp` \u002F `.py` files\n- **Arduino compilation** via `arduino-cli` backend — compile sketches to `.hex` \u002F `.bin` files\n- **Compile \u002F Run \u002F Stop \u002F Reset** toolbar buttons with status messages\n- **Compilation console** — resizable output panel showing full compiler output, warnings, and errors\n\n### Multi-Board Simulation\n\n#### AVR8 (Arduino Uno \u002F Nano \u002F Mega \u002F ATtiny85 \u002F Leonardo \u002F Pro Mini)\n\n- **Real ATmega328p \u002F ATmega2560 \u002F ATmega32u4 \u002F ATtiny85 emulation** at native clock speed via avr8js\n- **Full GPIO** — PORTB, PORTC, PORTD (Uno\u002FNano\u002FMega); all ATtiny85 ports (PB0–PB5)\n- **Timer0\u002FTimer1\u002FTimer2** — `millis()`, `delay()`, PWM via `analogWrite()`\n- **USART** — full transmit and receive, auto baud-rate detection\n- **ADC** — `analogRead()`, voltage injection from potentiometers on canvas\n- **SPI** — hardware SPI peripheral (ILI9341, SD card, etc.)\n- **I2C (TWI)** — hardware I2C with virtual device bus\n- **ATtiny85** — all 6 I\u002FO pins, USI (Wire), Timer0\u002FTimer1, 10-bit ADC; uses `AttinyCore`\n- ~60 FPS simulation loop via `requestAnimationFrame`\n\n#### RP2040 (Raspberry Pi Pico \u002F Pico W)\n\n- **Real RP2040 emulation** at 133 MHz via rp2040js — ARM Cortex-M0+\n- **All 30 GPIO pins** — input\u002Foutput, event listeners, pin state injection\n- **UART0 + UART1** — serial output in Serial Monitor; Serial input from UI\n- **ADC** — 12-bit on GPIO 26–29 (A0–A3) + internal temperature sensor (ch4)\n- **I2C0 + I2C1** — master mode with virtual device bus (DS1307, TMP102, EEPROM)\n- **SPI0 + SPI1** — loopback default; custom handler supported\n- **PWM** — available on any GPIO pin\n- **WFI optimization** — `delay()` skips ahead in simulation time instead of busy-waiting\n- **Oscilloscope** — GPIO transition timestamps at ~8 ns resolution\n- Compiled with the [earlephilhower arduino-pico](https:\u002F\u002Fgithub.com\u002Fearlephilhower\u002Farduino-pico) core\n\nSee [docs\u002FRP2040_EMULATION.md](docs\u002FRP2040_EMULATION.md) for full technical details.\n\n#### ESP32 \u002F ESP32-S3 (Xtensa QEMU)\n\n- **Real Xtensa LX6\u002FLX7 dual-core emulation** via [lcgamboa\u002Fqemu](https:\u002F\u002Fgithub.com\u002Flcgamboa\u002Fqemu)\n- **Full GPIO** — all 40 GPIO pins, direction tracking, state callbacks, GPIO32–39 fix\n- **UART0\u002F1\u002F2** — multi-UART serial, baud-rate detection\n- **ADC** — 12-bit on all ADC-capable pins (0–3300 mV injection from potentiometers)\n- **I2C** — synchronous bus with virtual device response\n- **SPI** — full-duplex with configurable MISO byte injection\n- **RMT \u002F NeoPixel** — hardware RMT decoder, WS2812 24-bit GRB frame decoding\n- **LEDC\u002FPWM** — 16-channel duty cycle readout, LEDC→GPIO mapping, LED brightness\n- **WiFi** — SLIRP NAT emulation (`WiFi.begin(\"PICSimLabWifi\", \"\")`)\n- Requires arduino-esp32 **2.0.17** (IDF 4.4.x) — only version compatible with lcgamboa WiFi\n\nSee [docs\u002FESP32_EMULATION.md](docs\u002FESP32_EMULATION.md) for setup and full technical details.\n\n#### ESP32-C3 \u002F XIAO-C3 \u002F SuperMini \u002F CH32V003 (RISC-V via QEMU)\n\n- **RV32IMC emulation** through QEMU lcgamboa with `libqemu-riscv32` and the `esp32c3-picsimlab` machine — same backend pattern as Xtensa ESP32, different libqemu binary\n- **GPIO 0–21** via W1TS\u002FW1TC MMIO registers (ESP32-C3); PB0–PB5 (CH32V003)\n- **UART0** serial output in Serial Monitor\n- **CH32V003** — RV32EC core at 48 MHz, 16 KB flash, DIP-8 \u002F SOP package — ultra-compact\n- **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\n\nSee [docs\u002FRISCV_EMULATION.md](docs\u002FRISCV_EMULATION.md) for full technical details.\n\n#### Raspberry Pi 3B (QEMU raspi3b)\n\n- **Full BCM2837 emulation** via `qemu-system-aarch64 -M raspi3b`\n- **Boots real Raspberry Pi OS** (Trixie) — runs Python scripts directly\n- **RPi.GPIO shim** — drop-in replacement for the GPIO library; sends pin events to the frontend over a text protocol\n- **GPIO 0–27** — output and input, event detection, PWM (binary state)\n- **Dual serial** — ttyAMA0 for user Serial Monitor, ttyAMA1 for GPIO protocol\n- **Virtual File System** — edit Python scripts in the UI, upload to Pi at boot\n- **Multi-board serial bridge** — Pi ↔ Arduino serial communication on the same canvas\n- **qcow2 overlay** — base SD image never modified; session changes are isolated\n\nSee [docs\u002FRASPBERRYPI3_EMULATION.md](docs\u002FRASPBERRYPI3_EMULATION.md) for full technical details.\n\n### Serial Monitor\n\n- **Live serial output** — characters as the sketch\u002Fscript sends them\n- **Auto baud-rate detection** — reads hardware registers, no manual configuration needed\n- **Send data** to the RX pin from the UI\n- **Autoscroll** with toggle\n\n### Component System (48+ Components)\n\n- **48 electronic components** from wokwi-elements\n- **Component picker** with search, category filters, and live previews\n- **Drag-and-drop** repositioning on the simulation canvas\n- **Component rotation** in 90° increments\n- **Property dialog** — pin roles, Arduino pin assignment, rotate & delete\n\n### Wire System\n\n- **Wire creation** — click a pin to start, click another pin to connect\n- **Orthogonal routing** — no diagonal paths\n- **8 signal-type wire colors**: Red (VCC), Black (GND), Blue (Analog), Green (Digital), Purple (PWM), Gold (I2C), Orange (SPI), Cyan (USART)\n- **Segment-based wire editing** — drag segments perpendicular to their orientation\n\n### Library Manager\n\n- Browse and install the full Arduino library index directly from the UI\n- Live search, installed tab, version display\n\n### Portable Project Persistence\n\n- **`.vlx` file format** — single-file JSON snapshot of the whole\n  workspace (boards, file groups, components, wires). Download with the\n  Save button, restore with the Open `.vlx` button. The format is\n  versioned so files round-trip cleanly across versions.\n- **Zero server-side state** — OSS Velxio has no database, no accounts,\n  no login. Your projects live wherever you keep your `.vlx` files\n  (local disk, Dropbox, GitHub, Google Drive — your choice).\n- Need accounts, public profiles at `\u002F:username`, server-side project\n  URLs and admin panels? Those live in the private overlay used to run\n  velxio.dev — see [velxio-prod](https:\u002F\u002Fgithub.com\u002Fvelxio\u002Fvelxio-prod)\n  for the open-core split details.\n\n### Example Projects\n\n- Built-in examples including Blink, Traffic Light, Button Control, Fade LED, Serial Hello World, RGB LED, Simon Says, LCD 20×4, and Pi + Arduino serial control\n- One-click loading into the editor\n\n---\n\n## Self-Hosting\n\nPick the install path that matches your appetite for setup. **All three\nwork out-of-the-box without an `.env` file** — defaults are picked\nautomatically.\n\n| Path | Boards available | Build time | Best for |\n| --- | --- | --- | --- |\n| **A. Docker (prebuilt image)** | All 19 (AVR, RP2040, RISC-V, **ESP32**, Raspberry Pi 3) | ~30 s download | Just want it running |\n| **B. Docker Compose (build from source)** | All 19 | ~10–15 min first build | Want to modify the code |\n| **C. Manual install** | Browser-only boards (AVR, RP2040, RISC-V) | ~5 min | Frontend \u002F backend dev |\n\n> ESP32 (Xtensa) and Raspberry Pi 3 emulation rely on QEMU `.so` libraries\n> that ship inside the Docker image. Manual installs get the browser-side\n> boards out of the box — **for ESP32 you'll want Docker** (or follow\n> [docs\u002FESP32_EMULATION.md](docs\u002FESP32_EMULATION.md) to wire up the QEMU\n> binaries by hand).\n\n---\n\n### Option A: Docker (prebuilt image)\n\n```bash\ndocker run -d \\\n  --name velxio \\\n  -p 3080:80 \\\n  -v velxio-data:\u002Fapp\u002Fdata \\\n  -v velxio-arduino-libs:\u002Froot\u002F.arduino15 \\\n  -v velxio-arduino-user-libs:\u002Froot\u002FArduino \\\n  -v velxio-ccache:\u002Fvar\u002Fcache\u002Fccache \\\n  -v velxio-build:\u002Fvar\u002Flib\u002Fvelxio-build \\\n  ghcr.io\u002Fdavidmonterocrespo24\u002Fvelxio:master\n```\n\nOpen \u003Chttp:\u002F\u002Flocalhost:3080>.\n\nThe five named volumes persist:\n\n- `velxio-data` → `\u002Fapp\u002Fdata`: SQLite DB, project sketch files, auto-generated `SECRET_KEY`\n- `velxio-arduino-libs` → `\u002Froot\u002F.arduino15`: arduino-cli config + installed\n  cores (saves a 5–10 min reinstall on every container restart)\n- `velxio-arduino-user-libs` → `\u002Froot\u002FArduino`: Library Manager-installed\n  Arduino libraries (e.g. Adafruit_BMP280, DHT, GFX). Without this,\n  every container restart re-downloads them on next compile.\n- `velxio-ccache` → `\u002Fvar\u002Fcache\u002Fccache`: ccache C\u002FC++ object cache for\n  ESP-IDF compiles. Empty on first compile, populated as you go;\n  subsequent compiles hit the cache and finish in seconds instead of\n  minutes.\n- `velxio-build` → `\u002Fvar\u002Flib\u002Fvelxio-build`: persistent ESP-IDF build dir\n  (one subdir per target — esp32, esp32c3, esp32s3). Lets ninja's\n  incremental build skip everything that hasn't changed; a re-compile\n  of an unchanged sketch finishes in 2-5 seconds.\n\nIf you skip the volume flags, the Dockerfile declares all five paths as\n`VOLUME`, so docker creates anonymous volumes and the caches still\nsurvive container restarts (just harder to inspect\u002Fback up than named\nones). Only `docker rm -v` or `docker volume prune` would wipe them.\n\n---\n\n### Option B: Docker Compose (build from source)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdavidmonterocrespo24\u002Fvelxio.git\ncd velxio\ndocker compose up -d --build\n```\n\nFirst build takes ~10–15 minutes (downloads ESP-IDF, builds the frontend).\nSubsequent builds are cached and take ~1 min.\n\nThen open \u003Chttp:\u002F\u002Flocalhost:3080>. The container generates a random\n`SECRET_KEY` on first boot and persists it in `.\u002Fdata\u002F`, so **no `.env` is\nrequired** to get going.\n\n#### Optional: customize environment\n\nThe OSS image has almost no configuration — there's no database, no auth,\nno third-party integrations. Create `backend\u002F.env` only if you want to\nchange the CORS origin used during local development.\n\n| Variable | Default | Description |\n| --- | --- | --- |\n| `FRONTEND_URL` | `http:\u002F\u002Flocalhost:5173` | Origin allowed by CORS for local Vite dev |\n\n> **Deploying behind a reverse proxy?** The container listens on plain HTTP\n> on port 80 and accepts any `Host` header — no `server_name` whitelist.\n\n> **Running velxio.dev itself?** Production-only configuration (host nginx\n> + HTTPS, backups, pinned upstream commit) lives in its own repo:\n> [github.com\u002Fvelxio\u002Fvelxio-prod](https:\u002F\u002Fgithub.com\u002Fvelxio\u002Fvelxio-prod).\n\n---\n\n### Option C: Manual Setup (frontend + backend separately)\n\n**Prerequisites:** Node.js 18+, Python 3.12+, arduino-cli\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fdavidmonterocrespo24\u002Fvelxio.git\ncd velxio\n```\n\n> No `--recurse-submodules` needed. `@wokwi\u002Felements`, `avr8js` and\n> `rp2040js` come from the npm registry. Board SVGs live in\n> `frontend\u002Fpublic\u002Fboards\u002F`. The folders under `third-party\u002F` are\n> reference-only — you only need to clone wokwi-elements if you're adding\n> a new component to the catalog (the metadata generator scans its `src\u002F`).\n\n```bash\n# Terminal 1 — backend\ncd backend\npython -m venv venv\nsource venv\u002Fbin\u002Factivate          # Windows: venv\\Scripts\\activate\npip install -r requirements.txt\nuvicorn app.main:app --reload --port 8001\n```\n\n```bash\n# Terminal 2 — frontend\ncd frontend\nnpm install\nnpm run dev\n```\n\nOpen \u003Chttp:\u002F\u002Flocalhost:5173>.\n\n**arduino-cli setup (first time):**\n\n```bash\narduino-cli core update-index\narduino-cli core install arduino:avr\n\n# For Raspberry Pi Pico \u002F Pico W:\narduino-cli config add board_manager.additional_urls \\\n  https:\u002F\u002Fgithub.com\u002Fearlephilhower\u002Farduino-pico\u002Freleases\u002Fdownload\u002Fglobal\u002Fpackage_rp2040_index.json\narduino-cli core install rp2040:rp2040\n\n# For ATtiny85:\narduino-cli config add board_manager.additional_urls \\\n  http:\u002F\u002Fdrazzy.com\u002Fpackage_drazzy.com_index.json\narduino-cli core install ATTinyCore:avr\n```\n\n> ESP32 (Xtensa) compilation in manual install requires the ESP-IDF 4.4.7\n> toolchain installed locally. The Docker image bundles this — for manual\n> installs see [docs\u002FESP32_EMULATION.md](docs\u002FESP32_EMULATION.md). If you\n> only need AVR \u002F RP2040 \u002F RISC-V boards you can skip ESP-IDF entirely.\n\n---\n\n## Project Structure\n\n```text\nvelxio\u002F\n├── frontend\u002F                    # React + Vite + TypeScript\n│   └── src\u002F\n│       ├── pages\u002F               # LandingPage, EditorPage, UserProfilePage, ...\n│       ├── components\u002F          # Editor, simulator canvas, modals, layout\n│       ├── simulation\u002F          # AVRSimulator, RP2040Simulator, RiscVCore,\n│       │                        # RaspberryPi3Bridge, Esp32Bridge, PinManager\n│       ├── store\u002F               # Zustand stores (auth, editor, simulator, project, vfs)\n│       └── services\u002F            # API clients\n├── backend\u002F                     # FastAPI + Python\n│   └── app\u002F\n│       ├── api\u002Froutes\u002F          # compile, auth, projects, libraries, simulation (ws)\n│       ├── models\u002F              # User, Project (SQLAlchemy)\n│       ├── services\u002F            # arduino_cli, esp32_worker, qemu_manager, gpio_shim\n│       └── core\u002F                # config, security, dependencies\n├── third-party\u002F                  # Reference-only upstream clones (credits)\n│   │                            # — runtime libs come from npm; the only\n│   │                            # one used by the build is qemu-lcgamboa.\n│   ├── wokwi-elements\u002F          # (npm: @wokwi\u002Felements)\n│   ├── avr8js\u002F                  # (npm: avr8js)\n│   ├── rp2040js\u002F                # (npm: rp2040js)\n│   └── qemu-lcgamboa\u002F           # QEMU fork for ESP32 Xtensa (build from source)\n├── img\u002F                         # Raspberry Pi 3 boot images (kernel8.img, dtb, OS)\n├── docker\u002F                      # In-container nginx.conf + entrypoint.sh\n├── docs\u002F                        # Technical documentation\n├── Dockerfile.standalone        # Single-container image used for self-hosting\n└── docker-compose.yml           # Self-hosting compose\n                                 # (production deployment lives in\n                                 # https:\u002F\u002Fgithub.com\u002Fvelxio\u002Fvelxio-prod)\n```\n\n---\n\n## Technologies\n\n| Layer | Stack |\n| --- | --- |\n| Frontend | React 19, Vite 7, TypeScript 5.9, Monaco Editor, Zustand, React Router 7 |\n| Backend | FastAPI, uvicorn (stateless: compile, libraries, simulation, MCP) |\n| AVR Simulation | avr8js (ATmega328p \u002F ATmega2560) |\n| RP2040 Simulation | rp2040js (ARM Cortex-M0+) |\n| RISC-V Simulation | RiscVCore.ts (RV32IMC, custom TypeScript) |\n| ESP32 Simulation | QEMU 8.1.3 lcgamboa fork (Xtensa LX6\u002FLX7) |\n| Raspberry Pi 3 Simulation | QEMU 8.1.3 (`qemu-system-aarch64 -M raspi3b`) + Raspberry Pi OS Trixie |\n| UI Components | wokwi-elements (Web Components) |\n| Compiler | arduino-cli (subprocess) + ESP-IDF (subprocess) |\n| Auth | None — anonymous, single-user editor by design |\n| Persistence | `.vlx` file export\u002Fimport (no server-side database) |\n| Deploy | Docker, nginx, GitHub Actions → GHCR + Docker Hub |\n\n---\n\n## Documentation\n\n| Topic | Document |\n| --- | --- |\n| Getting Started | [docs\u002Fgetting-started.md](docs\u002Fgetting-started.md) |\n| Architecture Overview | [docs\u002FARCHITECTURE.md](docs\u002FARCHITECTURE.md) |\n| Emulator Architecture | [docs\u002Femulator.md](docs\u002Femulator.md) |\n| Wokwi Libraries Integration | [docs\u002FWOKWI_LIBS.md](docs\u002FWOKWI_LIBS.md) |\n| RP2040 Emulation (Pico) | [docs\u002FRP2040_EMULATION.md](docs\u002FRP2040_EMULATION.md) |\n| Raspberry Pi 3 Emulation | [docs\u002FRASPBERRYPI3_EMULATION.md](docs\u002FRASPBERRYPI3_EMULATION.md) |\n| ESP32 Emulation (Xtensa) | [docs\u002FESP32_EMULATION.md](docs\u002FESP32_EMULATION.md) |\n| RISC-V Emulation (ESP32-C3) | [docs\u002FRISCV_EMULATION.md](docs\u002FRISCV_EMULATION.md) |\n| Components Reference | [docs\u002Fcomponents.md](docs\u002Fcomponents.md) |\n| MCP Server | [docs\u002FMCP.md](docs\u002FMCP.md) |\n| Roadmap | [docs\u002Froadmap.md](docs\u002Froadmap.md) |\n\n---\n\n## Troubleshooting\n\n**`arduino-cli: command not found`** — install arduino-cli and add to PATH.\n\n**LED doesn't blink** — check port listeners in browser console; verify pin mapping in the component property dialog.\n\n**Serial Monitor shows nothing** — ensure `Serial.begin()` is called before `Serial.print()`.\n\n**ESP32 not starting** — verify `libqemu-xtensa.dll` (Windows) or `libqemu-xtensa.so` (Linux) is present in `backend\u002Fapp\u002Fservices\u002F`.\n\n**Pi 3 takes too long to boot** — QEMU needs 2–5 seconds to initialize; the \"booting\" status in the UI is expected.\n\n**Compilation errors** — check the compilation console; verify the correct core is installed for the selected board.\n\n---\n\n## Community\n\nJoin the Discord server to ask questions, share projects, and follow updates:\n\n**[discord.gg\u002F3mARjJrh4E](https:\u002F\u002Fdiscord.gg\u002F3mARjJrh4E)**\n\n## Contributing\n\nSuggestions, bug reports, and pull requests are welcome at [github.com\u002Fdavidmonterocrespo24\u002Fvelxio](https:\u002F\u002Fgithub.com\u002Fdavidmonterocrespo24\u002Fvelxio).\n\nIf you'd like to support the project financially, see the [Support the Project](#support-the-project) section above or sponsor directly at [github.com\u002Fsponsors\u002Fdavidmonterocrespo24](https:\u002F\u002Fgithub.com\u002Fsponsors\u002Fdavidmonterocrespo24).\n\n> **Note:** All contributors must sign a Contributor License Agreement (CLA) so that the dual-licensing model remains valid. A CLA check runs automatically on pull requests.\n\n## License\n\nVelxio uses a **dual-licensing** model:\n\n| Use case | License | Cost |\n| --- | --- | --- |\n| Personal, educational, open-source (AGPLv3 compliant) | [AGPLv3](LICENSE) | Free |\n| Proprietary \u002F closed-source product or SaaS | [Commercial License](COMMERCIAL_LICENSE.md) | Paid |\n\nThe AGPLv3 is a certified Open Source license. It is free for all uses — including commercial — as long as any modifications or network-accessible deployments make their source code available under the same license. Companies that cannot comply with that requirement can purchase a Commercial License.\n\nFor commercial licensing inquiries: [davidmonterocrespo24@gmail.com](mailto:davidmonterocrespo24@gmail.com)\n\nSee [LICENSE](LICENSE) and [COMMERCIAL_LICENSE.md](COMMERCIAL_LICENSE.md) for full terms.\n\n## Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=davidmonterocrespo24\u002Fvelxio&type=Date)](https:\u002F\u002Fstar-history.com\u002F#davidmonterocrespo24\u002Fvelxio&Date)\n\n---\n\n## References\n\n- [Wokwi](https:\u002F\u002Fwokwi.com) — Inspiration\n- [avr8js](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Favr8js) — AVR8 emulator\n- [wokwi-elements](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Fwokwi-elements) — Electronic web components\n- [wokwi-boards](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Fwokwi-boards) — Board SVG assets\n- [wokwi-features](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Fwokwi-features) — Wokwi feature definitions\n- [rp2040js](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Frp2040js) — RP2040 emulator\n- [ngspice-wasm](https:\u002F\u002Fgithub.com\u002Fwokwi\u002Fngspice-wasm) — ngspice compiled to WebAssembly (electrical simulation)\n- [lcgamboa\u002Fqemu](https:\u002F\u002Fgithub.com\u002Flcgamboa\u002Fqemu) — QEMU fork for ESP32 Xtensa emulation\n- [espressif\u002Fqemu](https:\u002F\u002Fgithub.com\u002Fespressif\u002Fqemu) — Espressif QEMU ESP32 emulator\n- [esp32-camera](https:\u002F\u002Fgithub.com\u002Fespressif\u002Fesp32-camera) — ESP32 camera driver reference\n- [fritzing-parts](https:\u002F\u002Fgithub.com\u002Ffritzing\u002Ffritzing-parts) — Electronic component SVG assets\n- [picowi](https:\u002F\u002Fgithub.com\u002Fjbentham\u002Fpicowi) — Raspberry Pi Pico W WiFi reference\n- [100 Days 100 IoT Projects](https:\u002F\u002Fgithub.com\u002Fvelxio\u002F100_Days_100_IoT_Projects) — IoT example projects collection\n- [arduino-cli](https:\u002F\u002Fgithub.com\u002Farduino\u002Farduino-cli) — Arduino compiler\n- [Monaco Editor](https:\u002F\u002Fmicrosoft.github.io\u002Fmonaco-editor\u002F) — Code editor\n- [QEMU](https:\u002F\u002Fwww.qemu.org) — Machine emulator (Raspberry Pi 3)\n","Velxio 是一个在浏览器中模拟 Arduino、ESP32 和 Raspberry Pi 等嵌入式开发板的开源工具。它支持在19种真实开发板上编写、编译并运行代码，涵盖AVR8、ARM Cortex-M0+、RISC-V RV32IMC\u002FEC、Xtensa LX6\u002FLX7和ARM Cortex-A53五种CPU架构。用户可以使用Arduino C++或Python进行编程，并通过真实的CPU仿真与48种以上的互动电子组件交互。此项目非常适合需要快速原型设计但缺乏硬件资源的开发者，以及希望在没有实际设备的情况下学习嵌入式系统的学生和爱好者。",2,"2026-06-11 03:51:26","high_star"]