# toonconv ๐ฆ
[](https://www.rust-lang.org/)
[](LICENSE)
[](https://github.com/lst97/toonconv/stargazers)
[](https://github.com/lst97/toonconv/issues)
**toonconv** is a blazingly fast, high-performance Rust CLI tool for converting JSON data into TOON (Token-Oriented Object Notation) format. It's designed for LLM applications, data processing pipelines, and scenarios where token efficiency matters.
## โจ Key Features
- **๐ Ultra-Fast Performance**: ~190x faster than JavaScript implementations
- **๐พ Memory Efficient**: Optional SIMD acceleration and configurable memory limits
- **๐ฆ Multiple Input Methods**: Direct strings, stdin, files, and recursive directories
- **๐ Batch Processing**: Process entire directory structures automatically
- **๐ Token Optimization**: Reduces token count by 35-54% compared to JSON
- **๐ก๏ธ Robust Error Handling**: Continues processing on errors with detailed reporting
- **๐ Built-in Performance Monitoring**: Real-time progress bars and statistics
## ๐ Performance Benchmarks
| **toonconv (Rust)** | **~5ms** | **35-54% reduction** |
| @toon-format/cli (JS) | ~959ms | Baseline |
> Benchmarks run on Apple M1 Mac Air. See [BENCHMARK.md](BENCHMARK.md) for detailed analysis.
## ๐ฆ Installation
### From Source (Recommended)
```bash
# Clone the repository
git clone https://github.com/lst97/toonconv.git
cd toonconv
# Build release version
cargo build --release
# Install globally (optional)
cargo install --path .
```
### Prerequisites
- Rust 1.75+ ([Install Rust](https://rustup.rs/))
## ๐ฏ Quick Start
### Basic Usage
```bash
# Direct JSON string (NEW!)
toonconv '{"name": "Alice", "age": 30}'
# From file
toonconv input.json -o output.toon
# From stdin
# Batch directory conversion
toonconv input_dir/ -o output_dir/
```
### Example Output
```bash
# Input JSON
{"users": [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]}
# Output TOON
users[2]{id,name}: 1,Alice 2,Bob
```
## ๐ Usage Methods
toonconv supports **4 different ways** to convert JSON to TOON:
### 1. Direct JSON String Argument ๐ฏ
Perfect for quick conversions and testing.
```bash
# Convert a JSON object
toonconv '{"name": "Alice", "age": 30}'
# Convert a JSON array
toonconv '[1, 2, 3, 4, 5]'
# Nested structures
toonconv '{"user": {"name": "Bob", "email": "bob@example.com"}}'
```
### 2. Standard Input (stdin) ๐
Great for Unix pipelines and data workflows.
```bash
# From echo
# From API response
# Chain with jq
### 3. Single File Conversion ๐
Convert individual files with custom output paths.
```bash
# Basic conversion
toonconv input.json
# Custom output
toonconv input.json -o custom_output.toon
# Pretty formatting
toonconv input.json --format pretty
```
### 4. Directory Batch Conversion ๐
Process entire directories while preserving structure.
```bash
# Recursive conversion (default)
toonconv input_dir/ -o output_dir/
# Non-recursive
toonconv input_dir/ -o output_dir/ --no-recursive
# Continue on errors
toonconv input_dir/ -o output_dir/ --continue-on-error
```
## โ๏ธ Advanced Options
### Format Control
```bash
# Pretty-print output (default)
toonconv data.json --format pretty
# Compact output
toonconv data.json --format compact
# Minified output
toonconv data.json --format minified
```
### Memory Management
```bash
# Set memory limit (default: 512MB)
toonconv large.json --memory-limit 1073741824 # 1GB
# For very large files
toonconv huge.json --memory-limit 2147483648 # 2GB
```
### Verbosity
```bash
# Quiet mode (errors only)
toonconv data.json --quiet
# Verbose mode (detailed progress)
toonconv data.json --verbose
# Debug mode (maximum detail)
toonconv data.json --debug
```
## ๐๏ธ Architecture
```
toonconv/
โโโ src/
โ โโโ cli/ # CLI argument parsing and commands
โ โโโ conversion/ # Core conversion engine
โ โโโ formatter/ # TOON format output generation
โ โโโ parser/ # JSON parsing with validation
โ โโโ validation/ # Input validation and error handling
โ โโโ error/ # Custom error types
โ โโโ lib.rs # Library entry point
โ โโโ main.rs # Binary entry point
โโโ tests/ # Comprehensive test suite
โโโ benches/ # Performance benchmarks
โโโ examples/ # Usage examples
โโโ specs/ # TOON format specifications
```
### Core Technologies
- **Language**: Rust 1.75+
- **JSON Processing**: `serde`, `serde_json`
- **CLI Framework**: `clap` with derive macros
- **Performance**: Optional `simd-json` support
- **Terminal UI**: `indicatif`, `console`
- **File Operations**: `walkdir` for recursive traversal
## ๐งช Testing
Run the comprehensive test suite:
```bash
# All tests
cargo test
# TOON specification compliance
cargo test --test toon_spec_compliance_test
# Performance benchmarks
cargo bench
# Code quality
cargo clippy
cargo fmt
```
## ๐ Benchmarking
Compare performance with the official JavaScript implementation:
```bash
# Run built-in benchmarks
cargo bench --bench token_efficiency
cargo bench --bench speed_comparison
# Compare with JavaScript version
node bench/speed.js
```
See [BENCHMARK.md](BENCHMARK.md) for detailed performance analysis.
## ๐ง Development
### Building
```bash
# Development build
cargo build
# Release build (optimized)
cargo build --release
# Check code quality
cargo clippy
cargo fmt --check
```
### Contributing
1. Fork the repository
2. Create a feature branch: `git checkout -b feature-name`
3. Make your changes and add tests
4. Run the test suite: `cargo test`
5. Submit a pull request
See [AGENTS.md](AGENTS.md) for development guidelines.
## ๐ Documentation
- **[USAGE_GUIDE.md](USAGE_GUIDE.md)**: Comprehensive usage examples and patterns
- **[BUILD.md](BUILD.md)**: Build instructions and troubleshooting
- **[BENCHMARK.md](BENCHMARK.md)**: Performance analysis and comparisons
- **[specs/](specs/)**: TOON format specifications
## ๐ก Common Patterns
### API to TOON Pipeline
```bash
# Fetch, filter, convert
toonconv --stdin -o users.toon
```
### Batch Convert with Error Handling
```bash
# Convert all JSON files, skip errors
find . -name "*.json" -type f | while read file; do
toonconv "$file" -o "${file%.json}.toon" --continue-on-error
done
```
### Git Hook Integration
```bash
#!/bin/bash
# .git/hooks/pre-commit
for file in config/*.json; do
toonconv "$file" -o "${file%.json}.toon"
git add "${file%.json}.toon"
done
```
## ๐ Troubleshooting
### Build Issues
```bash
# Clean build
cargo clean
cargo update
cargo build --release
```
### Runtime Errors
- **Invalid JSON**: Validate input with a JSON validator
- **Memory limits**: Increase with `--memory-limit` flag
- **File not found**: Use absolute paths if relative paths fail
## ๐ License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## ๐ Acknowledgments
- TOON format specification contributors
- Rust ecosystem for excellent tooling
- Performance benchmarking frameworks
---
<div align="center">
**[Website](https://github.com/lst97/toonconv)** โข
**[Documentation](https://github.com/lst97/toonconv/wiki)** โข
**[Issues](https://github.com/lst97/toonconv/issues)** โข
**[Discussions](https://github.com/lst97/toonconv/discussions)**
Made with โค๏ธ using Rust
</div>