ToonEx

Hex.pmDocumentationLicense: MIT

High-performance TOON (Token-Oriented Object Notation) encoder/decoder for Elixir with Phoenix Channels support.

TOON is a compact, human-readable data format optimized for LLM token efficiency.

Features

Installation

Add toon_ex to your dependencies in mix.exs:

def deps do
[
{:toon_ex, "~> 1.2"}
]
end

Quick Start

Encoding

# Nested object
ToonEx.encode!(%{"user" => %{"name" => "Bob"}})
# => "user:\n name: Bob"
# Arrays
ToonEx.encode!(["elixir", "toon"])
# => "[2]: elixir,toon"

Decoding

ToonEx.decode!("name: Alice\nage: 30")
# => %{"name" => "Alice", "age" => 30}
ToonEx.decode!("tags[2]: a,b")
# => %{"tags" => ["a", "b"]}

Phoenix Channels

# In your endpoint configuration
config :my_app, MyApp.Endpoint,
websocket: [
serializer: [{ToonEx.Phoenix.Serializer, "~> 2.0.0"}]
]

Or (if not using Phoenix for LiveView/Restful Apis)

config :phoenix, :json_library, ToonEx

The serializer supports both text and binary frame encoding for Phoenix Channels. Binary frames use a compact binary protocol for Phoenix.Socket.Message, Phoenix.Socket.Broadcast, and Phoenix.Socket.Reply structs, reducing payload size for high-frequency channels. Use fastlane!/1 for binary-encoded broadcasts and encode!/1 for binary-encoded replies.

See ToonEx.Phoenix.Serializer for details.

API Reference

Core Functions

Modules

Specification

This implementation follows TOON Specification v4.1.0 and is tested against official fixtures.

Testing

# Run all tests
mix test
# Run with coverage
mix coveralls
# Code quality checks
mix quality

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

MIT License - see LICENSE.