Skip to content

Releases: blackwell-systems/gcf-python

v2.1.1

18 Jun 17:53

Choose a tag to compare

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

14 Jun 21:52

Choose a tag to compare

Spec v3.1 Conformance

Spec change

  • tool field 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

13 Jun 06:18

Choose a tag to compare

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

  • encodeGeneric output 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

10 Jun 19:30

Choose a tag to compare

  • CLI: encode-generic and decode-generic subcommands
  • python -m gcf entry point
  • Both graph and generic profiles supported from the command line

gcf-python v1.0.0

10 Jun 10:46

Choose a tag to compare

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_generic emits GCF profile=generic header
  • decode_generic requires GCF profile= header
  • Strings colliding with typed literals are quoted
  • Full JSON string escaping and number grammar
  • - for null, ~ for absent, ^ for nested attachments
  • ##! summary trailer replaces ## _summary
  • Graph encoder emits profile=graph

Install

pip install gcf-python==1.0.0

v0.5.1: docs update

06 Jun 22:40

Choose a tag to compare

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

06 Jun 06:04

Choose a tag to compare

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 primitives

GenericStreamEncoder

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 trailer

Also 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

06 Jun 01:59

Choose a tag to compare

StreamEncoder: zero-buffering streaming encode. write_symbol/write_edge emit immediately, close() emits trailer summary. O(1) memory, thread-safe.

v0.3.0

06 Jun 00:22

Choose a tag to compare

Primitive arrays inlined as name[N]: val1,val2,val3.

v0.1.3

05 Jun 05:25

Choose a tag to compare

Fixed

  • Decoder rejects headers missing required tool field (conformance)
  • Escape newlines as \\n in quoted strings in encode_generic

Docs

  • README updated for PyPI discoverability (gcformat.com, proxy, vs-toon links)