The format is based on Common Changelog, and this project adheres to Semantic Versioning.

[0.3.0] - 2026-05-22

Removed

  • Breaking: remove library-owned application configuration; classical mode is now selected only via per-call classical: true, and custom inflection modules are called directly.

[0.2.3] - 2026-02-16

Changed

  • Rewrite Plurality.Style internals to use prefix slicing instead of per-character iteration, eliminating intermediate allocations

Fixed

  • Preserve casing on PascalCase and camelCase compound words (pluralize("ResourceAttachment") now returns "ResourceAttachments" instead of "resourceattachments")
  • Singularize -se root words correctly (singularize("cases") now returns "case" instead of "cas", along with 82 other common words like horse, nurse, purse, course, verse, pulse, sense, response)

[0.2.2] - 2026-02-15

Changed

  • Default 10 words to modern English plurals (cactus, octopus, fungus, etc.); classical forms remain available via classical: true

Added

  • Add irregulars for compound nouns (attorney general, court-martial, mother-in-law, etc.) and missing -oes words (domino, embargo, mango)
  • Add uncountables: hovercraft, shorts, briefs, leggings, overalls, tweezers
  • Add Ambiguous Words guide documenting known ambiguities with Plurality.Custom override examples

Fixed

  • Correct irregulars and uncountables for trout, glass, head of state, mosquito, veto, axes/axis, court-martial, and others

[0.2.1] - 2026-02-14

Changed

  • Remove non-noun pronoun mappings from the irregulars corpus. Entries like her/their and him/them produced nonsensical cross-mappings (e.g., singularize("their") returned "her")

Fixed

  • Match Plurality.Custom overrides case-insensitively, consistent with the core engine
  • Treat identity irregulars (cat-o'-nine-tails, faux-pas, helium, quartz, sleep) as uncountable
  • Register data files as @external_resource so edits trigger recompilation without mix clean

[0.2.0] - 2026-02-14

Added

  • Add classical mode: classical: true option for Latin/Greek plural forms (69 overrides, 4 suffix rules)
  • Add inflect/3 opts passthrough (e.g., classical: true)
  • Add compound noun handling: multi-word nouns split on last space, last word inflected; known multi-word irregulars take priority
  • Add compound irregular suffix rules: -child-children, -tooth-teeth, -foot-feet, -mouse-mice, -person-people, -fish unchanged
  • Add AGID corpus test suite (32,625 noun pairs verified in both directions)
  • Add NIH SPECIALIST Lexicon test suite (47,566 noun pairs verified in both directions)
  • Add Ash integration (optional, compiles away if Ash is not loaded): changes, validations, and calculations for pluralize/singularize

Fixed

  • Fix -ff words producing -fves plurals (e.g., bluffbluffs instead of blufves)
  • Invert -f pluralization logic: small allowlist of -ves words instead of large blocklist

[0.1.0] - 2025-02-14

Added

  • Add core inflection engine with three-tier resolution: uncountables, irregulars, suffix rules
  • Add pluralize/2 with check: true for safe pluralization
  • Add singularize/1, plural?/1, singular?/1, inflect/2
  • Add case preservation: ALL CAPS, Title Case, lowercase
  • Add Plurality.Custom macro for compile-time domain overrides
  • Add zero-regex suffix engine using last-byte dispatch
  • Merge data from 7 libraries across 5 languages (1,097 irregulars, 1,022 uncountables, 108 suffix rules)