
Stop writing the same utility functions in every Flutter project. This library contains 400+ production-hardened extension methods and utilities extracted from a real-world Flutter app with thousands of active users.
π Every utility meets one standard
Each method in this library is held to the same bar β no exceptions:
- World-class code. Pure, tree-shakeable, null-safe Dart that passes
dart analyzeand the fullsaropa_lintsrule set (1,000+ rules) with zero issues.- Detailed documentation. Every public member carries dartdoc that explains the why β the failure mode it guards, the edge cases it handles, and a runnable example.
- Bullet-proof test coverage. Every method is backed by unit tests covering happy paths, empty/null inputs, Unicode, and boundary conditions (5,900+ tests and counting).
If a contribution does not clear all three, it does not ship.
Production-Proven, Not Theoretical
These utilities aren't academic exercisesβthey're dog-fooded daily in Saropa Contacts, a production Flutter app available on both Google Play and the App Store. Every method has been refined through real user feedback and edge cases you only discover in production.
What this means for you:
- Edge cases already handled (empty strings, nulls, Unicode, timezone issues)
- Performance optimized for mobile devices
- API design proven intuitive through actual usage
- Bugs already found and fixed by real users
Why Choose This Library
| Before | After |
|---|---|
text != null && text.isNotEmpty ? text : fallback |
text.orDefault(fallback) |
if (date != null && date.isAfter(start) && date.isBefore(end)) |
date.isBetween(start, end) |
list.length > index ? list[index] : null |
list.itemAt(index) |
"${n}${n == 1 ? 'st' : n == 2 ? 'nd' : ...}" |
n.ordinal() |
| Writing regex for email extraction | text.between("@", ".") |
One import. Zero boilerplate. Full null-safety.
What's Included
π Full index:
CAPABILITIES.mdis a complete, per-symbol catalog β every public utility with a one-line description and its import path, grouped by category. The table below is the high-level map; that file is the searchable detail for teams evaluating the library.
| Category | Scope | Highlights |
|---|---|---|
| String | 110+ extensions, 30+ utils | Case conversion, truncation, wrapping, searching, grammar, diacritics, Unicode-safe ops; Levenshtein, slug/mask/template, diff (Myers), fuzzy search, excerpt, markdown, HTML sanitizer, name parsing |
| DateTime | 50+ extensions, 10+ utils | Age calculation, range checks, date arithmetic, leap years, week numbers; bounds, business days, duration format/parse, fiscal, relative, time rounding, injectable clock |
| List/Iterable | 40+ extensions | Safe access, deduplication, frequency analysis, order-independent comparison; chunks, partition, groupBy, run-length, binary search, rotate |
| Collections | 38 modules | LIS, LCS, sliding window, reservoir sampling, trie, disjoint set, DamerauβLevenshtein, knapsack, bloom filter, n-way merge, ring buffer, multiset, histogram, k-means, weighted interval, string pool, seeded shuffle, and more |
| Graph | 15 modules | BFS/DFS, Dijkstra, A*, connected components, topological sort, MST, critical path, bipartite, tree utils, DAG scheduler |
| Stats | 16 modules | Robust stats, moving average, normalization, quantile summary, correlation, linear regression, confidence intervals, funnel, retention, sampling, outlier (MAD), feature encoding |
| Validation | 12 modules | Validation errors, path/input shaping, guards, cross-field validation, safe temp names, password strength, PII detection, data redaction, safe parse, typed positives, IP/CIDR, JWT structure |
| Async | 22 modules | Debounce, throttle, delay, retry (with backoff/policy), memoize future, sequential/batch, cancel previous, semaphore, mutex, stream buffer/window, exponential backoff, circuit breaker, barrier, timeout policy, race/cancel, idempotent, heartbeat |
| Number | 25+ extensions, 15+ utils | Ordinals (1st, 2nd, 3rd), range clamping, digit ops; math (gcd, lcm), lerp, stats (variance, median, percentile), prime, factorial, locale format/parse, safe division |
| Map | 15+ extensions, 5+ utils | Nested access, pretty printing, null-safe ops; deep merge/copy, flatten keys, diff, invert, pick/omit, transform |
| Parsing | 22 modules | CSV, email, phone (E.164), Luhn, ISBN, SemVer, version compare, hex color, bool, list-from-string; config precedence, CSV dialect, canonicalize JSON, changelog section, JSON diff/patch, nested query, varint |
| Caching | 4 modules | LRU cache, TTL cache, size-limited cache, memoize (sync) |
| URL/Path | 8+ modules | Path join/extension/normalize, URL encode/query/build/absolute, path_more (directory, base name, bearer token) |
| Bool | 8+ | Flexible string parsing ("yes"/"1"/"true"), iterable analysis |
| Niche | 10+ | Color (hex/rgb, luminance, contrast), name (abbreviate, initials), pad/format, random string, hash, string diff, checksum, natural sort, UUID v4 |
| Object/Pipe | 12+ | Pipe, compose, once; nullable (whenNonNull, mapNonNull, tryCast); assert, coalesce, require, shallow copy, copyWithDefaults |
| Utilities | 25+ | JSON validation/type/iterables, Base64, UUID, Hex, HTML entities, gesture types, regex common/match, debug (testing) |
Installation
Run from your project directory:
flutter pub add saropa_dart_utils
Or for a pure Dart project:
dart pub add saropa_dart_utils
Then import it:
import 'package:saropa_dart_utils/saropa_dart_utils.dart';
For minimal bundle size, import only what you use (tree-shaking friendly):
import 'package:saropa_dart_utils/string/string_extensions.dart';
import 'package:saropa_dart_utils/datetime/date_time_extensions.dart';
import 'package:saropa_dart_utils/async/debounce_utils.dart'; // or throttle_utils, retry_utils, etc.
Tree-shaking checklist
Your release binary only carries the utilities you actually call β the barrel import is not a hidden "pull in everything" cost. Confirm:
- β
Barrel or leaf import β same shipped size. Importing
saropa_dart_utils.dartbrings names into scope, not code into the binary. AOT (flutter build,dart compile) anddart compile jskeep only what's reachable from yourmain(). Leaf imports help namespace hygiene and debug-build load time, not release size. - β Extensions shake per method. Call one method on an extension and only that method (plus its transitive calls) survives β not the whole file.
- β
No startup cost from unused code. The package adds no
vm:entry-pointpragmas, nodart:mirrors, and no eager top-level side effects; its internal regex/const helpers are lazyfinals that never run unless a used method touches them. - β οΈ Tree-shaking is a release-build behavior. Debug/JIT runs (
flutter run,dart run) load everything by design β judge size from a release build, never a debug one. - β οΈ Download size is separate.
pub getstill fetches the full source into.pub-cache; that's disk, not app binary, and is unaffected by tree-shaking.
Quick Start Examples
Drop-in solutions for common Flutter development tasks:
String Extensions (110+ methods)
// Null safety
String? text;
text.isNullOrEmpty; // true
"hello".notNullOrEmpty; // true
// Case manipulation
"hello world".titleCase(); // "Hello world"
"hello world".capitalizeWords(); // "Hello World"
// Formatting
"Saropa".wrapSingleQuotes(); // 'Saropa'
"Saropa".encloseInParentheses(); // (Saropa)
// Truncation
"Long text here".truncateWithEllipsis(10); // "Long textβ¦"
// Cleaning
"www.saropa.com".removeStart("www."); // "saropa.com"
" extra spaces ".compressSpaces(); // "extra spaces"
"abc123".removeNonNumbers(); // "123"
// Searching
"test@example.com".between("@", "."); // "example"
// Grammar
"apple".pluralize(3); // "apples"
"John".possess(); // "John's"
"apple".grammarArticle(); // "an"
// Diacritics
"cafe".removeDiacritics(); // "cafe"
DateTime Extensions (50+ methods)
DateTime date = DateTime(2024, 1, 15);
// Comparisons
date.isToday();
date.isBeforeNow();
date.isSameDateOnly(otherDate);
date.isBetween(start, end);
// Manipulation
date.addYears(1);
date.addMonths(2);
date.addDays(10);
date.nextDay();
date.prevDay();
// Age calculation
DateTime(1990, 5, 15).calculateAgeFromNow();
birthDate.isUnder13();
// List generation
DateTime.now().generateDayList(7); // Next 7 days
List Extensions (30+ methods)
// Comparison
[1, 2, 3].equalsIgnoringOrder([3, 2, 1]); // true
['a', 'a', 'b'].topOccurrence(); // 'a'
// Safe access
[1, 2, 3].itemAt(10); // null (no exception)
// Null-safe operations
items.addIfNotNull(maybeNull);
// Deduplication
[1, 2, 2, 3].unique(); // [1, 2, 3]
Number Extensions (25+ methods)
// Ordinals
1.ordinal(); // "1st"
22.ordinal(); // "22nd"
// Range operations
15.forceBetween(1, 10); // 10
5.isBetween(1, 10); // true
// Digit counting
12345.countDigits(); // 5
Iterable Extensions (10+ methods)
[1, 2, 3, 4, 5].randomElement();
[1, 2, 3].containsAll([1, 2]);
[1, 2, 3, 4, 5].countWhere((n) => n > 3); // 2
Map Extensions (15+ methods)
{'name': 'John', 'age': 30}.formatMap(); // Pretty print
data.removeKeys(['a', 'c']);
Bool Extensions (8+ methods)
"true".toBool(); // true
[true, true, true].allTrue; // true
[false, false].allFalse; // true
Enum Extensions (2+ methods)
enum Status { active, inactive }
Status.values.byNameTry("active"); // Status.active
Status.values.byNameTry("invalid"); // null (safe)
Status.values.byNameTry("ACTIVE", caseSensitive: false); // Status.active
Utility Classes (25+ methods)
// Hex
HexUtils.intToHex(255); // "FF"
HexUtils.hexToInt("FF"); // 255
// Random
CommonRandom.randomInt(1, 10);
CommonRandom.randomDouble(0.0, 1.0);
// URL
Uri.parse("https://example.com?key=value").hasQueryParameter("key"); // true
Async (debounce, throttle, retry, circuit breaker, and more)
// Debounce a callback (no-arg)
final debouncedSearch = debounce(() => fetchSuggestions(), Duration(milliseconds: 300));
debouncedSearch(); // call when user types; runs after 300 ms of no further calls
// Retry with exponential backoff
final result = await retryWithBackoff(() => http.get(uri), maxAttempts: 3);
// Limit concurrency
final semaphore = AsyncSemaphore(2);
await semaphore.run(() => heavyWork());
Collections, Graph, Stats, Validation
// Longest increasing subsequence (top-level function)
lisLength([3, 1, 4, 1, 5, 9, 2, 6]); // 4
// Shortest distances from source (Dijkstra)
final distances = dijkstraDistances(weightedGraph, source);
// Safe parsing (no-throw, returns ParseOk/ParseErr)
final result = safeParse(int.parse, formValue);
final width = result.valueOrNull; // int? (null if parse failed)
Real-World Use Cases
These aren't contrived examplesβthey're patterns we use constantly:
// User profile display
String displayName = user.firstName.capitalizeWords();
String initials = "${user.firstName.firstChar}${user.lastName.firstChar}";
String age = birthDate.calculateAgeFromNow().toString();
// Form validation
bool isValidInput = email.notNullOrEmpty && phone.removeNonNumbers().length >= 10;
// Date logic for subscriptions
bool isTrialActive = signupDate.addDays(14).isAfterNow();
bool isBirthdayThisMonth = birthDate.isSameMonth(DateTime.now());
// Safe API response handling
String? city = response['address']?.getChildString('city');
List<String> tags = (response['tags'] as List?)?.unique() ?? [];
// UI text formatting
String preview = longDescription.truncateWithEllipsis(100);
String itemCount = "item".pluralize(cart.length); // "1 item" or "5 items"
Finding opportunities in your project
A CLI tool scans Dart files and suggests places where saropa_dart_utils can replace boilerplate (e.g. name[0].toUpperCase() + name.substring(1) β name.capitalize(), items.sublist(items.length - n) β items.takeLast(n), s ?? '' β s.orEmpty()). Every suggestion is audited against the real API and checked not to degrade your code β it will not push you toward getters like isNullOrEmpty that defeat Dart's null promotion. Run from this repo:
# With path: non-interactive, report to stdout (e.g. for CI)
dart run tool/suggest_saropa_utils.dart /path/to/your/flutter_app
# Without path: interactive β asks Y/N/? for directory, output format, and apply
dart run tool/suggest_saropa_utils.dart
dart run tool/suggest_saropa_utils.dart --help
Only [path], --help, and --version are accepted. Interactive prompts ask for directory, report vs JSON, and whether to apply (apply not yet implemented). Type ? on any prompt for help. No edits are made; use the report to refactor manually.
Lint configuration
This package uses saropa_lints. Some rules are disabled for a pure Dart utility library (e.g. barrel file for the main entry point, non-ASCII in source for Unicode handling, static state for shared RegExp/constants). Others are satisfied by code fixes or inline suppressions (e.g. collapsed ifs in json_utils, named booleans in html_utils, redundant else removed, long-parameter-list and similar-names suppressed where intentional). Rationale for each override or resolution is in analysis_options_custom.yaml.
Documentation
- API Reference β Full method documentation with examples
- GitHub β Source code and issue tracking
- Changelog β Version history
Contributing
We welcome contributions! These utilities grew from solving real problemsβif you've got a helper that's saved you time, it might help others too.
About Saropa
Saropa builds technology for personal safety and emergency preparedness. This utility library was extracted from Saropa Contactsβour production Flutter app for managing trusted emergency contactsβbecause we believe good utilities should be shared, not rewritten.
Libraries
- async/async_barrier_utils
- Async barrier: wait for N events β roadmap #676.
- async/async_more_utils
- async/async_mutex_utils
- Async mutex with tryLock β roadmap #652.
- async/async_semaphore_utils
- Async semaphore with permits (roadmap #651).
- async/batch_async_utils
- async/batch_flush_utils
- Batch/flush: collect events and flush on size/time β roadmap #671.
- async/bounded_work_queue_utils
- Bounded async work queue with backpressure β roadmap #654.
- async/cancel_previous_exception
- async/cancellation_token_utils
- Cooperative cancellation tokens β roadmap #674.
- async/circuit_breaker_utils
- Circuit breaker (closed / open-with-timeout) β roadmap #657.
- async/compute_stream_transformer
- Stream transformer that runs each event through Flutter's
compute()(a one-shot background isolate), keeping CPU-bound per-event work off the UI thread. From Saropa Contacts. - async/debounce_utils
- async/delay_utils
- async/exponential_backoff_utils
- Exponential backoff helper (roadmap #677).
- async/heartbeat_utils
- Heartbeat/keepalive for long-running tasks β roadmap #675.
- async/idempotent_async_utils
- Idempotent async wrapper (deduplicate concurrent calls by key) β roadmap #668.
- async/memoize_future_utils
- async/observability_utils
- Observability helpers: wrap operations with timing and outcome hooks β roadmap #680.
- async/race_cancel_utils
- Race producers, first success wins β roadmap #667. Losers are NOT cancelled (they run fire-and-forget to completion; only their results are dropped).
- async/rate_limiter_utils
- Token-bucket rate limiter β roadmap #670.
- async/read_write_lock_utils
- Async read/write lock β roadmap #653.
- async/resource_pool_utils
- Async resource pool with a fixed maximum size β roadmap #666.
- async/retry_policy_utils
- Retry policy (fixed, backoff, jitter) β roadmap #656.
- async/retry_utils
- async/sequential_async_utils
- async/sliding_window_rate_limiter_utils
- Sliding-window-log rate limiter β roadmap #685.
- async/stream_buffer_utils
- Stream buffering (bufferCount, bufferTime-style) β roadmap #664.
- async/stream_combine_utils
- Stream join/zip/combineLatest operators β roadmap #661.
- async/stream_debounce_utils
- Debounce a stream: emit an item only after a quiet gap. Roadmap #185.
- async/stream_window_utils
- Stream windowing (time- and count-based) β roadmap #660.
- async/task_scheduler_utils
- Priority task scheduler with a concurrency limit β roadmap #655.
- async/throttle_utils
- async/timeout_fallback_utils
- async/timeout_policy_utils
- Async timeout with fallback β roadmap #669.
- base64/base64_utils
- base64/gzip_codec_io
- IO-based gzip implementation using
dart:io. - base64/gzip_codec_stub
- Stub gzip implementation for platforms without
dart:io(e.g., web). - bool/bool_iterable_extensions
- bool/bool_sort_extensions
- bool/bool_string_extensions
- caching/cache_interface
- Generic synchronous cache interface + a write-through async adapter β roadmap #523.
- caching/lru_cache
- caching/memoize_sync_utils
- caching/mru_cache
- MRU (most-recently-used) cache with access-frequency tracking β roadmap #509.
- caching/size_limit_cache
- caching/ttl_cache
- caching/write_through_cache
- Write-through and write-back caches over async loaders β roadmap #508.
- collections/backtracking_utils
- Generic depth-first backtracking solver with pruning and result limits (roadmap #486).
- collections/balanced_partition_utils
- Balanced partitioning (K partitions with similar sums) β roadmap #474.
- collections/bimap_utils
- Bi-directional map (keyβvalue both unique) β roadmap #514.
- collections/bin_packing_utils
- Greedy bin packing (items into bins with capacities) β roadmap #475.
- collections/bk_tree_utils
- BK-tree for approximate string matching β roadmap #493.
- collections/bloom_filter_utils
- Bloom filter with tunable false positive rate β roadmap #455.
- collections/chunk_overlap_utils
- Chunk + overlap windows for streaming β roadmap #465.
- collections/columnar_view_utils
- Columnar view of list<Map<String, Object?>> for analytics β roadmap #470.
- collections/constrained_subset_utils
- Weighted random subset selection without replacement β roadmap #476.
- collections/damerau_levenshtein_utils
- Edit distance with transpositions (DamerauβLevenshtein) β roadmap #443.
- collections/dedup_set_expiry_utils
- Deduplicating set with expiry (for idempotency) β roadmap #511.
- collections/dependency_resolver_utils
- Dependency resolver with version constraints β roadmap #540.
- collections/difference_array_utils
- Difference arrays for efficient range updates β roadmap #484.
- collections/disjoint_set_utils
- Disjoint-set / union-find with path compression (roadmap #496).
- collections/fenwick_tree_utils
- Fenwick tree (Binary Indexed Tree) for prefix sums β roadmap #483.
- collections/greedy_set_cover_utils
- Greedy set cover approximation β roadmap #447.
- collections/hierarchical_cluster_utils
- Agglomerative hierarchical clustering (small N) β roadmap #450.
- collections/histogram_utils
- Histogram builder with fixed and quantile-based bins β roadmap #473.
- collections/hyperloglog_utils
- HyperLogLog-lite approximate distinct count β roadmap #454.
- collections/interval_scheduling_utils
- Interval scheduling: max non-overlapping intervals (roadmap #445).
- collections/interval_tree_utils
- Interval tree for overlap (stabbing) queries β roadmap #494.
- collections/inverted_index_utils
- In-memory inverted index for small datasets β roadmap #456.
- collections/item_similarity_utils
- Co-occurrence item-to-item similarity recommender (roadmap #490).
- collections/kmeans_utils
- K-means clustering (small K, small N) β roadmap #449.
- collections/knapsack_utils
- 0/1 Knapsack solver with reconstruction β roadmap #444.
- collections/lazy_combinatorics_utils
- Lazy combinatorial generators β permutations, combinations, cartesian product, power set (roadmap #488).
- collections/lcs_sequence_utils
- Longest common subsequence (LCS) of two lists. Roadmap #69.
- collections/lcs_substring_utils
- Longest common substring (not subsequence) for two lists/strings (roadmap #442).
- collections/lis_utils
- Longest increasing subsequence (LIS) with reconstruction (roadmap #441).
- collections/lru_lfu_cache_utils
- LRU/LFU hybrid eviction cache β roadmap #480.
- collections/min_max_heap_utils
- Min-max heap: a double-ended priority queue β roadmap #499.
- collections/multi_criteria_sort_utils
- Multi-criteria sort with weighted comparators β roadmap #462.
- collections/multi_index_collection_utils
- Multi-index collection β roadmap #505.
- collections/multi_key_group_utils
- Group and aggregate by several keys at once β roadmap #477.
- collections/multiset_utils
- Multi-set (bag) union/intersection/difference β roadmap #464.
- collections/nway_merge_utils
- N-way merge of multiple sorted iterables β roadmap #457.
- collections/online_mean_variance_utils
- Online mean/variance for numeric streams β roadmap #466.
- collections/pareto_frontier_utils
- Pareto frontier / dominance filtering in 2-3 dimensions β roadmap #463.
- collections/pivot_unpivot_utils
- Pivot for tabular data (list of maps) β roadmap #469.
- collections/prefix_frequency_utils
- Prefix frequency table (for autocomplete) β roadmap #481.
- collections/priority_map_utils
- Priority map (priority -> queues) β roadmap #528.
- collections/quickselect_utils
- Quickselect: the k-th smallest/largest element without fully sorting. Roadmap #52.
- collections/reservoir_sampling_utils
- Reservoir sampling for streaming data (roadmap #452).
- collections/ring_buffer_utils
- Ring buffer (bounded queue with overwrite) β roadmap #500.
- collections/rolling_hash_utils
- Rolling hash (RabinβKarp style) for substring search β roadmap #482.
- collections/row_column_table_utils
- Row-oriented vs column-oriented table conversion β roadmap #525.
- collections/run_detection_utils
- Run detection (equal or increasing sequences with metadata) β roadmap #472.
- collections/seeded_shuffle_utils
- Deterministic shuffler with seed β roadmap #529.
- collections/segment_tree_utils
- Segment tree for associative range queries (sum / min / max) β roadmap #495.
- collections/session_clustering_utils
- Gap-based sessionization of timestamped items (roadmap #485).
- collections/similarity_dedup_utils
- Single-link similarity clustering and dedup β roadmap #461.
- collections/skip_list_utils
- Skip list: a probabilistic ordered set β roadmap #502.
- collections/sliding_window_aggregate_utils
- Sliding window aggregations (min/max/sum/avg over moving window) β roadmap #451.
- collections/spatial_grid_utils
- Uniform spatial grid index for 2D points β roadmap #506.
- collections/stable_matching_utils
- Stable matching via Gale-Shapley β roadmap #448.
- collections/stream_quantile_utils
- Exact streaming quantile over a retained sample β roadmap #453.
- collections/string_pool_utils
- Memory-conscious string pool (deduplicate repeating strings) β roadmap #518.
- collections/time_bucket_utils
- Time-bucketed aggregation β roadmap #468.
- collections/time_decay_counter_utils
- Exponential time-decay counter with configurable half-life β roadmap #479.
- collections/timeseries_buffer_utils
- Time-series buffer that keeps recent raw points and down-samples old ones β roadmap #510.
- collections/top_k_heap_utils
- Top-K by key, kept in a bounded sorted buffer β roadmap #459.
- collections/trie_utils
- Trie (prefix tree) with insert/delete/prefix search (roadmap #491).
- collections/weighted_interval_utils
- Weighted interval scheduling (max weight, DP) β roadmap #446.
- collections/window_functions_utils
- Window functions (lag, lead, row_number) over ordered data β roadmap #471.
- color/material_shade
- copy_with/filter_value
- datetime/billing_cycle_utils
- Monthly billing-anniversary math with end-of-month clamping β roadmap #609.
- datetime/business_calendar_utils
- Holiday-aware business calendar β roadmap #593.
- datetime/calendar_diff_utils
- Calendar diff: added / removed / changed events between two snapshots β roadmap #608.
- datetime/calendar_heatmap_utils
- GitHub-style contribution-heatmap data builders β roadmap #603.
- datetime/date_constant_extensions
- datetime/date_constants
- datetime/date_format_preset_utils
- Dashboard date-format presets (short / medium / long) β roadmap #615.
- datetime/date_time_arithmetic_extensions
- datetime/date_time_bounds_extensions
- datetime/date_time_business_days_utils
- datetime/date_time_calendar_extensions
- datetime/date_time_clamp_extensions
- datetime/date_time_compare_age_extensions
- datetime/date_time_comparison_extensions
- datetime/date_time_extensions
- datetime/date_time_fiscal_extensions
- datetime/date_time_intl_display_extensions
- Locale-correct
DateTimedisplay viaintlskeletons β the one opt-in module inlib/datetime/that pulls theintldependency. - datetime/date_time_list_extensions
- datetime/date_time_more_extensions
- datetime/date_time_nullable_extensions
- datetime/date_time_overlap_utils
- datetime/date_time_range_utils
- datetime/date_time_relative_predicate_extensions
- datetime/date_time_relative_utils
- datetime/date_time_timezone_extensions
- datetime/date_time_utils
- datetime/date_time_week_extensions
- datetime/duration_clock_format_extensions
- datetime/duration_format_utils
- datetime/duration_parse_utils
- datetime/hebrew_date_converter
- datetime/humanize_recurrence_utils
- Human-readable text for a simple recurrence rule β roadmap #599.
- datetime/injectable_clock_utils
- Injectable clock for tests (consistent "now") β roadmap #614.
- datetime/iso_interval_parse_utils
- ISO 8601 time-interval parser β roadmap #646.
- datetime/month_weekday_named_extensions
- datetime/month_weekday_utils
- datetime/period_split_utils
- Period splitting (by month/week) β roadmap #610.
- datetime/quiet_hours_utils
- "Quiet hours" helper β roadmap #613.
- datetime/rate_limit_schedule_utils
- Rate-limiting schedule shaper: max N per rolling period plus a cooldown β roadmap #612.
- datetime/recurrence_iterator_utils
- Expand a parsed RRULE into concrete occurrences β roadmap #592.
- datetime/relative_date_bucket_utils
- Relative date bucketing ("today", "yesterday", "last 7 days") β roadmap #616.
- datetime/rrule_parse_utils
- RFC 5545 recurrence-rule (RRULE) parser β a practical subset, roadmap #591.
- datetime/simple_relative_day_utils
- Calendar-day relative classification (
Today/Yesterday/Next Tuesday/Last Month) β pure-Dart, locale-free, with anullescape hatch for dates outside a ~2-month window. - datetime/sla_calculator_utils
- SLA / due-date calculator over business hours + holidays β roadmap #595.
- datetime/time_emoji_utils
- datetime/time_rounding_utils
- Flexible time rounding (nearest 5/10/15 min, ceiling/floor) β roadmap #600.
- datetime/timebox_exception
- Timebox: run within time budget β roadmap #618.
- datetime/timeseries_gap_utils
- Gap detection and grid filling for roughly-regular time series β roadmap #606.
- double/double_aspect_ratio_extensions
- double/double_close_to_extensions
- double/double_extensions
- double/double_iterable_extensions
- double/gradient_stop_range
- enum/enum_iterable_extensions
- flutter/color_extensions
- flutter/material_color_utils
- gesture/gesture_utils
- gesture/swipe_properties
- graph/astar_utils
- A* shortest path with pluggable heuristic β roadmap #534.
- graph/bfs_dfs_utils
- BFS/DFS traversal with hooks (roadmap #532).
- graph/bipartite_utils
- Bipartite graph check and partitioning β roadmap #546.
- graph/connected_components_utils
- Connected components (and optionally SCC) β roadmap #537.
- graph/critical_path_utils
- Critical path (longest path in DAG) β roadmap #550.
- graph/dag_scheduler_utils
- DAG-based task scheduler (topological + priorities) β roadmap #558.
- graph/dijkstra_utils
- Dijkstra shortest path on weighted graphs (roadmap #533).
- graph/floyd_warshall_utils
- All-pairs shortest paths (FloydβWarshall) β roadmap #536.
- graph/graph_diff_utils
- Graph diff (added/removed/changed edges) β roadmap #553.
- graph/graph_serialize_utils
- Compact text serialization for adjacency-list graphs β roadmap #554.
- graph/graph_simplify_utils
- Graph simplification: collapse degree-2 chains β roadmap #545.
- graph/graph_utils
- Graph representation helpers: adjacency list / weighted edges (roadmap #531).
- graph/hierarchy_utils
- Hierarchy flattener and builder from flat list with parent ids β roadmap #556, #557.
- graph/line_simplify_utils
- Line simplification (DouglasβPeucker) β roadmap #547.
- graph/mst_utils
- Minimum spanning tree (Kruskal) β roadmap #538.
- graph/multi_source_bfs_utils
- Multi-source breadth-first search on unweighted graphs (roadmap #535).
- graph/pagerank_utils
- PageRank via power iteration on a directed graph (roadmap #541).
- graph/path_enumeration_utils
- Enumerate all simple paths between two nodes (roadmap #543).
- graph/reachability_utils
- Transitive closure / reachability of a directed graph (roadmap #551).
- graph/topological_sort_utils
- Topological sort with cycle detection β roadmap #539.
- graph/tree_utils
- Tree utilities (LCA, depth, subtree size) β roadmap #555.
- hex/hex_utils
- html/html_entity_data
- html/html_utils
- int/int_extensions
- int/int_iterable_extensions
- int/int_nullable_extensions
- int/int_string_extensions
- int/int_utils
- iterable/comparable_iterable_extensions
- iterable/iterable_cartesian_extensions
- iterable/iterable_diff_extensions
- iterable/iterable_extensions
- iterable/iterable_first_last_extensions
- iterable/iterable_flatten_deep_extensions
- iterable/iterable_flatten_extensions
- iterable/iterable_group_by_extensions
- iterable/iterable_indexed_extensions
- iterable/iterable_list_ops_extensions
- iterable/iterable_map_not_null_extensions
- iterable/iterable_min_max_extensions
- iterable/iterable_more_extensions
- iterable/iterable_none_extensions
- iterable/iterable_pairs_extensions
- iterable/iterable_sort_extensions
- iterable/iterable_split_extensions
- iterable/iterable_stable_sort_extensions
- iterable/iterable_sum_by_extensions
- iterable/iterable_symmetric_diff_extensions
- iterable/occurrence
- iterable/run_length_utils
- json/json_epoch_scale
- json/json_iterables_utils
- json/json_type_utils
- json/json_utils
- list/list_binary_search_extensions
- list/list_default_empty_extensions
- list/list_extensions
- list/list_lower_extensions
- list/list_mutate_during_iteration_extensions
- Safe mutation-during-iteration for lists. Closes the suite's
concurrent-modificationcrash family (Suite Integration plan, R3): adding to or removing from a list inside a plainfor-inover that same list throwsConcurrentModificationError. - list/list_nullable_extensions
- list/list_nullable_string_sort_extensions
- list/list_of_list_extensions
- list/list_rotate_extensions
- list/list_shuffle_seeded_extensions
- list/list_string_extensions
- list/list_top_k_extensions
- list/make_list_extensions
- list/unique_list_extensions
- map/deep_equality_utils
- Deep equality for nested maps and lists.
- map/deep_freeze_utils
- Deep freeze: recursively unmodifiable views of maps, lists, and sets. Roadmap #90.
- map/map_deep_merge_extensions
- map/map_deep_utils
- map/map_default_extensions
- map/map_diff_utils
- map/map_extensions
- map/map_flatten_extensions
- map/map_from_entries_extensions
- map/map_initials_sort_extensions
- map/map_invert_extensions
- map/map_merge_extensions
- map/map_more_extensions
- map/map_nested_extensions
- map/map_nullable_extensions
- map/map_pick_omit_extensions
- map/map_transform_extensions
- niche/checksum_utils
- niche/color_utils
- niche/dark_colors
- niche/hash_utils
- niche/name_utils
- niche/natural_sort_utils
- niche/niche_more_utils
- niche/pad_format_utils
- niche/random_string_utils
- niche/string_diff_utils
- num/math_utils
- GCD, LCM, and related integer math.
- num/num_clamp_extensions
- num/num_compact_parse_extensions
- num/num_extensions
- num/num_factorial_utils
- num/num_format_extensions
- num/num_intl_format_extensions
- Locale-aware number formatting via
intl's CLDR data β an opt-in module that pulls theintldependency, mirroringdate_time_intl_display_extensions.dart. - num/num_iterable_extensions
- num/num_lerp_utils
- num/num_locale_utils
- num/num_min_max_utils
- num/num_modulo_utils
- num/num_more_extensions
- num/num_prime_utils
- num/num_range_extensions
- num/num_range_inclusive_extensions
- num/num_round_multiple_extensions
- num/num_safe_division_extensions
- num/num_stats_utils
- num/num_utils
- num/unit_conversion_utils
- object/assert_utils
- object/cast_utils
- object/coalesce_utils
- object/copy_with_defaults_utils
- object/default_value_extensions
- object/identity_utils
- object/nullable_more_extensions
- object/pipe_compose_utils
- Pipe (chain unary functions). Compose (f(g(x))). Once (run block only once). Roadmap #246-248.
- object/pipe_utils
- Also/let style (pipe value through function). Roadmap #202.
- object/require_utils
- object/shallow_copy_utils
- Shallow copy list/map. Roadmap #207.
- parsing/accept_language_utils
- Parse an HTTP
Accept-Languageheader into ranked language ranges. Roadmap #159. - parsing/canonicalize_json_utils
- Canonicalization (sort keys, normalize) for JSON-like data β roadmap #639.
- parsing/changelog_section_utils
- Changelog/semantic version section parser β roadmap #431.
- parsing/config_precedence_utils
- Config precedence resolver: defaults β overlay (roadmap #644).
- parsing/cron_utils
- Parse a standard 5-field cron expression and compute its next run time. Roadmap #158.
- parsing/csv_dialect_utils
- CSV/TSV dialect detector (roadmap #435).
- parsing/csv_parse_utils
- parsing/csv_writer_utils
- CSV writer with configurable dialect and RFC 4180 auto-quoting β roadmap
#622. The inverse of parseCsvLine in
csv_parse_utils.dart. - parsing/email_validation_utils
- parsing/expression_evaluator_utils
- Safe expression evaluator (arithmetic + boolean) β roadmap #634.
- parsing/flatten_explode_utils
- Flatten nested data and explode arrays for tabular/BI export β roadmap #648.
- parsing/hex_color_utils
- parsing/http_header_parse_utils
- Parse common HTTP caching headers without any HTTP dependency β roadmap #632.
- parsing/ini_parser_utils
- INI /
.envconfiguration parser β roadmap #626. - parsing/isbn_utils
- parsing/json_diff_patch_utils
- JSON diff/patch (simple key-level) β roadmap #624.
- parsing/json_model_mapper_utils
- Read typed fields from decoded JSON, collecting errors instead of throwing β roadmap #637.
- parsing/json_path_utils
- Read a value from decoded JSON by a simple dotted/indexed path. Roadmap #157.
- parsing/json_pretty_print_utils
- Pretty-print decoded JSON with configurable indentation and key sorting β roadmap #436.
- parsing/json_schema_utils
- Declarative schema validation for JSON-like data β roadmap #636.
- parsing/log_line_parser_utils
- Template-driven log line parser β roadmap #631.
- parsing/luhn_utils
- parsing/nested_query_parser_utils
- Query string parser with nested keys (a
c) β roadmap #628. - parsing/parse_bool_utils
- parsing/parse_list_utils
- parsing/parser_error_utils
- Rich parser error (line/column, context) β roadmap #647.
- parsing/parsing_more_utils
- parsing/phone_normalize_utils
- parsing/range_header_utils
- Parse an HTTP
Rangerequest header (bytes=unit only). Roadmap #160. - parsing/semver_utils
- parsing/size_parse_utils
- parsing/sql_filter_utils
- SQL-like filter for in-memory rows β roadmap #633.
- parsing/stable_hash_utils
- Order-stable structural checksum with no crypto dependency β roadmap #649.
- parsing/validate_non_empty_utils
- parsing/varint_utils
- Varint encoding/decoding (Protobuf-style) β roadmap #635.
- parsing/version_compare_utils
- parsing/version_parse_utils
- random/common_random
- regex/regex_common_utils
- regex/regex_match_utils
- saropa_dart_utils
- Saropa Dart Utils - Boilerplate reduction tools and human-readable extension methods by Saropa.
- stats/bucketed_aggregate_utils
- Bucketed aggregation (sum/count/avg/min/max per bucket) β roadmap #570.
- stats/cdf_utils
- Empirical CDF and cumulative histogram for numeric samples β roadmap #574.
- stats/change_point_cusum_utils
- Two-sided CUSUM change-point detection (roadmap #568).
- stats/confidence_interval_utils
- Confidence interval for mean (normal approximation) β roadmap #562.
- stats/correlation_utils
- Correlation coefficients (Pearson) β roadmap #563.
- stats/data_binning_utils
- Data binning helpers: width, quantile, boundary, counts (roadmap #585).
- stats/data_normalization_utils
- Data normalization (z-score, min-max scaling) β roadmap #576.
- stats/feature_encoding_utils
- Feature scaling/encoding (bucketization, one-hot) β roadmap #589.
- stats/funnel_utils
- Funnel analysis (drop-off between ordered steps) β roadmap #580.
- stats/gini_utils
- Gini coefficient β inequality measure in
0, 1(roadmap #573). - stats/grouped_stats_utils
- Per-key descriptive statistics over an iterable β roadmap #571.
- stats/linear_regression_utils
- Simple linear regression β roadmap #564.
- stats/log_transform_utils
- Log/exp transforms for analytics β roadmap #575.
- stats/metric_rollup_utils
- Metric roll-up (daily β weekly β monthly) β roadmap #587.
- stats/moving_average_utils
- Moving averages: simple, exponential (roadmap #565).
- stats/outlier_mad_utils
- Outlier detection by MAD / Z-score β roadmap #467.
- stats/percentile_rank_utils
- Percentile rank and inverse percentile β roadmap #583.
- stats/quantile_summary_utils
- Quantile summary (percentiles, median, quartiles) β roadmap #572.
- stats/retention_utils
- Retention curves (N-day retention) β roadmap #581.
- stats/robust_stats_utils
- Robust statistics: MAD, trimmed mean (roadmap #561).
- stats/rolling_correlation_utils
- Rolling (sliding-window) Pearson correlation (roadmap #577).
- stats/sampling_utils
- Sampling helpers (stratified, systematic) β roadmap #584.
- string/acronym_extract_utils
- Acronym/initialism extractor (e.g. "Saropa Dart Utils (SDU)") β roadmap #429.
- string/apply_patch_utils
- Apply patch (edit script) to string with validation (roadmap #403).
- string/between_result
- string/code_block_extract_utils
- Code block detector/extractor from mixed text (roadmap #422).
- string/did_you_mean_utils
- "Did you mean?" over dictionary (Levenshtein) β roadmap #426.
- string/diff_render_utils
- Diff β colored/HTML/ANSI unified diff renderer (roadmap #402).
- string/duplicate_doc_utils
- Near-duplicate document detector via fingerprints β roadmap #438.
- string/email_quote_strip_utils
- Email reply quote stripper (heuristic) β roadmap #424.
- string/excerpt_utils
- Smart excerpt generator: best snippet around query terms with ellipsis (roadmap #410).
- string/fuzzy_search_utils
- Fuzzy search over list of strings with token + edit distance + ranking (roadmap #406).
- string/glob_utils
- Simple glob matching (**/*.dart style).
- string/html_sanitizer_utils
- HTML-to-plain-text reducer (roadmap #439).
- string/human_name_parser_utils
- Human name parser (first/middle/last/suffix) β roadmap #409.
- string/icu_message_utils
- ICU-style message formatting lite: pluralization and
select(gender) β roadmap #414. - string/keyphrase_utils
- TF-IDF keyphrase extraction over a small corpus β roadmap #432.
- string/language_detect_utils
- Heuristic n-gram language detector (lite, best-effort) β roadmap #428.
- string/levenshtein_utils
- Levenshtein (edit) distance and similarity ratio for strings.
- string/markdown_plain_utils
- Markdown to plain text (strip markup, keep structure) β roadmap #420.
- string/markdown_snippet_utils
- Markdown snippet extractor (heading sections, first code block) β roadmap #419.
- string/myers_diff_utils
- Myers diff for strings: minimal edit script (roadmap #401).
- string/ngram_utils
- N-gram generator for strings β character and word n-grams (roadmap #405).
- string/redline_utils
- Line-based redline / track-changes diff generator β roadmap #433.
- string/safe_html_excerpt_utils
- Safe HTML excerpt (truncate without breaking tags) β roadmap #440.
- string/search_index_utils
- Simple in-memory search index (term frequency scoring) β roadmap #407.
- string/search_query_parser_utils
- Simplified search query parser (AND/OR, quotes, minus) β roadmap #418.
- string/sensitive_scrub_utils
- Sensitive data scrubber with pluggable patterns (roadmap #425).
- string/slug_dedup_utils
- Slug deduplicator: append incremental suffixes based on taken slugs (roadmap #411).
- string/soundex_utils
- Soundex phonetic encoding for English names.
- string/spelling_key_lookup_utils
- Spelling-tolerant key lookup (canonical β variants) β roadmap #416.
- string/string_analysis_extensions
- string/string_ansi_extensions
- string/string_between_extensions
- string/string_case_acronym_extensions
- string/string_case_extensions
- string/string_character_extensions
- string/string_compare_extensions
- string/string_csv_extensions
- string/string_diacritics_extensions
- string/string_extensions
- string/string_folded_compare_extensions
- string/string_highlight_extensions
- string/string_indent_extensions
- string/string_key_value_extensions
- string/string_line_extensions
- string/string_lower_extensions
- string/string_manipulation_extensions
- string/string_mask_extensions
- string/string_more_extensions
- string/string_nullable_extensions
- string/string_number_extensions
- string/string_punctuation
- string/string_regex_extensions
- string/string_replace_n_extensions
- string/string_search_extensions
- string/string_slug_extensions
- string/string_split_extensions
- string/string_template_extensions
- string/string_text_extensions
- string/string_truncate_middle_extensions
- string/string_unicode_extensions
- string/string_utils
- string/string_wildcard_extensions
- string/string_words_extensions
- string/string_wrap_extensions
- string/template_engine_utils
- Simple template engine:
{{key}}substitution only, no eval β roadmap #413. - string/text_chunk_utils
- Text segmentation into chunks for indexing (size and sentence boundaries) β roadmap #430.
- string/text_diff_structured_utils
- Structured diff of two texts by sentences and by words β roadmap #415.
- string/text_direction_parse_utils
- Pure-Dart parser for the CSS/HTML/Unicode
ltr/rtldirection tokens. - string/text_fingerprint_utils
- Text fingerprinting (order-sensitive word-hash) β roadmap #417.
- string/text_fold_utils
- Quote-aware text folding/unfolding (email-reply style) β roadmap #412.
- string/text_normalize_pipeline_utils
- Text normalization pipeline (composable steps) β roadmap #408.
- string/text_similarity_utils
- Text similarity score (cosine similarity over TF vectors) β roadmap #437.
- string/tokenize_sentences_utils
- Tokenize text into sentences and words (roadmap #404).
- string/tokenizer_pipeline_utils
- Customizable tokenizer pipeline: ordered regex rules with keep/skip β roadmap #434.
- string/unicode_class_blocks
- string/unicode_class_type
- string/unicode_class_utils
- string/url_extract_utils
- URL/link extractor with context (roadmap #423).
- suite/crash_coverage_audit
- Saropa Suite β remediation coverage audit (Suite Integration plan, R3).
- suite/rule_remediation_map
- Saropa Suite β rule-to-remediation mapping (Suite Integration plan, R1).
- testing/debug_utils
- Testing/Debug: pretty-print, dump iterable, assert equals with tolerance, range, repeat, timed. Roadmap #366-375.
- typed_data/uint8list_extensions
- url/path_extension_utils
- url/path_join_utils
- url/path_more_utils
- url/uri_pattern_utils
- URI path-template matcher with typed params β roadmap #630.
- url/url_absolute_utils
- url/url_build_utils
- url/url_canonicalize_utils
- Canonicalize a URL so equivalent links compare equal. Roadmap #175.
- url/url_encode_utils
- URL encode/decode (component vs full). Safe decode. Roadmap #166, #171.
- url/url_extensions
- url/url_query_utils
- url/url_template_utils
- URI template expansion (RFC 6570 subset) β roadmap #629.
- uuid/uuid_utils
- uuid/uuid_v4_utils
- validation/cross_field_validation_utils
- Cross-field validation (start < end, one-of required) β roadmap #682.
- validation/data_redaction_utils
- Data redaction policies (masking per field path) β roadmap #692.
- validation/guard_utils
- Defensive coding helpers (guard patterns, invariants) β roadmap #700.
- validation/input_shaping_utils
- Input shaping: clamp/normalize numbers, trim/limit strings β roadmap #696.
- validation/ip_cidr_utils
- IP/CIDR utilities (subnet contains, range checks) β roadmap #686.
- validation/jwt_structure_utils
- JWT structural checks (no crypto) β roadmap #688.
- validation/password_strength_utils
- Password strength estimation (entropy heuristics) β roadmap #687.
- validation/path_validator_utils
- Robust file path validators (prevent traversal, normalize) β roadmap #693.
- validation/pii_detector_utils
- PII detector for free-form text β roadmap #691.
- validation/safe_parse_utils
- Safe parsing wrappers (no-throw, rich error) β roadmap #695.
- validation/safe_temp_name_utils
- Safe temp-file naming (randomized, collision-resistant) β roadmap #694.
- validation/typed_positive_utils
- Typed non-empty/positive wrappers with validation β roadmap #697.
- validation/validation_error_utils
- Normalized error model (code, message, details) for validation (roadmap #683).