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

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

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.

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. x == null || x.isEmptyx.isNullOrEmpty, s ?? ''s.orEmpty()). 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

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/cancel_previous_exception
async/circuit_breaker_utils
Circuit breaker (open/half-open/closed) — roadmap #657.
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/race_cancel_utils
Race with cancellation (first success wins, cancel rest) — roadmap #667.
async/retry_policy_utils
Retry policy (fixed, backoff, jitter) — roadmap #656.
async/retry_utils
async/sequential_async_utils
async/stream_buffer_utils
Stream buffering (bufferCount, bufferTime-style) — roadmap #664.
async/stream_window_utils
Stream windowing (time- and count-based) — roadmap #660.
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
bool/bool_iterable_extensions
bool/bool_string_extensions
caching/lru_cache
caching/memoize_sync_utils
caching/size_limit_cache
caching/ttl_cache
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/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/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/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/greedy_set_cover_utils
Greedy set cover approximation — roadmap #447.
collections/histogram_utils
Histogram builder with fixed and quantile-based bins — roadmap #473.
collections/interval_scheduling_utils
Interval scheduling: max non-overlapping intervals (roadmap #445).
collections/inverted_index_utils
In-memory inverted index for small datasets — roadmap #456.
collections/kmeans_utils
K-means clustering (small K, small N) — roadmap #449.
collections/knapsack_utils
0/1 Knapsack solver with reconstruction — roadmap #444.
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/multi_criteria_sort_utils
Multi-criteria sort with weighted comparators — roadmap #462.
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/pivot_unpivot_utils
Pivot and unpivot 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/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/sliding_window_aggregate_utils
Sliding window aggregations (min/max/sum/avg over moving window) — roadmap #451.
collections/stream_quantile_utils
Stream quantile estimation (P²-style approximate) — 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/top_k_heap_utils
Top-K by key via min-heap — 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.
datetime/date_constant_extensions
datetime/date_constants
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_comparison_extensions
datetime/date_time_extensions
datetime/date_time_fiscal_extensions
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_utils
datetime/date_time_timezone_extensions
datetime/date_time_utils
datetime/date_time_week_extensions
datetime/duration_format_utils
datetime/duration_parse_utils
datetime/injectable_clock_utils
Injectable clock for tests (consistent "now") — roadmap #614.
datetime/period_split_utils
Period splitting (by month/week) — roadmap #610.
datetime/relative_date_bucket_utils
Relative date bucketing ("today", "yesterday", "last 7 days") — roadmap #616.
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.
double/double_extensions
double/double_iterable_extensions
enum/enum_iterable_extensions
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_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/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_min_max_extensions
iterable/iterable_more_extensions
iterable/iterable_pairs_extensions
iterable/iterable_sort_extensions
iterable/iterable_split_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_nullable_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/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_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/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_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
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
object/pipe_utils
object/require_utils
object/shallow_copy_utils
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/csv_dialect_utils
CSV/TSV dialect detector (roadmap #435).
parsing/csv_parse_utils
parsing/email_validation_utils
parsing/hex_color_utils
parsing/isbn_utils
parsing/json_diff_patch_utils
JSON diff/patch (simple key-level) — roadmap #624.
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/semver_utils
parsing/size_parse_utils
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/confidence_interval_utils
Confidence interval for mean (normal approximation) — roadmap #562.
stats/correlation_utils
Correlation coefficients (Pearson) — roadmap #563.
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/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/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 sanitizer: allowlist tags/attributes, strip scripts/styles (roadmap #439).
string/human_name_parser_utils
Human name parser (first/middle/last/suffix) — roadmap #409.
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/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_csv_extensions
string/string_diacritics_extensions
string/string_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_unicode_extensions
string/string_utils
string/string_wildcard_extensions
string/string_words_extensions
string/string_wrap_extensions
string/template_engine_utils
Simple template engine (conditionals, no eval) — roadmap #413.
string/text_chunk_utils
Text segmentation into chunks for indexing (size and sentence boundaries) — roadmap #430.
string/text_fingerprint_utils
Text fingerprinting (simhash-style) — roadmap #417.
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/url_extract_utils
URL/link extractor with context (roadmap #423).
testing/debug_utils
url/path_extension_utils
url/path_join_utils
url/path_more_utils
url/url_absolute_utils
url/url_build_utils
url/url_encode_utils
URL encode/decode (component vs full). Safe decode. Roadmap #166, #171.
url/url_extensions
url/url_query_utils
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).