Releases: blackwell-systems/gcf-python
v2.1.1
Patch release. Fixes encoder quoting for edge cases involving bracket-colon patterns in string values. 10M fuzz iterations, zero failures.
Full Changelog: v2.1.0...v2.1.1
v2.1.0
Spec v3.1 Conformance
Spec change
toolfield in graph profile header is now optional (SHOULD be present for MCP, not required)
Bug fixes
- Quote strings containing commas in scalar values
- Decode v2-format indented attachments in tabular rows
- Reject duplicate attachments on the same row
- Reject orphan attachments on rows without
^cells
Conformance
- 157/157 fixtures passing
- 23.25B+ round-trips verified across all 6 implementations, zero failures
Full spec release: gcf v3.1.0
v2.0.0: Inline Schema Encoding
v2.0.0: Inline Schema Encoding
The generic profile encoder now produces inline schema format for nested objects with 3+ scalar fields. This is a breaking change from v1.x output.
Breaking Changes
encodeGenericoutput format changed (inline schemas, no attachment indentation)- Decoders no longer accept v1.x indented attachment syntax
- Comma no longer quoted in pipe-delimited contexts (only in comma-delimited inline arrays)
- Strings starting with digits no longer quoted unless they match JSON number grammar
New Features
- Inline object schema (
^{fields}): nested objects encoded positionally - Shared array schemas: identical nested arrays omit field headers after first row
- 25.5% fewer tokens than TOON across 15 real-world datasets
Integrity
- 1B+ lossless round-trip iterations across 6 language implementations
- 100% comprehension accuracy on every frontier model tested
- 156 conformance fixtures passing
Full spec: https://github.com/blackwell-systems/gcf/releases/tag/v3.0.0
v1.0.1: CLI generic profile
- CLI:
encode-genericanddecode-genericsubcommands python -m gcfentry point- Both graph and generic profiles supported from the command line
gcf-python v1.0.0
SPEC v2.0 implementation
126/133 conformance fixtures passing (7 skipped: session, delta, binary UTF-8, negative zero, graph encode). 40M property-based round-trips with zero failures.
Breaking changes from v0.5.0
encode_genericemitsGCF profile=genericheaderdecode_genericrequiresGCF profile=header- Strings colliding with typed literals are quoted
- Full JSON string escaping and number grammar
-for null,~for absent,^for nested attachments##! summarytrailer replaces## _summary- Graph encoder emits
profile=graph
Install
pip install gcf-python==1.0.0
v0.5.1: docs update
What's new
Updated all documentation with multi-model benchmark data:
- 1,300+ LLM evaluations across 10 models, 3 providers, and 51 independent test runs
- 90.5% average comprehension accuracy (four models hit 100%: Sonnet, Gemini 2.5 Pro, Gemini 3.1 Pro, Gemini 3.5 Flash)
- 5/5 generation validity on every frontier model from Anthropic, OpenAI, and Google
- TOON's official decoder rejects LLM-generated output on 7 of 9 models tested
- GCF wins all 6 datasets on TOON's own benchmark
Full benchmarks: https://gcformat.com/guide/benchmarks.html
v0.5.0: Full round-trip + Generic streaming
What's new
decode_generic
Parse any GCF text back to native Python values. Works with both generic profile and graph profile payloads. Full round-trip: encode_generic -> GCF -> decode_generic.
from gcf import decode_generic
result = decode_generic(gcf_text)
# Returns dict, list, or primitivesGenericStreamEncoder
Zero-buffering streaming encoder for the generic profile. Write rows as data arrives with O(1) memory per row.
from gcf import GenericStreamEncoder
enc = GenericStreamEncoder(stream)
enc.begin_array('users', ['name', 'email', 'role'])
enc.write_row(['alice', 'alice@co.com', 'admin'])
enc.write_row(['bob', 'bob@co.com', 'user'])
enc.end_array()
enc.close() # emits ## _summary trailerAlso in this release
- Repositioned as drop-in JSON replacement for AI pipelines
- Generic profile documentation leads all examples
Full changelog: v0.4.0...v0.5.0
v0.4.0
StreamEncoder: zero-buffering streaming encode. write_symbol/write_edge emit immediately, close() emits trailer summary. O(1) memory, thread-safe.
v0.3.0
Primitive arrays inlined as name[N]: val1,val2,val3.
v0.1.3
Fixed
- Decoder rejects headers missing required
toolfield (conformance) - Escape newlines as
\\nin quoted strings inencode_generic
Docs
- README updated for PyPI discoverability (gcformat.com, proxy, vs-toon links)