| Crates.io | v4_cli |
| lib.rs | v4_cli |
| version | 0.5.0 |
| created_at | 2025-11-01 18:15:11.787558+00 |
| updated_at | 2025-11-05 05:34:47.687808+00 |
| description | CLI tool for V4 VM bytecode deployment |
| homepage | https://github.com/V4-project/v4_cli |
| repository | https://github.com/V4-project/v4_cli |
| max_upload_size | |
| id | 1912264 |
| size | 1,526,422 |
CLI tool for deploying bytecode to V4 VM devices via the V4-link protocol over USB Serial.
v4 repl)
.stack - Display data and return stack contents.rstack - Show call trace via return stack.dump - Hexdump memory at any address.see - Disassemble word bytecodev4 push)v4 ping)v4 reset)cargo install --path .
cargo build --release
# Binary will be in target/release/v4
Start an interactive Forth REPL session:
v4 repl --port /dev/ttyACM0
Example REPL session:
V4 REPL v0.1.0
Connected to /dev/ttyACM0
Type 'bye' or press Ctrl+D to exit
Type '.help' for help
v4> 1 2 +
ok
v4> : SQUARE DUP * ;
ok
v4> 5 SQUARE
ok
v4> .help
Available commands:
.help - Show this help
.ping - Check device connection
.reset - Reset VM and compiler context
.stack - Show data and return stack contents
.rstack - Show return stack with call trace
.dump [addr] [len] - Hexdump memory (default: continue from last)
.see <word_idx> - Show word bytecode disassembly
.exit - Exit REPL (same as 'bye')
bye - Exit REPL
v4> .stack
Data Stack (depth: 1 / 256):
[0]: 0x00000019 (25)
Return Stack (depth: 0 / 64):
<empty>
v4> bye
Goodbye!
v4 push app.v4b --port /dev/ttyACM0
v4 push app.v4b --port /dev/ttyACM0 --timeout 10
v4 push app.v4b --port /dev/ttyACM0 --detach # Don't wait for response
v4 ping --port /dev/ttyACM0
v4 reset --port /dev/ttyACM0
v4 --help
v4 push --help
v4 repl --help
The V4-link protocol is a simple frame-based protocol for transferring bytecode to V4 VM devices over serial.
[STX][LEN_L][LEN_H][CMD][DATA...][CRC8]
- STX: 0xA5 (start marker)
- LEN_L: Payload length low byte (little-endian u16)
- LEN_H: Payload length high byte
- CMD: Command code
- DATA: Payload (0-512 bytes)
- CRC8: Checksum (polynomial 0x07, init 0x00)
0x10 - EXEC: Execute bytecode0x20 - PING: Connection check0xFF - RESET: VM reset[STX][0x01][0x00][ERR_CODE][CRC8]
Error codes:
- 0x00 OK
- 0x01 ERROR
- 0x02 INVALID_FRAME
- 0x03 BUFFER_FULL
- 0x04 VM_ERROR
cargo test
cargo doc --open
The examples/ directory contains sample V4 bytecode files for testing with ESP32-C6 devices:
# Turn LED on
v4 push examples/led_on.v4b --port /dev/ttyACM0
# Start blinking pattern
v4 push examples/led_blink.v4b --port /dev/ttyACM0
# SOS morse code
v4 push examples/led_sos.v4b --port /dev/ttyACM0
# Turn LED off
v4 push examples/led_off.v4b --port /dev/ttyACM0
See examples/README.md for full list of available examples.
For the Python reference implementation, see ../V4-ports/esp32c6/examples/v4-link-demo/host/v4_link_send.py.
Licensed under either of:
at your option.