velxio/docs/roadmap.md

233 lines
9.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Roadmap
What's shipped, what's underway, what's planned.
---
## Implemented
### Editor
- Monaco Editor with C++ and Python syntax highlighting, autocomplete, minimap, dark theme
- **Multi-file workspace** — create, rename, delete, and switch between `.ino`, `.h`, `.cpp`, `.py`, `.chip.c` files
- **Per-board file groups** — each board on the canvas has its own file set
- Unsaved-changes indicator on file tabs, close-with-confirm dialog
- Resizable file-explorer panel with collapse toggle
### Compilation
- Arduino compilation via `arduino-cli` (AVR, RP2040, ATtiny, ESP32)
- ESP-IDF compilation via `idf.py` with ccache + persistent build dirs (incremental rebuilds in 25 s)
- Multi-file sketch support; first `.ino` is promoted to `sketch.ino`
- Compilation console with full toolchain output, warnings, and errors
- Async compile endpoint for long builds (returns a job ID, poll for status)
- Custom-chip compile pipeline (C -> WebAssembly via Emscripten)
### Boards (19, across 5 CPU architectures)
#### AVR8 (browser, avr8js)
- Arduino Uno (ATmega328P @ 16 MHz)
- Arduino Nano (ATmega328P @ 16 MHz)
- Arduino Mega 2560 (ATmega2560 @ 16 MHz)
- ATtiny85 (8 MHz internal / 16 MHz external PLL)
#### RP2040 (browser, rp2040js)
- Raspberry Pi Pico (RP2040 @ 133 MHz)
- Raspberry Pi Pico W (RP2040 + simulated CYW43439 WiFi)
#### Xtensa LX6/LX7 (backend, lcgamboa QEMU)
- ESP32 DevKit V1, ESP32 DevKit C V4
- ESP32-CAM, Wemos Lolin32 Lite
- ESP32-S3 DevKit, XIAO ESP32-S3
- Arduino Nano ESP32
#### RISC-V RV32IMC (backend, lcgamboa QEMU)
- ESP32-C3 DevKit
- XIAO ESP32-C3
- ESP32-C3 SuperMini
#### ARM Cortex-A (backend, upstream QEMU)
- Raspberry Pi Zero (Cortex-A7)
- Raspberry Pi 1B+ (Cortex-A7)
- Raspberry Pi 2B (Cortex-A7)
- Raspberry Pi 3B (Cortex-A53, `raspi3b` machine)
- Raspberry Pi 4B (Cortex-A72)
- Raspberry Pi 5 (Cortex-A76)
### Languages
- **Arduino C++** on every board
- **MicroPython** on Pico / Pico W / all ESP32 / ESP32-S3 / ESP32-C3 variants
- **Python 3** on every Raspberry Pi (real Pi OS Trixie under QEMU)
- **ESP-IDF C** on all ESP32 variants
### Simulation peripherals
- **AVR** — PORTB/C/D, Timer0/1/2, USART (auto baud), ADC, hardware SPI + I2C
- **RP2040** — all 30 GPIO, UART0/UART1, ADC + temp sensor, I2C0/1, SPI0/1, PWM, WFI fast-forward
- **ESP32 (Xtensa)** — 40 GPIO with GPIO3239 fix, UART0/1/2, ADC (03300 mV), I2C, SPI, RMT/NeoPixel, LEDC 16-channel PWM, WiFi (SLIRP NAT), BLE advertising
- **ESP32-C3 (RISC-V)** — GPIO 021, UART0, ADC1, WiFi/BLE via same SLIRP path
- **Pi family** — GPIO 027 via RPi.GPIO shim over `ttyAMA1`, user Serial on `ttyAMA0`, qcow2 overlay, multi-board UART bridge
### Electrical (analog) simulation
- **ngspice WASM engine** (lazy-loaded, ~39 MB chunk, behind a toolbar toggle)
- **NetlistBuilder** — Union-Find on wires, SPICE card emission per component
- **AVR <-> SPICE bridge** — digital outputs become Thevenin sources, ADCs read solved node voltages
- **ESP32 QEMU <-> SPICE bridge** — same pattern for QEMU backends
- **Analog instruments**: voltmeter, ammeter, oscilloscope (multi-channel + logic analyzer), function generator (sine/square/triangle/sawtooth)
- **Component models**: resistors, capacitors, inductors, diodes (1N4148/4007/Zener/Schottky/LED), transistors (NPN/PNP, MOSFET N/P), op-amps (LM358/TL081/LM741), comparators
- **Mixed-signal sanity** — pot wired to A0 reads the real voltage; op-amp follower between pot and A0 still works
### Custom Chips
- **C-to-WASM** SDK with `vx_*` primitives (GPIO, ADC, DAC, I2C/SPI slave, UART, timers, framebuffer, log)
- **30+ example chips** in the gallery: Intel 4001/4002/4004/4040/8080/8086 + 8251/8253/8255/8259, Z80, 74HC595, CD4094, 24C01, 24LC256, MCP3008, PCF8574, DS3231, 32K/1M ROM, 64K RAM, latch 8282, …
- **In-browser runtime** — `ChipRuntime` per instance, WASI shim, deterministic clock
- **Bus bridges** — I2C slave and SPI slave appear as real peripherals to the MCU
- **Backend variant** — chips can also run inside QEMU for ESP32-bound projects
### Components
- **152+ catalog components** across 11 categories (boards, sensors, displays, input, output, motors, logic, analog, passive, electromech, other)
- Component picker with search, category filters, and live previews
- Drag-and-drop repositioning, 90° rotation
- Property dialog: pin assignment, color, value, protocol selector
- Pin selector for explicit pin-to-board mapping
- Auto-generated metadata from upstream wokwi-elements source + Velxio-native override file
### Wire System
- Click-to-connect wire creation with L-shape preview
- Orthogonal routing, 20px grid snap
- 8 signal-type wire colors (VCC, GND, digital, analog, PWM, I2C, SPI, USART)
- Segment-based wire editing (drag perpendicular to segment orientation)
- Parallel-overlap auto-offset (no overlapping wires)
- Pin overlay with cyan/green hover states
- Auto-recalculation when components move (with retries for async-mounting board pins)
### Multi-Board Canvases
- Multiple boards on the same canvas, each with its own simulator instance, file group, Serial Monitor
- Shared electrical netlist — a wire between two boards is one SPICE node
- UART bridge between boards (TX of A → RX of B)
- Deterministic board IDs (first of a kind gets the bare `boardKind`)
### Serial Monitor
- Live serial output, per-board
- Auto baud-rate detection (reads UBRR for AVR, peripheral registers for RP2040 / ESP32)
- Send-to-RX from the UI
- Autoscroll toggle
- Multi-UART support on ESP32 (UART0/1/2)
- Pi: `ttyAMA0` user serial, `ttyAMA1` reserved for GPIO protocol
### Library Manager
- Browse and install the full Arduino library index from the UI
- Live search, installed tab, version display
- Persists installs in `/root/Arduino` (Docker volume `velxio-arduino-user-libs`)
### Portable Project Persistence
- **`.vlx` file format** — single-file JSON snapshot of boards, file groups, components, wires, VFS contents, electrical-sim state
- Save button = download `.vlx`; Open button = restore
- Versioned for forward compatibility
- **Zero server-side state in OSS** — your projects live wherever you put your `.vlx` files
### Examples Gallery
- **380+ built-in examples** across 7 collections:
- Circuits (190) — pure analog, mixed-signal, transient demos
- 100 Days of Code (57)
- E-Paper Displays (70)
- Retro Intel/Zilog Processors (43)
- Analog (15)
- Digital (7)
- Pico W WiFi (4)
- Filter by board, category, difficulty
- One-click load into editor
### IoT Gateway
- HTTP proxy bridging a real browser to a simulated ESP32 web server
- AsyncWebServer / WebServer / HTTPClient all reachable from the host
### MCP Server
- **stdio mode** (`backend/mcp_server.py`) — Claude Desktop
- **SSE mode** (`backend/mcp_sse_server.py`, port 8002) — Cursor, web agents
- 7 tools: `compile_project`, `run_project`, `import_wokwi_json`, `export_wokwi_json`, `create_circuit`, `update_circuit`, `generate_code_files`
### Apps
- **Web (OSS + Pro)** — at velxio.dev
- **Desktop (Tauri)** — Pro, 30-day trial, deep-link sign-in, license cache + grace banner, ESP32 QEMU prompt
### Deploy
- Single-container Docker image (`Dockerfile.standalone`) published to GHCR + Docker Hub on push to `master`
- 5 named volumes for fast restarts (arduino libs, user libs, ccache, ESP-IDF build dir, sketch data)
- nginx reverse proxy in front of FastAPI inside the container
- Docker Compose for build-from-source
---
## In Progress
- **Wire validation** — short detection, missing-GND warnings, dangling-pin flags
- **Streaming compile output** — line-buffered toolchain log over WebSocket instead of waiting for the full process to finish
- **Wokwi diagram.json import improvements** — better part-mapping fallbacks for parts not in the Velxio catalog
---
## Planned
### Near-term
- **Undo / redo** — for code edits and canvas changes
- **Breadboard component** — half-size + full-size, auto-rail wiring
- **More boards** — STM32 Blue Pill (Cortex-M3), RP2350 (Pico 2), AVR-DA family, Teensy 4.x
### Mid-term
- **Oscilloscope improvements** — FFT view, persistent traces, math channels
- **Logic analyzer** — protocol decode (I2C, SPI, UART, 1-Wire)
- **TypeDoc-generated API site** — auto-published to GitHub Pages
- **More sensor models** — VL53L0X (ToF), MAX30102 (heart rate), ADS1115 (16-bit ADC)
- **EEPROM emulation** for AVR — persistent read/write across simulation restarts
- **WebGPU canvas** — for projects with 200+ components
### Long-term
- **Multiplayer** — share and co-edit simulations in real time
- **Embedded tutorial system** — step-by-step guided projects inside the editor
- **Mobile / tablet** — responsive layout with touch wiring
- **Hardware-in-the-loop** — bridge a real serial device to a simulated canvas
- **AI Co-pilot** — Pro Max — already in beta on velxio.dev
---
## Recently shipped
- 2026-05 — Retro Intel/Zilog chip collection (17 chips, 2 bundled demos, 2 `/examples` entries)
- 2026-05 — Desktop overlay (welcome page, grace banner, ESP32 QEMU prompt)
- 2026-05 — Landing page "Try Simulator Free Online" CTA + download slot
- 2026-04 — ESP32 IoT gateway (real browser <-> simulated WebServer)
- 2026-04 — Multi-board UART bridge (Arduino <-> ESP32 <-> Pi 3 on the same canvas)
- 2026-03 — ngspice analog co-simulation behind the electrical-sim toggle
- 2026-03 — Custom-chip backend runtime for QEMU ESP32
---
## Contributing
Feature requests, bug reports, and pull requests are welcome at [github.com/davidmonterocrespo24/velxio](https://github.com/davidmonterocrespo24/velxio).
All contributors must sign a Contributor License Agreement (CLA); a CLA check runs automatically on PRs so the dual-licensing (AGPLv3 + Commercial) stays valid.