Build from source

July 17, 2026 ยท View on GitHub

  1. Install rust (https://rustup.rs) and node (https://formulae.brew.sh/formula/node).

  2. Install the WASM target.

    rustup target add wasm32-unknown-unknown
    
  3. Build the interface.

    cd ui
    npm install
    cargo install --root extension/tools wasm-bindgen-cli@0.2.126
    npm run build
    
  4. Compile and run the server (CTRL-C to stop it).

    cd ../
    cargo run --release
    
  5. Open http://localhost:3000 in a browser.

Local development

  1. Build the interface with npm run watch.

  2. Open ./ui/build/index.html in a browser (the browser must support WebTransport, see https://caniuse.com/webtransport for compatibility).

  3. After making changes...

    • ...to a file in ./src, stop the server and run cargo run --release again.
    • ...to a file in ./ui/src, refresh the browser window (npm run watch automatically rebuilds ./ui/build/index.html when it detects source changes).
    • ...to a file in ./ui/extension, stop the watcher and run npm run watch again (extension files are only compiled when the watcher starts).

Format specification

Events (.raw.kai)

ByteHex valueASCIIDescription
00x4BKMagic number
10x41AMagic number
20x49IMagic number
30x52RMagic number
40x4FOMagic number
50x53SMagic number
60x2D-Magic number
70x52RMagic number
80x41AMagic number
90x57WMagic number
100x00Version number
110x00Format id (0 is EVT3)
12[U0]Decoder state length (4 bytes LE)
13[U1]Decoder state length (4 bytes LE)
14[U2]Decoder state length (4 bytes LE)
15[U3]Decoder state length (4 bytes LE)
16..16 + UDecoder state

The rest of the file contains raw EVT3 data.

USB packets timings (.index.kai)

ByteHex valueASCIIDescription
00x4BKMagic number
10x41AMagic number
20x49IMagic number
30x52RMagic number
40x4FOMagic number
50x53SMagic number
60x2D-Magic number
70x49IMagic number
80x4ENMagic number
90x44DMagic number
100x45EMagic number
110x58XMagic number
120x00Version number
130x00Format id (0 is EVT3)

The rest of the file contains USB packets entries (packet offset in .raw.kai, computer timestamp, UTC time, and decoder state).

Samples (.samples.kai)

ByteHex valueASCIIDescription
00x4BKMagic number
10x41AMagic number
20x49IMagic number
30x52RMagic number
40x4FOMagic number
50x53SMagic number
60x2D-Magic number
70x53SMagic number
80x41AMagic number
90x4DMMagic number
100x50PMagic number
110x4CLMagic number
110x45EMagic number
110x53SMagic number
120x00Version number
130x00Format id (0 is Prophesee Gen4)

The rest of the file contains timestamped samples (illuminance and temperature).