{"adoption": {"forks": 19, "observed_at": "2026-08-28T04:05:35.544058+00:00", "stars": 1781}, "canonical_url": "https://ross.abutalabs.com/products/string", "card": {"archived": false, "artifact_type": "library", "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", "domain": ["programming-languages", "developer-tools", "text-editors"], "enriched": true, "function": ["nlp", "internationalization", "developer-tools"], "health_score": 97, "homepage": "https://symfony.com/string", "language": "PHP", "license": "MIT", "license_family": "permissive", "maturity": "stable", "member_repos": ["symfony/string"], "name": "symfony/string", "platform": ["php", "cross-platform"], "pushed_at": "2026-07-29T11:57:47+00:00", "repo": "symfony/string", "stars": 1781, "tags": ["strings", "unicode", "utf-8", "grapheme-clusters", "slugger", "inflector", "symfony-component", "object-oriented-api", "localization"], "topics": ["php", "symfony", "component", "symfony-component", "string", "utf8", "unicode", "grapheme", "i18n", "utf-8"], "urls": [], "use_cases": ["manipulate unicode strings safely in php", "handle emoji and grapheme clusters in text processing", "generate url slugs from arbitrary text", "pluralize and singularize english words", "work with utf-8 code points instead of bytes", "truncate and pad multibyte strings correctly", "normalize string case for internationalized content"], "what_it_is": "A PHP library from the Symfony ecosystem providing an object-oriented API for string manipulation that uniformly handles bytes, UTF-8 code points, and grapheme clusters. It also includes utilities like a slugger and an English inflector for pluralization and singularization.", "when_to_avoid": ["you only need simple ASCII string handling covered by native PHP functions", "you work outside the PHP ecosystem", "you need heavyweight text processing like full NLP or regex-heavy parsing"], "when_to_choose": ["your php project needs correct unicode-aware string operations", "you need slug generation or word inflection out of the box", "you want a consistent string API regardless of mbstring availability", "you are already using Symfony components"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/string", "repo": "symfony/string", "role": "main", "score": 96}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:05:35.544058+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-30T03:24:25.812033+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "0422b6286ca1799f23fa5fb520ee73dae7acdf7a3cc5d63bf8c40ed69686032f", "fetched_at": "2026-08-28T04:05:35.544058+00:00", "kind": "readme", "missing": false, "url": "https://github.com/symfony/string"}, {"content_hash": "b4b9f2ccecb3769015143a3cae733976850a93fae29232d46d833996076bbf01", "fetched_at": "2026-08-29T11:03:08.124638+00:00", "kind": "homepage", "missing": false, "url": "https://symfony.com/string"}, {"content_hash": "44889134f4fb7667fc156f6aa19b524c32df208a02756d59eacc0262725f7bfd", "fetched_at": "2026-08-29T11:03:08.127047+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc"}, {"content_hash": "72f4650b4c928e027020f48e145e6f744ce24d7c24989f0efcfbb444d6aaf177", "fetched_at": "2026-08-29T11:03:08.129064+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/doc/current/components/string.html"}, {"content_hash": "5bd749e2b6762e15759a7073bf28626338d35575d716f7564d4f7323e88c911b", "fetched_at": "2026-08-29T11:03:08.131621+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/releases"}, {"content_hash": "cb9687c6ccb6d4c3923203dc6a3f66a9ff03de40a90514859a66ddf02683b846", "fetched_at": "2026-08-29T11:03:08.133475+00:00", "kind": "site_page", "missing": false, "url": "https://symfony.com/blog/category/releases"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 95, "longevity": 100, "rhythm": 95}, "computed_at": "2026-09-02T17:46:02.011165+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 2524, "days_push": 35, "days_rel": 35, "gap_med": 0, "n_releases_24m": 44}, "score": 96, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}