{"id":33078855,"url":"https://mnater.github.io/Hyphenopoly/","last_synced_at":"2025-11-19T05:03:32.329Z","repository":{"id":5837814,"uuid":"56270491","full_name":"mnater/Hyphenopoly","owner":"mnater","description":"Hyphenation for node and Polyfill for client-side hyphenation.","archived":false,"fork":false,"pushed_at":"2025-01-27T23:22:36.000Z","size":23447,"stargazers_count":715,"open_issues_count":4,"forks_count":46,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-09-11T19:13:34.839Z","etag":null,"topics":["hyphenation","hyphenation-algorithm","javascript"],"latest_commit_sha":null,"homepage":"http://mnater.github.io/Hyphenopoly/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mnater.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":null,"patreon":null,"open_collective":"hyphenopoly","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"lfx_crowdfunding":null,"custom":null}},"created_at":"2016-04-14T21:15:08.000Z","updated_at":"2025-09-06T11:21:12.000Z","dependencies_parsed_at":"2023-09-29T08:52:04.749Z","dependency_job_id":"cdc65ec1-0d90-45c3-a210-0660592a809e","html_url":"https://github.com/mnater/Hyphenopoly","commit_stats":{"total_commits":707,"total_committers":9,"mean_commits":78.55555555555556,"dds":"0.018387553041018356","last_synced_commit":"872c93e028acf040403563504f3c50085a1b6458"},"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/mnater/Hyphenopoly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnater%2FHyphenopoly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnater%2FHyphenopoly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnater%2FHyphenopoly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnater%2FHyphenopoly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mnater","download_url":"https://codeload.github.com/mnater/Hyphenopoly/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mnater%2FHyphenopoly/sbom","scorecard":{"id":654807,"data":{"date":"2025-08-18","repo":{"name":"github.com/mnater/Hyphenopoly","commit":"1005f8c1e227e6583342ee3a397cce0e2a3df8ea"},"scorecard":{"version":"v5.2.1-41-g40576783","commit":"40576783fda6698350fcbbeaea760ff827433034"},"score":3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#packaging"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql-analysis.yml:28","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql-analysis.yml:29","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#token-permissions"}},{"name":"SAST","score":10,"reason":"SAST tool detected: CodeQL","details":["Info: SAST configuration detected: CodeQL","Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#sast"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":0,"reason":"binaries present in source code","details":["Warn: binary detected: docs/dist/js/hyphenopoly/patterns/de..wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/de.wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/en-us..wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/en-us.wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/es..wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/es.wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/it..wasm:1","Warn: binary detected: docs/dist/js/hyphenopoly/patterns/it.wasm:1","Warn: binary detected: docs/min/patterns/af.wasm:1","Warn: binary detected: docs/min/patterns/as.wasm:1","Warn: binary detected: docs/min/patterns/be.wasm:1","Warn: binary detected: docs/min/patterns/bg.wasm:1","Warn: binary detected: docs/min/patterns/bn.wasm:1","Warn: binary detected: docs/min/patterns/ca.wasm:1","Warn: binary detected: docs/min/patterns/cs.wasm:1","Warn: binary detected: docs/min/patterns/cy.wasm:1","Warn: binary detected: docs/min/patterns/da.wasm:1","Warn: binary detected: docs/min/patterns/de-x-syllable.wasm:1","Warn: binary detected: docs/min/patterns/de.wasm:1","Warn: binary detected: docs/min/patterns/el-monoton.wasm:1","Warn: binary detected: docs/min/patterns/el-polyton.wasm:1","Warn: binary detected: docs/min/patterns/en-gb.wasm:1","Warn: binary detected: docs/min/patterns/en-test.wasm:1","Warn: binary detected: docs/min/patterns/en-us.wasm:1","Warn: binary detected: docs/min/patterns/eo.wasm:1","Warn: binary detected: docs/min/patterns/es.wasm:1","Warn: binary detected: docs/min/patterns/et.wasm:1","Warn: binary detected: docs/min/patterns/eu.wasm:1","Warn: binary detected: docs/min/patterns/fi.wasm:1","Warn: binary detected: docs/min/patterns/fo.wasm:1","Warn: binary detected: docs/min/patterns/fr.wasm:1","Warn: binary detected: docs/min/patterns/fur.wasm:1","Warn: binary detected: docs/min/patterns/ga.wasm:1","Warn: binary detected: docs/min/patterns/gl.wasm:1","Warn: binary detected: docs/min/patterns/gu.wasm:1","Warn: binary detected: docs/min/patterns/hi.wasm:1","Warn: binary detected: docs/min/patterns/hr.wasm:1","Warn: binary detected: docs/min/patterns/hsb.wasm:1","Warn: binary detected: docs/min/patterns/hu.wasm:1","Warn: binary detected: docs/min/patterns/hy.wasm:1","Warn: binary detected: docs/min/patterns/ia.wasm:1","Warn: binary detected: docs/min/patterns/id.wasm:1","Warn: binary detected: docs/min/patterns/is.wasm:1","Warn: binary detected: docs/min/patterns/it.wasm:1","Warn: binary detected: docs/min/patterns/ka.wasm:1","Warn: binary detected: docs/min/patterns/kmr.wasm:1","Warn: binary detected: docs/min/patterns/kn.wasm:1","Warn: binary detected: docs/min/patterns/la.wasm:1","Warn: binary detected: docs/min/patterns/lt.wasm:1","Warn: binary detected: docs/min/patterns/lv.wasm:1","Warn: binary detected: docs/min/patterns/mk.wasm:1","Warn: binary detected: docs/min/patterns/ml.wasm:1","Warn: binary detected: docs/min/patterns/mn-cyrl.wasm:1","Warn: binary detected: docs/min/patterns/mr.wasm:1","Warn: binary detected: docs/min/patterns/nb.wasm:1","Warn: binary detected: docs/min/patterns/nl.wasm:1","Warn: binary detected: docs/min/patterns/nn.wasm:1","Warn: binary detected: docs/min/patterns/no.wasm:1","Warn: binary detected: docs/min/patterns/oc.wasm:1","Warn: binary detected: docs/min/patterns/or.wasm:1","Warn: binary detected: docs/min/patterns/pa.wasm:1","Warn: binary detected: docs/min/patterns/pi.wasm:1","Warn: binary detected: docs/min/patterns/pl.wasm:1","Warn: binary detected: docs/min/patterns/pms.wasm:1","Warn: binary detected: docs/min/patterns/pt.wasm:1","Warn: binary detected: docs/min/patterns/rm.wasm:1","Warn: binary detected: docs/min/patterns/ro.wasm:1","Warn: binary detected: docs/min/patterns/ru.wasm:1","Warn: binary detected: docs/min/patterns/sh-cyrl.wasm:1","Warn: binary detected: docs/min/patterns/sh-latn.wasm:1","Warn: binary detected: docs/min/patterns/sk.wasm:1","Warn: binary detected: docs/min/patterns/sl.wasm:1","Warn: binary detected: docs/min/patterns/sq.wasm:1","Warn: binary detected: docs/min/patterns/sr-cyrl.wasm:1","Warn: binary detected: docs/min/patterns/sv.wasm:1","Warn: binary detected: docs/min/patterns/ta.wasm:1","Warn: binary detected: docs/min/patterns/te.wasm:1","Warn: binary detected: docs/min/patterns/th.wasm:1","Warn: binary detected: docs/min/patterns/tk.wasm:1","Warn: binary detected: docs/min/patterns/tr.wasm:1","Warn: binary detected: docs/min/patterns/uk.wasm:1","Warn: binary detected: docs/min/patterns/zh-latn-pinyin.wasm:1","Warn: binary detected: examples/webpack/dist/js/hyphenopoly/patterns/de.wasm:1","Warn: binary detected: examples/webpack/dist/js/hyphenopoly/patterns/en-us.wasm:1","Warn: binary detected: examples/webpack/dist/js/hyphenopoly/patterns/es.wasm:1","Warn: binary detected: examples/webpack/dist/js/hyphenopoly/patterns/it.wasm:1","Warn: binary detected: lang/af/af.wasm:1","Warn: binary detected: lang/as/as.wasm:1","Warn: binary detected: lang/be/be.wasm:1","Warn: binary detected: lang/bg/bg.wasm:1","Warn: binary detected: lang/bn/bn.wasm:1","Warn: binary detected: lang/ca/ca.wasm:1","Warn: binary detected: lang/cs/cs.wasm:1","Warn: binary detected: lang/cy/cy.wasm:1","Warn: binary detected: lang/da/da.wasm:1","Warn: binary detected: lang/de-x-syllable/de-x-syllable.wasm:1","Warn: binary detected: lang/de/de.wasm:1","Warn: binary detected: lang/el-monoton/el-monoton.wasm:1","Warn: binary detected: lang/el-polyton/el-polyton.wasm:1","Warn: binary detected: lang/en-gb/en-gb.wasm:1","Warn: binary detected: lang/en-test/en-test.wasm:1","Warn: binary detected: lang/en-us/en-us.wasm:1","Warn: binary detected: lang/eo/eo.wasm:1","Warn: binary detected: lang/es/es.wasm:1","Warn: binary detected: lang/et/et.wasm:1","Warn: binary detected: lang/eu/eu.wasm:1","Warn: binary detected: lang/fi-x-school/fi-x-school.wasm:1","Warn: binary detected: lang/fi/fi.wasm:1","Warn: binary detected: lang/fo/fo.wasm:1","Warn: binary detected: lang/fr/fr.wasm:1","Warn: binary detected: lang/fur/fur.wasm:1","Warn: binary detected: lang/ga/ga.wasm:1","Warn: binary detected: lang/gl/gl.wasm:1","Warn: binary detected: lang/gu/gu.wasm:1","Warn: binary detected: lang/hi/hi.wasm:1","Warn: binary detected: lang/hr/hr.wasm:1","Warn: binary detected: lang/hsb/hsb.wasm:1","Warn: binary detected: lang/hu/hu.wasm:1","Warn: binary detected: lang/hy/hy.wasm:1","Warn: binary detected: lang/ia/ia.wasm:1","Warn: binary detected: lang/id/id.wasm:1","Warn: binary detected: lang/is/is.wasm:1","Warn: binary detected: lang/it/it.wasm:1","Warn: binary detected: lang/ka/ka.wasm:1","Warn: binary detected: lang/kmr/kmr.wasm:1","Warn: binary detected: lang/kn/kn.wasm:1","Warn: binary detected: lang/la/la.wasm:1","Warn: binary detected: lang/lt/lt.wasm:1","Warn: binary detected: lang/lv/lv.wasm:1","Warn: binary detected: lang/mk/mk.wasm:1","Warn: binary detected: lang/ml/ml.wasm:1","Warn: binary detected: lang/mn-cyrl/mn-cyrl.wasm:1","Warn: binary detected: lang/mr/mr.wasm:1","Warn: binary detected: lang/nb/nb.wasm:1","Warn: binary detected: lang/nl/nl.wasm:1","Warn: binary detected: lang/nn/nn.wasm:1","Warn: binary detected: lang/no/no.wasm:1","Warn: binary detected: lang/oc/oc.wasm:1","Warn: binary detected: lang/or/or.wasm:1","Warn: binary detected: lang/pa/pa.wasm:1","Warn: binary detected: lang/pi/pi.wasm:1","Warn: binary detected: lang/pl/pl.wasm:1","Warn: binary detected: lang/pms/pms.wasm:1","Warn: binary detected: lang/pt/pt.wasm:1","Warn: binary detected: lang/rm/rm.wasm:1","Warn: binary detected: lang/ro/ro.wasm:1","Warn: binary detected: lang/ru/ru.wasm:1","Warn: binary detected: lang/sh-cyrl/sh-cyrl.wasm:1","Warn: binary detected: lang/sh-latn/sh-latn.wasm:1","Warn: binary detected: lang/sk/sk.wasm:1","Warn: binary detected: lang/sl/sl.wasm:1","Warn: binary detected: lang/sq/sq.wasm:1","Warn: binary detected: lang/sr-cyrl/sr-cyrl.wasm:1","Warn: binary detected: lang/sv/sv.wasm:1","Warn: binary detected: lang/ta/ta.wasm:1","Warn: binary detected: lang/te/te.wasm:1","Warn: binary detected: lang/th/th.wasm:1","Warn: binary detected: lang/tk/tk.wasm:1","Warn: binary detected: lang/tr/tr.wasm:1","Warn: binary detected: lang/uk/uk.wasm:1","Warn: binary detected: lang/zh-latn-pinyin/zh-latn-pinyin.wasm:1","Warn: binary detected: patterns/af.wasm:1","Warn: binary detected: patterns/as.wasm:1","Warn: binary detected: patterns/be.wasm:1","Warn: binary detected: patterns/bg.wasm:1","Warn: binary detected: patterns/bn.wasm:1","Warn: binary detected: patterns/ca.wasm:1","Warn: binary detected: patterns/cs.wasm:1","Warn: binary detected: patterns/cy.wasm:1","Warn: binary detected: patterns/da.wasm:1","Warn: binary detected: patterns/de-x-syllable.wasm:1","Warn: binary detected: patterns/de.wasm:1","Warn: binary detected: patterns/el-monoton.wasm:1","Warn: binary detected: patterns/el-polyton.wasm:1","Warn: binary detected: patterns/en-gb.wasm:1","Warn: binary detected: patterns/en-test.wasm:1","Warn: binary detected: patterns/en-us.wasm:1","Warn: binary detected: patterns/eo.wasm:1","Warn: binary detected: patterns/es.wasm:1","Warn: binary detected: patterns/et.wasm:1","Warn: binary detected: patterns/eu.wasm:1","Warn: binary detected: patterns/fi-x-school.wasm:1","Warn: binary detected: patterns/fi.wasm:1","Warn: binary detected: patterns/fo.wasm:1","Warn: binary detected: patterns/fr.wasm:1","Warn: binary detected: patterns/fur.wasm:1","Warn: binary detected: patterns/ga.wasm:1","Warn: binary detected: patterns/gl.wasm:1","Warn: binary detected: patterns/gu.wasm:1","Warn: binary detected: patterns/hi.wasm:1","Warn: binary detected: patterns/hr.wasm:1","Warn: binary detected: patterns/hsb.wasm:1","Warn: binary detected: patterns/hu.wasm:1","Warn: binary detected: patterns/hy.wasm:1","Warn: binary detected: patterns/ia.wasm:1","Warn: binary detected: patterns/id.wasm:1","Warn: binary detected: patterns/is.wasm:1","Warn: binary detected: patterns/it.wasm:1","Warn: binary detected: patterns/ka.wasm:1","Warn: binary detected: patterns/kmr.wasm:1","Warn: binary detected: patterns/kn.wasm:1","Warn: binary detected: patterns/la.wasm:1","Warn: binary detected: patterns/lt.wasm:1","Warn: binary detected: patterns/lv.wasm:1","Warn: binary detected: patterns/mk.wasm:1","Warn: binary detected: patterns/ml.wasm:1","Warn: binary detected: patterns/mn-cyrl.wasm:1","Warn: binary detected: patterns/mr.wasm:1","Warn: binary detected: patterns/nb.wasm:1","Warn: binary detected: patterns/nl.wasm:1","Warn: binary detected: patterns/nn.wasm:1","Warn: binary detected: patterns/no.wasm:1","Warn: binary detected: patterns/oc.wasm:1","Warn: binary detected: patterns/or.wasm:1","Warn: binary detected: patterns/pa.wasm:1","Warn: binary detected: patterns/pi.wasm:1","Warn: binary detected: patterns/pl.wasm:1","Warn: binary detected: patterns/pms.wasm:1","Warn: binary detected: patterns/pt.wasm:1","Warn: binary detected: patterns/rm.wasm:1","Warn: binary detected: patterns/ro.wasm:1","Warn: binary detected: patterns/ru.wasm:1","Warn: binary detected: patterns/sh-cyrl.wasm:1","Warn: binary detected: patterns/sh-latn.wasm:1","Warn: binary detected: patterns/sk.wasm:1","Warn: binary detected: patterns/sl.wasm:1","Warn: binary detected: patterns/sq.wasm:1","Warn: binary detected: patterns/sr-cyrl.wasm:1","Warn: binary detected: patterns/sv.wasm:1","Warn: binary detected: patterns/ta.wasm:1","Warn: binary detected: patterns/te.wasm:1","Warn: binary detected: patterns/th.wasm:1","Warn: binary detected: patterns/tk.wasm:1","Warn: binary detected: patterns/tr.wasm:1","Warn: binary detected: patterns/uk.wasm:1","Warn: binary detected: patterns/zh-latn-pinyin.wasm:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#binary-artifacts"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#branch-protection"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/mnater/Hyphenopoly/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/mnater/Hyphenopoly/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:59: update your workflow using https://app.stepsecurity.io/secureworkflow/mnater/Hyphenopoly/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:72: update your workflow using https://app.stepsecurity.io/secureworkflow/mnater/Hyphenopoly/codeql-analysis.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":0,"reason":"15 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-353f-x4gh-cqq8","Warn: Project is vulnerable to: GHSA-5w6v-399v-w3cc","Warn: Project is vulnerable to: GHSA-mrxw-mxhj-p664","Warn: Project is vulnerable to: GHSA-vvfq-8hwr-qm4m","Warn: Project is vulnerable to: GHSA-22h5-pq3x-2gf2","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-xffm-g5w8-qvg7","Warn: Project is vulnerable to: GHSA-x7hr-w5r2-h6wg","Warn: Project is vulnerable to: GHSA-52f5-9888-hmc6"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/40576783fda6698350fcbbeaea760ff827433034/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T14:22:46.288Z","repository_id":5837814,"created_at":"2025-08-21T14:22:46.288Z","updated_at":"2025-08-21T14:22:46.288Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285187928,"owners_count":27129352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-19T02:00:05.673Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hyphenation","hyphenation-algorithm","javascript"],"created_at":"2025-11-14T11:00:34.713Z","updated_at":"2025-11-19T05:03:32.321Z","avatar_url":"https://github.com/mnater.png","language":"TypeScript","funding_links":["https://opencollective.com/hyphenopoly","https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif","https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=SYNZKB8Z2FRQY","https://opencollective.com/hyphenopoly/donate"],"categories":["Publishing Tools and Platforms"],"sub_categories":[],"readme":"# Hyphenopoly.js\n\n[![CircleCI](https://circleci.com/gh/mnater/Hyphenopoly/tree/master.svg?style=shield)](https://circleci.com/gh/mnater/Hyphenopoly/tree/master)\n[![Coverage Status](https://coveralls.io/repos/github/mnater/Hyphenopoly/badge.svg?branch=master)](https://coveralls.io/github/mnater/Hyphenopoly?branch=master)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/de50e1ae70a64a47b0bd9b5449f89353)](https://app.codacy.com/gh/mnater/Hyphenopoly/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n\nHyphenopoly.js is a __JavaScript-polyfill for hyphenation in HTML__: it hyphenates text if the user agent does not support CSS-hyphenation at all or not for the required languages and it is a __Node.js-module__.\n\nThe package consists of the following parts:\n- _Hyphenopoly_Loader.js_ (~11KB unpacked, ~2KB minified and compressed): feature-checks the client and loads other resources if necessary.\n- _Hyphenopoly.js_ (~36KB unpacked, ~5KB minified and compressed): does the whole DOM-foo and wraps wasm.\n- _wasm-Modules_ (sizes differ! e.g. en-us.wasm: ~21KB uncompressed, ~15KB compressed): core hyphenation functions and hyphenation patterns in a space saving binary format (including pattern license).\n- _hyphenopoly.module.js_: the node module to hyphenate plain text strings.\n\n## Usage (Browser)\nPlace all the code for Hyphenopoly at the top of the header (immediately after the `\u003ctitle\u003e` tag) to ensure resources are loaded as early as possible.\n\nYou'll have to insert two script blocks. In the first block, load Hyphenopoly_Loader.js as an external script.\nIn the second block, provide the initial configurations for Hyphenopoly_Loader as an inline script. This also triggers all further steps.\n\nAlso, don't forget to enable CSS hyphenation.\n\n[Example](http://mnater.github.io/Hyphenopoly/min/example.html):\n```html\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n    \u003chead\u003e\n        \u003cmeta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"\u003e\n        \u003ctitle\u003eExample 1\u003c/title\u003e\n        \u003cscript src=\"./Hyphenopoly_Loader.js\"\u003e\u003c/script\u003e\n        \u003cscript\u003e\n        Hyphenopoly.config({\n            require: {\n                \"la\": \"honorificabilitudinitas\",\n                \"de\": \"Silbentrennungsalgorithmus\",\n                \"en-us\": \"Supercalifragilisticexpialidocious\"\n            },\n            setup: {\n                selectors: {\n                    \".container\": {}\n                }\n            }\n        });\n        \u003c/script\u003e\n        \u003cstyle type=\"text/css\"\u003e\n            body {\n                width:60%;\n                margin-left:20%;\n            }\n            p {\n                text-align: justify;\n                margin: 0 2em 0 0;\n            }\n            .container {\n                display: flex;\n                hyphens: auto;\n                -ms-hyphens: auto;\n                -moz-hyphens: auto;\n                -webkit-hyphens: auto;\n            }\n        \u003c/style\u003e\n    \u003c/head\u003e\n    \u003cbody\u003e\n        \u003ch1\u003eExample 1\u003c/h1\u003e\n        \u003cdiv class=\"container\"\u003e\n            \u003cp lang=\"la\"\u003eQua de causa Helvetii quoque reliquos Gallos virtute praecedunt, quod fere cotidianis proeliis cum Germanis contendunt, cum aut suis finibus eos prohibent aut ipsi in eorum finibus bellum gerunt.\u003c/p\u003e\n            \u003cp lang=\"en-us\"\u003eFor which reason the Helvetii also surpass the rest of the Gauls in valor, as they contend with the Germans in almost daily battles, when they either repel them from their own territories, or themselves wage war on their frontiers.\u003c/p\u003e\n            \u003cp lang=\"de\"\u003eAus diesem Grund übertreffen auch die Helvetier die übrigen Gallier an Tapferkeit, weil sie sich in fast täglichen Gefechten mit den Germanen messen, wobei sie diese entweder von ihrem Gebiet fernhalten oder selbst in deren Gebiet kämpfen.\u003c/p\u003e\n        \u003c/div\u003e\n    \u003c/body\u003e\n\u003c/html\u003e\n```\nLet's go through this example step by step:\n\n### UTF-8\nMake sure your page is encoded as utf-8.\n\n### script blocks – load, configure and run Hyphenopoly_Loader.js\nHyphenopoly_Loader.js needs some information to run. This information is provided as a parameter object to the function `Hyphenopoly.config()`. This information is stored in a globally accessible Object called `window.Hyphenopoly`. Hyphenopoly_Loader.js and (if necessary) Hyphenopoly.js will add other methods and properties only to this object – there will be no other global variables or functions beyond this object.\n\n#### require\nThe configuration object must have exactly one property called `require` which itself is an object containing at least one nameValuePair where the name is a language code string (Some languages are region-specific. See the patterns directory for supported languages. E.g. just using `en` won't work, use `en-us`or `en-gb`) and the value is a long word string in that language (preferably more than 12 characters long).\n\nIf you want to force the usage of Hyphenopoly.js for a language (e.g. for testing purposes), write `\"FORCEHYPHENOPOLY\"` instead of the long word.\n\nHyphenopoly_Loader.js tests if the client (aka browser, aka user agent) supports CSS hyphenation for the language(s) given in `require`. In the example above, it will test if the client supports CSS-hyphenation for Latin, German and US-English.\n\nIf one of the given languages isn't supported, it automatically hides the document's contents and loads Hyphenopoly.js and the necessary WebAssembly modules.\n\nHyphenopoly.js – once loaded – will hyphenate the elements according to the settings and unhide the document when it's done.\n\nIf something goes wrong and Hyphenopoly.js is unable to unhide the document, Hyphenopoly_Loader.js has a timeout that kicks in after some time (defaults to 1000ms) and unhides the document and writes a message to the console.\n\nIf the browser supports all required languages, the script deletes the `Hyphenopoly`-object and terminates without further ado.\n\n### enable CSS-hyphenation\nHyphenopoly by default hyphenates elements (and their children) with the classname `.hyphenate`. Don't forget to enable CSS-hyphenation for the classes eventually handled by Hyphenopoly.\n\n## Usage (node)\nInstall:\n````shell\nnpm i hyphenopoly\n````\n\n````javascript\nimport hyphenopoly from \"hyphenopoly\";\n\nconst hyphenator = hyphenopoly.config({\n    \"exceptions\": {\n        \"en-us\": \"en-han-ces\"\n    },\n    \"hyphen\": \"•\",\n    \"loader\": async (file, patDir) =\u003e {\n        const {readFile} = await import(\"node:fs/promises\");\n        return readFile(new URL(file, patDir));\n    },\n    \"require\": [\"de\", \"en-us\"]\n});\n\nasync function hyphenateEn(text) {\n    const hyphenateText = await hyphenator.get(\"en-us\");\n    console.log(hyphenateText(text));\n}\n\nasync function hyphenateDe(text) {\n    const hyphenateText = await hyphenator.get(\"de\");\n    console.log(hyphenateText(text));\n}\n\nhyphenateEn(\"hyphenation enhances justification.\");\nhyphenateDe(\"Silbentrennung verbessert den Blocksatz.\");\n````\n\n## Support this project\n[![PayPal](https://www.paypal.com/en_US/i/btn/btn_donateCC_LG_global.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick\u0026hosted_button_id=SYNZKB8Z2FRQY)\n\n\u003ca href=\"https://opencollective.com/hyphenopoly/donate\" target=\"_blank\"\u003e\n  \u003cimg src=\"https://opencollective.com/hyphenopoly/donate/button@2x.png?color=blue\" width=300 /\u003e\n\u003c/a\u003e\n\n## Automatic hyphenation\nThe algorithm used for hyphenation was developed by Franklin M. Liang for TeX. It works more or less like this:\n\n1. Load a set of precomputed language specific patterns. The patterns are stored in a structure called a trie, which is very efficient for this task.\n2. Collect all patterns that are a substring of the word to be hyphenated.\n3. Combine the numerical values between characters: higher values overwrite lower values.\n4. Odd values are hyphenation points (except if the hyphenation point is left from `leftmin` and right from `rightmin`), replace them with a soft hyphen and drop the other values.\n5. Repeat steps 2. - 4. for all words longer than minWordLength\n\nExample:\n````text\nHyphenation\nh y p h e n a t i o n\nh y3p h\n      h e2n\n      h e n a4\n      h e n5a t\n         1n a\n          n2a t\n             1t i o\n               2i o\n                  o2n\nh0y3p0h0e2n5a4t2i0o2n\nHy-phen-ation\n````\n\nThe patterns are precomputed and available for many languages on [CTAN](https://www.ctan.org/tex-archive/language/hyphenation/) and [tex-hyphen](https://github.com/hyphenation/tex-hyphen). For Hyphenopoly.js they are converted to a succinct trie data structure (including pattern license, metadata, and the patterns).\n\nThe original patterns are computed from a large list of hyphenated words by a program called `patgen`. They aim to find some hyphenation points – not all – because it's better to miss a hyphenation point than to have some false hyphenation points. Most patterns are really good, but none are error free.\n\nThese patterns vary in size. This is mostly due to the different linguistic characteristics of the languages.\n\n## Contributors ✨\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/StephanHoyer\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54701?v=4?s=100\" width=\"100px;\" alt=\"Stephan Hoyer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eStephan Hoyer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=StephanHoyer\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=StephanHoyer\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://thomasbroadley.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/8731922?v=4?s=100\" width=\"100px;\" alt=\"Thomas Broadley\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eThomas Broadley\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=tbroadley\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://kailueke.gitlab.io/\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1189130?v=4?s=100\" width=\"100px;\" alt=\"Kai Lüke\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKai Lüke\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=pothos\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.data-factory.net/\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/998558?v=4?s=100\" width=\"100px;\" alt=\"Sebastian Blank\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSebastian Blank\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-blankse\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://www.ghsvs.de\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/20780646?v=4?s=100\" width=\"100px;\" alt=\"ReLater\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eReLater\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-ReLater\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/julian-zatloukal\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/58230917?v=4?s=100\" width=\"100px;\" alt=\"julian-zatloukal\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ejulian-zatloukal\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=julian-zatloukal\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://www.neoskop.de/\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/1702250?v=4?s=100\" width=\"100px;\" alt=\"Maik Jablonski\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaik Jablonski\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=jablonski\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/yashha\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/4728786?v=4?s=100\" width=\"100px;\" alt=\"yashha\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eyashha\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=yashha\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"http://danburzo.ro/\"\u003e\u003cimg src=\"https://avatars3.githubusercontent.com/u/205375?v=4?s=100\" width=\"100px;\" alt=\"Dan Burzo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDan Burzo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=danburzo\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"https://github.com/CommanderRoot\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4395417?v=4?s=100\" width=\"100px;\" alt=\"Tobias Speicher\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTobias Speicher\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/mnater/Hyphenopoly/commits?author=CommanderRoot\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n  \u003ctfoot\u003e\n    \n  \u003c/tfoot\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/mnater.github.io%2FHyphenopoly%2F","html_url":"https://awesome.ecosyste.ms/projects/mnater.github.io%2FHyphenopoly%2F","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/mnater.github.io%2FHyphenopoly%2F/lists"}