Skip to content

Release digest for week of 2026-06-08 to 2026-06-15

  • Components (Release v2.4.0): Storybook manager UI (sidebar, toolbar) now automatically switches between dark and light themes to match the docs site theme toggle.
  • Components (Release v2.4.0): PrimeReact component themes inside stories also sync with the docs site theme, so components render in the correct light/dark palette when embedded.
  • Chronicle (Release v15.34.6): Geospatial type support in projections and read models — Point, LineString, and Polygon can now be used in events, projections, and read models with full type safety. Values keep their type in memory and are serialized as GeoJSON on the wire and in SQL storage (#3368)
  • Arc (Release v20.41.2): Specs covering automatic dependency-backed command validator execution in CommandScenario<TCommand>.
  • Arc (Release v20.41.2): Specs covering missing validator dependencies and manual concrete validator overrides.
  • Arc (Release v20.41.2): A spec proving validators can receive interface-backed scoped dependencies from scenario.Services without manually registering the validator.
  • Arc (Release v20.41.2): JavaScript command result specs covering primitive command responses.
  • Chronicle (Release v15.34.5): ComplexKeyDictionaryJsonConverterFactory to SerializationConfigurationExtensions and ChronicleClient for complex dictionary key serialization
  • Chronicle (Release v15.34.5): PointJsonConverter, LineStringJsonConverter, and PolygonJsonConverter to both serialization configuration points for geospatial type support
  • Fundamentals (Release v7.16.0): @cratis/fundamentals/reflection subpath export, allowing the Reflect metadata polyfill to be side-effect imported directly (#1079)
  • Arc (Release v20.40.2): Added a command-response patch path in ProxyGenerator.Specs to preserve non-empty primitive string responses when JS-side command results resolve to empty strings (#2285)
  • Arc (Release v20.40.1): Point, LineString, and Polygon MongoDB BSON serializers with GeoJSON format
  • Arc (Release v20.40.1): Entity Framework Core support for all three geospatial types with cross-database compatibility
  • Arc (Release v20.40.1): Comprehensive documentation for geospatial types in both MongoDB and Entity Framework
  • Arc (Release v20.40.1): ProxyGenerator support for Point as a known type
  • Fundamentals (Release v7.15.1): Point, LinearRing, LineString, and Polygon types in C# and TypeScript
  • Fundamentals (Release v7.15.1): GeoJSON converters: PointJsonConverter, LineStringJsonConverter, PolygonJsonConverter in both C# and TypeScript
  • Fundamentals (Release v7.15.1): TypeScript: JsonConverter<T> base class and converter infrastructure similar to System.Text.Json
  • Fundamentals (Release v7.15.1): TypeScript: Separate converter modules in json/ directory (DateJsonConverter, GuidJsonConverter, TimeSpanJsonConverter, PointJsonConverter, LineStringJsonConverter, PolygonJsonConverter, ValueMapJsonConverter)
  • Fundamentals (Release v7.15.1): Package.json module exports for @cratis/fundamentals/geospatial and @cratis/fundamentals/json following Arc’s pattern
  • Fundamentals (Release v7.15.1): Constructor validation: LinearRing minimum 4 points, LineString minimum 2 points
  • Fundamentals (Release v7.15.1): Ring closure validation: first and last points must be identical per GeoJSON spec
  • Fundamentals (Release v7.15.1): Comprehensive test coverage: 15 spec files covering read/write operations for all JSON converters (Date, Guid, TimeSpan, Point, LineString, Polygon, ValueMap) - 312 tests total
  • Fundamentals (Release v7.15.1): Documentation explaining what each geospatial type represents, with real-world use cases (location tracking, routes, zones, geofencing, agriculture, etc.)
  • Chronicle.TypeScript (Release v1.0.2): @passive decorator for model-bound projections, marking a read model that resolves on demand via immediate projection instead of materializing to a sink.
  • Chronicle.Elixir (Release v1.0.3): passive: true option for read models (use Chronicle.ReadModels.ReadModel, passive: true) and declarative projections. A passive projection does not actively observe events and registers against the None sink, so its instances are resolved on demand via immediate projection when looked up by id — useful for read models that only need to be queried by key, for example from within a reactor.
  • Arc (Release v20.40.0): ProxyGenerator: Maps Cratis.Geospatial.Coordinate to TypeScript Coordinate from @cratis/fundamentals package
  • Arc (Release v20.40.0): MongoDB: CoordinateSerializer serializing as BSON document with longitude and latitude fields
  • Arc (Release v20.40.0): EF Core: GetCoordinateType() mapping (PostgreSQL: jsonb, SQL Server: nvarchar(max), SQLite: text)
  • Arc (Release v20.40.0): EF Core: CoordinateColumn() and AddCoordinateColumn() migration extensions
  • Arc (Release v20.40.0): EF Core: AsCoordinate() value converter using JSON serialization
  • Arc (Release v20.40.0): Documentation: Comprehensive Entity Framework Core guide for Coordinate type (coordinate-conversion.md)
  • Arc (Release v20.40.0): Documentation: MongoDB serializer documentation for Coordinate type
  • Arc (Release v20.40.0): Documentation: Updated common column types reference to include CoordinateColumn()
  • Chronicle.Elixir (Release v1.0.2): New :default_sink_type_id option on Chronicle.Client for configuring which storage sink Chronicle uses for all read models and reducers — accepts a WellKnownSinkTypes atom (:mongodb, :sql, :in_memory, :not_set) or a raw string for custom sink types
  • Chronicle.Elixir (Release v1.0.2): Chronicle.Sinks.WellKnownSinkTypes module with named constants and a resolve/1 helper
  • Chronicle.TypeScript (Release v1.0.1): defaultSinkTypeId option on ChronicleOptions to configure where projections, reducers and read models are persisted (defaults to MongoDB; set to WellKnownSinks.SQL for SQL storage).
  • Chronicle.TypeScript (Release v1.0.1): Documentation for sinks and configuring the default sink type.
  • Chronicle (Release v15.33.9): Observable queries on the SQL and PostgreSQL backends now update automatically as the underlying data changes, without a manual page refresh.
  • Fundamentals (Release v7.15.0): Coordinate record in Cratis.Geospatial namespace with Longitude and Latitude properties
  • Fundamentals (Release v7.15.0): CoordinateJsonConverter for C# JSON serialization with property name conversion and validation
  • Fundamentals (Release v7.15.0): TypeScript Coordinate class with @field decorators and serialization support
  • Fundamentals (Release v7.15.0): JSON serializer type converters in TypeScript with validation requiring both coordinate properties
  • Fundamentals (Release v7.15.0): Comprehensive test coverage for serialization, deserialization, and error handling in both C# and TypeScript
  • Fundamentals (Release v7.15.0): Documentation for C# usage at Documentation/csharp/serialization/geospatial_coordinate.md
  • Fundamentals (Release v7.15.0): Documentation for TypeScript usage at Documentation/typescript/coordinate.md
  • Components (Release v2.4.1): Storybook now always opens with the sidebar, toolbar, and addons panel (Controls/Actions/Interactions) visible, regardless of any previous browser localStorage state.
  • Components (Release v2.3.1): Storybook documentation page now fills the entire content area with Storybook’s own story navigation and controls panel visible
  • Arc (Release v20.41.2): CommandScenario<TCommand> registers discovered validators in its isolated service provider so scenario validation matches runtime command execution without leaking validators or dependencies across scenarios.
  • Arc (Release v20.41.2): Existing concrete validator registrations are preserved; scenarios only add missing validator registrations, so custom factories/lifetimes and manual overrides still win.
  • Arc (Release v20.41.2): JavaScript CommandResult now preserves primitive command responses directly instead of passing strings, numbers, and booleans through object deserialization.
  • Arc (Release v20.41.2): Added a narrow CA2000 ownership suppression for the query-health observable wrapper so Release builds recognize the existing disposal ownership pattern.
  • Arc (Release v20.41.1): RouteAttribute in Cratis.Arc.Queries.ModelBound is renamed to PathAttribute, with the Route property renamed to Path. The old name was ambiguous when both ASP.NET Core and the model-bound namespace were in scope.
  • Chronicle (Release v15.34.5): Updated SerializationConfigurationExtensions._converters to include all Fundamentals converters while preserving existing converter ordering for correct JSON matching behavior
  • Chronicle (Release v15.34.5): Updated ChronicleClient.InitializeJsonSerializationOptions() to register the missing converters
  • Chronicle (Release v15.34.5): Kernel Serialization (Source/Kernel/Core/Setup/Serialization/SerializationConfigurationExtensions.cs):
  • Chronicle (Release v15.34.5): Central Orleans serialization configuration used across the kernel
  • Chronicle (Release v15.34.5): Client Serialization (Source/Clients/DotNET/ChronicleClient.cs):
  • Chronicle (Release v15.34.5): Client-side JSON serialization for events and commands
  • Arc (Release v20.41.0): @cratis/arc now sets up the Reflect metadata API automatically via the polyfill in @cratis/fundamentals — no separate reflect-metadata install or import is needed (#2286)
  • Arc (Release v20.40.2): Updated the ProxyGenerator.Specs command result patch script to handle primitive string responses in addition to existing object-based TimeSpan patch behavior (#2285)
  • Chronicle (Release v15.34.3): Kotlin client artifact ID corrected to chronicle-client-kotlin and POM metadata updated to match its purpose
  • Chronicle (Release v15.34.3): Kotlin publish pipeline updated to use publishAllPublicationsToMavenCentral task and correct signingInMemoryKeyPassword environment variable required by the vanniktech plugin for the new Central Portal API
  • Chronicle (Release v15.34.2): Upgraded protobuf from ~> 0.16.0 to ~> 0.17.0 and protobuf_generate from ~> 0.1.3 to ~> 0.2.1 in the Elixir client
  • Chronicle (Release v15.34.2): Upgraded Elixir to 1.18.4 and OTP to 27.3 in the publish-elixir-client workflow to satisfy the googleapis transitive dependency requirement (~> 1.18)
  • Chronicle (Release v15.34.0): Add BSON serializers for Point, LineString, and Polygon types
  • Chronicle (Release v15.34.0): Update BsonValueExtensions to handle serialization/deserialization of new geospatial types
  • Chronicle (Release v15.34.0): Update JSON schema generation to annotate geospatial types with proper format markers
  • Chronicle (Release v15.34.0): Rename all integration test artifacts from Coordinate-based to Point-based naming
  • Chronicle (Release v15.34.0): Update documentation to explain the new geospatial types and their serialization
  • Chronicle (Release v15.34.0): Point: Single geographic location (longitude, latitude)
  • Chronicle (Release v15.34.0): LineString: Connected series of points forming a line or path
  • Chronicle (Release v15.34.0): Polygon: Enclosed area with shell (outer boundary) and optional holes (inner boundaries)
  • Arc (Release v20.40.1): Reorganized MongoDB documentation with dedicated geospatial folder
  • Arc (Release v20.40.1): Grouped Entity Framework geospatial documentation under “Geospatial Types” section
  • Arc (Release v20.40.1): Updated type metadata for geospatial type recognition
  • Fundamentals (Release v7.15.1): C#: Coordinate renamed to Point (breaking change)
  • Fundamentals (Release v7.15.1): JSON serialization format changed from {"longitude":10.5,"latitude":20.3} to GeoJSON {"type":"Point","coordinates":[10.5,20.3]}
  • Fundamentals (Release v7.15.1): TypeScript: Refactored JsonSerializer to use centralized converter infrastructure with registered converters
  • Fundamentals (Release v7.15.1): TypeScript: All type converters moved from inline implementations to separate converter classes
  • Fundamentals (Release v7.15.1): Documentation enhanced to explain what each geospatial type represents (Point, LineString, Polygon) with comprehensive use case examples, not just serialization details
  • Chronicle.TypeScript (Release v1.0.2): Renamed WellKnownSinks.NotSet to WellKnownSinks.None.
  • Chronicle.TypeScript (Release v1.0.2): Passive projections and read models now register with the None sink so the kernel resolves them through immediate projection by key rather than reading an empty sink and returning null.
  • Chronicle.Elixir (Release v1.0.3): Renamed the well-known sink type :not_set to :none (string identifier "NotSet""None") to align with the kernel’s identifier for an observer that never writes to a materialized sink.
  • Arc (Release v20.40.0): Updated Cratis.Fundamentals package from 7.10.3 to 7.14.0
  • Arc (Release v20.40.0): Updated Cratis.Metrics.Roslyn to 7.14.0
  • Chronicle (Release v15.33.10): SinkDefinition.TypeId is now a string in the protobuf contracts, matching the C# SinkTypeId concept which changed from Guid to string. Also fixes the protobuf_generate version constraint in the Elixir contracts generator.
  • Chronicle.Elixir (Release v1.0.2): SinkDefinition.TypeId is now sent as a plain string instead of a Bcl.Guid, matching the updated Chronicle proto contracts
  • Chronicle.TypeScript (Release v1.0.1): WellKnownSinks now exposes string sink type identifiers (InMemory, NotSet, MongoDB, SQL) instead of Guids, matching the Kernel’s string-based sink type.
  • Chronicle (Release v15.34.6): Recursive / self-referencing read models now nest correctly — a child added to a self-referential collection keeps its own identity instead of being flattened or duplicated as a child of itself (#3336)
  • Chronicle (Release v15.34.6): Keyed update events (e.g. a rename) on a self-referencing read model now apply to the existing node at whatever depth it lives, instead of being promoted to a phantom top-level entry or lost (#3336)
  • Chronicle (Release v15.34.6): SQL-backed read models (SQLite, PostgreSQL, SQL Server) now correctly store and update nested collections, object-valued columns, and keyed child updates that previously resolved to the wrong sibling
  • Arc (Release v20.41.0): Proxy metadata reflection no longer breaks in the React Native Hermes engine, where the reflect-metadata UMD wrapper failed partway through initialization and left Reflect.getOwnMetadataKeys undefined (#2286)
  • Fundamentals (Release v7.16.0): Reflect.metadata is now provided by the metadata polyfill, so TypeScript’s emitDecoratorMetadata output records design:paramtypes and constructor parameter type reflection works (e.g. with tsyringe) (#1079)
  • Arc (Release v20.40.2): Geospatial types (Point, LineString, Polygon) and complex-key dictionaries now serialize correctly when using Arc’s JSON pipeline — PointJsonConverter, LineStringJsonConverter, PolygonJsonConverter, and ComplexKeyDictionaryJsonConverterFactory are included in all serialization configurations (#2285)
  • Arc (Release v20.40.2): Fixed CI regressions in nullable command execution scenarios where expected handler string responses were deserialized as empty values in ProxyGenerator.Specs (#2285)
  • Fundamentals (Release v7.15.2): PointJsonConverter now accepts both GeoJSON format { type, coordinates } and the C# default-serialized format { longitude, latitude }, fixing deserialization errors in frontends consuming Arc backends without the geospatial converters registered
  • Chronicle (Release v15.34.4): Corrected Kotlin client Maven artifact ID from chronicle-client-kotlin to chronicle-contracts
  • Chronicle (Release v15.34.4): Switched publish Gradle task to publishAndReleaseToMavenCentral to auto-release on Maven Central without a manual staging step
  • Chronicle (Release v15.34.2): Elixir client CI no longer fails with UndefinedFunctionError for Protobuf.Decoder.decode/2, which was removed in protobuf 0.14+ but still called by protobuf_generate 0.1.3
  • Chronicle (Release v15.33.12): Prevent keyed update events without explicit parent keys from being propagated to nested self-referential children definitions, which was causing stack overflow on tree traversal
  • Arc (Release v20.40.1): Removed deprecated Coordinate type references throughout codebase
  • Arc (Release v20.40.1): Fixed spec file structure for single-outcome tests (promoted from nested folders)
  • Arc (Release v20.40.1): Ensured all geospatial serializers use correct APIs for Polygon constructor (Shell + Holes)
  • Fundamentals (Release v7.15.1): ValueMapJsonConverter now properly registered and integrated with converter infrastructure (was created but not used)
  • Fundamentals (Release v7.15.1): Markdown lint errors (MD031/blanks-around-fences, MD024/no-duplicate-heading) in documentation files
  • Chronicle (Release v15.33.11): Resolving a passive read model by id now returns the projected instance via immediate projection instead of null. Passive read models were registered with the default sink (which they never write to), so look-ups read an empty sink and returned null, crashing reactors that consumed the result.
  • Chronicle (Release v15.33.9): SQL and PostgreSQL backends now deliver the current data when an observable query is first subscribed — the observers, namespaces, event types, webhooks and recommendations pages no longer show empty on these backends. With namespaces now delivered, the workbench resolves the current namespace so the observers list loads.
  • Chronicle (Release v15.33.9): The replayable-observers query no longer returns observers that have no state.
  • Arc (Release v20.41.0): The reflect-metadata dependency is gone from @cratis/arc.react.mvvm (#2286)
  • Fundamentals (Release v7.15.1): C#: Coordinate record and CoordinateJsonConverter (breaking change)
  • Fundamentals (Release v7.15.1): TypeScript: Coordinate class, CoordinateJsonConverter, and all related tests (breaking change)
  • Arc (Release v20.40.2): No security-impacting behavior changes in this PR (#2285)
  • No updates