saropa_dart_utils banner

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.

pub.dev pub points coverage methods style: saropa lints license: MIT

πŸ… 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 analyze and the full saropa_lints rule 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.md is 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.dart brings names into scope, not code into the binary. AOT (flutter build, dart compile) and dart compile js keep only what's reachable from your main(). 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-point pragmas, no dart:mirrors, and no eager top-level side effects; its internal regex/const helpers are lazy finals 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 get still 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.

Google Play App Store

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 DateTime display via intl skeletons β€” the one opt-in module in lib/datetime/ that pulls the intl dependency.
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 a null escape 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-modification crash family (Suite Integration plan, R3): adding to or removing from a list inside a plain for-in over that same list throws ConcurrentModificationError.
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 the intl dependency, mirroring date_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-Language header 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 / .env configuration 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 (ac) β€” 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 Range request 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 / rtl direction 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).