The repo is versioned based on SemVer 2.0 using the tiny-but-mighty MinVer from @adamralph. See here for more information on how it works.
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
The Unreleased section name is replaced by the expected version of next release. A stable version's log contains all changes between that version and the previous stable version (can duplicate the prereleases logs).
7.0.0 - 2025-11-04
proIndexer: Template demonstrating a reactor app that maintains a summarized form of an Aggregate's state asRollingStatein a separatedViewsContainer, withsnapshotandsyncsubcommands #132proIndexer: Addedexportandstatscommands; Added file source support #138
- Target .NET 8 SDK; Target
net8.0for EXEs #136 - Target
Equinoxv4.0.0,Propulsionv3.0.0,FsCodecv3.0.0#136 - Target
Arguv6.0.14#135 eqxShipping: Clarified reactor logic (removedisValidTransitionanti-pattern) #137
proCosmosReactor: Extended/split to becomeproIndexer#132
6.3.1 - 2023-06-12
6.3.0 - 2023-06-08
- Target
Equinoxv4.0.0-rc.10,Propulsionv3.0.0-rc.5#128 module Config->module Store/module Factory#128
6.2.0 - 2023-01-23
proHotel: Process Manager based Reactor with Unit and Integration tests wired for MemoryStore, DynamoStore and MessageDb #127
- Target
Propulsionv3.0.0-rc.2#129
6.1.0 - 2022-12-23
proDynamoStoreCdk: AWS CDK wiring forPropulsion.DynamoStore.IndexerandNotifier#125
proIndexer: Generalized intoproDynamoStoreCdk#125
6.0.0 - 2022-09-16
eqxShipping:DynamoStoreandEventStoreDbsupport and Reactor Integration test #121eqxShipping: UsePropulsion.MemoryStore'sAwaitCompletion#121eqxShipping: UsePropulsion.DynamoStore+EventStoreDb'sAwaitCompletion#121proProjector,proReactor: Add, standardizecosmos,dynamo,esdb,sss#122eqxwebcs: Removed lots of boilerplate/wiring (by usingDeciderCore) #122eqxweb: Adddynamo#122
- Target
Equinoxv4.0.0-rc.1,Propulsionv3.0.0-beta.4,FsCodecv3.0.0-rc.7.1,net6.0#122 - All EventStoreDB templates (except
proSync) now use the*.EventStoreDbedition (which usesgrpc) #122
eqxProjector --source cosmos --kafka --synthesizeSequence: Removed custom mode #122proReactor: remove--filter(seeproSync) and--changeFeedOnly(seeproReactorCosmos) #122
5.3.0 - 2022-07-19
eqxShipping: Cosmos Reactor Integration test #116proIndexer: Propulsion.DynamoStore.Lambda AWS CDK wiring #120
- Target
Equinoxv3.0.7 - Align with v4 Transact APIs #117
5.2.1 - 2022-03-11
- Demonstrate
TransactWithimplementation 'pattern' #113
- Target
Propulsionv2.12.2,Equinoxv3.0.6#111 #114 eqxPatterns: ExtractExactlyOnceIngester#110- Target
FsCodec.SystemTextJson.* v2.3.2#112
5.2.0 - 2021-12-20
- Use
module Configpattern #104 proReactorCosmos: AddReactorMetrics#106feedSource,feedConsumer: Add metrics wiring #109MemoryStoreProjector: Add logging of UTF-8 encoded JSON bodies in #105
- Remove usage of
type CommandDUs #103 - Target
Equinoxv3.0.5,Propulsionv2.12.0-rc.2 - Target
Destructurama.FSharpv1.2.0,Serilog.Sinks.Asyncv1.5.0,Serilog.Sinks.Consolev4.0.0#101
5.1.0 - 2021-10-19
proCosmosReactor: Template for simplified, same-container Cosmos-based reactions #93 🙏 @ragiano215periodicIngester: Template illustrating usage ofPropulsion.Feed.PeriodicSource#96
- Added defaulting of 1 min for lag reporting frequency to all Cosmos consumers #95
eqxPatterns: replace best effort deduplication pattern with exactly-once ingestion #94- Target
Propulsionv2.11.0,Equinoxv3.0.4#101 - Target
Destructurama.FSharpv1.2.0,Serilog.Sinks.Asyncv1.5.0,Serilog.Sinks.Consolev4.0.0#101
- Fix CI to stop emitting builds with incorrect
AssemblyVersion 1.0.0.0(updated MinVer to2.5.0) - Update global.json to use SDK version
5.0.200
5.0.0 - 2021-06-22
- Target
Propulsionv2.11.0-rc2,Equinoxv3.0.1#91 - Target
Destructurama.FSharpv1.1.1-dev-00035
4.12.0 - 2021-06-02
eqxPatterns:Period: Skeleton Deciders+Tests forPeriodwith Rolling Balance #89eqxPatterns:Series+Epoch: Skeleton Deciders+Tests for deduplicated ingestion of items #89eqxProjector --source cosmos --kafka --synthesizeSequence: Sample code for custom parsing of document changes #84feedApi: Template for a Web API serving a feed that can be tracked by afeedConsumer#88feedConsumer: Template for Feed Consumer tracking afeedApi#88proArchiver: Parameterize max Sync batch size limit, default to 512KiBproAchiver,proPruner,eqxWeb,eqxWebCs: Addedprometheus-netintegration
- Clean up configuration management #87
proAchiver,proPruner: TargetEquinoxv3.0.0,Propulsionv2.10.0- Target
Propulsionv2.10.0,Equinoxv2.6.0/3.0.0
4.11.0 - 2020-11-04
proArchiver: CosmosDB ChangeFeedProcessor that syncs events from specified Hot Container's categories into a Warm Container #79proPruner: CosmosDB ChangeFeedProcessor that prunes events from a Hot Container based on Expiration status determined by inspecting the Warm version of the Events synced by theproArchiver#79
- Cleaned and moved
Logginglogic out toInfrastructure.fs#76 🙏 @enricosada - Polished
SemaphoreSlimextensions - Target
Propulsionv2.9.0,Equinoxv2.3.0
4.10.0 - 2020-07-27
eqxShipping: Unit and integration tests #70
- Target
Propulsionv2.8.0,FsKafkav1.5.0#78
4.9.0 - 2020-06-10
- Update to Equinox.* v
2.1.0, Propulsion.* v2.7.0
4.8.0 - 2020-06-05
proProjector: Add EventStore source #73
- Cleanup
eqxShipping#71
4.7.2 - 2020-05-20
- Target
Propulsionv2.6.0,FsKafkav1.4.3
4.7.1 - 2020-05-16
- Target
Propulsionv2.5.2,FsKafkav1.5.0-beta.1
proReactor,proSync: Fixed Default ES TCP port to 1113 #69 🙏 @svairagade
4.6.0 - 2020-04-27
tests/Equinox.Templates.Tests: allow repo to validate integrity of templates within #67 #2proReactor: Add arguments to facilitate projecting from a different database than that used to transact #62 🙏 @svairagadeeqxShipping: AddReservedevent/phase toeqxShipping#63- Added exception logging (as forced by abstract methods in
Statstypes) #66
- Target
Propulsionv2.4.3,FsKafkav1.4.1#64 #66 proReactor,proSync: Clean upCosmosContextandCheckpointsmanagement #58
4.5.0 - 2020-04-10
- DRY'd handling of
MissingArginConfiguration.initialize
4.4.2 - 2020-04-04
- Added missing catch for
MissingArgexceptions in allmains #61 🙏 @wantastic
4.4.1 - 2020-04-01
- Clarified role of
VerboseConsoleargument for templates involving ChangeFeedVerbose (by renaming toCfpVerbose)
4.4.0 - 2020-03-27
proReactor: Added--kafka --blankmode illustrating a simple publisher #59
proReactor: Flip default to omitting filtering logic (--noFilteris now--filter, defaulting to omitting the logic)
proReactor: Fixed CFP logging omissionproReactor: Wired producer stats emission for--kafkamodes
4.3.0 - 2020-03-12
StatsandOutcomemanagement cleanup #57
4.2.0 - 2020-03-09
4.1.1 - 2020-03-06
- Trap
ArguExceptionfor invalid Argu options 🙏 @fnipo
MaxInflightMbof10 MiBinstead of measuring in GiB and defaulting to .5MaxConcurrentStreamsof8for ingesters that write to stores (was MaxDop 1024)
-proReactor - fixed runtime issue due to aliasing of cosmos parameter; simplified @fnipo #52
4.1.0 - 2020-03-03
- Applied
UseSerilogRequestLoggingineqxweb[cs] proReactormode for--source kafkaEventSpans
- Renamed
proReactor's--noEventStoreto--source changeFeedOnly
proReactor's--rawmode
4.0.1 - 2020-02-28
- Fix
eqxweb[cs]by addingAddNewtonsoftJsonin order to handle Records emitted in views
4.0.0 - 2020-02-25
- Target SDK v
3.1.101 - Target
netcoreapp3.1#9 #48 - Merge
proSummaryProjector,proAllProjectorto formproReactor#49 - Add
--noFilter,--rawswitches toproReactor#49
3.12.0 - 2020-02-23
3.11.0 - 2020-02-19
- Add handling for
-TTCP/IP switch on EventStore args #46
- Target
Propulsion,Equinox,FsCodec.* v2.0.0
3.10.0 - 2020-02-08
- Add
proAllProjector#45
- Target
Propulsion.* v2.0.0-rc3 proProjector: extractHandler.fs
- Fix compiler errors in
eqxwebcsre #44 - Removed impossible cases in
Examples.fs
3.9.0 - 2020-01-31
- Apply encapsulation techniques from https://github.com/jet/FsCodec#decoding-events in consumers #43
- Target
Equinox.* v2.0.0-rc9,Propulsion.* v2.0.0-rc1,FsCodec.* v2.0.0-rc3 - Standardize Aggregate layouts
3.8.0 - 2019-12-07
- Target Propulsion 1.5.0, FsKafka 1.3.0
- Use uppercase for switch arguments in commandline parsing
- Included stacktrace in Exception-exit logging
3.7.0 - 2019-11-14
- Target Propulsion 1.4.0, Equinox 2.0.0-rc8, FsCodec 1.2.1
3.6.1 - 2019-11-13
- Split out Settings initialization #34
summaryConsumer: Target FsCodec 1.1.0 to simplifyupfunction #32trackingConsumer: switch serializer to FsCodec #35- use
-gfor ES and CosmosConsumerGroupNamevalues #37 summaryProjector: UseAllowStalefor CheckpointSeries as should only typically run single instance- Removed anonymous records usage to support usage with v
2.1.504SDK
3.6.0 - 2019-10-17
- Target Propulsion 1.3.0, Equinox 2.0.0-rc7, FsCodec 1.0.0
3.5.0 - 2019-10-11
- EventStore source support for
summaryProjector#31
- Target Propulsion 1.2.1 (minor change to accommodate signature change in .EventStore checkpoints)
- Lots of consistency + layout work resulting from porting work
3.4.1 - 2019-10-05
- Naming consistency and generalizations extracted from porting work.
3.4.0 - 2019-09-18
trackingConsumertemplate providing a baseline for projecting accumulating updates across autonomous bounded contexts: #30 @luo4neck
- Significant reformatting and consistency updates in preparation for adding ES support for
summaryProjectorin #31
3.3.2 - 2019-09-15
- Target Propulsion 1.2.0 (minor breaking change in source due to parameter reordering)
3.3.1 - 2019-09-08
- Target FsCodec 1.0.0-rc2, Equinox 2.0.0-rc6, Propulsion 1.0.2-alpha.0.1
3.3.0 - 2019-09-03
summaryProjector,summaryConsumertemplates providing a baseline for projecting summaries between autonomous bounded contexts: #29 @fnipo
3.2.0 - 2019-08-31
- Target
Propulsion.*1.0.1,Equinox.*2.0.0-rc4(handling name changes, esp wrt Collection->Container terminology) #28 - Target
Propulsion.*1.1.0,Equinox.*2.0.0-rc5,FsCodec.*1.0.0-rc1, simplifying Codec logic
- Removed various over-complex elements of samples
3.1.0 - 2019-07-05
propulsion-sync: Support emission of select events direct to Kafka #26
- Target
Propulsion.*1.0.1-rc8 EQUINOX_KAFKA_* ->PROPULSION_KAFKA_*
- Removed reliance on
IEnumerable<IEvent>inRenderedSpanandStreamSpan
3.0.3 - 2019-07-02
- Add
Publisher.fssample toproConsumer - Simplify
proConsumerExamples.fs
- Target
Equinox.*2.0.0-rc2,Propulsion.*1.0.1-rc5
3.0.2 - 2019-06-19
-
proSynchas EventStore Sink support viacosmos...escommandline option #23 -
proSynchas EventStore Source support viaes...cosmoscommandline option #16 -
proConsumeroffers aStreamSpan-based API for ordered, de-deduplicated consumption without concurrent executions at stream level #24 -
proConsumersummarizes processing outcomes in its examples using new support for same inPropulsion.Kafka#25 -
proConsumer -n's offers a parallel mode that runs all projections in parallel without constraints (or need to synthesize streams) #24
eqxsyncrenamed toproSynceqxProjectorsplit toproProjectorandproConsumereqxtestbed,eqxweb,eqxwebcsnow targetEquinox 2.0.0-rc1proConsumer,proProjector -know targetJet.ConfluentKafka.FSharp+Propulsion.Kafkav1.0.1-rc3#24proSyncnow targetsPropulsion.Cosmos,Propulsion.EventStorev1.0.1-rc3#24
2.2.2 - 2019-05-17
dotnet new eqxprojectoruses separated read/write/progress pipeline #22
dotnet new eqxprojector -know targetsJet.ConfluentKafka.FSharp 1.0.0-rc7(which targetsConfluent.Kafka 1.0.0,librdkafka 1.0.0)dotnet new eqxsyncuses separated read/write/progress pipeline #21- targets
Equinox 2.0.0-preview8
dotnet new eqxprojectorcorrectly handles progress writing #22
2.1.2 - 2019-04-15
dotnet new eqxsynchas separated processing for progress computation, progress writing and batch loading (this also happens to be the only way in which to balance throughput with correctness in the context of a ChangeFeedProcessor) #19dotnet new eqxsyncseparates out notion of theCosmosIngesterandProgressBatcherand their respective tests #20
dotnet new eqxetlis nowdotnet new eqxsyncdotnet new eqxsyncnow supports command-line category white/blacklist #18dotnet new eqxsyncnow supports command-line selection of anauxcollection in either thesourceor destination collections #18- targets
Equinox.* v2.0.0-preview5 dotnet new eqxprojectornow targetsJet.ConfluentKafka.FSharp 1.0.0-rc3(which targetsConfluent.Kafka 1.0.0-RC4,librdkafka 1.0.0)
2.0.0 - 2019-03-26
dotnet new eqxprojectortemplate, providing a CosmosDbChangeFeedProcessorhost app, with or without a Kafka Producer and Kafka Consumer host app using theJet.ConfluentKafka.FSharpwrapper forConfluent.Kafkav1.0.0-beta3#11dotnet new eqxtestbedtemplate, providing a host that allows running back-to-back benchmarks when prototyping models, using different stores and/or store configuration parameters #14dotnet new eqxetltemplate, providing a CosmosDbChangeFeedProcessorthat ingests/transforms/filters documents from a source store, feeding events (consistently) into anEquinox.Cosmosstore #17
dotnet new eqxwebnow uses Anonymous Records syntax HT @ameier38dotnet new eqxprojectornow usesJet.ConfluentKafka.FSharp 1.0.0-preview2(which usesConfluent.Kafka 1.0.0-RC1)
1.2.0 - 2019-02-06
dotnet new eqxwebnow uses FSharp.UMX to make Id types more succinct #12- Target Equinox 1.0.4-rc1, which entails minor source changes to both C# and F# #12
- Fix project type guids to render C# projects (was showing F# logo) @aarondandy #8
1.1.1 - 2019-01-17
-
C# port of template -
dotnet new eqxwebcs, prompting cleanup work in jet/equinox#81 #5Thanks to @aarondandy for early legwork
Thanks to @mcintyre321 for excellent direct and indirect suggestions regarding how to tidy the Domain implementations
- F# template has been renamed to: eqxweb (was
equinoxweb)
(For information pertaining to earlier releases, see release notes in https://github.com/jet/dotnet-templates/releases and/or can someone please add it!)