npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@toon-format/cli

v2.1.0

Published

CLI for JSON ↔ TOON conversion using @toon-format/toon

Readme

@toon-format/cli

Command-line tool for converting JSON to TOON and back, with token analysis and streaming support.

TOON (Token-Oriented Object Notation) is a compact, human-readable encoding of the JSON data model that minimizes tokens for LLM input. The CLI lets you test conversions, analyze token savings, and integrate TOON into shell pipelines with stdin/stdout support—no code required.

Installation

# npm
npm install -g @toon-format/cli

# pnpm
pnpm add -g @toon-format/cli

# yarn
yarn global add @toon-format/cli

Or use directly with npx:

npx @toon-format/cli [options] [input]

Usage

toon [options] [input]

Standard input: Omit the input argument or use - to read from stdin. This enables piping data directly from other commands.

Auto-detection: The CLI automatically detects the operation based on file extension (.json → encode, .toon → decode). When reading from stdin, use --encode or --decode flags to specify the operation (defaults to encode).

Basic Examples

# Encode JSON to TOON (auto-detected)
toon input.json -o output.toon

# Decode TOON to JSON (auto-detected)
toon data.toon -o output.json

# Output to stdout
toon input.json

# Pipe from stdin
cat data.json | toon
echo '{"name": "Ada"}' | toon

# Decode from stdin
cat data.toon | toon --decode

Options

| Option | Description | | ------ | ----------- | | -o, --output <file> | Output file path (prints to stdout if omitted) | | -e, --encode | Force encode mode (overrides auto-detection) | | -d, --decode | Force decode mode (overrides auto-detection) | | --delimiter <char> | Array delimiter: , (comma), \t (tab), \| (pipe) | | --indent <number> | Indentation size (default: 2) | | --stats | Show token count estimates and savings (encode only) | | --no-strict | Disable strict validation when decoding | | --key-folding <mode> | Enable key folding: off, safe (default: off) | | --flatten-depth <number> | Maximum folded segment count when key folding is enabled (default: Infinity) | | --expand-paths <mode> | Enable path expansion: off, safe (default: off) |

Advanced Examples

Token Statistics

Show token savings when encoding:

toon data.json --stats -o output.toon

Example output:

✔ Encoded data.json → output.toon

ℹ Token estimates: ~15,145 (JSON) → ~8,745 (TOON)
✔ Saved ~6,400 tokens (-42.3%)

Alternative Delimiters

Tab-separated (often more token-efficient)

toon data.json --delimiter "\t" -o output.toon

Lenient Decoding

Skip validation for faster processing:

toon data.toon --no-strict -o output.json

Stdin Workflows

# Convert API response to TOON
curl https://api.example.com/data | toon --stats

# Process large dataset
cat large-dataset.json | toon --delimiter "\t" > output.toon

# Chain with other tools
jq '.results' data.json | toon > filtered.toon

Large Dataset Processing

The CLI uses streaming output for both encoding and decoding, writing incrementally without building the full output string in memory:

# Encode large JSON file with minimal memory usage
toon huge-dataset.json -o output.toon

# Decode large TOON file with streaming JSON output
toon huge-dataset.toon -o output.json

# Process millions of records efficiently via stdin
cat million-records.json | toon > output.toon
cat million-records.toon | toon --decode > output.json

Memory efficiency:

  • Encode (JSON → TOON): Streams TOON lines to output without full string in memory
  • Decode (TOON → JSON): Uses the same event-based streaming decoder as the decodeStream API in @toon-format/toon, streaming JSON tokens to output without full string in memory
  • Peak memory usage scales with data depth, not total size
  • When --expand-paths safe is enabled, decode falls back to non-streaming mode internally to apply deep-merge expansion before writing JSON

[!NOTE] When using --stats with encode, the full output string is kept in memory for token counting. Omit --stats for maximum memory efficiency with very large datasets.

Key Folding (Since v1.5)

Collapse nested wrapper chains to reduce tokens:

Basic key folding

# Encode with key folding
toon input.json --key-folding safe -o output.toon

For data like:

{
  "data": {
    "metadata": {
      "items": ["a", "b"]
    }
  }
}

Output becomes:

data.metadata.items[2]: a,b

Instead of:

data:
  metadata:
    items[2]: a,b

Limit folding depth

# Fold maximum 2 levels deep
toon input.json --key-folding safe --flatten-depth 2 -o output.toon

Path expansion on decode

# Reconstruct nested structure from folded keys
toon data.toon --expand-paths safe -o output.json

Round-trip workflow

# Encode with folding
toon input.json --key-folding safe -o compressed.toon

# Decode with expansion (restores original structure)
toon compressed.toon --expand-paths safe -o output.json

# Verify round-trip
diff input.json output.json

Combined with other options

# Key folding + tab delimiter + stats
toon data.json --key-folding safe --delimiter "\t" --stats -o output.toon

Why Use the CLI?

  • Quick conversions between formats without writing code
  • Token analysis to see potential savings before sending to LLMs
  • Pipeline integration with existing JSON-based workflows
  • Flexible formatting with delimiter and indentation options
  • Key folding to collapse nested wrappers for additional token savings
  • Memory-efficient streaming for both encode and decode operations - process large datasets without loading entire outputs into memory

Related

License

MIT License © 2025-PRESENT Johann Schopplich