google/quiver-dart
58.4
Adequate · 19 September 2026
5.4k
lines of production code
Dart
primary language
1
measurement over time
What this system is
Quiver is a Dart utility library that provides a comprehensive suite of helper functions and data structures for common programming tasks. It offers modular capabilities for handling asynchronous streams, in-memory caching with LRU eviction, and advanced collection types like bidirectional maps and sorted sets. Additionally, it includes robust testing utilities for mocking time and verifying equality contracts, alongside string and pattern matching helpers.
How it got here
2013 — Initial library structure and feature implementation
21 changes.
This period established the foundational structure of the Quiver Dart utility library, organizing it into modular packages such as async, collection, and time. It introduced core features including iterable utilities, stream manipulation, caching mechanisms, and testable time classes, while simultaneously implementing comprehensive test suites for each module. The work also began deprecating legacy APIs in favor of modern Dart SDK features as the language evolved.
2014–2015 — FakeAsync and equality testing utilities
4 changes.
This period focused on enhancing the testing library with new utilities for asynchronous and equality testing. The FakeAsync class was introduced to allow deterministic testing of time-dependent code by faking timers and microtasks. Additionally, the areEqualityGroups matcher was added to validate equality contracts, accompanied by comprehensive test coverage for both features.
Features
Add Cache and MapCache with LRU support and concurrent load prevention
The library now includes a new \Cache\ abstract interface and a \MapCache\ implementation located in \lib/src/cache\. \MapCache\ provides an in-memory caching solution backed by a \HashMap\ or an \LruMap\ (Least Recently Used) for bounded memory usage, defaulting to 100 entries if no maximum size is specified. A key behavioral feature is the prevention of concurrent loads for the same key: if multiple callers request a key that is not yet cached, they all await the same future generated by the \ifAbsent\ loader, ensuring the loader runs only once per key and failed loads do not pollute the cache.
lib/src/cache · high confidence
Added FakeAsync testing utility for asynchronous code
Introduced the \FakeAsync\ class in \lib/testing/src/async/fake\_async.dart\, providing a mechanism to make time-dependent units testable by faking timer and microtask creation within a Zone. This allows test code to simulate the asynchronous passage of time via \elapse\ and synchronous passage via \elapseBlocking\, enabling deterministic testing of async logic without relying on real system time or scheduling.
lib/testing/src/async · high confidence
Added FakeStopwatch implementation for time-based testing
The testing library now includes a \FakeStopwatch\ class in \lib/testing/src/time/time.dart\ that implements the \Stopwatch\ interface. This allows tests to control time progression by supplying a custom function for the current time, enabling deterministic testing of code that relies on timing or duration calculations.
lib/testing/src/time · high confidence
Added areEqualityGroups matcher for testing equality contracts
The testing library now includes the \areEqualityGroups\ matcher, which validates that classes correctly implement \operator==\ and \hashCode\. Users can pass a map of equality groups to this matcher to verify that objects within the same group are equal to each other (and have equal hash codes), while objects in different groups are unequal, and that equality is idempotent and consistent across multiple checks.
lib/testing/src/equality · high confidence
Initial repository structure and documentation for Quiver Dart utilities
This change establishes the foundational structure of the Quiver Dart utility library. It introduces the Apache 2.0 license, copyright notices, and contributor lists, alongside comprehensive documentation in the README detailing the available libraries (async, cache, check, collection, core, iterables, pattern, strings, time) and testing utilities. It also configures the development environment with analysis options based on the recommended lints, a test configuration for Chrome, and Git attributes to enforce LF line endings.
(repo-wide) · high confidence
New async stream utilities and timer classes
The \lib/src/async\ library now includes several new utilities for stream manipulation and timing: \collect\ to stream future completions, \concat\ to sequentially merge multiple streams, \enumerate\ to pair stream items with their indices, \FutureStream\ to convert a future of a stream into a stream, \StreamRouter\ to split a stream based on predicates, \StreamBuffer\ to orderly read chunks from a data stream, \CountdownTimer\ for periodic countdown events, \Metronome\ for drift-corrected periodic time events, and \byteStreamToString\ to convert byte streams to strings.
lib/src/async · high confidence
New collection utilities and data structures
This release introduces several new collection types and utility functions to the library. Users can now use BiMap (with HashBiMap implementation) for bidirectional key-value mappings, LruMap (with LinkedLruHashMap) for size-limited caches using least-recently-used eviction, and TreeSet (with AvlTreeSet implementation) for sorted sets with bidirectional iteration. Additionally, Multimap is added to support mapping keys to multiple values, and utility functions listsEqual, mapsEqual, setsEqual, and indexOf are provided for comparing collections and finding elements by predicate.
lib/src/collection · high confidence
New delegating collection classes for Iterable, List, Map, Queue, and Set
The library now provides abstract base classes (DelegatingIterable, DelegatingList, DelegatingMap, DelegatingQueue, and DelegatingSet) that allow users to create custom collection types by delegating all standard methods to an underlying instance. This enables developers to extend or wrap standard Dart collections with custom behavior while maintaining compatibility with the core collection interfaces, though some newer Dart 2.0 methods (like cast, whereType, and addEntries) are currently unimplemented and will throw errors if called.
lib/src/collection/delegates · high confidence
New iterable utility functions and base classes
The \lib/src/iterables\ library now includes a suite of new functions for working with sequences: \concat\ merges multiple iterables, \count\ generates infinite numeric sequences, \cycle\ repeats an iterable infinitely, \enumerate\ pairs elements with their indices, \merge\ combines sorted iterables, \min\/\max\/\extent\ find extremal values, \partition\ splits iterables into chunks, \range\ generates numeric ranges, and \zip\ combines elements from multiple iterables. It also introduces \GeneratingIterable\ for creating lazy sequences from generator functions and \InfiniteIterable\ as a base class for infinite sequences that throw errors on finite-length operations.
lib/src/iterables · high confidence
New time utilities and Clock class for precise date arithmetic
This change introduces a new \Clock\ class in \lib/src/time/clock.dart\ that provides testable time functions, allowing users to control the current time for unit testing via custom \TimeFunction\ or fixed clocks. It adds methods for calculating past and future dates using both \Duration\ objects (\agoBy\, \fromNowBy\) and named parameters (\ago\, \fromNow\), as well as convenience methods for specific units (seconds, minutes, hours, days, weeks, months, years). The implementation includes robust date clamping logic in \util.dart\ to handle edge cases like leap years and varying month lengths when shifting dates. Additionally, \duration\_unit\_constants.dart\ provides pre-defined \Duration\ constants (e.g., \aDay\, \aWeek\) for easier time calculations.
lib/src/time · high confidence
Behavioural changes
Deprecation of legacy core utilities in favor of modern Dart SDK features
The core library now marks several legacy APIs as deprecated to encourage migration to standard Dart SDK capabilities. The \Optional\ class is deprecated with guidance to migrate to nullable types (\T?\), though it remains available for specific use cases like representing absent values in non-null APIs. Hash code helper functions (\hashObjects\, \hash2\, \hash3\, \hash4\) are deprecated in favor of \Object.hashAll\ and \Object.hash\. Additionally, the \firstNonNull\ utility is deprecated in favor of the null-coalescing operator (\??\) and \ArgumentError.checkNotNull\. These changes reflect the maturity of Dart's null safety and standard library features.
lib/src/core · high confidence
Library structure reorganized into modular exports
The library's public API has been reorganized from a single monolithic entry point into distinct, modular libraries (async, cache, check, collection, core, iterables, pattern, strings, and time). Users must now import specific modules (e.g., \package:quiver/async.dart\) rather than the previous general entry point, reflecting a shift toward a more granular and maintainable package structure.
lib · high confidence
Test coverage
Added test coverage for check and strings libraries; Added test suite for core utilities; Added tests for FakeAsync timer and time-elapse behavior; Added tests for MapCache behavior; Added tests for collection delegate classes; Added tests for the equality group matcher; Added unit tests for the Clock time provider; Consolidated test runner for the testing library; Initial release of testing utilities library; Initial test coverage for pattern utilities; Initial test suite for async utilities; Initial test suite for iterables library.
Dependencies
Initial release of Quiver utility library for Dart
This entry introduces the Quiver package, a collection of utility libraries for Dart designed to simplify usage of standard libraries and add new functionality. The initial version (3.2.3-wip) establishes a minimum Dart SDK requirement of 2.17.0 and includes a runtime dependency on the \matcher\ package (version ^0.12.10). Development tooling is configured via \dev\_dependencies\ on \lints\ (^2.0.0), \path\ (^1.8.0), and the \test\ package (^1.16.0).
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 58.
Lenses
- Code Health 88
- Architecture 97
- Maturity 43
- Readiness 69
- Security 61
- Domain Modelling 100
Changes since last survey
- 300 commits — 275 feature/other, 25 fixes
By area
- (root) — 139 commits
- lib/src — 88 commits
- .github/workflows — 14 commits
- tool/travis — 10 commits
- lib/testing — 9 commits
- test/async — 8 commits
- test/collection — 5 commits
- test/iterables — 5 commits
- lib/io.dart — 4 commits
- lib/pattern.dart — 3 commits
- lib/check.dart — 2 commits
- test/cache — 2 commits
- tool/travis.sh — 2 commits
- (repo) — 1 commit
- .github/dependabot.yml — 1 commit
- .github/no-repsonse.yml — 1 commit
- lib/async.dart — 1 commit
- lib/collection.dart — 1 commit
- lib/mirrors.dart — 1 commit
- lib/strings.dart — 1 commit
Notable commits
- fix: Add changelog entry for strong mode fix to merge (#387)
- fix: Fix #674 - Treeset.first/last failing
- fix: Fix CHANGELOG.md whitespace
- fix: Fix MISSING_RETURN error in concat.dart (#476)
- fix: Fix USES_DYNAMIC_AS_BOTTOM errors (#407)
- fix: Fix bad tail state in LRU map on removal of last entry (#386)
- fix: Fix error when AVLTree root element is removed (#678)
- fix: Fix inconsistently named identifiers (#538)
- fix: Fix memory leak in LruCache (#389)
- fix: Fix missing variable name in fake_async (#380)
- fix: Fix pre-existing HintCode.UNNECESSARY_TYPE_CHECK_TRUE (#686)
- fix: Fix some doc comments (#750)
- fix: Fix some docs (#458)
- fix: Fix unnecessary use of null as initial value (#603)
- fix: Fix use of deprecated dart:io constant. (#460)
- fix: Fix: MultiMap's update signature (#409)
- fix: Revert "Add build_runner-based travis/DDC integration. (#416)" (#433)
- fix: Revert Optional<T extends Object> to Optional<T> (#667)
- fix: Revert change to Optional (#712)
- fix: Un-deprecate Optional to fix Flutter things (#717)
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
google/quiver-dart was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 01d7eb52654c411d17dd4611c8f869fd8e3488a3 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.