Skip to content

Releases: elide-dev/truffledata

TruffleData 0.6.0

Choose a tag to compare

@sgammon sgammon released this 05 Nov 04:47
0ff30da

TruffleData 0.6.0

Buffa native index entries shrink from 32 to 24 bytes, reducing storage per entry
and capacity slot by 25%. This is an index-memory improvement, not a claim of
25% lower total message memory or faster decoding. Paired Linux/SVM measurements
do not establish a throughput improvement; Java allocation is unchanged.

The native seam moves to ABI 7. Upgrade truffledata-protobuf-buffa, its bindings,
and native attachments together. Lengths and subtree ends use bounded 32-bit
representations; source offsets and scalar values retain their 64-bit representation.
Budget, overflow, ownership and lifetime checks remain enforced.

The release also refreshes the Bazel module lock and records profiling experiments
and a tighter single-CPU benchmark protocol. Rejected traversal and lookup
experiments are evidence only. The unfinished sparse-finalization experiment is
excluded.

Nine libraries and the BOM are published at https://maven.elide.dev, with source
JARs, POMs, checksums, and Linux x86-64 static/shared Buffa attachments. Java 25,
Elide GraalVM 25.5.5-elide.24, and Myna 0.8.0 remain unchanged. Experimental JSON
modules remain source-only.

Release preparation reuses the existing Rust, JVM, strict/non-strict, SVM, fallback,
and static-consumer acceptance results. Publication outputs and uploaded bytes are
checked; no new full verification suite or benchmark cycle is run.

See consumption instructions and
measurement evidence.

TruffleData 0.5.0

Choose a tag to compare

@sgammon sgammon released this 05 Nov 04:15
76654ff

TruffleData 0.5.0

This release separates the protobuf runtime from the optional protobuf-java bridge,
upgrades Myna to 0.8.0, and reduces repeated work in Buffa typed decoding.

  • truffledata-protobuf-runtime supplies plans, binary/text/JSON codecs, runtime
    descriptor compilation, and generated-record support without protobuf-java.
    truffledata-protobuf retains Message/descriptor compatibility and build-time generation.
  • Myna binding ABI 2 uses explicit native-call policies and packages its Native Image
    metadata. Buffa ships matching seam ABI 6 bindings and Linux x86-64 static/shared
    libraries. Parsing, allocation, cleanup, and Unicode calls retain VM transitions.
  • Buffa reuses bounded native index scratch, caches validated defaults, resolves nested
    profile links at plan construction, and avoids redundant standard-contract validation.
    Strict mode retains validation audits. Message/input ownership remains independent
    of reusable decoder scratch; lower budgets, failures, and close paths remain checked.
  • SIMD Unicode support, scoped-row detachment, and generated access improvements are
    included. Native index reuse retains memory per decoder and releases it on incompatible
    budgets, native parse failure, generic decoding, or decoder close.

Dedicated Linux/SVM paired measurements reach approximately 1.66–1.71 µs for Buffa
mixed ingestion with generated getters, versus approximately 0.66 µs for stock.
This is progress, not parity; Java allocation remains unchanged in the latest
profile-link experiment. Full measurements, controls, and uncertainty are recorded in
the comparison report.

Generic and typed simdjson foundations are included in source as experimental work.
JSON Maven artifacts are not published in this release. The newer 24-byte Buffa index
experiment is also excluded; this release retains the validated 32-byte ABI 6 index.

Nine libraries and the BOM are published at https://maven.elide.dev, including source
jars, POMs, checksums, and Buffa native attachments. Keep bindings and native libraries
at the same version. Java 25 / Elide GraalVM 25.5.5-elide.24 remains the target.
See publishing and consumption.

Release preparation uses the existing acceptance and coverage evidence; it does not
run a new benchmark cycle or full local verification suite.

TruffleData 0.4.0

Choose a tag to compare

@sgammon sgammon released this 04 Nov 06:08
v0.4.0
692f193

TruffleData 0.4.0

Generated protobuf contract accessors now expose primitive getters, presence checks,
and array/bytes lengths for owned and native borrowed rows. Schema-bound access keeps
plans and field ordinals available to Truffle partial evaluation while preserving
contract, ownership and lifetime checks.

Small native int32/int64 messages avoid general staging, temporary arrays and boxed
integers. JVM FFM and static SVM backends reuse result slots and release callbacks.
Separate scalar rows and static library exports preserve ordinary read specialization;
primitive-only static rows avoid payload-tracker allocation.

The SVM comparison suite adds 26 generated-getter cases, for 88 cases across ingestion,
AOT, interpreter, peak JIT and allocations. In the measured implementation:

  • Buffa nested interpreted reads: 51.79 to 22.58 ns/row with generated getters.
  • Owned generated scalar ingestion: 29.82 ns / 56 Java heap bytes versus stock 67.01 ns / 136 bytes.
  • Buffa scalar ingestion: 232 Java heap bytes through the generic API, 200 through generated getters, versus 320 for the 0.3.0 generic baseline.
  • Primitive-only SQL fixture allocation: 128 bytes instead of 160.

Stock remains faster in several binary paths. Java heap counters exclude native memory;
SQL comparisons cover driver decoders rather than complete queries. The charts retain
fork ranges and raw data, including earlier noisy runs. Measurements identify implementation
commit c8ef96a2b4bef30226999056341eb30735e6a6bc, included in this release.

Tests cover compiled generated access, dynamic layouts, closed views, defaults, presence,
duplicates, wrong contracts, cumulative budgets and native recovery after failures.
Allocation and coverage gates enforce these paths without lowering existing thresholds.

The runtime remains Java 25 and Elide GraalVM 25.5.5-elide.24. The distribution includes
eight Java libraries, the BOM, sources, checksums and Linux x86-64 Buffa native attachments.
See publishing and consumption, generated getters
and comparison measurements.

Benchmark JSON, the full table, SVG/PNG charts, and their provenance manifest are attached.

Validation: all release-PR checks passed, including coverage, real MySQL/Postgres drivers, static SVM/fallback, native JIT controls and CodSpeed. The publisher verified public artifact bytes and metadata. An isolated Maven consumer resolved all libraries from maven.elide.dev, matched their bytes to the release build, compiled and ran, and verified an explicit driver-version override.

TruffleData 0.3.0

Choose a tag to compare

@sgammon sgammon released this 04 Nov 03:31
v0.3.0
98a8c63

TruffleData 0.3.0

This release updates the pinned GraalVM toolchain and Maven runtime dependencies to
Elide GraalVM 25.5.5-elide.24. CE and EE distributions remain pinned by SHA-256
for Linux x86-64, Linux ARM64, and macOS ARM64. Consumers should align their
GraalVM runtime and guest language artifacts with this version.

The release retains the Buffa materialization optimizations, Java fallback, and
JVM/static SVM native integration introduced in 0.2.0. All eight library artifacts,
the BOM, and Linux x86-64 Buffa native attachments are published at maven.elide.dev.

See publishing and consumption and
comparison benchmarks for setup and measured results.

Validation: full JVM/static SVM checks, publication consumers, real driver acceptance,
coverage, JIT rejection controls, and CodSpeed passed. Public Maven artifacts and
metadata were verified, and an isolated public Maven consumer compiled and ran.

The release comparison cycle
passed all 62 cells. Raw JSON, the full table, interpreter/peak/allocation charts,
and their provenance manifest are attached below. Java allocation counts exclude
native memory; SQL cases measure INT4 decoders rather than complete queries.

TruffleData 0.2.0

Choose a tag to compare

@sgammon sgammon released this 04 Nov 03:10
v0.2.0
f3175df

TruffleData 0.2.0

This release adds optional Myna/Buffa native protobuf access for JVM and static SVM,
including schema-aware binary, ProtoJSON, protobuf text, and well-known-type handling.
Java fallback remains available. Schemas may come from generated contracts or runtime plans;
borrowed input and views have explicit, checked lifetimes.

Native materialization now defers eligible strings, shares empty views per owner, packs
small-message presence bits, reuses validated defaults, and transfers private repeated-field
arrays into final views. Owned protobuf decoding also avoids redundant metadata and array
copies. Nullable static integer reads retain primitive access and distinguish null from missing.

The comparison suite covers stock protobuf Java and MySQL/PostgreSQL INT4 decoder functions,
with interpreter, final-tier JIT, ingestion, and Java-heap allocation measurements. Full-message
protobuf consumption complements small projections. Stock mixed-message guest measurements
are explicitly marked as boundary projections because direct stock collection getters fail
the SVM JIT blocklist. SQL cases do not include servers, network transport, or full JDBC queries.
These results do not establish a universal performance win; native allocations are excluded
from Java-heap counters, and shared-runner timing ranges can be wide.

Published coordinates, native classifier instructions, and consumer checks are described in
publishing and consumption. Final release benchmark data and graphics are linked from
comparison results.

TruffleData 0.1.0

Choose a tag to compare

@sgammon sgammon released this 03 Nov 18:05
ccfd951

TruffleData 0.1.0 provides shared, contract-aware data access for Truffle languages, including static and dynamic records, JDBC integration, and lossless protobuf rows.

Lossless protobuf and generated contracts

  • ProtoPlan exposes immutable protobuf field metadata: wire types, unsigned widths, enum names/numbers, defaults, repeated/map shape, and nested message identities.
  • ProtoRow.has() preserves protobuf presence separately from readable defaults. Bytes use compact storage; enums retain numeric values, including unknown open-enum numbers.
  • Construct and decode native rows without retaining a protobuf Message or DynamicMessage. The bounded Java wire codec supports schema-backed and schemaless binary input on JVM and Native Image.
  • Supply schemas at runtime through descriptors/descriptor sets, or generate descriptor-free Java contracts at build time with protoc-gen-truffledata and the Bazel proto_contract_library rule.
  • Ingest MessageOrBuilder, ProtoJSON, and protobuf text format. Text ingestion uses protobuf-java host parsers and temporary builders; generated contracts and binary decoding do not require runtime descriptor initialization.

Validation

The shared JVM/Native Image matrix covers 453 operations: 400 successful compiled cases and 53 expected rejections. Both build-time JIT negative controls verify that violations are rejected. All 13 local targets passed, including native execution, allocation gates, and publication validation. Codecov receives LCOV and JVM/native JUnit reports; executable-method coverage is required for the access surfaces, including ProtoRow.

Static protobuf reads measured 0.000064 bytes/read. Decoding a 65,540-byte message allocated 66,632 bytes with static storage, within the enforced payload-plus-16-KiB budget. These measurements and compilation guarantees apply to the tested operation matrix and pinned runtime.

Release-source CI includes coverage, CodSpeed simulation, native JIT checks, real MySQL/PostgreSQL acceptance, and an isolated Maven consumer. The publisher reruns checks with the release version and verifies public jars, source jars, and POMs against staged bytes.

Consumption

Repository: https://maven.elide.dev

All six libraries and the BOM use version 0.1.0:

  • dev.elide:truffledata-core:0.1.0
  • dev.elide:truffledata-protobuf:0.1.0
  • dev.elide:truffledata-jdbc:0.1.0
  • dev.elide:truffledata-jdbc-sqlite:0.1.0
  • dev.elide:truffledata-jdbc-mysql:0.1.0
  • dev.elide:truffledata-jdbc-postgresql:0.1.0
  • dev.elide:truffledata-bom:0.1.0 (POM import)

Java 25 and Elide GraalVM 25.5.5-elide.5 are required. Gradle/Bazel consumers must also configure https://maven.elide.dev/gvm-elide/25.5.5-elide.5 for the pinned runtime artifacts.

Scope

This release addresses the API gaps in #1 without changing the existing generic tabular protobuf adapter. Lossless plan compilation explicitly rejects Editions, extension ranges, and MessageSet. Schemaless input preserves wire data without guessing declared field types; named text formats require a schema. Buffa/Myna is not bundled. Any future native backend must support static linkage on SVM and preserve Java-only fallback on both SVM and JVM.

TruffleData 0.1.0-alpha.5

Pre-release

Choose a tag to compare

@sgammon sgammon released this 03 Nov 16:32
b74fb22

TruffleData 0.1.0-alpha.5 strengthens compiled-access verification and fixes two issues exposed by the expanded tests.

  • Exercise 340 successful compiled cases and 47 expected rejections across JVM and Native Image, covering static and dynamic records, typed access, nulls, nested values, polymorphism, Protobuf, and JDBC cursors.
  • Require Native Image blocklist and never-part-of-compilation checks in CI and release publishing, with negative controls proving both checks detect violations.
  • Bound recursive array validation behind a Truffle boundary to keep live dynamic reads within the compilation graph budget. Explicit cursor close now discards buffered rows even after exhaustion has closed driver resources.
  • Gate executable-method coverage for key access classes; core line coverage is 94.5%, with typed accessor nodes and ExactNumber at 100%. Deliver coverage and JVM/native JUnit reports to Codecov, using OIDC when a token is unavailable.
  • Make allocation checks wait for compilation without relaxing their budgets.

All six libraries and the BOM are available from https://maven.elide.dev under dev.elide, version 0.1.0-alpha.5: truffledata-core, truffledata-jdbc, truffledata-jdbc-sqlite, truffledata-jdbc-mysql, truffledata-jdbc-postgresql, truffledata-protobuf, and truffledata-bom (POM only). Java 25 and the Elide GraalVM repository at https://maven.elide.dev/gvm-elide/25.5.5-elide.5 are required.

Release-source CI passed coverage, JVM/native JIT checks, CodSpeed simulation, and MySQL/PostgreSQL acceptance. Publishing reruns the release-version tests, native smoke test, and negative controls, and verifies public binary jars, source jars, and POMs against staged bytes before publishing metadata.

This remains an alpha API. JIT safety is verified for the tested operation matrix and pinned runtime; it is not a guarantee for arbitrary consumer code or runtime configurations. General consumer Native Image acceptance and actual Elide embedding remain ongoing work.

TruffleData 0.1.0-alpha.4

Pre-release

Choose a tag to compare

@sgammon sgammon released this 03 Nov 14:30
6117797

TruffleData 0.1.0-alpha.4 expands shared data contracts and strengthens compiled access across static, dynamic, nested, and polymorphic models.

  • Opt into translating supported Protovalidate annotations into presence, integer-range, Unicode string-length, byte-length, and repeated-length contracts. Integer ranges can narrow static storage. Both registered extensions and descriptor sets are covered; CEL and other unsupported rules still require a full validator.
  • Generate Protobuf Native Image reflection metadata from consumer message classes, including referenced messages, builders, enums, and descriptor support. The generated-metadata native smoke test passes.
  • Gate compiled reads across nullable static fields, nested dynamic mutation, multiple producer contexts, and saturated polymorphic caches, with allocation and AST-size budgets.
  • Ingest JDBC records directly into static storage, avoiding the intermediate cell array. Add scoped contract provenance and projection guards, plus serialized host cursor cleanup.

All six libraries and the BOM are published at https://maven.elide.dev, under dev.elide, version 0.1.0-alpha.4: truffledata-core, truffledata-jdbc, truffledata-jdbc-sqlite, truffledata-jdbc-mysql, truffledata-jdbc-postgresql, truffledata-protobuf, and truffledata-bom (POM only). Java 25 and the Elide GraalVM repository at https://maven.elide.dev/gvm-elide/25.5.5-elide.5 are required.

Validation: release-source CI passed tests and coverage, CodSpeed simulation, and MySQL/PostgreSQL acceptance. The release publisher runs all eleven ordinary test targets with the release version and verifies public binary jars, source jars, and POMs against staged bytes before publishing metadata.

This remains an alpha API. Static outer storage does not guarantee immutable nested values. Protovalidate translation is a supported structural subset, not full validation. General consumer Native Image acceptance and actual Elide embedding remain ongoing work; see the production ledger.

TruffleData 0.1.0-alpha.3

Pre-release

Choose a tag to compare

@sgammon sgammon released this 03 Nov 06:17
5c0be85

TruffleData 0.1.0-alpha.3 adds thin MySQL, PostgreSQL and SQLite integration artifacts plus a dependency-management BOM.

  • Use explicit driver adapters and prepared parameters; the database retains responsibility for query planning.
  • Consume directly into owned batch columns or static records, with compact binary snapshots and query-wide logical ingestion budgets.
  • Enable strict DataLibrary assertions in tests to audit nullity, types, widths and other established contracts.
  • Opt into single-execution cancellation. Failure tests cover resource cleanup, borrowed connection reuse, live server cancellation and MySQL streaming timeout recovery.
  • Run six real-driver JMH comparisons per driver with compiled-read checks, separate from the existing 20 CodSpeed simulation cases.

Published at https://maven.elide.dev under dev.elide, version 0.1.0-alpha.3: truffledata-core, truffledata-jdbc, truffledata-jdbc-sqlite, truffledata-jdbc-mysql, truffledata-jdbc-postgresql, truffledata-protobuf, and truffledata-bom (POM only). Import the BOM and select the integrations needed by your application. Java 25 and the Elide GraalVM repository at https://maven.elide.dev/gvm-elide/25.5.5-elide.5 are required.

Validation: full implementation CI passed tests/coverage, Codecov uploads, CodSpeed simulation, real MySQL/PostgreSQL acceptance and the isolated Maven BOM consumer. The release build passed all eleven ordinary test targets with versioned publication outputs. Public jars, sources and POMs were verified against staged bytes before metadata publication.

The SQLite elapsed baseline completed three forks per case. Query timing intervals overlap and batch/static allocation exceeds plain records; no general speedup is claimed.

This remains an alpha API, not production certification. Logical ingestion budgets do not bound driver buffers or retained heap. Hard deadlines, fetch cancellation guarantees, automatic context cleanup, pool ownership, general Native Image consumers and actual Elide embedding remain acceptance work. See the production ledger.

TruffleData 0.1.0-alpha.2

Pre-release

Choose a tag to compare

@sgammon sgammon released this 03 Nov 04:07
66804a9

TruffleData 0.1.0-alpha.2 adds richer data contracts, static Protobuf/JDBC layouts, end-to-end adapter examples, and continuous native simulation benchmarks.

  • Validate nullability, integer widths/ranges, float width, string/array lengths, element types, named records and decimal precision/scale. Known contracts select narrow static storage.
  • Build Protobuf layouts from generated message descriptors or descriptor sets, retaining nested type identities and presence semantics.
  • Exercise Protobuf, MySQL/Postgres-shaped JDBC fixtures, and real in-memory SQLite through GraalJS and GraalPy.
  • Track 20 fixed-work CodSpeed simulation cases in hardened, reusable CI. Bazel builds the native image through BuildBuddy RBE/RBC; JVM JIT/allocation gates and Codecov JUnit/coverage reporting remain separate.
  • Correct exact-number conversion and Unicode traversal boundaries exposed by Native Image reachability checks.

Compatibility: ProtobufAdapter.snapshot now returns AbstractRow to support both columnar and static representations. This remains an alpha API. MySQL/Postgres performance fixtures do not include real drivers, network or server execution; simulation measures AOT/interpreter instruction cost, not guest JIT throughput.

Published at https://maven.elide.dev:

  • dev.elide:truffledata-core:0.1.0-alpha.2
  • dev.elide:truffledata-jdbc:0.1.0-alpha.2
  • dev.elide:truffledata-protobuf:0.1.0-alpha.2

The pinned Elide GraalVM dependencies also require the repository at https://maven.elide.dev/gvm-elide/25.5.5-elide.5.

Validation: CI passed, including all 20 native simulation regions and successful uploads to CodSpeed and Codecov. CodSpeed performance analysis passed. Maven jars, source jars, POMs and metadata were verified against the public repository after publication.