TOON Interactive TUI
November 20, 2025 · View on GitHub
Overview
The TOON Format includes a full-featured, interactive Terminal User Interface (TUI) powered by Ratatui. This provides a powerful, real-time environment for working with TOON format conversions.
Launching the TUI
# Launch interactive mode
toon --interactive
# Or use the short flag
toon -i
Features
Dual-Mode Conversion
- Encode Mode: JSON → TOON
- Decode Mode: TOON → JSON
- Toggle between modes with
Ctrl+EorCtrl+M
Split-Screen Editor
- Real-time conversion as you type
- Syntax highlighting support
- Input panel (left) and output panel (right)
- Switch between panels with
Tab - Line numbers for easy navigation
Live Statistics
- Token count comparison (JSON vs TOON)
- Byte size comparison
- Percentage savings calculation
- Real-time updates as you edit
Interactive Settings Panel (Ctrl+P)
Configure encoding and decoding options on-the-fly:
Encode Settings:
- Delimiter: Comma (
,), Tab (\t), or Pipe (|) - Pressdto cycle - Indentation: Adjust spaces with
+/-keys - Key Folding: Toggle with
f- Collapses{a:{b:1}}→a.b: 1 - Flatten Depth: Control folding depth with
[/]keys,ufor unlimited
Decode Settings:
- Strict Mode: Toggle with
s- Enforce spec compliance - Type Coercion: Toggle with
c- Auto-convert strings to types - Path Expansion: Toggle with
p- Expanda.b:1→{"a":{"b":1}}
File Browser (Ctrl+F)
- Visual file navigation
- File type indicators (JSON, TOON, directories)
- Navigate with arrow keys
- Open files with
Enter - Multi-file selection with
Space
Conversion History (Ctrl+H)
- Track all conversions in the session
- View timestamps
- See token savings for each conversion
- File names and modes
Side-by-Side Diff Viewer (Ctrl+D)
- Compare input and output side-by-side
- Line numbers for easy reference
- Perfect for understanding transformations
File Operations
Ctrl+O- Open fileCtrl+S- Save output to fileCtrl+N- New file (clear editor)- Auto-detection of file types (
.json,.toon)
Clipboard Integration
Ctrl+K- Copy selection to clipboardCtrl+Y- Copy output to clipboardCtrl+V- Paste into input- Seamless integration with system clipboard
Round-Trip Testing (Ctrl+B)
- Test conversion fidelity
- Automatically converts output back to input
- Toggles mode and re-converts
- Validates that data survives round-trip
REPL Mode (Ctrl+R)
- Interactive command-line interface
- Execute commands like
encode,decode,help - Store variables with
let $var = data - View command history with Up/Down arrows
- Scrollable output
- Full-screen mode for focused work
Theme Support (Ctrl+T)
- Dark Theme (default)
- Light Theme
- Toggle between themes on-the-fly
Built-in Help (F1)
- Complete keyboard shortcuts reference
- Feature documentation
- Quick examples
Keyboard Shortcuts
Global Commands
| Shortcut | Action |
|---|---|
Ctrl+C / Ctrl+Q | Quit application |
Ctrl+E / Ctrl+M | Toggle mode (Encode ⇄ Decode) |
Tab | Switch between input/output panels |
F1 | Show/hide help screen |
Esc | Close overlays (help, settings, REPL, etc.) |
File Operations
| Shortcut | Action |
|---|---|
Ctrl+O | Open file browser |
Ctrl+S | Save output to file |
Ctrl+N | New file (clear editor) |
View Controls
| Shortcut | Action |
|---|---|
Ctrl+P | Toggle settings panel |
Ctrl+F | Toggle file browser |
Ctrl+H | Toggle conversion history |
Ctrl+D | Toggle diff viewer |
Ctrl+T | Toggle theme (Dark/Light) |
Ctrl+R | Open REPL |
Editing & Testing
| Shortcut | Action |
|---|---|
Ctrl+K | Copy selection to clipboard |
Ctrl+Y | Copy output to clipboard |
Ctrl+V | Paste into input |
Ctrl+L | Clear input and output |
Ctrl+B | Round-trip test |
Settings Panel (when Ctrl+P is active)
| Shortcut | Action |
|---|---|
d | Cycle delimiter (Comma → Tab → Pipe) |
+ / = | Increase indentation |
- / _ | Decrease indentation |
f | Toggle key folding |
[ / ] | Adjust flatten depth |
u | Toggle unlimited flatten depth |
p | Toggle path expansion |
s | Toggle strict mode |
c | Toggle type coercion |
File Browser (when Ctrl+F is active)
| Shortcut | Action |
|---|---|
↑ / ↓ | Navigate files |
Enter | Open file |
Space | Select/deselect file |
Esc | Close browser |
REPL (when Ctrl+R is active)
| Shortcut | Action |
|---|---|
↑ / ↓ | Navigate command history |
PageUp / PageDown | Scroll output |
Enter | Execute command |
Esc | Close REPL |
REPL Commands
| Command | Description | Example |
|---|---|---|
encode <data> | Encode JSON to TOON | encode {"name": "Alice"} |
decode <data> | Decode TOON to JSON | decode name: Alice |
let $var = <data> | Store variable | let $config = {"port": 8080} |
vars | List all variables | vars |
clear | Clear output | clear |
help | Show help | help |
exit | Close REPL | exit |
Variable Usage:
- Use
$_to reference the last result - Use
$varnameto reference stored variables - Example:
let $data = {...}thenencode $data
Example Workflow
- Launch TUI:
toon -i - Paste JSON into input panel (left side)
- See TOON output instantly (right side)
- View statistics at the bottom (tokens saved, bytes saved)
- Adjust settings with
Ctrl+P(try enabling key folding!) - Save output with
Ctrl+S - Test round-trip with
Ctrl+Bto verify data fidelity - Switch to decode mode with
Ctrl+Efor manual testing
Requirements
The TUI is included in the standard toon binary with no additional setup required. Dependencies are handled automatically by Cargo.
Tips & Tricks
- Quick Start: Use
Ctrl+Vto paste clipboard content directly - Settings Memory: Settings persist during your session
- Theme Preference: Toggle theme with
Ctrl+Tfor your environment - Learning Mode: Keep
F1(Help) open while learning shortcuts - Performance: The TUI handles large JSON files efficiently with scrolling
- REPL Variables: Store frequently used data in variables for quick testing
- Round-Trip: Always test with
Ctrl+Bto ensure your data survives conversion
Feedback & Contributions
Found a bug or have a feature request? Please open an issue on GitHub!