Download Latest Version V9.20.1 source code.zip (20.1 MB)
Email in envelope

Get an email when there's a new version of Marten

Home / V9.18.0
Name Modified Size InfoDownloads / Week
Parent folder
Marten 9.18.0 source code.tar.gz 2026-07-22 18.3 MB
Marten 9.18.0 source code.zip 2026-07-22 20.1 MB
README.md 2026-07-22 3.3 kB
Totals: 3 Items   38.4 MB 0

Marten 9.18.0 focuses on raw-JSON streaming endpoints for ASP.NET Core, server-side LINQ Select() projection, and continued event-store observability work.

ASP.NET Core streaming & pagination

  • StreamPaged<T> — stream a paged JSON envelope (pageNumber/pageSize/totalItemCount/pageCount/hasNextPage/hasPreviousPage/items) in a single round trip via a count(*) OVER() window column (#5014). Test coverage hardened to pin the camelCase wire contract, page-past-end behavior, and filtered totals (#5028).
  • StreamPagedByCursor<T> — keyset ("seek") pagination that costs the same regardless of depth, using an opaque continuation cursor (#5016). Now streams the raw, already-persisted data column byte-identical to StreamMany/StreamPaged (no hydrate + re-serialize) by reading the next cursor's ORDER BY key values off the same reader; a malformed client-supplied cursor now returns a clean 400 instead of a 500 (#5033).
  • ETag / If-None-Match (304) conditional-request support on StreamOne<T> and StreamAggregate<T> (#5015). StreamOne<T> now reads the document's mt_version inline in the same single round trip (no follow-up metadata query), and the where T : notnull constraint tightening was reversed (#5030).

LINQ

  • Simple Select() projections (x => new Dto { A = x.A, B = x.Nested.B }) now translate to a server-side jsonb_build_object(...) expression that is streamable as raw JSON, instead of hydrating the full document and projecting on the client (#5017). Value-preserving conversions — widening numerics (intlong/decimal), boxing to object, nullable wrapping, enum→integral under EnumStorage.AsInteger — stay translatable and streamable; only lossy/computed conversions fall back (#5032).
  • DCB tag operators usable in Where() over events (#5004).
  • AggregateToMany() LINQ operator — run an event query through a multi-stream projection (#5003).

Event store, projections & daemon

  • Marten.TimescaleDB extension — projection + document hypertables (#4995).
  • Extended-progression telemetry: batched per-flush heartbeat writes (#5008); fixed a shutdown telemetry race in extended_progression_batch_write (#5023); running_on_node write-path regression coverage (#5001 / [#5007]). The cross-repo running_on_node population under Wolverine-managed distribution is completed via JasperFx 2.34.0 + Wolverine.
  • Tenant-scoped event/tag explorer readsReadStreamAsync / GetRecentStreamsAsync overrides honor tenancy (#5020, [#5025]), plus a MultiStreamProjection stepthrough via the instrumented fold in EventStoreExplorer (#5002).
  • HighWaterHealthCheck scoped to owned databases, with per-tenant and ExternallyManaged daemon support (#4992).
  • Surface JasperFx's application-assembly-reuse warning (GH-3521) at startup (#5000).

Multi-tenancy & infrastructure

  • Token-capable maintenance connection for tenant database provisioning (#5006).
  • Docs: connecting to Azure Database for PostgreSQL with Entra ID / managed identity (#4993).

Dependencies

  • JasperFx / JasperFx.Events 2.34.0, Weasel 9.17.0.

Full changelog: https://github.com/JasperFx/marten/compare/V9.17.0...V9.18.0

Source: README.md, updated 2026-07-22