Skip to content

Release history

Every published version of the SDK, newest first. A release candidate (X.Y.Z-rc.N) is a pre-release: no installer picks it unless you ask for it.

Language Install a release Install a release candidate
Python pip install semq==X.Y.Z pip install semq==X.Y.ZrcN
Rust cargo add semq@X.Y.Z cargo add semq@=X.Y.Z-rc.N
Go go get github.com/The-SEMQ-Group/semq/bindings/go@vX.Y.Z go get github.com/The-SEMQ-Group/semq/bindings/go@vX.Y.Z-rc.N
TypeScript npm install @semq/sdk@X.Y.Z npm install @semq/sdk@next

See Compatibility and migration for what each version guarantees.

Version Date Type
1.0.0 2026-10-05 Release

1.0.0 - 2026-10-05

First public release.

Added

  • A core built around states with an identity. The C library owns every rule that determines bytes or verdicts, and the Python, Rust, Go and TypeScript/WebAssembly bindings are thin wrappers over its 67-function ABI. Five types and one service: CodecConfig (quant(dim, bins), phase(dim, sectors), orbit(dim, scale), a 13-byte canonical form), Codec (encode, decode, unpack), Encoding (sorted u64 or utf8 ids, canonical rows, a manifest, content_digest and state_id; save/load, concat, diff), Diff (added, removed, changed with hamming distances, manifest_changes, units, within, as_dict), Floor (measure from null diffs; bound to the config, id kind and reference it was measured against, with the number of nulls, a versioned schema for floor.json, and a verdict that fails on a changed encoder or encoder_revision) and BuildInfo. Six errors cover every failure: InvalidInput, Incompatible, FormatError, IntegrityError, Unsupported, Native.
  • Direct constructors in every binding: Codec.quant(dim, bins), phase and orbit (Rust Codec::quant, Go NewQuantCodec, TypeScript await Codec.quant) build the codec and its config in one call; CodecConfig remains for files and floors. In TypeScript they load the wasm module first, so they need no prior await load().
  • A one-line, human-readable form of Encoding, Diff and Floor, identical in every binding: Python str(), Rust Display, Go String(), TypeScript toString(). A Diff reads 1 of 3 rows changed: doc-3 (hamming 3). 0 added, 0 removed. Encodings compare by state_id: Python ==, Rust PartialEq, TypeScript Encoding.equals(other).
  • The .semq file format, version 2: config, ids, rows, manifest and two SHA-256 identities, validated in a fixed order before any allocation proportional to a declared size.
  • The input contract: unit-norm finite float32 rows with subnormals canonicalized to zero, so the bytes do not depend on the flush-to-zero state; the round-to-nearest mode is required.
  • Three operators. quant uses the derived range 2 / sqrt(dim). phase packs nibbles when sectors <= 16, and its angle polynomial stays within 0.04° of atan, keeping neighbouring inputs in order across the 45° diagonal. orbit fixes its alphabet at 19, with scale in [1, 2^30].
  • SIMD kernels: AVX2 and AVX-512 are selected only when the CPU and the operating system both support them, and every backend produces the same bytes as the scalar kernel.
  • A known-answer self-test: before creating a codec, the core checks the selected kernel against the scalar kernel's bytes for fixed rows, and SHA-256 against a known digest, and refuses to create the codec if either differs.
  • The semq command: show, diff [--floor], floor [--min-nulls N] (three null rebuilds by default), version, with exit codes 0/1/2.
  • Conformance vectors under tests/conformance/, generated by the core's test binary, cross-checked by an independent pure-Python reference for the non-kernel contracts, executed by every host, and gated in CI on every architecture (tools/conformance.py).
  • Two reference pages that state the contracts exactly: the core contracts (input rows, operator rules, diff, floor and the two report schemas) and the file format byte by byte.
  • Packaging: the static archive needs only libc and libm; the Rust crates bundle the core sources for static linking; the Go module carries the core too and cgo compiles it, so go get needs only a C compiler; the Python package ships one wheel per platform for Python 3.11 and newer, is tested on 3.11 to 3.14, and depends only on cffi and numpy.
  • Reader fuzzing, allocation-failure cleanup tests, compiled ABI and layout checks, and artifact consumers that install the packages without a checkout.
  • Licensing: the SDK is licensed under the PolyForm Noncommercial License 1.0.0. Every package ships LICENSE.md and NOTICE, and the npm package also ships THIRD_PARTY_LICENSES for the Emscripten runtime it bundles.