Alginte 0.10.0 Beta
Released 2026-09-03.
Alginte is in beta (0.x): configuration keys, the topology export format, and APIs may change between releases; breaking changes are called out in release notes with migration guidance. 0.10.0 contains no breaking changes.
The editor stops guessing
The stream builder's expression editors already knew a source record's shape — its schema fields, a real sample, what your map and filter expressions turn it into. 0.10.0 carries that knowledge through the places it used to stop.
Past an aggregate. An aggregate is now modeled as its
first fold — your initializer, then your adder over the sample — with
the same operators a deployed topology runs. Everything downstream of it
(toStream → map → sink) previews, completes and validates
against the accumulator's real shape, and #aggValue inside
the adder itself is bound to what the initializer builds instead of a
placeholder.
Through a join. A join has two inputs, so it gets two
lanes: each branch is evaluated on its own, #leftValue and
#rightValue are bound to their own branch's record, and
completions after #rightValue. describe the right record —
not the left one. The join drawer previews both inputs and the joined
output, and nodes downstream of a join get a chain like any other.
Both inputs are real records off orders and
shipments. The list after #rightValue. is the
shipment's fields, not the order's; out is the joiner run
over both; the node after the join inherits it. Nothing has been deployed.
Shown where the type is picked. On a path that re-types the record, the editor type hints now show the kind the sample preview observed — JSON (inferred) — instead of an inert String, following the precedence the builder always stated: declared output, then inferred, then your hint.
One serde list, everywhere. Every place you pick a serde
— node overrides, declared outputs, editor type hints, the produce and
consume forms, the stream properties' default.*.serde
suggestions — now reads from one catalog served by the running instance.
The canvas labels follow the catalog's wording (JSON Schema,
Avro Schema, Protobuf Schema); stored values are
unchanged.
Protobuf field access. value.get('field')
now evaluates on Protobuf records, in the editor and deployed alike, with
the same completions as Avro and JSON Schema. Protobuf hands you real
Strings and boxed numbers, so == against a literal just works.
Validation that agrees with deployment
The editor's inline verdicts are checked against a deployed topology by
a differential corpus. This release extends that corpus to every
stateful expression role — aggregate adders, reduce combiners, value
joiners, foreign-key extractors — and the rows it added caught and fixed
real disagreements: a false alarm on #aggValue map access, a
false pass on #rightValue.get(...) over a String stream, and
a missed verdict on a String method against an aggregate. The rule that
came out of it is simple and now enforced: the editor only claims an
expression will fail when every value it touched is a real sample.
The per-record cost of SpEL evaluation was measured along the way and published as numbers rather than opinions: about 150k records per second per thread, with neither hoisting nor compilation changing the picture enough to act on. Nothing changed in the runtime.
Fixes
- Completions no longer vanish intermittently while typing — an overlapping reply on the shared editor socket used to cost a keystroke's suggestions, and the same fault in syntax colouring is fixed with it.
- An under-configured processor node answers 400 naming what is missing instead of 500 with a stack trace; the same floor covers an empty configuration and every processor type.
- A partition with no leader — ordinary during a broker outage — no longer 500s the Partitions tab or the broker's topic listings.
- Table filters and page numbers on detail pages are scoped to the entity you set them on: a filter left on one topic's config no longer hides rows on every other topic.
- Errors during a live consume are delivered on an explicit, guaranteed shape, so the message viewer tells an error from a record reliably.
- The Schema Registry page's Create Schema form and the diff editor keep their drafts and subscriptions straight across type switches and re-renders.
For operators
-
The connector-create wizard's workaround for licensed connectors whose
upstream validation fails outright is now configuration:
alginte.connect.validation-license-topic-classeslists the connector classes it applies to (the two known classes by default), so a new connector with the same quirk needs a property, not a release. - Describing a topic is fully reactive on the server — the last blocking read on the topic-detail path is gone.
Get it
docker pull alginte/alginte:latest Full install guide in the documentation — or try the playground: one command, no Kafka needed.