Thanks for your interest in contributing! This guide shows how to propose changes to the specification.
| Change Type | Examples | Process |
|---|---|---|
| Fixes | Typos, grammar, broken links, clarifying wording | Direct PR |
| Test Fixtures | New test cases, edge case tests, validation tests | Direct PR (see tests/README.md) |
| Minor Changes | Spec clarifications that may affect implementations | Issue first → PR |
| Major Changes | New syntax, encoding rules, breaking changes | RFC process (see below) |
Changes that affect compatibility or core behavior need community discussion:
Adding new delimiter types (beyond comma/tab/pipe)
Example: Supporting semicolon as delimiter
Changing quoting or escape rules
Example: Adding \u0000 escape sequences
Example: Changing when colons require quotes
Modifying tabular detection logic
Example: Allowing non-uniform objects in tabular format
New data type normalization rules
Example: Handling Map or Set differently
Changing array header syntax
Example: Making field lists mandatory for all arrays
Typo: "recieves" → "receives" → Direct PR
Adding example for nested arrays → Direct PR
Clarifying ambiguous wording → Issue → PR
Expanding test coverage → Direct PR
Documenting existing edge case behavior → Issue → PR
For major changes requiring RFC:
- Create RFC Issue using the Feature Request/RFC template
- Discussion Period (minimum 1-2 weeks for community feedback)
- Decision (maintainers accept, reject, or request revisions)
- Implementation (create PR referencing RFC issue)
Test fixtures validate TOON implementations across languages. Add your test to tests/fixtures/encode/ or tests/fixtures/decode/, validate against tests/fixtures.schema.json, and submit a PR.
See tests/README.md for fixture structure and guidelines.
- Fork the repository and create a feature branch
- Make changes following SPEC.md style (RFC 2119 keywords, examples, precision)
- Update
CHANGELOG.mdwith your changes - Submit PR using the template and link related issues
Review process:
- Maintainers review and may request changes
- Breaking changes held until next major version
- Approved changes merged with version number assigned
TOON prioritizes (in order):
- Token Efficiency – Changes should maintain or improve token usage for LLM input
- LLM-Friendly Structure – Easy for LLMs to parse and generate (explicit markers are features)
- Simplicity – Prefer consistent rules over special cases
- Backward Compatibility – Breaking changes need strong justification
- Interoperability – Implementations must produce identical output for identical input
- Human Readability – Debuggable by humans despite machine optimization
These principles guide every decision. When in doubt, optimize for token efficiency first.
Follow SPEC.md conventions:
- RFC 2119 keywords: Use MUST/SHOULD/MAY correctly (see SPEC.md §1)
- Examples over prose: Show concrete input/output for complex rules
- Precision: Zero ambiguity – multiple implementations must agree
- Structure: Number sections, cross-reference related rules
- Line length: 80-120 characters for readability
- GitHub Issues: For bug reports and feature requests
- GitHub Discussions: For questions and general discussion
- Pull Requests: For code reviews and implementation discussion
This is a collaborative project. Current maintainers:
All maintainers have equal and consensual decision-making power. For major architectural decisions, please open a discussion issue first.
By contributing, you agree your contributions will be licensed under the MIT License.