Skip to content

Releases: vihren-dev/vihren

Vihren v0.3.0: Large Durable Values For Go And Temporal Agents

Choose a tag to compare

@tzanko-matev tzanko-matev released this 13 Jul 13:19

Vihren v0.3.0: Large Durable Values For Go And Temporal Agents

Vihren v0.3.0 adds typed claim-check storage for values that should not travel
through Temporal workflow history as raw bytes. Activities can offload large
values, workflows can route small typed handles, and downstream activities can
resolve the bytes only when they need them.

This release also moves the Go module to its permanent vanity path:
vihren.dev/vihren.

Install

Requires Go 1.26 or newer.

go get vihren.dev/vihren@v0.3.0
go install vihren.dev/vihren/cmd/vihren-gen@v0.3.0

Highlights

  • blob.Value[T] carries either an inline value or a typed reference to
    offloaded bytes.
  • blob.Inline, blob.Offload, and blob.OffloadWithThreshold make the
    storage decision explicit at activity boundaries.
  • blob.Value[T].Resolve resolves activity-side values only where the bytes
    are needed.
  • blob.GetValue[T] and the generated blob.get activity support the less
    common case where workflow code must read an existing reference.
  • The local backend stores content-addressed values on the filesystem with
    SQLite metadata and owner information.
  • embeddedtemporal.WithLocalStorage configures the same local backend for
    Temporal native ExternalStorage and activity-side blob values.
  • examples/conversationstorage demonstrates composing small handles instead
    of repeatedly storing a growing conversation transcript.

Module And Package Migration

The module path changed from:

github.com/vihren-dev/vihren

to:

vihren.dev/vihren

Public packages are now rooted at blob, embeddedtemporal, and
toolcontract. The old platform/... wrappers are not part of v0.3. Update
imports and install commands when upgrading from v0.2.

Storage Model

Temporal native ExternalStorage handles large payloads that workflow code
reads normally. Typed blob.Value[T] handles cover the complementary path:
large activity values that workflow code only routes between steps. Both paths
can share one DataConverter-aware local backend.

The explicit blob reader/writer APIs cannot currently propagate Temporal's
activity serialization context automatically. DataConverters whose encoded
bytes depend on that context may therefore produce different content IDs
across paths even when their logical values match.

Current Limitations

  • The release includes a local filesystem/SQLite backend only; there is no
    cloud object-storage backend yet.
  • Garbage collection and ownership transfer are not implemented.
  • Temporal ExternalStorage is currently a Public Preview Temporal feature.
  • Vihren does not yet provide complete agent-state or provenance management.

Example

Run the released conversation-storage demonstration with:

go run vihren.dev/vihren/examples/conversationstorage/cmd/conversationstorage-demo@v0.3.0

The example compares a conversation made of independently stored typed values
with a growing transcript relying only on Temporal external storage. It shows
why composing small durable handles avoids repeatedly writing all earlier
large message bodies.

Validation

The release candidate is public commit af050c4bd18a. It is generated-code
clean, builds with GOWORK=off, passes vet and the complete public test suite,
passes the private integration suite, and contains none of the deferred lint,
FCA, IDE, or private repository surfaces.

v0.2.0

Choose a tag to compare

@tzanko-matev tzanko-matev released this 30 Jun 11:24

Highlights

Vihren v0.2.0 extends the public code generator support for asynchronous Temporal workflow execution. Generated async workflow clients now return typed run handles such as HelloWorkflowRun instead of raw client.WorkflowRun.

Breaking change

  • Client.<Workflow>Async now returns a generated typed run handle.
  • Migrate async result waits from run.Get(ctx, &out) to out, err := run.Get(ctx).
  • The generated run handle still exposes GetID() and GetRunID() for Temporal workflow identity access.

Other changes

  • Generated RegisterActivities and RegisterWorkflows now use minimal package-local registry interfaces.
  • Combined generated Register still accepts Temporal worker.Registry.

Install

go install github.com/vihren-dev/vihren/cmd/vihren-gen@v0.2.0

v0.1.0

Choose a tag to compare

@tzanko-matev tzanko-matev released this 29 Jun 11:05

Vihren v0.1.0 is the initial public release.

This release focuses on:

  • typed Temporal workflow and activity code generation with vihren-gen;
  • runnable Go examples for generated and plain Temporal workflows;
  • an embedded Temporal runtime for local demos and single-process development;
  • a cleaned public release surface with CI covering generation, vet, and tests.

Install:

go get github.com/vihren-dev/vihren@v0.1.0
go install github.com/vihren-dev/vihren/cmd/vihren-gen@v0.1.0