NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
A pure-Dart in-memory query engine for dashboard-style analytics over normalized record collections. Renderer-agnostic.
Last release 2 months ago
19 Jul 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 4 of 4 stable releases
Nothing withdrawn
no release was ever pulled
4 months old
4 releases · first in 2026
One column per month.
FIX: Small patch to filtering in streak tables (#3).
> Note: This release has breaking changes.
FEAT: Publishing initial version of analytics package (#1).
analytics_toolkit is a pure-Dart in-memory query engine for dashboard-style analytics over normalized record collections. Hosts declare data sources,
Initial release.
analytics_toolkit is a pure-Dart in-memory query engine for dashboard-style analytics over normalized record collections. Hosts declare data sources, build typed queries with measures and group-bys, and read back typed results — no chart library, no UI toolkit, no Flutter dependency. The host streams SourceRecords in; the executor returns AnalyticsResult out.
This release establishes the foundational API surface:
SourceDef and FieldDef for declaring sources, with a sealed TypedValue family (StringValue, IntValue, DoubleValue, BoolValue, EnumValue, DateTimeValue, DurationValue, list variants, NullValue) and a single canonical ordering via TypedValueOrdering.CountMeasure, FieldMeasure with a sealed FieldAggregation family — SumAgg, AverageAgg, MinAgg, MaxAgg, DistinctCountAgg, PercentileAgg — and StreakMeasure); up to three group-bys from a sealed group-by family (FieldGroupBy, TimeGroupBy); AND-combined record-level filters; bucket-level filtering via HavingClause; sorts with SQL-style null ordering; and derived operations (CumulativeSumOp, DeltaOp, MovingAverageOp) applied after aggregation.ScalarResult, SeriesResult, MultiSeriesResult, MultiMeasureSeriesResult, TableResult) with a unified BucketKey family and BucketKeyOrdering as the single source of truth for ordering.QueryValidator returns Result<Unit, AnalyticsError> with a closed AnalyticsErrorKind enum. The executor never throws for validation failures.AnalyticsExecutor.execute is a pure function: (query, records, sources) -> Result<AnalyticsResult, AnalyticsError>. Deterministic, no wall-clock reads, no hidden state.DatePresetResolver, configurable week-start and quarter-start, half-open [start, end) ranges, date-range projection via DateRangeProjector, and time-bucket densification so charts render without gaps.PairedQuerySpec for cohort comparison and rate displays, with alignability validation across sources.AnalyticsWidgetSpec plus WidgetPayloadCodec round-trip user-built widget specs to JSON with a schema-version guard for forward compatibility.SourceSnapshotCache for records-layer caching (in-flight dedup, scoped invalidation, discard-on-completion for stale fetches) and AnalyticsChange / AnalyticsChangeKind for typed listener invalidation.dart:core and dart:convert.nd AnalyticsChange / AnalyticsChangeKind for typed listener invalidation.dart:core and dart:convert.dart:convert.nd AnalyticsChange / AnalyticsChangeKind for typed listener invalidation.dart:core and dart:convert.dart:convert.nd AnalyticsChange / AnalyticsChangeKind for typed listener invalidation.dart:core and dart:convert.Your coding agent can read these notes before it upgrades. Set up the MCP server →