|
| 1 | +# Changelog |
| 2 | + |
| 3 | +## v0.1.0 — Initial Release |
| 4 | + |
| 5 | +### Hex Viewer |
| 6 | +- Interactive TUI hex viewer built with ratatui + crossterm |
| 7 | +- Color-coded byte display by category (null, whitespace, printable ASCII, 0xFF, other) |
| 8 | +- Configurable layout: 16 or 32 bytes per row (`w`), resizable decode panel (`[` / `]`) |
| 9 | +- Mouse scroll support in hex view, decode panel, and stats panel |
| 10 | +- Goto offset by hex (`0x...`) or decimal (`g`) |
| 11 | +- Page Up/Down, Home/End, Shift+Up/Down for fast navigation |
| 12 | + |
| 13 | +### Selection |
| 14 | +- Modal visual selection: press `v` to anchor, arrows to extend, `v` to confirm, `Esc` to cancel |
| 15 | +- Byte-level and bit-level selection modes (`b` to toggle) |
| 16 | +- Endianness toggle between little-endian and big-endian (`e`) |
| 17 | + |
| 18 | +### Built-in Decoders |
| 19 | +- Raw formats: hex, binary, octal |
| 20 | +- Integers: u8/i8, u16/i16, u32/i32, u64/i64 (endian-aware) |
| 21 | +- Floats: f32, f64 (endian-aware) |
| 22 | +- Unix timestamps (32-bit and 64-bit) |
| 23 | +- Strings: ASCII and UTF-8 |
| 24 | +- Selection metadata: byte length, entropy, compressibility, sparsity, unique byte count |
| 25 | + |
| 26 | +### Decode Panel |
| 27 | +- Auto-updating decode panel showing all interpretations for the current selection |
| 28 | +- Color-coded range highlighting: decoder fields are color-mapped in both the decode panel and hex view |
| 29 | +- Focus cycling with Tab/Shift-Tab to highlight individual decoded fields with bracket markers |
| 30 | + |
| 31 | +### Stats Panel |
| 32 | +- Toggleable stats panel (`s`) with per-field entropy, compressibility, null count, and unique byte count |
| 33 | +- Scrollable with `{` / `}` and mouse wheel |
| 34 | + |
| 35 | +### Plugin System — Lua |
| 36 | +- Load `.lua` decoder scripts from `~/.config/turbohex/decoders/` |
| 37 | +- Sandboxed Lua runtime (table/string/utf8/math only — no filesystem or OS access) |
| 38 | +- ABI: `decode(bytes_table, endian_string, params_table)` returns `{{label, value, offset?, length?}}` |
| 39 | +- Optional `params()` export for configurable parameters |
| 40 | +- Example decoder auto-generated on first run |
| 41 | + |
| 42 | +### Plugin System — WASM |
| 43 | +- Load `.wasm` decoder modules from `~/.config/turbohex/decoders/` |
| 44 | +- No WASI required — pure computation modules |
| 45 | +- ABI: exports `alloc(i32)->i32` and `decode(ptr, len, endian)->i32` returning NUL-terminated JSON |
| 46 | +- Optional `params()` and `decode_with_params()` exports for configurable parameters |
| 47 | +- Fuel-limited execution (10M instructions) to prevent runaway modules |
| 48 | +- Includes Rust and C example decoder projects |
| 49 | + |
| 50 | +### Decoder Settings |
| 51 | +- Interactive decoder settings UI (`d`) to enable/disable individual decoders |
| 52 | +- Per-decoder parameter editing with type validation (string, int, bool, choice) |
| 53 | + |
| 54 | +### Developer Experience |
| 55 | +- `turbohex --skills` prints an LLM-friendly decoder development guide |
| 56 | +- Large file support via memory-mapped I/O (files >= 1MB) |
| 57 | +- MIT licensed |
0 commit comments